home *** CD-ROM | disk | FTP | other *** search
- ; *************************************
- ; ** THE GAME OF CHASE **
- ; ** --FROM DR. DOBBS JOURN **
- ; ** MAY 1977 **
- ; ** --MODIFIED FOR SOL **
- ; ** --RE-MODIFIED FOR VDM **
- ; *************************************
- ;
- ;
- ;
- ORG 100H
- ;
- ;*****
- ; OBTAIN BIOS VECTORS
- ;*****
- VECTRS: JMP GETVEC
- DS 42
- WBOOTE EQU VECTRS+3
- CSTS EQU VECTRS+6
- CI EQU VECTRS+9
- CO EQU VECTRS+12
- LO EQU VECTRS+15
- PO EQU VECTRS+18
- RI EQU VECTRS+21
- HOME EQU VECTRS+24
- SELDSK EQU VECTRS+27
- SETTRK EQU VECTRS+30
- SETSEC EQU VECTRS+33
- SETDMA EQU VECTRS+36
- READ EQU VECTRS+39
- WRITE EQU VECTRS+42
- GETVEC: LXI D,WBOOTE
- LHLD 1
- MVI B,42
- GETVE1: MOV A,M
- STAX D
- INX H
- INX D
- DCR B
- JNZ GETVE1
- ;
- BEGIN: XRA A
- STA YSCORE
- STA RSCORE
- ENTER: LHLD 6
- DCX H
- SPHL
- 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: CALL CI
- 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: CALL CI
- 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 0C8H
- 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
- ;
- ;
- RDA EQU 1
- 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
-