Classic Computer Magazine Archive PROGRAM LISTING: 85-10/FINESCRL.M65


0 ; FINE SCROLLING, LISTING 1
10 ; BY MARK ANDREWS
20 ; ANTIC PUBLISHING
30 ;
40       *=  $3000
45       JMP INIT
50 ;
60 SDMCTL =  $022F
70 ;
80 SDLSTL =  $0230
90 SDLSTH =  $0231
0100 ;
0110 COLOR0 = $02C4  ;OS COLOR REGISTER
0120 COLOR1 = $02C5
0130 COLOR2 = $02C6
0140 COLOR3 = $02C7
0150 COLOR4 = $02C8
0160 HSCROL = $D404
0162 VVBLKI = $0222  ;OS INTERRUPT VECTOR
0164 SYSVBV = $E45F  ;INTERRUPT ENABLE VECTOR
0166 SETVBI = $E45C  ;SET VERTICAL BLANK INTERRUPT VECTOR
0168 XITVBL = $E462  ;EXIT VBI VECTOR
0170 TCKPTR = $2000
0180 FSCPTR = TCKPTR+1
0190     .OPT OBJ
0200 ;
0210 ; DISPLAY LIST DATA
0220 ;
0230 START
0240 LINE1 .SBYTE "   ANTIC PRESENTS   "
0250 LINE2 .SBYTE "                        "
0260     .SBYTE "      fine scrolling        "
0270 LINE3 .SBYTE "             On Your"
0280     .SBYTE " Atari              "
0290 LINE4 .SBYTE "   BY (YOUR NAME)   "
0300 ;
0310 ; DISPLAY LIST
0320 ;
0330 HLST NOP        ;('HELLO' LIST)
0340     .BYTE $70,$70,$70
0350     .BYTE $70,$70,$70,$70,$70
0360     .BYTE $46
0370     .WORD LINE1
0380     .BYTE $70,$70,$70,$70,$57
0390 SCROLN NOP      ;(THIS IS THE LINE WE'LL SCROLL)
0400     .WORD $00   ; A BLANK TO BE FILLED IN LATER
0410     .BYTE $70,$42
0420     .WORD LINE3
0430     .BYTE $70,$70,$70,$70,$46
0440     .WORD LINE4
0450     .BYTE $70,$70,$70,$70,$70
0460     .BYTE $41
0470     .WORD HLST
0480 ;
0490 ; RUN PROGRAM
0500 ;
0510 INIT NOP        ;PREPARE TO RUN PROGRAM
0520     LDA COLOR3  ; SET COLOR REGISTER
0530     STA COLOR1
0540     LDA COLOR4
0550     STA COLOR2
0560 ;
0570     LDA #0      ; TELL ANTIC WHERE DISPLAY LIST IS
0580     STA SDMCTL
0590     LDA #HLST&255
0600     STA SDLSTL
0610     LDA #HLST/256
0620     STA SDLSTH
0630     LDA #$22
0640     STA SDMCTL
0645     JSR TCKSET  ; INITIAIZE TICKER ADDRESS
0650 ;
0660 ; FINE-SCROLLING ROUTINE
0680     LDA #42     ; # OF CHARACTERS IN SCROLL LINE
0690     STA TCKPTR
0700     LDA #8
0710     STA FSCPTR  ; NUMBER OF COLOR CLOCKS TO FINE-SCROLL
0720 ;
0730 ; ENABLE INTERRUPT
0740 ;
0750     LDY #TCKINT&255
0760     LDX #TCKINT/256
0770     LDA #6
0780     JSR SETVBI
0790 ;
0800 ; TICKER INTERRUPT
0810 ;
0820 TCKINT
0830     LDA #SCROLL&255
0840     STA VVBLKI
0850     LDA #SCROLL/256
0860     STA VVBLKI+1
0870 ;
0880 INFIN
0890     JMP INFIN   ; INFINITE LOOP
0900 ;
0910 SCROLL
0920     LDX FSCPTR  ;8 TO START
0925     DEY 
0930     DEX 
0940     STX HSCROL
0950     BNE CONT
0960     LDX #8
0970 CONT NOP        ; (CONTINUE)
0980     STX FSCPTR
0990     CPX #7
1000     BEQ COARSE
1010     JMP SYSVBV
1020 COARSE
1030     LDY TCKPTR  ; NUMBER OF CHARACTERS TO SCROLL
1040     DEY 
1050     BNE SCORSE  ; LOOP BACK TILL ENTIRE LINE IS SCROLLED
1060     LDY #42
1070     JSR TCKSET  ; RESET TICKER LINE
1080 SCORSE NOP      ; DO COARSE SCROLL
1090     STY TCKPTR
1100     INC SCROLN  ; LOW BYTE OF ADDRESS
1110     BNE RETURN
1120     INC SCROLN+1 ; HIGH BYTE OF ADDRESS
1130 RETURN
1140     JMP SYSVBV
1150 ;
1160 TCKSET
1170     LDA #LINE2&255
1180     STA SCROLN
1190     LDA #LINE2/256
1200     STA SCROLN+1
1210 ENDIT
1220     RTS 
1280     *=  $02E0
1290     .WORD INIT

Back to previous page