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