
 1000  *SAVE SUPER SCROLL GENERATOR
 1010  *--------------------------------
 1020  *
 1030  *    APPLE SUPER SCROLLER
 1040  *
 1050  *--------------------------------
 1060  *      PROGRAM TO CREATE A FAST SCROLLER
 1070  *
 1080  *      CREATES AN ALL "IN-LINE" SCROLL ROUTINE
 1090  *      WHICH MAY BE CALLED AS A SUBROUTINE.
 1100  *
 1110  *      WILL SCROLL LINES 2-24 UP TO LINES 1-23
 1120  *      IN ONLY 7.6 MILLISECONDS.
 1130  *
 1140  *      BOTTOM LINE IS LEFT UNCHANGED; YOU MAY
 1150  *      WISH TO ADD MORE CODE TO BLANK BOTTOM LINE.
 1160  *--------------------------------
 1170   
 1180  PGM.START.IN.RAM      .EQ $4000 
 1190  PROGRAM               .EQ $02 - $03
 1200  UPPER.LINE            .EQ $04 - $05
 1210  LOWER.LINE            .EQ $06 - $07
 1220  *--------------------------------
 1230         .MA SCRN
 1240         .DA ]1,]1+$80,]1+$100,]1+$180
 1250         .DA ]1+$200,]1+$280,]1+$300,]1+$380
 1260         .EM
 1270  *--------------------------------
 1280  APPLE.SCREEN.ADDRESSES
 1290         >SCRN $400     LINES 1-8
 1300         >SCRN $428     LINES 9-16
 1310         >SCRN $450     LINES 17-24
 1320  *--------------------------------
 1330  PGM.TO.WRITE.SCROLLING.PGM
 1340   
 1350         LDA #PGM.START.IN.RAM
 1360         STA PROGRAM
 1370         LDA /PGM.START.IN.RAM
 1380         STA PROGRAM+1
 1390  *--------------------------------
 1400         LDX #0       FOR LINE = 1 TO 23
 1410  .1     LDA APPLE.SCREEN.ADDRESSES,X
 1420         STA UPPER.LINE
 1430         LDA APPLE.SCREEN.ADDRESSES+1,X
 1440         STA UPPER.LINE+1
 1450   
 1460         LDA APPLE.SCREEN.ADDRESSES+2,X
 1470         STA LOWER.LINE
 1480         LDA APPLE.SCREEN.ADDRESSES+3,X
 1490         STA LOWER.LINE+1
 1500   
 1510         TXA          SAVE LINE #
 1520         PHA
 1530  *--------------------------------
 1540         LDX #40      FOR CHAR = 1 TO 40
 1550  .2     LDY #0
 1560         LDA #$AD       "LDA ABSOLUTE"
 1570         STA (PROGRAM),Y
 1580         INY
 1590         LDA LOWER.LINE
 1600         STA (PROGRAM),Y
 1610         INY
 1620         LDA LOWER.LINE+1
 1630         STA (PROGRAM),Y
 1640         INY
 1650         LDA #$8D       "STA ABSOLUTE"
 1660         STA (PROGRAM),Y
 1670         INY
 1680         LDA UPPER.LINE
 1690         STA (PROGRAM),Y
 1700         INY
 1710         LDA UPPER.LINE+1 
 1720         STA (PROGRAM),Y
 1730  *--------------------------------
 1740         TYA          UPDATE PROGRAM POINTER
 1750         SEC
 1760         ADC PROGRAM
 1770         STA PROGRAM
 1780         BCC .3
 1790         INC PROGRAM+1
 1800  .3     INC UPPER.LINE    NEXT CHAR POSITION
 1810         INC LOWER.LINE
 1820         DEX
 1830         BNE .2
 1840  *--------------------------------
 1850         PLA
 1860         TAX
 1870         INX          NEXT LINE
 1880         INX
 1890         CPX #2*23
 1900         BNE .1
 1910  *--------------------------------
 1920         LDY #0
 1930         LDA #$60       "RTS"
 1940         STA (PROGRAM),Y
 1950         RTS
 1960  *--------------------------------
 1970  * A FAST MEMORY DUMP!!
 1980  *--------------------------------
 1990  MEML                 .EQ $8
 2000  MEMH                 .EQ $9
 2010  SCREEN.WRITE.LINE    .EQ $7D0
 2020  *--------------------------------
 2030  START.DEMO
 2040         JSR PGM.TO.WRITE.SCROLLING.PGM
 2050  MEMDUMP
 2060         LDA #0       DISPLAY FROM $0000 THRU $BFFF
 2070         STA MEML
 2080         STA MEMH
 2090  .1     LDX #0       X = CHAR PNTR IN OUTPUT LINE
 2100         LDA MEMH     DISPLAY ADDRESS
 2110         JSR DISPLAY.BYTE
 2120         LDA MEML
 2130         JSR DISPLAY.BYTE
 2140         LDA #$AD     "- "
 2150         STA SCREEN.WRITE.LINE,X
 2160         INX
 2170         LDA #$A0
 2180         STA SCREEN.WRITE.LINE,X
 2190         INX
 2200         LDY #0
 2210  .2     LDA (MEML),Y      DISPLAY 8 BYTES
 2220         JSR DISPLAY.BYTE
 2230         LDA #$A0
 2240         STA SCREEN.WRITE.LINE,X
 2250         INX
 2260         INY
 2270         CPY #8
 2280         BNE .2
 2290  .3     STA SCREEN.WRITE.LINE,X
 2300         INX
 2310         CPX #40      CLEAR TO END OF LINE
 2320         BCC .3
 2330  *--------------------------------
 2340         JSR PGM.START.IN.RAM
 2350  *--------------------------------
 2360         LDA #8
 2370         CLC
 2380         ADC MEML
 2390         STA MEML
 2400         LDA MEMH
 2410         ADC #0
 2420         STA MEMH
 2430  .4     CMP #$C0     STOP AT $BFFF
 2440         BNE .1
 2450         RTS
 2460  *--------------------------------
 2470  DISPLAY.BYTE
 2480         PHA
 2490         LSR
 2500         LSR
 2510         LSR
 2520         LSR
 2530         JSR DISPLAY.NYBBLE
 2540         PLA
 2550         AND #$0F 
 2560  DISPLAY.NYBBLE
 2570         ORA #$B0     MAKE HEX DIGIT
 2580         CMP #$BA
 2590         BCC .1
 2600         ADC #6
 2610  .1     STA SCREEN.WRITE.LINE,X
 2620         INX
 2630         RTS

