;******************* k-slect_1.asm  *************************;
			extend
;-----------------------------------------------------
			include		../join/rp5c77
			include		../join/buffer.def
			include		../join/rp5a22
			include     ../join/work.def
			include		../join/label.def
			include		../join/object.def
;-----------------------------------------------------
			glb		K_SL_init,K_SL_main,K_SL_nmi
			glb		KEY_CHECK
;
			ext		Init_demokart,Set_demokart
			ext		DMA_demokart,PPU_INT_SET,Set_DMA
			ext		Trigger_sound_1,BGM_fade_out
			ext		Color_Set_sub
;---------------------------------------------------
Scroll_Set2			equ		60h			;3byte
Scroll_Set3			equ		63h			;3byte
Kart_Select			equ		66h			;4byte
button_TG			equ		6ah			;4byte
swing_counter		equ		6eh			;2byte
;
move_flag			equ		70h			;4byte
Cursor_Address		equ		74h			;4btte
Cursor_set			equ		78h			;4byte
X_set				equ		7ch			;2byte
Next_Address		equ		7eh			;4byte
;
Contorol_Set		equ		82h			;2byte
Cursor_Erase		equ		84h			;2byte
OK_Address			equ		86h			;4byte
Back_Address		equ		8ch
Check_Address		equ		92h
next_counter		equ		96h
Flash_counter		equ		98h
Flash_set			equ		9ah			;4byte
OK_check			equ		180h		;4byte
Back_check			equ		184h		;4byte
Select_chibi		equ		190h
Chibi_flag			equ		192h		;4byte
Pikupiku_flag		equ		196h		;4byet
size_counter		equ		19ah		;4byte
;
size_timer			equ		1800h		;4byte
OK_offset			equ		1810h		;2byte
;-----------------------------------------------------
msbdat			equ		000400h
oamdat			equ		000200h	
;-----------------------------------------------------
bank85      sect    rel         ;(PBR=85)
;==================================================
;**************************************************
;			INITIAL ROUTINE
;**************************************************
;==================================================
K_SL_init		equ		$
				phb
				phk
				plb
;
				mem8
				idx8
				sep		#00110000b
;
				JSL     >PPU_INT_SET
				JSR		MODE_INIT1
				JSR		V_TENSOU
;
				mem16
				idx16
				rep		#00110000b
;
				JSR		OBJ_init
;
				plb
				RTL
;===================================================
;***************************************************
;			MAINE ROUNTINE
;***************************************************
;===================================================
K_SL_main	equ		$
				phb
				phk
				plb
;
				JSR		KEY_CHECK
				JSR		VS_com_set
				JSR		SELECT_SCROLL
				JSR		Cursor_Move_set
				JSL		>Small_kart_set
				JSL		>Pikupiku_set
				JSL		>CURSOR_FLASH
				JSR		KART_CHECK
				JSR		NEXT_CHECK
;
				JSR		OBJ_MOVE
;
				plb
				RTL
;============================================================
;***********************************************************
;					NMI wari komi.			  
;***********************************************************
;============================================================
K_SL_nmi		equ		$
				phb
				phk
				plb
;<<<<<<<<<<<<<<<<< カート転送 >>>>>>>>>>>>>>>>>>>>>>
				JSL		>DMA_demokart
;<<<<<<<<< カーソル移動時の”消し”セット >>>>>>>>>>
				ldx		#0	
				jsr		Address_Set
				jsr		Erase_Set
				ldx		#0002
				jsr		Address_Set
				jsr		Erase_Set
;<<<<<<<<<<<< カーソル移動時のセット >>>>>>>>>>>>>>>
				ldx		#0
				jsr		Address_next_Set
				jsr		Cursor_Set
				ldx		#0002
				jsr		Address_next_Set
				jsr		Cursor_Set
;<<<<<<<<<<<<<< 最終チェックのセット >>>>>>>>>>>>>>>
				ldx     #0
				JSR		OK_address_set
				JSR		OK_SET
				ldx     #0002
				JSR		OK_address_set
				JSR		OK_SET
;<<<<<<<<<<<<<<< スクリーンセット >>>>>>>>>>>>>>>>>>
				ldx     #0
				JSR		Back_Address_set
				JSR		Back_stop_set
				ldx     #0002
				JSR		Back_Address_set
				JSR		Back_stop_set
;<<<<<<<<<<<<<<<< フラッシングセット >>>>>>>>>>>>>>>
				ldx		#0000
				JSR     Address_next_Set
				JSR		Fashing_set
;-------(プレイヤーチェック)-----
				lda		timeattack_flag
				bne		Com_Fashing
;
				lda		<game_mode
				bne		Set_Scllor
;
Com_Fashing		ldx		#0002
				JSR     Address_next_Set
				JSR		Fashing_set
;<<<<<<<<<<<<<<<<<< スクロール　セット >>>>>>>>>>>>>>
Set_Scllor		mem8
				sep		#00100000b
				lda		<Scroll_Set2+1		;BG1 scroll set:low
				sta		>Scroll_1H
				lda		<Scroll_Set2+2		;BG1 scroll set:Hi
				sta		>Scroll_1H
;
				lda		<Scroll_Set3+1
				sta		>Scroll_2H
				lda		<Scroll_Set3+2
				sta		>Scroll_2H
				mem16
				rep		#00100000b
;
				plb
				RTL
;=================================================================
;****************************************************************
;						INITIAL ROUTINE
;****************************************************************
;=================================================================
;
;******************************************************
;					CHRACTER & SC TENSOU
;******************************************************
V_TENSOU	equ		$					
				mem8
				idx8
;//////////////// SC_1転送 ///////////////////
				ldx		#08
				jsr     Set_DMA
;//////////////// SC_2転送 ///////////////////
				ldx		#0ah
				jsr     Set_DMA
;//////////////// SC_3転送 ///////////////////
				ldx		#0ch
				jsr     Set_DMA
;////////// BG1.2.3キャラクター転送 //////////
				ldx		#0eh
				jsr     Set_DMA
;//////////// SC_4転送 //////////////////////				
				mem16
				idx16
				rep		#00110000b
;
				lda		#3800h
				sta		Screen_address
;
				ldx		#0000h
				lda		#3014h
loop_4AG		sta		>Screen_write
				inx
				inx
				cpx		#800h
				bne		loop_4AG
;/////////////// カラー転送 ///////////////////
CG_SET			equ		$				;(CG_DATA TENSOU)
;
				mem8
				sep		#00100000b
;
				lda		#00000000b
				sta		Color_address
;				
   	    		ldy		#0
				ldx		#0e800h
k_color			JSR		Color_Set_sub
				cpy		#200h
				bne		k_color
;///////////////// カーソル　セット /////////////////////
;------(一人用)--------
				mem16
				rep		#00100000b
				lda		<game_mode				
				beq		Set_2plyaer
				jsr		Cursor_1p
				rts
;------(二人用)--------
Set_2plyaer		jsr     Cursor_1p
				jsr     Cursor_2p
				mem8
				idx8
				sep		#00100000b
				rts		
;----------------------------------------
Cursor_1p		equ		$
				mem16
				idx16
				ldx		#0000
				JSR		Set_cursor_sub
				rts
;-----------------------------------------
Cursor_2p       equ     $
				mem16
				idx16
				ldx		#0002
				JSR		Set_cursor_sub
				rts
;
Set_cursor_sub	equ		$
				phx
				lda		<Kart_Select,x				;１プレイヤーのカーソルセット
				tax
				lda		Addr_Data,x
				plx
				sta		<Cursor_Address,x
				sta		<Next_Address,x				
				lda		Select_cursor,x				
				sta		<Cursor_set,x
;
				jsr		Address_Set
				jsr		Cursor_Set
				rts

Select_cursor	DW		1815h,1c17h
;****************************************************
;					PPU &  WORK SET
;****************************************************
MODE_INIT1		equ		$
				JSL		>Work_set
				mem16
				idx16
				rep		#00110000b
;////////// プレイヤーごとのカートセット ///////////

				lda		<game_mode				
				bne		Noset_2p						;プレイヤー数のチェック
;---------------(二人用)------------------
				lda		driver_number+1000h				;プレイヤーが重なった
				cmp		driver_number+1100h				;時のチェック
				beq		Init_kart_set
;
				ldx		driver_number+1000h				;１プレイヤーのカートセット
				lda		Drinver_number,x
				sta		<Kart_Select					;２プレイヤーのカートセット
;
				ldx		driver_number+1100h
				lda		Drinver_number,x
				sta		<Kart_Select+2
				jmp		Set_PPU
;
Init_kart_set	stz		<Kart_Select
				lda		#0008
				sta		<Kart_Select+2
				jmp     Set_PPU
;---------------(一人用)-------------------
Noset_2p		lda		<game_mode				
				cmp		#0004
				beq		con_set							;コントローラーチェック
;---(1コントローラーで選んだ時)-----
				ldx		driver_number+1000h				;１プレイヤーのカートセット
				lda		Drinver_number,x
				sta		<Kart_Select
				jmp     Set_nokart
;---(2コントローラーで選んだ時)----
con_set			ldx		driver_number+1100h				;１プレイヤーのカートセット
				lda		Drinver_number,x
				sta		<Kart_Select
;
Set_nokart		ldx		#0002
				lda		#00f0h							;２プレイヤーのカートなしセっと
				sta     <Kart_Select,x					
				lda		#0002
				sta		<move_flag,x
;
Set_PPU			JSL		>K_PPU_Set
				rts
;*********************************************************
;					OBJ のためのイニシャル
;*********************************************************
OBJ_init		equ		$
				mem16
				idx16
				ldy		#OBJ_data
				JSL		>Init_demokart
				rts
;
;==============================================================
;*************************************************************
;						データー
;*************************************************************
;==============================================================
OK_data_set		DW		OK_Data_1p,OK_Data_2p
				DW		OK_END_Data_1p,OK_END_Data_2p
				DW		OK_Data_erase
;
OK_Data_1p		DW		1840h,1841h,1842h,1843h
OK_Data_2p		DW		1844h,1841h,1842h,1843h
OK_END_Data_1p	DW		1040h,1041h,1042h,1045h		
OK_END_Data_2p  DW		1044h,1041h,1042h,1045h
OK_Data_erase  	DW      0805h,0805h,0805h,0805h
;
sc_4_Address	DW		3924h,392ah,3930h,3936h
				DW		3a24h,3a2ah,3a30h,3a36h
;
Drinver_number	DW		0000h,0008h,0004h,0002h			;ドライバーナンバーが
				DW		000ch,0006h,000eh,000ah			;どこのヂスプレー上に
;														;あるかを見る
Kart_number		DW		0000h,0006h,0004h,000ah
				DW		0002h,000eh,0008h,000ch
;
OBJ_data		DW		player_r0,0038h,0070h,4000h		;mario
				DW		player_r1,0038h,00b1h,4000h		;luigi
				DW      player_r2,0098h,0070h,4000h		;kupa
				DW      player_r3,0068h,0071h,4000h		;peach
				DW      player_r4,0098h,00b1h,4000h		;kong
				DW      player_r5,00c8h,0071h,4000h		;noko
				DW      player_r6,00c8h,00b0h,4000h		;kinopi
				DW      player_r7,0068h,00b0h,4000h		;yossy
				DW		0
;
Addr_Data		DW		2506h,250ch,2512h,2518h
				DW		2606h,260ch,2612h,2618h
;
Cursor_Data		DW		1815h,1c17h
;==================================================================
;****************************************************************
;					MAINE ROUTINE
;****************************************************************
;==================================================================
;********************************************************
;					キーチェック
;********************************************************
KEY_CHECK		equ		$
;<<<<<<<<<<<<<< フェード中チェック >>>>>>>>>>>>>>>>
  				lda		<fade_control
				bne		Noset_key						;フェード中は、ボタンは受け付けない
;
				sep		#20h
				mem8
				lda		!fade_data+1
				cmp		#0fh
				mem16
				rep		#20h
				bne		Noset_key
;<<<<<<<<<<<<<<<< １コントローラーセット >>>>>>>>>>>
				lda     <button_trigger					;１コンセット
				sta     <button_TG
;<<<<<<<<<<<<<<<< ２コントローラセット >>>>>>>>>>>>>
				lda		<button_trigger+2				;２コンセット
				sta		<button_TG+2
;<<<<<< キーをセットするかしないかのチェック >>>>>>>
				lda		<game_index
				cmp		#0004
				beq		Set_all_contoroler
				cmp		#0006
				beq		VS_com_check
Nokye_check		JSR		Nokey_set_check		
Set_all_contoroler
				rts
;<<<<<<< カートセレクトの時のキーチェック >>>>>>>>>>
VS_com_check	lda		<game_status
				cmp		#0004
				bne		Nokye_check
				lda		<game_mode
				cmp		#0002
				beq		Set_all_contoroler
				jmp		Nokye_check
;<<<<<<<<<<<<<<<< キーをセットしない >>>>>>>>>>>>>>>
Noset_key		stz		<button_TG						;キーセットなしセット
				stz		<button_TG+2
				rts
;
Nokey_set_check	lda		game_mode
				beq		owari_Nokey_set
				cmp		#0004
				bne		No_2con
				stz		<button_TG
				jmp		owari_Nokey_set
No_2con			stz		<button_TG+2
owari_Nokey_set	rts
;*******************************************************
;					背景、文字スクロール
;*******************************************************
SELECT_SCROLL	equ		$
;
				lda		Scroll_Set2						;BG2 scroll set.
				clc
				adc		#00d0h
				sta		Scroll_Set2
;-----------------------------------------------
				lda		<Scroll_Set3					;BG3 scroll set.
				clc
				adc		#0160h
				sta		<Scroll_Set3
				rts
;*********************************************************
;				対コンピューター用フラグセット
;********************************************************
VS_com_set		equ		$
				lda		Pikupiku_flag+2
				bne		owari_VScom
;<<<<<<<<<<<<< 対コンピューターチェック >>>>>>>>>>>>>
				lda		timeattack_flag
				bne		owari_VScom
;<<<<<<<<<<<<< タイムアタックチェック >>>>>>>>>>>>>>>
				lda		<game_status
				cmp		#0004
				bne		owari_VScom
;<<<<<<<<<<<<<<<<< １コン決定チェック >>>>>>>>>>>>>>> 
				lda		<game_mode
				cmp		#0002
				bne		owari_VScom
;<<<<<<<<<<<<< 対コンピューターセット >>>>>>>>>>>>>>>
				lda		<button_TG+2
				beq		owari_VScom
				lda     <Kart_Select
				clc
				adc		#0002
				cmp		#0010h
				bne		Set_com_kart
				lda		#0
Set_com_kart	sta		<Kart_Select+2
				stz		<move_flag+2
				dec		timeattack_flag
				JSR		Cursor_2p		
				lda		#1c4ch
				sta		<Cursor_set+2
				stz		<button_TG+2
;
owari_VScom		rts		
;***********************************************************
;				
;***********************************************************
Choose_set_1	phb
				phk
				plb
				JSR		Choose_set
				plb
				rtl
;***********************************************************
;					カーソルの移動セット
;***********************************************************
Cursor_Move_set	equ		$
;<<<<<<<<<<<<<<<<<< ボタン チェック >>>>>>>>>>>>>>>>>
Check_button	lda		<button_TG
				ora		<button_TG+2
				and		#0f00h					
				bne		Set_Now
				rts
;<<<< どちらのコントローラーを使ったかのチェック >>>>
Choose_set		equ		$			
				lda		timeattack_flag
				bne		Set_1.2Con	
				lda		<game_mode
				beq		Set_1.2Con
				jmp     Set_1con
;
Set_1.2Con		lda		<button_TG
				beq		Set_2player	
Set_1con		stz		<Contorol_Set
				jmp		owari_choose
Set_2player		lda		#0002
				sta		<Contorol_Set
owari_choose	rts		
;<<<<<<<<<<<<<<< 消すカーソルセット>>>>>>>>>>>>>>>>>>
Set_Now			JSR		Choose_set
				ldx     <Contorol_Set
;
				lda		Pikupiku_flag,x
				bne		owari_cursor
;
				lda		<move_flag,x
				bne		owari_cursor
;
				lda		<Kart_Select,x
				tax
				lda		Addr_Data,x				
;----------------------------------------------
				ldx     <Contorol_Set
				sta		<Cursor_Address,x
;
				JSL		>Old_size_set
;<<<<<<<<<<<<<<<<< カーソル移動チェック >>>>>>>>>>>>>>>
				ldx		<Contorol_Set					;コントローラーセット
;
				lda		<button_TG
				ora		<button_TG+2
				and		#0f00h
				cmp		#0100h
				beq		Kart_right						;右セットジャンプ		
;----------------------------------------------
				cmp		#0200h
				beq		Kart_left						;左セットジャンプ
;----------------------------------------------
				cmp		#0800h
				beq		Kart_up							;上セットジャンプ
;<<<<<<<<<<<<<<<<<<<<< 下セット >>>>>>>>>>>>>>>>>>>>>>> 
Kart_down		lda		<Kart_Select,x
				clc
				adc		#0008
				jsr		Comp_check
				beq		owari_VFR						;同じ位置なら何もしない
;----------------------------------------------
				cmp		#0010h
				bcs		owari_VFR						;進めないなら何もしない
				jmp		Set_Kart.number
owari_cursor	rts		
;<<<<<<<<<<<<<<<<<<<<< 上セット >>>>>>>>>>>>>>>>>>>>>>>
Kart_up			lda		<Kart_Select,x
				sec
				sbc		#0008
				jsr		Comp_check
				beq		owari_VFR						;同じ位置なら何もしない
;----------------------------------------------
				cmp		#0fff8h
				bcs		owari_VFR						;進めないなら何もしない
				jmp		Set_Kart.number
;<<<<<<<<<<<<<<<<<<<<< 右セット >>>>>>>>>>>>>>>>>>>>>>>
Kart_right		lda		<Kart_Select,x
				inc		a
				inc		a
recheck			jsr		Comp_check
				beq		jump_kart						;同じ位置なら何もしない
;----------------------------------------------
Check_out		cmp		#0010h
				beq		mario_set						;マリオに戻る
				jmp		Set_Kart.number					;進む
;----------------------------------------------
jump_kart		inc		a	
				inc		a								;別のプレイヤーを飛び越す
				jmp		Check_out			
;----------------------------------------------
mario_set		txa										;プレイヤーを元に戻す
				eor		#0002							
				tax
				lda		#0000
				jmp		recheck
;<<<<<<<<<<<<<<<<<<<<< 左セット >>>>>>>>>>>>>>>>>>>>>>> 
Kart_left		lda		<Kart_Select,x
				dec		a
				dec		a
recheck1		jsr		Comp_check
				beq		jump_kart1						;同じ位置なら何もしない
;----------------------------------------------
Check_out1		cmp		#0fffeh
				beq		kinop_set						;キノピオに戻る
				jmp     Set_Kart.number					;進む
;----------------------------------------------
jump_kart1		dec		a
				dec		a								;別のプレイヤーを飛び越す
				jmp     Check_out1
;----------------------------------------------
kinop_set		txa										;プレイヤーを元に戻す
				eor		#0002
				tax
				lda     #000eh						
				jmp		recheck1
;<<<<<<<<<<<<<<< 移動先のカーソルセット >>>>>>>>>>>>>>>
Set_Kart.number	ldx     <Contorol_Set
				sta		<Kart_Select,x
				lda		<Kart_Select,x				
				tax
				phx
				lda		#002ch
				JSL     >Trigger_sound_1
;----------------------------------------------
				plx
				lda		Addr_Data,x
				ldx		<Contorol_Set
				sta		<Next_Address,x			
owari_VFR		JSL		>New_size_set
				rts
;<<<<<<<<<<<< 別プレイヤーのカートチェック >>>>>>>>>>>>>
Comp_check		equ		$
				pha
				txa
				eor		#0002					
				tax
				pla
				cmp		<Kart_Select,x
				rts
;*******************************************************************
;					最終チェック セット
;*******************************************************************
KART_CHECK		equ		$
;<<<<<<<<<<<<<<<<<< ボタンチェック >>>>>>>>>>>>>>>>>>>> 
Check_button1	lda		<button_TG
				ora		<button_TG+2
				and		#9000h
				bne		OK?_Set.on							;チェックセット
;----------------------------------------------
				lda		<button_TG
				ora		<button_TG+2
				and		#0040h
				bne		OK?_Set.off							;チェック イレース セット
				rts
;<<<<<<<<<<<<<<<< １回目のＯＫセット >>>>>>>>>>>>>>>>>>
OK?_Set.on		lda		game_mode
				cmp		#0004
				beq		Ok_1p_set
				lda		<button_TG
				and		#9000h
				bne		Ok_1p_set				;チェックセット
				lda		#0002
				sta		OK_offset
				jmp		Check_Set.on
Ok_1p_set		stz		OK_offset
;
Check_Set.on	ldx		OK_offset
				lda		Pikupiku_flag,x
				bne		owari_OK?_Set
;----------------------------------------------
				lda		<move_flag,x
				cmp		#0001
				beq		END_Set
				cmp		#0002
				beq		owari_OK?_Set
;----------------------------------------------
				txa
				sta		OK_check,x
;----------------------------------------------
				lda		#0001h
				sta		<move_flag,x
;----------------------------------------------
				lda		<Kart_Select,x
				tax
;
				lda		sc_4_Address,x
				ldx     <Contorol_Set
				sta		<Back_Address,x
				stz		Back_check,x
;----------------------------------------------
Set_sound		lda		#002eh
				JSL		>Trigger_sound_1
;----------------------------------------------
owari_OK?_Set	rts
;//////////////// １回目のＯＫセットを消す //////////////
OK?_Set.off		lda		game_mode
				cmp		#0004
				beq		Off_1p_set
;
				lda		<button_TG
				and		#0040h
				bne		Off_1p_set				;チェックセット
				lda		#0002
				sta		OK_offset
				jmp		Check_Set.off
Off_1p_set		stz		OK_offset
;
Check_Set.off	ldx		OK_offset
				lda		<move_flag,x
				cmp		#0001
				bne		NO_erase
;
				lda		#0008
				sta		OK_check,x
;
				stz		<move_flag,x
;
				lda		<Kart_Select,x
				tax
;
				lda		sc_4_Address,x
				ldx     <Contorol_Set
				sta		<Back_Address,x
				lda		#0002h
				sta		Back_check,x
;
				lda		#002fh
				JSL		>Trigger_sound_1
NO_erase		rts
;//////////////// 最終”ＯＫ”セット/////////////////////
END_Set			equ		$
				lda		game_mode
				cmp		#0004
				beq		END_Set_1p
;
				lda		<button_TG
				and		#9000h
				bne		END_Set_1p				;チェックセット
				lda		#0002
				sta		OK_offset
				jmp		END_Set_OK
END_Set_1p		stz		OK_offset
;
END_Set_OK		ldx		OK_offset
				lda		OK_offset
				clc
				adc		#0004
				sta		OK_check,x
				lda		#0002h
				sta		<move_flag,x
;		
				lda		#002eh
				JSL     >Trigger_sound_1
owari_14M		rts
;---------------------------------------------
;************************************************
;				KART MOVE SET
;************************************************
OBJ_MOVE		equ		$
				mem16
				idx16
				lda		#300h
				sta		<sprite_count
;
				JSR		MOVE_SET
;
				JSL		>Set_demokart
				rts
;************************************************
;				OBJ MOVE SET
;************************************************
MOVE_SET		equ		$
;(REVOLVE SET)
				mem16
				idx16
;
				ldx		#0000
				stx		<X_set
				JSR		Set_Revolve
;- - - - - - - - - - - - - - - - - - - - - - - - - - 
Revolve_2p		lda		timeattack_flag
				bne		com_Revolve
;
				lda		<game_mode
				bne		Set_Swing				;1player?:yes-->Set_Swing
;
com_Revolve		ldx		#0002
				stx		<X_set
				JSR     Set_Revolve
				jmp     Set_Swing
;------------------------------------------------
;(FRONT SET)
Set_turn		equ		$
				mem16
				idx16
				lda		#0280h
				ldy		<_poseQ,x
				bpl		no_conttrary			;conttrary?:no-->no_conttrary
				lda		#-280h					;right turn.
no_conttrary	clc								;left turn.
				adc		<_poseQ,x
				cmp		#8200h
				rts
;- - - - - - - - - - - - - - - - - - - - - - - 
;(FLAG SET)
Set_Flag		lda		Select_Player,x
				tax
				dec		<_demokart_trans,x
				rts
;- - - - - - - - - - - - - - - - - - - - - - - 
;(REVOLE SET)
Set_pose		mem16
				idx16
				rep		#00110000b
				lda		#0280h
				clc
				adc		<_poseQ,x
				sta		<_poseQ,x
				rts
;- - - - - - - - - - - - - - - - - - - - - - - - -
Set_Revolve		equ		$
				lda     <Kart_Select,x			;kart number check.
				tax
;
;				JSR     Set_Flag				;flag set.
;
				lda     Select_Player,x
				tax
				phx
				ldx		<X_set
				lda		<move_flag,x
				and		#0003h
				beq		stop_Revolve			;Revolve stop?:yes-->stop_Revolve
;
				cmp		#0002
				beq		stop_Revolve.F			;Front stop?:yes-->stop_Revolve.F
;
				plx
				JSR     Set_pose				;Revolve set.
				jmp		owari_Revolve
 ;
stop_Revolve	plx
				lda		#4200h
				sta     <_poseQ,x
				ldx		<X_set
				stz		<move_flag,x
				jmp		owari_Revolve
;
stop_Revolve.F	plx
				jsr		Set_turn
				beq		owari_Revolve					;front set finish?:yes-->Revolve_2p
				sta     <_poseQ,x
owari_Revolve	rts
;----------------------------------------------------------
;(SWING MOVE)
Set_Swing		ldx		<swing_counter
				lda		Swing_select,x
				tax
				lda		Select_Player,x
				tax		
				lda		<_situationYH,x
				pha
				and		#0001
				bne		Down_set		
				pla
				inc		a
				sta	    <_situationYH,x
				jmp		Counter_up
Down_set		pla
				dec		a
				sta     <_situationYH,x
;
Counter_up		lda		<swing_counter
				clc
				adc		#0002
				cmp		#0010h
				beq		Reset_swing
				sta		<swing_counter
				jmp		No_swing_kart
Reset_swing		stz		<swing_counter
;
No_swing_kart	lda		move_flag
				beq		Swing_2player
				ldx		Kart_Select
				JSR		NO_Swing_Set
;
Swing_2player	lda		timeattack_flag
				bne		Com_swing
;
				lda		<game_mode
				bne		owari_swing
;
Com_swing		lda		move_flag+2
				beq		owari_swing
				ldx     Kart_Select+2
				JSR		NO_Swing_Set
owari_swing		rts
;
NO_Swing_Set	lda		Select_Player,x
				tax	
				lda		<_situationYH,x	
				and		#00f0h
				sta		<_situationYH,x
				rts
;----------------------------------------------------------------
Select_Player	DW	player_r0,player_r3,player_r2,player_r5
				DW	player_r1,player_r7,player_r4,player_r6
;
Swing_select	DW	0000h,000ah,0002h,000ch,0004h,000eh
				DW	0006h,0008h
;***************************************************************
;					次の画面セット
;***************************************************************
NEXT_CHECK		equ		$
;//////////////// 最終チェック ///////////////
				lda		<move_flag
				cmp		#0002h
				bne		owari_BTR			
;
				lda		<move_flag+2
				cmp		#0002h
				bne		owari_BTR			
;//////////////// 次へのタイマーカウント ///////////
				inc		<next_counter
				lda		<next_counter			
				cmp		#0040h					
				bne		owari_BTR				
;//////////////// 二人用カートセット /////////
				lda		<game_mode
				bne		Set_Next1p						;プレイヤーチェック
;
Set_Vs_com_set	ldx		<Kart_Select					;1プレイヤーセット
				lda		Kart_number,x
				sta		driver_number+1000h
;
				ldx		<Kart_Select+2					;２プレイヤーセット
				lda		Kart_number,x
				sta		driver_number+1100h
				sta		timeattack_rival
				jmp		Set_Next
;//////////////// 一人用カートセット /////////
Set_Next1p		lda		timeattack_flag
				bne		Set_Vs_com_set
;
				lda		<game_mode
				cmp		#0004
				beq		Set_2con						;上下画面ッチェック
;
				ldx		<Kart_Select					;１コントロラーでのセット
				lda		Kart_number,x
				sta		driver_number+1000h
				jmp     Set_Next
;
Set_2con		ldx		<Kart_Select					;２コントロラーでのセット
				lda		Kart_number,x
				sta		driver_number+1100h
;///////////////// インデックスセット /////////  
Set_Next		lda		<game_status
				beq		GP_jump
;
				cmp		#0002
				beq		VS_jump
;
				cmp		#0004
				beq		TIME_jump

				lda		#0016h					;battle set
				jmp		Set_selcta
;
GP_jump			lda		#0008						;GP set.
				jmp		Set_selcta
;
VS_jump			lda		#0016h					;VS set.
				jmp		Set_selcta
;
TIME_jump		lda		#0016h					;TIME set.
Set_selcta		sta     <game_selecta
;////////////////// フェードセット ////////////
NO_fadeout		lda     #8f00h
				sta     <fade_control
owari_BTR		rts
;=============================================================
;************************************************************
;					ＮＭＩサブルーチン
;************************************************************
;==============================================================
;
;<<<<<<< カーソル移動時の”消アドレス >>>>>>>>>>>>
Address_Set		equ		$
				lda		<Cursor_Address,x				;Vram adrr low.
	    		sta    	Screen_address
				rts
;<<<<<<<<<<<< カーソル移動時のアドレス >>>>>>>>>>>>
Address_next_Set equ	$
				lda		<Next_Address,x				;Vram adrr low.
	    		sta    	Screen_address
				rts
;<<<<<<<<< カーソル移動時のデーターセット >>>>>>>>>
Cursor_Set		equ		$
				lda		<Cursor_set,x
				sta		Screen_write
				inc		a
				sta     Screen_write
				rts
;<<<<< カーソル移動時の”消し”データーセット >>>>>
Erase_Set		equ		$
				lda		<Cursor_Erase
				sta		Screen_write
				inc		a
				sta     Screen_write
				rts
;<<<<<<<<<<<<<< 最終チェックのアドレス >>>>>>>>>>>>
OK_address_set	lda		<OK_Address,x
				sta     Screen_address
				rts
;<<<<<<<<<<< 最終チェックのデーターセット>>>>>>>>>>
OK_SET			equ		$
				lda		OK_check,x
				tax
				lda		OK_data_set,x
				tax
				ldy		#0000
loop_OK_set		lda		!0,x
				sta		Screen_write
				inx
				inx
				iny
				iny
				cpy		#0008
				bne		loop_OK_set
				rts
;<<<<<<<<<<<<<< ＳＣ＿４のアドレス > >>>>>>>>>>>>>>
Back_Address_set
				lda		<Back_Address,x
				sta		<Check_Address
				sta		Screen_address
				rts
;<<<<<<<<<<<<<< ＳＣ＿４のデーターセット>>>>>>>>>>>
Back_stop_set	equ		$
				lda		Back_check,x
				bne		Back_nuki_set
;
				ldy		#0
loop_stop_back1	ldx		#0
loop_stop_back	lda		#281ch	
				sta     Screen_write
				inx
				cpx		#0006h
				bne		loop_stop_back
				lda		<Check_Address
				clc
				adc		#0020h
				sta		<Check_Address
				sta		Screen_address
				iny
				cpy		#0004
				bne		loop_stop_back1
				ldy		#0
loop_stop_back3	ldx		#0
loop_stop_back2	lda		#2410h	
				sta     Screen_write
				inx
				cpx		#0006h
				bne		loop_stop_back2
				lda		<Check_Address
				clc
				adc		#0020h
				sta		<Check_Address
				sta		Screen_address
				iny
				cpy		#0003
				bne		loop_stop_back3		
				rts
;
Back_nuki_set	equ		$
				ldy		#0
loop_nuki_back1	ldx		#0
loop_nuki_back	lda		#3014h	
				sta     Screen_write
				inx
				cpx		#0006h
				bne		loop_nuki_back
				lda		<Check_Address
				clc
				adc		#0020h
				sta		<Check_Address
				sta		Screen_address
				iny
				cpy		#0007
				bne		loop_nuki_back1		
				rts
;
;				tax
;				lda		SC_4_data,x
;				tax
;Return_back		ldy		#0000
;loop_back		lda		!0,x
;				cmp		#0ffffh
;				beq		owari_back
;				sta		Screen_write
;				inx
;				inx
;				iny
;				iny
;				cpy		#000ch		
;				bne		loop_back
;				lda		<Check_Address
;				clc
;				adc		#0020h
;				sta		<Check_Address
;				sta		Screen_address
;				jmp		Return_back
;owari_back		rts
;<<<<<<<<<<<< フラッシングデーターセット>>>>>>>>>>>
Fashing_set		equ		$
				lda		<Flash_set,x
				sta		Screen_write
				inc		a
				sta     Screen_write
				rts
;=========================================================
bank84			sect		rel
;=========================================================
;*******************************************************
;				ワークイニシャルセット
;*******************************************************
Work_set		equ		$
;
				mem16
				idx16
				rep		#00110000b
;
				lda		#0802h					;cursor erase chra set.
				sta		<Cursor_Erase
;
				lda		#2713h
				sta		<OK_Address
;
				lda		#2718h
				sta		<OK_Address+2
;
				lda		#0008
				sta		OK_check
				sta     OK_check+2
;
				lda		#0002
				sta		Back_check
				sta		Back_check+2
;
				stz		timeattack_flag
				lda		kart_status+1000h
				and		#0bfffh
				sta		kart_status+1000h
				lda		kart_status+1100h
				and		#0bfffh
				sta     kart_status+1100h
				rtl
;*******************************************************
;				PPU SET
;*******************************************************
K_PPU_Set		equ		$
				mem8
				idx8
				sep		#00110000b
;
				lda		#00000000b
				sta		Screen_size						;BG mode1 set.
;
				lda		#00011111b
				sta		Through_screen					;TM
;
				lda		#00100100b
				sta		Screen_bank
;
				lda		#00101000b
				sta		Screen_bank+1
;
				lda		#00101100b
				sta		Screen_bank+2
;
				lda		#00111000b
				sta     Screen_bank+3
;
				lda		#00110011b
				sta		Screen_segment
				sta		Screen_segment+1
;
				lda		#00000010b						;4000h
				sta		Sprite_size
;
				lda     #10000000b
				sta     Screen_step
				rtl
;*************************************************************
;				カーソルのフラッシング　セット
;*************************************************************
CURSOR_FLASH	equ		$
				mem16
				idx16
;<<<<<<<<<<<<<<<<< 回転中チェック >>>>>>>>>>>>>>>>>>>>>
				lda		<move_flag					
				and		#0003h
				bne		flash_stop							;回転中のチェック		
;<<<<<<<<<<<<<<< １Ｐフラッシュセット >>>>>>>>>>>>>>>>>
				lda		<Flash_counter
				cmp		#0003			
				beq		erase_1p							;タイマーチェック
;
flash_stop		lda		#1815h
				sta		<Flash_set							;点灯セット
				jmp		flash_address2p
;
erase_1p		lda		#0802h								;消灯セット
				sta		<Flash_set
;<<<<<<<<<<<<<<< 2Ｐフラッシュセット >>>>>>>>>>>>>>>>>
flash_address2p	lda		timeattack_flag
				bne		Com_flash
;
				lda		game_mode
				bne		owari_7M							;プレイヤー数チェック
;
Com_flash		lda		<move_flag+2				
				and		#03h
				bne		owari_stop							;回転中のチェック
;
				lda		<Flash_counter
				cmp		#0003
				beq		erase_2p							;タイマーチェック
;
owari_stop		lda     timeattack_flag
				beq		Character_2con
				lda		#1c4ch
				sta     <Flash_set+2
				jmp		owari_7M
Character_2con	lda		#1c17h
				sta		<Flash_set+2						;点灯セット
				jmp		owari_7M
;
erase_2p		lda		#0802h			
				sta		<Flash_set+2						;消灯セット
;<<<<<<<<<<<<<<< タイマーカウント　セット >>>>>>>>>>>>>
owari_7M		inc		<Flash_counter						;カウンターセット
				lda		<Flash_counter
				cmp		#0005
				bne		owari_M1					
				stz		<Flash_counter
owari_M1		rtl
;*********************************************************
;				チビセット
;*********************************************************
Small_kart_set	equ		$
;<<<<<<<<<<<<<<<<< チビセットチェック >>>>>>>>>>>>>>>>
				lda		<game_status
				cmp		#0004
				beq		owari_chibi1
				cmp		#0006
				beq		owari_chibi1
;<<<<<<<<<<<<<<<<<< ボタンチェック >>>>>>>>>>>>>>>>>>>> 
				lda     button_status			;１コントローラー
				and		#4000h
				cmp		#4000h
				bne		Check_2status
				lda		<button_TG
				and     #0080h
				beq		owari_chibi
				stz		Select_chibi
				jmp		Check_palyer
;
Check_2status	lda     button_status+2			;２コントローラー
				and     #4000h
				cmp		#4000h
				bne		owari_chibi
				lda		<button_TG+2
				and		#0080h
				beq		owari_chibi
				lda		#0002
				sta     Select_chibi
;<<<<<<<<<<<<<<<< インデックスセット >>>>>>>>>>>>>>>>>>>
Check_palyer	JSL		>Choose_set_1
				ldx     <Contorol_Set
;----------------------------------------------
				lda		<move_flag,x			;回転中チェック
				bne		owari_chibi
				lda		Pikupiku_flag,x			;ピクピク中チェック
				bne		owari_chibi
;----------------------------------------------
				lda		Select_chibi
				bne		Set_2player_size
				ldx		#1000h
				jmp		check_size
Set_2player_size
				ldx		#1100h
;
;<<<<<<<<<<<<<<<<<< チビセット >>>>>>>>>>>>>>>>>>>>>>>>>
check_size		lda		kart_status,x
				and		#4000h
				bne		nomar_kart
;
				lda     kart_status,x
				ora		#4000h
				sta		kart_status,x
;
				ldx     <Contorol_Set
				lda		#0001
				sta		Chibi_flag,x
				sta		Pikupiku_flag,x
;
				lda		#005dh
				JSL		>Trigger_sound_1
owari_chibi1	jmp		owari_chibi
;<<<<<<<<<<<<<<<<<< ノーマルセット >>>>>>>>>>>>>>>>>>>>>
nomar_kart		lda		kart_status,x
				and		#0bfffh
				sta		kart_status,x
;
				ldx     <Contorol_Set
				stz		Chibi_flag,x
				lda		#0001
				sta     Pikupiku_flag,x
;
				lda		#005fh
				JSL		>Trigger_sound_1
owari_chibi		rtl
;**********************************************************
;				カートをピクピクさせる
;**********************************************************
Pikupiku_set	equ		$
				lda		<game_mode
				cmp		#0004
				beq		Set_2con_pikupiku
				ldy		#1000h
				jmp		Set_1plyer_pikupiku
Set_2con_pikupiku
				ldy		#1100h	
Set_1plyer_pikupiku
				ldx		#0
				JSR		Pikupiku_set_sub
;
				ldx		#0002
				ldy		#1100h
				JSR		Pikupiku_set_sub
				rtl
;
Pikupiku_set_sub
				lda		Pikupiku_flag,x
				beq		owari_pikupiku
;
				lda		size_counter,x
				cmp		#000dh
				bne		Set_pikupiku
				stz		size_counter,x
				stz		Pikupiku_flag,x
				stz		size_timer,x
;
				JSR     Set_kart_size
;
				lda		kart_status,y
				and     #4000h
				bne		Set_chibi
;
				stz		<_demokart_size,x
				jmp		owari_pikupiku
Set_chibi		lda		#0002
				sta		<_demokart_size,x
				jmp		owari_pikupiku
;
Set_pikupiku	inc		size_timer,x
				lda		size_timer,x
				cmp		#0005h
				bne		owari_pikupiku
				stz		size_timer,x
				inc		size_counter,x
;
				JSR     Set_kart_size
;
				lda		<_demokart_size,x
				beq		Small_size
				stz		<_demokart_size,x
				jmp		owari_pikupiku
Small_size		lda		#0002
				sta		<_demokart_size,x
owari_pikupiku	rts
;***************************************************
;				カーソル移動時のチビセット
;***************************************************
;<<<<<<<<<<<<<<　元の大きさに戻す >>>>>>>>>>>>>>>>>
Old_size_set	equ		$
				ldx		<Contorol_Set
				lda		Chibi_flag,x
				beq		end_Old_size
;
				ldx     <Contorol_Set
				JSR		Set_kart_size
				stz		<_demokart_size,x
end_Old_size	rtl
;<<<<<<<<<<<<<<<  チビにする >>>>>>>>>>>>>>>>>>>>>>>
New_size_set	equ		$
				ldx		<Contorol_Set
				lda		Chibi_flag,x
				beq		end_New_size
;
				ldx     <Contorol_Set
				JSR		Set_kart_size
				lda		#0002
				sta		<_demokart_size,x
end_New_size	rtl
;
Set_kart_size
				lda     <Kart_Select,x			;kart number check.
				tax
				lda     Select_Player,x
				tax
				rts

				END

