;TRC1F.ASM

; SCORE KEEPING LOGIC

ZSUPP	=	$94	;holds zero suppression
SCNPRT	=	$84	;holds screen print addr
PLACC	=	$82	;holds player accum addr
HOLD3	DB	0
SCR0	DB	0,0,0	;player score buffers
SCR1	DB	0,0,0

; This proc calls compute score then
; prints the scores

SCRSCN	PROC		;compute & print
	JSR	CPTSCR	;player score
SCRNLY	=	*
	LDA	#LOW SCR0
	STA	PLACC
	LDA	#HIGH SCR0
	STA	PLACC+1
	CLC
	LDA	SAVMSC
	ADC	#LOW [3680+13]
	STA	SCNPRT
	LDA	SAVMSC+1
	ADC	#HIGH [3680+13]
	STA	SCNPRT+1
	LDA	#%01000000  ;blue GR set
	STA	HOLD3
	JSR	CNVSCR
	JSR	AWRDBO
	RTS

XREG	DB	0	;save areas
YREG	DB	0

CNVSCR	PROC
	JSR	ZEROSP
	LDX	#5	;Print scores left to right
	STX	XREG	;testing for leading zeros
	LDY	#2
	STY	YREG
:NEXT	LDY	YREG
	LDA	XREG   ; zero suppression
	CMP	ZSUPP
	BCC	SUPP1
	LDA	(PLACC),Y
	AND	#%00001111
	CLC
	ADC	#$10
	ORA	HOLD3
	LDY	XREG
	STA	(SCNPRT),Y
SUPP1	=	*
	DEC	XREG

	LDY	YREG
	LDA	XREG	;check zero supp
	CMP	ZSUPP
	BCC	SUPP2
	LDA	(PLACC),Y
	LSR  A ! LSR  A ! LSR  A ! LSR A
	CLC
	ADC	#$10
	ORA	HOLD3
	LDY	XREG
	STA	(SCNPRT),Y
SUPP2	=	*
	DEC	XREG
	DEC	YREG
	BPL	:NEXT
	RTS

; on death of comp. ship add his point 
; value to player X set with cptr reg
; to process

CPTSCR	PROC
	TXA ! ASL A ! TAX
	CLC	! SED
	LDA	CPPTVA+1,X
	ADC	SCR0+2
	STA	SCR0+2
	LDA	CPPTVA,X
	ADC	SCR0+1
	STA	SCR0+1
	LDA	#0
	ADC	SCR0
	STA	SCR0
	CLD
	RTS

; Zero suppress scores

ZEROSP	PROC
	LDX	#0
	LDY	#0
:NEXT	LDA	(PLACC),Y
	AND	#%11110000
	BNE	:EXIT
	INX
	LDA	(PLACC),Y
	AND	#%00001111
	BNE	:EXIT
	INX
	INY
	CPY	#3
	BNE	:NEXT
	DEX		;display first digit
:EXIT	=	*
	STX	ZSUPP
	RTS

; award bonus ship. compare bonus value
; to players score award if less and
; update bonus level

BONUS	DB	0,0,0
AWRDBO	PROC
	LDX	#0
:NEXT	LDA	SCR0,X
	CMP	BONUS,X
	BCC	:EXIT
	INX
	CPX	#3
	BNE	:NEXT
	SED ! CLC
	LDA	BONUS+1
	ADC	BONBSE	;set next bonus level
	STA	BONUS+1
	LDA	#0
	ADC	BONUS
	STA	BONUS
	CLC
	LDA	SHIPS
	ADC	#1
	STA	SHIPS
	CLD
	LDA	#1	;trigger extra
	STA	TRIGGR+1	;ship VB sound
	LDA	#0
	STA	CURPTR+1
	STA	AUDCTL
	STA	AUDC2
	LDA	#%01010000 ;set audctl
	STA	VBACTL+1	;return value
	JMP	AWRDBO
:EXIT	=	*
	JSR	SCNSHP
	RTS

; put ship count to screen

SCNSHP	PROC
	LDA	#$33	;put 's' on strip
	LDY	#1
	STA	(STRPAD),Y
	LDA	SHIPS
	BPL	:OKVAL
	LDA	#0
	STA	SHIPS
:OKVAL	AND	#$0F
	CLC
	ADC	#$10
	LDY	#3
	STA	(STRPAD),Y
	LDA	SHIPS
	LSR  A ! LSR  A ! LSR  A ! LSR A
	BNE	PRNUM
	LDA	#0
	LDY	#2
	STA	(STRPAD),Y
	RTS
PRNUM	CLC
	ADC	#$10
	LDY	#2
	STA	(STRPAD),Y
	RTS
	EPROC

; clear info strip & setup w/ one player info

BLKSCN	PROC
	LDY	#19	; blank screen
	LDA	#0
:NEXT	=	*
	STA	(STRPAD),Y
	DEY
	BPL	:NEXT
	RTS

; decrement ship count

DCSHIP	PROC
	LDA	SHIPS
	SEC ! SED
	SBC	#1
	STA	SHIPS
	CLD
	RTS


; check break key for pause in play request

SBRKKY	DB	1

BPAUSE	PROC
	LDA	SBRKKY
	BNE	:EXIT
	LDY	#LOW XITVBV
	LDX	#HIGH XITVBV
	LDA	#7
	JSR	SETVBV

	LDX	#6
	LDA	#0
:NEXT	STA	AUDC1,X
	DEX ! DEX
	BPL	:NEXT

	LDA	#1
	STA	SBRKKY
	STA	BRKKEY

:LOOP	LDA	BRKKEY
	BNE	:LOOP

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

	LDA	#1
	STA	BRKKEY
:EXIT	RTS

	ASSERT	* < TTLDL

	END
