68k initialization

From NeoGeo Development Wiki
Revision as of 05:46, 8 March 2011 by Furrtek (talk | contribs)
Jump to navigation Jump to search

Basic init code

The initial PC value in the 68k binary must be $C00402 (Init BIOS call), the initial SP value must be $10F300 (end of the user RAM).

The entrypoints for the 68k code start at $000122. There's usually 4 JMP instructions there (why ?).

    lea     $10F300, sp
    lea     $10F300, a7       ; Depends on assemblers...
    move.b  d0,REG_DIPSW      ; Kick the watchdog
    move.w  #7,REG_IRQACK     ; Acknowledge any pending interrupts
    move.w  #$2700,sr         ; Disable all interrupts

See 68k interrupts and Watchdog for more informations.

Clearing user RAM:

    lea     RAMSTART,a0       ; Should be $100000
    move.l  #($F300/4)-1,d0   ; User RAM's size is $F300, and we clear longwords (4 bytes)
clram:
    clr.l   (a0)+
    dbra    d0,clram

Note that this function also clears the stack. Don't make a subroutine out of it unless you're sure that the return address won't be cleared.

Clearing sprites and the fix layer: make BIOS Calls.

Don't forget to kick the watchdog regularly in your init code if the VBL interrupt isn't enabled or doesn't kick it itself.