Mega Drive / Genesis / 32x / Mega CD Splash Screen

These are installation instructions for hacks and ROMs on the "Mega Drive" / "Genesis".

As the screen is relative and non-invasive it is also compatible with 32x and Mega CD projects, although installation instructions won't be provided for these.

The splash screen itself is just under 25kb, showing the SHC logo and the web address for access.

(Please note that the above was recorded for SHC2021 and as such there may be minor differences for subsequent years.)

Sonic 1 and Sonic 2

Download: Here

Place the screen in your disassembly folder and include it into the source somewhere (preferably near the end):

    --- Sonic 1 ---
    
    SHC:    incbin "SHC_Sonic12.bin"
                even
    
    --- Sonic 2 ---
    
    SHC:    binclude "SHC_Sonic12.bin"
                even

Now to make the screen run go to the title screen's code:

    --- Sonic 1 (2005) and Sonic 2 (2007 & GIT) ---
    
    TitleScreen:
    
    --- Sonic 1 (GIT) ---
    
    GM_Title:

Look for this line:

                bsr.w ClearScreen

After that line, add this one:

                jsr SHC

The screen is now installed and will run after the SEGA screen.

Sonic 3 & Knuckles

Download: Here

Place the screen in your disassembly folder and include it into the source somewhere (preferably near the end):

    SHC:    binclude "SHC_Sonic3K.bin"
                even

Now to make the screen run, go to the title screen's code (Title_Screen) and look for this line:

                bsr.w Clear_DisplayData

After that line, add this one:

                jsr SHC

The screen is now installed and will run before the SEGA screen.

Other Games / Advanced Users

The splash screen is designed to be non-invasive, has its own internal V-blank, backs up 68k RAM, obtains controller data on its own, clears VDP memory once it is finished, and several other things. Everything it needs is internal and it requires nothing from your own game/hack.

Unfortunately the VDP registers cannot be backed up, and while we have had moderate success in using exploits to obtain some of the registers not all can be obtained. If you are working on a unique project where the registers are different somehow, or you've changed the engine to the point of a different VDP register setup, then this download is for you.

Download: Here

Place the screen in your source, and include it into the source somewhere:

    --- asm68k ---
    
    SHC:    incbin "SHC_Advanced.bin"
    
    --- AS ---
    
    SHC:    binclude "SHC_Advanced.bin"

Then insert a call to the screen where you want it to run:

                jsr    SHC

It is strongly advised that you call the splash screen at a time where the screen has gone black/blank and preferably where you would expect the VDP memory to be cleared. Finally, after the include line; you will need to insert a series of VDP register data bytes that the screen will restore with, here is an example:

    SHC:    incbin "SHC_Advanced.bin"
    
                dc.b    %00000100               ; $80
                dc.b    %01110100               ; $81
                dc.b    ((($C000)>>$0A)&$FF)    ; $82
                dc.b    ((($A000)>>$0A)&$FF)    ; $83
                dc.b    ((($E000)>>$0D)&$FF)    ; $84
                dc.b    ((($F800)>>$09)&$FF)    ; $85
                dc.b    %00000000               ; $86
                dc.b    $20                     ; $87
                dc.b    %00000000               ; $88
                dc.b    %00000000               ; $89
                dc.b    $00                     ; $8A
                dc.b    %00000000               ; $8B
                dc.b    %10000001               ; $8C
                dc.b    ((($FC00)>>$0A)&$FF)    ; $8D
                dc.b    %00000000               ; $8E
                dc.b    $02                     ; $8F
                dc.b    %00000001               ; $90
                dc.b    $00                     ; $91
                dc.b    $00                     ; $92
                even

It is assumed that, if you are using the advanced splash screen, you will know what you are doing and what these registers mean. If you don't know the state of the registers before the splash screen starts then you can find out by adding a +2 to the splash screen call:

                jsr    SHC+2

When the splash screen is run the game should outright freeze with a solid GREEN screen. From here you can then use an emulator that shows VDP registers or make a savestate and get the VDP registers from there. This will be the data that's already in the registers before the screen starts and you can then update the VDP register table above. Once done remove the +2 and the screen should function and restore the VDP properly for your game/hack.

Credits

Graphics and Coding by MarkeyJester (based on logo by Cinossu)
Tested on real hardware by redhotsonic and Ace9921