68k initialization: Difference between revisions
Jump to navigation
Jump to search
mNo edit summary |
mNo edit summary |
||
Line 1: | Line 1: | ||
== Basic init code == | == Basic init code == | ||
The initial PC value in the [[68k]] binary must be $C00402 (Init [[BIOS | The initial PC value in the [[68k]] binary must be $C00402 (Init [[BIOS calls|BIOS call]]), the initial SP value must be $10F300 (end of the [[68k user RAM|user RAM]]). | ||
The entrypoints for the [[68k]] code start at $000122. There's usually 4 JMP instructions there (why ?). | The entrypoints for the [[68k]] code start at $000122. There's usually 4 JMP instructions there (why ?). |
Revision as of 05:46, 8 March 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 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.