; ************************************* ; ** THE GAME OF CHASE ** ; ** --FROM DR. DOBBS JOURN ** ; ** MAY 1977 ** ; ** --MODIFIED FOR SOL ** ; ************************************* ; ; ; BEGIN: XRA A STA YSCORE STA RSCORE ENTER: IN DATA LXI SP,STACK CALL CLEAR CALL SCORE ; LXI H,MS2 LXI B,MNAME CALL MSGO ; DIFF: LXI H,MS1 LXI B,MDIFF CALL MSGO CALL INP ANI 0FH STA DFST START: CALL CLEAR CALL SCORE MVI D,DCORN MVI E,ECORN TOP: MVI B,WIDTH T1: CALL PLOT MVI M,'X' INX D CALL PLOT MVI M,' ' INX D DCR B JNZ T1 RSIDE: MVI B,HEIGHT DCR E DCR E R1: INR D CALL PLOT MVI M,'X' DCR B JNZ R1 BOTH: MVI B,WIDTH-1 B1: DCR E CALL PLOT MVI M,' ' DCR E CALL PLOT MVI M,'X' DCR B JNZ B1 LSIDE: MVI B,HEIGHT L1: DCR D CALL PLOT MVI M,'X' DCR B JNZ L1 ; SEED: LDA DFST RLC MOV B,A MVI A,1EH SUB B MOV B,A LOOP1: CALL RND ANI 0FH MOV D,A CALL RND ANI 7FH MOV E,A CALL LIMIT JC LOOP1 CALL PLOT MOV A,L ANI 0FEH MOV L,A MVI M,'X' DCR B JNZ LOOP1 ; ROSE: LXI H,RCORN MVI M,'T' LXI H,RCORN+4 MVI M,'Y' LXI H,RCORN+8 MVI M,'U' LXI H,RCORN+42H MVI M,5CH LXI H,RCORN+44H MVI M,5EH LXI H,RCORN+46H MVI M,2FH LXI H,RCORN+80H MVI M,'G' LXI H,RCORN+82H MVI M,0DH LXI H,RCORN+84H MVI M,'H' LXI H,RCORN+86H MVI M,09H LXI H,RCORN+88H MVI M,'J' LXI H,RCORN+0C2H MVI M,2FH LXI H,RCORN+0C4H MVI M,0BH LXI H,RCORN+0C6H MVI M,5CH LXI H,RCORN+100H MVI M,'B' LXI H,RCORN+104H MVI M,'N' LXI H,RCORN+108H MVI M,'M' ; ROBOT: CALL SEL SHLD ROB1 CALL SEL SHLD ROB2 CALL SEL SHLD ROB3 CALL SEL SHLD ROB4 CALL SEL SHLD ROB5 CALL YOU JMP YMOVE SEL: CALL RND ANI 0FH MOV D,A CALL RND ANI 0FEH MOV E,A CALL LIMIT JC SEL CALL PLOT MOV A,M CPI ' ' JNZ SEL MVI M,7 DCR B RNZ JMP YMOVE ; YOU: CALL RND ANI 0FH MOV D,A CALL RND ANI 0FEH MOV E,A CALL LIMIT JC YOU CALL PLOT MOV A,M CPI ' ' JNZ YOU MVI M,0FH SHLD YOUP RET ; YMOVE: CALL NEAR YMOV1: CALL INP LHLD YOUP MVI M,' ' CPI 'J' CZ RT CPI 'U' CZ UR CPI 'Y' CZ UP CPI 'T' CZ UL CPI 'G' CZ LF CPI 'B' CZ LL CPI 'N' CZ DN CPI 'M' CZ LR CPI 'P' CZ PANIC CPI 'H' JZ Y1 MOV A,M CPI ' ' JNZ DEATH Y1: MVI M,0FH SHLD YOUP CALL RMOVE CALL END0 JMP YMOVE ; INP: IN STAT ANI RDA JNZ INP IN DATA ANI 7FH CPI 0DH JZ ENTER CPI 1BH JZ BEGIN RET ; RMOVE: LHLD ROB1 CALL RDEAD JC RMOV1 CALL SEEK SHLD ROB1 RMOV1: LHLD ROB2 CALL RDEAD JC RMOV2 CALL SEEK SHLD ROB2 RMOV2: LHLD ROB3 CALL RDEAD JC RMOV3 CALL SEEK SHLD ROB3 RMOV3: LHLD ROB4 CALL RDEAD JC RMOV4 CALL SEEK SHLD ROB4 RMOV4: LHLD ROB5 CALL RDEAD RC CALL SEEK SHLD ROB5 RET ; RDEAD: MOV A,M CPI 'X' STC RZ CMC RET ; CHEK: MOV A,M CPI 0FH JZ DEATH CPI 'X' JZ FLASH MVI M,7 RET FLASH: MVI D,0A0H FLAS1: MVI M,4 MVI E,0FFH FLAS2: DCR E JNZ FLAS2 MVI E,0FFH MVI M,84H FLAS3: DCR E JNZ FLAS3 DCR D JNZ FLAS1 MVI M,'X' XRA A RET ; SEEK: MVI M,' ' PUSH H CALL SUBH POP H CALL DECH PUSH H CALL SUBV POP H CALL DECV JMP CHEK ; SUBV: MOV A,L ANI 0C0H MOV L,A XCHG LHLD YOUP MOV A,L ANI 0C0H SUB E MOV C,A MOV A,H SBB D MOV B,A RET ; DECV: RLC JC UP MOV A,C RRC JC UP XRA A ADD B JNZ DN ADD C JNZ DN RET ; SUBH: MOV A,L ANI 3FH MOV L,A XCHG LHLD YOUP MOV A,L ANI 3FH SUB E RET ; DECH: RZ JP RT JMP LF ; DEATH: MVI M,0CH CALL MSG2 LDA RSCORE INR A STA RSCORE CALL SCORE CALL OVER CALL WAIT JMP START ; PANIC: PUSH PSW LDA DFST CPI 9 JNZ PAN3 MVI C,7 CALL RND ANA C CPI 1 JZ PAN5 JMP PAN4 ; PAN5: PUSH H LHLD ROB1 MVI M,7 LHLD ROB2 MVI M,7 LHLD ROB3 MVI M,7 POP H JMP PANN PAN3: LDA DFST SBI 3 JP PAN1 MVI C,1 JMP PANOK PAN1: LDA DFST SBI 6 MVI C,3 JP PAN2 JMP PANOK PAN2: MVI C,7 PANOK: CALL RND ANA C CPI 1 JZ PANN PAN4: POP PSW RET PANN: CALL YOU POP PSW POP PSW JMP YMOVE ; WAIT: IN STAT ANI RDA JNZ WAIT IN DATA RET ; OVER: LDA RSCORE CPI 09H JZ END1 OVER1: LDA YSCORE CPI 09H RNZ ENDGAME: CALL WAIT CALL CLEAR LXI H,ENDM1 LXI B,ENDB2 CALL MSGO LDA YSCORE ADI 30H STA 0CD27H LDA RSCORE ADI 30H STA 0CD29H JMP END2 END1: CALL WAIT CALL CLEAR LXI H,ENDM1 LXI B,ENDB1 CALL MSGO LDA RSCORE ADI 30H STA 0CD27H LDA YSCORE ADI 30H STA 0CD29H END2: LXI H,ENDM3 LXI B,ENDB3 CALL MSGO END3: CALL WAIT JMP BEGIN ; UP: LXI D,0FFC0H DAD D RET DN: LXI D,40H DAD D RET LF: DCX H DCX H RET RT: INX H INX H RET UR: CALL UP JMP RT UL: CALL UP JMP LF LL: CALL DN JMP LF LR: CALL DN JMP RT ; PLOT: LXI H,0CC00H PUSH B VERT: MOV A,D ANI 0FH LP1: MVI B,40H LP2: JZ HORIZ INX H DCR B JNZ LP2 DCR A JNZ LP1 HORIZ: MOV A,E ANI 7FH LP3: JZ DONE INX H DCR A JMP LP3 DONE: POP B RET ; LIMIT: MOV A,D SBI LOWD STC RM MOV A,D SBI HID STC RP MOV A,E SBI LOWE STC RM MOV A,E SBI HIE STC RP CMC RET ; RND: PUSH B PUSH H LXI H,SH+3 MVI B,8 MOV A,M RTOP: RLC RLC RLC XRA M RAL RAL DCR L DCR L DCR L MOV A,M RAL MOV M,A INR L MOV A,M RAL MOV M,A INR L MOV A,M RAL MOV M,A INR L MOV M,A RAL MOV M,A DCR B JNZ RTOP POP H POP B RET ; END0: LHLD ROB1 MOV A,M CPI 7 RZ LHLD ROB2 MOV A,M CPI 7 RZ LHLD ROB3 MOV A,M CPI 7 RZ LHLD ROB4 MOV A,M CPI 7 RZ LHLD ROB5 MOV A,M CPI 7 RZ JMP WIN ; NEAR: LHLD YOUP CALL RT CALL NEAR2 CALL UP CALL NEAR2 CALL LF CALL NEAR2 CALL LF CALL NEAR2 CALL LF CALL NEAR2 CALL DN CALL NEAR2 CALL RT CALL NEAR2 CALL RT CALL NEAR2 CALL MCLEAR NEAR3: RET ; NEAR2: MOV A,M CPI 7 RNZ CALL MSG1 POP H JMP NEAR3 ; CLEAR: LXI H,0CC00H MVI M,' ' INX H MOV A,H CPI 0D0H JNZ CLEAR+3 XRA A OUT 0FEH RET ; MSG1: PUSH H PUSH B LXI H,MS1 LXI B,M1 CALL MSGQ POP B POP H RET ; MSG2: LXI H,MS1 LXI B,M2 CALL MSGQ RET ; WIN: LXI H,MS1 LXI B,MWIN CALL MSGQ LDA YSCORE INR A STA YSCORE CALL SCORE CALL OVER CALL WAIT JMP START ; SCORE: LXI H,SRE LXI B,MSR CALL MSGO LDA YSCORE ADI 30H LXI H,SCR MOV M,A LDA RSCORE ADI 30H LXI D,40H DAD D MOV M,A LXI H,MSY LXI B,MSR1 CALL MSGO LXI H,MT1 LXI B,MSR2 CALL MSGO RET ; MCLEAR: PUSH H PUSH B LXI H,MS1 MVI C,20H MCL1: MVI M,' ' INX H DCR C JNZ MCL1 POP B POP H RET ; MSGO: LDAX B CPI 0FFH RZ MOV M,A INX B INX H JMP MSGO ; MSGQ: LDAX B CPI 0FFH RZ ORI 80H MOV M,A INX B INX H JMP MSGQ ; ; ; MNAME: DB '* * * THE GAME OF CHASE * * *' DB 0FFH M1: DB ' CAUTION - ROBOT NEAR! ' DB 0FFH M2: DB ' YOU HAVE BEEN DESTROYED! ' DB 0FFH MWIN: DB ' CONGRATULATIONS - YOU HAVE WON! ' DB 0FFH MSR: DB '--SCORE--' DB 0FFH MSR1: DB 'YOU:' DB 0FFH MSR2: DB 'ROBOTS:' DB 0FFH ENDB1: DB 'THE ROBOTS HAVE WON - :' DB 0FFH ENDB2: DB 'YOU HAVE BEATEN THEM - :' DB 0FFH ENDB3: DB 'HIT ANY KEY TO PLAY AGAIN.....' DB 0FFH MDIFF: DB ' LEVEL OF DIFFICULTY (0-9)?' DB 0FFH ; ; STAT EQU 0FAH DATA EQU 0FCH RDA EQU 1 STACK EQU 0650H RCORN EQU 0CCF6H DCORN EQU 0 ECORN EQU 2 HEIGHT EQU 0DH WIDTH EQU 19H LOWD EQU DCORN+1 LOWE EQU ECORN+1 HID EQU DCORN+HEIGHT-1 HIE EQU LOWE+WIDTH+WIDTH-4 MS1 EQU 0CFCCH MS2 EQU 0CD10H SCR EQU 0CFBDH SRE EQU 0CF77H MSY EQU 0CFB8H MT1 EQU 0CFF5H ENDM1 EQU 0CD10H ENDM3 EQU 0CD90H SH: DW 1234H DW 5678H DFST: DB 1 RSCORE DS 1 YSCORE DS 1 YOUP DS 2 ROB1 DS 2 ROB2 DS 2 ROB3 DS 2 ROB4 DS 2 ROB5 DS 2 END