Listing of file='CARACE.SRC;01' on disk='vmedia/ncc_23-sector.ccvf'
ORG 9000H
START: NOP ;SPACE FOR JUMP
NOP
NOP
LXI H,0 ;EXECUTED ONCE ONLY
SHLD S1ST
SHLD S2ND
SHLD S3RD
LXI H,N1ST
MVI B,18
START1: MVI M,32
INX H
MVI M,7
INX H
DCR B
JNZ START1
MVI A,0C3H
STA START
LXI H,START2
SHLD START+1
START2: MVI A,31
STA 33247
MVI A,201
STA 33221
LXI SP,8FF0H
LXI H,TITLE
CALL OS
MVI A,1
CALL CI
XRA A
STA 33278
JMP SETUP
SEED: DS 2
LFED: DS 1
OLDI: DS 1
USPOS: DS 2
USDI: DS 1
OILFG: DS 1
SCORE: DS 2
S1ST: DS 2
S2ND: DS 2
S3RD: DS 2
N1ST: DS 12
N2ND: DS 12
N3RD: DS 12
X1ST EQU 76A2H
X2ND EQU 77A2H
X3RD EQU 78A2H
OS EQU 182AH
BASOUT EQU 17C8H
CMPHD EQU 1883H
MOVDH EQU 1871H
SETUP: LXI H,7DDEH
SHLD USPOS
XRA A
STA OLDI
STA USDI
MVI A,32
STA OILFG
LXI H,0
SHLD SCORE
MVI A,10
STA LFED
LXI H,MSG00
CALL OS
CALL PRSCOR
JMP MAIN
PRSCOR: LXI H,HIGH1
CALL OS
LHLD S1ST
CALL DISPHL
LXI H,N1ST
LXI D,X1ST
MVI B,12
CALL MOVDH
LXI H,HIGH2
CALL OS
LHLD S2ND
CALL DISPHL
LXI H,N2ND
LXI D,X2ND
MVI B,12
CALL MOVDH
LXI H,HIGH3
CALL OS
LHLD S3RD
CALL DISPHL
LXI H,N3RD
LXI D,X3RD
MVI B,12
CALL MOVDH
LXI H,COFF ;3,64,0
CALL OS
RET
MAIN: CALL SCROLL
CALL MOVUS
CALL ERRTOP
CALL ROAD
CALL CARS
CALL INKEY
CALL OIL
JMP MAIN
OIL: LDA SCORE
CPI 255
JNZ OIL5
MVI A,'.'
STA OILFG
RET
OIL5: CPI 30
RNZ
MVI A,32
STA OILFG
RET
CARS: MVI A,10
CALL RANDOM
CPI 2
RNZ
MVI A,7
CALL RANDOM
INR A
MOV B,A
LDA LFED
ADD B
ADD A
ADI 40H
MOV L,A
MVI H,70H ;HL=>ADDRESS OF CAR
MVI M,'*'
INX H
INX H
MVI M,'*'
RET
MOVUS: LHLD USPOS
LDA USDI
MOV B,A
XRA A
STA USDI
MOV A,B
ORA A
JZ PRNUS
DCR A
JZ MOVUR
MOVUL: MOV A,L
ANI 127
CPI 67
JC PRNUS
DCX H
DCX H
JMP PRNUS
MOVUR: MOV A,L
ANI 127
CPI 123
JNC PRNUS
INX H
INX H
PRNUS: MOV A,M
CPI ':'
JZ CRASH
CPI '*'
JZ CRASH
INX H
INX H
MOV A,M
CPI ':'
JZ CRASH
CPI '*'
JZ CRASH
DCX H
DCX H
SHLD USPOS
MVI M,'~'
INX H
MVI M,7
INX H
MVI M,'|'
INX H
MVI M,7
LXI H,7EACH ;INC SCORE
CALL INCREM
LHLD SCORE
INX H
SHLD SCORE
MVI A,10101010B
OUT 6
RET
CRASH: LXI H,MSG01
CALL OS
MVI B,255
CRASH2: MOV C,B
CRASH3: DCR C
JNZ CRASH3
MVI A,10101010B
OUT 6
DCR B
JNZ CRASH2
LHLD SCORE ;DE=OUR SCORE
XCHG
LHLD S1ST
CALL CMPHD
JNC HSCR2
LHLD S2ND ;ROLL DOWN SCORES
SHLD S3RD
LXI H,N2ND
LXI D,N3RD
MVI B,12
CALL MOVDH
LHLD S1ST
SHLD S2ND
LXI H,N1ST
LXI D,N2ND
MVI B,12
CALL MOVDH
LHLD SCORE
SHLD S1ST
LXI H,M1ST
CALL OS
LXI H,N1ST
JMP HSCR9
HSCR2: LHLD S2ND
CALL CMPHD
JNC HSCR3
LHLD S2ND
SHLD S3RD
LXI H,N2ND
LXI D,N3RD
MVI B,12
CALL MOVDH
LHLD SCORE
SHLD S2ND
LXI H,M2ND
CALL OS
LXI H,N2ND
JMP HSCR9
HSCR3: LHLD S3RD
CALL CMPHD
JNC HSCR99
LHLD SCORE
SHLD S3RD
LXI H,M3RD
CALL OS
LXI H,N3RD
HSCR9: PUSH H
LXI H,HIMSG
CALL OS
POP H
MVI B,0
HSCR91: MVI A,1 ;60 SEC INKEY
CALL CI
ORA A
JZ HSCR6
CPI 13
JZ HSCR6
CPI 26
JZ HSCR5
CPI 65
JC HSCR91
CPI 91
JNC HSCR91
MOV C,A
MOV A,B
CPI 6
JZ HSCR91
MOV A,C
MOV M,A
INX H
MVI M,7
INX H
INR B
CALL BASOUT
MVI A,32
CALL BASOUT
JMP HSCR91
HSCR5: MOV A,B
ORA A
JZ HSCR91
DCR B
DCX H
DCX H
MVI A,26
CALL BASOUT
MVI A,26
CALL BASOUT
MVI A,'_'
CALL BASOUT
MVI A,26
CALL BASOUT
JMP HSCR91
HSCR6: MOV A,B
CPI 6
JZ HSCR99
MOV A,B
HSCR7: MVI M,32
INX H
MVI M,7
INX H
PUSH PSW
MVI A,32
CALL BASOUT
MVI A,32
CALL BASOUT
POP PSW
INR A
CPI 6
JNZ HSCR7
HSCR99: POP H
LXI H,MSG03
CALL OS
HSCR9A: MVI A,45 ;15 SEC INKEY
CALL CI
CPI 13
JNZ HSCR9A
JMP SETUP
;DRAWS ONE LINE OF ROADWAY
ROAD: MVI A,3
CALL RANDOM
DCR A ;A=-1,0,1
MOV B,A
LDA OLDI ;LAST DIRECTION
ADD B
CPI -2
JZ ROAD
CPI 2
JZ ROAD ;A=NEWDI
STA OLDI
LXI H,6040H
MOV B,A
LDA LFED
ADD B
MOV B,A ;B=NEW LFED
ORA A
JZ LOOP2 ;0-22 BOUNDARIES
CPI 22
JNZ LOOP3
LOOP2: LDA LFED
MOV B,A
LOOP3: INX H
INX H
DCR A
JNZ LOOP3
MOV A,B
STA LFED
MVI M,':'
LXI D,20
DAD D
MVI M,':'
RET
SCROLL: DI ;FASTER
LXI H,6FFEH
LXI D,6F7EH
LXI B,03C1H
SCROL5: LDAX D
MOV M,A
DCX H
DCX H
DCX D
DCX D
MOV A,L
ANI 127
CPI 64
JZ SCROL7
SCROL6: DCX B
MOV A,B
ORA C
JNZ SCROL5
EI ;SLOWER
RET
SCROL7: PUSH B
LXI B,-66
DAD B
XCHG
DAD B
XCHG
POP B
JMP SCROL6
ERRTOP: LXI H,7040H ;ERASES THE TOP LINE
MVI B,32
LDA OILFG
MOV C,A
ERRTP5: MOV M,C
INX H
MVI M,7
INX H
DCR B
JNZ ERRTP5
RET
INKEY: LDA 33279
CPI 50H
JZ INKEY
LDA 33278
CPI 1
JZ BASOUT
CPI 27
JZ START2
CPI 146
JNZ INKLR
LXI H,N1ST
MVI B,18
INKEY1: MVI M,32
INX H
MVI M,7
INX H
DCR B
JNZ INKEY1
LXI H,0
SHLD S1ST
SHLD S2ND
SHLD S3RD
LXI H,MSG07
CALL OS
XRA A
STA 33278
INKLR: MVI A,5
OUT 7
IN 1
ANI 32
JNZ INKEYR
MVI A,6 ;CHECK FOR BOTH KEYS DOWN
OUT 7
IN 1
ANI 32
RZ
MVI A,-1
STA USDI
RET
INKEYR: MVI A,6
OUT 7
IN 1
ANI 32
RNZ
MVI A,1
STA USDI
RET
CI: STA 33209
XRA A
STA 33278
CI5: LDA 33209
ORA A
RZ
LDA 33278
ORA A
JZ CI5
RET
INCREM: MOV A,M
CPI '9'
JZ INCRM5
CPI ' '
JZ INCRM8
INR M
RET
INCRM5: MVI M,'0'
DCX H
DCX H
JMP INCREM
INCRM8: MVI M,'1'
RET
RANDOM: PUSH H
PUSH B
MOV B,A
RNDOM1: LHLD SEED
MVI C,8
RNDOM2: MOV A,H
RRC
XRA H
RRC
RRC
XRA H
RRC
XRA C
RRC
RRC
RRC
XRI 1
ANI 1
DAD H
ADD L
MOV L,A
DCR C
JNZ RNDOM2
SHLD SEED
MOV A,H
ADD L
MOV H,A
MOV A,B
RNDOM3: MOV L,A
ADD B
CMP B
JNC RNDOM3
MOV A,H
CMP L
JNC RNDOM1
RNDOM4: CMP B
JC RNDOM5
SUB B
JMP RNDOM4
RNDOM5: POP B
POP H
RET
DISPHL: MVI B,0
XCHG
DISPH3: LXI H,-1000
DAD D
JNC DISPH5
INR B
XCHG
JMP DISPH3
DISPH5: MOV A,B
ORI '0'
CALL BASOUT
MVI B,0
DISPH7: LXI H,-100
DAD D
JNC DISPH8
INR B
XCHG
JMP DISPH7
DISPH8: MOV A,B
ORI '0'
CALL BASOUT
MOV A,E
MVI B,0
DISPH9: CPI 10
JC DISPHA
SUI 10
INR B
JMP DISPH9
DISPHA: MOV C,A
MOV A,B
ORI '0'
CALL BASOUT
MOV A,C
ORI '0'
CALL BASOUT
RET
TITLE: DB 6,6,12,27,24,15,30,3,25,2
DB 'te ~| nd ~| te ne',3,25,3
DB 'v',127,' no n| no v',127,' {',29,'j'
DB 3,50,0,6,6,'V1.0 ',6,1,'BY G.EPPS'
DB 6,2,3,10,7
DB 'HOW FAR CAN YOU DRIVE WITHOUT CRASHING ?'
DB 6,3,3,20,20
DB 'USE: ',6,2,'<gg',6,3,' TO MOVE LEFT'
DB 6,2,3,30,22,'gg>',6,3,' TO MOVE RIGHT'
DB 6,1,3,30,24,'<ESC>',6,3,' TO END GAME'
DB 6,6,3,20,27,'[COMMAND] - [R] ',6,3,'TO RESET HIGH-SCORES'
DB 6,7,3,13,10,'DODGE OTHER CARS, KEEP WITHIN ROAD BOUNDARIES'
DB 3,19,12,'WATCH FOR FOG-PATCHES'
DB 6,5,3,20,15,'<< HIT ANY KEY TO START >>'
DB 6,7,3,64,0,239
MSG00: DB 6,7,12,14,29,6,5,3,9,2,'C A R A C E',15
DB 3,2,5,6,2,'BY GARRY EPPS 27/9/81'
DB 3,31,0,27,10,237,32,'n',238,27,24
DB 3,3,10,6,7,'HIGH SCORES TO DATE:'
DB 3,2,29,6,3,'CURRENT SCORE > 00000'
DB 8,6,7,237,32,9,9,9,9,25
DB '.........: :.........',13,10,238
DB 3,47,27,6,7,'~|',239
MSG01: DB 6,65,3,10,31,'CRASH-CRASH-CRASH',6,7,3,64,0,239
MSG03: DB 6,6,3,2,7,'HIT <RETURN> TO RESTART >',6,7,239
MSG07: DB 6,7,3,12,13,'0000 '
DB 3,12,15,'0000 '
DB 3,12,17,'0000 ',3,64,0,239
HIGH1: DB 3,6,13,'1ST - ',239
HIGH2: DB 3,6,15,'2ND - ',239
HIGH3: DB 3,6,17,'3RD - ',239
COFF: DB 3,64,0,239
HIMSG: DB 3,0,26,'ENTER YOUR NAME BELOW.'
DB 3,5,27,'_ _ _ _ _ _',3,5,27,239
M1ST: DB 3,5,22,'CONGRATULATIONS:'
DB 3,1,23,'YOU GOT THE HIGHEST'
DB 3,4,24,'SCORE TODAY.',239
M2ND: DB 3,5,22,'CONGATULTIONS:'
DB 3,1,23,'YOU GOT THE 2ND HIGHEST'
DB 3,4,24,'SCORE TODAY.',239
M3RD: DB 3,5,22,'CONGRATULTIONS:'
DB 3,1,23,'YOU GOT THE 3RD HIGHEST'
DB 3,4,24,'SCORE TODAY.',239
END START