;************************************************************************
;*									*
;*	title name	: "yossy"					*
;*	proccess	: system main					*
;*	file name	: ys_main					*
;*									*
;************************************************************************
;
;
		SALL
;
		include		ys_header.inc
		include		ys_unit.h
;
		XALL
;
;
;------------------------------------------------------------------------
;-		global symbol						-
;------------------------------------------------------------------------
		GLB	SVRMCK_INT,SVDTLD,SVDTSV,DATA_COPY
		GLB	AICONBF_dat
		GLB	AICONBF_dat0,AICONBF_dat1,AICONBF_dat2
		GLB	AICONBF_dat3,AICONBF_dat4,AICONBF_dat5
;
		GLB	SV_CRS
;
;------------------------------------------------------------------------
;-		extern symbol						-
;------------------------------------------------------------------------
;
;-------------< ys_rpro >------------------------------------------------
		EXT	CHIPON
;
;-------------< ys_title >-----------------------------------------------
;
;------------------------------------------------------------------------
;-		define symbol						-
;------------------------------------------------------------------------
;;;;		EQU
;
;
;
;
;************************************************************************
;*									*
;*		program start						*
;*									*
;************************************************************************
;
;
		EXTEND
;
;
		MEM8
		IDX8
;
Group_10	GROUP	Save_pro
Save_pro	SECT	REL
;
;
;****************************************************************
;*								*
;*		セーブ ＲＡＭ					*
;*			イニシャル オールチェック		*
;*								*
;****************************************************************
SVRMCK_INT	EQU	$
		PHB
		PHK
		PLB
		M16			; memory 16bit mode
		LDX	#002H*2
SVRMCK_INT_00	EQU	$
		JSR	SVRMCK
		DEX
		DEX
		BPL	SVRMCK_INT_00
		M8			; memory 8bit mode
		PLB
		RTL
;
;
;****************************************************************
;*								*
;*		セーブ ＲＡＭ チェック				*
;*				in				*
;*				X <- セーブ ファイルＮＯ.	*
;****************************************************************
SVRMCK_ADR	EQU	$
		WORD	SAVERAM0,SAVERAM1,SAVERAM2
;
;
		MEM16
SVRMCK		EQU	$
		STX	<WORKE
		LDA	SVRMCK_ADR,X
		STA	R10
		M_CHIP	SAVEPRS
;
		LDX	<WORKE
		LDA	R0
		CMP	>RAMCHK0,X	;セーブ データ ＯＫ ?
		BEQ	SVRMCK_900	;	YES -> SVRMCK_900
;
		JSR	BAKCHK		;データ セット!!
;
		BRA	SVRMCK		; もう一度 チェック !!
;
SVRMCK_900	EQU	$
		RTS
		MEM8
;
;
;****************************************************************
;*								*
;*		バックアップ ＲＡＭ チェック			*
;*				in				*
;*				X <- セーブ ファイルＮＯ.	*
;****************************************************************
BAKCHK_ADR	EQU	$
		WORD	SAVERAM0_BAK,SAVERAM1_BAK,SAVERAM2_BAK
;
BACK_INT_DAT	EQU	$
SAVE_PLCONT	EQU	$			; プレーヤー人数
		WORD	00003H
;
SAVE_NEXT_CORS	EQU	$			; ＮＥＸＴ コースＮＯ.
		HEX	080H
;
;							;コース クリア
SAVE_CORS_CLS	EQU	$				;  テーブル データ
		HEX	000H,000H,000H,000H,000H,000H	; 1 world
		HEX	000H,000H,000H,000H,080H,080H
;
		HEX	000H,000H,000H,000H,000H,000H	; 2 world
		HEX	000H,000H,000H,000H,080H,080H
;
		HEX	000H,000H,000H,000H,000H,000H	; 3 world
		HEX	000H,000H,000H,000H,080H,080H
;
		HEX	000H,000H,000H,000H,000H,000H	; 4 world
		HEX	000H,000H,000H,000H,080H,080H
;
		HEX	000H,000H,000H,000H,000H,000H	; 5 world
		HEX	000H,000H,000H,000H,080H,080H
;
		HEX	000H,000H,000H,000H,000H,000H	; 6 world
		HEX	000H,000H,000H,000H,080H,080H
;
SAVE_ITEM	EQU	$				;アイテム データ
		HEX	000H,000H,000H,000H,000H,000H,000H,000H,000H
		HEX	000H,000H,000H,000H,000H,000H,000H,000H,000H
		HEX	000H,000H,000H,000H,000H,000H,000H,000H,000H
;
SAVE_CONFIG	EQU	$			; コンフィグ タイプ
		HEX	000H
;
SAVE_INT_HIT	EQU	$		; イニシャル ヒット フラグ
		BYTE	00000000B
;			||||||||
;			|||||||+-------- 01 空
;			||||||+--------- 02 空
;			|||||+---------- 04 空
;			||||+----------- 08 空
;			|||+------------ 10 空
;			||+------------- 20 中間ゲート
;			|+-------------- 40 フラワー
;			+--------------- 80 赤ちゃん イニシャル ヒット フラグ
;
SV_PLCT		EQU	SAVE_PLCONT-BACK_INT_DAT
SV_NXT		EQU	SAVE_NEXT_CORS-BACK_INT_DAT
SV_CRS		EQU	SAVE_CORS_CLS-BACK_INT_DAT
SV_ITM		EQU	SAVE_ITEM-BACK_INT_DAT
SV_CNFG		EQU	SAVE_CONFIG-BACK_INT_DAT
SV_IT_HT	EQU	SAVE_INT_HIT-BACK_INT_DAT
;
;
		MEM16
BAKCHK		EQU	$
		LDA	BAKCHK_ADR,X
		STA	R10
		M_CHIP	SAVEPRS
;
		LDX	<WORKE
		LDA	R0
		CMP	>RAMCHK0_BAK,X	;バックアップ ＯＫ ?
		BEQ	BAKCHK_000	;	YES -> BAKCHK_000
;
		LDA	#BACK_INT_DAT
		STA	R1
		LDA	#BANK BACK_INT_DAT
		AND	#000FFH
		STA	R2
		LDA	BAKCHK_ADR,X
		STA	R10
		M_CHIP	BAKINTST
		LDX	<WORKE
		LDA	R0
		STA	>RAMCHK0_BAK,X
		BRA	BAKCHK		; もう一度 チェック !!
;
BAKCHK_000	EQU	$
		LDA	BAKCHK_ADR,X
		STA	R1		; 転送元
		LDA	SVRMCK_ADR,X
		STA	R10		; 転送先
;
		M_CHIP	LDBAKSET
;
		LDX	<WORKE
		LDA	R0
		STA	>RAMCHK0,X
		RTS
		MEM8
;
;
;****************************************************************
;*								*
;*		セーブデータ ＬＯＡＤ				*
;*								*
;****************************************************************
SVDTLD		EQU	$
		PHB
		PHK
		PLB
;
		LDA	#BANK SAVERAM0
		STA	<WORK2
		STA	<WORK5
		LDX	!SVFILEIDX
		M16			; memory 16bit mode
		PHX
		JSR	SVRMCK		; セーブ ＲＡＭ チェック
		PLX
		LDA	SVRMCK_ADR,X
		STA	<WORK0
		M8			; memory 8bit mode
;
		LDA	[<WORK0]
		STA	!PLCONT		; プレーヤー人数
		M16			; memory 16bit mode
		INC	<WORK0
		INC	<WORK0
		M8			; memory 8bit mode
;
		LDY	#000H
		LDA	[<WORK0]
		STA	!MAPOINT
		AND	#07FH
SVDTLD_210	EQU	$
		CMP	#012
		BCC	SVDTLD_220
		SBC	#012
		INY
		INY
		BRA	SVDTLD_210
SVDTLD_220	EQU	$
		STA	!CORSLPT	;指カーソル
		STY	!MPTYPE		; ポイント セット
		M16			; memory 16bit mode
		INC	<WORK0
		M8			; memory 8bit mode
;
		LDY	#0000H
SVDTLD_310	EQU	$
		LDA	[<WORK0]
		PHA
		AND	#07FH
		STA	!HISCEBF,Y	; ハイスコア バッファ セット
		LDA	#000
		STA	!MPCLRTBL,Y
		PLA
		AND	#080H
		BEQ	SVDTLD_320
		LDA	#001H		; コース クリア テーブル
		STA	!MPCLRTBL,Y	;	データ セット
SVDTLD_320	EQU	$
		M16			; memory 16bit mode
		INC	<WORK0
		M8			; memory 8bit mode
		INY
		CPY	#012*6
		BCC	SVDTLD_310
;
		LDA	!MAPOINT
		AND	#07FH
		TAY
		CPY	#12*(6-1)-(8-1)
		BCC	SVDTLD_340
		LDA	!HISCEBF,Y	; ６ー８クリアしているか ?
		BNE	SVDTLD_400	;	YES -> SVDTLD_400
SVDTLD_340	EQU	$
		LDA	#080H
		STA	!MPCLRTBL,Y
;
SVDTLD_400	EQU	$
		LDY	#0000H
		STZ	<WORK4
		INC	<WORK4
SVDTLD_410	EQU	$
		LDA	!MPCLRTBL,Y
		BEQ	SVDTLD_420
		TYA
		ASL	A
		TAX
		M16			; memory 16bit mode
		LDA	AICONBF_dat0,X
		STA	<WORK10
		M8			; memory 8bit mode
		LDA	<WORK4
		STA	(<WORK10)
;;;;K;;;;		STA	!AICONBF1,Y	; アイコン バッファ セット
SVDTLD_420	EQU	$
		LDA	<WORK4
		INC	A
		CMP	#012+1
		BCC	SVDTLD_430
		LDA	#001
SVDTLD_430	EQU	$
		STA	<WORK4
		INY
		CPY	#012*6
		BCC	SVDTLD_410
;
		LDY	#000H
SVDTLD_510	EQU	$		; アイテム データ ロード
		LDA	[<WORK0]
		STA	!ITEMBUF,Y
		M16			; memory 16bit mode
		INC	<WORK0
		M8			; memory 8bit mode
		INY
		CPY	#027
		BCC	SVDTLD_510
;
SVDTLD_600	EQU	$
		M16			; memory 16bit mode
		LDA	[<WORK0]	; コンフィグ タイプ ロード
		AND	#000FFH
		STA	!CONFIGFG
		INC	<WORK0
;
SVDTLD_700	EQU	$
		LDA	[<WORK0]
		AND	#000FFH
		STA	!SV_STATUS	; イニシャル ヒット フラグ
		M8			; memory 8bit mode
;
		PLB
		RTL
;
AICONBF_dat	EQU	$
		WORD	AICONBF_dat0,AICONBF_dat1,AICONBF_dat2
		WORD	AICONBF_dat3,AICONBF_dat4,AICONBF_dat5
;
AICONBF_dat0	EQU	$
		WORD	AICONBF1+0,AICONBF1+1,AICONBF1+2,AICONBF1+3
		WORD	AICONBF1+4,AICONBF1+5,AICONBF1+6,AICONBF1+7
		WORD	AICONBF1+8,AICONBF1+9,AICONBF1+10,AICONBF1+11
;
AICONBF_dat1	EQU	$
		WORD	AICONBF2+0,AICONBF2+1,AICONBF2+2,AICONBF2+3
		WORD	AICONBF2+4,AICONBF2+5,AICONBF2+6,AICONBF2+7
		WORD	AICONBF2+8,AICONBF2+9,AICONBF2+10,AICONBF2+11
;
AICONBF_dat2	EQU	$
		WORD	AICONBF3+0,AICONBF3+1,AICONBF3+2,AICONBF3+3
		WORD	AICONBF3+4,AICONBF3+5,AICONBF3+6,AICONBF3+7
		WORD	AICONBF3+8,AICONBF3+9,AICONBF3+10,AICONBF3+11
;
AICONBF_dat3	EQU	$
		WORD	AICONBF4+0,AICONBF4+1,AICONBF4+2,AICONBF4+3
		WORD	AICONBF4+4,AICONBF4+5,AICONBF4+6,AICONBF4+7
		WORD	AICONBF4+8,AICONBF4+9,AICONBF4+10,AICONBF4+11
;
AICONBF_dat4	EQU	$
		WORD	AICONBF5+0,AICONBF5+1,AICONBF5+2,AICONBF5+3
		WORD	AICONBF5+4,AICONBF5+5,AICONBF5+6,AICONBF5+7
		WORD	AICONBF5+8,AICONBF5+9,AICONBF5+10,AICONBF5+11
;
AICONBF_dat5	EQU	$
		WORD	AICONBF6+0,AICONBF6+1,AICONBF6+2,AICONBF6+3
		WORD	AICONBF6+4,AICONBF6+5,AICONBF6+6,AICONBF6+7
		WORD	AICONBF6+8,AICONBF6+9,AICONBF6+10,AICONBF6+11
;
;
;****************************************************************
;*								*
;*		セーブデータ ＳＡＶＥ				*
;*								*
;****************************************************************
SVDTSV		EQU	$
		PHB
		PHK
		PLB
;
		LDA	#BANK SAVERAM0
		STA	<WORK2
		M16			; memory 16bit mode
		LDA	!SVFILEIDX
		AND	#000FFH
		TAX
		LDA	SVRMCK_ADR,X
		STA	<WORK0
;
		LDA	!PLCONT		; プレーヤー人数
		STA	[<WORK0]
		INC	WORK0
		INC	WORK0
;
		LDA	!BKHISCRE
		AND	#0007FH
		BNE	SVDTSV_280
		LDY	!MAPOINT	; ＮＥＸＴ ポイント
		LDA	!MPCLRTBL,Y
		AND	#0000FH
		BNE	SVDTSV_280
		TYA
		STA	[<WORK0]
SVDTSV_280	EQU	$
		INC	<WORK0
;
		M8			; memory 8bit mode
		LDY	#0000H
SVDTSV_310	EQU	$		; ハイスコア
		LDA	!MPCLRTBL,Y	;     ＆
		AND	#00001H		; コース クリア データ
		BEQ	SVDTSV_350	;	セット
		LDA	!HISCEBF,Y
		ORA	#080H
		STA	[<WORK0]
SVDTSV_350	EQU	$
		M16			; memory 16bit mode
		INC	<WORK0
		M8			; memory 8bit mode
		INY
		CPY	#012*6
		BCC	SVDTSV_310
;
		LDY	#000H
SVDTSV_410	EQU	$		; アイテム データ セット
		LDA	!ITEMBUF,Y
		STA	[<WORK0]
		M16			; memory 16bit mode
		INC	<WORK0
		M8			; memory 8bit mode
		INY
		CPY	#027
		BCC	SVDTSV_410
;
SVDTSV_500	EQU	$
		M16			; memory 16bit mode
		LDA	!CONFIGFG	; コンフィグ タイプ
		STA	[<WORK0]
		INC	<WORK0
;
SVDTSV_700	EQU	$
		LDA	!SV_STATUS	; イニシャル ヒット フラグ
		STA	[<WORK0]
		M8			; memory 8bit mode
;
		M16			; memory 16bit mode
		PHX
		PHX
		LDA	SVRMCK_ADR,X
		STA	R10
		M_CHIP	SAVEPRS
		PLX
		LDA	R0
		STA	>RAMCHK0,X	;セーブ データ ＯＫ ?
;
		LDA	SVRMCK_ADR,X
		STA	R1		; 転送元
		LDA	BAKCHK_ADR,X
		STA	R10		; 転送先
		M_CHIP	LDBAKSET
		PLX
		LDA	R0
		STA	>RAMCHK0_BAK,X
;
		M8			; memory 8bit mode
		PLB
		RTL
;
;
;****************************************************************
;*								*
;*		セーブ データ コピー				*
;*								*
;****************************************************************
DATA_COPY	EQU	$
		PHB
		PHK
		PLB
		M16			; memory 16bit mdoe
		LDA	!FLSLCSLPT
		ASL	A
		TAX
		LDA	!ORG_CSLPT
		ASL	A
		TAY
;
		PHX
		PHX
		LDA	SVRMCK_ADR,Y
		STA	R1		; 転送元
		LDA	BAKCHK_ADR,X
		STA	R10		; 転送先
		M_CHIP	LDBAKSET
		PLX
		LDA	R0
		STA	>RAMCHK0_BAK,X
;
		LDA	BAKCHK_ADR,X
		STA	R1		; 転送元
		LDA	SVRMCK_ADR,X
		STA	R10		; 転送先
		M_CHIP	LDBAKSET
		PLX
		LDA	R0
		STA	>RAMCHK0,X
;
		M8			; memory 8bit mdoe
		PLB
		RTL
;
;
;
;
;
;
;
		END
