I've reread your notes on the assembly and it makes a little more sense now.
Judging from the code you posted, it just stops outright at the "23" portion of the layout, without much wiggle room in the code to fix that. (It stops at "23 00" but only the "23" is written. To extend the blanking downward we would need to also write a different number into the "00" spot somehow.)
At least changing the starting point helps a lot in terms of making this presentable.
I suppose I could also move the design elements up so that they're easier to blank out.

I've done a build moving design elements upward. It's a compromise but a minor one.
EDIT:
https://drive.google.com/file/d/1WmnktVdIPMQMqQ90Th4Erl8OYzfMINov/view?usp=sharinghttps://drive.google.com/file/d/1RLKH5YW9HiIF6hYA16F6LJadHDAm7XOH/view?usp=sharinghttps://github.com/kmck/smb2/blob/master/src/prg-c-d.asmhttps://github.com/Xkeeper0/smb2/blob/master/src/prg-c-d.asmWorking on the ending. Lot of problems with it at the moment. I am editing PRG C-D.ASM in the disassembly.
Animation of Subcons when freed from jar is very fast and jerky. Looks glitchy.
(Have replaced Subcons with something where the jerkiness doesn't matter as much.)
Ending (Mario dreaming):
Would like cast roll to start a lot sooner.
Nametable and sprites do not clear when scene of Mario dreaming loads. Colors of the player characters from the "contribution screen" are still visible throughout the end credits, which is bizarre. I have written some code to draw over the screen but this does not affect those colors, oddly. The color attributes of the nametable don't change. They might be sprites, as they have sprite colors. But they appear behind the background.
(EDIT: They are sprites. Construction is at 2cF9 and is just the previous construction used on the celebration screen. This means I can't dummy it out.)
(I need to clear RAM 210-247 at the very least, with FF.)
Would like the small sprites of the player characters to remain onscreen throughout.
I have slowed down the frame rate of the "Mario dreaming" animation to 50. I may slow it down further, since my ending is a slide show. One effect of this is that the "Cast list" takes a lot longer to start scrolling. There's a long wait, and I'd like to skip that so that it scrolls much earlier. I don't need the "Mario waking up" animation even.
Screen currently glitches out when the "Mario waking up" animation plays (or possibly when he goes back to sleep, I can't tell), with a glitched palette and nametable. It didn't do that before, so I must have screwed something up somewhere. It loads the code for "MarioDream_BubbleSprites" as palette data. Maybe some pointer got screwed up.
(EDIT: I've figured this out. "Mario Do Nothing" is actually called, but doesn't run because it starts with the terminating byte .db $00 ... I removed this byte so that code is running at some point.)
My code for drawing the "bed" is a different (shorter) length than the original, and I've removed the Bubble drawing code, but I also added code to the unused routine "Mario Does Nothing" to keep things the same length.







My version has 12 very different images, rather than the similar images of Mario in the original.
Because of that, I've removed all code about the bubble and whatnot, because at this point I've only allocated two background tiles to draw the rest of the background. One being blank and one having a little pattern as you can see here.
Mario's layout also allowed for some background elements to be included. That's not true here when I'm using as much space as possible, with only the upper left and right corners dummied out.
There are little sprite versions of the players, but you can also see the four little colored figures standing as colored blocks over where the cutscene should be. I need to remove those somehow, I don't know why that's happening. (EDIT: They are sprites. Hm.)
I would also like the "cast" roll to start a lot sooner.
(The removal of the bubble code is probably causing a pointer to be misplaced which causes the wrong data to be loaded later, when Mario does his waking up animation, or right afterward. It loads the code for "MarioDream_BubbleSprites" as palette data. The code is the same length overall, but is padded during an unused routine to achieve this.)
(I think I've figured this out. "Mario Do Nothing" is actually called, but doesn't run because it starts with the terminating byte .db $00 ... I removed this byte so that code is running at some point.)
Here's another question. There's lots of enemy behavior and construction in PRG 2-3.ASM. For some enemies, a palette number is specified here. For others which use the first palette (red/blue), there's no palette specified. Can I change that somehow?
I would like Birdo to always use Palette 2 ... that seems to be in the ASM code, but building it and copy/pasting it breaks the game unfortunately.
(Ah, the ASM build is off by several digits. I've manually put some changes in the right place and will experiment.)
(EDIT: I've edited Birdo to use Palette 2 throughout, and Cobrat to use Palette 3. There's no options for Ostro it seems, which is a big shame, or for the common enemies.)
Wart, FryGuy, Clawgrip and Mouser seem to load specific palettes for their boss rooms so that's less of a problem. Although it's usually palette 1 which is also used for the health meter and so on, so the player has a strangely colored health meter during the fight.
Notes on throwing:
At 1F31A in the ROM is a construction for the player's throwing animation. I needed a unique sprite of the player's head during the throwing animation, mainly for when the player is small. Normally this uses the same head as walking, which becomes a big problem when you only have eight pixels of height in the leg area to show that the character is throwing. It would be easier to show this in the head area when small.
You could replace the throwing feet with an alternate throwing head. But you don't need to. There's a redundant (Doki Doki Panic styled) sprite of the Albatoss' head at the right of every version of the character's action sheet. It's not used in the game, and can be replaced.
So in the construction, 3C 3E replaces 00 02, and a throwing head sprite replaces the Albatoss head.
I would also like to use the "throwing" version of the head during half of the walk cycle, which again allows for much easier animation when the character is small, as more than the feet can be affected.
This construction is at 1F2F5.
The rest of the Doki Doki Panic Albatoss animation is on the next CHR bank, near Birdo's sprites.
This two-frame animation is different from the eight-frame animation in the US release (only seven of which are used, accidentally), although if it were used it would allow for a ten-frame animation.
So this is also redundant and could be used for something. Not sure what. Maybe as another side for the mirrored items on this sheet, if you don't want these items to be mirrored. Or for Birdo's egg (at 5A40), which is also used as clouds throughout, and is therefore difficult to change to anything else. (Mine is a playing card, so the clouds also became playing cards, which I might as well undo now.)
I'd also like to change crowd behavior when Wart is defeated. There are six animation metasprites for the celebrating Subcons, and this animation relies on them all looking the same. I drew three different crowd members and am looking to alter the code to allow for that. (Possibly 27C3, 27E6, 29AA in the ROM for the celebrating.)
Note that there are lots of unused graphics in the scene celebrating Wart's defeat. There is a cell and lock, money with numbers, and a bunch of items commonly used in the game. Theoretically this allows for a lot of extra graphics.