10 ; COLOR PALETTE INTERRUPTS
20 ; JOHN W. FELTON
30 ; (c) 1985, ANTIC PUBLISHING
40 ;
50 DRKMSK = $4E ; ATTRACT MODE REDUCED LUMINANCE MASK
60 COLRSH = $4F ; ATTRACT MODE COLOR SHIFT MASK
70 WSYNC = $D40A ; WAIT FOR HORIZONTAL SYNCHRONIZATION REGISTER
80 COLPF0 = $D016 ; COLOR REGISTER FOR PLAYFIELD ZERO
90 COLPF1 = $D017 ; COLOR REGISTER FOR PLAYFIELD ONE
0100 COLPF2 = $D018 ; COLOR REGISTER FOR PLAYFIELD TWO
0110 COLPF3 = $D019 ; COLOR REGISTER FOR PLAYFIELD THREE
0120 COLOR4 = $02C8 ; BACKGROUND COLOR REGISTER SHADOW
0130 VDSLST = $0200 ; DISPLAY LIST INTERRUPT VECTOR
0140 SYSVBV = $E45F ; STAGE ONE VERTICAL BLANK ENTRY
0150 SETVBV = $E45C ; SET VERTICAL BLANK VECTOR ROUTINE
0160 CHBASE = $D409 ; CHARACTER BASE ADDRESS
0170 .ORG $0600 ; POSITION ON PAGE SIX
0180 COLR0 .DS 1 ; DEFINE STORAGE FOR DISPLAY COLORS
0190 COLR1 .DS 1
0200 COLR2 .DS 1
0210 COLR3 .DS 1
0220 COLR4 .DS 1
0230 COLR5 .DS 1
0240 COLR6 .DS 1
0250 COLR7 .DS 1
0260 .DS 4 ; EXTRA STORAGE
0270 ;
0280 ; INTERRUPT #1
0290 ;
0300 INT1 PHA ; PUSH ACCUMULATOR ON STACK
0310 LDA COLOR4 ; LOAD BACKGROUND COLOR
0320 EOR COLRSH ; PERFORM ATTRACT MODE OPERATIONS
0330 AND DRKMSK
0340 STA WSYNC ; WAIT FOR HORIZONTAL BLANK
0350 STA COLPF2 ; STORE IN GR.0 BACKGROUND COLOR REGISTER
0360 LDA COLR7 ; LOAD DISPLAY COLOR SEVEN
0370 EOR COLRSH ; PERFORM ATTRACT MODE OPERATIONS
0380 AND DRKMSK
0390 STA COLPF1 ; STORE IN GR.0 LUMINANCE COLOR REGISTER
0400 LDA # <INT2 ; LOAD ADDRESS OF NEXT
0410 STA VDSLST ; INTERRUPT INTO THE
0420 LDA # >INT2 ; DISPLAY LIST INTERRUPT
0430 STA VDSLST+1 ; VECTOR
0440 PLA ; POP ACCUMULATOR OFF OF STACK
0450 RTI ; RETURN FROM INTERRUPT
0460 ;
0470 ; INTERRUPT #2
0480 ;
0490 INT2 PHA ; PUSH ACCUMULATOR ON STACK
0500 LDA COLR0 ; LOAD DISPLAY COLOR ZERO
0510 EOR COLRSH ; PERFORM ATTRACT MODE OPERATIONS
0520 AND DRKMSK
0530 STA WSYNC ; WAIT FOR HORIZONTAL BLANK
0540 STA COLPF0 ; STORE IN COLOR REGISTER ZERO
0550 LDA COLR1 ; LOAD DISPLAY COLOR ONE
0560 EOR COLRSH ; PERFORM ATTRACT OPERATIONS
0570 AND DRKMSK
0580 STA COLPF1 ; STORE IN COLOR REGISTER ONE
0590 LDA COLR2 ; LOAD DISPLAY COLOR TWO
0600 EOR COLRSH ; PERFORM ATTRACT OPERATIONS
0610 AND DRKMSK
0620 STA COLPF2 ; STORE IN COLOR REGISTER TWO
0630 LDA COLR3 ; LOAD DISPLAY COLOR 3
0640 EOR COLRSH ; PERFORM ATTRACT MODE OPERATIONS
0650 AND DRKMSK
0660 STA COLPF3 ; STORE IN COLOR REGISTER THREE
0670 LDA # <INT3 ; LOAD ADDRESS OF NEXT
0680 STA VDSLST ; INTERRUPT INTO
0690 LDA # >INT3 ; DISPLAY LIST INTERRUPT
0700 STA VDSLST+1 ; VECTOR
0710 PLA ; POP ACCUMULATOR OFF OF STACK
0720 RTI ; RETURN FROM INTERRUPT
0730 ;
0740 ; INTERRUPT #3
0750 ;
0760 INT3 PHA ; PUSH ACCUMULATOR ON STACK
0770 LDA COLOR4 ; LOAD BACKGROUND COLOR
0780 EOR COLRSH ; PERFORM ATTRACT MODE OPERATIONS
0790 AND DRKMSK
0800 STA WSYNC ; WAIT FOR HORIZONTAL BLANK
0810 STA COLPF2 ; STORE IN GR.0 BACKGROUND COLOR REGISTER
0820 LDA COLR7 ; LOAD DISPLAY COLOR SEVEN
0830 EOR COLRSH ; PERFORM ATTRACT MODE OPERATIONS
0840 AND DRKMSK
0850 STA COLPF1 ; STORE IN GR.0 LUMINANCE COLOR REGISTER
0860 LDA # <INT4 ; LOAD ADDRESS OF NEXT
0870 STA VDSLST ; INTERRUPT INTO THE
0880 LDA # >INT4 ; DISPLAY LIST INTERRUPT
0890 STA VDSLST+1 ; VECTOR
0900 PLA ; POP ACCUMULATOR OFF OF STACK
0910 RTI ; RETURN FROM INTERRUPT
0920 ;
0930 ; INTERRUPT #4
0940 ;
0950 INT4 PHA ; PUSH ACCUMULATOR ON STACK
0960 LDA COLR4 ; LOAD DISPLAY COLOR FOUR
0970 EOR COLRSH ; PERFORM ATTRACT MODE OPERATIONS
0980 AND DRKMSK
0990 STA WSYNC ; WAIT FOR HORIZONTAL BLANK
1000 STA COLPF0 ; STORE IN COLOR REGISTER ZERO
1010 LDA COLR5 ; LOAD DISPLAY COLOR FIVE
1020 EOR COLRSH ; PERFORM ATTRACT OPERATIONS
1030 AND DRKMSK
1040 STA COLPF1 ; STORE IN COLOR REGISTER ONE
1050 LDA COLR6 ; LOAD DISPLAY COLOR SIX
1060 EOR COLRSH ; PERFORM ATTRACT OPERATIONS
1070 AND DRKMSK
1080 STA COLPF2 ; STORE IN COLOR REGISTER TWO
1090 LDA # <INT5 ; LOAD ADDRESS OF NEXT
1100 STA VDSLST ; INTERRUPT INTO
1110 LDA # >INT5 ; DISPLAY LIST INTERRUPT
1120 STA VDSLST+1 ; VECTOR
1130 PLA ; POP ACCUMULATOR OFF OF STACK
1140 RTI ; RETURN FROM INTERRUPT
1150 ;
1160 ; INTERRUPT #5
1170 ;
1180 INT5 PHA ; PUSH ACCUMULATOR ON STACK
1190 LDA COLOR4 ; LOAD BACKGROUND COLOR
1200 EOR COLRSH ; PERFORM ATTRACT MODE OPERATIONS
1210 AND DRKMSK
1220 STA WSYNC ; WAIT FOR HORIZONTAL BLANK
1230 STA COLPF2 ; STORE IN GR.0 BACKGROUND COLOR REGISTER
1240 LDA #$E0 ; LOAD MSB OF ADDRESS OF CHARACTER SET IN ROM
1250 STA CHBASE ; STORE IN CHARACTER SET BASE POINTER
1260 LDA COLR7 ; LOAD DISPLAY COLOR SEVEN
1270 EOR COLRSH ; PERFORM ATTRACT MODE OPERATIONS
1280 AND DRKMSK
1290 STA COLPF1 ; STORE IN GR.0 LUMINANCE COLOR REGISTER
1300 PLA ; POP ACCUMULATOR OFF OF STACK
1310 RTI ; RETURN FROM INTERRUPT
1320 ;
1330 ; VERTICAL BLANK INTERRUPT
1340 ;
1350 VBI LDA # <INT1 ; LOAD ADDRESS OF FIRST
1360 STA VDSLST ; INTERRUPT INTO THE
1370 LDA # >INT1 ; DISPLAY LIST INTERRUPT
1380 STA VDSLST+1 ; VECTOR
1390 JMP SYSVBV ; JUMP TO OS VERTICAL BLANK ROUTINE
1400 ;
1410 ; SET VECTOR TO VERTICAL BLANK INTERRUPT
1420 ;
1430 PLA ; DISCARD NUMBER OF PARAMETERS PASSED IN BASIC CALL
1440 LDY # <VBI ; LOAD Y WITH LSB OF INTERRUPT ADDRESS
1450 LDX # >VBI ; LOAD X WITH MSB OF INTERRUPT ADDRESS
1460 LDA #6 ; LOAD ACCUMULATOR WITH SIX FOR IMMEDIATE VBI
1470 JSR SETVBV ; CALL OS ROUTINE TO SET VECTOR
1480 RTS ; RETURN FROM SUBROUTINE