; D:TRCA.ASM

; data for altering OS mode 7 display list

DLSTBL	DB	$8D,0,6,$41

;Perform initilization

INITSN	PROC
	LDX	#IOCB3	;open GR. 7
	LDA	#LOW DEVICE
	STA	ICBAL,X
	LDA	#HIGH DEVICE
	STA	ICBAH,X
	LDA	#OPEN
	STA	ICCOM,X
	LDA	#WRITE
	STA	ICAX1,X
	LDA	#MODE
	STA	ICAX2,X

	JSR	CIOV
	LDA	#$03	;clear seral mode
	STA	SKCTL	;enable audc 3 & 4
	LDA	SDLSTL	;save display list
	STA	PDLSTL	;address
	STA	$80	;used to alter dlist
	LDA	SDLSTH
	STA	PDLSTH
	STA	$81
	LDA	#0	; turn DMA off first
	STA	DMACTL
	STA	SDMCTL	; Alter display list
	LDY	#[96+5]	;set dlist jmp on v blank
	LDA	SDLSTH	;program counter addr
	STA	($80),Y
	DEY
	LDA	SDLSTL
	STA	($80),Y
	DEY
	LDX	#3
:NEXT	LDA	DLSTBL,X
	STA	($80),Y
	DEY
	DEX
	BPL	:NEXT
	LDA	#LOW DLIRTN	; enable display
	STA	VDSLST			; list interupts
	LDA	#HIGH DLIRTN
	STA	VDSLST+1
	LDA	#%11000000
	STA	NMIEN

	CLC		;set strip screen
	LDA	SAVMSC	;indirect addr
	ADC	#LOW 3680
	STA	STRPAD
	LDA	SAVMSC+1
	ADC	#HIGH 3680
	STA	STRPAD+1

;OS, ANTIC, POKEY, INITILIZATION

	LDA	#02	; enable players
	STA	GRACTL
	LDA	#HIGH PBASE
	STA	PMBASE
	LDA	#%00000001   ;plyrs priority
	STA	GPRIOR

; initilize size

	LDY	#00
	STY	SIZEP0
	STY	SIZEP0+1
	STY	SIZEP0+2
	STY	SIZEP0+3

; Clear title screen ram

	LDX	#255
	LDA	#0
:NEXT2	STA	[TTLSCN-1],X
	STA	[TTLSCN+25],X
	DEX
	BNE	:NEXT2

;place TRACER and name on title screen

	;place TRACER on screen
	TTLPRT	5,TRCTBL,47

	;place copyright  on screen
	TTLPRT	13,CRTBL,213

	;place name on screen
	TTLPRT	16,NMETBL,251

	LDA	#0	;set color of name strip
	STA	COLOR2
	LDA	#116
	STA	COLOR1
	LDA	COLTBL+4	;and characters
	STA	COLOR0
; set up title screen for one player game

	JSR	SWONE
	JSR	ZHPOS
	JSR	RTNTTL	; set display list
	JSR	KILSND
	RTS

; *** Play control for two player ***
; Fill screen with boundary

PLYTWO	PROC
	LDX	$58	; use begining screen
	LDY	$59	; ram pointer to
	STX	$80	; set my pointer
	STY	$81
	LDX	#00
	JSR	HORIZ
	JSR	VERT
	JSR	HORIZ

;CLEAR PLAYER MISSLE RAM

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

; GET RANDOM NUMBER BETWEEN 0 & 3

	LDA	RANDOM
	AND	#%00000011
	STA	RNDX
	TAX

; PLACE OBJECTS IN RAM VERTICALLY
; SET DIR. INDEX REGS & STKCPL REGS

	LDA	PL1VRT,X
	STA	PVPRG
	LDA	PL2VRT,X
	STA	PVPRG+1

	TXA
	CMP	#3
	BNE	REGLR
	JSR	PL0RT
	JSR	PL1RT
	LDA	#4
	STA	INDEX
	STA	INDEX+1
	LDA	#$B
	STA	STKCPL
	STA	STKCPL+1
	LDA	#$7
	STA	SSTICK
	STA	SSTICK+1
	JMP	INTRC

REGLR	=	*
	JSR	PL0RT
	JSR	PL1LT
	LDA	#$B
	STA	STKCPL
	STA	SSTICK+1
	LDA	#7
	STA	STKCPL+1
	STA	SSTICK
	LDA	#4
	STA	INDEX
	LDA	#6
	STA	INDEX+1
INTRC	=	*

; INITILIZE ROW COLUMN SOFT REGS

	JSR	CRSET

;SIZE, HORIZ. POS., COLORS

	LDX	RNDX
	LDA	PL1HRZ,X
	STA	PHPRG
	STA	HPOSP0
	STA	HPOSP0+1
	LDA	PL2HRZ,X
	STA	PHPRG+1
	STA	HPOSP0+2
	STA	HPOSP0+3

; **	END OF POSITIONING LOGIC **

; PLACE COLORS IN SHADOW LOCATIONS

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

; Set sounds for idle before the race

	LDA	#0
	STA	AUDCTL
	STA	AUDC3
	STA	AUDC4
	LDA	#34
	STA	AUDC1
	STA	AUDC2
	LDA	#200
	STA	AUDF1
	LDA	#201
	STA	AUDF2

; RESET ATTRACT MODE TO ZERO

	LDA	#0
	STA	ATRACT

; clear min. move reg

	LDA	#$FF
	STA	MINMV2
	STA	MINMV2+1

; CLEAR ANY COLLISIONS

	LDY	#2	;wait for screen
	JSR	PAUSE	;to print
	STA	HITCLR
	JSR	SCRSCN	;Print scores

;WAIT TIL A TRIG IS PRESSED

WAIT	=	*
	JSR	TRIGS
	LDA	CONSOL	; rtn if opt
	AND	#4
	BNE	:GO1	; key pressed
OPTEXT	PLA ! PLA	; pull rtn addr
	JSR	KILSND
	JSR	ZHPOS
	JSR	RTNTTL	;change dlist
	LDY	#15
	JSR	PAUSE
	RTS
:GO1	LDA	P0FLG
	BEQ	:OUT
	LDA	P0FLG+1
	BNE	WAIT
:OUT	=	*
	LDA	#0	; cycle thru both
	STA	P0FLG	; possible cond's
	STA	P0FLG+1	; to set snd regs
	JSR	TRIGS
	LDA	#1
	STA	P0FLG
	STA	P0FLG+1
	JSR	TRIGS
;SET SOUNDS FOR THE RACE
	LDA	#0
	STA	AUDC1
	LDA	#%01111000
	STA	AUDCTL
	LDA	#168
	STA	AUDC2
	STA	AUDC4
; Set colors for the race
	LDA	#124
	STA	PCOLR0
	STA	PCOLR1
	LDA	#60
	STA	PCOLR2
	STA	PCOLR3

; MAIN SUBROUTINE CONTROL
; ( DELAY-MVFST-DELAY-MOVE-JMP TO DELAY )

SUBCTL =	*
	LDX	DELAY
DLYLP1	=	*
	TXA
	PHA
	JSR	TRIGS
	JSR	UPDATE
	PLA
	TAX
	DEX
	BNE	DLYLP1

	JSR	MVFAST
	JSR	HITTST

	LDA	CONSOL	; rtn if opt
	AND	#4
	BNE	:GO2	; key pressed
	JMP	OPTEXT

:GO2	LDX	DELAY
DLYLP2	=	*
	TXA
	PHA
	JSR	TRIGS
	JSR	UPDATE
	PLA
	TAX
	DEX
	BNE	DLYLP2
	JSR	HITTST
	JSR	CKFLGS
	JMP	SUBCTL

; SET COL. ROW SOFT REGS
; X INDEX PICKS STARTING PT. VARIATION

CRSET	PROC
	LDX	RNDX
	LDA	PL1RW,X
	STA	PLROW
	LDA	PL2RW,X
	STA	PLROW+1
	LDA	PL1COL,X
	STA	PLCOL
	LDA	PL2COL,X
	STA	PLCOL+1
	RTS

;RTN. TO CREATE THE BOUNDARIES

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

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

; Increment thru 38 screen addrs

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

INCADR PROC		;increment indirect address
	CLC
	LDA	$80
	ADC	#01
	STA	$80
	LDA	#00
	ADC	$81
	STA	$81
	LDA	#00
	RTS

; kill all sounds

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

MYBRK	DB	1

	LINK	D:TRCB.ASM


