68k initialization: Difference between revisions
Jump to navigation
Jump to search
mNo edit summary |
m (7 revisions: Import from wikkii) |
(No difference)
|
Revision as of 15:27, 26 June 2011
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 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 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.
BIOS calls BIOSF_CLEARFIX ($C004C2) and BIOSF_CLEARSPR ($C004C8) can be used to clear sprites and the fix layer.
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.