68k program header: Difference between revisions
Jump to navigation
Jump to search
(Add config exemples with screenshots) |
|||
Line 154: | Line 154: | ||
TODO: See where the bios put the data (and which form) in the RAM. Bytes from $10FD84 to $10FD93 ? | TODO: See where the bios put the data (and which form) in the RAM. Bytes from $10FD84 to $10FD93 ? | ||
===Config exemples=== | |||
<pre> | |||
dc.b "TEST ROM " ; Game name | |||
dc.l $FFFFFFFF ; Unknown | |||
dc.w $FFFF ; | |||
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 " | |||
</pre> | |||
[[File:Config_1.png]] | |||
[[File:Config_2.png]] | |||
==For CD systems== | ==For CD systems== |
Revision as of 10:19, 9 May 2011
ASM ROM header templates.
For cartridge systems
- $0064: VBlank handling routine pointer
- $0100: "NEO-GEO",$00 string
- $0108: NGH number
- $010A: program size (isn't read by any bios)
- $010E: pointer to debug DIPs (in user RAM) (isn't read by any bios)
- $0114: boot logo flag and tile number
- $0116: pointer to Japanese settings info block
- $011A: pointer to US settings info block
- $011E: pointer to Euro settings info block
- $0122: pointer to code start
- $0182: pointer to security 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 ;ROM p1 size dc.l $00100000 ;debug DIPs pointer dc.w $01 ;unknown dc.b $00 ;bootscreen flag, anything else than 0x00 means no logo dc.b $1B ;first tile number of the NeoGeo logo in the C ROMs 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.l $FFFFFFFF ; Unknown dc.w $FFFF ; 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.l $FFFFFFFF ; Unknown dc.w $FFFF ; 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.l $FFFFFFFF ; Unknown dc.w $FFFF ; 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 "
Config data description
0x00 | Game Name |
0x10 | Special entry, list unknown, 0xFF to disabled |
0x16 | Options list, up to 10 entry. 1 byte per entry. Padded with 0x00 for unused options. |
0x20 | Options string table. Strings are 12 bytes long and padded with 0x20 (space). |
Options list description :
Each options consist of 1 byte.
The upper 4 bits specify the default value and the lower 4 bits the number of choice.
The only "special" entry list seems to be 0x64. When specified the title is still fetch from the string table but not the choice. NAM-1975 use it for the CONTINUE configuration.
TODO: See where the bios put the data (and which form) in the RAM. Bytes from $10FD84 to $10FD93 ?
Config exemples
dc.b "TEST ROM " ; Game name dc.l $FFFFFFFF ; Unknown dc.w $FFFF ; 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 $1234 ;NGH dc.l $00500000 ;from Metal Slug 2 dc.l $0010F000 ;debug DIPs pointer dc.w $007A ;not used ? dc.w $00A1 ;not used ? org $122 jmp Start jmp Generic ;? jmp Generic ;? jmp Generic ;? org $13A dc.w $0000 ;Z80 RAM address for CDDA commands Generic: rte rts