Skip to main content

Super Game Boy









Please consider supporting The Cutting Room Floor on Patreon. Thanks for all your support!




Super Game Boy



From The Cutting Room Floor



Jump to: navigation, search







Title Screen


Super Game Boy

Developers: Nintendo,
HORI
Publisher:
Nintendo
Platform:
SNES
Released in JP: June 14, 1994 (SGB), January 30, 1998 (SGB2)
Released in US: 1994 (SGB)
Released in EU: 1994 (SGB)




CodeIcon.png This game has unused code.
CopyrightIcon.png This game has hidden developer credits.
DevTextIcon.png This game has hidden development-related text.
GraphicsIcon.png This game has unused graphics.
SoundIcon.png This game has unused sounds.
DebugIcon.png This game has debugging material.
RegionIcon.png This game has regional differences.
Carts.png This game has revisional differences.




NotesIcon.pngThis game has a notes page


The Super Game Boy is a peripheral that's basically the internal components of a Game Boy shoved into a Super NES cartridge, which provides some enhancements like limited color support.


Four years later, Nintendo released the Super Game Boy 2 with some further improvements, such as link cable support. However, this version stayed in Japan.



Contents




  • 1 Unfinished Speed Setting and Useful Features


  • 2 Initial Border Setting


  • 3 Super Game Boy 2 Changes


    • 3.1 Credits Theme


    • 3.2 Added Features




  • 4 Music


  • 5 Unfinished Sound Function


  • 6 Unused Palettes


    • 6.1 Unused Balloon Kid Palette Table Entry


    • 6.2 Custom Palette Test Palette




  • 7 Unused Region Incompatibility Message


  • 8 Unused Drawing Tools


    • 8.1 Crayon




  • 9 Unused and Undocumented Commands


    • 9.1 Super Game Boy 2


    • 9.2 Unused ICON_EN File Register Disable Function


    • 9.3 TEST_EN (Test Enable)


    • 9.4 OBJ_TRN (Object Transfer)


    • 9.5 19 Undocumented Command


    • 9.6 Fx Command Group Used by The SGB Boot ROM




  • 10 Debug Commands


    • 10.1 Speed Function


      • 10.1.1 Speed Setting 1


      • 10.1.2 Speed Setting 2




    • 10.2 Mute Audio




  • 11 Unused Graphics


    • 11.1 Icons




  • 12 Developer Credits




Unfinished Speed Setting and Useful Features


By setting the RAM address 7E0022?? to any non-zero value, or the ROM address 00BF4A85, menus and screensaver animations will play at double speed. Hold A to speed up the cursor, and hold B to enable a turbo function on the A button. Depending on how late in startup the code was enabled, graphical glitches may ensue. 7E0022?? is written to twice during startup and constantly when in-game to check if the bit is set. Either this was used for debugging purposes or it was a legitimate in-game feature that was left unfinished due to button mapping issues, though using L and R would have been fine for the menus. This only affects menus; gameplay is unaffected.


It might also have been intended for a command that would allow proper menu navigation for games that rely heavily on palettes, or even a separate command altogether.




(Source: nensondubois)

Initial Border Setting


If RAM variable 7E0022 is set to a non-zero value, only the default Super Game Boy will load; neither the other preset borders nor custom ones for individual games will load. This may have been used to test the PCT_TRN command.




(Source: nensondubois)

Super Game Boy 2 Changes


Credits Theme





Elementary, my dear Cactus.

This needs some investigation.
Discuss ideas and findings on the talk page.
Specifically: I think I've heard these tunes before... but not in the SGB1/2. Find out what songs these are clones of, please.

The original Super Game Boy uses a swing-esque song for its credits theme, while the Super Game Boy 2 uses a rock-and-roll theme.











Super Game Boy Super Game Boy 2

Added Features


Some added features:



  • Link Cable support.

  • Some new borders were added.

  • LED indicator lights.

  • The clock speed is slowed down to match that of an actual Game Boy; the first Super Game Boy's clock speed (and consequentially any games being played on it) ran slightly faster than a Game Boy's due to the clock speed being based on the SNES master clock.


Music


The credits theme is padded from 02-0F, but only 02 is used. This is necessary to allow games with Super Game Boy soundtracks to store more than two songs in ARAM (temporarily overwriting data in the Super Game Boy sound bank), preventing the APU from crashing when more than two are stored. Pressing X to switch palette settings in-game sets the song to address 00FA39?? 00FA2F00 00FA3B44 (where "??" is 00-0F, varying per game and bank). Setting the music byte to either FE or FF will stop all Super Game Boy audio.


The GB Memory cartridge sets FF right before making the JUMP to the selected game, so these settings are likely used to prepare the APU for the new SNES program code.




(Source: nensondubois)

Unfinished Sound Function


Pressing X to swap between custom and default palettes plays a glass shattering sound effect. An unfinished function exists that assigns each of the 34 palette settings one of the 48 Super Game Boy sound effects. These sound effect effects can all be heard in sound tests for a handful of games, like Real Bout Special (Fatal Fury) and Nettoh Beast Wars.


SNES PAR code 00FA2EF0 00FA2C?? re-enables this feature. Setting the bit to 03 will play the first 34 sounds, while setting the bit to 01 will play the rest of the sounds starting from palette column 1.




(Source: nensondubois)

Unused Palettes


Unused Balloon Kid Palette Table Entry


Balloon Kid SGB Palette Title.png

As documented over on the Notes page, the Super Game Boy applies a predetermined palette to a number of pre-SGB, monochrome Game Boy games. These aren't truly unique palettes, but rather chosen from the standard palettes available for selection by the user. However, unlike the many other Nintendo-published games, Balloon Kid does not have a quasi-unique palette applied automatically, because its entry in the palette table is for the Game Boy ROM with internal name BALLôôN KID instead of BALLOON KID. Even if the palette assignment were to be active, this entry simply assigns the default palette. Perhaps a suitable palette could not be found, or the default palette was felt to look best, and so manually assigning one was unnecessary. Regardless, Balloon Kid looks the same with or without this palette table entry.


(Source: nensondubois)


Custom Palette Test Palette


SGB Unused Palette.png

Leaving the custom palette at default will cause a test palette to appear. SNES PAR code 0081A705 00D04721 will cause any game that uses the default 1-A palette to display this unused palette instead. Creating a custom palette will replace the default setting for the duration of the game.




(Source: nensondubois)


Unused Region Incompatibility Message


Super Game Boy Unused Region Error Screen.png

This message appears in the first Japanese revision of the Super Game Boy BIOS when attempting to play the cartridge on a PAL SNES. The text for this screen can be found at 0x3F98A.


SNES PAR code 0081D806 or Game Genie code D162-04DD will start up all later Super Game Boy 1 and 2 BIOS revisions at this screen. Since the Game Boy isn't region-locked, Nintendo probably felt this screen was unnecessary, so it was scrapped. The screen was also never updated to use the Super Game Boy 2's rainbow font.




(Source: nensondubois)


Unused Drawing Tools


Crayon


Super Game Boy Unused Crayon.png

Pro Action Replay code 7E01820D enables an otherwise-unused blue-green crayon that comes in miniature and huge sizes! An icon fitting the palette scheme also exists.


so cute!


(Source: nensondubois)


Unused and Undocumented Commands


Several Super Game Boy command packets were never used by any commercially-released game, or never seem to have an actual effect on gameplay. Interestingly enough, roughly 60% of all Super Game Boy enhanced games have all of the commands in some form in their code at least, likely remnants of a tech demo or an SDK devkit. Wario Land II is notable for having a completely unused sound table listing.


Super Game Boy 2


Alternate enhancements can be given to games when played using a Super Game Boy 2 adapter, done by examining the internal value of the CPU's A register on start-up: 01 is for normal Game Boy or Super Game Boy and FF denotes Super Game Boy 2. Tetris DX is the only known example, displaying an alternate border.


Unused ICON_EN File Register Disable Function


A feature to disable files from being sent to the SGB BIOS with the *_TRN command exists, but is never used by any game. It can be accessed by setting bit 01 to 04, or using SNES PAR code 7E0F0704. Attract-specific attributes will not work, so only four palettes will be shown on the screen.


TEST_EN (Test Enable)


Code 0D, command 69. It speeds up the inserted game to twice normal, resulting in graphical glitches and potentially game crashes. The TEST_EN packet is disabled by default (bit set to 00). Mini 4 Boy II calls TEST_EN during startup, though the bit 01 is never set, so nothing actually happens. World Jet Heroes 2 has been said to enable TEST_EN through using the Turbo Mode cheat, though the game merely speeds up.


The official Super Game Boy NOA/NOE programming document actually defines TEST_EN as "Use prohibited"; its actual function is not explained anywhere except in the Japanese documents. This is likely the case because a programming glitch in the first revision of the Super Game Boy BIOS is present where the command points to a RET instruction.


This command's handler is a stub in at least the SGBv2 ROM, therefore it does absolutely nothing.


OBJ_TRN (Object Transfer)


Code 18, command C1. Displays up to 24 entries of scrollable 8×8 or 16×16 SNES objects on the screen using a palette of up to 256 colors.


Real Bout Special Fatal Fury and Bomberman Quest both call OBJ_TRN, even though neither game loads data into the SNES VRAM. Pokonyan! Yume no Daibouken and Pocket Love 2 had the initial idea to use objects for the title screen during development, but aside from a few traces of data, this feature was dropped. CHR for the completed title screen in Monster Rancher Battle Card GB exists.)


When SNES object mode is enabled, screensavers are disabled, giving the same effect as the command ATRC_EN with bit 01 set to 01. This is likely because the SNES's CPU speed would be heavily invested in drawing and reading the objects from the game.


Like TEST_EN, the official NOA/NOE Super Game Boy programming document defines this feature as "use prohibited". Understandable, since it would task both the SNES and Game Boy CPUs. Practically speaking it would be most useful for title screens and cutscenes, since the bottom part of the Game Boy screen would be used to transfer object data as well.


The command's handler is stubbed on SGBv2 and SGB2, therefore it does nothing on both of these versions. A lot of games using Nintendo's SDK (for example, Pokémon Red/Blue) transfer a patch to disable the functionality.


(Source: Martin Korth)

Here are the unused OBJ_TRN caveats.


Byte: Setting:
0 Command*8+Length (fixed length=1)
1 Control Bits
Bit 0 - SNES OBJ Mode enable (0=Cancel, 1=Enable)
Bit 1 - Change OBJ Colour (0=No, 1=Use definitions below)
Bit 2-7 - Not used (zero)
2-3 System Colour Palette Number for OBJ Palette 4 (0-511)
4-5 System Colour Palette Number for OBJ Palette 5 (0-511)
6-7 System Colour Palette Number for OBJ Palette 6 (0-511)
8-9 System Colour Palette Number for OBJ Palette 7 (0-511)
Palette entries are ignored if control bits above 1 are set to 0.
Because each OBJ palette consists of 16 colours, four system
palette entries (of 4 colours each) are transferred into each
OBJ palette. Specific system palette numbers are not required to be
a multiple of 4 and will wrap to palette number 0 when above 511.
For example, a value of 511 would copy system palettes 511, 0, 1, and 2
to the SNES OBJ palette.
A-F Not used (zero)

The recommended method is to "display" Game Boy BG tiles from F9h-FFh left to right as the first 7 characters of the Game Boy's bottom character line. As for normal 4KByte VRAM transfers, this area should not be scrolled, should not be overlapped by Game Boy OBJs, and the Game Boy GBP palette register should be set up to avoid conflicting with the normal in-game palettes. SNES OAM data can be defined in the 70h bytes of the Game Boy BG tile memory at following addresses:


 8F90-8FEF  SNES OAM, 24 Entries of 4 bytes each (96 bytes)
8FF0-8FF5 SNES OAM MSBs, 24 Entries of 2 bits each (6 bytes)
8FF6-8FFF Not used, don't care (10 bytes)

The format of SNES OAM entries are:


 Byte 0  OBJ X-Position (0-511; MSB is separately stored, see below)
Byte 1 OBJ Y-Position (0-255)
Byte 2-3 Attributes (16bit)
Bit 0-8 Tile Number (use only 00h-FFh, upper bit zero)
Bit 9-11 Palette Number (use only 4-7)
Bit 12-13 OBJ Priority (use only 3)
Bit 14 X-Flip (0=Normal, 1=Mirror horizontally)
Bit 15 Y-Flip (0=Normal, 1=Mirror vertically)

The format used for SNES OAM MSB entries is unknown. However, 2 bits are used per entry: one bit is the most significant bit of the OBJ X-Position, and the other specifies the OBJ size (8×8 or 16×16 pixels).


19 Undocumented Command





Hmmm...

To do:
But what does it do? Also, investigate other undocumented commands on other SGB revisions.

Donkey Kong '94 sends the SGB a command with ID 19. This command appears to be the only undocumented command whose handler is not stubbed (at least on SGBv2).


(Source: LIJI32, original TCRF research)

Fx Command Group Used by The SGB Boot ROM


The undocumented, odd-numbered Fx commands F1, F3, F5, F7, F9 and FB are used by the internal boot ROM in the Game Boy CPU for transferring the cartridge header data to the SGB BIOS on startup. The SGB BIOS then validates the cartridge header to determine whether the cartridge is allowed to run, and whether the SGB functionality will be enabled.


These commands seem to depart from the usual command structure of specifying the command code in the upper 5 bits of the first byte, and the length of the transfer in the lower 3 bits. Instead, as used by the boot ROM, they are sent sequentially as individual 16 byte packets and the lower 3 bits do not indicate the number of packets to be sent. Perhaps for these particular commands, the top 7 bits denote the command code, and the lowest bit denotes the length? Each packet has the following structure:


 Byte 0  Command number.
Byte 1 Checksum of the packet. (lower 8 bits of the sum of bytes 2-F)
Byte 2-F 14 data bytes to be transferred.

The SGB boot ROM transfers bytes 0104-014F, which is 76 bytes. The SGB boot ROM transfers 14*6=84 bytes, and the last 8 bytes in the transfer are zero-padded.


Here is example output from the SGB boot ROM, when starting Tetris DX. Captured using BGB's SGB packet monitor.


1 1E unknown  F1.70.CE.ED 66.66.CC.0D 00.0B.03.73 00.83.00.0C
1 1E unknown F3.60.00.0D 00.08.11.1F 88.89.00.0E DC.CC.6E.E6
1 1E unknown F5.59.DD.DD D9.99.BB.BB 67.63.6E.0E EC.CC.DD.DC
1 1E unknown F7.5C.99.9F BB.B9.33.3E 54.45.54.52 49.53.20.44
1 1F unknown F9.45.58.00 00.00.00.00 00.80.30.31 03.03.04.02
1 1F unknown FB.2B.00.33 00.30.C8.00 00.00.00.00 00.00.00.00

(Source: nitro2k01)



If a game sends the F5 after it has been booted, it makes the palettes and sounds start cycling. The video at right shows an example of this effect using Pro Mahjong Kiwame GB and Game Genie code F6F-C8C-E6F. Try entering VS mode to trigger the command.


(Source: nensondubois)




Hmmm...

To do:
Investigate other SGB revisions: SGBv0, SGBv1, and SGB2.

The SGBv2 firmware, after booting, explicitly discards these commands (commands with ID greater than $1D are ignored, so both $1E and $1F), and all commands with IDs greater than $19 have stub handlers and thus do nothing.


(Source: Original TCRF research)


Debug Commands


A few debug commands remain, presumably intentionally since the Super Game Boy Commander controller makes use of them. It is impossible to enter these codes by hand, as button presses are read at precisely 25ms.


Speed Function


Speed Setting 1


During gameplay, press L, R, R, L, L, R to set the DMG CPU speed to Slower (~2.37mhz per cycle), Slow (~3.05mhz per cycle), and finally Normal ( ~4.3mhz per cycle).


Speed Setting 2


Hold Up on the D-PAD during startup, and then press L, R, R, L, L, R during gameplay to set the speed to Faster (~5.35Mhz per cycle; will result in graphical glitches), Slower (~2.37mhz per cycle), Slow (~3.05mhz per cycle), and Normal (~4.3mhz per cycle).


Mute Audio


Press R, L, L, R, R, L to mute all sound from the BIOS and game. Press R, L, L, R, R, L again to restore sound. Muting and unmuting while an enhanced song plays will turn it off until a new song is played or the current song is reset. Programs running directly off the Super Game Boy, like Space Invaders, won't be muted. This also affects the credits screen if the volume is muted.




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

Unused Graphics


Icons


Super Game Boy - Unused Game Menu Icon 1.png


Loaded with the main in-game menu. Could have been used for anything.


Super Game Boy - Unused Game Menu Icon 2.png


Loaded with the main in-game menu. Might have been an "undo" or "return to default settings" icon.


Super Game Boy - Unused Palette Graffiti Icon.png


Loaded along with the custom palette and graffiti tiles is what looks like an early background for the easel.




(Source: nensondubois)

Developer Credits


A staff roll can be seen by pressing L x3 R x3, L x3, R x7 when the Super Game Boy logo appears. This works best when there's no cartridge inserted. The SGB 2 ROM contains both staff rolls, but only uses the one for the SGB 2.


However, after the texts for the staff rolls, there's a small compile date that goes used. The SGB has
94!03!06 17:30
, while the SGB 2 has
97!8!19
.



























































































































Retrieved from "https://tcrf.net/index.php?title=Super_Game_Boy&oldid=630188"





Navigation menu
























if(window.jQuery)jQuery.ready();if(window.mw){
mw.loader.state({"mw.PopUpMediaTransform":"loading","site":"loading","user":"ready","user.groups":"ready"});
}if(window.mw){
document.write("u003Cscript src="https://tcrf.net/load.php?debug=falseu0026amp;lang=enu0026amp;modules=mw.PopUpMediaTransformu0026amp;only=scriptsu0026amp;skin=vectoru0026amp;*"u003Eu003C/scriptu003E");
}if(window.mw){
mw.loader.load(["mediawiki.toc","mediawiki.action.view.postEdit","mediawiki.user","mediawiki.hidpi","mediawiki.page.ready","mediawiki.searchSuggest","ext.uls.pt"],null,true);
}if(window.mw){
document.write("u003Cscript src="https://tcrf.net/load.php?debug=falseu0026amp;lang=enu0026amp;modules=siteu0026amp;only=scriptsu0026amp;skin=vectoru0026amp;*"u003Eu003C/scriptu003E");
}
var pkBaseURL = (("https:" == document.location.protocol) ? "https://stats.tcrf.net/" : "http://stats.tcrf.net/");
document.write(unescape("%3Cscript src='" + pkBaseURL + "piwik.js' type='text/javascript'%3E%3C/script%3E"));

try {
var piwikTracker = Piwik.getTracker(pkBaseURL + "piwik.php", 2);
piwikTracker.trackPageView();
piwikTracker.enableLinkTracking();
} catch( err ) {}


if(window.mw){
mw.config.set({"wgBackendResponseTime":299});
}

Popular posts from this blog

Mario Kart Wii

The Binding of Isaac: Rebirth/Afterbirth

What does “Dominus providebit” mean?