; Sample Z-80 species MYNO EQU ! ; my species number ASIZE EQU ! ; arena size ABOT EQU ! ; arena bottom address ATOP EQU ABOT+ASIZE ; arena top address PROBE EQU ! ; addresses for the ... KILL EQU ! ; ... three umpire calls CLAIM EQU ! LDMOD: ; load module starts here DB MYNO DB LENGTH DB START-MYBOT DB PROTE-PROT PROT: ; list of protected locations DB 0,1,2,3 DB 16,17,24,25 DB 32,33,36,37 DB 38,49,56,57 DB 64,65,72,73 DB 74,75,88,89 DB 96,97,104,105 DB 111,LENGTH-2,LENGTH-1 PROTE: DB TEXTE-TEXT ; identifying message TEXT: DB ' *** SWIFTIE *** (G. Edgar 12/24/83)' TEXTE: MYBOT: ; code to be loaded starts here START: PUSH HL ; MYBOT POP IX LPRAX: LD HL,0 ; LOC candidate XOR A CP H ; H = 0 means not initialized JR NZ,ST7 LD HL,ABOT ; start with bottom of arena JR ST4 ST7: INC HL ; increment LOC by some ... ST6: INC HL ; ... amount (from 1 to 7) ST5: INC HL ST4: INC HL ST3: INC HL ST2: INC HL ST1: INC HL GPROBE: PUSH HL LD DE,ATOP XOR A SBC HL,DE ; beyond end of arena? JR C,GOK ; no, OK LD DE,ABOT ; yes, start over at bottom ADD HL,DE POP DE ; use this instead GOK: POP HL ; LOC LD (IX+LPRAX+1-MYBOT),L ; store in LPRAX+1 LD (IX+LPRAX+2-MYBOT),H PUSH HL LD A,MYNO PUSH IX CALL PROBE POP IX ; MYBOT POP HL ; LOC PUSH BC ; BOT PUSH DE ; TOP GKILL: OR A ; empty? JR Z,GKE ; yes CP MYNO ; no; my own species? JR NZ,GK1 ; no POP HL ; discard POP DE JR ST5 ; try again GK1: LD A,MYNO PUSH IX CALL KILL POP IX ; MYBOT GKE: GCLAIM: POP HL ; TOP POP BC ; BOT PUSH BC PUSH HL XOR A SBC HL,BC ; size of space LD BC,LENGTH SBC HL,BC ; will I fit? JR NC,YCL ; yes NOCL: POP HL ; no POP BC JR ST5 ; try again YCL: POP HL POP HL ; BOT PUSH HL LD A,MYNO PUSH IX CALL CLAIM POP HL ; MYBOT PUSH HL POP IX ; MYBOT XOR A LD (IX+LPRAX+1-MYBOT),A ; zero LPRAX+1 LD (IX+LPRAX+2-MYBOT),A POP DE ; BOT LD BC,LENGTH LDIR ; move a copy to the new location EX DE,HL JR ST5 ; go again MYTOP: LENGTH EQU MYTOP-MYBOT ML EQU LENGTH END