the cutting room mirror

Super Game Boy

This article has a talk page!
view on tcrf.net

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

Sub-Pages#

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:

Please elaborate.
Having more detail is always a good thing.
Specifically: 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.

(Source: nensondubois and several others who have documented the Super Game Boy 1 and 2 BIOS)

Grey (Default)

Magenta

Yellow

Green

Dark Blue

Dark Red

Inverted

Disabling Super Game Boy Features#

By holding L+Left on boot, the game acts as though it is running on a regular Game Boy, ignoring all SGB features. This can be useful if a game has a link feature that would otherwise be unavailable on a Super Game Boy. For example, Mole Mania has SGB features, but its link functionality is not usable on an SGB or SGB2 normally, since it detects whether it is running on any type of SGB. Because Mole Mania predates the SGB2, it does not detect SGB2 hardware — making this button combo the only way to access link features on an SGB2.1

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 Land

Hoshi no Kirby

2-C

KIRBY'S PINBALL

Kirby's Pinball Land

1-C

YOSSY NO TAMAGO

MARIO & YOSHI

Yossy no Tamago

Yoshi

2-D

YOSSY NO COOKIE

YOSHI'S COOKIE

Yossy no Cookie

Yoshi'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.

(Source: nensondubois)

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

(Source: nensondubois)

References#


  1. スーパーゲームボーイ (Japanese Wikipedia article for Super Game Boy)↩︎