68k program header: Difference between revisions

From NeoGeo Development Wiki
Jump to navigation Jump to search
(Add config exemples with screenshots)
(Add special options description)
Line 135: Line 135:
|-
|-
| '''0x10'''
| '''0x10'''
| Special entry, list unknown, 0xFF to disabled
| Special entry list, see description below
|-
|-
| '''0x16'''
| '''0x16'''
| Options list, up to 10 entry. 1 byte per entry. Padded with 0x00 for unused options.
| Simple options list, up to 10 entry. 1 byte per entry. Padded with 0x00 for unused options.
|-
|-
| '''0x20'''
| '''0x20'''
Line 144: Line 144:
|}
|}


Options list description :
===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.
Each options consist of 1 byte.

Revision as of 10:35, 9 May 2011

ASM ROM header templates.

For cartridge systems

  • $0064: VBlank handling routine pointer
  • $0100: "NEO-GEO",$00 string
  • $0108: NGH number
  • $010A: program size (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
  • $0116: pointer to Japanese settings info block
  • $011A: pointer to US settings info block
  • $011E: pointer to Euro settings info block
  • $0122: pointer to code start
  • $0182: pointer to security 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    ;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.l    $FFFFFFFF                                     ; Unknown
    dc.w    $FFFF                                         ;
    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.l    $FFFFFFFF                                     ; Unknown
    dc.w    $FFFF                                         ;
    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.l    $FFFFFFFF                                     ; Unknown
    dc.w    $FFFF                                         ;
    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     "

Config data description

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.

The only "special" entry list seems to be 0x64. When specified the title is still fetch from the string table but not the choice. NAM-1975 use it for the CONTINUE configuration.

TODO: See where the bios put the data (and which form) in the RAM. Bytes from $10FD84 to $10FD93 ?

Config exemples

    dc.b    "TEST ROM    "                            ; Game name
    dc.l    $FFFFFFFF                                     ; Unknown
    dc.w    $FFFF                                         ;
    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     "

File:Config 1.png

File:Config 2.png

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