;; Laufschriftroutine exx ex af,af' ld hl,Interrupt6 ;Adresse des naechsten Interrupt-Handlers ld (&0039),hl ;setzen ld bc,&bc04 ;Vertical Total out (c),c ld bc,&bd00+8-1 ;Hoehe des Blocks-1 out (c),c ld bc,&bc06 ;Vertikal angezeigte Hoehe setzen out (c),c scr_screen_height: ld bc,&bd04 out (c),c .start ld hl,screen_location ;; Bildposition. Startwert &3000 =^ &C000 inc hl ld a,h and &33 ld h,a ld (start+1),hl ; An den CRTC senden Int6Addr_Plus2: ld bc,&bc00+12 out (c),c inc b out (c),h dec b inc c out (c),c inc b out (c),l ;;;; ; Scrollmessage malen scr_bas_zeilen: ld b,4 ; 4 BASIC-Zeilen ld hl,(scraktsrc) ; Aktuelle Font Quelladresse ld de,(scraktdest) ; Aktuelle Zielbildschirmadresse push de fontzeilschlei: push bc ld b,8 ;8 Pixelzeilen = 1 BASIC-Screenzeile fontzeile: ld a,(hl) ld (de),a inc hl inc de ld a,(hl) ld (de),a inc hl dec de call scr_next_line djnz fontzeile pop bc djnz fontzeilschlei ;; Pruefen, ob alle Spalten des Buchstabens fertig gemalt sind ld a,(scranzspalt) inc a doppelspalt: cp a,4 ; 4 Doppel Spalten (8 Bytes) gezeichnet? jr nz, scrende ; Wenn nicht, Buchstaben weiterzeichnen ld hl,(scrtxtpointer) ; Zeiger auf neuen Buchstaben inc hl ld a,(hl) cp 00 ; Scrollmessage Ende? jr nz, fetchcharweiter ld hl,scrolltext ld (scrtxtpointer),hl ld a,(scrolltext) ld hl,scrolldatenadr ld de,scrollbildadr jr scrvonvorne fetchcharweiter: ld (scrtxtpointer),hl ;; Animationsaktion geplant? ;; Animationen werden von "Marken" im Laufschrifttext getriggert cp 01 jr nz, scr_weiterm1 ld iy,actionflag inc (iy) ld a,"@" scr_weiterm1: cp 11 jr nz, scr_weiterm2 ld iy,actionflag ld (iy),a ld a,"@" scr_weiterm2: cp 02 jr nz, scr_weitermachen ld iy,actionflag ld (iy),a ld a,"@" ;;; scr_weitermachen: sub "0" ; Ascii Null abziehen...Font beginnt dort add a,a ld hl,scrolladrtab ;Adresstabelle der Fontzeichen ;Die Adressen der Zeichen sind vorkalkuliert! ld e,a ld d,0 add hl,de ; Adresse aus der Tabelle holen ld e,(hl) ; Adresse des Zeichens holen inc hl ld d,(hl) ex de,hl scrvonvorne: xor a ;; scrende: ld (scranzspalt),a pop de ld (scraktsrc),hl keinende: inc de ; Fuer 2 Spalten 2*inc de inc de ld a,d and &47 ld d,a ld (scraktdest),de ifdef R6_Mode ;Screenmode change does not occur at the same time as the rupture ld b,8*4+4 ;We need to delay to correct this by waiting (slow) IntDelay5 ds 1 ;NOPS djnz IntDelay5 actionmodechange: ld bc,&7F00+128+4+8+R6_Mode out (c),c ;Change screen mode endif ex af,af' exx ei ret ;; ;; Unterroutine SCR_NEXT_LINE ;; ;; errechnet die Adresse der naechsten Pixelzeile der Laufschrift, ;; sowie eine evtl. neue BASIC-Screenzeile ;; .scr_next_line ld a,d add a,&08 ; Neue Pixelzeile ist +&800 ld d,a and &38 ; Letzte Pixelzeile? ret nz ld a,e add a,&50 ; Neue BASIC-Screenzeile +&50 ld e,a ld a,d adc a,&c0 ; ld d,a and &38 ret z ld a,d sub &8 ld d,a ret