;; 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
