Skip to content

Instantly share code, notes, and snippets.

@ISSOtm
Created January 5, 2019 16:33
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ISSOtm/55ac09eff8f4dbc0218426eaccebc814 to your computer and use it in GitHub Desktop.
Save ISSOtm/55ac09eff8f4dbc0218426eaccebc814 to your computer and use it in GitHub Desktop.
How the SGB checks for monochrome games (taken from SGB1v2 firmware)
.80:BF56 .A8
.80:BF56 .I8
.80:BF56
.80:BF56 ; =============== S U B R O U T I N E =======================================
.80:BF56
.80:BF56 ; Some ROMs have special menu features (probably a different default color palette)
.80:BF56
.80:BF56 CheckSpecialMenuFeatures: ; CODE XREF: CheckROMCompatibility+1C↑p
.80:BF56 REP #110000b
.80:BF58 .A16
.80:BF58 .I16
.80:BF58 STZ D, EightBitCounter
.80:BF5A
.80:BF5A loc_80BF5A: ; CODE XREF: CheckSpecialMenuFeatures+1C↓j
.80:BF5A LDX D, EightBitCounter
.80:BF5C JSR CheckROMName
.80:BF5F BEQ done
.80:BF61 LDA asc_87F011, X ; orig=0x7F011
.80:BF65 CMP #$FFFF
.80:BF68 BEQ done
.80:BF6A LDA D, EightBitCounter
.80:BF6C CLC
.80:BF6D ADC #$11
.80:BF70 STA D, EightBitCounter
.80:BF72 BRA loc_80BF5A
.80:BF74 ; ---------------------------------------------------------------------------
.80:BF74
.80:BF74 done: ; CODE XREF: CheckSpecialMenuFeatures+9↑j
.80:BF74 ; CheckSpecialMenuFeatures+12↑j
.80:BF74 SEP #110000b
.80:BF76 .A8
.80:BF76 .I8
.80:BF76 RTS
.80:BF76 ; End of function CheckSpecialMenuFeatures
.80:BF76
.80:BF77 .A16
.80:BF77 .I16
.80:BF77
.80:BF77 ; =============== S U B R O U T I N E =======================================
.80:BF77
.80:BF77
.80:BF77 CheckROMName: ; CODE XREF: CheckSpecialMenuFeatures+6↑p
.80:BF77 LDA ROMNameList, X ; orig=0x7F000
.80:BF7B CMP CommandPackets+$38 ; orig=0x0638 ; The header is currently located in the CommandPackets buffer
.80:BF7E BNE locret_80BFD2
.80:BF80 LDA ROMNameList+2, X ; orig=0x7F002
.80:BF84 CMP CommandPackets+$3A ; orig=0x063A
.80:BF87 BNE locret_80BFD2
.80:BF89 LDA ROMNameList+4, X ; orig=0x7F004
.80:BF8D CMP CommandPackets+$3C ; orig=0x063C
.80:BF90 BNE locret_80BFD2
.80:BF92 LDA byte_87F006, X ; orig=0x7F006
.80:BF96 CMP CommandPackets+$3E ; orig=0x063E
.80:BF99 BNE locret_80BFD2
.80:BF9B LDA byte_87F008, X ; orig=0x7F008
.80:BF9F CMP CommandPackets+$42 ; orig=0x0642
.80:BFA2 BNE locret_80BFD2
.80:BFA4 LDA byte_87F00A, X ; orig=0x7F00A
.80:BFA8 CMP CommandPackets+$44 ; orig=0x0644
.80:BFAB BNE locret_80BFD2
.80:BFAD LDA byte_87F00C, X ; orig=0x7F00C
.80:BFB1 CMP CommandPackets+$46 ; orig=0x0646
.80:BFB4 BNE locret_80BFD2
.80:BFB6 LDA byte_87F00E, X ; orig=0x7F00E
.80:BFBA CMP CommandPackets+$48 ; orig=0x0648
.80:BFBD BNE locret_80BFD2
.80:BFBF SEP #100000b
.80:BFC1 .A8
.80:BFC1 LDA ROMMenuFeatures, X ; orig=0x7F010
.80:BFC5 STA MenuFeaturesByte ; orig=0x0C05
.80:BFC8 LDA #1
.80:BFCA STA UpdateMenuFeatures ; orig=0x0F04
.80:BFCD REP #100000b
.80:BFCF .A16
.80:BFCF LDA #0
.80:BFD2
.80:BFD2 locret_80BFD2: ; CODE XREF: CheckROMName+7↑j
.80:BFD2 ; CheckROMName+10↑j ...
.80:BFD2 RTS
.80:BFD2 ; End of function CheckROMName
.87:F000 ROMNameList: .BYTE 'ZELDA',0
.87:F006 byte_87F006: .BYTE 0
.87:F007 .BYTE 0
.87:F008 byte_87F008: .BYTE 0
.87:F009 .BYTE 0
.87:F00A byte_87F00A: .BYTE 0
.87:F00B .BYTE 0
.87:F00C byte_87F00C: .BYTE 0
.87:F00D .BYTE 0
.87:F00E byte_87F00E: .BYTE 0
.87:F00F .BYTE 0
.87:F010 ROMMenuFeatures:.BYTE 5
.87:F011 asc_87F011: .BYTE 'SUPER MARIOLAND',0
.87:F021 .BYTE 6
.87:F022 .BYTE 'MARIOLAND2',0
.87:F02D .BYTE 0
.87:F02E .BYTE 0
.87:F02F .BYTE 0
.87:F030 .BYTE 0
.87:F031 .BYTE 0
.87:F032 .BYTE $14
.87:F033 .BYTE 'SUPERMARIOLAND3',0
.87:F043 .BYTE 2
.87:F044 .BYTE 'KIRBY DREAM LAND',$B,'HOSHINOKA-BI',0
.87:F062 .BYTE 0
.87:F063 .BYTE 0
.87:F064 .BYTE 0
.87:F065 .BYTE $B
.87:F066 .BYTE 'KIRBY',$27,'S PINBALL',0
.87:F076 .BYTE 3
.87:F077 .BYTE 'YOSSY NO TAMAGO',0
.87:F087 .BYTE $C
.87:F088 .BYTE 'MARIO & YOSHI',0
.87:F096 .BYTE 0
.87:F097 .BYTE 0
.87:F098 .BYTE $C
.87:F099 .BYTE 'YOSSY NO COOKIE',0
.87:F0A9 .BYTE 4
.87:F0AA .BYTE 'YOSHI',$27,'S COOKIE',0
.87:F0B9 .BYTE 0
.87:F0BA .BYTE 4
.87:F0BB .BYTE 'DR.MARIO',0
.87:F0C4 .BYTE 0
.87:F0C5 .BYTE 0
.87:F0C6 .BYTE 0
.87:F0C7 .BYTE 0
.87:F0C8 .BYTE 0
.87:F0C9 .BYTE 0
.87:F0CA .BYTE 0
.87:F0CB .BYTE $12
.87:F0CC .BYTE 'TETRIS',0
.87:F0D3 .BYTE 0
.87:F0D4 .BYTE 0
.87:F0D5 .BYTE 0
.87:F0D6 .BYTE 0
.87:F0D7 .BYTE 0
.87:F0D8 .BYTE 0
.87:F0D9 .BYTE 0
.87:F0DA .BYTE 0
.87:F0DB .BYTE 0
.87:F0DC .BYTE $11
.87:F0DD .BYTE 'YAKUMAN',0
.87:F0E5 .BYTE 0
.87:F0E6 .BYTE 0
.87:F0E7 .BYTE 0
.87:F0E8 .BYTE 0
.87:F0E9 .BYTE 0
.87:F0EA .BYTE 0
.87:F0EB .BYTE 0
.87:F0EC .BYTE 0
.87:F0ED .BYTE $13
.87:F0EE .BYTE 'METROID2',0
.87:F0F7 .BYTE 0
.87:F0F8 .BYTE 0
.87:F0F9 .BYTE 0
.87:F0FA .BYTE 0
.87:F0FB .BYTE 0
.87:F0FC .BYTE 0
.87:F0FD .BYTE 0
.87:F0FE .BYTE $1F
.87:F0FF .BYTE 'KAERUNOTAMENI',0
.87:F10D .BYTE 0
.87:F10E .BYTE 0
.87:F10F .BYTE 9
.87:F110 .BYTE 'GOLF',0
.87:F115 .BYTE 0
.87:F116 .BYTE 0
.87:F117 .BYTE 0
.87:F118 .BYTE 0
.87:F119 .BYTE 0
.87:F11A .BYTE 0
.87:F11B .BYTE 0
.87:F11C .BYTE 0
.87:F11D .BYTE 0
.87:F11E .BYTE 0
.87:F11F .BYTE 0
.87:F120 .BYTE $18
.87:F121 .BYTE 'ALLEY WAY',0
.87:F12B .BYTE 0
.87:F12C .BYTE 0
.87:F12D .BYTE 0
.87:F12E .BYTE 0
.87:F12F .BYTE 0
.87:F130 .BYTE 0
.87:F131 .BYTE $16
.87:F132 .BYTE 'BASEBALL',0
.87:F13B .BYTE 0
.87:F13C .BYTE 0
.87:F13D .BYTE 0
.87:F13E .BYTE 0
.87:F13F .BYTE 0
.87:F140 .BYTE 0
.87:F141 .BYTE 0
.87:F142 .BYTE $F
.87:F143 .BYTE 'TENNIS',0
.87:F14A .BYTE 0
.87:F14B .BYTE 0
.87:F14C .BYTE 0
.87:F14D .BYTE 0
.87:F14E .BYTE 0
.87:F14F .BYTE 0
.87:F150 .BYTE 0
.87:F151 .BYTE 0
.87:F152 .BYTE 0
.87:F153 .BYTE $17
.87:F154 .BYTE 'F1RACE',0
.87:F15B .BYTE 0
.87:F15C .BYTE 0
.87:F15D .BYTE 0
.87:F15E .BYTE 0
.87:F15F .BYTE 0
.87:F160 .BYTE 0
.87:F161 .BYTE 0
.87:F162 .BYTE 0
.87:F163 .BYTE 0
.87:F164 .BYTE $1E
.87:F165 .BYTE 'KID ICARUS',0
.87:F170 .BYTE 0
.87:F171 .BYTE 0
.87:F172 .BYTE 0
.87:F173 .BYTE 0
.87:F174 .BYTE 0
.87:F175 .BYTE $E
.87:F176 .BYTE 'BALL'
.87:F17A .BYTE $F4
.87:F17B .BYTE $F4
.87:F17C .BYTE 'N KID',0
.87:F182 .BYTE 0
.87:F183 .BYTE 0
.87:F184 .BYTE 0
.87:F185 .BYTE 0
.87:F186 .BYTE 1
.87:F187 .BYTE 'QIX',0
.87:F18B .BYTE 0
.87:F18C .BYTE 0
.87:F18D .BYTE 0
.87:F18E .BYTE 0
.87:F18F .BYTE 0
.87:F190 .BYTE 0
.87:F191 .BYTE 0
.87:F192 .BYTE 0
.87:F193 .BYTE 0
.87:F194 .BYTE 0
.87:F195 .BYTE 0
.87:F196 .BYTE 0
.87:F197 .BYTE $19
.87:F198 .BYTE 'SOLARSTRIKER',0
.87:F1A5 .BYTE 0
.87:F1A6 .BYTE 0
.87:F1A7 .BYTE 0
.87:F1A8 .BYTE 7
.87:F1A9 .BYTE 'X',0
.87:F1AB .BYTE 0
.87:F1AC .BYTE 0
.87:F1AD .BYTE 0
.87:F1AE .BYTE 0
.87:F1AF .BYTE 0
.87:F1B0 .BYTE 0
.87:F1B1 .BYTE 0
.87:F1B2 .BYTE 0
.87:F1B3 .BYTE 0
.87:F1B4 .BYTE 0
.87:F1B5 .BYTE 0
.87:F1B6 .BYTE 0
.87:F1B7 .BYTE 0
.87:F1B8 .BYTE 0
.87:F1B9 .BYTE $1C
.87:F1BA .BYTE 'GBWARS',0
.87:F1C1 .BYTE 0
.87:F1C2 .BYTE 0
.87:F1C3 .BYTE 0
.87:F1C4 .BYTE 0
.87:F1C5 .BYTE 0
.87:F1C6 .BYTE 0
.87:F1C7 .BYTE 0
.87:F1C8 .BYTE 0
.87:F1C9 .BYTE 0
.87:F1CA .BYTE $15
.87:F1CB .WORD $FFFF
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment