;------------------------------------------------------------------------
;-		pause move						-
;-			in  : (Y) <-- pause flag			-
;------------------------------------------------------------------------
;
;-------------- moji OAM data -------------------------------------------
GMPASOAM	EQU	$
;			X   Y	CH  AT
		HEX	02A,014,0E0,030 ;[00] "P" , "S"
		HEX	03A,014,0E2,030 ;[01]
		HEX	02A,024,000,031 ;[02]
		HEX	03A,024,002,031 ;[03]
;
		HEX	046,014,0E4,030 ;[04] "A" , "E"
		HEX	056,014,0E6,030 ;[05]
		HEX	046,024,004,031 ;[06]
		HEX	056,024,006,031 ;[07]
;
		HEX	062,014,0E8,030 ;[08] "U" , "L"
		HEX	072,014,0EA,030 ;[09]
		HEX	062,024,008,031 ;[0A]
		HEX	072,024,00A,031 ;[0B]
;
		HEX	07E,014,0EC,030 ;[0C] "S" , "E"
		HEX	08E,014,0EE,030 ;[0D]
		HEX	07E,024,00C,031 ;[0E]
		HEX	08E,024,00E,031 ;[0F]
;
		HEX	09A,014,020,031 ;[10] "E" , "C"
		HEX	0AA,014,022,031 ;[11]
		HEX	09A,024,028,031 ;[12]
		HEX	0AA,024,02A,031 ;[13]
;
		HEX	0B6,014,024,031 ;[14] " " , "T"
		HEX	0C6,014,026,031 ;[15]
		HEX	0B6,024,02C,031 ;[16]
		HEX	0C6,024,02E,031 ;[17]
GMPASOAME	EQU	$
;
;-------------- moji move data ------------------------------------------
GMPASINTM	EQU	$
;			S  E  L	 E  C  T
;			P  A  U	 S  E
		HEX	00,04,08,0C,10,14
;
GMPASZMAD	EQU	$
; GMPASZMK -->
		HEX	FC,04,FC,04,FC,04,FC,04,FC,04,FC
ZOMMAX		HEX	01,00
GMPASZMCP	EQU	$
		HEX	20,34,20,34,20,34,20,34,20,34,20
		HEX	34,00
ZOMMX		EQU	ZOMMAX-GMPASZMAD
;
GMPASASAD	EQU	$
;			ZOMMX ->
		HEX	04,FF
GMPASASMX	EQU	$
		HEX	40,10
;
GMPASMJNO	EQU	$
;			 P  A  U  S  E
		HEX	00,01,02,03,04
;			 S  E  L  E  C	T
		HEX	03,04,11,04,12,13
;
GMPASCNTX	EQU	$
		HEX	10,30,50,70,10,30
GMPASCNTY	EQU	$
		HEX	50,50,50,50,70,70
;
GMPASIN_SNDNO	EQU	$
		WORD	01H,	   02H
;
GMPASUB_ADR	EQU	$-2
		WORD	GMPASUB_300
		WORD	GMPASUB_400,GMPASUB_500
		WORD	GMPASUB_600
		WORD	GMPASUB_700
		WORD	GMPASUB_800,GMPASUB_900
		WORD	GMPASUB_A00,GMPASUB_B00
OBJ_SAVE	EQU	$
;
Vram_save	EQU	(OBJ_SAVE-GMPASUB_ADR)/2
;
;
GMPASUB		EQU	$
		LDA	!GMPAUSE
		CMP	#Vram_save	; pause initial set ?
		BCS	GMPS050		;	NO -> GMPS050
		ASL	A
		MI16			; memory , index 16bit mode
		AND	#000FFH
		TAX
		LDA	!GMPASMK
		AND	#00FFH
		ASL	A
		TAY
		JSR	(GMPASUB_ADR,X)
		MI8			; memory , index 8bit mode
;
		JSR	GMPS_COL_CHG
;
		PLB
		RTL
;
;-------------- pause move --------------------------------------
GMPS050		EQU	$
		CMP	#Vram_save+8
		BCS	GMPS070		;initial zoom ? ( no:GMPS070 )
;
;-------------- initial moji zoom -----------------------
		SBC	#Vram_save
		ASL	A
		ASL	A
		ASL	A
		LDX	#PASMOJ-1
GMPS060		EQU	$
		STA	GMPASZOM,X
		DEX
		BPL	GMPS060
		LDA	#000
		STA	>CLFDCNT
		STA	>CLFDCNT+1
;
		LDA	!GMPASMK	; ポリゴン文字表示中での
		EOR	#001		;	フェードインｏｒアウト
		JSR	GMPS_COL_SUB	;
;
		JMP	GMPS150
;
;-------------- moji move pattern set -------------------
GMPS070		EQU	$
		LDX	#PASMOJ-1
GMPS080		EQU	$
		LDA	GMPASTIM,X
		BEQ	GMPS090		;wait ? ( no:GMPS090 )
;
		LDA	<FRCNT
		AND	#03H
		BNE	GMPS140
		DEC	GMPASTIM,X	;timer dec
		BRA	GMPS140
;
;-------------- moji zoom -----------------------
GMPS090		EQU	$
		LDY	GMPASZMK,X
		LDA	<FRCNT
		AND	#03H
		BNE	GMPS100
		LDA	GMPASZOM,X
		CLC
		ADC	!GMPASZMAD,Y
		STA	GMPASZOM,X
		CMP	!GMPASZMCP,Y
		BNE	GMPS100		;zoom muki change ? ( no:GMPS100 )
;
		INC	GMPASZMK,X
GMPS100		EQU	$
		CPY	#ZOMMX
		BCC	GMPS140		;moji rotation ? ( no:GMPS140 )
;
;-------------- moji rotation -------------------
		LDA	GMPASXAS,X
		CMP	!GMPASASMX-ZOMMX,Y
		BNE	GMPS110		;max rotation speed ? ( no:GMPS110 )
;
		CPY	#ZOMMX
		BEQ	GMPS120		;rotation end check ? ( no:GMPS120 )
		LDA	GMPASXAN,X
		BNE	GMPS120		;      "      ? ( no:GMPS120 )
;
;-------------- go to wait set ------------------
		STZ	GMPASZMK,X	;zoom muki reset
		STZ	GMPASXAS,X	;rotation speed reset
		STZ	GMPASXAC,X	;	"       calc reset
		LDA	#020H
		STA	GMPASTIM,X	;wait timer set
		BRA	GMPS150
;
GMPS110		EQU	$
		LDA	<FRCNT
		LSR	A
		BCS	GMPS120
		LDA	GMPASXAS,X
		CLC
		ADC	!GMPASASAD-ZOMMX,Y
		STA	GMPASXAS,X
GMPS120		EQU	$
		LDA	GMPASXAS,X
		TAY
		ASL	A
		ASL	A
		ASL	A
		ASL	A
		CLC
		ADC	GMPASXAC,X
		STA	GMPASXAC,X
		TYA
		PHP			;(C),(N) save
		LSR	A
		LSR	A
		LSR	A
		LSR	A
		PLP
		BPL	GMPS130
		ORA	#0F0H
GMPS130		EQU	$
		ADC	GMPASXAN,X
		STA	GMPASXAN,X
;
GMPS140		EQU	$
		DEX
		BMI	GMPS150
		JMP	GMPS080
;
;-------------- moji polygon set ------------------------
GMPS150		EQU	$
;
		M16
;
		LDA	#WOB7CHR+(80H*20H)
		STA	R1		;(R1) <-- M-chip clear RAM start address
		LDA	#(80H*20H)/2
		STA	R12
		M_CHIP	MRAM_CLR
;
		LDX	#PASMOJ-1
		LDA	!ITEMBUF	;セレクト文字 表示 ?
;;;;K;;;;		BNE	GMPS160		;	YES -> GMPS160
		DEX
GMPS160		EQU	$
		LDA	!ITEMBUF	;セレクト文字 表示 ?
;;;;K;;;;		BNE	GMPS163		;	YES -> GMPS163
		LDA	!GMPASMJNO,X
		BRA	GMPS165
GMPS163		EQU	$
		LDA	!GMPASMJNO+5,X
GMPS165		EQU	$
		AND	#00FFH
		STA	R1		;(R1) <-- moji no.
		LDA	GMPASXAN,X
		AND	#00FFH
		STA	R2		;(R2) <-- X angle
		STA	R3		;(R3) <-- Y   "
		LDA	!GMPASCNTX,X
		AND	#00FFH
		STA	R4		;(R4) <-- center X pos
		LDA	!GMPASCNTY,X
		AND	#00FFH
		STA	R5		;(R5) <--    "   Y  "
		LDA	GMPASZOM,X
		AND	#00FFH
		STA	R6		;(R6) <-- zoom flag
;
		PHX			;(X) save
;
		M_CHIP	MOJIPOLY2
;
		PLX			;(X) load
;
		DEX
		BPL	GMPS160
;
		LDA	#WOB7CHR+(80H*20H)+(60H*20H)
		STA	R1		;(R1) <-- convert RAM from start address
		LDA	#WOB7CHR+(80H*20H)+(48H*20H)
		STA	R2		;(R2) <-- convert RAM to start address
		LDA	#(8*20H)/2
		STA	R3		;(R3) <-- 1 block number of word
		LDA	#01H
		STA	R4		;(R4) <-- number of block
		M_CHIP	MJRAMCNV	;moji polygon RAM convert
;
		LDA	#WOB7CHR+(80H*20H)+(70H*20H)
		STA	R1		;(R1) <-- convert RAM from start address
		LDA	#WOB7CHR+(80H*20H)+(58H*20H)
		STA	R2		;(R2) <-- convert RAM to start address
		LDA	#(8*20H)/2
		STA	R3		;(R3) <-- 1 block number of word
		LDA	#01H
		STA	R4		;(R4) <-- number of block
		M_CHIP	MJRAMCNV	;moji polygon RAM convert
;
;-------------- pause moji OAM set ------------------------------
		LDA	#1010101010101010B	;big size set
		STA	>OAMSUB
		STA	>OAMSUB+2
		STA	>OAMSUB+4
		STA	>OAMSUB+6
;
		M8
;
		STZ	<WORK0
		LDA	!ITEMBUF	;セレクト文字 表示 ?
;;;;K;;;;		BNE	GMPS200		;	YES -> GMPS200
		LDA	#010H
		STA	<WORK0
GMPS200		EQU	$
		LDX	#000H
GMPS250		EQU	$
		LDA	!GMPASOAM+0,X
		CLC
		ADC	<WORK0
		STA	>OAM+0,X
		LDA	!GMPASOAM+1,X
		STA	>OAM+1,X
		LDA	!GMPASOAM+2,X
		STA	>OAM+2,X
		LDA	!GMPASOAM+3,X
		STA	>OAM+3,X
		INX
		INX
		INX
		INX
		CPX	#GMPASOAME-GMPASOAM
		BCC	GMPS250
;
		PLB
		RTL
;
;++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;+		カラー フェード				+
;++++++++++++++++++++++++++++++++++++++++++++++++++++++++
GMPS_FADE_ADR	EQU	$
		WORD	GMPS_FADE_OUT,GMPS_FADE_IN
;
;
GMPS_COL_CHG	EQU	$
		LDA	!GMPASMK
GMPS_COL_SUB	EQU	$
		ASL	A
		TAX
		LDA	!FADNO
		JSR	(GMPS_FADE_ADR,X)
GMPS_COL_990	EQU	$
		RTS
;
;-------------------------------------- フェード イン
GMPS_FADE_IN	EQU	$
		TAX
		BMI	GMPS_IN_PASS
		DEC	A
		DEC	A
		STA	!FADNO
GMPS_IN_PASS	EQU	$
		RTS
;
;-------------------------------------- フェード アウト
GMPS_FADE_OUT	EQU	$
		INC	A
		INC	A
		CMP	#00FH
		BCC	GMPS__OUT_PASS
		LDA	#00FH
GMPS__OUT_PASS	EQU	$
		STA	!FADNO
		RTS
;
		MEM16
		IDX16
;
;++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;+		カラー フェード イン			+
;++++++++++++++++++++++++++++++++++++++++++++++++++++++++
GM_PS_INC_DT	EQU	$
		BYTE	002H,0FEH
;
;
GMPASUB_000	EQU	$
		M8			; memory 8bit mode
		LDA	!FADNO
		BMI	GMPASUB_050
		CLC
		ADC	GM_PS_INC_DT,Y
		STA	!FADNO
GMPASUB_050	EQU	$
		M16			; memory 16bit mode
		RTS
;
;++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;+		カラー フェード アウト			+
;++++++++++++++++++++++++++++++++++++++++++++++++++++++++
GMPASUB_100	EQU	$
		M8			; memory 8bit mode
		TYA
		EOR	#001
		TAY
		LDA	!FADNO
		CLC
		ADC	GM_PS_INC_DT,Y
		CMP	#00FH
		BCC	GMPASUB_150
		LDA	#00FH
GMPASUB_150	EQU	$
		STA	!FADNO
		M16			; memory 16bit mode
		RTS
;
;++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;+		ＯＢＪ データ セーブ ＆ ロード		+
;++++++++++++++++++++++++++++++++++++++++++++++++++++++++
GMPASUB_3_AD	EQU	$
		WORD	05400H,05400H+8000H
GMPASUB_3_BT	EQU	$
		WORD	(16*4)*20H,(16*4)*20H+2
;
;
GMPASUB_300	EQU	$
		TYX
		LDA	!GMPASIN_SNDNO,X ;[♪]
		STA	SOUND_3
;
		LDA	#OBJ_BUF
		STA	<WORK0
		LDY	GMPASUB_3_BT,X	;(Y) <-- number of byte
		LDA	GMPASUB_3_AD,X	;(A) <-- VRAM address
		JMP	VRMSAVE
;
;++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;+		ＯＢＪ データ セーブ ＆ ロード		+
;++++++++++++++++++++++++++++++++++++++++++++++++++++++++
GMPASUB_4_AD	EQU	$
		WORD	05800H,05800H+8000H
;
;
GMPASUB_400	EQU	$
		TYX
		LDA	#OBJ_BUF
		CLC
		ADC	GMPASUB_3_BT+2
		STA	<WORK0
		LDY	GMPASUB_3_BT,X	;(Y) <-- number of byte
		LDA	GMPASUB_4_AD,X	;(A) <-- VRAM address
		JMP	VRMSAVE
;
;++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;+		点数表示用キャラクター セット		+
;++++++++++++++++++++++++++++++++++++++++++++++++++++++++
GMPASUB_500	EQU	$
		TYA			; セット ＯＫ ?
		BEQ	GMPASUB_590	;	NO -> GMPASUB_590
		LDY	#05400H
		LDX	#CHR32
		LDA	#BANK CHR32
		STA	<WORK1
		LDA	#01000H
		JSL	>VRAMDX_ST
GMPASUB_590	EQU	$
		RTS
;
;++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;+		ＯＢＪ データ セーブ ＆ ロード		+
;++++++++++++++++++++++++++++++++++++++++++++++++++++++++
GMPASUB_6_AD	EQU	$
		WORD	04E00H,04E00H+8000H
GMPASUB_6_BT	EQU	$
		WORD	(16*6)*20H,(16*6)*20H+2
;
;
GMPASUB_600	EQU	$
		TYX
		LDA	#OBJ_BUF
		CLC
		ADC	GMPASUB_3_BT+2
		CLC
		ADC	GMPASUB_3_BT+2
		STA	<WORK0
		LDY	GMPASUB_6_BT,X	;(Y) <-- number of byte
		LDA	GMPASUB_6_AD,X	;(A) <-- VRAM address
		JSR	VRMSAVE
;
;-------------- pause moji RAM clear --------------------
		MI8			; memory , index 8bit mode
		LDX	#GMPASCLRSE-1
GMPASUB_620	EQU	$
		STZ	GMPASCLR_S,X
		DEX
		BPL	GMPASUB_620
;
		LDX	#PASMOJ-1
GMPASUB_630	EQU	$
		LDA	!GMPASINTM,X
		STA	GMPASTIM,X
		DEX
		BPL	GMPASUB_630
		RTS
;
		MEM16
		IDX16
;
;++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;+	ＢＧ３キャラクター データ セーブ ＆ ロード	+
;++++++++++++++++++++++++++++++++++++++++++++++++++++++++
GMPASUB_7_AD	EQU	$
		WORD	02800H,02800H+8000H
;
GMPASUB_7_BT	EQU	$
		WORD	(16*8)*20H,(16*8)*20H+2
;
;
GMPASUB_700	EQU	$
		TYX
		LDA	#B3CHR_BUF
		STA	<WORK0
		LDY	GMPASUB_7_BT,X	;(Y) <-- number of byte
		LDA	GMPASUB_7_AD,X	;(A) <-- VRAM address
		BRA	VRMSAVE
;
;++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;+	ＢＧ３スクリーン データ セーブ ＆ ロード	+
;++++++++++++++++++++++++++++++++++++++++++++++++++++++++
GMPASUB_8_AD	EQU	$
		WORD	03400H,03400H+8000H
;
;
GMPASUB_800	EQU	$
		TYX
		LDA	#B3SCR_BUF
		STA	<WORK0
		LDY	GMPASUB_3_BT,X	;(Y) <-- number of byte
		LDA	GMPASUB_8_AD,X	;(A) <-- VRAM address
;
;++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;+		ＶＲＡＭエリア セーブ			+
;+				in			+
;+				Y <- number of byte	+
;+				A <- VRAM address	+
;+				wrk0,1 <- 転送先アドレス+
;++++++++++++++++++++++++++++++++++++++++++++++++++++++++
VRMSAVE		EQU	$
		PHB			;(DBR) save
		PEA	VRAMDX/100H
		PLB
		PLB			;(DBR) <-- VRAMDX(B)
;
		LDX	VRAMDX
		STA	0,X		;VRAM address set
		ASL	A		;(C) <-- VRAM read ?
		LDA	#10000000B
		STA	2,X		;inc mode set
		LDA	#BANK OBJ_BUF
		STA	7,X		;A bus address(H,B) set
		TYA
		STA	8,X		;number of byte set
		LDA	#10000001B+(39H*100H)
		LDY	<WORK0		; VRAM read ?
		BCS	VRSV010		;	YES -> VRSV010
;
		LDA	#00000001B+(18H*100H)
		INY
		INY
VRSV010		EQU	$
		STA	3,X		;inc mode & DMA parameter set
		TYA
		STA	5,X		;B bus address & A bus addres(L) set
;
		TXA
		CLC
		ADC	#12
		STA	10,X		;next data address set
		STA	VRAMDX		;end address set
;
		PLB		;(DBR) load
		RTS
;
;++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;+							+
;++++++++++++++++++++++++++++++++++++++++++++++++++++++++
GMPASUB_900	EQU	$
		TYA			; セット ＯＫ ?
		BEQ	GMPASUB_990	;	NO -> GMPASUB_990
		LDA	#CHRE9A
		JSL	>UNCOMPRES_X
;
		LDX	#BANK WOB7CHR
		STX	<WORK1
		LDX	#WOB7CHR+1000H
		LDY	#02C00H
		JSL	>VRAMDX_ST
GMPASUB_990	EQU	$
		RTS
;
;++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;+	各パラメータ データ セーブ ＆ ロード		+
;++++++++++++++++++++++++++++++++++++++++++++++++++++++++
GMPASUB_A_BNK	EQU	$
		WORD	BANK PRMTR_BUF,BANK GMMDRM,BANK PRMTR_BUF
;
GMPASUB_A_ADR	EQU	$
		WORD	PRMTR_BUF,GMMDRM,PRMTR_BUF
;
GMPASUB_A_SUB	EQU	$
		WORD	GMPASUB_A10,GMPASUB_A20
;
;
GMPASUB_A00	EQU	$
		TYX
		JSR	(GMPASUB_A_SUB,X)
;
		LDA	GMPASUB_A_BNK,Y
		STA	<WORK2
		LDA	GMPASUB_A_ADR,Y
		STA	<WORK0
		INY
		INY
		LDA	GMPASUB_A_BNK,Y
		STA	<WORK5
		LDA	GMPASUB_A_ADR,Y
		STA	<WORK3
;
		LDY	#00000H
		TYX
		M8			; memory 8bit mode
GMPASUB_A50	EQU	$
		LDA	[<WORK0],Y
		STA	[<WORK3],Y
		INY
		CPY	#GMMDNO
		BCC	GMPASUB_A50
;
		M16			; memory 16bit mode
		TXA
		STA	>CLFDCNT
GMPASUB_A80	EQU	$
		STA	>CHNGCOL+000H,X
		STA	>CHNGCOL+100H,X
		INX
		INX
		CPX	#00100H
		BCC	GMPASUB_A80
;
		RTS
;
;++++++++++++++++++++++++++++++++++++++++++++++++
;+	その他の データ 復帰			+
;++++++++++++++++++++++++++++++++++++++++++++++++
GMPASUB_A10	EQU	$
		LDA	>SCH_BUF
		STA	<SCCH3
		LDA	>SCV_BUF
		STA	<SCCV3
		LDA	>HD42C_BUF
		STA	!HD420C
		LDA	>NUK_BUF
		STA	!NUKCOL
;
		M8			; memory 8bit mode
		LDA	>NMITYP_BUF
		STA	!NMITYP
		M16			; memory 16bit mode
		RTS
;
;++++++++++++++++++++++++++++++++++++++++++++++++
;+	その他の データ 退避			+
;++++++++++++++++++++++++++++++++++++++++++++++++
GMPASUB_A20	EQU	$
		LDA	<SCCH3
		STA	>SCH_BUF
		LDA	<SCCV3
		STA	>SCV_BUF
		LDA	!HD420C
		STA	>HD42C_BUF
		LDA	!NUKCOL
		STA	>NUK_BUF
;
		M8			; memory 8bit mode
		LDA	!NMITYP
		STA	>NMITYP_BUF
		M16			; memory 16bit mode
;
		PHY
		LDA	#BANK CHR74	;スコア キャラクターセット
		STA	<WORK1		;bank NO. set
		LDY	#02800H		;(Y) <-- VRAM address
		LDX	#CHR74		;(X) <-- A bus address
		LDA	#0800H		;(A) <-- number byte
		JSL	>VRAMDX_ST
		PLY
;
		RTS
;
;++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;+		カラー セット				+
;++++++++++++++++++++++++++++++++++++++++++++++++++++++++
GMPS_COL_ADR	EQU	$
		WORD	GMPS_COL_OUT,GMPS_COL_IN
;
GMPASUB_B00	EQU	$
		PHB
		I8			; index 8bit mode
		TYX
		JMP	(GMPS_COL_ADR,X)
;
;++++++++++++++++++++++++++++++++++++++++++++++++
;+		フェード アウト			+
;++++++++++++++++++++++++++++++++++++++++++++++++
GMPS_COL_OUT	EQU	$
		LDX	#000
GMPS_COL_OUT_LP	EQU	$
		LDA	>COL_BUF+000H,X
		STA	>DATACOL+000H,X
		LDA	>COL_BUF+100H,X
		STA	>DATACOL+100H,X
		INX
		INX
		BNE	GMPS_COL_OUT_LP
;
		PLB
		RTS
;
;++++++++++++++++++++++++++++++++++++++++++++++++
;+		フェード イン			+
;++++++++++++++++++++++++++++++++++++++++++++++++
GMPS_COL_IN	EQU	$
		LDA	#00000H
		STA	<SCCH3
		STA	<SCCV3
		STA	!NUKCOL
		TAX
		STX	!HD420C
		LDY	#BANK DATACOL
		PHY
		PLB
;
GMPS_COL_IN_00	EQU	$		; カラーデータの退避
		LDA	!DATACOL+000H,X
		STA	>COL_BUF+000H,X
		LDA	!DATACOL+100H,X
		STA	>COL_BUF+100H,X
		INX
		INX
		BNE	GMPS_COL_IN_00
;
		LDA	#00000H
		TAX
		TXY
GMPS_COL_IN_10	EQU	$		; カラーデータのゼロクリア
		STA	!DATACOL+000H,X
		STA	!DATACOL+100H,X
		INX
		INX
		BNE	GMPS_COL_IN_10
;
		TYX
GMPS_COL_IN_20	EQU	$		;ポリゴンとスコアのカラーセット
		LDA	>COL_ADDRESS+METER_COL+2,X
		STA	!DATACOL+((16*2)*0)+2,X
		LDA	>COL_ADDRESS+METER_COL+(16*2)+2,X
		STA	!DATACOL+((16*2)*1)+2,X
		LDA	>COL_ADDRESS+OBJ_MAIN_COL,X
		STA	!DATACOL+((16*2)*8)+2,X
		INX
		INX
		CPX	#015*2
		BCC	GMPS_COL_IN_20
;
		LDX	#BANK PAUSE_SCR
		PHX
		PLB
		LDX	#000
		LDA	#0217FH
GMPS_COL_IN_30	EQU	$		; スクリーン バッファ クリア
		STA	!PAUSE_SCR+000H,X
		STA	!PAUSE_SCR+100H,X
		STA	!PAUSE_SCR+200H,X
		STA	!PAUSE_SCR+300H,X
		STA	!PAUSE_SCR+400H,X
		STA	!PAUSE_SCR+500H,X
		STA	!PAUSE_SCR+600H,X
		INX
		INX
		BNE	GMPS_COL_IN_30
;
		LDX	#000
		STX	<WORK0
		TXY
GMPS_COL_IN_40	EQU	$		; 基本キャラクター セット
		LDX	<WORK0
		LDA	>GMGOAL_SCR1,X	; "ＳＴＡＲ" ライン
		AND	#000FFH
		TAX
		LDA	>GMGOAL_MJ_DAT0,X
		STA	!PAUSE_SCR+(20H*07H+04H)*2,Y
		LDA	>GMGOAL_MJ_DAT1,X
		STA	!PAUSE_SCR+(20H*08H+04H)*2,Y
;
		LDX	<WORK0
		LDA	>GMGOAL_SCR2,X	; "ＣＯＩＮ" ライン
		AND	#000FFH
		TAX
		LDA	>GMGOAL_MJ_DAT0,X
		ORA	#00400H
		STA	!PAUSE_SCR+(20H*0AH+04H)*2,Y
		LDA	>GMGOAL_MJ_DAT1,X
		ORA	#00400H
		STA	!PAUSE_SCR+(20H*0BH+04H)*2,Y
;
		LDX	<WORK0
		LDA	>GMGOAL_SCR3,X	; "ＦＬＯＷＥＲ" ライン
		AND	#000FFH
		TAX
		LDA	>GMGOAL_MJ_DAT0,X
		STA	!PAUSE_SCR+(20H*0DH+04H)*2,Y
		LDA	>GMGOAL_MJ_DAT1,X
		STA	!PAUSE_SCR+(20H*0EH+04H)*2,Y
;
		LDA	<WORK0		; 点線
		ASL	A
		TAX
		LDA	>BG3LINEDAT1,X
		STA	!PAUSE_SCR+(20H*10H+04H)*2,Y
;
		LDX	<WORK0
		CPX	#GMGOAL_SCR5-GMGOAL_SCR4
		BCS	GMPS_COL_IN_46
		LDA	>GMGOAL_SCR4,X	; "ＴＯＴＡＬ ＰＯＩＮＴ"
		AND	#000FFH
		TAX
		LDA	>GMGOAL_MJ_DAT0,X
		ORA	#00400H
		STA	!PAUSE_SCR+(20H*11H+07H)*2,Y
		LDA	>GMGOAL_MJ_DAT1,X
		ORA	#00400H
		STA	!PAUSE_SCR+(20H*12H+07H)*2,Y
;
GMPS_COL_IN_46	EQU	$
		LDX	<WORK0
		CPX	#GMGOAL_SCR6-GMGOAL_SCR5
		BCS	GMPS_COL_IN_48
		LDA	>GMGOAL_SCR5,X	; "ＨＩＧＨ ＳＣＯＲＥ"
		AND	#000FFH
		TAX
		LDA	>GMGOAL_MJ_DAT0,X
		STA	!PAUSE_SCR+(20H*14H+07H)*2,Y
		LDA	>GMGOAL_MJ_DAT1,X
		STA	!PAUSE_SCR+(20H*15H+07H)*2,Y
;
GMPS_COL_IN_48	EQU	$
		INY
		INY
		INC	<WORK0
		LDX	<WORK0
		CPX	#GMGOAL_SCR2-GMGOAL_SCR1
		BCS	GMPS_COL_IN_49
		JMP	GMPS_COL_IN_40
;
GMPS_COL_IN_49	EQU	$
;
		JSR	GMPS_TIMER
;
		JSR	GMPS_COIN
;
		JSR	GMPS_FLOWER
;
		JSR	GMPS_TOTAL
;
		JSR	GMPS_HI_SCORE
;
		JSR	ITEM_INIT
;
		JSR	GMPS_MATER
;
		I16			; index 16bit mode
		LDY	#BANK PAUSE_SCR
		STY	<WORK1		;(WK1) <- 転送元バンク
		LDY	#03400H		; Y <---- ＶＲＡＭアドレス
		LDX	#PAUSE_SCR	; X <---- 転送元アドレス
		LDA	#(00020H*1CH)*2 ; A <---- 転送バイト数
		JSL	>VRAMDX_ST
		I8			; index 8bit mode
;
		PLB
;
		LDX	#009H
		STX	!BGMODE
		LDX	#034H
		STX	!BG3SCF
		LDX	#002H
		STX	!BG34CH
		STX	!NMITYP
		LDA	#00014H
		STA	!MANSEL
		RTS
;
;++++++++++++++++++++++++++++++++++++++++++++++++
;+		タイマー点数表示		+
;++++++++++++++++++++++++++++++++++++++++++++++++
GMPS_TIMER	EQU	$
		LDY	#000
		STZ	<WORK0
		LDA	!TIMER
		BEQ	GMPS_TIMER_060
GMPS_TIMER_020	EQU	$
		CMP	#TIMER_DEC
		BCC	GMPS_TIMER_040
		SEC
		SBC	#TIMER_DEC
		INC	<WORK0
		BRA	GMPS_TIMER_020
;
GMPS_TIMER_040	EQU	$
		LDA	<WORK0
		CMP	#TIMER_MAX
		BCC	GMPS_TIMER_060
		LDA	#TIMER_MAX
GMPS_TIMER_060	EQU	$
		STA	<WORK0
GMPS_TIMER_070	EQU	$
		CMP	#00010
		BCC	GMPS_TIMER_080
		SBC	#00010
		INY
		BRA	GMPS_TIMER_070
;
GMPS_TIMER_080	EQU	$
		ASL	A
		TAX
		LDA	#PAUSE_SCR+(20H*07H+11H)*2
		STA	<WORK10
		LDA	#PAUSE_SCR+(20H*07H+18H)*2
		STA	<WORK12
		LDA	#PAUSE_SCR+(20H*08H+11H)*2
		STA	<WORK14
		LDA	#PAUSE_SCR+(20H*08H+18H)*2
		STA	<WORK16
		STZ	<WORK18
		JSR	GMPS_COL_IN_SB
		RTS
;
;++++++++++++++++++++++++++++++++++++++++++++++++
;+		コイン点数表示			+
;++++++++++++++++++++++++++++++++++++++++++++++++
GMPS_COIN	EQU	$
		LDY	#000
		LDA	!CORS_COIN
		CMP	#COIN_MAX	; ＭＡＸ以上あるか ?
		BCC	GMPS_CIN_020	;	NO -> GMPS_CIN_020
;;;TEST;;;		LDA	#COIN_MAX
GMPS_CIN_020	EQU	$
		STA	<WORK2
GMPS_CIN_040	EQU	$
		CMP	#00010
		BCC	GMPS_CIN_060
		SBC	#00010
		INY
		BRA	GMPS_CIN_040
;
GMPS_CIN_060	EQU	$
		ASL	A
		TAX
		LDA	#PAUSE_SCR+(20H*0AH+11H)*2
		STA	<WORK10
		LDA	#PAUSE_SCR+(20H*0AH+18H)*2
		STA	<WORK12
		LDA	#PAUSE_SCR+(20H*0BH+11H)*2
		STA	<WORK14
		LDA	#PAUSE_SCR+(20H*0BH+18H)*2
		STA	<WORK16
		LDA	#00400H
		STA	<WORK18
		JSR	GMPS_COL_IN_SB
		RTS
;
;++++++++++++++++++++++++++++++++++++++++++++++++
;+		フラワー点数表示		+
;++++++++++++++++++++++++++++++++++++++++++++++++
GMPS_FLOWER	EQU	$
		LDA	!FRWR_P
		BEQ	GMPS_FLWR_090
		ASL	A
		TAX
		LDA	>GMGOAL_KAZ_DT0,X
		STA	!PAUSE_SCR+(20H*0DH+13H)*2
		STA	!PAUSE_SCR+(20H*0DH+18H)*2
		LDA	>GMGOAL_KAZ_DT1,X
		STA	!PAUSE_SCR+(20H*0EH+13H)*2
		STA	!PAUSE_SCR+(20H*0EH+18H)*2
GMPS_FLWR_090	EQU	$
		RTS
;
;++++++++++++++++++++++++++++++++++++++++++++++++
;+		合計点数表示			+
;++++++++++++++++++++++++++++++++++++++++++++++++
GMPS_TOTAL	EQU	$
		LDY	#000
		LDA	!FRWR_P
		ASL	A
		STA	<WORKE
		ASL	A
		ASL	A
		ADC	<WORKE
		CLC
		ADC	<WORK0
		CLC
		ADC	<WORK2
		STA	<WORK0
		CMP	#00100		; １００点 ?
		BCC	GMPS_TTL_040	;	NO -> GMPS_TTL_040
		LDA	#(S100-S00)/2
		TAY
		INY
		BRA	GMPS_TTL_060
;
GMPS_TTL_040	EQU	$
		CMP	#00010
		BCC	GMPS_TTL_060
		SBC	#00010
		INY
		BRA	GMPS_TTL_040
;
GMPS_TTL_060	EQU	$
		ASL	A
		TAX
		LDA	#PAUSE_SCR+(20H*11H+18H)*2
		STA	<WORK10
		STA	<WORK12
		LDA	#PAUSE_SCR+(20H*12H+18H)*2
		STA	<WORK14
		STA	<WORK16
		LDA	#00400H
		STA	<WORK18
		JSR	GMPS_COL_IN_SB
		RTS
;
;++++++++++++++++++++++++++++++++++++++++++++++++
;+		ハイスコア点数表示		+
;++++++++++++++++++++++++++++++++++++++++++++++++
GMPS_HI_SCORE	EQU	$
		LDY	#000
		LDX	!MAPOINT
		LDA	!HISCEBF,X
		AND	#000FFH
		CMP	<WORK0
		BCS	GMPS_HI_020
		LDA	<WORK0
GMPS_HI_020	EQU	$
		CMP	#00100		; １００点 ?
		BCC	GMPS_HI_040	;	NO -> GMPS_HI_040
		LDA	#(S100-S00)/2
		TAY
		INY
		BRA	GMPS_HI_060
GMPS_HI_040	EQU	$
		CMP	#00010
		BCC	GMPS_HI_060
		SBC	#00010
		INY
		BRA	GMPS_HI_040
;
GMPS_HI_060	EQU	$
		ASL	A
		TAX
		LDA	#PAUSE_SCR+(20H*14H+18H)*2
		STA	<WORK10
		STA	<WORK12
		LDA	#PAUSE_SCR+(20H*15H+18H)*2
		STA	<WORK14
		STA	<WORK16
		STZ	<WORK18
		JSR	GMPS_COL_IN_SB
		RTS
;
;++++++++++++++++++++++++++++++++++++++++++++++++
;+	アイテム セレクト イニシャルセット	+
;++++++++++++++++++++++++++++++++++++++++++++++++
ITEM_INIT	EQU	$
		PHB
		PHK
		PLB
		STZ	!ITEMDSP+0
		STZ	!ITEMDSP+1
		M8			; memory 8bit mode
		LDA	!ITEMBUF	; アイテム 持っているか ?
		BEQ	ITMINT_020	;	NO -> ITMINT_020
;
		LDY	#000H
		LDA	!ITEMPNT
		BNE	ITMINT_010
		STZ	!ITMBFPOS
		INC	!ITEMPNT
ITMINT_010	EQU	$		; アイテムＮＯ. セット
		LDA	!ITMBFPOS
		CLC
		ADC	!ITEMPNT
		DEC	A
		TAX
;
ITMINT_015	EQU	$
		LDA	!ITEMBUF,X	; 表示用バッファ セット
		STA	!ITEMDSP,Y
		INX
		INY
		CPY	#003
		BCC	ITMINT_015
;
ITMINT_020	EQU	$
		M16			; memory 16bit mode
		STZ	!ITEMNO
		PLB
		RTS
;
;++++++++++++++++++++++++++++++++++++++++++++++++
;+		メーター			+
;++++++++++++++++++++++++++++++++++++++++++++++++
GMPS_MATER	EQU	$
		LDX	#000
GMPS_MTR_020	EQU	$
		LDA	#09D8BH
		STA	!PAUSE_SCR+(20H*17H+00H)*2,X
		LDA	#01D8BH
		STA	!PAUSE_SCR+(20H*1AH+00H)*2,X
		LDA	#009AFH
		STA	!PAUSE_SCR+(20H*18H+00H)*2,X
		STA	!PAUSE_SCR+(20H*19H+00H)*2,X
		INX
		INX
		CPX	#020H*2
		BCC	GMPS_MTR_020
;
		LDA	#0098CH			; " ヨッシー "
		STA	!PAUSE_SCR+(20H*18H+01H)*2
		INC	A
		STA	!PAUSE_SCR+(20H*18H+02H)*2
		INC	A
		STA	!PAUSE_SCR+(20H*19H+01H)*2
		INC	A
		STA	!PAUSE_SCR+(20H*19H+02H)*2
;
		LDX	#000
		LDA	!PLCONT			; 残り人数
GMPS_MTR_040	EQU	$
		CMP	#00010
		BCC	GMPS_MTR_045
		SBC	#00010
		INX
		BRA	GMPS_MTR_040
GMPS_MTR_045	EQU	$
		ORA	#00DC0H
		STA	!PAUSE_SCR+(20H*19H+04H)*2
		TXA
		ORA	#00DC0H
		STA	!PAUSE_SCR+(20H*19H+03H)*2
;
		LDA	#00DD2H			; " コイン "
		STA	!PAUSE_SCR+(20H*18H+06H)*2
		INC	A
		STA	!PAUSE_SCR+(20H*18H+07H)*2
		INC	A
		STA	!PAUSE_SCR+(20H*19H+06H)*2
		INC	A
		STA	!PAUSE_SCR+(20H*19H+07H)*2
;
		LDX	#000
		LDA	!COIN_CNT		; コイン枚数
GMPS_MTR_060	EQU	$
		CMP	#00010
		BCC	GMPS_MTR_065
		SBC	#00010
		INX
		BRA	GMPS_MTR_060
GMPS_MTR_065	EQU	$
		ORA	#00DC0H
		STA	!PAUSE_SCR+(20H*19H+09H)*2
		TXA
		ORA	#00DC0H
		STA	!PAUSE_SCR+(20H*19H+08H)*2
;
		JSR	ITEM_WAKU
;
		M8			; memory 8bit mode
		PHB
		PHK
		PLB
		JSR	LTRTARWST
		PLB
		M16			; memory 16bit mode
;
		RTS
;
;++++++++++++++++++++++++++++++++++++++++
;+		点数セット		+
;+		in			+
;+		X <- read data index	+
;+		Y <-	"       "	+
;+		wk10,11 : buffer address+
;+		  12,13 :	"       +
;+		  14,15 :	"       +
;+		  16,17 :	"       +
;+		  18,19 : アトリビュート+
;++++++++++++++++++++++++++++++++++++++++
GMPS_COL_IN_SB	EQU	$
		PHY
		LDY	#002
		LDA	>GMGOAL_KAZ_DT0,X
		ORA	<WORK18
		STA	(<WORK10),Y
		STA	(<WORK12),Y
		LDA	>GMGOAL_KAZ_DT1,X
		ORA	<WORK18
		STA	(<WORK14),Y
		STA	(<WORK16),Y
		PLY
		BEQ	GMPS_COL_IN_PS
		TYA
		ASL	A
		TAX
		LDA	>GMGOAL_KAZ_DT0,X
		ORA	<WORK18
		STA	(<WORK10)
		STA	(<WORK12)
		LDA	>GMGOAL_KAZ_DT1,X
		ORA	<WORK18
		STA	(<WORK14)
		STA	(<WORK16)
GMPS_COL_IN_PS	EQU	$
		RTS
;
;++++++++++++++++++++++++++++++++
;+	アイテム枠 セット	+
;++++++++++++++++++++++++++++++++
ITEM_WAKU	EQU	$
		LDA	#01DACH
		STA	!PAUSE_SCR+(20H*17H+14H)*2
		LDA	#01D9CH
		STA	!PAUSE_SCR+(20H*18H+14H)*2
		STA	!PAUSE_SCR+(20H*19H+14H)*2
		LDA	#09DACH
		STA	!PAUSE_SCR+(20H*1AH+14H)*2
		LDA	#01DADH
		STA	!PAUSE_SCR+(20H*17H+15H)*2
		STA	!PAUSE_SCR+(20H*17H+18H)*2
		STA	!PAUSE_SCR+(20H*17H+1BH)*2
		LDA	#05DADH
		STA	!PAUSE_SCR+(20H*17H+16H)*2
		STA	!PAUSE_SCR+(20H*17H+19H)*2
		STA	!PAUSE_SCR+(20H*17H+1CH)*2
		LDA	#09DADH
		STA	!PAUSE_SCR+(20H*1AH+15H)*2
		STA	!PAUSE_SCR+(20H*1AH+18H)*2
		STA	!PAUSE_SCR+(20H*1AH+1BH)*2
		LDA	#0DDADH
		STA	!PAUSE_SCR+(20H*1AH+16H)*2
		STA	!PAUSE_SCR+(20H*1AH+19H)*2
		STA	!PAUSE_SCR+(20H*1AH+1CH)*2
		LDA	#01DAEH
		STA	!PAUSE_SCR+(20H*17H+17H)*2
		STA	!PAUSE_SCR+(20H*17H+1AH)*2
		LDA	#09DAEH
		STA	!PAUSE_SCR+(20H*1AH+17H)*2
		STA	!PAUSE_SCR+(20H*1AH+1AH)*2
		LDA	#01D9EH
		STA	!PAUSE_SCR+(20H*18H+17H)*2
		STA	!PAUSE_SCR+(20H*18H+1AH)*2
		STA	!PAUSE_SCR+(20H*19H+17H)*2
		STA	!PAUSE_SCR+(20H*19H+1AH)*2
		LDA	#05DACH
		STA	!PAUSE_SCR+(20H*17H+1DH)*2
		LDA	#05D9CH
		STA	!PAUSE_SCR+(20H*18H+1DH)*2
		STA	!PAUSE_SCR+(20H*19H+1DH)*2
		LDA	#0DDACH
		STA	!PAUSE_SCR+(20H*1AH+1DH)*2
		LDA	#0117FH
		STA	!PAUSE_SCR+(20H*18H+15H)*2
		STA	!PAUSE_SCR+(20H*19H+15H)*2
		STA	!PAUSE_SCR+(20H*18H+16H)*2
		STA	!PAUSE_SCR+(20H*19H+16H)*2
		STA	!PAUSE_SCR+(20H*18H+18H)*2
		STA	!PAUSE_SCR+(20H*19H+18H)*2
		STA	!PAUSE_SCR+(20H*18H+19H)*2
		STA	!PAUSE_SCR+(20H*19H+19H)*2
		STA	!PAUSE_SCR+(20H*18H+1BH)*2
		STA	!PAUSE_SCR+(20H*19H+1BH)*2
		STA	!PAUSE_SCR+(20H*18H+1CH)*2
		STA	!PAUSE_SCR+(20H*19H+1CH)*2
		RTS
