68k program header: Difference between revisions

From NeoGeo Development Wiki
Jump to navigation Jump to search
mNo edit summary
mNo edit summary
 
(35 intermediate revisions by 4 users not shown)
Line 1: Line 1:
ROM header templates.
ASM ROM header templates.


== For cartridge systems ==
==For cartridge systems==


<pre>
{|class="regdef"
    org $0100
|'''Address'''
    dc.b "NEO-GEO",$00
|'''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|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 [[User:Smkdan|Smkdan's]] sources)===
 
No need for a complete [[68k vector table]].
 
<syntaxhighlight>
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


    dc.w $0052        ; NGH Number in BCD (0052 is ssideki)
org $0182
    dc.l $00080000    ; ?
dc.l Code ;code pointer
    dc.l $00100000    ; ?
Code:
    dc.w $0000
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
</syntaxhighlight>


    org $0114
===Full header (from some unknown example code)===
    dc.b $01          ; Bootscreen flag ($00 skips it)
    dc.b $1B          ; First tile number of the NeoGeo logo in the C ROM
    dc.l JPConfig    ; Japanese config menu pointer
    dc.l ENConfig    ; English config menu pointer
    dc.l EUConfig    ; European config menu pointer


    jmp        Start
<syntaxhighlight>
    jmp        Start
     org $0100
     jmp        Start
     dc.b "NEO-GEO",$00
     jmp        Start  ; Not used ?


     dc.l $FFFFFFFF,$FFFFFFFF,$FFFFFFFF,$FFFFFFFF
    dc.w $1234        ;NGH
     dc.l $FFFFFFFF,$FFFFFFFF,$FFFFFFFF,$FFFFFFFF
     dc.l $00080000    ;P ROM size
     dc.l $FFFFFFFF,$FFFFFFFF,$FFFFFFFF,$FFFFFFFF
    dc.l $00100000    ;debug DIPs pointer
     dc.l $FFFFFFFF,$FFFFFFFF,$FFFFFFFF,$FFFFFFFF
    dc.w $01          ;size of DIP data
     dc.l $FFFFFFFF,$FFFFFFFF
    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


     dc.l $00000186    ; Security code pointer ?
     jmp        USER
    jmp        PLAYER_START
    jmp        DEMO_END
    jmp        COIN_SOUND


     org $186          ; ???
     org $0182
    dc.l Code        ;code pointer
Code:
     dc.l $76004A6D,$0A146600,$003C206D,$0A043E2D
     dc.l $76004A6D,$0A146600,$003C206D,$0A043E2D
     dc.l $0A0813C0,$00300001,$32100C01,$00FF671A
     dc.l $0A0813C0,$00300001,$32100C01,$00FF671A
Line 43: Line 159:
     dc.w $4e75
     dc.w $4e75


     ; Configuration menu layouts (soft DIPs), format unknown...
     ; Configuration menu layouts (soft DIPs)
  JPConfig:
  JPConfig:
     dc.b    "0123456789ABCDEF"     ; Game name
     dc.b    "0123456789ABCDEF"                           ; Game name
     dc.l   $FFFFFFFF              ; Pointer ?
     dc.b   $FF,$FF,$FF,$FF,$FF,$FF                      ; Special list
    dc.w    $0364                  ; ?
     dc.b    $24,$02,$00,$00,$00,$00,$00,$00,$00,$00      ; Option list
     dc.b    $14,$13,$24,$01
    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    "


  ENConfig:
  USConfig:
     dc.b    "0123456789ABCDEF"     ; Game name
     dc.b    "0123456789ABCDEF"                           ; Game name
     dc.l   $FFFFFFFF              ; Pointer ?
     dc.b   $FF,$FF,$FF,$FF,$FF,$FF                      ; Special list
    dc.w    $0364                  ; ?
     dc.b    $24,$02,$00,$00,$00,$00,$00,$00,$00,$00      ; Option list
     dc.b    $14,$13,$24,$01
    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:
  EUConfig:
     dc.b    "0123456789ABCDEF"     ; Game name
     dc.b    "0123456789ABCDEF"                           ; Game name
     dc.l   $FFFFFFFF              ; Pointer ?
     dc.b   $FF,$FF,$FF,$FF,$FF,$FF                      ; Special list
    dc.w    $0364                  ; ?
     dc.b    $24,$02,$00,$00,$00,$00,$00,$00,$00,$00      ; Option list
     dc.b    $14,$13,$24,$01
    dc.b    "LIVES      "
</pre>
    dc.b    "1          "
    dc.b    "2          "
    dc.b    "3          "
    dc.b    "4          "
    dc.b    "HOW TO PLAY "
    dc.b    "WITH        "
    dc.b    "WITHOUT    "
</syntaxhighlight>


== For CD systems ==
==For CD systems==
<pre>
<syntaxhighlight>
     org    $100
     org    $100
     dc.b    "NEO-GEO", $02         ; Magic bytes, CDDA Flag
     dc.b    "NEO-GEO",$02           ;CDDA flag
     dc.w    $1234                  ; NGH number
     dc.w    $1234                  ;NGH
     dc.l    $00500000               ; ? Value in Metal Slug 2
     dc.l    $00080000               ;P ROM size
     dc.l    $0010F000               ; Pointer to debugging switch (?)
     dc.l    $00100000               ;debug DIPs pointer
     dc.w    $007A                  ; Starting sprite number (?)
     dc.w    $01                    ;size of DIP data
     dc.w   $00A1                  ; ?
     dc.b   $00                    ;let the BIOS show the logo
 
    dc.b    $1B                    ;first tile of the logo is $1B00
     dc.l    JPConfig
     dc.l    JPConfig               ;Japanese config menu pointer
     dc.l    ENConfig
     dc.l    USConfig                ;US config menu pointer
     dc.l    SPConfig
     dc.l    EUConfig                ;European config menu pointer


     org    $122
     org    $122
     jmp    Start
     jmp    Start
    jmp    Generic
    jmp    Generic                ; Never used ?
    jmp    Generic                ; Never used ?


     org    $13A
     org    $13A
    dc.w    $0000                  ;Z80 RAM address for CDDA commands
</syntaxhighlight>


    dc.w    $0000                  ; Z80 RAM address for CDDA commands
[[Category:Base system]]
 
Generic:
    rte
    rts
 
    org    $184
 
    ; Configuration menu layouts (soft DIPs), format unknown...
JPConfig:
    dc.b    "0123456789ABCDEF"      ; Game name
    dc.l    $FFFFFFFF              ; Pointer ?
    dc.w    $0364                  ; ?
    dc.b    $14,$13,$24,$01
 
ENConfig:
    dc.b    "0123456789ABCDEF"      ; Game name
    dc.l    $FFFFFFFF              ; Pointer ?
    dc.w    $0364                  ; ?
    dc.b    $14,$13,$24,$01
 
EUConfig:
    dc.b    "0123456789ABCDEF"      ; Game name
    dc.l    $FFFFFFFF              ; Pointer ?
    dc.w    $0364                  ; ?
    dc.b    $14,$13,$24,$01
</pre>
 
[[Category:CPUs]]
[[Category:Code]]
[[Category:Code]]

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