include "../include/registers.i" include "hardware/dmabits.i" include "hardware/intbits.i" LEVEL_3_INTERRUPT_VECTOR equ $6c entry: lea level3InterruptHandler(pc),a3 move.l a3,LEVEL_3_INTERRUPT_VECTOR lea CUSTOM,a1 lea copper1(pc),a0 move.l a0,COP1LC(a1) move.w COPJMP1(a1),d0 move.w #(DMAF_SETCLR!DMAF_COPPER!DMAF_RASTER!DMAF_MASTER),dmacon(a1) .mainLoop: bra.b .mainLoop level3InterruptHandler: movem.l d0-a6,-(sp) .checkVerticalBlank: lea CUSTOM,a5 move.w INTREQR(a5),d0 and.w #INTF_VERTB,d0 beq.s .checkCopper .verticalBlank: move.w #INTF_VERTB,INTREQ(a5) ; clear interrupt bit lea.l CUSTOM,a5 lea.l counter(pc),a3 move.l (a3),d1 cmpi.l #1,d1 beq.s .installCopper2 .installCopper1: lea copper1(pc),a0 addi.l #1,d1 bra.s .loadCopper .installCopper2: lea copper2(pc),a0 move.l #0,d1 .loadCopper: move.l a0,COP1LC(a5) move.l d1,(a3) .checkCopper: lea CUSTOM,a5 move.w INTREQR(a5),d0 and.w #INTF_COPER,d0 beq.s .interruptComplete .copperInterrupt: move.w #INTF_COPER,INTREQ(a5) ; clear interrupt bit .interruptComplete: movem.l (sp)+,d0-a6 rte counter: dc.l 0 copper1: ;; ;; Set up pointers to two bitplanes ;; DC.W BPL1PTH,$0002 ;Move $0002 into register $0E0 (BPL1PTH) DC.W BPL1PTL,$1000 ;Move $1000 into register $0E2 (BPL1PTL) DC.W BPL2PTH,$0002 ;Move $0002 into register $0E4 (BPL2PTH) DC.W BPL2PTL,$5000 ;Move $5000 into register $0E6 (BPL2PTL) ;; ;; Load color registers ;; DC.W COLOR00,$0FFF ;Move white into register $180 (COLOR00) DC.W COLOR01,$0F00 ;Move red into register $182 (COLOR01) DC.W COLOR02,$00F0 ;Move green into register $184 (COLOR02) DC.W COLOR03,$000F ;Move blue into register $186 (COLOR03) ;; ;; Specify 2 Lores bitplanes ;; DC.W BPLCON0,$2200 ;2 lores planes, coloron ;; ;; Wait for line 150 ;; DC.W $9601,$FF00 ;Wait for line 150, ignore horiz. position ;; ;; Change color registers mid-display ;; DC.W COLOR00,$0000 ;Move black into register $0180 (COLOR00) DC.W COLOR01,$0FF0 ;Move yellow into register $0182 (COLOR01) DC.W COLOR02,$00FF ;Move cyan into register $0184 (COLOR02) DC.W COLOR03,$0F0F ;Move magenta into register $0186 (COLOR03) ;; ;; End Copper list by waiting for the impossible ;; DC.W $FFFF,$FFFE ;Wait for line 255, H = 254 (never happens) copper2: ;; ;; Set up pointers to two bitplanes ;; DC.W BPL1PTH,$0002 ;Move $0002 into register $0E0 (BPL1PTH) DC.W BPL1PTL,$1000 ;Move $1000 into register $0E2 (BPL1PTL) DC.W BPL2PTH,$0002 ;Move $0002 into register $0E4 (BPL2PTH) DC.W BPL2PTL,$5000 ;Move $5000 into register $0E6 (BPL2PTL) ;; ;; Load color registers ;; DC.W COLOR00,$0F00 ;Move red imto register $180 (COLOR00) DC.W COLOR01,$0FFF ;Move white into register $182 (COLOR01) DC.W COLOR02,$00F0 ;Move green into register $184 (COLOR02) DC.W COLOR03,$000F ;Move blue into register $186 (COLOR03) ;; ;; Specify 2 Lores bitplanes ;; DC.W BPLCON0,$2200 ;2 lores planes, coloron ;; ;; End Copper list by waiting for the impossible ;; DC.W $FFFF,$FFFE ;Wait for line 255, H = 254 (never happens)