The Mega Drive has 3 defined and proper resolution bits for managing the screen's display width and height. The only Sonic games for the Mega Drive known to utilize one of these special resolution modes are Sonic 2 & Sonic 3D Blast for it's special stages, which is why sometimes you may say a "No Signal" screen if you're using a capture card, as it has to quickly adjust between the two resolutions. It displays with a width of 256 instead of 320. Numerous hacks utilize this as well, such as Sonic Winter Adventures and Sonic is Alone (SIA has the whole game in 256x224 mode). If you (for some reason) would like to utilize this feature, keep reading, because this'll show you how to switch between the two. For displaying a different screen resolution, you would need to display to VDP register $8C00, which is Mode 4 in the VDP modes list. When reading the bits in this register, there are multiple important values to know: Bit 7 and Bit 0: These are two bits which do the same thing but both bits need to be read. If the bits are set to 0, you can reach 256 pixels wide. If it's set to 1, it displays at the normal 320 pixels wide. Bit 2 and Bit 1: These two decide on the vertical resolution. If it's set to 0, we get our familiar 224 pixel high display. If it's set to 1, it enters a special display mode where it displays at 480 pixels tall. We'll touch on that later. To switch display modes, such as when you're entering a special stage, you should first add these variables to the top of your disassembly. I'm going to use Sonic 1's Hivebrain 2005 disassembly for this example. Code: M256x224: equ %00000000 M320x224: equ %10000001 M256x448: equ %00000110 M320x448: equ %10000111 This is a list of every possible combination of display resolutions, each with their own label. Next, to actually switch display resolutions, let's first put this as a macro, for easier use. At the top of your disassembly again, below the labels, define this macro: Code: SetReso macro mode move.w #$8C00|(mode), ($C00004) endm This macro will set the display resolution based on the defined mode, shown as (mode) or mode. Now, we can actually start changing the display resolution. To do that, simply call this macro and choose one of the 4 labels we defined above the macro, like this: Code: SetReso M320x224 ; sets the display resolution to the normal: 320x224 For this example, I'm just going to switch the display resolution to 256x224 when a level starts, so now we go from this: Spoiler: Large Image to this! Spoiler: Large Image Now for the tallest mode, a.k.a: 448 pixels tall mode, VRAM issues WILL occur, and I mean it. 448 mode is exclusively meant for 8x16 tiles, due to the way it displays the sprites, which is why this mode is also called "Interlaced Mode". I would seriously not recommend this mode, unless you want your game looking like this: Spoiler: Large (and painful) Image and that's mostly it! Of course, I should also mention PAL Mega Drives and their extra unused display resolution, which RHS dubs the widescreen effect. To take advantage of that, it would involve the mostly same process, except you're using VDP register $8100. The only bit you're reading this time is Bit 3: If the bit is set to 0, we get the 224 pixel high NTSC mode. However, if you set it to 1, we instead get the 240 pixel high mode, which does take advantage of the unused PAL space! Same applies for the 448 mode, where if it's set to 1, instead of 448, we get 480 pixels high. and... that's all to cover. Again, huge thanks to PlutieDev's website for helping provide this information. Happy hacking!
There is a thread on Sonic Retro talking about how to expand the PAL space & use it properly: Basically everything except the Special Stage.