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›