; TRC1A.ASM

; *** round control for one player ***

EXCRND	PROC
	JSR	KILSND
	LDX	$58	;Beginning screen
	LDY	$59	; ram pointer
	STX	$80	;ZERO PAGE P-INDEX
	STY	$81
	LDX	#00
	JSR	HORIZ
	JSR	VERT
	JSR	HORIZ

; clear player missle ram

	LDA	#00
	TAX
:LOOP	STA	PBASE,X
	STA	PBASE+$100,X
	STA	PBASE+$200,X
	STA	PBASE+$300,X
	INX
	BNE	:LOOP

; place colors in OS shadows

	LDX	#8
:LOOP2	LDA	COLTBL,X
	STA	PCOLR0,X
	DEX
	BPL	:LOOP2

; get random number between 0 & 7

	LDA	RANDOM
	AND	#%00000111
	STA	RNDX

; place objects in ram vertically
; set direction index regs and stkcpl regs

	CLC
	ADC	#88
	TAX
	LDY	#3
:LOOP3	LDA	BASEP,X
	STA	INDEX,Y
	TXA
	SEC
	SBC	#8
	TAX
	DEY
	BPL	:LOOP3
	LDY	#3
:LOOP4	LDA	BASEP,X
	STA	PHPRG,Y
	TXA	! SEC
	SBC	#8
	TAX
	DEY
	BPL	:LOOP4
	LDY	#3
:LOOP5	LDA	BASEP,X
	STA	PVPRG,Y
	TXA	! SEC
	SBC	#8
	TAX
	DEY
	BPL	:LOOP5
	JSR	CRSET1
	LDX	RNDX
	LDA	SSTK,X
	STA	SSTICK
	LDA	STKC,X
	STA	STKCPL
	LDA	#1	;set audctl for
	STA	AUDCTL	;ship appearance
	LDX	#3
:NEXT	TXA	! PHA
	JSR	HVHSET	;X must be intact
	TXA		;ongosub to Pammy subs
	ASL A ! ASL A ! ASL A
	STA	WORK
	LDA	INDEX,X
	CLC
	ADC	WORK
	TAY
	LDA	PIVTBL,Y
	STA	SUBVC5+1
	LDA	PIVTBL+1,Y
	STA	SUBVC5+2
SUBVC5	JSR	SUBVC5
	PLA ! TAX
	JSR	SHSSND	;ship set snd
	LDA	#8	;consol exit check
	STA	CONSOL
	LDA	CONSOL
	AND	#1
	BNE	:OVER
	PLA ! PLA
	LDA	#0
	STA	AUDCTL
	JMP	REPEAT	;rerun
:OVER	LDA	CONSOL
	AND	#4
	BNE	:OVER2	;uncond branch
	PLA ! PLA
	LDA	#0
	STA	AUDCTL
	JMP	RETTTL	;return to title
:OVER2	DEX
	BPL	:NEXT

; Reset attract mode to zero

	LDA	#0
	STA	ATRACT

; clear min. move reg

;	LDA	#$FF
;	STA	MINMV2

; clear any collisions

	LDY	#20	;wait for screen to print
	JSR	PAUSE	;and then some
	STA	HITCLR

; Set sounds for the race

	LDA	#%01010000
	STA	AUDCTL
	LDA	#255
	STA	AUDF3
	STA	AUDF4

; clear p0flg sounds: hi and lo

	LDA	#0	; cycle thru both
	STA	P0FLG	; possible cond's
	JSR	TRIG
	LDA	#1
	STA	P0FLG
	JSR	TRIG
; Set colors for the race
	LDA	#124
	STA	PCOLR0
	STA	PCOLR1
	LDA	#60
	STA	PCOLR2
	STA	PCOLR3
; enable movement
	LDX	#3	;clear comp move
	STX	ALTCMS	;cheap clear altcms
NXCMV	LDA	#0	;enable move and
	STA	CMVEN,X	;collision reg's
	STA	CLLEN,X
	STA	CPPTVA,X
	STA	CPPTVA+4,X
	LDA	#$FF
	STA	NWORK,X
	DEX
	BPL	NXCMV

	LDY	#LOW MVPLYI
	LDX	#HIGH MVPLYI
	LDA	#7
	JSR	SETVBV

; Main subroutine control

MAINP1	=	*
	JSR	RANGER
	JSR	SCANNR
	JSR	PROCLL
	JSR	MVCMP
	JSR	ALLDRZ

; check for break key pause request

	JSR	BPAUSE

; check for option or start key

	LDA	#8
	STA	CONSOL
	LDA	CONSOL
	AND	#4
	BNE	CKMYBR
	PLA		;clear return to
	PLA		;plyone control
	LDA	#0	;return to title screen
	STA	DMACTL
	STA	SDMCTL
	STA	COLOR2
	STA	COLPF2
	LDA	#LOW TTLDL
	STA	SDLSTL
	LDA	#HIGH TTLDL
	STA	SDLSTH
	LDA	#%00101010
	STA	SDMCTL
	JSR	FSTXIT
	JSR	ZHPOS	;move plyrs off
	JSR	KILSND	;shut off all snd
	LDY	#15
	JSR	PAUSE
	RTS
CKMYBR	LDA	MYBRK	;exit rtn if brk
	BEQ	XTMAIN	;key pressed
	LDA	CONSOL
	AND	#1
	BNE	MAINP1
	PLA ! PLA	;clear return address
	LDY	#LOW XITVBV
	LDX	#HIGH XITVBV
	LDA	#7
	JSR	SETVBV
	JMP	XTP3

XTMAIN	=	*

	LDY	#LOW VBSND
	LDX	#HIGH VBSND
	LDA	#7
	JSR	SETVBV
	JSR	FINEXP
	LDY	#50
	JSR	PAUSE
FSTXIT	LDY	#LOW XITVBV
	LDX	#HIGH XITVBV
	LDA	#7
	JSR	SETVBV
	RTS

; are all cmptr plyrs move disabled

ALLDRZ	PROC
	LDX	#3
:LOOP	LDA	CMVEN,X
	BEQ	:EXIT
	DEX
	BNE	:LOOP
	LDA	#0
	STA	MYBRK
	STA	AUDC2
:EXIT	RTS

; finish explosions

FINEXP	PROC
	LDY	#3
	STY	MYBRK
:LOOP	LDA	NWORK,Y
	BMI	:OVER
	STY	ALTCMS
	JSR	EXPLOS
	LDY	RTCLOK+2
	INY ! INY
:WAIT	CPY	RTCLOK+2	;slow down explosion
	BNE	:WAIT	;processing
	LDA	#0
	STA	MYBRK
	LDY	ALTCMS
:OVER	DEY
	BPL	:LOOP
	LDA	MYBRK
	BEQ	FINEXP	;a zero means still working
	RTS
MYBRK	DB	1

; set column row soft registers
; x index picks starting point variation

CRSET1	PROC
	LDA	RNDX
	CLC
	ADC	#56
	TAX
	LDY	#3
:LOOP	LDA	BASEG,X
	STA	PLCOL,Y
	TXA ! SEC
	SBC	#8
	TAX
	DEY
	BPL	:LOOP
	LDY	#3
:LOOP2	LDA	BASEG,X
	STA	PLROW,Y
	TXA ! SEC
	SBC	#8
	TAX
	DEY
	BPL	:LOOP2
	RTS

; routine to create boundaries

HORIZ	PROC
	LDY	#40
:LOOP	LDA	#$55
	STA	($80,X)
	JSR	INCADR
	DEY
	BNE	:LOOP
	RTS

VERT	PROC
	LDY	#89
:LOOP	LDA	#$40
	STA	($80,X)
	JSR	INCADR
	JSR	INC38
	LDA	#01
	STA	($80,X)
	JSR	INCADR
	DEY
	BPL	:LOOP
	RTS

INC38	PROC
	TYA
	PHA
	LDY	#37
	LDA	#00
:LOOP	STA	($80,X)
	JSR	INCADR
	DEY
	BPL	:LOOP
	PLA
	TAY
	RTS

INCADR PROC
	CLC
	LDA	$80
	ADC	#01
	STA	$80
	LDA	#00
	ADC	$81
	STA	$81
	LDA	#00
	RTS

; kill all sounds

KILSND	PROC
	LDY	#7
	LDA	#0
:LOOP	STA	AUDC1,Y
	DEY
	BPL	:LOOP
	RTS


	LINK		D:TRC1B.ASM
