;*********************************************************************
;
;	mario kart course select program
;
;*********************************************************************
		INCLUDE	../../SFX/RP5C77
		INCLUDE	../../SFX/RP5A22
		INCLUDE	../../DSP/D77C25
		INCLUDE	../../../kimura/join/work.def
		INCLUDE	../../../kimura/join/buffer.def
		INCLUDE	../DEF/object.def
;----------------------------------------------------------------------	
	ext	BGM_fade_out,sound_select,sound_set,sound_cancel
	GLB	Calc_cursor
;- - - - - - - - - - - - - - - - - - - - - - - -
	GLB	C_SL_main,C_SL_init,C_SL_nmi
	GLB	Message_sprite
;----------------------------------------------------------------------	
 	EXT	Sprite_set
	EXT	Set_back_01,Set_back_02
;----------------------------------------------------------------------	
	EXT	Call_bank0
	EXT	Clear_sprite,Clear_buffer,Init_work
	EXT	WINDOW_INIT,WINDOW_CONTROL
	EXT	Init_meter,DMA_meter
	EXT	Execute_VRAM
	EXT	param_screenA,param_screenB
	EXT	Repeat_trigger
	ext	Check_backupRAM
;----------------------------------------------------------------------	

word_work	EQU	1800H
;- - - - - - - - - - - - - - - -
word_battle	equ	1800h	; common
word_world	EQU	1800H	; common
word_course00	EQU	1880H
word_course10	EQU	1900H
word_course20	EQU	1980H
word_course30	EQU	1A00H
;- - - - - - - - - - - - - - - -
;;;		equ	1b00h		; laptime use
;- - - - - - - - - - - - - - - -
_next		EQU	0
_disp		EQU	2
_attr		EQU	4
_addr		EQU	6
;- - - - - - - - - - - - - - - -
cursor_battle	equ	1d00h	; common
cursor_world	EQU	1D00H	; common
cursor_course1	EQU	1D02H
cursor_course2	EQU	1D04H
cursor_course3	EQU	1D06H
cursor_course4	EQU	1D08H
cursor_yesno	EQU	1D0AH
trans_map	EQU	1D0CH
cursor_flag	EQU	1D0EH
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - 
cursor_number	EQU	1D10H
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - 
clear_course1	EQU	1D12H
clear_course2	EQU	1D14H
clear_course3	EQU	1D16H
clear_course4	EQU	1D18H
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - 
csel_process	EQU	1D20H
frame_work	EQU	1D22H
camera_test	EQU	1D24H
csel_mode	EQU	1D26H
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - 
		EXTEND
objdata	SECT	REL
		mem16
		idx16




;*********************************************************************
;	コースセレクトの初期設定
;*********************************************************************
SEQ_select	dw	0ch,00h
;- - - - - - - - - - - - -
C_SL_init	PHB
		PHK
		PLB
;- - - 
		jsl	>Check_backupRAM

		jsr	Check_battle
		lda	!SEQ_select,x
		sta	<SEQ_register
;- - - 
		ldx	#Clear_buffer	;バッファクリア
		jsl	>Call_bank0
		jsr	Init_work
	;;	stz	!best_flag	;ベストラップクリア
	;;	stz	!best_Voffset

		lda	#5
		sta	!best_number
;- - - 
;- - - 
		jsl	>WINDOW_INIT	;ウィンドウ

		jsr	Init_meter	;メータセット

		ldx	#Clear_sprite	;ＯＡＭクリア
		jsl	>Call_bank0
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
; ＢＧ３をクリア
		LDA	#7FH		
		STA	!meter_bank+0
		STA	!meter_bank+2
		LDA	#clear_screen_A
		STA	!meter_address+0
		LDA	#clear_screen_B
		STA	!meter_address+2
;;
		JSL	>DMA_meter
;;
		LDA	#06H
		STA	!window_index+0
		LDA	#06H
		STA	!window_index+2
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
		LDX	#data_A
		JSL	>Execute_VRAM
		LDX	#data_B
		JSL	>Execute_VRAM
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
		STZ	!cursor_flag
		STZ	!cursor_yesno
		STZ	!cursor_world
		STZ	!cursor_course1
		STZ	!cursor_course2
		STZ	!cursor_course3
		STZ	!cursor_course4
		STZ	!trans_map
		STZ	!csel_process
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - 

;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
;マップナンバーのセット
		jsr	Check_battle
		bne	skip$

		lda	!map_number
		cmp	#14h
		bcs	skip0$
		lda	#15h		;マップの初期
		sta	!map_number
skip0$		sec
		sbc	#14h
		tax
		lda	!name_battle,x
		and	#00ffh
		sta	!cursor_battle
		bra	exit$
;- - - - - - - - - - -
skip$		
		jsr	Set_map_number

		lda	!world_number
		sta	cursor_world
		asl	a
		tax
		lda	!map_pointer
		sta	!cursor_course1,x
		inc	!csel_process
exit$
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
		JSL	>Init_word
		PLB
		RTL
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
data_A		DB	080H
		DW	5000H
		DW	1801H
		DL	MOJI_buffer
		DW	2000H
data_B		DB	080H
		DW	6000H
		DW	1801H
		DL	MOJI_buffer
		DW	2000H
;*********************************************************************
;	コースセレクトのメイン
;*********************************************************************
		EXT	Set_map_number,Set_ROM_to_buffer
		EXT	Set_changeBG
		EXT	Color_transport
		EXT	Call_back_scroll
		EXT	Set_BGmove,DMA_BGmove
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
C_SL_main	PHB
		PHK
		PLB
;- - - - - - - - - - - - - - - - - - - - - - - 
		JSL	>Repeat_trigger		; リピートトリガ
;- - - - - - - - - - - - - - - - - - - - - - - 
		lda	!csel_process
		asl	a
		ldx	!csel_mode
		jsr	(!csel_game,x)
		jsr	Move_back		;背景スクロール
		plb
		rtl
;- - - - - - - - - - - - - - - - - - - - - - - 
race_entry	tax
		jmp	(!csel_race,X)
battle_entry	tax
		jmp	(!csel_battle,X)
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
		PLB
		RTL
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
csel_game	dw	race_entry,battle_entry
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
csel_race	DW	select_cup
		DW	select_course
		DW	map_read
		DW	set_buffer
		DW	vram_write_init
		DW	vram_write
		DW	map_yesno
		DW	no_use
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
csel_battle	dw	select_battle
		dw	battlemap_read
		dw	set_buffer
		dw	vram_write_init
		dw	vram_write
		dw	battle_yesno
		dw	no_use
;-------------------------------------------------------------------
; 		背景のスクロール
;-------------------------------------------------------------------
Move_back	LDX	#0
		LDA	!camera_test
		CLC
		ADC	#10H
		STA	!camera_test
		JSL	>Call_back_scroll
		JSR	Set_BGmove
		LDX	#player_r0
		INC	<_situationXH,X
		RTS
;-------------------------------------------------------------------
no_use		RTS



;*********************************************************************
;		バトルモード
;*********************************************************************
;-------------------------------------------------------------------
; 		マップのセレクト
;-------------------------------------------------------------------
select_battle
		jsl	>WINDOW_CONTROL
;- - - - - - - - - - - - - - - - - - - - - - - - 
		jsr	Reset_cursor
		jsr	Init_OBJ_B
		jsr	Set_battlename
		jsr	Init_OBJ_A
		jsr	Select_battlemap
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
		lda	!trigger_common		; マップ決定チエック
		and	#ST_button+B_button
		beq	skip$
;- - - - - - - - - - - - - - - - - - - - - - - - -
		inc	!csel_process
		lda	!cursor_battle		; アトリビュート
		ASL	A
		ASL	A
		ASL	A
		ASL	A				; の点滅
		adc	#word_battle
		tax
		lda	#02H
		sta	<_attr,X
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
skip$		jsr	Disp_title
		jmp	Disp_battlemap
;-------------------------------------------------------------------
;		バトルマップの決定
;-------------------------------------------------------------------
map_battle	db	15h,14h,16h,17h
name_battle	db	01h,00h,02h,03h
;- - - - - - - - - - - - - - - - - - - - - - - - - - -
battlemap_read	
		ldx	!csel_process
		ldy	!cursor_battle
		lda	!map_battle,y
		and	#00ffh
		cmp	!map_number
		sta	!map_number
		bne	skip$
		inx
		inx
		inx
		inx
		stx	!csel_process
		rts
skip$
		inx
		stx	!csel_process
;- - - - - - - - - - - - - - - -  - - - - - - - - 
		LDA	#8
		STA	!window_index+0
		STA	!window_index+2
		JSL	>WINDOW_CONTROL
		JSR	Init_OBJ_B
		JSR	Set_battlename
		RTS
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
;		よろしですか　はい／いいえ
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
battle_yesno	JSR	Init_OBJ_B
		JSR	Cursor_yesno
		JSR	Disp_yesno
exit$		RTS
;*********************************************************************
;		レースモード
;*********************************************************************
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
;		よろしですか　はい／いいえ
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

		ext	REC_test

map_yesno	

		JSR	Init_OBJ_B
		JSR	Cursor_yesno
		JSR	Disp_yesno
		JSR	Disp_grid

		lda	<game_status
		cmp	#4		; time attack ?
		bne	exit$

		jsr	Init_OBJ_A
		jsr	REC_test
		jsr	Set_name2

exit$		RTS
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
;		マップのキャラクタ転送イニシャル
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
vram_write_init	LDA	#8000H
		STA	!trans_map
		JSL	>WINDOW_CONTROL
		BRA	next_process
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
;		マップのキャラクタ転送メイン
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
vram_write	JSL	>WINDOW_CONTROL
		LDA	!trans_map
		BNE	same_process
		LDA	#0AH
		STA	!window_index+0
		STA	!window_index+2
		BRA	next_process
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
;		マップナンバーのセット
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
map_read	
;- - - - - - - - - - - - - - - - - - - - - -
		LDY	#2		;新しいマップｎｏをセット
		LDA	!cursor_world
		CMP	!world_number
		BNE	skip$
		DEY
skip$		STA	!world_number
		ASL	A
		TAX
		LDA	!cursor_course1,X
		CMP	!map_pointer
		BNE	skip1$
		DEY
skip1$		STA	!map_pointer
		TYA
		BNE	chenge$
;- - - - - - - - - - - - - - - - - - - - - -
		LDA	#6
		STA	!csel_process
		RTS
;- - - - - - - - - - - - - - - - - - - - - -
chenge$	
		LDA	#8
		STA	!window_index+0
		STA	!window_index+2
		JSL	>WINDOW_CONTROL
		JSR	Init_OBJ_B
		JSR	Set_name
;- - - - - - - - - - - - - - - - - - - - - -
		jsr	Set_map_number

next_process	INC	!csel_process
same_process	RTS
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
;		マップいれかえバッファセット
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
set_buffer

		jsr	Set_ROM_to_buffer

		JSL	>Set_changeBG
		inc	!csel_process
		RTS
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
;		カーソル コースセレクト
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
select_course	
		JSL	>WINDOW_CONTROL
		JSR	Init_OBJ_B
		JSR	Set_name
		JSR	Init_OBJ_A
		JSR	Set_course
		RTS
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
;		カーソル カップセレクト
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
select_cup	
		JSL	>WINDOW_CONTROL
		JSR	Init_OBJ_B
		JSR	Set_name
		JSR	Init_OBJ_A
		JSR	Set_cup
		RTS
;*********************************************************************
;	ＯＡＭ　初期設定
;*********************************************************************
Init_OBJ_A	JSR	param_screenA
		LDX	#200H
		BRA	init_obj_common
Init_OBJ_B	JSR	param_screenB
		LDX	#200H+220H
init_obj_common	STX	<sprite_count
		JMP	clear_oam
;####################################################################
;	各種ルーチン
;####################################################################
;
;*********************************************************************
;	カーソル／文字 フラッシング用 カラー書き換え
;*********************************************************************
		GLB	Frash_corsor
;- - - - - - - - - - - 
Frash_corsor	
		LDA	!frame_work		; !! 
		CLC
		ADC	#0100H			; c-sel
		AND	#0F00H			; のみのwork
		STA	!frame_work
;- - - - - - - - - - - 
		ADC	#70FFH
		ldx	#0a0h
		jsr	set_palet		; palet 5  02
;
		ldx	#0c0h			
		lda	#7ff0h
		jsr	set_palet		; palet 6  04 
;
		ldx	#0e0h
		lda	#027fh
		jsr	set_palet		; palet 7  06
;
		RTL	


set_palet	
		sta	>color_buffer+100h+2,x
		sta	>color_buffer+100h+4,x
		lda	#0
		sta	>color_buffer+100h+6,x
		rts
;*********************************************************************
;	コースセレクトのＮＭＩ処理
;*********************************************************************
C_SL_nmi	PHB
		PHK
		PLB
	;;	LDA	<button_trigger-1
	;;	BMI	set$
	;;	LDA	!trans_map
	;;	BEQ	skip$
;- - - - - - -
		JSL	>Frash_corsor
		LDX	#Color_transport
		JSL	>Call_bank0
		JSL	>DMA_map
		JSL	>DMA_BGmove
		PLB
		RTL
;- - - - - - - - - - - - - - - - - - - - - - 
;*********************************************************************
;	コースセレクトのＮＭＩ処理
;*********************************************************************
DMA_map		LDA	!trans_map
		BEQ	exit$
		AND	#7FFFH
		TAX
		CPX	#10H
		BCS	special$
		SEP	#00100000B
		MEM8
		LSR	A
		LSR	A
		LSR	A
		STZ	!DMA_0+0	; 
		CLC
		ADC	#18H		; 18h or 19h
		STA	!DMA_0+1
;
		TXA
		ASL	A
		ASL	A
		ASL	A
		ASL	A
		AND	#80H
		STA	!Screen_step
;
		STZ	!DMA_0+2
		TXA
		ASL	A
		ASL	A
		ASL	A
		STA	!DMA_0+3
		AND	#3FH			; start address
		STA	!Screen_address+1
		STZ	!Screen_address+0
;
		LDA	#7FH			; bank
		STA	!DMA_0+4
		LDY	#800H			; counter
		STY	!DMA_0+5
		LDA	#01			; dma start
		STA	!DMA_burst
;
		TXA				; next parameter
		INC	A
skip$		STA	!trans_map+0
		REP	#00100000B
		MEM16
exit$		RTL
;- - - - - - - - - - - - - - - - - - -
special$	PHB
		PHK
		PLB
		REP	#00100000B
		MEM16
		CPX	#10H
		BNE	sss$
		LDX	#back_char	;背景キャラクターのセット
		JSL	>Execute_VRAM
		BRA	incdata$
;- - - - - - - - - - - - - - - - - - - 
sss$		CPX	#11H
		BNE	sss2$
		LDX	#back_screen	;背景スクリーンのセット 1
		JSL	>Execute_VRAM
		BRA	incdata$
;- - - - - - - - - - - - - - - - - - - 
sss2$
		jsr	Set_back_02	;背景スクリーンのセット 2

;- - - - - - - - - - - - - - - - - - - 
incdata$	LDA	!trans_map	; 転送カウンタのセット
		INC	A
		CMP	#8013H
		BNE	skip2$
		LDA	#0
skip2$		STA	!trans_map+0
		PLB
		RTL
;- - - - - - - - - - - - - - - - - 
back_char	db	80H
		dw	7000h
		dw	1801h
		dl	7FC800h
		dw	800h
;- - - - - - - - - - - - - - - - - 
back_screen	db	80H
		dw	7800h
		dw	1801h
		dl	7FC000h
		dw	600h
;*********************************************************************
;	現在のコースネーム表示
;*********************************************************************


;*********************************************************************
;	コースセレクトの文字セット
;*********************************************************************
Set_course
		JSR	Select_course
		LDA	!trigger_common
		AND	#LF_button+X_button
		BEQ	common_set
		AND	#X_button
		BEQ	skip$
		JSR	sound_cancel
		BRA	skip0$
skip$		JSR    	sound_select
skip0$		DEC	!csel_process
		BRA	common_set
;---------------------------------------------------------------------
Set_cup		
;- - - - - - - - - - - - - - - - - - - - - - - セレクトモード
		JSR	Select_world
		LDA	!trigger_common
		AND	#RT_button+B_button
		BEQ	common_set
		JSR	sound_set
		INC	!csel_process
;- - - - - - - - - - - - - - - - - - - - - - - コースネーム表示
common_set	JSR	Disp_title
		JSR	Disp_world
		JMP	Disp_course
;*********************************************************************
;	YES/NO セレクト（カーソル）
;*********************************************************************
Cursor_yesno	LDY	#trigger_common+1
		LDA	#0101H
		LDX	#cursor_yesno
		JSR	Calc_cursor
;- - - - - - - - - - - - - - - - - - - - - - - - - - 
		LDA	!trigger_common		; cansel
		BIT	#X_button
		BNE	reset2$
		BIT	#B_button+ST_button
		BEQ	exit$
		LDA	!cursor_yesno
		BNE	reset1$
;- - - - - - - - - - - - - - - - - - - - - - - - - - 
next$						; ゲームスタート
		jsr	Check_battle
		lda	!init_select,x
		sta	!race_init
		lda	!jump_select,x
		sta	<game_selecta
;
		LDA	#8F00H
		STA	<fade_control
		LDA	#0100H
		STA	!fade_speed
		JSL	>BGM_fade_out
		INC	!csel_process
		BRA	sound$
;- - - - - - - - - - - - - - - - - - - - - - - - - - 
reset2$		stz	!csel_process		;選択しなおし
		jmp	sound_cancel
;- - - - - - - - - - - - - - - - - - - - - - - - - - 
reset1$		stz	!csel_process		;選択しなおし
sound$		jsr	sound_set
exit$		RTS
;- - - - - - - - - - - - - - - - - - - - - - - - - - 
init_select	dw	04h,0ah
jump_select	dw	0eh,02h
;*********************************************************************
;	コースネームの表示
;*********************************************************************

		

;*********************************************************************
;	バトルマップネームの表示
;*********************************************************************
Set_battlename
;- - - - - - - - - - - - - - - - - - - ; mapnumber offset
		lda	!map_number
		sec
		sbc	#14h
		tax
		lda	!name_battle,x
		and	#00ffh
		ASL	A
		ASL	A
		ASL	A
		ASL	A
		ADC	#word_battle
		TAX
		LDA	<_disp,X	; H position read
		AND	#000FFH		
		ORA	#00800H		; V position set
		LDY	<_addr,X
		LDX	#4		; attr	
		JMP	Message_sprite
;*********************************************************************
;	コースネームの表示
;*********************************************************************
Set_name2
		LDA	!map_pointer
		ASL	A
		ASL	A
		ASL	A
		ASL	A
		STA	<0		
		LDA	!world_number
		XBA
		LSR	A			;CLC
		ADC	#word_course00
		ADC	<0
		TAX

	;;	LDA	<_disp,X	; H position read
	;;	AND	#00000H		
	;;	ORA	#00800H		; V position set

		lda	#01058h
		LDY	<_addr,X
		LDX	#0		; attr	
		JMP	Message_sprite


Set_name
		LDA	!world_number
		ASL	A
		ASL	A
		ASL	A
		ASL	A
		ADC	#word_world
		TAX

		LDA	<_disp,X	; H position read
		AND	#000FFH		
		ORA	#00800H		; V position set
		LDY	<_addr,X
		LDX	#4		; attr	
		JSR	Message_sprite
;
		LDA	!map_pointer
		ASL	A
		ASL	A
		ASL	A
		ASL	A
		STA	<0		
		LDA	!world_number
		XBA
		LSR	A			;CLC
		ADC	#word_course00
		ADC	<0
		TAX
		LDA	<_disp,X	; H position read
		AND	#000FFH		
		ORA	#00800H		; V position set
		LDY	<_addr,X
		LDX	#4		; attr	
		JMP	Message_sprite
;*********************************************************************
;	はい　いいえ　の表示
;*********************************************************************
Disp_yesno	
		LDA	#0840H			; message
		LDY	#yesno_0
		LDX	#0
		JSR	Message_sprite
		LDA	#0890H			; message
		LDY	#yesno_1
		LDX	#0
		JSR	Message_sprite
;
		LDA	#0886H			; cursor
		LDX	!cursor_yesno
		BEQ	skip$
		LDA	#0886H+0020H
skip$		LDY	#select_sign
		JMP	Sprite_set
;*********************************************************************
;	スターティンググリッド の表示
;*********************************************************************
Disp_grid	LDA	!cursor_world	; 
		ASL	A		;CLC
		TAX			; world 0,1,2,3
		LSR	A
		ORA	#0500h		; 5*world number
		STA	!4202h
		LDA	!cursor_course1,X  ; course 0,1,2,3,4
		CLC
		ADC	!Product
		ASL	A
		TAX
;
		STA	!cursor_number	= map_number
;
		LDY	#start_sign_1
		LDA	!start_sign_data,X
		XBA
		CMP	#8000H
		BCC	skip1$
		LDY	#start_sign_2
skip1$		XBA
		JMP	Sprite_set
;*********************************************************************
;	タイトルの表示
;*********************************************************************
Disp_title	LDA	#1058H			; title
		LDY	#name_title2
		LDX	#0
		JMP	Message_sprite
;*********************************************************************
;	ワールドの表示
;	バトルマップの表示
;*********************************************************************
Disp_battlemap
Disp_world
		LDX	#word_world
next1$		LDA	<_next,X	;	status check
		BEQ	exit1$		;
		LDY	<_addr,X	;	data address
		PHX			;>>
		LDA	<_attr,X	;	attribute
		PHA			;  >>
		LDA	<_disp,X	;	position X,Y
		PLX			;  <<
		JSR	Message_sprite	;
skip1$		PLA			;<<
		CLC
		ADC	#10H
		TAX
		BRA	next1$		
exit1$		RTS	
;*********************************************************************
;	コースの表示
;*********************************************************************
Disp_course
		LDA	!cursor_world
		XBA
		LSR	A		;CLC
		ADC	#word_course00
		TAX
;- - - - - - - - - - - - - - - - - - - - - - - 
next2$		LDA	<_next,X
		BEQ	exit2$
		LDY	<_addr,X	;	data address
		PHX			;>>
		LDA	<_attr,X	;	attribute
		PHA			;  >>
		LDA	<_disp,X	;	position X,Y
		PLX			;  <<
		JSR	Message_sprite	;
skip2$		PLA			;<<
		CLC
		ADC	#10H
		TAX
		BRA	next2$		
exit2$		RTS
;*********************************************************************
;	バトルコースセレクト
;*********************************************************************
ofs		equ	48h
pos_battle	db	20h+0eh*0
		db	20h+0eh*1
		db	20h+0eh*2
		db	20h+0eh*3
;- - - - - - - - - - - - - - - - - - - - - - - - - -
Select_battlemap
		LDY	#trigger_common+1
		LDA	#0300H
		LDX	#cursor_battle
		JSR	Calc_cursor
		LDA	<0,X
		AND	#00FFH
		TAY
		LDA	!pos_battle,Y
		XBA
		AND	#0FF00H
		ORA	#00016H+ofs
		LDY	#select_sign
		JSR	Sprite_set
		RTS
;*********************************************************************
;		汎用ルーチン
;*********************************************************************
;- - - - - - - - - - - - - - - - - - - - - - - - - -
;カーソル位置のイニシャル
;- - - - - - - - - - - - - - - - - - - - - - - - - -
Reset_cursor	STZ	!cursor_course1		;カーソル位置
		STZ	!cursor_course2		
		STZ	!cursor_course3
		STZ	!cursor_course4
						
		STZ	!cursor_yesno		; はい にセット
;- - - - - - - - - - - - - - - - - - - - - - - - - -
		STZ	!_attr+word_world+00H	;点滅ストップ
		STZ	!_attr+word_world+10H	;(ワールド）
		STZ	!_attr+word_world+20H
		STZ	!_attr+word_world+30H
;- - - - - - - - - - - - - - - - - - - - - - - - - -
		LDX	#word_course00		;点滅ストップ
		LDY	#8*4			;(コース）
loop$		STZ	<_attr,X
		TXA
		CLC
		ADC	#10H
		TAX
		DEY	
		BNE	loop$
		STZ	!cursor_course4
		RTS
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 


;*********************************************************************
;	ワールドセレクト（カーソル）
;*********************************************************************
;
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
pos_world	db	20h+0eh*0
		db	20h+0eh*1
		db	20h+0eh*2
		db	20h+0eh*3+4
;- - - - - - - - - - - - - - - - - - - - - - - - - -
Select_world
		JSR	Reset_cursor
;- - - - - - - - - - - - - - - - - - - - - - - - - -
;ワールドマップカーソルの移動
;- - - - - - - - - - - - - - - - - - - - - - - - - -
		LDY	#trigger_common+1
		LDA	#0300H
		LDX	#cursor_world			
		JSR	Calc_cursor		
		LDA	<0,X
		AND	#00FFH
		TAY
		LDA	!pos_world,Y
		XBA
		AND	#0FF00H
		ORA	#00016H
		LDY	#select_sign
		JSR	Sprite_set
exit$		RTS
;*********************************************************************
;	コースセレクト（カーソル）
;*********************************************************************
pos_course	db	20h+0eh*0
		db	20h+0eh*1
		db	20h+0eh*2
		db	20h+0eh*3
		db	20h+0eh*4
;- - - - - - - - - - - - - - - - - - - - - - - - - -
Select_course	
;
		LDA	!cursor_world
		ASL	A
		ASL	A
		ASL	A
		ASL	A
		ADC	#word_world
		TAX
		LDA	#02H
		STA	<_attr,X
;
;- - - - - - - - - - - - - - - - - - - - - - - - - -
;- - - - - - - - - - - - - - - - - - - - - - - - - -
		LDY	#trigger_common+1
		LDA	!cursor_world
		ASL	A			;CLC
		ADC	#cursor_course1
		TAX
;- - - - - - - - - - - - - - - - - - - - - - - - - -
		LDA	#0400H
		JSR	Calc_cursor
;- - - - - - - - - - - - - - - - - - - - - - - - - -
		LDA	<0,X
		AND	#00FFH
		TAY
		LDA	!pos_course,Y
		XBA
		AND	#0FF00H
		ORA	#00076H
		TAX
;- - - - - - - - - - - - - - - - - - - - - - -
		LDA	!trigger_common+0	;決定チエック
		AND	#B_button+ST_button
		BEQ	over$
		JSR     sound_set
		LDA	!cursor_world		;決定したとき
		XBA
		LSR	A			;CLC
		ADC	#word_course00
		STA	<0
		TYA				; 00,10,20,30,40
		ASL	A
		ASL	A
		ASL	A
		ASL	A
		ADC	<0
		TAX
		LDA	#02H
		STA	<_attr,X		
		INC	!csel_process
		RTS
;- - - - - - - - - - - - - - - - - - - - - - -
over$		TXA				;決定しないとき
		LDY	#select_sign
		JSR	Sprite_set
exit$		RTS
;*********************************************************************
;	ワールドポジションのイニシャル
;*********************************************************************
Init_position
		LDX	#player_r0
		LDA	#0FFC0H
		STA	<_situationXH,X
		STA	<_situationYH,X
		RTS

;*********************************************************************
;		バトルモードチェック
;*********************************************************************
Check_battle	ldx	#0
		lda	<game_status		;
		cmp	#06h			; battle code
		beq	exit$
		inx
		inx
exit$		rts
;*********************************************************************
;	メッセージブロックのイニシャル
;*********************************************************************
Init_word	PHB
		PHK
		PLB

		JSR	Init_position
		jsr	Check_battle
		beq	mount_battle
;- - - - - - - - - - - - - - - - - - - - - - -レース用マウント
		LDX	#word_world
		LDY	#DP_world
		JSR	Mount_message
		LDX	#word_course00
		LDY	#DP_w0
		JSR	Mount_message
		LDX	#word_course10
		LDY	#DP_w1
		JSR	Mount_message
		LDX	#word_course20
		LDY	#DP_w2
		JSR	Mount_message
		LDX	#word_course30
		LDY	#DP_w3
		JSR	Mount_message

		stz	!csel_mode
		
		PLB
		RTL		
;- - - - - - - - - - - - - - - - - - - - - - -バトル用マウント
mount_battle
		LDX	#word_battle
		LDY	#DP_battle
		JSR	Mount_message

		lda	#2
		sta	!csel_mode
;
		PLB
		RTL
;- - - - - - - - - - - - - - - - - - - - - - -


;*********************************************************************
;		汎用ルーチン
;*********************************************************************
wk0		EQU	0
wk1		EQU	2
wk2		EQU	4
wk3		EQU	6
;*********************************************************************
;	メッセージブロックのマウント
;*********************************************************************
;
;	<_disp,X .... 表示座標
;	<_addr,X .... メッセージのアドレス
;	<_next,X .... 0 .終了 1.継続
;	<_attr,X .... アトリビュート(色チェンジ用）
;
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Mount_message
loop$		LDA	!0,Y
		BEQ	exit$
		STA	<_disp,X
		LDA	!2,Y
		STA	<_addr,X
		STZ	<_attr,X
		LDA	#01H
		STA	<_next,X
		TXA
		CLC
		ADC	#10H
		TAX
		TYA
		ADC	#4
		TAY
		BRA	loop$
exit$		STZ	<_next,X
		RTS
;*********************************************************************
;		ＯＡＭのクリア
;*********************************************************************
clear_oam	LDA	#0E0H
		STA	<0,X
		TXY
		INY
		LDA	#200H-2
		PHB
		MVN	#00H,#00H
		PLB
		RTS
;**********************************************************************
;		メッセージスプライト	
;**********************************************************************
;	１行にメッセージを表示するルーチンです
;
;
;
;
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - 
;		LDA	#4040H
;		LDY	#data_message
;		ldx	attr
;		JSR	Message_sprite
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - 
Message_sprite
		STX	<wk3		; attribute
					; Y= data point
		LDX	<sprite_count	; X= sprite count
		CLC
		ADC	<screen_obj_V	; A= position
		STA	<wk0
		SEP	#00100000B
		MEM8
		LDA	!0,Y
		STA	<wk2		; attribute
		INY
		JSR	line_message
		REP	#00100000B
		MEM16
		STX	<sprite_count
		RTS
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
		mem8
special_message	PHY			;>>		
		SEC
		SBC	#0E0H
		REP	#00100000B
		MEM16
		PHA			;  >>
		AND	#00FFH
		ASL	A
		TAY
		LDA	!common_message,Y
		TAY
		PLA			;  <<
		SEP	#00100000B
		MEM8
		JSR	line_message
		PLY			;<<
		INY
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
line_message	LDA	!0,Y		; read data
		CMP	#0E0H
		BCC	entry$
		CMP	#0FFH
		BNE	special_message		
		RTS
;- - - - - - - - - - - - - - - - - - - - 
entry$		STA	<sprite_C,X
		CMP	#2CH		; 2Bh < 0,Y < 30h
		BCC	skip100$
		CMP	#30H
		BCC	tenten$
;- - - - - - - - - - - - - - - - - - - - 
skip100$	LDA	<wk0
		STA	<sprite_H,X
		CLC
		ADC	#8
		STA	<wk0
		XBA
		STA	<sprite_V,X
nomal$		XBA
		LDA	<wk3
		EOR	<wk2
		STA	<sprite_A,X
		INY
		INX
		INX
		INX
		INX
		BRA	line_message
;- - - - - - - - - - - - - - - - - - - - -
		mem8
tenten$		CMP	#2DH
		BEQ	skip100$
		CMP	#2CH
		BNE	tenten_1$
		LDA	<wk0		; 空白
		CLC
		ADC	#8
		STA	<wk0
		INY
		BRA	line_message
;- - - - - - - - - - - - - - - - - - - - -
tenten_1$	LDA	<wk0		; 濁点
		SEC
		SBC	#6
		STA	<sprite_H,X
		XBA
		SEC
		SBC	#7
		STA	<sprite_V,X
		CLC
		ADC	#7
		BRA	nomal$
		mem16
		idx16
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 




;**********************************************************************
;		カーソルの移動
;**********************************************************************
;----------------------------------------------------------------------
;		A = low(max_data) high(keypatern)
;		X = point register
;		Y = trigger data		
;
;		LDA	#0300H
;		LDX	#cursor_test
;		LDY	#button_trigger
;		JSR	Calc_cursor
;
;----------------------------------------------------------------------
cursor_check	DB	UP_button/256,DW_button/256
		DB	LF_button/256,RT_button/256
		DB	Y_button/256,B_button/256
;----------------------------------------------------------------------
Calc_cursor	STA	<wk0			; A data 
		STY	<wk1
		AND	#00FFH
		ASL	A
		TAY
		SEP	#00100000B
		MEM8
		LDA	(<wk1)			; (-)
		AND	!cursor_check+0,Y
		BEQ	skip$
		LDA	<0,X
		BEQ	skip$
		DEC	<0,X
		JSR	sound_select
skip$		LDA	(<wk1)			; (+)
		AND	!cursor_check+1,Y
		BEQ	exit$
		LDA	<0,X
		CMP	<wk0+1
		BCS	exit$
		INC	<0,X
		JSR	sound_select
exit$		REP	#00100000B
		MEM16
		RTS
;----------------------------------------------------------------------



;**********************************************************************
;		メッセージデータ
;**********************************************************************

;- - - - - - - - - - - - - - - - - - - - - -  course data - - - - - 

;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
name_title2	db	29h
		db	2dh,18h,19h,1ah,02dh,1ch,1dh,1eh,1fh,02dh,0ffh
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

;- - - - - - - - - - - 
start_sign_data
		dw	362ch
		dw	3ac6h
		dw	3ad5h
		dw	41ceh
		dw	39cfh
;- - - - - - - - - - - 
		dw	203ah
		dw	3f22h
		dw	3bcch
		dw	2724h
		dw	2cc7h
;- - - - - - - - - - - 
		dw	232ah
		dw	3536h
		dw	352dh
		dw	24c6h
		dw	2c25h
;- - - - - - - - - - - 
		dw	34c3h 
		dw	229dh
		dw	3e23h
		dw	232ah
		dw	38cdh
;- - - - - - - - - - - 

;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
;		dw	画面ポジション,メッセージindex
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
;
DP_battle	dw	2020H+ofs,battle_0	;バトル １
		dw	2e20H+ofs,battle_1	;バトル ２
		dw	3c20H+ofs,battle_2	;バトル ３
		dw	4a20H+ofs,battle_3	;バトル ４
		dw	0
;
DP_world	
		dw	2020H,world_0
		dw	2e20H,world_1
		dw	3c20H,world_2
		dw	4e20H,world_3
		dw	0
DP_w0		dw	2080H,course_00
		dw	2e80H,course_01
		dw	3c80H,course_02
		dw	4a80H,course_03
		dw	5880H,course_04
		dw	0
DP_w1		dw	2080H,course_10
		dw	2e80H,course_11
		dw	3c80H,course_12
		dw	4a80H,course_13
		dw	5880H,course_14
		dw	0
DP_w2		dw	2080H,course_20
		dw	2e80H,course_21
		dw	3c80H,course_22
		dw	4a80H,course_23
		dw	5880H,course_24
		dw	0
DP_w3		dw	2080H,course_30
		dw	2e80H,course_31
		dw	3c80H,course_32
		dw	4a80H,course_33
		dw	5880H,course_34
		dw	0
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -


;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
battle_0	db	29h,0ebh,01h,0ffh
battle_1	db	29h,0ebh,02h,0ffh
battle_2	db	29h,0ebh,03h,0ffh
battle_3	db	29h,0ebh,04h,0ffh
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
world_0		db	029h,0e0h,0ffh		;ワールドセレクト
world_1		db	029h,0e1h,0ffh
world_2		db	029h,0e2h,0ffh
world_3		db	029h,0e3h,0ffh
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
course_00	db	029h,0e6h,001h,0ffh	;キノコカップ
course_01	db	029h,0e9h,001h,0ffh
course_02	db	029h,0e5h,001h,0ffh
course_03	db	029h,0e7h,001h,0ffh
course_04	db	029h,0e4h,001h,0ffh
;- - - - - - - - - - - - - - - - - - - - - - - 
course_10	db	029h,0eah,001h,0ffh	;フラワーカップ
course_11	db	029h,0e9h,002h,0ffh
course_12	db	029h,0e6h,002h,0ffh
course_13	db	029h,0e7h,002h,0ffh
course_14	db	029h,0e4h,002h,0ffh
;- - - - - - - - - - - - - - - - - - - - - - - 
course_20	db	029h,0e5h,002h,0ffh	;スターカップ
course_21	db	029h,0e8h,001h,0ffh
course_22	db	029h,0e6h,003h,0ffh
course_23	db	029h,0e7h,003h,0ffh
course_24	db	029h,0e4h,003h,0ffh
;- - - - - - - - - - - - - - - - - - - - - - - 
course_30	db	029h,0e8h,002h,0ffh	;スペシャルカップ
course_31	db	029h,0eah,002h,0ffh
course_32	db	029h,0e9h,003h,0ffh
course_33	db	029h,0e5h,003h,0ffh
course_34	db	029h,0e4h,004h,0ffh
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
common_message	dw	w_0	; e0	キノコカップ
		dw	w_1	; e1 	フラワーカップ
		dw	w_2	; e2	スターカップ
		dw	w_3	; e3	スペシャルカップ
		dw	c_0	; e4	マリオサーキット
		dw	c_1	; e5	おばけだにコース
		dw	c_2	; e6	ドーナツへいやコース
		dw	c_3	; e7	クッパじょうコース
		dw	c_4	; e8	バニラせつげんコース
		dw	c_5	; e9	チョコレーとうコース
		dw	c_6	; ea	ノコノコかいがんコース

		dw	c_7	; eb	バトル
		dw	c_8	; ec
		dw	c_9	; ed
		dw	c_10    ; ee
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
select_sign	db	1,2BH			;カーソル
		dw	0000H
		db	0e5h,0
start_sign_1	db	2,2BH
		dw	0000H
		db	02bh,02ch
		db	0
start_sign_2	db	2,2BH+40H
		dw	0000H
		db	02ch,02bh
		db	0
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
		include	select.src
;=====================================================================
		END
