68k program header

From NeoGeo Development Wiki
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

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