Classic Computer Magazine Archive PROGRAM LISTING: 85-06/PALETTE.ASM


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

Back to previous page