;*********************************************************************
;	mario kart demo(watch) kart program
;*********************************************************************
		INCLUDE	../../SFX/RP5C77
		INCLUDE	../../SFX/RP5A22
		INCLUDE	../../DSP/D77C25
		INCLUDE	../../../kimura/join/work.def
		INCLUDE	../../../kimura/join/buffer.def
		INCLUDE	../DEF/object.def
		include	../DEF/editer.def
;----------------------------------------------------------------------	
	glb	Call_bank1
;----------------------------------------------------------------------	

bank84		sect	rel
		mem16
		idx16
;*********************************************************************
;	モード７回転プログラム
;*********************************************************************
;	LDA	#0100h			; 画面のズームサイズ	
;	LDY	#0000h			; 画面の角度
;	LDX	#rotate_A		; 回転パラメーターのワークの先頭
;	JSL	>Rotate_mode7
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - -		
	GLB	Rotate_mode7
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - -		
Rotate_mode7	cpy	#0
		bne	entry$
		cmp	#0100h	
		bne	entry$
		stz	<2,x			; matrix B
		stz	<4,x			; matrix C
		bra	skip$
entry$		pha				; >>
		SEP	#00100000B
		MEM8
		lda	#dsp_triangle
		sta	!DSP_data
		REP	#00100000B
		MEM16
		tya
	;;	and	#0ff00h
		sta	!DSP_data
		pla				; <<
		sta	!DSP_data
		LDA	>DSP_status
		BPL	$-4
		lda	!DSP_data
		sta	<2,x		; matrix B = zoom * sin	
		EOR	#1111111111111111B
		INC	A
		sta	<4,x		; matrix C = zoom * -sin
		lda	!DSP_data
skip$		sta	<0,x		; matrix A
		sta	<6,x		; matrix D
		rtl
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
		EXTEND
objdata	SECT	REL
		mem16
		idx16
;*********************************************************************
;	デモカートセットルーチン
;*********************************************************************
		EXT	OBJ_transport,Check_trans_A
		EXT	Set_trans_data
		EXT	Call_bank0
		EXT	clear_spbuff
		EXT	demokart_bank0
;- - - - - - - - - - - - - - - - - - - - - - - - 
		ext	param_screenA
		ext	Set_objcountX
		ext	clear_spbuffX
		GLB	Set_demokart,DMA_demokart
;----------------------------------------------------------------------
;	デモカートのＮＭＩルーチン
;----------------------------------------------------------------------
DMA_demokart	PHB
		PHK
		PLB
		INC	!demokart_frame
		LDX	#OBJ_transport
		JSL	>Call_bank0
		PLB
		RTL
;----------------------------------------------------------------------
;	デモカートのメインルーチン
;----------------------------------------------------------------------
Set_demokart	PHB
		PHK
		PLB
;- - - - - - - - - - - - - - - - - - - - - - - - 
		STZ	<trans_counter
		STZ	<camera_direction	; camera angle
;- - - - - - - - - - - - - - - - - - - - - - - - 
		JSR	param_screenA
;- - - - - - - - - - - - - - - - - - - - - - - -
		STZ	!demokart_count
;- - - - - - - - - - - - - - - - - - - - - - - -
		LDY	<A_forward		;W
		BRA	entry$
loop$		STY	<register
;- - - - - - - - - - - - - - - - - - - - - - - -
		TYX
		LDA	!demokart_frame		;１フレームおき
		AND	#01H			;に転送する
		EOR	!demokart_count
		INC	!demokart_count
		LSR	A
		BCS	skip$
;- - - - - - - - - - - - - - - - - - - - - - - -
		LDA	<trans_counter
		CMP	#0ffH			;最高４台まで
		BCS	skip$
		TXA
		XBA
		AND	#07H
		ASL	A
		TAY				;転送アドレス
		LDX	#Set_trans_data		;	をセット
		JSL	>Call_bank0
;
		LDY	<register
;- - - - - - - - - - - - - - - - - - - - - - - -
skip$		LDX	<_object_A,Y		;
		INX				;
		INX				;
		JSL	>demokart_bank0
		LDX	<register		;
		LDY	<_forward_A,X		;(next program address)
entry$		CPY	#A_root			;(sprite end ?)
		BNE	loop$
;- - - - - - - - - - - - - - - - - - - - - - - -
		LDX	#clear_spbuffX
		JSL	>Call_bank0
;- - - - - - - - - - - - - - - - - - - - - - - - 
		PLB
		RTL
;*********************************************************************
;	デモカートのイニシャルルーチン
;*********************************************************************
		GLB	Init_demokart
		EXT	CLEAR_SPRITE
	;;	EXT	Init_object
		EXT	demo_kart,Mount_A
	;;;	EXT	trans_A,kart_A
		EXT	Set_objcount
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
Init_demokart	
		LDA	#1000H
		STA	<player_index
		STZ	<trans_counter
		STZ	!ptn_flip	 ; パターンフリップクリア
;- - - - - - - - - - - - - - - - - - - - ; 表示のイニシャル
		LDA	#A_root		 ;W (reset pointer)
		STA	<A_backward	 ;W
		STA	<A_forward	 ;W
		STZ	!backup_A
;- - - - - - - - - - - - - - - - - - - - 
loop$		LDX	!0,Y
		BEQ	exit$
;
		jsr	Clear_kartwork
;
;- - - - - - - - - - - - - - - - - - - - ;座標 initial
		LDA	!2,Y
		STA	<_situationXH,X
		LDA	!4,Y
		STA	<_situationYH,X
		LDA	!6,Y			
		STA	<_poseQ,X
;- - - - - - - - - - - - - - - - - - - - 
		LDA	#140H
		STA	<_trans_ptn_A,X
		LDA	#120H
		STA	<_ptn_A,X
;- - - - - - - - - - - - - - - - - - - - 
		LDA	#demo_kart	; index
		JSL	>Mount_A
		TYA
		CLC
		ADC	#8
		TAY
		BRA	loop$
;- - - - - - - - - - - - - - - - - - - - 
exit$
;- - - - - - - - - - - - - - - - - - - - - - - - - -
		JSR	Init_demokame

	if	0
;- - - - - - - - - - - - - - - - - - - - - - - - - -
		PHB				;>>
		pea	BC_01_01
		plb
		plb
		JSR	param_screenA
;- - - - - - - - - - - - - - - - - - - - - - - - - -
		LDX	#Set_objcountX
		JSL	>Call_bank0
		JSL	>Set_demokart
		JSL	>DMA_demokart
;- - - - - - - - - - - - - - - - - - - - - - - - - -
		LDX	#Set_objcountX
		JSL	>Call_bank0
		JSL	>Set_demokart
		JSL	>DMA_demokart
;- - - - - - - - - - - - - - - - - - - - - - - - - -
	endif
		JSL	>CLEAR_SPRITE
	;;;	PLB				;<<
		RTL
;--------------------------------------------------------------------
;		
;--------------------------------------------------------------------
;********************************************************************
;	カートのワークをオールクリア
;********************************************************************
		EXT	Set_coin,Set_upcoin
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
Init_demokame	LDA	#5000h		; バナナセット
		LDX	#8000h	
		JSR	Set_coin
		LDA	#5020h		; カメセット(1)
		LDX	#8000h+280h
		JSR	Set_coin
		LDA	#5040h		; カメセット(2)
		LDX	#8000h+500h
		JMP	Set_coin
;********************************************************************
;	カートのワークをオールクリア
;********************************************************************
Clear_kartwork
		lda	<_attribute,x
		pha
		lda	<_status,x
		pha
		phx
		phy
		ldy	#0a0h/2
;- - - - - - - - - - - - - - - - - - - - - -
		lda	#4000h
		and	<kart_status,x
		sta	<kart_status,x	; 
		stz	<event_index,x	;
;- - - - - - - - - - - - - - - - - - - - - -
loop$		stz	<0,x
		inx
		inx
		dey
		bne	loop$
		ply
		plx
		pla
		sta	<_status,x
		pla
		and	#3fffh
		sta	<_attribute,x
		rts
;--------------------------------------------------------------------
;
;
;
;#####------------------- UTILITY ---------------------######
;
;********************************************************************
;	バンク１プログラムのコール
;********************************************************************
Call_bank1	PHB
		PHK
		PLB
		STX	!nmi_work
		LDX	#nmi_work
		JSR	(!0,X)
		PLB
		RTL
;--------------------------------------------------------------------
		END
