68k initialization: Difference between revisions
Jump to navigation
Jump to search
m (1 revision) |
mNo edit summary |
||
Line 1: | Line 1: | ||
== Basic init code == | == Basic init code == | ||
The initial PC value in | 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 entrypoints for the [[68k]] code start at $000122. There's usually 4 JMP instructions there (why ?). | ||
<pre> | <pre> | ||
lea $10F300, sp | lea $10F300, sp | ||
lea $10F300, a7 | lea $10F300, a7 ; Depends on assemblers... | ||
move.b d0,REG_DIPSW ; Kick the watchdog | move.b d0,REG_DIPSW ; Kick the watchdog | ||
move.w #7,REG_IRQACK ; Acknowledge any pending interrupts | move.w #7,REG_IRQACK ; Acknowledge any pending interrupts | ||
Line 93: | Line 23: | ||
</pre> | </pre> | ||
Note that this function also clears the stack. Don't make a subroutine out of it unless you're sure | 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 | 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. | 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. |
Revision as of 20:40, 6 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.