;************************************************************************
;*									*
;*	title name	: "yossy"					*
;*	proccess	: mario chip program.7				*
;*	file name	: ys_chip7					*
;*									*
;************************************************************************
;
;
		SALL
;
		include		ys_chip.inc
		include		ys_chip2.inc
;
		XALL
;
;
;------------------------------------------------------------------------
;-		global symbol						-
;------------------------------------------------------------------------
;
;------------------------------------------------------------------------
;-		extern symbol						-
;------------------------------------------------------------------------
;
;-------------< ys_chip0 >-----------------------------------------------
		EXT	COS,SIN,LCOS,LSIN
;
;-------------< ys_msub0 >-----------------------------------------------
;
;-------------< 敵Ｎｏ． >---------------------------------------
		EXT	FKPBM,KPBOM
;
;-------------< ys_msge0 >-----------------------------------------------
		EXT	MSG_FONT
;
;------------------------------------------------------------------------
;-		define symbol						-
;------------------------------------------------------------------------
UNDTADD		EQU	4c32a4H
UNDATA		EQU	4c33f2H
;
;
;
;
;************************************************************************
;*									*
;*		program start						*
;*									*
;************************************************************************
;
;
Group_9		GROUP	S_chip_7
S_chip_7	SECT	REL
;
;
;************************************************************************
;*		＜エンディングビットマップ用＞				*
;*		３Ｄ表現メイン処理					*
;*			入力 ： (R1)   <-- スクリーン面Ｚ座標		*
;*				(R2)   <--	”     Ｙ座標		*
;*				(R3)   <--	”     Ｘ座標		*
;*				(R5)   <-- バッファ アドレス		*
;*				(CWK0) <-- データ数			*
;************************************************************************
;
E_BITMAP	EQU	$
		SUB	R0		;プロットモードセット
		CMODE
;
		SMS	R1,CWORK1	;(CWK1) <-- スクリーン面Ｚ座標
		SMS	R2,CWORK2	;(CWK2) <--	 ”	Ｙ座標
		SMS	R3,CWORK3	;(CWK3) <--	 ”	Ｘ座標
;
		CACHE
;
E_BITMAP_0050
		LDW	(R5)		;(R0) <-- ＯＢＪＺ座標
		INC	R0
		BNE	E_BITMAP_0060	;データＥＮＤ？ ( no:E_BITMAP_0060 )
		DEC	R0
;
		RPIX
;
		STOP
		NOP
;
E_BITMAP_0060
		SUB	R1
		BMI	E_BITMAP_0110	;スクリーン面より手前？ ( yes:E_BITMAP_0110 )
		INC	R5
;
E_BITMAP_0100
		IWT	R6,#01C0H
		SUB	R6
		BCC	E_BITMAP_0150	;スクリーン面から遠すぎ？ ( no:E_BITMAP_0150 )
		ADD	R6
;
E_BITMAP_0110
		WITH	R5
		ADD	#6-1
		BRA	E_BITMAP_0050+1
		LDW	(R5)
;
E_BITMAP_0150
		MOVE	R7,R0		;(R7) <-- スクリーン面からのＺ距離
		IWT	R6,#040H	;スクリーン面Ｚ座標補正値
		ADD	R6
		ADD	R0
		IWT	R6,#BITMAP_DIV
		ADD	R6
		TO	R6		;(R6) <-- スクリーン面での倍率
		LDW	(R0)
;
		INC	R5
		LDB	(R5)		;(R0) <-- ＯＢＪＸ座標
		SEX
		SUB	R3
		LMULT
		WITH	R4
		HIB
		LOB
		SWAP
		OR	R4
		IBT	R4,#(24*8)/2
		TO	R3		;(R3) <-- スクリーン面表示Ｘ座標
		ADD	R4
;
		INC	R5
		LDB	(R5)		;(R0) <-- ＯＢＪＹ座標
		SEX
		SUB	R2
		LMULT
		WITH	R4
		HIB
		LOB
		SWAP
		OR	R4
		IBT	R4,#32
		TO	R2		;(R2) <-- スクリーン面表示Ｙ座標
		ADD	R4
;
		INC	R5
		LDB	(R5)		;(R0) <-- キャラクター基本倍率
		ADD	R0		;×４（１００Ｈ←０４０Ｈ）
		ADD	R0		;
		LMULT
		WITH	R4
		HIB
		LOB
		SWAP
		TO	R6		;(R6) <-- スクリーン面でのキャラクター倍率
		OR	R4
;
		IBT	R0,#BANK BITMAP_OBJ_TBL ;ＯＢＪタイプデータアドレス（Ｂ）セット
		ROMB
;
		INC	R5
		LDB	(R5)		;(R0) <-- ＯＢＪタイプＮｏ．＆パレットＮｏ．
		SMS	R5,REG5		;(R5) save
;
		IWT	R4,#11000000B
		TO	R5		;(R5) <-- パレットＮｏ．×４０Ｈ
		AND	R4
		BIC	R4
		MULT	#7		;×７
		IWT	R14,#BITMAP_OBJ_TBL
		TO	R14		;(R14) <-- ＯＢＪタイプデータアドレス（Ｌ，Ｈ）
		ADD	R14
;
		FROM	R7
		LSR
		LSR
		LSR
		IBT	R4,#030H
		AND	R4
		TO	R5		;(R5) <-- シェーディング
		OR	R5
;
		GETB			;(R0) <-- キャラクター中心Ｘ
		INC	R14
		SWAP			;×１００Ｈ
		FMULT
		ADC	R3
		MOVE	R3,R0		;(R3) <-- スクリーン面表示左上Ｘ座標
		IWT	R1,#24*8	;(R1) <-- ビットマップ最大Ｘ座標
		SUB	R1
		BPL	E_BITMAP_0152	;表示ＯＫ？ ( no:E_BITMAP_0152 )
		GETB			;(R0) <-- キャラクター中心Ｙ
;
		INC	R14
		SWAP
		FMULT
		ADC	R2
		MOVE	R2,R0		;(R2) <-- スクリーン面表示左上Ｙ座標
		IWT	R8,#16*8	;(R8) <-- ビットマップ最大Ｙ座標
		SUB	R8
		BPL	E_BITMAP_0152	;表示ＯＫ？ ( no:E_BITMAP_0152 )
		GETB			;(R0) <-- キャラクターＸ幅
;
		INC	R14
		SWAP
		FMULT
		TO	R9		;(R9) <-- スクリーン面表示右下Ｘ座標
		ADD	R3
		BMI	E_BITMAP_0152	;表示ＯＫ？ ( no:E_BITMAP_0152 )
		GETB			;(R0) <-- キャラクターＹ幅
;
		INC	R14
		SWAP
		FMULT
		TO	R10		;(R10) <-- スクリーン面表示右下Ｙ座標
		ADD	R2
		BPL	E_BITMAP_0154	;表示ＯＫ？ ( yes:E_BITMAP_0154 )
		GETB
;
E_BITMAP_0152
		mDJMP_X E_BITMAP_0600+1
		LMS	R1,CWORK1	;(R1) <-- スクリーン面Ｚ座標
;
E_BITMAP_0154
		INC	R14
		TO	R11		;(R11) <-- キャラクターアドレス（Ｌ，Ｈ）
		GETBH
		INC	R14
;
;------------------------------------------------------------------------
;-		＜キャラクターセット（１／倍率）計算＞			-
;-		除算							-
;-			in :						-
;-				(R7) <-- 被除数				-
;-				(R6) <-- 除数				-
;-			out :						-
;-				(R4) <-- 商				-
;-				(R0) <-- 余り				-
;------------------------------------------------------------------------
		IBT	R7,#01H		;(R7) <-- １．０
;
		SUB	R0		;(R0) <-- アキュムレータをクリア
		MOVE	R4,R0		;(R4) <-- 商をクリア
;
		IBT	R12,#32
		IWT	R13,#E_BITMAP_0160+1
E_BITMAP_0160
		WITH	R4		;商を左へシフト
		ADD	R4
		WITH	R7		;被除数を左へシフト
		ADD	R7
		ROL			;被除数をアキュムレータにシフト
		SUB	R6		;アキュムレータと除数を比較
		BCC	E_BITMAP_0170	;アキュムレータ＜除数であれば、減算を省略
		ADD	R6
;
		SUB	R6		;アキュムレータから除数を引く
		INC	R4		;商に１を加える
E_BITMAP_0170
		LOOP
		WITH	R4
;
		MOVE	R6,R4		;(R6) <-- スクリーン面でのキャラクター倍率
;
		GETB
		IBT	R4,#7FH
		AND	R4
		ROMB			;キャラクターアドレス（Ｂ）セット
;
		GETBS
		IWT	R4,#8000H
		AND	R4
		TO	R5		;(R5) <-- 上位ｏｒ下位４ビットモード
		OR	R5
;
;------------------------------------------------------------------------
;-		キャラクター拡大、縮小					-
;-			入力 ： (R1)  <-- ビットマップ最大Ｘ座標	-
;-				(R8)  <-- ビットマップ最大Ｙ座標	-
;-				(R2)  <-- 左上ビットマップ座標＿Ｙ	-
;-				(R3)  <--	   ”	      ＿Ｘ	-
;-				(R5)  <-- パレットＮｏ．		-
;-				(R6)  <-- 倍率（１００Ｈ＝１．０）	-
;-				(R9)  <-- 右下ビットマップ座標＿Ｘ	-
;-				(R10) <--	    ”	      ＿Ｙ	-
;-				(R11) <-- キャラクターアドレス（Ｌ，Ｈ）-
;------------------------------------------------------------------------
;
;-------------- キャラクタースタートポインター計算 ----------------------
		IBT	R7,#0		;(R7) <-- キャラクタースタートポインターＹ
		MOVES	R0,R2
		BPL	E_BITMAP_0200	;ビットマップエリア上端オーバー？ ( no:E_BITMAP_0200 )
		NOT
;
		INC	R0
		LMULT
		MOVE	R7,R4		;(R7) <-- キャラクタースタートポインターＹ
		IBT	R2,#0
E_BITMAP_0200
		IBT	R4,#0		;(R4) <-- キャラクタースタートポインターＸ
		MOVES	R0,R3
		BPL	E_BITMAP_0250	;ビットマップエリア左端オーバー？ ( no:E_BITMAP_0250 )
		NOT
;
		INC	R0
		LMULT			;(R4) <-- キャラクタースタートポインターＸ
		IBT	R3,#0
E_BITMAP_0250
;
;-------------- キャラクター書き込み ------------------------------------
		DEC	R1		;[ IBT R1,#24*8-1 ]
		FROM	R1
		SUB	R9
		BCC	E_BITMAP_0300
		ADD	R9
;
		FROM	R9
E_BITMAP_0300
		TO	R9		;(R9) <-- X loop no.
		SUB	R3
		INC	R9
;
		DEC	R8		;[ IBT R8,#16*8-1 ]
		FROM	R8
		SUB	R10
		BCC	E_BITMAP_0350
		ADD	R10
;
		FROM	R10
E_BITMAP_0350
		TO	R10
		SUB	R2
		INC	R10
;
		IWT	R13,#E_BITMAP_0450 ;(R13) <-- loop address
E_BITMAP_0400
		MOVE	R1,R3		;(R1) <-- plot start X pos set
		MOVE	R8,R4		;(R8) <-- PX
;
		MOVE	R12,R9		;(R12) <-- X loop no.
E_BITMAP_0450
		MERGE
		TO	R14
		ADD	R11
;
		WITH	R8
		ADD	R6
;
		MOVES	R5,R5
		BPL	E_BITMAP_0500	;high color ? ( no:E_BITMAP_0500 )
		GETB			;color read
;
		LSR
		LSR
		LSR
		LSR
E_BITMAP_0500
		AND	#0FH
		BEQ	E_BITMAP_0550	;ヌキ？ ( yes:E_BITMAP_0550 )
		ADD	R5
;
		COLOUR
		LOOP
		PLOT			;pset
;
		WITH	R7
		ADD	R6
;
		DEC	R10
		BNE	E_BITMAP_0400
		INC	R2		;Y pos +1
;
		BRA	E_BITMAP_0600+1
		LMS	R1,CWORK1	;(R1) <-- スクリーン面Ｚ座標
;
E_BITMAP_0550
		LOOP
		INC	R1
;
		WITH	R7
		ADD	R6
;
		DEC	R10
		BNE	E_BITMAP_0400
		INC	R2		;Y pos +1
;
E_BITMAP_0600
		LMS	R1,CWORK1	;(R1) <-- スクリーン面Ｚ座標
		LMS	R2,CWORK2	;(R2) <--      ”     Ｙ座標
		LMS	R3,CWORK3	;(R3) <--      ”     Ｘ座標
;
		LMS	R5,REG5		;(R5) load
		mDJMP_X E_BITMAP_0050
		INC	R5
;
;
;
		mEND_NOP
;
;
;
;------------------------------------------------------------------------
;-		ＯＢＪタイプデータ					-
;------------------------------------------------------------------------
BITMAP_OBJ_TBL	EQU	$
;			  +---------------- キャラクター中心Ｘ
;			  |    +--------------- キャラクター中心Ｙ
;			  |    |    +-------------- キャラクターＸ幅
;			  |    |    |	 +------------- キャラクターＹ幅
;			  |    |    |	 |     +----------- キャラクターアドレス
;			  |    |    |	 |     |	 （バンクが８０Ｈ以上は上位４ビット）
;			  |    |    |	 |     |
;			  |    |    |	 |     |
;			  |    |    |	 |     |
;
;-------------- 鳥−１ --------------------------------------------------
BMP_OBJ_TORI00	EQU	$
		BYTE	0F4H,0F0H,018H,028H
		LWORD			804000H+CIPCHD5+0000H*8
;
;-------------- 鳥−２ --------------------------------------------------
BMP_OBJ_TORI01	EQU	$
		BYTE	0E8H,0F3H,02FH,028H
		LWORD			804000H+CIPCHD5+0003H*8
;
;-------------- 鳥−３ --------------------------------------------------
BMP_OBJ_TORI02	EQU	$
		BYTE	0E4H,0FAH,037H,01FH
		LWORD			800000H+CIPCHD5+0010H*8
;
;-------------- 鳥−４ --------------------------------------------------
BMP_OBJ_TORI03	EQU	$
		BYTE	0E0H,005H,03FH,00FH
		LWORD			800000H+CIPCHD5+0008H*8
;
;-------------- 鳥−５ --------------------------------------------------
BMP_OBJ_TORI04	EQU	$
		BYTE	0E4H,004H,037H,017H
		LWORD			804000H+CIPCHD5+0506H*8
;
;-------------- 鳥−６ --------------------------------------------------
BMP_OBJ_TORI05	EQU	$
		BYTE	0F0H,004H,01FH,01FH
		LWORD			800000H+CIPCHD5+040CH*8
;
;-------------- 鳥−７ --------------------------------------------------
BMP_OBJ_TORI06	EQU	$
		BYTE	0F0H,004H,020H,01FH
		LWORD			800000H+CIPCHD5+0004H*8
;
;-------------- 鳥−８ --------------------------------------------------
BMP_OBJ_TORI07	EQU	$
		BYTE	0F0H,001H,020H,01FH
		LWORD			800000H+CIPCHD5+0000H*8
;
;-------------- 鳥−９ --------------------------------------------------
BMP_OBJ_TORI08	EQU	$
		BYTE	0E8H,005H,02FH,010H
		LWORD			800000H+CIPCHD5+0208H*8
;
;-------------- 鳥−１０ ------------------------------------------------
BMP_OBJ_TORI09	EQU	$
		BYTE	0E8H,002H,02FH,017H
		LWORD			804000H+CIPCHD5+0500H*8
;
;-------------- 鳥−１１ ------------------------------------------------
BMP_OBJ_TORI10	EQU	$
		BYTE	0E8H,0FFH,030H,017H
		LWORD			800000H+CIPCHD5+0406H*8
;
;-------------- 鳥−１２ ------------------------------------------------
BMP_OBJ_TORI11	EQU	$
		BYTE	0E8H,0F9H,02FH,01FH
		LWORD			800000H+CIPCHD5+0400H*8
;
;-------------- 鳥−１３ ------------------------------------------------
BMP_OBJ_TORI12	EQU	$
		BYTE	0F4H,0F0H,017H,028H
		LWORD			804000H+CIPCHD5+0009H*8
;
;-------------- 山−１ --------------------------------------------------
BMP_OBJ_YAMA0	EQU	$
		BYTE	0E8H,0C0H,02FH,03FH
		LWORD			000000H+CIPCHD5+0000H*8
;
;-------------- 山−２ --------------------------------------------------
BMP_OBJ_YAMA1	EQU	$
		BYTE	0F8H,0E8H,00FH,017H
		LWORD			000000H+CIPCHD5+0506H*8
;
;-------------- 山−３ , 山−４ -----------------------------------------
BMP_OBJ_YAMA2	EQU	$
BMP_OBJ_YAMA3	EQU	$
		BYTE	0E8H,0C0H,02FH,03FH
		LWORD			000000H+CIPCHD5+0010H*8
;
;-------------- 雲−１ --------------------------------------------------
BMP_OBJ_KUMO0	EQU	$
		BYTE	0E8H,0E8H,02FH,027H
		LWORD			000000H+CIPCHD5+0006H*8
;
;-------------- 雲−２ --------------------------------------------------
BMP_OBJ_KUMO1	EQU	$
		BYTE	0F0H,0D0H,01FH,02FH
		LWORD			000000H+CIPCHD5+000CH*8
;
;-------------- 雲−３ --------------------------------------------------
BMP_OBJ_KUMO2	EQU	$
		BYTE	0F0H,0F4H,01FH,017H
		LWORD			000000H+CIPCHD5+0508H*8
;
;-------------- 雲−４ --------------------------------------------------
BMP_OBJ_KUMO3	EQU	$
		BYTE	0F0H,0F8H,01FH,00FH
		LWORD			000000H+CIPCHD5+060CH*8
;
;-------------- 巨大雲 --------------------------------------------------
BMP_OBJ_BIGKUM	EQU	$
		BYTE	0C0H,0C8H,07FH,037H
		LWORD			804000H+CIPCHD5+0110H*8
;
;-------------- 家 ------------------------------------------------------
BMP_OBJ_HOME	EQU	$
		BYTE	0D8H,0C0H,04FH,047H
		LWORD			000000H+CIPCHD5+0016H*8
;
;-------------- 丘 ------------------------------------------------------
BMP_OBJ_OKA	EQU	$
		BYTE	0C0H,0F8H,07FH,017H
		LWORD			004000H+CIPCHD5+0510H*8
;
;-------------- 上草 ----------------------------------------------------
BMP_OBJ_UKS	EQU	$
		BYTE	0D8H,0E0H,050H,040H
		LWORD			004000H+CIPCHD5+0006H*8
;
;-------------- 下草 １ -------------------------------------------------
BMP_OBJ_DKS0	EQU	$
		BYTE	0E8H,0E0H,02FH,03FH
		LWORD			004000H+CIPCHD5+0000H*8
;
;-------------- 下草 ２ -------------------------------------------------
BMP_OBJ_DKS1	EQU	$
		BYTE	0DCH,0DCH,047H,047H
		LWORD			800000H+CIPCHD5+0017H*8
;
;-------------- 飛び立つ鳥 １ -------------------------------------------
BMP_OBJ_STORI0	EQU	$
		BYTE	0F8H,0F4H,010H,018H
		LWORD			804000H+CIPCHD5+000CH*8
;
;-------------- 飛び立つ鳥 ２ -------------------------------------------
BMP_OBJ_STORI1	EQU	$
		BYTE	0F8H,0F4H,010H,018H
		LWORD			804000H+CIPCHD5+000EH*8
;
;-------------- 飛び立つ鳥 ３ -------------------------------------------
BMP_OBJ_STORI2	EQU	$
		BYTE	0F8H,0F4H,010H,018H
		LWORD			000000H+CIPCHD5+0506H*8
;
;-------------- 飛び立つ鳥 ４ -------------------------------------------
BMP_OBJ_STORI3	EQU	$
		BYTE	0F4H,0F4H,018H,018H
		LWORD			004000H+CIPCHD5+0210H*8
;
;-------------- 飛び立つ鳥 ５ -------------------------------------------
BMP_OBJ_STORI4	EQU	$
		BYTE	0F4H,0F4H,018H,018H
		LWORD			004000H+CIPCHD5+0213H*8
;
;-------------- 飛び立つ鳥 ６ -------------------------------------------
BMP_OBJ_STORI5	EQU	$
		BYTE	0F4H,0F4H,018H,018H
		LWORD			804000H+CIPCHD5+030DH*8
;
;-------------- 飛び立つ鳥 ７ -------------------------------------------
BMP_OBJ_STORI6	EQU	$
		BYTE	0F4H,0F4H,018H,018H
		LWORD			800000H+CIPCHD5+0410H*8
;
;-------------- 飛ぶ鳥 １ -----------------------------------------------
BMP_OBJ_FTORI0	EQU	$
		BYTE	0F8H,0F8H,010H,010H
		LWORD			004000H+CIPCHD5+0010H*8
;
;-------------- 飛ぶ鳥 ２ -----------------------------------------------
BMP_OBJ_FTORI1	EQU	$
		BYTE	0F8H,0F8H,010H,010H
		LWORD			004000H+CIPCHD5+0012H*8
;
;-------------- 飛ぶ鳥 ３ -----------------------------------------------
BMP_OBJ_FTORI2	EQU	$
		BYTE	0F8H,0F8H,010H,010H
		LWORD			004000H+CIPCHD5+0014H*8
;
;-------------- 飛ぶ鳥 ４ -----------------------------------------------
BMP_OBJ_FTORI3	EQU	$
		BYTE	0F8H,0F8H,010H,010H
		LWORD			004000H+CIPCHD5+0116H*8
;
;-------------- 飛ぶ鳥 ５ -----------------------------------------------
BMP_OBJ_FTORI4	EQU	$
		BYTE	0F8H,0F8H,010H,010H
		LWORD			004000H+CIPCHD5+0118H*8
;
;-------------- 飛ぶ鳥 ６ -----------------------------------------------
BMP_OBJ_FTORI5	EQU	$
		BYTE	0F8H,0F8H,010H,010H
		LWORD			004000H+CIPCHD5+011AH*8
;
;-------------- 飛ぶ鳥 ７ -----------------------------------------------
BMP_OBJ_FTORI6	EQU	$
		BYTE	0F8H,0F8H,010H,010H
		LWORD			004000H+CIPCHD5+011CH*8
;
;-------------- 飛ぶ鳥 ８ -----------------------------------------------
BMP_OBJ_FTORI7	EQU	$
		BYTE	0F8H,0F8H,010H,010H
		LWORD			004000H+CIPCHD5+011EH*8
;
;-------------- 飛ぶ鳥 ９ -----------------------------------------------
BMP_OBJ_FTORI8	EQU	$
		BYTE	0F8H,0F8H,010H,010H
		LWORD			004000H+CIPCHD5+0316H*8
;
;-------------- 飛ぶ鳥 １０ ---------------------------------------------
BMP_OBJ_FTORI9	EQU	$
		BYTE	0F8H,0F8H,010H,010H
		LWORD			004000H+CIPCHD5+0318H*8
;
;-------------- 飛ぶ鳥 １１ ---------------------------------------------
BMP_OBJ_FTORIA	EQU	$
		BYTE	0F8H,0F8H,010H,010H
		LWORD			004000H+CIPCHD5+031AH*8
;
;
;
;
;
;************************************************************************
;*		大クッパグラデーションバッファセット			*
;*			in :						*
;*				(R0)  <-- グラデーションカラーアドレス	*
;*				(R14) <--	      ”		*
;************************************************************************
;
KOOPA_GRADATION EQU	$
		ROMB
		MOVE	R14,R14
;
		mJSR	COL_R_G_B_ST
;
		IWT	R8,#HDMABF0		  ;(R8)	 <-- ヌキカラーバッファポインター
		IWT	R9,#WOB7CHR		  ;(R9)	 <-- Ｒバッファポインター
		IWT	R10,#WOB7CHR+0D2H	  ;(R10) <-- Ｇ・Ｂバッファポインター
;
		CACHE
;
		IBT	R12,#04FH
		MOVE	R13,R15
KOOPA_GRAD_0050
		FROM	R1
		STW	(R8)
		INC	R8
		INC	R8
		FROM	R2
		STB	(R9)
		INC	R9
		FROM	R3
		STW	(R10)
		INC	R10
		LOOP
		INC	R10
;
		IBT	R7,#14
KOOPA_GRAD_0100
		mJSR	COL_R_G_B_ST
;
		IBT	R12,#004H
		MOVE	R13,R15
KOOPA_GRAD_0150
		FROM	R1
		STW	(R8)
		INC	R8
		INC	R8
		FROM	R2
		STB	(R9)
		INC	R9
		FROM	R3
		STW	(R10)
		INC	R10
		LOOP
		INC	R10
;
		DEC	R7
		BNE	KOOPA_GRAD_0100
		NOP
;
		mJSR	COL_R_G_B_ST
;
		IBT	R12,#0D2H-(050H+(14*004H))
		MOVE	R13,R15
KOOPA_GRAD_0200
		FROM	R1
		STW	(R8)
		INC	R8
		INC	R8
		FROM	R2
		STB	(R9)
		INC	R9
		FROM	R3
		STW	(R10)
		INC	R10
		LOOP
		INC	R10
;
		STOP
		NOP
;
;------------------------------------------------------------------------
;-		カラーＲ・Ｇ・Ｂ分割					-
;-			out :						-
;-				(R1) <-- カラーデータ			-
;-				(R2) <-- Ｒ				-
;-				(R3) <-- Ｇ・Ｂ				-
;------------------------------------------------------------------------
COL_R_G_B_ST
		GETB
		INC	R14
		GETBH
		INC	R14
		MOVE	R1,R0		;(R1) <-- セットカラー
;
		IBT	R5,#1FH		;(R5) <-- Ｒ・Ｇ・ＢＡＮＤデータ
		AND	R5
		IBT	R6,#00100000B	;(R6) <-- 固定カラーＲ・Ｇ・Ｂ選択データ
		TO	R2		;(R2) <-- Ｒ
		OR	R6
;
		FROM	R1
		LSR
		LSR
		LSR
		LSR
		LSR
		MOVE	R4,R0
		AND	R5
		WITH	R6		;[ IBT R6,#01000000B ]
		ADD	R6		;
		TO	R3		;(R3) <-- Ｇ
		OR	R6
;
		FROM	R4
		LSR
		LSR
		LSR
		LSR
		LSR
		AND	R5
		WITH	R6		;[ IWT R6,#10000000B ]
		ADD	R6		;
		OR	R6
		SWAP
		TO	R3		;(R3) <-- Ｇ・Ｂ
		OR	R3
;
		mRTS
;
;************************************************************************
;*		大クッパＯＡＭ３Ｄ変換					*
;*			in :						*
;*				(R1) <-- Ｘ座標				*
;*				(R2) <-- Ｙ座標				*
;*				(R3) <-- 基準Ｘ座標			*
;*				(R5) <-- ＯＡＭインデックス		*
;*				(R7) <-- ＯＡＭ数			*
;*			out :						*
;*				(R1) <-- ＯＡＭ座標Ｘ補正値		*
;*				(R2) <-- ＯＡＭ座標Ｙ補正値		*
;*				(R6) <-- ３Ｄ変換倍率			*
;*				(R9) <-- Ｚ座標				*
;************************************************************************
;
KOOPA_3D_OAM	EQU	$
		FROM	R1
		SUB	R3
		IWT	R9,#0100H
		TO	R9		;(R9) <-- Ｚ座標
		ADD	R9
;
;------------------------------------------------------------------------
;-		＜（１／倍率）計算＞					-
;-		除算							-
;-			in :						-
;-				(R9) <-- 除数				-
;-			out :						-
;-				(R6) <-- 商				-
;-				(R0) <-- 余り				-
;------------------------------------------------------------------------
		IBT	R10,#01H	;(R10) <-- １．０
;
		SUB	R0		;(R0) <-- アキュムレータをクリア
		MOVE	R6,R0		;(R6) <-- 商をクリア
;
		CACHE
;
		IBT	R12,#32
		IWT	R13,#KOOPA_3D_OAM_20+1
KOOPA_3D_OAM_20
		WITH	R6		;商を左へシフト
		ADD	R6
		WITH	R10		;被除数を左へシフト
		ADD	R10
		ROL			;被除数をアキュムレータにシフト
		SUB	R9		;アキュムレータと除数を比較
		BCC	KOOPA_3D_OAM_30 ;アキュムレータ＜除数であれば、減算を省略
		ADD	R9
;
		SUB	R9		;アキュムレータから除数を引く
		INC	R6		;商に１を加える
KOOPA_3D_OAM_30
		LOOP
		WITH	R6		;(R6) <-- スクリーン面での倍率
;
;------------------------------------------------------------------------
;-		３Ｄ変換						-
;------------------------------------------------------------------------
		LMS	R8,CESCCH1	;(R8)  <-- スクロールカウンターＨ
		IWT	R10,#080H-8	;(R10) <-- 画面中心Ｘ座標
;
		FROM	R3
		SUB	R8
		SUB	R10
		LMULT
		WITH	R4
		HIB
		LOB
		SWAP
		OR	R4
		ADD	R10
		ADD	R8
		TO	R1		;(R1) <-- ＯＡＭ座標Ｘ補正値
		SUB	R1
;
		LMS	R8,CESCCV1	;(R8)  <-- スクロールカウンターＶ
		IWT	R10,#090H-8	;(R10) <-- 画面中心Ｙ座標
;
		FROM	R2
		SUB	R8
		SUB	R10
		LMULT
		WITH	R4
		HIB
		LOB
		SWAP
		OR	R4
		ADD	R10
		ADD	R8
		TO	R2		;(R2) <-- ＯＡＭ座標Ｘ補正値
		SUB	R2
;
;------------------------------------------------------------------------
;-		ＯＡＭ補正						-
;------------------------------------------------------------------------
		IBT	R4,#8-2		;ＯＡＭインデックス加算値
;
		MOVE	R12,R7		;(R12) <-- ＯＡＭ数
		MOVE	R13,R15
KOOPA_3D_OAM_40
		LDW	(R5)
		ADD	R1
		SBK			;[ STW (R5) ]
		INC	R5
		INC	R5
		LDW	(R5)
		ADD	R2
;
		WITH	R5
		ADD	R4
		LOOP
		SBK			;[ STW (R5) ]
;
		STOP
		NOP
;
;
;****************************************************************
;*								*
;*		エンディング用 カラーフェード			*
;*				in				*
;*				R1 : 元カラーデータ		*
;*				R2 : チェンジ カラーデータ	*
;*				R3 : カラーデータ バッファ	*
;****************************************************************
END_COL_FADE	EQU	$
		CACHE			; キャッシュ スタート !!
;
		IBT	R10,#01FH
		LM	R0,CBTMP_COL_CNT
		INC	R0
		SBK
		MOVE	R6,R0
		IWT	R12,#00200H/2
		MOVE	R13,R15
;
		LDW	(R1)		; Ｒカラーの変換
		TO	R8
		AND	R10
		LDW	(R2)
		TO	R9
		AND	R10
		LINK	#004
		IWT	R15,#END_COL_SUB
		NOP
		MOVE	R5,R0
;
		LDW	(R1)		; Ｇカラーの変換
		ADD	R0
		ADD	R0
		ADD	R0
		SWAP
		TO	R8
		AND	R10
		LDW	(R2)
		ADD	R0
		ADD	R0
		ADD	R0
		SWAP
		TO	R9
		AND	R10
		LINK	#004
		IWT	R15,#END_COL_SUB
		NOP
		SWAP
		LSR
		LSR
		LSR
		TO	R5
		OR	R5
;
		LDW	(R1)		; Ｂカラーの変換
		SWAP
		LSR
		LSR
		TO	R8
		AND	R10
		LDW	(R2)
		SWAP
		LSR
		LSR
		TO	R9
		AND	R10
		LINK	#004
		IWT	R15,#END_COL_SUB
		NOP
		SWAP
		ADD	R0
		ADD	R0
;
		OR	R5
		STW	(R3)
		INC	R1
		INC	R1
		INC	R2
		INC	R2
		INC	R3
		LOOP
		INC	R3
;
END_COL_990
		STOP
		NOP
;
;++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;+	エンディング用 カラーフェード サブルーチン	+
;++++++++++++++++++++++++++++++++++++++++++++++++++++++++
END_COL_SUB
		FROM	R9
		SUB	R8
		MULT	R6
		ASR
		ASR
		ASR
		ASR
		ASR
		ADD	R8
		AND	R10
		MOVE	R15,R11
		NOP
;
;************************************************************************
;*		大クッパモード７スクリーン３Ｄ変換			*
;*			in :						*
;*				(R1) <-- Ｚ座標				*
;*				(R2) <-- Ｙ座標				*
;*				(R3) <-- Ｘ座標				*
;*				(R5) <-- 向き				*
;*			out :						*
;*				(R6) <-- ３Ｄ変換倍率			*
;*				(R9) <-- モード７倍率			*
;************************************************************************
;
KOOPA_3D_SET	EQU	$
		IWT	R6,#040H
		FROM	R1
		LMULT
		WITH	R4
		HIB
		LOB
		SWAP
		TO	R9		;(R9) <-- モード７倍率
		OR	R4
;
;------------------------------------------------------------------------
;-		＜（１／倍率）計算＞					-
;-		除算							-
;-			in :						-
;-				(R1) <-- 除数				-
;-			out :						-
;-				(R6) <-- 商				-
;-				(R0) <-- 余り				-
;------------------------------------------------------------------------
		IBT	R10,#01H	;(R10) <-- １．０
;
		SUB	R0		;(R0) <-- アキュムレータをクリア
		MOVE	R6,R0		;(R6) <-- 商をクリア
;
		CACHE
;
		IBT	R12,#32
		IWT	R13,#KOOPA_3D_SET_20+1
KOOPA_3D_SET_20
		WITH	R6		;商を左へシフト
		ADD	R6
		WITH	R10		;被除数を左へシフト
		ADD	R10
		ROL			;被除数をアキュムレータにシフト
		SUB	R1		;アキュムレータと除数を比較
		BCC	KOOPA_3D_SET_30 ;アキュムレータ＜除数であれば、減算を省略
		ADD	R1
;
		SUB	R1		;アキュムレータから除数を引く
		INC	R6		;商に１を加える
KOOPA_3D_SET_30
		LOOP
		WITH	R6		;(R6) <-- スクリーン面での倍率
;
;------------------------------------------------------------------------
;-		３Ｄ変換						-
;------------------------------------------------------------------------
		LMS	R8,CESCCH1	;(R8)  <-- スクロールカウンターＨ
		IWT	R10,#080H	;(R10) <-- 画面中心Ｘ座標
;
		FROM	R3
		SUB	R8
		SUB	R10
		LMULT
		WITH	R4
		HIB
		LOB
		SWAP
		OR	R4
		DEC	R5
		BPL	KOOPA_3D_SET_40 ;向き反転？ ( yes:KOOPA_3D_SET_40 )
		INC	R5
;
		NOT
		INC	R0
KOOPA_3D_SET_40
		IWT	R5,#0180H
		ADD	R5
		SMS	R0,CESCCH3	;クッパＸ座標セット
;
		LMS	R8,CESCCV1	;(R8)  <-- スクロールカウンターＶ
		IWT	R10,#090H	;(R10) <-- 画面中心Ｙ座標
;
		FROM	R2
		SUB	R8
		SUB	R10
		LMULT
		WITH	R4
		HIB
		LOB
		SWAP
		TO	R5
		OR	R4
		IWT	R0,#0180H
		SUB	R5
		SMS	R0,CESCCV3	;クッパＹ座標セット
;
		STOP
		NOP
;
;************************************************************************
;*		大クッパファイヤープレイヤー衝突チェック		*
;*			in :						*
;*				(R1) <-- ファイヤーインデックス		*
;*			out :						*
;*				(R0) <-- 衝突フラグ（ 0:衝突 )		*
;************************************************************************
;
KPFIR_CROSS	EQU	$
		mLDW0	CEPWIDX,R1
		DEC	R0
		BPL	KPFIR_CROSS_010
		INC	R0
;
		NOT
		INC	R0
KPFIR_CROSS_010
		IBT	R4,#040H
		SUB	R4
		BCS	KPFIR_CROSS_050 ;Ｘ距離ＯＫ？ ( no:KPFIR_CROSS_050 )
		ADD	R4
;
		TO	R2		;(R2) <-- Ｘ距離×Ｘ距離
		UMULT	R0
;
		mLDW0	CEPWIDY,R1
		DEC	R0
		BPL	KPFIR_CROSS_020
		INC	R0
;
		NOT
		INC	R0
KPFIR_CROSS_020
		SUB	R4
		BCS	KPFIR_CROSS_050 ;Ｙ距離ＯＫ？ ( no:KPFIR_CROSS_050 )
		ADD	R4
;
		UMULT	R0		;(R0) <-- Ｙ距離×Ｙ距離
		TO	R2		;(R2) <-- Ｘ距離×Ｘ距離＋Ｙ距離×Ｙ距離
		ADD	R2
;
		LMS	R0,CPWIDEY
		UMULT	R0		;(R0) <-- プレイヤーサイズ×プレイヤーサイズ
		IWT	R3,#02CH*02CH
		ADD	R3
		SUB	R2
		BCS	KPFIR_CROSS_100 ;衝突？ ( yes:KPFIR_CROSS_100 )
		SUB	R0		;[ IBT R0,#0 ] 当たった
;
KPFIR_CROSS_050
		IBT	R0,#1		;当たって無い
KPFIR_CROSS_100
		STOP
		NOP
;
;************************************************************************
;*		大クッパバクダンセットチェック				*
;*			out :						*
;*				(R1) <-- バクダン数			*
;************************************************************************
KPBOM_CHECK	EQU	$
		IBT	R1,#0		;(R1) <-- バクダン数
;
		IWT	R2,#CENMODE
		IWT	R3,#CENMYNO
		IWT	R4,#CENSHOT
		IWT	R5,#FKPBM
		IWT	R6,#KPBOM
		IWT	R7,#4
;
		CACHE
;
		IBT	R12,#CENNO
		MOVE	R13,R15
KPBOM_CHECK_050
		LDW	(R2)
		LOB
		BEQ	KPBOM_CHECK_150 ;敵存在？ ( no:KPBOM_CHECK_150 )
		NOP
;
		LDW	(R3)
		SUB	R5
		BEQ	KPBOM_CHECK_100 ;風船バクダン？ ( yes:KPBOM_CHECK_100 )
		ADD	R5
;
		SUB	R6
		BNE	KPBOM_CHECK_150 ;バクダン？ ( no:KPBOM_CHECK_150 )
		NOP
;
		LDW	(R4)
		SUB	#0
		BNE	KPBOM_CHECK_150 ;ショット中？ ( yes:KPBOM_CHECK_150 )
		NOP
;
KPBOM_CHECK_100
		INC	R1		;バクダン数ｕｐ
;
KPBOM_CHECK_150
		WITH	R2
		ADD	R7
		WITH	R3
		ADD	R7
		WITH	R4
		ADD	R7
;
		LOOP
		NOP
;
		STOP
		NOP
;
;************************************************************************
;*		エンディングメッセージＢＧ３スクリーンセット		*
;************************************************************************
ENDMSG_SCRST	EQU	$
		CACHE
;
		IWT	R3,#WOB7CHR+1000H ;(R3) <-- スクリーンセットバッファポインター
		IWT	R0,#3CEH	;(R3) <-- ヌキキャラＮｏ．
		IWT	R12,#800H/2
		MOVE	R13,R15
ENDMSG_SCRST_10
		STW	(R3)
		INC	R3
		LOOP
		INC	R3
;
		IWT	R1,#2000H			      ;(R1) <-- スクリーンスタートキャラＮｏ．
		IWT	R2,#WOB7CHR+1000H+(32*2*(16+1))+(2*2) ;(R2) <-- スクリーンスタートポインター
;
		IBT	R4,#20H-10H	;[ IBT R4,#10H ]
		IBT	R5,#0FH
		IBT	R7,#(32*2)-((24/2)*2)
		IBT	R8,#038H
		IBT	R10,#11		;(R10) <-- 行数
		IBT	R11,#24/2	;(R11) <-- 桁数
ENDMSG_SCRST_20
		MOVE	R0,R1
		MOVE	R12,R11
		MOVE	R13,R15
ENDMSG_SCRST_30
		STW	(R2)
		INC	R0
		INC	R0
		TO	R14		;[ * not break (R0) ]
		AND	R5
		BNE	ENDMSG_SCRST_40
		INC	R2
;
		ADD	R4
ENDMSG_SCRST_40
		LOOP
		INC	R2
;
		WITH	R2
		ADD	R7
		FROM	R1
		ADD	R8
		TO	R1
		BIC	R4	;[ 奇数を偶数に ]
;
		DEC	R10
		BNE	ENDMSG_SCRST_20+1
		MOVE	R0,R1
;
		STOP
		NOP
;
;************************************************************************
;*		エンディングメッセージＢＧ３ビットマップセット		*
;*			in :						*
;*				(R3) <-- メッセージアドレス（Ｂ）	*
;*				(R4) <--	 ”	   （Ｌ，Ｈ）	*
;************************************************************************
ENDMSG_CHRST	EQU	$
		CACHE
;
		IWT	R5,#WOB7CHR+1000H
		SUB	R0		;[ IBT R0,#0 ]
		IWT	R12,#600H/2
		MOVE	R13,R15
ENDMSG_CHRST_00
		STW	(R5)
		INC	R5
		LOOP
		INC	R5
;
		IBT	R5,#0		;(R5) <-- ビットマップＸ座標
		IBT	R6,#0		;(R6) <-- ビットマップＹ座標
;
		IBT	R7,#1		;(R7)  <-- カラーＡＮＤデータ
		IWT	R9,#128		;(R9)  <-- ビットマップＸ座標補正値
		IBT	R10,#16		;(R10) <-- ビットマップＹ座標補正値
ENDMSG_CHRST_10
		FROM	R3
		ROMB
		MOVE	R14,R4		;(R14) <-- メッセージデータポインター
		GETB
		INC	R14
;
		IWT	R11,#0FFH	;(R11) <-- 特殊コード
		SUB	R11
		BNE	ENDMSG_CHRST_50 ;特殊コード？ ( no:ENDMSG_CHRST_50 )
		ADD	R11
;
;-------------- 特殊コード ----------------------------------------------
		GETB			;(R0)  <-- 特殊コード内容
		INC	R14		;(R14) <-- 次からのメッセージアドレス
;
		TO	R11		;[ * not break (R0) ]
		SUB	#0AH
		BEQ	ENDMSG_CHRST_20 ;２行目へ？ ( yes:ENDMSG_CHRST_20 )
		NOP
;
		STOP
		NOP
;
ENDMSG_CHRST_20
		GETB
		INC	R14
;
		IBT	R5,#040H	;(R5) <-- ビットマップＸ座標
		IBT	R6,#010H	;(R6) <-- ビットマップＹ座標
;
;-------------- メッセージプロット --------------------------------------
ENDMSG_CHRST_50
		MOVE	R4,R14		;(R4) <-- 次からのメッセージデータポインター
;
		IBT	R14,#BANK MSG_FONT
		FROM	R14
		ROMB
;
		UMULT	#12
		IWT	R14,#MSG_FONT
		TO	R14		;(R14) <-- フォントデータアドレス
		ADD	R14
;
		IBT	R8,#12
ENDMSG_CHRST_60
		TO	R11		;(R11) <-- フォントデータ
		GETBH
		INC	R14
;
		MOVE	R1,R5		;(R1) <-- プロットＸ座標
		MOVE	R2,R6		;(R2) <-- プロットＹ座標
;
		IBT	R12,#8
		MOVE	R13,R15
ENDMSG_CHRST_70
		WITH	R11
		ADD	R11
		ROL
		AND	R7
		COLOUR
;
		FROM	R1
		SUB	R9
		BCC	ENDMSG_CHRST_80
		WITH	R2
;
		ADD	R10
		MOVE	R1,R0
ENDMSG_CHRST_80
		LOOP
		PLOT
;
		DEC	R8
		BNE	ENDMSG_CHRST_60
		INC	R6
;
		WITH	R6
		SUB	#12
		WITH	R5
		ADD	#10
;
		RPIX
;
		FROM	R5
		SUB	R9
		BCC	ENDMSG_CHRST_10+1
		FROM	R3
;
		MOVE	R5,R0
		WITH	R6		;(R6) <-- 改行ビットマップＹ座標
		BRA	ENDMSG_CHRST_10
		ADD	R10
;
;************************************************************************
;*		ソニックマリオ衝突サイズセット				*
;*			in :						*
;*				(R1) <-- 回転角度			*
;*				(R4) <-- 中心までのＹ距離＋１		*
;************************************************************************
MARIO_SIZEST	EQU	$
		IBT	R0,#BANK LCOS
		ROMB
		IWT	R0,#LCOS
		TO	R14
		ADD	R1
		GETBS
		MOVE	R1,R0		;(R1) <-- ｃｏｓデータ
;
		LMS	R3,CPWIDEY	;(R3) <-- Ｙサイズ
		MULT	R3
		ADD	R0
		ADD	R0
		HIB
		SEX
		NOT
		ADD	R4
		LMS	R4,CPLYPSL
		ADD	R4
		SMS	R0,CPCENTY	;中心Ｙ座標
;
		IBT	R0,#040H	;[ IWT R14,#LSIN ]
		TO	R14
		ADD	R14
		GETBS
		MOVE	R2,R0		;(R2) <-- ｓｉｎデータ
;
		MULT	R3
		ADD	R0
		ADD	R0
		HIB
		SEX
		ADD	#8
		LMS	R4,CPLXPSL
		ADD	R4
		SMS	R0,CPCENTX	;中心Ｘ座標
;
		DEC	R1
		BPL	MARIO_SIZEST_10
		INC	R1
;
		WITH	R1
		NOT
		INC	R1
MARIO_SIZEST_10
		DEC	R2
		BPL	MARIO_SIZEST_20
		INC	R2
;
		WITH	R2
		NOT
		INC	R2
MARIO_SIZEST_20
		LMS	R0,CPWIDEX	;(R0) <-- Ｘサイズ
		TO	R5		;(R5) <-- Ｘサイズ×ｃｏｓ
		MULT	R1
		TO	R6		;(R6) <-- Ｘサイズ×ｓｉｎ
		MULT	R2
;
		FROM	R3
		MULT	R2
		ADD	R5
		ADD	R0
		ADD	R0
		HIB
		SMS	R0,CPWIDEX	;Ｘサイズセット
;
		FROM	R3
		MULT	R1
		ADD	R6
		ADD	R0
		ADD	R0
		HIB
		SMS	R0,CPWIDEY	;Ｙサイズセット
;
		STOP
		NOP
;
;;;;;************************************************************************
;;;;;*		    土管コース水の音セットチェック			    *
;;;;;*			    out :					    *
;;;;;*				    (R0) <-- 0:サウンドセット		    *
;;;;;************************************************************************
;;;;DOKAN_SND_CK    EQU	    $
;;;;		    IWT	    R1,#UT77CF			      ;(R1) <-- ドカン水流穴ユニット
;;;;		    IWT	    R2,#UT77D6-UT77CF		      ;(R2) <-- ドカン水流穴ユニット
;;;;		    IWT	    R3,#UT8554-UT77CF-(UT77D6-UT77CF) ;(R3) <-- ドカン水流穴ユニット
;;;;		    IWT	    R4,#BGCHECK_BUF		      ;(R4) <-- ＢＧユニットバッファポインター
;;;;;
;;;;		    CACHE
;;;;;
;;;;		    IWT	    R12,#16*2*16
;;;;		    MOVE    R13,R15
;;;;DOKAN_SND_CK_10
;;;;		    LDW	    (R4)
;;;;		    SUB	    R1
;;;;		    BEQ	    DOKAN_SND_CK_50 ;ドカン水流穴ユニット？ ( yes:DOKAN_SND_CK_50 )
;;;;		    NOP
;;;;;
;;;;		    SUB	    R2
;;;;		    BEQ	    DOKAN_SND_CK_50 ;ドカン水流穴ユニット？ ( yes:DOKAN_SND_CK_50 )
;;;;		    NOP
;;;;;
;;;;		    SUB	    R3
;;;;		    BEQ	    DOKAN_SND_CK_50 ;ドカン水流穴ユニット？ ( yes:DOKAN_SND_CK_50 )
;;;;		    INC	    R4
;;;;;
;;;;		    LOOP
;;;;		    INC	    R4
;;;;;
;;;;DOKAN_SND_CK_50
;;;;		    STOP
;;;;		    NOP
;
;************************************************************************
;*									*
;*	ＹＯＳＨＩ ＤＯＯＲ ＭＯＶＥ * ２				*
;*					Programmed by  Y. Yamamoto.	*
;*				1995年 6月19日(月曜日) 14時06分20秒 JST *
;*								Ver 0.00*
;************************************************************************
DOR2_SIZE		EQU		020h
DOR2_A0			EQU		DOR2_SIZE * 000h + DOR2_SIZE - 1
DOR2_A1			EQU		DOR2_SIZE * 001h + DOR2_SIZE - 1
DOR2_A2			EQU		DOR2_SIZE * 010h + DOR2_SIZE - 1
DOR2_A3			EQU		DOR2_SIZE * 011h + DOR2_SIZE - 1
DOR2_A4			EQU		DOR2_SIZE * 020h + DOR2_SIZE - 1
DOR2_A5			EQU		DOR2_SIZE * 021h + DOR2_SIZE - 1
DOR2_A6			EQU		DOR2_SIZE * 030h + DOR2_SIZE - 1
DOR2_A7			EQU		DOR2_SIZE * 031h + DOR2_SIZE - 1
;
DOR2_B0			EQU		DOR2_SIZE * 011h + DOR2_SIZE - 1
DOR2_B1			EQU		DOR2_SIZE * 013h + DOR2_SIZE - 1
DOR2_B2			EQU		DOR2_SIZE * 031h + DOR2_SIZE - 1
DOR2_B3			EQU		DOR2_SIZE * 033h + DOR2_SIZE - 1
DOR2_B4			EQU		DOR2_SIZE * 015h + DOR2_SIZE - 1
DOR2_B5			EQU		DOR2_SIZE * 017h + DOR2_SIZE - 1
DOR2_B6			EQU		DOR2_SIZE * 035h + DOR2_SIZE - 1
DOR2_B7			EQU		DOR2_SIZE * 037h + DOR2_SIZE - 1
;
DOOR2_MV	EQU		$
		LM		R0, CWORK1	;R1 = Y * 40H + X * 10H
		ADD		R0
		MULT		#8
		LM		R1, CWORK0
		ADD		R1
		MULT		#4
		IWT		R1, #WOB7CHR
		TO		R14
		ADD		R1
;
		CACHE
;
		IWT		 R1, #DOR2_A7
		IWT		 R3, #DOR2_B7
		LINK		 #4
		IWT		 R15, #DO2S_M00
		NOP
		IWT		 R1, #DOR2_A6
		IWT		 R3, #DOR2_B6
		LINK		 #4
		IWT		 R15, #DO2S_M00
		NOP
		IWT		 R1, #DOR2_A5
		IWT		 R3, #DOR2_B5
		LINK		 #4
		IWT		 R15, #DO2S_M00
		NOP
		IWT		 R1, #DOR2_A4
		IWT		 R3, #DOR2_B4
		LINK		 #4
		IWT		 R15, #DO2S_M00
		NOP
		IWT		 R1, #DOR2_A3
		IWT		 R3, #DOR2_B3
		LINK		 #4
		IWT		 R15, #DO2S_M00
		NOP
		IWT		 R1, #DOR2_A2
		IWT		 R3, #DOR2_B2
		LINK		 #4
		IWT		 R15, #DO2S_M00
		NOP
		IWT		 R1, #DOR2_A1
		IWT		 R3, #DOR2_B1
		LINK		 #4
		IWT		 R15, #DO2S_M00
		NOP
		IWT		R1, #DOR2_A0
		IWT		R3, #DOR2_B0
		LINK		#4
		IWT		R15, #DO2S_M00
		NOP
;
		STOP
		NOP
;
;
;
DO2S_M00
		WITH		R1
		ADD		R14
		WITH		R3
		ADD		R14
;
		IBT		R2, #010H
		FROM		R1
		TO		R2
		SUB		R2
;
		IBT		R4, #DOR2_SIZE
		FROM		R3
		TO		R4
		SUB		R4
		FROM		R3
		TO		R5
		SUB		#2
		FROM		R4
		TO		R6
		SUB		#2
;
		IBT		R10, #2
DO2S_M50
		IBT		R12, #4
DO2S_M20
		IBT		R13, #2
DO2S_M10
		TO		R7
		LDB		(R1)
		MOVE		R8, R7
;
		WITH		R7
		LSR
		ROR
		WITH		R8
		LSR
		ROR
		WITH		R7
		LSR
		ROR
		WITH		R8
		LSR
		ROR
		WITH		R7
		LSR
		ROR
		WITH		R8
		LSR
		ROR
		WITH		R7
		LSR
		ROR
		WITH		R8
		LSR
		ROR
;
		SWAP
		STB		(R3)
		DEC		R3
		STB		(R5)
		DEC		R5
;
		WITH		R7
		LSR
		ROR
		WITH		R8
		LSR
		ROR
		WITH		R7
		LSR
		ROR
		WITH		R8
		LSR
		ROR
		WITH		R7
		LSR
		ROR
		WITH		R8
		LSR
		ROR
		WITH		R7
		LSR
		ROR
		WITH		R8
		LSR
		ROR
;
		SWAP
		STB		(R4)
		DEC		R4
		STB		(R6)
		DEC		R6
;
		DEC		R13
		BNE		DO2S_M10
		DEC		R1
;
		WITH		R3
		SUB		#2
		WITH		R4
		SUB		#2
		WITH		R5
		SUB		#2
		WITH		R6
		SUB		#2
;
		DEC		R12
		BNE		DO2S_M20
		NOP
;
		IBT		R12, #4
DO2S_M40
		IBT		R13, #2
DO2S_M30
		TO		R7
		LDB		(R2)
		MOVE		R8, R7
;
		WITH		R7
		LSR
		ROR
		WITH		R8
		LSR
		ROR
		WITH		R7
		LSR
		ROR
		WITH		R8
		LSR
		ROR
		WITH		R7
		LSR
		ROR
		WITH		R8
		LSR
		ROR
		WITH		R7
		LSR
		ROR
		WITH		R8
		LSR
		ROR
;
		SWAP
		STB		(R3)
		DEC		R3
		STB		(R5)
		DEC		R5
;
		WITH		R7
		LSR
		ROR
		WITH		R8
		LSR
		ROR
		WITH		R7
		LSR
		ROR
		WITH		R8
		LSR
		ROR
		WITH		R7
		LSR
		ROR
		WITH		R8
		LSR
		ROR
		WITH		R7
		LSR
		ROR
		WITH		R8
		LSR
		ROR
;
		SWAP
		STB		(R4)
		DEC		R4
		STB		(R6)
		DEC		R6
;
		DEC		R13
		BNE		DO2S_M30
		DEC		R2
;
		WITH		R3
		SUB		#2
		WITH		R4
		SUB		#2
		WITH		R5
		SUB		#2
		WITH		R6
		SUB		#2
;
		DEC		R12
		BNE		DO2S_M40
		NOP
;
		IWT		R12, #DOR2_SIZE * 0FH
		WITH		R3
		SUB		R12
		WITH		R4
		SUB		R12
		WITH		R5
		SUB		R12
		WITH		R6
		SUB		R12
;
		DEC		R10
		BEQ		DO2S_M60
		NOP
;
		mDJMP		DO2S_M50
;
DO2S_M60
		JMP		R11
		NOP
;
;
;
;
;
;************************************************************************
;*		ＢＧＨスクロール書き換えバッファセット			*
;*			in :						*
;*				(R1)  <-- ユニットバッファポインター．１*
;*				(R12) <-- ユニット数．１		*
;*				(R2)  <-- ユニットバッファポインター．２*
;*				(R3)  <-- ユニット数．２		*
;*				(R10) <-- 書き換えバッファポインター	*
;************************************************************************
BGWRITE_H	EQU	$
		IWT	R0,#BGCHECK_BUF
		TO	R1		;(R1) <-- ユニットバッファポインター．１
		ADD	R1
		TO	R2		;(R2) <-- ユニットバッファポインター．２
		ADD	R2
;
		IWT	R0,#CBGHSCRBF
		TO	R4		;(R4) <-- 書き換えバッファポインター(左)
		ADD	R10
		IBT	R0,#20H*2
		TO	R5		;(R5) <-- 書き換えバッファポインター(右)
		ADD	R4
		FROM	R12
		ADD	R12
		ADD	R0
		ADD	R10
		IBT	R10,#1FH*2
		TO	R10
		AND	R10
;
		IBT	R0,#BANK UNDTADD
		ROMB
		IWT	R6,#UNDTADD	;(R6) <-- ユニットキャラＮｏ．データテーブルアドレス
		IWT	R7,#UNDATA	;(R7) <-- ユニットキャラＮｏ．データアドレス
		IBT	R8,#8		;(R8) <-- ×８データ
;
		mJSR_X	BGWRITE_H_SUB
		CACHE
;
		MOVE	R1,R2
		MOVES	R12,R3
		BEQ	BGWRITE_H_0010	;ユニット数．２＝０？ ( yes:BGWRITE_H_0010 )
		NOP
;
		IWT	R0,#CBGHSCRBF
		TO	R4		;(R4) <-- 書き換えバッファポインター(左)
		ADD	R10
		IBT	R0,#20H*2
		TO	R5		;(R5) <-- 書き換えバッファポインター(右)
		ADD	R4
;
		mJSR	BGWRITE_H_SUB
BGWRITE_H_0010
		STOP
		NOP
;
BGWRITE_H_SUB
		MOVE	R13,R15
BGWRITE_H_0050
		LDW	(R1)
		TO	R9
		UMULT	R8
		HIB
		ADD	R0
		TO	R14
		ADD	R6
;
		GETB
		INC	R14
		GETBH
		ADD	R9
		TO	R14
		ADD	R7
;
		IBT	R9,#(010H*2)*2
		WITH	R1
		ADD	R9
;
		GETB
		INC	R14
		STB	(R4)
		INC	R4
		GETB
		INC	R14
		STB	(R4)
		INC	R4
;
		GETB
		INC	R14
		STB	(R5)
		INC	R5
		GETB
		INC	R14
		STB	(R5)
		INC	R5
;
		GETB
		INC	R14
		STB	(R4)
		INC	R4
		GETB
		INC	R14
		STB	(R4)
		INC	R4
;
		GETB
		INC	R14
		STB	(R5)
		INC	R5
		GETB
		INC	R14
		STB	(R5)
;
		LOOP
		INC	R5
;
		mRTS
;
;************************************************************************
;*		ＢＧＶスクロール書き換えバッファセット			*
;*			in :						*
;*				(R1)  <-- ユニットバッファポインター．１*
;*				(R12) <-- ユニット数．１		*
;*				(R2)  <-- ユニットバッファポインター．２*
;*				(R3)  <-- ユニット数．２		*
;************************************************************************
BGWRITE_V	EQU	$
		IWT	R0,#BGCHECK_BUF
		TO	R1		;(R1) <-- ユニットバッファポインター．１
		ADD	R1
		TO	R2		;(R2) <-- ユニットバッファポインター．２
		ADD	R2
;
		IWT	R4,#CBGVSCRBF	    ;(R4) <-- 書き換えバッファポインター（上）
		IWT	R5,#CBGVSCRBF+22H*2 ;(R5) <-- 書き換えバッファポインター（下）
;
		IBT	R0,#BANK UNDTADD
		ROMB
		IWT	R6,#UNDTADD	;(R6) <-- ユニットキャラＮｏ．データテーブルアドレス
		IWT	R7,#UNDATA	;(R7) <-- ユニットキャラＮｏ．データアドレス
		IBT	R8,#8		;(R8) <-- ×８データ
;
		mJSR_X	BGWRITE_V_SUB
		CACHE
;
		MOVE	R1,R2
		MOVE	R12,R3
		mJSR	BGWRITE_V_SUB
;
		STOP
		NOP
;
BGWRITE_V_SUB
		MOVE	R13,R15
BGWRITE_V_0050
		LDW	(R1)
		TO	R9
		UMULT	R8
		HIB
		ADD	R0
		TO	R14
		ADD	R6
;
		GETB
		INC	R14
		INC	R1
		INC	R1
		GETBH
		ADD	R9
		TO	R14
		ADD	R7
;
		GETB
		INC	R14
		STB	(R4)
		INC	R4
		GETB
		INC	R14
		STB	(R4)
		INC	R4
;
		GETB
		INC	R14
		STB	(R4)
		INC	R4
		GETB
		INC	R14
		STB	(R4)
		INC	R4
;
		GETB
		INC	R14
		STB	(R5)
		INC	R5
		GETB
		INC	R14
		STB	(R5)
		INC	R5
;
		GETB
		INC	R14
		STB	(R5)
		INC	R5
		GETB
		INC	R14
		STB	(R5)
;
		LOOP
		INC	R5
;
		mRTS
;
;
;
;
;
		END
