; Killer4
; -------
; Vergleicht jede 34. Speicherzelle mit 'dat 0' und versetzt einen
; einen Bereich um die Zelle, die ungleich 'dat 0' ist, mit 'JMP'-
; Befehlen, die auf eine Falle zeigen. 
; Schaut dann nach, ob es was gefangen hat. Falls ja, Speicher mit 3
; Schritten löschen, falls nein, ein paar Tasks starten, die 
; auch den Speicher löschen, und überlebenstask.

; Zweite Version.


zielbak         MOV $1017, $1017        ;für zweiten Durchlauf
anzahlbak       DAT 203
loop            DAT 2                   ;erster oder zweiter ?

anzahl          DAT 204                 ;Zähler für Minenleger
                                        ;etwas weiter vorne beginnen,
                                        ;da Feind nicht näher als 1000
                                        ;Zellen sein kann.
ziel            MOV $1000, $1000        ;Zeiger auf Zieladresse, MOV,
                                        ;weil da beide Argumente sind,
                                        ;man kann einen Takt sparen!
start           ADD #34, ziel           ;Jede 20. Adresse 
                CMP #0, @ziel           ;Vergleichen
                JMP verminen            ;wenn ungleich Null, löschen
                DJN start, anzahl       ;sonst nächste Zelle
                CMP #0, zähler          ;was gefangen?
                JMP weiter              ;Speicher löschen, sonst zweiten
                                        ;Durchlauf oder tasks
                MOV zielbak, ziel
                MOV anzahlbak, anzahl
                DJN start, loop         ;zweiter Durchlauf schon 
                                        ;gemacht?

                CMP #0, zähler          ;was gefangen?
                JMP weiter              ;Speicher löschen
                JMP tasks               ;Nichts gefangen, also kleines
                                        ;Shitprogramm, splitten und 
                                        ;hoffen.

zähler          DAT 0                   ;Anzahl Gefangene Tasks
grube           JMP falle               ;Fallgrube für Feind   
falle           ADD #1, zähler          ;Indikator, anzahl gefangene
                SPL 0                   ;Falls später gegnerische Tasks
kill            JMP -1                  ;sterben, splitten, werden leider
                                        ;nicht mehr gezählt
zielkopie       DAT $0
count           DAT $0
verminen        MOV ziel, zielkopie     ;Kopie der Zieladresse machen
                ADD #5, ziel            ;Minen um Befehl streuen,
                                        ;der ungleich 'DAT 0' ist
                MOV #10, count          ;Schlaufenzähler initialisieren
                SUB ziel, grube         ;JMP-Rücksprungwert reinkopieren
                ADD #14, grube          ;und auf den richtigen Wert
                                        ;setzen, zeigt nun auf 'falle'
werfen          ADD #1, grube           ;für jeden Durchlauf ändern
                MOV grube, <ziel        ;JMP-Falle werfen
                DJN werfen, count       ;Fertig? Nein, dann weiter ver-
                                        ;minen
                MOV zielkopie, ziel     ;Kopie zurückspeichern
                MOV grubebak, grube     ;grube wieder auf falle richten
                SUB #1, anzahl
                JMP start

grubebak        JMP 1                   ;Zelle, die in grube gehört
ort             DAT 100                 ;Wohin wird Null kopiert
num             DAT 2620                ;Zähler für Löschschlaufe
weiter          MOV #0, @ort            ;Speicher zu löschen beginnen
                ADD #3, ort             ;Zeiger 'ort' erhöhen
                DJN weiter, num

                MOV #3, kill            ;Gegner töten
                SPL tasks               ;ebenfalls tasks starten 
                JMP 0                   ;zum überleben....
tasks           MOV -1, 7990            ;Insgesamt 6 tasks
                SPL 7989                ;starten, so dass gnom überlebt
                MOV -3, 7981            ;wird.
                SPL 7980                ;und vielleicht auch was
                SPL nummer1             ;anderes, wer weiss
                SPL nummer2
                SPL nummer3
                SPL nummer4
                SPL nummer5
                DAT 50
                DAT 0
                DAT 0                    
nummer1         MOV #0, @-3
                ADD #4, -4
                JMP nummer1
                JMP 0
                DAT 0                    
                DAT 0
                DAT 1640 
                DAT 0
                DAT 0                    
nummer2         MOV #0, @-3
                ADD #4, -4
                JMP nummer2
                JMP 0
                DAT 0
                DAT 0
                DAT 3230
                DAT 0
                DAT 0
nummer3         MOV #0, @-3
                ADD #4, -4
                JMP nummer3
                JMP 0
                DAT 0
                DAT 0
                DAT 4820
                DAT 0
                DAT 0
nummer4         MOV #0, @-3
                ADD #4, -4
                JMP nummer4
                JMP 0
                DAT 0
                DAT 0
                DAT 6410
                DAT 0
                DAT 0
nummer5         MOV #0, @-3
                ADD #4, -4
                JMP nummer5
                JMP 0
                DAT 0
                DAT 0
                DAT 0
                DAT 0
                DAT 0
                DAT 0
                DAT 0               
                DAT 0
                DAT 0
                 
