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