68k program header: Difference between revisions

From NeoGeo Development Wiki
Jump to navigation Jump to search
m (26 revisions: Import from wikkii)
m (Renaming according to official doc)
Line 3: Line 3:
== For cartridge systems ==
== For cartridge systems ==


*$0064: VBlank handling routine pointer
{|class="regdef"
*$0100: "NEO-GEO",$00 string
|'''Address'''
*$0108: [[NGH number]]
|'''Size'''
*$010A: program size (isn't read by any bios)
|'''Description'''
*$010E: pointer to debug DIPs (in [[user RAM]]) (isn't read by any bios)
|-
*$0114: boot logo flag and tile number
|$100
*$0116: pointer to Japanese [[Software_DIPs|software DIPs settings layout]]
|8 bytes
*$011A: pointer to US settings [[Software_DIPs|software DIPs settings layout]]
|"NEO-GEO",$00 string (first cartridge recognition code)
*$011E: pointer to Euro settings [[Software_DIPs|software DIPs settings layout]]
|-
*$0122: pointer to code start
|$107
*$0128: pointer to player start (unknown meaning)
|byte
*$012E: pointer to demo end (unknown meaning)
|System version (0)
*$0134: pointer to coin sound (unknown meaning)
|-
*$0182: pointer to [[security code]]
|$108
|word
|[[NGH number]]
|-
|$10A
|longword
|Program size in bytes
|-
|$10E
|longword
|Pointer to start of debug/software DIPs (in [[user RAM]])
|-
|$112
|word
|Size of the debug/software DIP settings
|-
|$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|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 [[User:Smkdan|Smkdan's]] sources)===
===Minimal header (from [[User:Smkdan|Smkdan's]] sources)===
Line 60: Line 115:


     dc.w $0052        ;NGH
     dc.w $0052        ;NGH
     dc.l $00080000    ;ROM p1 size
     dc.l $00080000    ;P ROM size
     dc.l $00100000    ;debug DIPs pointer
     dc.l $00100000    ;debug DIPs pointer
     dc.w $01          ;unknown
     dc.w $01          ;size of DIP data
     dc.b $00          ;bootscreen flag, anything else than 0x00 means no logo
     dc.b $00          ;let the BIOS show the logo
     dc.b $1B          ;first tile number of the NeoGeo logo in the C ROMs
     dc.b $1B          ;first tile of the logo is $1B00
     dc.l JPConfig    ;Japanese config menu pointer
     dc.l JPConfig    ;Japanese config menu pointer
     dc.l USConfig    ;US config menu pointer
     dc.l USConfig    ;US config menu pointer
Line 70: Line 125:


     jmp        Start
     jmp        Start
     jmp        Start ;?
     jmp        Start
     jmp        Start ;?
     jmp        Start
     jmp        Start ;?
     jmp        Start


     org $0182
     org $0182
Line 131: Line 186:
<pre>
<pre>
     org    $100
     org    $100
     dc.b    "NEO-GEO", $02         ;CDDA flag
     dc.b    "NEO-GEO",$02           ;CDDA flag
     dc.w    $1234                   ;NGH
     dc.w    $0052                   ;NGH
     dc.l    $00500000               ;from Metal Slug 2
     dc.l    $00080000               ;P ROM size
     dc.l    $0010F000               ;debug DIPs pointer
     dc.l    $00100000               ;debug DIPs pointer
     dc.w    $007A                  ;not used ?
     dc.w    $01                    ;size of DIP data
     dc.w   $00A1                  ;not used ?
    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
     org    $122
     jmp    Start
     jmp    Start
    jmp    Generic                ;?
    jmp    Generic                ;?
    jmp    Generic                ;?


     org    $13A
     org    $13A
     dc.w    $0000                  ;Z80 RAM address for CDDA commands
     dc.w    $0000                  ;Z80 RAM address for CDDA commands
Generic:
    rte
    rts
</pre>
</pre>


[[Category:Base system]]
[[Category:Base system]]
[[Category:Code]]
[[Category:Code]]

Revision as of 04:51, 28 June 2011

ASM ROM header templates.

For cartridge systems

Address Size Description
$100 8 bytes "NEO-GEO",$00 string (first cartridge recognition code)
$107 byte System version (0)
$108 word NGH number
$10A longword Program size in bytes
$10E longword Pointer to start of debug/software DIPs (in user RAM)
$112 word Size of the debug/software DIP settings
$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