68k program header: Difference between revisions
Jump to navigation
Jump to search
mNo edit summary |
mNo edit summary |
||
(5 intermediate revisions by 3 users not shown) | |||
Line 1: | Line 1: | ||
ASM ROM header templates. | ASM ROM header templates. | ||
== For cartridge systems == | ==For cartridge systems== | ||
{|class="regdef" | {|class="regdef" | ||
Line 10: | Line 10: | ||
|$100 | |$100 | ||
|7 bytes | |7 bytes | ||
|"NEO-GEO" string (first cartridge recognition code) | |"NEO-GEO" string (first cartridge recognition code). | ||
|- | |- | ||
|$107 | |$107 | ||
|byte | |byte | ||
|System version (0) | |System version (0 for cartridge systems, 1 or 2 for adapted cart games on Neo CD ?). | ||
|- | |- | ||
|$108 | |$108 | ||
|word | |word | ||
|[[NGH number]] | |[[NGH number]] in BCD, 0000 prohibited. | ||
|- | |- | ||
|$10A | |$10A | ||
|longword | |longword | ||
| | |Total [[P ROM]] data size in bytes. | ||
|- | |- | ||
|$10E | |$10E | ||
|longword | |longword | ||
|Pointer to | |Pointer to backup RAM data block (in [[68k user RAM]]). The first 2 bytes are the [[debug DIPs]]. | ||
|- | |- | ||
|$112 | |$112 | ||
|word | |word | ||
|Size of the game save | |Size of the required game save data in bytes. | ||
|- | |- | ||
|$114 | |$114 | ||
|byte | |byte | ||
| | |[[Eyecatcher]] animation flag. 0=Done by system ROM, 1=Done by game, 2=Nothing. | ||
|- | |- | ||
|$115 | |$115 | ||
|byte | |byte | ||
|Sprite bank number (upper 8 bits of tile number) for the | |Sprite bank number (upper 8 bits of tile number) for the eye-catcher logo, if done by system ROM. | ||
|- | |- | ||
|$116 | |$116 | ||
|longword | |longword | ||
|Pointer to Japanese [[Software_DIPs|software DIPs settings layout]] | |Pointer to Japanese [[Software_DIPs|software DIPs settings layout]]. | ||
|- | |- | ||
|$11A | |$11A | ||
|longword | |longword | ||
|Pointer to US settings software DIPs settings layout | |Pointer to US settings software DIPs settings layout. | ||
|- | |- | ||
|$11E | |$11E | ||
|longword | |longword | ||
|Pointer to Euro settings software DIPs settings layout | |Pointer to Euro settings software DIPs settings layout. | ||
|- | |- | ||
|$122 | |$122 | ||
|6 bytes | |6 bytes | ||
|JMP to [[USER subroutine]] (code start) | |JMP to [[USER subroutine]] (code start). | ||
|- | |- | ||
|$128 | |$128 | ||
|6 bytes | |6 bytes | ||
|JMP to [[PLAYER_START subroutine]] | |JMP to [[PLAYER_START subroutine]]. | ||
|- | |- | ||
|$12E | |$12E | ||
|6 bytes | |6 bytes | ||
|JMP to [[DEMO_END subroutine]] | |JMP to [[DEMO_END subroutine]]. | ||
|- | |- | ||
|$134 | |$134 | ||
|6 bytes | |6 bytes | ||
|JMP to [[COIN_SOUND subroutine]] | |JMP to [[COIN_SOUND subroutine]]. | ||
|- | |- | ||
|$182 | |$182 | ||
|longword | |longword | ||
|Pointer to [[security code]] (second cartridge recognition code) | |Pointer to [[security code]] (second cartridge recognition code). | ||
|- | |||
|$186 | |||
|longword | |||
|Unknown (seems only set to 0x00000000 on boards containing Spanish software DIPs). | |||
|- | |||
|$18A | |||
|longword | |||
|Unknown (seems only set to 0x00000001 on boards containing Spanish software DIPs). | |||
|- | |||
|$18E | |||
|longword | |||
|Pointer to Spanish settings software DIPs settings layout (not all games use this). | |||
|} | |} | ||
Line 78: | Line 90: | ||
<syntaxhighlight> | <syntaxhighlight> | ||
org $0000 | |||
dc.l $10F300 | |||
org $0004 | |||
dc.l $C00402 | |||
org $0064 | org $0064 | ||
dc.l VBLANK ;IRQ handler | dc.l VBLANK ;IRQ handler | ||
Line 85: | Line 103: | ||
org $0108 | org $0108 | ||
dc.w $ | dc.w $1234 ;NGH | ||
org $0122 | org $0122 | ||
jmp | jmp USER ;entry | ||
org $0114 | org $0114 | ||
Line 106: | Line 124: | ||
dc.w $4e75 | dc.w $4e75 | ||
</syntaxhighlight> | </syntaxhighlight> | ||
===Full header (from some unknown example code)=== | ===Full header (from some unknown example code)=== | ||
Line 114: | Line 131: | ||
dc.b "NEO-GEO",$00 | dc.b "NEO-GEO",$00 | ||
dc.w $ | dc.w $1234 ;NGH | ||
dc.l $00080000 ;P ROM size | dc.l $00080000 ;P ROM size | ||
dc.l $00100000 ;debug DIPs pointer | dc.l $00100000 ;debug DIPs pointer | ||
Line 124: | Line 141: | ||
dc.l EUConfig ;European config menu pointer | dc.l EUConfig ;European config menu pointer | ||
jmp | jmp USER | ||
jmp | jmp PLAYER_START | ||
jmp | jmp DEMO_END | ||
jmp | jmp COIN_SOUND | ||
org $0182 | org $0182 | ||
Line 187: | Line 204: | ||
org $100 | org $100 | ||
dc.b "NEO-GEO",$02 ;CDDA flag | dc.b "NEO-GEO",$02 ;CDDA flag | ||
dc.w $ | dc.w $1234 ;NGH | ||
dc.l $00080000 ;P ROM size | dc.l $00080000 ;P ROM size | ||
dc.l $00100000 ;debug DIPs pointer | dc.l $00100000 ;debug DIPs pointer |
Latest revision as of 21:45, 11 September 2017
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 for cartridge systems, 1 or 2 for adapted cart games on Neo CD ?). |
$108 | word | NGH number in BCD, 0000 prohibited. |
$10A | longword | Total P ROM data size in bytes. |
$10E | longword | Pointer to backup RAM data block (in 68k user RAM). The first 2 bytes are the debug DIPs. |
$112 | word | Size of the required game save data in bytes. |
$114 | byte | Eyecatcher animation flag. 0=Done by system ROM, 1=Done by game, 2=Nothing. |
$115 | byte | Sprite bank number (upper 8 bits of tile number) for the eye-catcher logo, if done by system ROM. |
$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). |
$186 | longword | Unknown (seems only set to 0x00000000 on boards containing Spanish software DIPs). |
$18A | longword | Unknown (seems only set to 0x00000001 on boards containing Spanish software DIPs). |
$18E | longword | Pointer to Spanish settings software DIPs settings layout (not all games use this). |
Minimal header (from Smkdan's sources)
No need for a complete 68k vector table.
org $0000
dc.l $10F300
org $0004
dc.l $C00402
org $0064
dc.l VBLANK ;IRQ handler
org $0100
dc.b "NEO-GEO",$00
org $0108
dc.w $1234 ;NGH
org $0122
jmp USER ;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 $1234 ;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 USER
jmp PLAYER_START
jmp DEMO_END
jmp COIN_SOUND
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 $1234 ;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