; MOLE Sample 8080 Darwin species MYNO EQU ! ASIZE EQU ! ABOT EQU ! ATOP EQU ABOT+ASIZE PROBE EQU ! KILL EQU ! CLAIM EQU ! LDMOD: DB MYNO DB LENGTH DB START-MYBOT DB PROTE-PROT PROT: DB 0,1,2,3 DB 16,17,18,19 DB 32,33,34,35 DB 48,49,50,51 DB 64,65,66,67 DB 80,81,82,83 DB 96,97,98,99 DB 112,113,114,115 DB 128,129,130,131 DB 144,145,146,147 PROTE: DB TEXTE-TEXT TEXT: DB 'MOLE GAE 1/21/84' TEXTE: MYBOT: DW ABOT-1 TABLE: ; Table for relocation DB RELOC-MYBOT,R1+1-MYBOT DB MYBOT-MYBOT,M1+1-MYBOT DB MYBOT-MYBOT,M2+1-MYBOT DB MYBOT-MYBOT,M3+1-MYBOT DB BEGIN-MYBOT,B1+1-MYBOT DB NEXT-MYBOT,N1+1-MYBOT DB NEXT-MYBOT,N2+1-MYBOT DB NEXT-MYBOT,N3+1-MYBOT DB NEXT-MYBOT,N4+1-MYBOT DB NEXT-MYBOT,N5+1-MYBOT DB OK-MYBOT,O1+1-MYBOT DB EMPTY-MYBOT,E1+1-MYBOT DB GCLAIM-MYBOT,G1+1-MYBOT DB SHIFT-MYBOT,S1+1-MYBOT DB 0,0 START: PUSH H ; MYBOT INX H INX H ; TABLE XRA A RELOC: MOV C,M INX H MVI B,0 XTHL ; MYBOT PUSH H DAD B XCHG ; data in DE POP H ; MYBOT XTHL ; table pointer MOV C,M INX H CMP C ; C = 0 means done B1: JZ BEGIN MVI B,0 XTHL ; MYBOT PUSH H DAD B ; destination in HL MOV M,E INX H MOV M,D POP H ; MYBOT XTHL ; table pointer R1: JMP RELOC BEGIN: POP H M1: LHLD MYBOT INX H ; increment address NEXT: M2: SHLD MYBOT LXI B,-ATOP+1 PUSH H DAD B ; top of arena? POP H O1: JNC OK LXI H,ABOT ; if so, start over at bottom. N1: JMP NEXT OK: MVI A,MYNO PUSH H ; LOC CALL PROBE POP H ; LOC XCHG ; TOP in HL CPI MYNO ; my own species? N2: JZ NEXT ; If so, start again. PUSH B ; BOT CPI 0 E1: JZ EMPTY XCHG ; LOC in HL MVI A,MYNO CALL KILL EMPTY: POP H ; BOT MVI A,MYNO CALL PROBE ; Get TOP and BOT again. LXI H,LENGTH DAD B ; enough space? XCHG ; TOP in HL MOV A,D CMP H G1: JC GCLAIM N3: JNZ NEXT ; Not enough space, start again MOV A,L CMP E N4: JC NEXT ; not enough space GCLAIM: PUSH B ; BOT PUSH B POP H MVI A,MYNO CALL CLAIM POP D ; BOT M3: LXI H,MYBOT MVI B,LENGTH AND 0FFH SHIFT: MOV A,M STAX D INX H INX D DCR B S1: JNZ SHIFT XCHG N5: JMP NEXT MYTOP: LENGTH EQU MYTOP-MYBOT END