Notes:Super Game Boy
This page contains notes for the game Super Game Boy.
Starting off abruptly because most of my notes were lost. This page will consist of a few RAM addresses, ROM offsets and general disassembly information explaining various functions about both of the BIOS revisions. This page will also condense the wiki removing games that have SDK listings slabbed here instead. This will take a while to complete. This is not going to be the work of a single editor, as I have no time. Everyone should contribute in some way.
- First: List all games that have SDK command listings and all variations. This DOES NOT include games that have game-specific dummied commands.
- Second: Create a table and delete the pages that have sole listings as their content.
- Third: Explain all command functions.
All games marked with * have sole SDK content.
SDK Game Listing:
- Animal Breeder
- Animal Breeder 2
- Battle Arena Toshinden (Game Boy)
- Chou Mashin Eiyuu Den Wataru: Mazekko Monster 2
- Beatmania GB
- Beatmania GB2: Gotcha Mix
- From TV Animation One Piece: Maboroshi no Grand Line Boukenhen!
- From TV Animation One Piece: Yume no Luffy Kaizokudan Tanjou!
- Juukou Senki Bullet Battlers
- Kuma no Puutarou: Takara Sagashi da Ooiri Game Battle!
- Money Idol Exchanger (Game Boy)
- Monster Rancher Battle Card GB
Contents
Sub-Pages
Games With Unused Commands |
Additional SDK Info
Remnants of attribute file register commands and system palette commands. It is possible to construct the screen division and all other attribute settings forming an extremely vague "shadow" image. The second problem is that it is unknown what palettes go where to reconstruct the SDK image, which could be anything. Here is the complete SDK listing derived from all the long listings found in various games:
01EA4FE003600220013F011F000B0000 - PAL01
09EA4F007C005C00283F05393ADD4E00 - PAL23
11FF7FDA5A9431BF14E001BF02000000 - PAL12
19386B5056883DA0284800393ADD4E00 - ATTR_LIN
2102030901010505020607070E0E0000 - ATTR_BLK
2902AF42000000000000000000000000 - ATTR_CHR
31270600000000000000000000000000 - ATTR_DIV
39000028000000000000005555555555 - ATTR_CHR
41010003000000000000000000000000 - SOUND
49000000000000000000000000000000 - SOU_TRN
510000010002000300C0000000000000 - PAL_SET
59000000000000000000000000000000 - PAL_TRN
61000000000000000000000000000000 - ATTR_EN
69010000000000000000000000000000 - TEST_EN
69000000000000000000000000000000 - TEST_EN
71000000000000000000000000000000 - ICON_EN
7900807E0B0102030405060708090A0B - DATA_SND
8100807F000000000000000000000000 - DATA_TRN
89030000000000000000000000000000 - MLT_REQ
9100807F00887F000000000000000000 - JUMP
99020000000000000000000000000000 - CHR_TRN
A1000000000000000000000000000000 - PCT_TRN
A9000000000000000000000000000000 - ATTR_TRN
B1000000000000000000000000000000 - ATTR_SET
B9010000000000000000000000000000 - MASK_EN
C1010000000000000000000000000000 - OBJ_TRN
510500060007000800C1000000000000 - PAL_SET
41000000010000000000000000000000 - SOUND
99000000000000000000000000000000 - CHR_TRN
B9000000000000000000000000000000 - MASK_EN
21010300000013110000000000000000 - ATTR_BLK
89030000000000000000000000000000 - MLT_REQ
41090000000000000000000000000000 - SOUND
41120000000000000000000000000000 - SOUND
41250000000000000000000000000000 - SOUND
41250001000000000000000000000000 - SOUND
41160002000000000000000000000000 - SOUND
41070000000000000000000000000000 - SOUND
41020000000000000000000000000000 - SOUND
RAM Functions:
- 7E0F0A:?? - MASK_EN enable (00-01).
- 7E0F00:01 - Enable ATR_TRN mode.
- 7E0F04:01 - Enable PAL_TRN mode.
- 7E0F06:01 - Prevents the menu from rendering until selection is made.
- 7E0F07:0? - Enable ICON_EN mode (00 - enable all; 01 - disable palette selection; 02 - disable controller selection; 03 - disable all; 04 - wraparound to 00).
- 7E0F4A:01 - Enables PAL_PRI mode.
- 7E0F4B:01 - Initial border is not forced to load.
- 7E0F4D:01 - Enables PCT_TRN mode.
PAL_SET Games
Games that have black and white palettes via PAL_SET command will display an overlay resembling an in-game setting if the first bit is set to any non-zero value, possibly a remnant of the Super Game Boy Tech Demo or SDK. ATTR_TRN must be set to 00 as it is the only valid attribute file that will display the overlay. Setting the file past 00 will load garbage data. This example images sets the palette to 04.
Game Boy Game Genie codes are provided to show the overlay in-game.
5100000000000000000000000000000
Notable games:
- Daikaijuu Monogatari: Poyon no Dungeon Room - ??1-C7B-E6A
- Super Robot Taisen: Link Battler - ??1-C2B-E6A
- Super B-Daman - Fighting Phoenix - ??1-CFB-E6A
- Chousoku (SS) Spinner - ??1-C2B-E6A
- Tetris Attack - 044-C7C-E6A
Super Game Boy ROM Information:
DATA_SND
Code 0F DATA_SND. Command 79. Data Send. Used to send up to 11 bytes of data per packet to an arbitrary address in SNES WRAM.
Most Super Game Boy enhanced games send the following sequence of DATA_SND packets at startup (The Smurfs and Elite Soccer are two games that do not):
79 5D 08 00 0B 8C D0 F4 60 00 00 00 00 00 00 00 79 52 08 00 0B A9 E7 9F 01 C0 7E E8 E8 E8 E8 E0 79 47 08 00 0B C4 D0 16 A5 CB C9 05 D0 10 A2 28 79 3C 08 00 0B F0 12 A5 C9 C9 C8 D0 1C A5 CA C9 79 31 08 00 0B 0C A5 CA C9 7E D0 06 A5 CB C9 7E 79 26 08 00 0B 39 CD 48 0C D0 34 A5 C9 C9 80 D0 79 1B 08 00 0B EA EA EA EA EA A9 01 CD 4F 0C D0 79 10 08 00 0B 4C 20 08 EA EA EA EA EA 60 EA EA
When the packet headers are stripped and the packet data put in order according to the destination addresses, it forms the following 65816 machine code:
00/0810: 4C 20 08 jmp $0820 00/0813: EA nop 00/0814: EA nop 00/0815: EA nop 00/0816: EA nop 00/0817: EA nop 00/0818: 60 rts 00/0819: EA nop 00/081A: EA nop 00/081B: EA nop 00/081C: EA nop 00/081D: EA nop 00/081E: EA nop 00/081F: EA nop 00/0820: A9 01 lda #$01 00/0822: CD 4F 0C cmp $0C4F 00/0825: D0 39 bne $0860 00/0827: CD 48 0C cmp $0C48 00/082A: D0 34 bne $0860 00/082C: A5 C9 lda $C9 00/082E: C9 80 cmp #$80 00/0830: D0 0C bne $083E 00/0832: A5 CA lda $CA 00/0834: C9 7E cmp #$7E 00/0836: D0 06 bne $083E 00/0838: A5 CB lda $CB 00/083A: C9 7E cmp #$7E 00/083C: F0 12 beq $0850 00/083E: A5 C9 lda $C9 00/0840: C9 C8 cmp #$C8 00/0842: D0 1C bne $0860 00/0844: A5 CA lda $CA 00/0846: C9 C4 cmp #$C4 00/0848: D0 16 bne $0860 00/084A: A5 CB lda $CB 00/084C: C9 05 cmp #$05 00/084E: D0 10 bne $0860 00/0850: A2 28 ldx #$28 00/0852: A9 E7 lda #$E7 00/0854: 9F 01 C0 7E sta $7EC001,x 00/0858: E8 inx 00/0859: E8 inx 00/085A: E8 inx 00/085B: E8 inx 00/085C: E0 8C cpx #$8C 00/085E: D0 F4 bne $0854 00/0860: 60 rts
This code is most likely a patch for some kind of bug in the Super Game Boy BIOS. Revision B of the SGB BIOS and the SGB2 BIOS both contain this code in ROM and copy it to SNES WRAM themselves before booting the inserted Game Boy game.
The code seems to hide the SNES OBJs (objects/sprites) in certain situations. This might have been connected to OBJ_TRN, the SGB command that was supposed to be able to display SNES OBJs, but which was never used (and was stubbed out in later revisions of the SGB). See discussion: https://forums.nesdev.org/viewtopic.php?f=12&t=16610
Some games additionally send the following packets:
To do: Which games? Supposedly games that use the SOUND_TRN command do, but Donkey Kong uses SOUND_TRN and it doesn't send these packets. |
79 00 09 00 0B AD C2 02 C9 09 D0 1A A9 01 8D 00 79 0B 09 00 0B 42 AF DB FF 00 F0 05 20 73 C5 80 79 16 09 00 0B 03 20 76 C5 A9 31 8D 00 42 68 68 79 21 09 00 01 60 00 00 00 00 00 00 00 00 00 00 79 00 08 00 03 4C 00 09 00 00 00 00 00 00 00 00
When stripped and put in order, these packets form the following 65816 machine code, which is also likely to be a bugfix patch:
00/0800: 4C 00 09 jmp $0900 (skip) 00/0900: AD C2 02 lda $02C2 00/0903: C9 09 cmp #$09 00/0905: D0 1A bne $0921 00/0907: A9 01 lda #$01 00/0909: 8D 00 42 sta $4200 00/090C: AF DB FF 00 lda $00FFDB 00/0910: F0 05 beq $0917 00/0912: 20 73 C5 jsr $C573 00/0915: 80 03 bra $091A 00/0917: 20 76 C5 jsr $C576 00/091A: A9 31 lda #$31 00/091C: 8D 00 42 sta $4200 00/091F: 68 pla 00/0920: 68 pla 00/0921: 60 rts
This code seems to disable the H+V IRQ during SOU_TRN.
PAL_PRI
While not technically unused, this feature is obscure enough to note. Code 19 PAL_PRI. Palette Priority. Command C9, when bit 01 is set to 00, palettes switch back to default enhanced palette scheme when directed to by the game when any system palette changes are made.
Notable games that used this feature include Kirby's Dream Land 2, Donkey Kong, Donkey Kong Land, and others.
ICON_EN
Code 0E ICON_EN. Icon Enable. Command 71. Primarily used to disables in-game palette and or controller selection schemes which can be disabled by the game developer; however border selection cannot be disabled. Palette disabling would serve games like Uno 2: Small World where custom Super Game Boy palettes are required in order to play. Games may have overlaid the action window with a custom SNES object or in certain instances where switching away from the intricate palette set would make certain elements of the game look glitched-out or distorted.
Disabling controller menu selection schemes could have been used to prevent the player from abusing the A button and cheating in certain games, or may benefit the player preventing them from skipping over answers in quiz games such as Tokimeki Memorial Pocket: Culture-hen: Komorebi no Melody and Tokimeki Memorial Pocket: Sports-hen: Koutei no Photograph, the only two games that solely disable controller selection schemes.
Alternatively, palettes can be set to revert back to the original once changed by using Super Game Boy command packet C9 and bit set to 01.
Secrets
A few small hidden features exist in the Super Game Boy BIOS, and can be accessed with different L and R combinations.
Screensavers
Enter L, L, L, L, R to enable screensavers for borders 4-10. This won't work with the default "Super Game Boy" border, the black border, or Super Game Boy-enhanced custom borders. Animaniacs, both versions of Wario Land II, and Pocket Densha 1 and 2 are the only Game Boy games to disable screensavers via setting the Super Game Boy command ATRC_EN to bit 01. Different screensavers are available with the new Super Game Boy 2 borders.
Credits
Entering R, R, R, L, L, L, R, R, R, R, R, R, R during gameplay will bring up the Super Game Boy credits. The Super Game Boy 2 features a different credits screen, with new music and flashy neon.
Warning: There is no way to return to the game upon entering the credits save for restarting the system.
Janitor
Draw whatever you want in the graffiti editor, and wait a few minutes; a janitor will clean up your paint! Press any button, and your custom border will return.
Super Game Boy 2
Super Game Boy Borders
Select the black border and press L, L, L, L, R to access the Super Game Boy borders, complete with their respective screensavers. Enter L, L, L, L, R again on the black border to access the Super Game Boy 2 borders.
Change the Super Game Boy 2 border palette
Select the Super Game Boy 2 border and press L, L, L, L, R to cycle through the available palettes: grey (default), magenta, yellow, green, dark blue, dark red, inverted, and back to grey.
Game Boy Internal Name Table
Starting at 0x3F000 is a list of internal ROM names used to detect specific games published or developed by Nintendo prior to 1994 and apply a single predefined palette out of the 32 defaults. Regional and revised versions tend to share internal names and display using the same palette, although in some cases the internal name was changed for different regions and each had to receive their own entry in the table (e.g. YOSSY NO TAMAGO and MARIO & YOSHI are separately defined).
Broadly, supported games tend to have been those published by Nintendo in Japan, though Kid Icarus: Of Myths and Monsters (not released in Japan) is a notable exception. A small handful of pre-Super Game Boy Nintendo games have no specified palette. These include Magnetic Soccer, Play Action Football, Super R.C. Pro-Am, Top Rank Tennis and Wave Race, none of which were released in Japan, and more surprisingly, Radar Mission, which was released worldwide.
Internal Name | Title | Palette |
ZELDA |
The Legend of Zelda: Link's Awakening | 1-E |
SUPER MARIOLAND |
Super Mario Land | 1-F |
MARIOLAND2 |
Super Mario Land 2: 6 Golden Coins | 3-D |
SUPERMARIOLAND3 |
Wario Land: Super Mario Land 3 | 1-B |
KIRBY DREAM LAND HOSHINOKA-BI |
Kirby's Dream LandHoshi no Kirby | 2-C |
KIRBY'S PINBALL |
Kirby's Pinball Land | 1-C |
YOSSY NO TAMAGO MARIO & YOSHI |
Yossy no TamagoYoshi | 2-D |
YOSSY NO COOKIE YOSHI'S COOKIE |
Yossy no CookieYoshi's Cookie | 1-D |
DR.MARIO |
Dr. Mario | 3-B |
TETRIS |
Tetris | 3-A |
YAKUMAN |
Yakuman | 3-C |
METROID2 |
Metroid II: Return of Samus | 4-G |
KAERUNOTAMENI |
Kaeru no Tame ni Kane wa Naru | 2-A |
GOLF |
Golf | 3-H |
ALLEY WAY |
Alleyway | 3-F |
BASEBALL |
Baseball | 2-G |
TENNIS |
Tennis | 3-G |
F1RACE |
F-1 Race | 4-F |
KID ICARUS |
Kid Icarus: Of Myths and Monsters | 2-F |
BALLôôN KID |
Balloon Kid | 1-A (default) |
QIX |
Qix | 4-A |
SOLARSTRIKER |
SolarStriker | 1-G |
X |
X | 4-D |
GBWARS |
Game Boy Wars | 3-E |
Balloon Kid (which appears as BALLôôN KID in the Super Game Boy ROM table, yet is named BALLOON KID in the Game Boy ROM header) uses the default palette. Most likely, Nintendo wanted to acknowledge the game but couldn't find a suitable palette or were too lazy to create a new palette.
Games With Sole SDK Content
Games that have SDK (more than one different SDK are assumed to exist based on differentials in code). It is unknown what revision numbers are associated with each listing.
Initial D Gaiden
Unused Super Game Boy Features
The game loads the entire table in RAM which is unusual. The table is also stored in a standard ROM listing. They are also loaded in the main table but the game never calls nor reads them from joypad registers.
PAL_SET
GameShark code 0180A9CB will load an unused black-and-white palette located at 0x6892.
51000001000200030080000000000000
ATTR_CHR
Present at 0x6872 and loaded at 0x156C is a single unused ATTR_CHR command. It is unknown where this could have been used. Game Genie code 726-0FE-3B4 will load the unused ATTR_CHR instead of ATTR_TRN.
SOUND
Present at 0x2DB4 and loaded at 0x1578 is a single unused SOUND command. It is unknown where this could have been used. Game Genie codes 826-0FE-3B4 ??8-839-E6A ??8-849-E6A ??8-859-E6A ??8-869-E6A will play any internal Super Game Boy sound effect and/or BGM setting replacing ATTR_TRN.
Monopoly
MLT_REQ
Monopoly was at some point going to support 4-Player, which would have worked quite well. The MLT_REQ command (89030) located at 0x68E7. Game Genie code 9E76-0FE-3B4 will load MLT_REQ 03. Joypad registers for all four controllers will not be initiated.
Kuma no Puutarou - Takara Sagashi da Ooiri Game Battle!
Unused Super Game Boy Commands
Kuma no Puutarou - Takara Sagashi da Ooiri Game Battle! is one of the many games that contains a completely unused set of Super Game Boy commands that are likely remnants of a Nintendo tech demo or devkit given to developers to see the many available enhancements in action. Starting at 0x3800 is the full listing.
01EA4FE003600220013F011F000B0000 - PAL01 09EA4F007C005C00283F05393ADD4E00 - PAL23 11FF7FDA5A9431BF14E001BF02000000 - PAL12 19FE6B5C3BDC1A0000F8206559000000 - ATTR_LIN 19FE6BDC3A763A0000DC3A763A000000 - ATTR_LIN 2102030901010505020607070E0E0000 - ATTR_BLK 2902AF42000000000000000000000000 - ATTR_CHR 31270600000000000000000000000000 - ATTR_DIV 39000028000000000000005555555555 - ATTR_CHR 41010003000000000000000000000000 - SOUND 49000000000000000000000000000000 - SOU_TRN 510000010002000300C0000000000000 - PAL_SET 59000000000000000000000000000000 - PAL_TRN 61000000000000000000000000000000 - ATRC_EN 69010000000000000000000000000000 - TEST_EN 69000000000000000000000000000000 - TEST_EN 71000000000000000000000000000000 - ICON_EN 7900807E0B0102030405060708090A0B - DATA_SND 8100807F000000000000000000000000 - DATA_TRN 89030000000000000000000000000000 - MLT_REQ 9100807F00887F000000000000000000 - JUMP 99020000000000000000000000000000 - CHR_TRN A1000000000000000000000000000000 - PCT_TRN A9000000000000000000000000000000 - ATTR_TRN B1000000000000000000000000000000 - MASK_EN B9010000000000000000000000000000 - MLT_REQ C1010000000000000000000000000000 - OBJ_TRN 510500060007000800C1000000000000 - PAL_SET 41000000010000000000000000000000 - SOUND 99000000000000000000000000000000 - CHR_TRN B9000000000000000000000000000000 - MLT_REQ 21010300000013110000000000000000 - PAL 89030000000000000000000000000000 - MLT_REQ 41090000000000000000000000000000 - SOUND 41120000000000000000000000000000 - SOUND 41250000000000000000000000000000 - SOUND 41250001000000000000000000000000 - SOUND 41160002000000000000000000000000 - SOUND 41070000000000000000000000000000 - SOUND 41020000000000000000000000000000 - SOUND 795D08000B8CD0F46000000000000000 - DATA_SND 795208000BA9E79F01C07EE8E8E8E8E0 - DATA_SND 794708000BC4D016A5CBC905D010A228 - DATA_SND 793C08000BF012A5C9C9C8D01CA5CAC9 - DATA_SND 793108000B0CA5CAC97ED006A5CBC97E - DATA_SND 792608000B39CD480CD034A5C9C980D0 - DATA_SND 791B08000BEAEAEAEAEAA901CD4F0CD0 - DATA_SND 791008000B4C2008EAEAEAEAEA60EAEA - DATA_SND