; http://www.cpcrulez.2ya.com
;

; -** HORIZONTAL STAR FLYING **- by HYPNOM '94  Version 3


org &4000

                           ; Sterne setzen:

loop ld de,tab            ; DE zeigt auf Anfang der Stern(screen)adressentabelle
ld b,6                    ; 6 Sterne, also 6 Durchlaeufe der Schleife, B ist Zaehler dafuer
loop1 ld a,(de)           ; nach A Highbyte der aktuellen Sternadresse
ld l,a                    ; weitergeben nach L
inc de                    ; Sternadressentabellenzeiger DE weiterruecken auf Lowbyte
ld a,(de)                 ; dieses Lowbyte nach A schreiben
ld h,a                    ; und weitergeben nach H ==> HL enthaelt nun Sternadresse
ld a,(hl)                 ; Inhalt der Sternadresse vom Screen nach A
cp 0                      ; vergleichen mit 0, also, ob an der Screenstelle Grafik steht
jr nz,continue            ; wenn Screenadresseninhalt ungleich 0, dann => Label continue
ld (hl),32                ; an Screenadresse (HL) Stern setzen (Wert 32)
continue inc de           ; DE auf Highbyte der naechsten Sternscreenaddy
djnz loop1                ; B wird eins runtergezaehlt und nach Label loop1
                          ; gesprungen, solange B groesser 0 ist

call &bb09                ; Taste gedrueckt?
ret c                     ; wenn ja (Carry-Flag gesetzt), dann zurueck ins Basic
call &bd19                ; Frame Fly Back, also abwarten, bis Elektronenstrahl den
                          ; Screen fertig gezeichnet hat

                          ; Sterne loeschen:

xloop ld de,tab           ; DE zeigt auf Anfang Sternscreenaddytabelle
ld b,6                    ; B als Schleifenzaehler wieder auf 6
xloop1 ld a,(de)
ld l,a
inc de
ld a,(de)
ld h,a                    ; bis hierhin wurde die Addy wieder nach HL geladen
ld a,(hl)
cp 32                     ; Screeninhalt mit 32 (=Stern) vergleichen
jr nz,xcontinue           ; wenn kein Stern gesetzt, dann war da Grafik,=> Label xcontinue
ld (hl),0                 ; sonst Stern loeschen
xcontinue inc hl          ; Screenadresse erhoehen
ld a,h
or l
cp 0                      ; Vergleichsrouti, ob Adresse groesser als &FFFF, also &0000
jr nz,xcontinue1          ; wenn nein, dann weiter bei xcontinue1
ld hl,&c000               ; sonst Addy auf Screenanfang setzen
xcontinue1 dec de
ld a,l
ld (de),a
inc de
ld a,h
ld (de),a
inc de                    ; neue Screenaddy in Tabelle setzen (Zeiger muš dazu verschoben
djnz xloop1               ; und B dekrementieren und naechster Stern          werden)

jr loop                   ; und alles von vorne

tab dw &cf0f,&d5e0,&ed55,&f242,&caaa,&f000