
********************************************
* LISTING2 (ATMAS-FORMAT)
* VERTIKALES FINE-SCROLLING
* PETER FINZEL 1985
******************************************** 

YMIN     EQU $A800         SCROLLBEREICH-ANFANG
YMAX     EQU $A800+$1E0    SCROLLBEREICH-ENDE (24 ZEILEN)
VSMAX    EQU 15            MAX. FINESCROLL WERT
ZLAENG   EQU 20            BYTES PRO ZEILE
MOD      EQU 7+$20         ANTIC-MOSUS 7 + VSCROL BIT

SDLSTL   EQU $0230         DISPLAY LIST ADRESSE
STICK0   EQU $0278         JOYSTICK ABFRAGE
SETVBV   EQU $E45C         INTERRUPT SETZEN VEKTOR
XITVBV   EQU $E462         ABSCHLUSS VBI

VSCROL   EQU $D405         VERTIKALES SCROLL REGISTER
RANDOM   EQU $D20A         ZUFALLSZAHL

         ORG $0600         PROGRAMM STEHT IN PAGE 6

********************************************
* HAUPTSCHLEIFE BESTEHT AUS INITIALISIERUNG
* UND LEERSCHLEIFE, DA ALLES IM VBI STATTFINDET
********************************************

         JSR FILL          SCROLLSPEICHER MIT ZUFALLSMUSTER FUELLEN
         JSR VSINIT        DISPLAYLIST UND VBI EINRICHTEN
LOOP     JMP LOOP          DAUERSCHLEIFE (FINET ALLES IM VBI STATT)

********************************************
* DISPLALIST FUER GR.2 SCREEN
* UND EINE VARIABLE
********************************************

DLIST    DFB $70,$70,$70   DISPLAYLIST: 3X8 LEERZEILEN
         DFB MOD+$40       MODEZEILE MIT V-SCROLL UND LMS
LMSADR   DFW YMIN          STARTE BILDSPEICHER = START SCROLLSPEICHER
         DFB MOD,MOD,MOD   11 ZEILEN GR.2 MIT VSCROLL-BIT
         DFB MOD,MOD,MOD,MOD
         DFB MOD,MOD,MOD,MOD
         DFB MOD-$20       LETZTE GR.2 ZEILE BRAUCHT KEIN VSCROLL
         DFB $41           SPRUNG ZUM ANFANG DER DISPLAYLIST
         DFW DLIST

SVSCR    DFB 0             SHADOW-VARIABLE FR VSCROL

*********************************************
* INTITIALISIERUNG DER EIGENEN DISPLAYLIST
* UND DER VBI-ROUTINE
*********************************************

VSINIT   LDA #YMIN:L       LMS ADRESSE AUF ANFANG DES SCROLLBEREICHS
         STA LMSADR        SCHREIBEN. ERST LSB
         LDA #YMIN:H       DANN MSB
         STA LMSADR+1
         LDA #DLIST:L      NEUE DISPLAY-LIST NUTZEN
         STA SDLSTL        ERST LSB
         LDA #DLIST:H      DANN MSB
         STA SDLSTL+1
         LDA #0            VSCROL UND SEIN SCHATTENREGISTER AUF NULL
         STA VSCROL
         STA SVSCR
         LDY #VSVBI:L      UNSEREN EIGENEN VBI AKTIVIEREN
         LDX #VSVBI:H
         LDA #7
         JSR SETVBV
         RTS               UND ZURCK IN DIE HAUPTSCHLEIFE

*********************************************
* EIGEN VBI ROUTINE FUER VERTIKALES SCROLLING
* MIT JOYSTICK-STEUERUNG (HOCH-RUNTER)
*********************************************

VSVBI    LDA STICK0        JOYSTICK ABFRAGEN
         AND #1            NACH OBEN?
         BNE TSTUNT        NEIN -> DANN NACH UNTEN ABFRAGEN
         JSR OBEN          BILDSCHIRM NACH OBEN SCROLLEN
         JMP VBIEND        VBI KANN VERLASSEN WERDEN
TSTUNT   LDA STICK0        JOYSTICK ABFRAGEN
         AND #2            NACH UNTEN?
         BNE VBIEND        AUCH NICHT -> VBI VERLASSEN
         JSR UNTEN         BILDSCHIRM NACH UNTEN SCROLLEN
VBIEND   LDA SVSCR         SCHATENREGISTER SCROLLING
         STA VSCROL        IN HARDWAREREGISTER SCHREIBEN
         JMP XITVBV        EIGENE VBI ROUTINE VERLASSEN

********************************************
* UP: BILDSCHIRM NACH OBEN SCROLLEN
********************************************

OBEN     LDA SVSCR         SOFTSCROLL AM ANSCHLAG?
         BNE OB1           NEIN -> KEIN PRUEFUNG NOETIG
         LDA LMSADR        ENDE DES SCROLLBEREICHS ERREICHT?
         CMP #YMAX:L       LSB PRUEFEN
         BNE OB1           NEIN-> DANN SCROLLEN
         LDA LMSADR+1      MSB PRUEFEN
         CMP #YMAX:H
         BEQ OBEND         ENDE ERREICHT -> KEIN SCROLLING
OB1      INC SVSCR         FEINSCROLL POSITION ERHOEHEN
         LDA SVSCR         
         CMP #VSMAX+1      IST AUCH GROB-SCROLL NOTWENDIG?
         BCC OBEND         NEIN? -> SCROLLEN BEENDET
         LDA #0            FINESCROLL WIEDER AUF NULL
         STA SVSCR
         CLC               ADDITION VORBEREITEN
         LDA LMSADR        LMS ADRESSE UM
         ADC #ZLAENG       EINE ZEILE ERHOEHEN
         STA LMSADR        ERST LSB
         BCC OBEND         FALLS NOTWENDIG
         INC LMSADR+1      AUCH MSB
OBEND    RTS               UP-SCROLL BEENDET

********************************************
* DOWN: BILDSCHIRM NACH UNTEN SCROLLEN
********************************************

UNTEN    LDA SVSCR         SOFTSCROLL AM ANSCHLAG?
         BNE UN1           NEIN -> KEIN PRUEFUNG NOETIG
         LDA LMSADR        ENDE DES SCROLLBEREICHS ERREICHT?
         CMP #YMIN:L       LSB PRUEFEN
         BNE UN1           NEIN-> DANN SCROLLEN
         LDA LMSADR+1      MSB PRUEFEN
         CMP #YMIN:H
         BEQ UNEND         ENDE ERREICHT -> KEIN SCROLLING
UN1      DEC SVSCR         FEINSCROLL POSITION VERMINDERN        
         BPL UNEND         SOLANGE NICHT 0 -> SCROLL BEENDET
         LDA #VSMAX        FALLS DOCH FINE-SCROLLWERT
         STA SVSCR         WIEDER AUF MAXIMUM
         SEC               SUBSTRAKTION VORBEREITEN
         LDA LMSADR        LMS ADRESSE UM
         SBC #ZLAENG       EINE ZEILE VERMINDERN
         STA LMSADR        ERST LSB
         BCS UNEND         FALLS NOTWENDIG
         DEC LMSADR+1      AUCH MSB
UNEND    RTS               UP-SCROLL BEENDET

********************************************
* DEN SCROLL-SPEICHER MIT ZUFALLSMUSTER
* DAMIT MAN AUCH WAS SIEHT
********************************************

FILL     LDX #3            3 SEITEN FLLEN
         LDY #0
         LDA #YMIN:L       SCROLLSEITEN-ANFANGSADRESSE
         STA $80           IN ZEROPAGE ADRESSE SPEICHERN
         LDA #YMIN:H
         STA $81
RND1     LDA RANDOM        ZUFALLSZAHL LADEN
         STA ($80),Y       INDIREKT INDIZIERT IN SCROLLSPEICHER
         INY               INDIZIERUNGSWERT ERHHEN    
         BNE RND1          UND WEITER BIS WIEDER BEI NULL
         INC $81           MSB AUCH UM 1 ERHHEN
         DEX               
         BNE RND1          BIS 3 SEITEN GESCHRIEBEN SIND
         RTS               DANN ZURCK



