title The Game of Target name ('TARGET') include solvdm.lib ; ******* TARGET ******* ; ;A VIDEO TARGET SHOOTING GAME USING THE SOL VIDEO TERMINAL ; ; ######################################################## ; # Angepasst an den JOYCE, Werner Cirsovius, Maerz 2002 # ; ######################################################## extrn SOLon,CONsta,CONdat _tarmv equ 24 gloc equ SOLvid+ 7*maxcol+ 0 ; Platz der Kanone tloc equ SOLvid+15*maxcol+63 ; Anfang der Zielstellung win equ SOLvid+15*maxcol+13 lose equ SOLvid+15*maxcol+ 4 mloc equ SOLvid+ 7*maxcol+ 1 ; Raketenstellung ; _dow equ _rdw upsym equ _rup msym equ _msl ; Raketensymbol target equ _rup ; Zielsymbol _gun equ _bcr ; ; Spielstart ; init: ld sp,LocStk call SOLon ; SOL einschalten ld hl,gloc ld_hl_8 _gun ; Symbol der Kanone ld hl,tloc ; Anfangszielstellung ld_hl_8 target ; Ziel einsetzen ex de,hl ld bc,MSB*256+0 ld a,'0' ; Zaehler initiieren ld hl,win ld_hl_a inc hl ld_hl_a ld hl,lose ld_hl_a inc hl ld_hl_a ; ; Hauptschleife ; loop1: call indel ; Test, ob Taste betaetigt rra call c,tstem ; .. ja inc c ; Zaehler erhoehen ld a,c sub _tarmv ; Ziel verzoegert bewegen jr nz,tstmis ld c,a ld_a_de ; Zielsymbol holen cp upsym ld a,' ' ; .. loeschen ld_de_a jr nz,down ; Bewegung nach unten ; ; Bewegung des Ziels ist nach oben ; up: ld a,e ; Position laden sub maxcol ; .. eine Zeile hoeher ld e,a ld a,d sbc a,0 ld d,a cp high SOLvid ; Test Ueberlauf jr nz,stup ; .. nein ld a,e cp maxcol-1 jr nz,stup ; ; Raketensymbol nach unten Setzen ; stdown: ld a,_dow ; Symbol nach unten jr ..tstmis ; ; Bewegung des Ziels ist nach unten ; down: ld a,e ; Position laden add a,maxcol ; .. eine Zeile tiefer ld e,a ld a,d adc a,0 ld d,a ; Test Ueberlauf cp high (SOLvid+12*maxcol) jr nz,stdown ld a,e cp -1 jr nz,stdown ; ; Raketensymbol nach oben Setzen ; stup: ld a,upsym ..tstmis: ld_de_a ; Symbol setzen tstmis: ld a,b rlca ; Test Rakete bereits initiiert jr c,loop1 ; .. nein ld_hl_8 ' ' inc hl ld a,l cp -1 ; Test Wert jr z,tsthit ld_hl_8 msym ; .. Rakete setzen jr loop1 ; ; Test ob Treffer ; tsthit: ld_a_hl cp ' ' ; Test Treffer jr z,nohit ; .. nein ; ; Teffer ; hit: ld_hl_8 _fls+MSB ; Treffer anzeigen ld hl,win+1 call incr push hl ; ; Verzoegerung ca. 150 Millisekunden (4 MHz Clock) ; ld l,255 ld h,143 wait: dec l jr nz,wait dec h jr nz,wait pop hl jr enable ; ; Kein Treffer ; nohit: ld hl,lose+1 call incr ; ; Status neu setzen ; enable: ld b,MSB jr loop1 ; ; ASCII-Zaehler in ^HL erhoehen ; incr: ld_a_hl call incr1 ; Wert erhoehen cp '0' ret nz ; .. kein Ueberlauf dec hl ld_a_hl incr1: inc a ; Wert wehoehen daa ; .. justieren or '0' and '0'+LoMask ld_hl_a ret ; ; Taste betaetigt - Rakete initialisieren ; tstem: sla b ; Bit testen ret nc ; .. Rakete schon gesetzt ld hl,mloc ld_hl_8 msym ; Rakete setzen ret ; ; Verzoegerung und testen, ob Taste gedrueckt ; AUS Akku haelt Zustand der Tastatur - 00: keine Taste ; indel: push hl ld hl,255 delay: dec l push hl pop hl jr nz,delay call CONsta ld h,a call CONdat ld a,h pop hl ret ; ds 2*32 LocStk equ $ end