¢00010 .LI OFF¢00020 ; .OF "D:KURS6.COM"¢00040 ------------------------------¢00050 BUFFER .BL 44,0 unsere Bildschirmzeile¢00060 POSITION .HX 0000 Position im Text¢00070 ------------------------------¢00080 TEXT ; Dieser Text wird ausgegeben¢00090 .AT " Ein weiteres phaenomenales Programm "¢00100 .AT "(aehem) des Assemblerkurses im "¢00110 .AT "צ⌠≥β∈τσáח∈÷β≤Θ∩∈ - dem monatlichen Magazin, "¢00120 .AT "das viermal im Jahr erscheint oder so "¢00130 .AT "aehnlich... Genug gelaestert......................."¢00140 TEXTLENGTH = *-TEXT¢00150 ------------------------------¢00160 POINTER = $FE brauchen wir fuer indirekten Zugriff¢00170 HSCROL = $D404 Das Register, welches Softscrolling ermoeglicht¢00180 ------------------------------¢00190 DLIST ; unsere Ergaenzung zur Displaylist¢00200 .HX 52 Gr.0 + Softscolling + neue Adresse¢00210 .DA BUFFER die eben erwaehnte Adresse¢00220 .HX 41 auf VSYNC warten uns Zurueckspringen¢00230 DLPTR .DA 00 die Anfangsadresse der Displaylist¢00240 ------------------------------¢00250 VSYNC ; auf VSync warten¢00260 LDA 20 Uhr abfragen...¢00270 .1¢00280 CMP 20¢00290 BEQ .1 bis sie sich aendert¢00300 RTS¢00310 ------------------------------¢00320 SOFTSCROLL ; 3,2,1,0 in HSCROL schreiben...¢00330 LDX #3¢00340 .1¢00350 STX HSCROL¢00360 JSR VSYNC ...und dazwischen auf VSync warten¢00370 DEX¢00380 BPL .1¢00390 RTS¢00400 ------------------------------¢00410 SHIFTBUFFER ; Buffer um 1 Byte nach links verschieben¢00420 LDX #0¢00430 .1¢00440 LDA BUFFER+1,X¢00450 STA BUFFER,X¢00460 INX¢00470 CPX #43 ; wir brauchen nur 43 Bytes verschieben¢00480 BCC .1¢00490 RTS¢00500 ------------------------------¢00510 INIT ; neue DL "einhaengen"¢00520 LDA 560 $41 in der richtigen DL suchen¢00530 STA POINTER¢00540 LDA 561¢00550 STA POINTER+1¢00560 LDY #0¢00570 .1¢00580 LDA (POINTER),Y¢00590 CMP #$41¢00600 BEQ .2¢00610 AND #$40 neue Adressen beruecksichtigen¢00620 BEQ .3¢00630 INY¢00640 INY¢00650 .3¢00660 INY¢00670 JMP .1¢00680 .2¢00690 INY Ruecksprungadresse uebernehemen¢00700 LDA (POINTER),Y¢00710 STA DLPTR¢00720 INY¢00730 LDA (POINTER),Y¢00740 STA DLPTR+1¢00750 DEY¢00760 DEY¢00770 JSR VSYNC sicherheitshalber warten¢00780 LDA #1 "Sprung ohne Warten" eintragen¢00790 STA (POINTER),Y¢00800 INY¢00810 LDA #DLIST unsere DL-Erweiterung einhaengen¢00820 STA (POINTER),Y¢00830 INY¢00840 LDA /DLIST¢00850 STA (POINTER),Y¢00860 RTS¢00870 ------------------------------¢00880 START¢00890 JSR INIT DL vorbereiten¢00900 .1¢00910 JSR SHIFTBUFFER Buffer nach links schieben¢00920 CLC aktuelle Position im Text berechnen¢00930 LDA #TEXT¢00940 ADC POSITION¢00950 STA POINTER¢00960 LDA /TEXT¢00970 ADC POSITION+1¢00980 STA POINTER+1¢00990 LDY #0¢01000 LDA (POINTER),Y neuen Buchstaben holen¢01010 STA BUFFER+43 und am Ende vom Buffer eintragen¢01020 JSR SOFTSCROLL und saaaanft scrollen¢01030 INC POSITION Position im Text erhoehen¢01040 BNE .2¢01050 INC POSITION+1¢01060 .2¢01070 LDA POSITION+1¢01080 CMP /TEXTLENGTH sind wir schon am Ende?¢01090 BCC .1¢01100 LDA POSITION¢01110 CMP #TEXTLENGTH¢01120 BCC .1¢01130 LDA #0 dann alles von vorne¢01140 STA POSITION¢01150 STA POSITION+1¢01160 JMP .1¢01170 ------------------------------¢01180 ; .OR $2E0¢01190 ; .DA START¢01200 ------------------------------¢