Originally Posted by Galahad/FLT
Firstly, I've only had a quick scan, but so far you have the following problems.
At the start of your Init routine you are doing:
MOVE.W #$4000,$DFF09A
MOVE.W $DFF01C,INTENA
MOVE.W $DFF002,DMACRAP
MOVE.W $DFF010,ADKCON
MOVE.W #%7fff,$DFF096
MOVE.W #%7fff,$DFF09A
MOVE.W #%7fff,$dff09c
MOVE.W #%83c0,$dff096
; MOVE.W #%c030,$DFF09A
MOVE.L 4.W,A6 ; INTERRUPT VOM SYSTEM ANFORDERN.
JSR -132(A6) ; FORBID ()
I've ditched the binary references because they are confusing and converted them to hexidecimal.
move.w #$4000,$dff09a is unecessary
Forbid multitasking should come before you halt the interrupts
your move.w #$83c0,$dff096 should come after you have installed the copperlist not before. I would change that value to $87e0 instead.
Before I install the copperlist, I always to a vertical blank wait first.
Afterwards I also clr.w $dff088
Your permit multitasking should come at the end of your restore routine, not at the start of it. (jsr -138(a6) )
In your closedown routine, you have reinstalled the system copperlist before your kill interrupts code (move.w #$7fff,$dff0x0 etc)
There is no vertical blank wait before you reinstall the copperlist
In your closedown routine you have incorrectly used ori.w #$c000,d0 to restore $dff09a, it should be $8000 in all cases.
As an extra, in your preserve routine at the start, store the contents of $dff010 for restoration later in $dff09e, again ori.w #$8000 to the value before moving.
Thats what I can spot so far, give that a whirl and see if that improves things
|