
*************************************
* LISTING 1b:
* 
* HORIZONTAL ES FEIN-SCROLLING
* IN MASCHINENSPRACHE
* 
* PETER FINZEL 85
*************************************
* 
* KONSTANTE
* 
BASIS    EQU $5000
HSMAX    EQU 7             ;MAXIMAL VERSCHIEBUNG FEINSCROLLING
ZEILE    EQU 256           ;ZEILENLAENGE IN BYTE
ZZAHL    EQU 10            ;ANZAHL DER ZEILEN AM SCHIRM
GRBMAX   EQU 233           ;RECHTES ZEILENENDE
MOD      EQU 7+$50         ;ANTIC MODUS 7, HSCROL UND LMS
BASZP    EQU $E0           ;BASIS ADRESSE IN ZP
TMP1     EQU $E2           ;TEMP VARIABLE
* 
* OPERATING SYSTEM
* 
SDLSTL   EQU $0230         ;SCHATTENREG. DISPLAY-LISTADRESSE
STICK0   EQU $0278         ;SCHATTENREG. F. JOYSTICK NR. 0
SETVBV   EQU $E45C         ;ROUTINE F. INTERRUPTVEKOREN
XITVBV   EQU $E462         ;ABSCHLUSS DES VBI
*
* HARDWARE
*
RANDOM   EQU $D20A         ;ZUFALLSZAHL
HSCROL   EQU $D404         ;REGISTER HOR.VERSCHIEBUNG
*
*************************************
* PROGRAMM-EINSPRUNG
*************************************
*
         ORG $A800         ;WIE IMMER IN $A800
*
         JMP HSINIT        ;SPRUNG ZUM MP-ANFANG
*
*************************************
* DISPLAY-LIST FUER HORIZONTAL
* SCROLLENDES 'GRAPHICS 2'-DISPLAY
* 10 ZEILEN ANTIC-MODUS 7
*************************************
*
DLIST    DFB $70,$70,$70   ;3 LEERZEILEN
         DFB MOD           ;ANTIC-BEFEHL
LMSADR   DFW BASIS         ;ADRESSE BILDSPEICHER
         DFB MOD
         DFW BASIS+ZEILE
         DFB MOD
         DFW BASIS+(ZEILE*2)
         DFB MOD
         DFW BASIS+(ZEILE*3)
         DFB MOD
         DFW BASIS+(ZEILE*4)
         DFB MOD
         DFW BASIS+(ZEILE*5)
         DFB MOD
         DFW BASIS+(ZEILE*6)
         DFB MOD
         DFW BASIS+(ZEILE*7)
         DFB MOD
         DFW BASIS+(ZEILE*8)
         DFB MOD
         DFW BASIS+(ZEILE*9)
         DFB $41           ;ANTIC-JMP-BEFEHL
         DFW DLIST         ;ZUM ANFANG DER DISP.-LIST
*
*************************************
* INTERNE VARIABLE
*************************************
*
SHSCR    DFB 0             ;SCHATTENREGISTER HSCROL
GRBSCR   DFB 0             ;ZAEHLER FUER GROBSCROLLING
*
*************************************
* INITIALISIERUNGSROUTINE ZUM
* EINRICHTEN DES 
* BILDSCHIRMHINTERGRUND
*************************************
*
HSINIT   LDA #BASIS:L
         STA BASZP
         LDA #BASIS:H
         STA BASZP+1
         LDY #0
LOOP0    LDA RANDOM        
         AND #%00000111    ;0-7
         ASL
         ASL
         ASL
         TAX
         CLC
         ADC #8
         STA TMP1
LOOP1    LDA MUSTER,X
         STA (BASZP),Y
         INC BASZP+1
         INX
         CPX TMP1
         BNE LOOP1
         LDA #BASIS:H
         STA BASZP+1
         INY
         BNE LOOP0
*
*************************************
* INITIALISIERUNGSROUTINE ZUM
* EINRICHTEN DER NEUEN DISP.-LIST
* UND DER VBI -ROUTINE
* UND DEM BILDSCHIRMHINTERGRUND
*************************************
*
         LDA #0            ;GROBSCROLLING
         STA GRBSCR        ;AUF NULL
         JSR SETLMS        ;UND DISPLAYLIST VORBEREITEN
         LDA #DLIST:L      ;NEUE DISP.-LIST
         STA SDLSTL        ;EINSCHALTEN
         LDA #DLIST:H
         STA SDLSTL+1
         LDA #0            ;FEIN-SCROLLING IN AUSGANGS-
         STA HSCROL        ;POSITION SETZEN
         STA SHSCR         ;AUCH SCHATTENREGISTER!
         LDY #HSVBI:L      ;SCROLL-ROUTINE IN
         LDX #HSVBI:H      ;DEN VBI EINFUEGEN
         LDA #7            ;DEFERRED VBI GENUEGT
         JSR SETVBV        ;OHNE KOMMENTAR...
ENDLESS  JMP ENDLESS
*
*************************************
* VBI-ROUTINE F. HOR. SCROLLING
*************************************
*
HSVBI    CLD               ;6502 RECHNET BINAER
         LDA STICK0        ;JOYSTICK 0
         AND #8            ;NACH RECHTS?
         BNE TLINKS        ;NEIN, VERSUCHE LINKS - >
*
         JSR RECHTS        ;BILDSCHIRM NACH RECHTS
         JMP VBIEND        ;FERTIG !===>
*
TLINKS   LDA STICK0
         AND #4            ;NACH LINKS GEZOGEN?
         BNE VBIEND        ;NEIN, KEIN SCROLLING!
*
         JSR LINKS         ;NACH LINKS SCROLLEN
*
VBIEND   LDA SHSCR         ;SCHATTENREGISTER FEINSCROLL
         STA HSCROL        ;IN HARDWAREREG. UEBERTRAGEN
         JMP XITVBV        ;SCHLUSS FUER HEUTE!
*
*************************************
* UP BILDSCHIRM NACH LINKS
*************************************
*
LINKS    LDA SHSCR         ;ZEICHENGRENZE ERREICHT?
         BNE LNK1          ;NEIN - >
*
         LDA GRBSCR        ;WEITERES SCROLLING
         CMP #GRBMAX       ;NACH LINKS MOEGLICH?
         BCS LNKEND        ;NEIN, KEIN SCROLLING ->
LNK1     DEC SHSCR         ;EIN PIXEL NACH LINKS
         LDA SHSCR         ;REICHT FEINSCROLLING?
         BPL LNKEND        ;JAWOHL, DANN FERTIG
*
         LDA #HSMAX        ;FEINVERSCHIEBUNG ZURUECK
         STA SHSCR
         INC GRBSCR        ;GROBPOSITION WEITER
         JSR SETLMS        ;IN DISPLAYLIST EINTRAGEN
LNKEND   RTS
*
*************************************
* UP BILDSCHIRM NACH RECHTS
*************************************
*
RECHTS   LDA SHSCR         ;ZEICHENGRENZE ERREICHT?
         BNE RHT1          ;NEIN - >
*
         LDA GRBSCR        ;RAND ERREICHT?
         BEQ RHTEND        ;JA, KEIN SCROLLING ->
RHT1     INC SHSCR         ;EIN PIXEL RECHTS
         LDA SHSCR         ;FEINSCROLLING AUSREICHEND?
         CMP #HSMAX+1
         BCC RHTEND
*
         LDA #0            ;FEINSCROLLING
         STA SHSCR         ;RUECKSETZEN
         DEC GRBSCR        ;GROB-POS. ZURUECK
         JSR SETLMS        ;IN DISP.-LIST EINTRAGEN
RHTEND   RTS
*
*************************************
* UP EINTRAGEN DER LMS ADRESSE
*************************************
*

SETLMS   LDX #0            ;INDEX IN DISP.-LIST
         LDA GRBSCR        ;GROBSCROLL-POSITION
NXTLMS   STA LMSADR,X      ;IN ZWEITEN BYTE
         INX               ;JEDER ANTIC-ANWEISUNG
         INX               ;EINTRAGEN
         INX
         CPX #ZZAHL*3      ;ALLE ZEILEN BEARBEITET?
         BCC NXTLMS        ;NOCH NICHT - >
         RTS
*
***************************************
* MUSTERTABELLE FUER ZUFALLSHINTERGRUND
***************************************
*
MUSTER   DFB 0,0,0,0,0,0,0,67
         DFB 0,0,0,0,0,0,3,67
         DFB 0,0,0,0,0,3,3,67
         DFB 0,0,0,0,3,3,3,67
         DFB 0,0,0,3,3,3,3,67
         DFB 0,0,3,3,3,3,3,67
         DFB 0,3,3,3,3,3,3,67
         DFB 3,3,3,3,3,3,3,67

