68k program header: Difference between revisions

From NeoGeo Development Wiki
Jump to navigation Jump to search
No edit summary
Line 9: Line 9:
*$010E: pointer to debug DIPs (in [[user RAM]]) (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
*$0114: boot logo flag and tile number
*$0116: pointer to Japanese [[settings info block]]
*$0116: pointer to Japanese [[Software_DIPs|software DIPs settings layout]]
*$011A: pointer to US settings info block
*$011A: pointer to US settings [[Software_DIPs|software DIPs settings layout]]
*$011E: pointer to Euro settings info block
*$011E: pointer to Euro settings [[Software_DIPs|software DIPs settings layout]]
*$0122: pointer to code start
*$0122: pointer to code start
*$0182: pointer to [[security code]]
*$0182: pointer to [[security code]]
Line 124: Line 124:
     dc.b    "WITHOUT    "
     dc.b    "WITHOUT    "
</pre>
</pre>
=== Config data description ===
{| class="regdef" style="text-align:center;"
| '''0x00'''
| Game Name
|-
| '''0x10'''
| Special entry list, see description below
|-
| '''0x16'''
| Simple 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).
|}
===Special options list description====
You can define up to 4 special optjons.
The first two words can be used to define two "timer options". You can set minutes and seconds. Upper byte define the amount of minutes and the lower byte the seconds.
The next byte can be used for a counter, from 00 to 99. The value written is the default one. (value above 0x63 will show some garbage data).
The last byte can be used for a counter plus two special value : "WITHOUT" and "INFINITE" (0x00 is without and 0x64 is infinite). The counter will go from 00 to 99 and add the text "times" after.
They all takes one string in the strings table for the description.
All those options can be disable by entering 0xFF.
====Simple 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.
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.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    "
</pre>
[[File:Config_1.png]]
[[File:Config_2.png]]
<pre>
    dc.b    "TEST ROM    "                            ; Game name
    dc.b    $42,$20,$20,$42,$42,$64                  ; Special list
    dc.b    $24,$02,$00,$00,$00,$00,$00,$00,$00,$00  ; Option list
    dc.b    "TIMER 1    "
    dc.b    "TIMER 2    "
    dc.b    "COUNTER    "
    dc.b    "COUNTER SPE "
    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_3.png]]


==For CD systems==
==For CD systems==

Revision as of 12:46, 9 May 2011

ASM ROM header templates.

For cartridge systems

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.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    $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