Compucolor.org – Virtual Media

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