org &a000

di
;; interrupt mode 1
im 1
ld hl,&c9fb
ld (&0038),hl
ei


ld bc,&bc09	; Max-Raster auf 1 Pixelzeile setzen
out(c),c
ld bc,&bd00	; Max Zeilenanzahl-1, d.h. 0=1 Zeile
out(c),c

ld bc,&bc04   ; Vertical Total auf 1 Basic-Screenzeile
out(c),c
ld bc,&bd00   ; Wiederholt die 1.te Basic-Screenzeile auf ganzem Bildschirm
out(c),c      ; Zusammen mit Register 9 wird 1 Pixelzeile auf dem ganzen
              ; Bildschirm wiederholt, solange die Bildschirmadresse
	      ; nicht pro Pixelzeile geaendert wird



start:

.rloop ld b,&f5   ; Auf V-Sync warten
.l1 in a,(c)
rra
jr nc,l1

halt		; 52 Zeilen abwarten



ld bc,&bc00+12   ; Bildschirmadresse High-Byte auf &4000
out(c),c
ld bc,&bd00+&10  ; &10 ^= &4000
out(c),c



ld bc,&bc00+13	; Test Bilddaten liegen an &4000-&8000
out(c),c
ld bc,&bd00+40	; Inhalt von Pixelzeile an &4050 einblenden
out(c),c

call schlei	; Wartet 24 Pixelzeilen/3 Basiczeilen ab,
		; d.h. der gleiche Speicherinhalt wird
		; auf 3 Basiczeilen ausgedehnt



ld bc,&bc00+13	; Weitere Testdaten einblenden
out(c),c
ld bc,&bd00+80
out(c),c
call schlei

ld bc,&bc00+13
out(c),c
ld bc,&bd00+120
out(c),c
call schlei

ld bc,&bc00+13
out(c),c
ld bc,&bd00+160
out(c),c
call schlei


call schlei2  ; soll die Differenz von 312-96 Pixelzeilen
	      ; ueberbruecken und nichts anzeigen, bevor
	      ; V-Sync durchgefuehrt wird

;ld bc,&bc00+13
;out(c),c
;ld bc,&bd00
;out(c),c

ld bc,&f700+%10000000  ; V-Sync forcieren
out (c),c
ld b,&f5
ld d,1
out (c),d

jp start


schlei:
ld b,24		; 24 Pixelzeilen a 64 us warten
loop:           ; damit 3 Basiczeilen "gemalt" werden
defs 64
djnz loop
ret


schlei2:       ; Restliche Zeit bis zur 312.ten Pixelzeile abwarten
ld b,8*27
loop2:
defs 64
djnz loop2
ret