68k program header
ASM ROM header templates.
For cartridge systems
Address | Size | Description |
$100 | 7 bytes | "NEO-GEO" string (first cartridge recognition code) |
$107 | byte | System version (0) |
$108 | word | NGH number |
$10A | longword | Program size in bytes |
$10E | longword | Pointer to the game save block (in 68k user RAM), will be stored in memcard. |
$112 | word | Size of the game save |
$114 | byte | Boot logo flag. 0=Done by BIOS, 1=Done by game, 2=Nothing |
$115 | byte | Sprite bank number (upper 8 bits of tile number) for the boot logo, if done by BIOS |
$116 | longword | Pointer to Japanese software DIPs settings layout |
$11A | longword | Pointer to US settings software DIPs settings layout |
$11E | longword | Pointer to Euro settings software DIPs settings layout |
$122 | 6 bytes | JMP to USER subroutine (code start) |
$128 | 6 bytes | JMP to PLAYER_START subroutine |
$12E | 6 bytes | JMP to DEMO_END subroutine |
$134 | 6 bytes | JMP to COIN_SOUND subroutine |
$182 | longword | Pointer to security code (second cartridge recognition code) |
Minimal header (from Smkdan's sources)
No need for a complete 68k vector table.
org $0064
dc.l VBLANK ;IRQ handler
org $0100
dc.b "NEO-GEO",$00
org $0108
dc.w $017 ;NGH
org $0122
jmp Start ;entry
org $0114
dc.w $0100 ;logo flag, don't show it just go straight to the entry point
org $0182
dc.l Code ;code pointer
Code:
dc.l $76004A6D,$0A146600,$003C206D,$0A043E2D
dc.l $0A0813C0,$00300001,$32100C01,$00FF671A
dc.l $30280002,$B02D0ACE,$66103028,$0004B02D
dc.l $0ACF6606,$B22D0AD0,$67085088,$51CFFFD4
dc.l $36074E75,$206D0A04,$3E2D0A08,$3210E049
dc.l $0C0100FF,$671A3010,$B02D0ACE,$66123028
dc.l $0002E048,$B02D0ACF,$6606B22D,$0AD06708
dc.l $588851CF,$FFD83607
dc.w $4e75
Full header (from some unknown example code)
org $0100
dc.b "NEO-GEO",$00
dc.w $0052 ;NGH
dc.l $00080000 ;P ROM size
dc.l $00100000 ;debug DIPs pointer
dc.w $01 ;size of DIP data
dc.b $00 ;let the BIOS show the logo
dc.b $1B ;first tile of the logo is $1B00
dc.l JPConfig ;Japanese config menu pointer
dc.l USConfig ;US config menu pointer
dc.l EUConfig ;European config menu pointer
jmp Start
jmp Start
jmp Start
jmp Start
org $0182
dc.l Code ;code pointer
Code:
dc.l $76004A6D,$0A146600,$003C206D,$0A043E2D
dc.l $0A0813C0,$00300001,$32100C01,$00FF671A
dc.l $30280002,$B02D0ACE,$66103028,$0004B02D
dc.l $0ACF6606,$B22D0AD0,$67085088,$51CFFFD4
dc.l $36074E75,$206D0A04,$3E2D0A08,$3210E049
dc.l $0C0100FF,$671A3010,$B02D0ACE,$66123028
dc.l $0002E048,$B02D0ACF,$6606B22D,$0AD06708
dc.l $588851CF,$FFD83607
dc.w $4e75
; Configuration menu layouts (soft DIPs)
JPConfig:
dc.b "0123456789ABCDEF" ; Game name
dc.b $FF,$FF,$FF,$FF,$FF,$FF ; Special list
dc.b $24,$02,$00,$00,$00,$00,$00,$00,$00,$00 ; Option list
dc.b "LIVES "
dc.b "1 "
dc.b "2 "
dc.b "3 "
dc.b "4 "
dc.b "HOW TO PLAY "
dc.b "WITH "
dc.b "WITHOUT "
USConfig:
dc.b "0123456789ABCDEF" ; Game name
dc.b $FF,$FF,$FF,$FF,$FF,$FF ; Special list
dc.b $24,$02,$00,$00,$00,$00,$00,$00,$00,$00 ; Option list
dc.b "LIVES "
dc.b "1 "
dc.b "2 "
dc.b "3 "
dc.b "4 "
dc.b "HOW TO PLAY "
dc.b "WITH "
dc.b "WITHOUT "
EUConfig:
dc.b "0123456789ABCDEF" ; Game name
dc.b $FF,$FF,$FF,$FF,$FF,$FF ; Special list
dc.b $24,$02,$00,$00,$00,$00,$00,$00,$00,$00 ; Option list
dc.b "LIVES "
dc.b "1 "
dc.b "2 "
dc.b "3 "
dc.b "4 "
dc.b "HOW TO PLAY "
dc.b "WITH "
dc.b "WITHOUT "
For CD systems
org $100
dc.b "NEO-GEO",$02 ;CDDA flag
dc.w $0052 ;NGH
dc.l $00080000 ;P ROM size
dc.l $00100000 ;debug DIPs pointer
dc.w $01 ;size of DIP data
dc.b $00 ;let the BIOS show the logo
dc.b $1B ;first tile of the logo is $1B00
dc.l JPConfig ;Japanese config menu pointer
dc.l USConfig ;US config menu pointer
dc.l EUConfig ;European config menu pointer
org $122
jmp Start
org $13A
dc.w $0000 ;Z80 RAM address for CDDA commands