home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
ftp.barnyard.co.uk
/
2015.02.ftp.barnyard.co.uk.tar
/
ftp.barnyard.co.uk
/
cpm
/
walnut-creek-CDROM
/
SIMTEL
/
CPMUG
/
CPMUG029.ARK
/
CHASE.ASM
< prev
next >
Wrap
Assembly Source File
|
1984-04-29
|
8KB
|
722 lines
; *************************************
; ** 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