;************************************************************************
;*									*
;*	title name	: "yossy"					*
;*	proccess	: mario chip player program (ヘリコプター)	*
;*						    (潜水艦)		*
;*						    (マリオ)		*
;*						    (汽車)		*
;*						    (モグラ)		*
;*						    (スキー)		*
;*	file name	: ys_mplay3					*
;*									*
;************************************************************************
;
;
		SALL
;
		include		ys_chip.inc
		include		ys_chip2.inc
;
		XALL
;
;
;------------------------------------------------------------------------
;-		global symbol						-
;------------------------------------------------------------------------
		GLB	HERI_MV
		GLB	SBMARIN_MV
		GLB	MOGURA_MV
		GLB	MARIO_MV
		GLB	TRAIN_MV
		GLB	SKI_MV
		GLB	EGG_MV
;
		GLB	MARIO_PS_HOSE
;
;------------------------------------------------------------------------
;-		extern symbol						-
;------------------------------------------------------------------------
;
;-------------< ys_mplay >-----------------------------------------------
		EXT	PL_CALC,XY_CALC,PL_BGCK,PL_BGCK_2,WATR_CHECK
		EXT	PL_KEY_XMOV,PL_XSP_DOWN,PL_BGCK_0300
		EXT	BG_SIDECK_IN,BG_SIDECK,BG_HDFTCK,BGUNIT_READ_S,BGUNIT_READ
		EXT	FOOT_RESULT,FOOT_RESULT_C,DOSN_JUST_CK,DASH_SMOK_CK
		EXT	M_ENINSR,M_EXINSR
		EXT	BABL0_SET,WTUP0_SET,WTUP1_SET
		EXT	BABL0_SET_2,WTUP0_SET_2,WTUP1_SET_2
		EXT	BRBG0_SET,SIDE_SP_CK,HED_SP_CK,FOOT_SP_CK
		EXT	XY_CALC,PL_CALC_JUMP,PL_CALC_NOJUMP
		EXT	DOKAN_INOUT_IN,DOKAN_INOUT_IN_2
		EXT	COIN_CROSS,FAIL_CROSS,SUGI_CROSS,CLR_COIN_CROSS
		EXT	BG_SP_CHECK
;
		EXT	R_32_RTZ_32,R_32_RTZ_32_XY_C
		EXT	R_32_ZOOM,R_32_ZOOM_XY
;
		EXT	PSHT
;
;-------------< ys_chip0 >-----------------------------------------------
		EXT	COS,SIN,LCOS,LSIN
;
;-------------< ys_msub0 >-----------------------------------------------
		EXT	EN_BGTYPE,SAKA_DATA
;
;-------------< 敵Ｎｏ． >---------------------------------------
		EXT	MISA0 ;,POLDR
;
;-------------< 効果Ｎｏ． >-------------------------------------
		EXT	MSMK0,DUST0,SNOW1,KIRA0,TRSMK
;
;-------------< ys_mpldt >-----------------------------------------------
		EXT	PLAYER_DATA
		EXT	PLBGCK_POINT_00,PLBGCK_POINT_HR,PLBGCK_POINT_MG
		EXT	PLBGCK_POINT_01,PLBGCK_POINT_TR
		EXT	PLBGCK_POINT_MR,PLBGCK_POINT_MR0,PLBGCK_POINT_MR1
		EXT	JPET
		EXT	MAX_SPEED,MAX_DASH,ADD_SPEED,MIN_SPEED,SUB_SPEED
		EXT	DOKAN_TYPE
		EXT	HR_MOVE_DT,HR_MKCG_PT
;
		EXT	SB_MOVE_DT
;
		EXT	MG_MVKEY,MG_FOOTBGP,MG_HEADBGP,MG_SIDEBGP,MG_DWMKCHG
		EXT	MG_UPMKCHG,MG_FOOTHSD,MG_POSCNV,MG_KEYCNV,MG_MVANGL
;
		EXT	M_ANGCKD
		EXT	M_ATAN,M_TAN
;
		EXT	MR_MANT_JMPUP,MR_MANT_JMPDW,MR_MANT_NOJMP
		EXT	MR_CHR_TYPE,MR_MANT_PATN,MR_WLK_CHRDT,MR_HOB_CHRDT
		EXT	MR_P_STOP,MR_P_SITD,MR_P_UPJP,MR_P_DWJP,MR_P_SLIP
		EXT	MR_P_WLK0,MR_P_WLK1,MR_P_WLK2,MR_P_WLK3
;
		EXT	TR_CHR_ADRS,GO_RALE_KEY,RALE_BIT_AND,RALE_BIT_DATA
		EXT	GO_RALE_HSDT,RALE_HS_ANAD,TR_KEY_ANGL
		EXT	WALK_SOUND
;
		EXT	ON_SKI
;
;------------------------------------------------------------------------
;-		define symbol						-
;------------------------------------------------------------------------
;
;-------------- ＢＧユニットＮｏ．バッファアドレス ------------------
CBGUNIT		EQU	7F8000H
;
;
;
PUSHTM		EQU	010H
;
;
;
;************************************************************************
;*									*
;*		program start						*
;*									*
;************************************************************************
;
;
Group_B		GROUP	S_play3
S_play3		SECT	REL
;
;
;************************************************************************
;*									*
;*		ヘリコプター						*
;*									*
;************************************************************************
;
HERI_MV
;
;------------------------------------------------------------------------
;-		移動サウンドセット					-
;------------------------------------------------------------------------
		LM	R0,CFRCNT2	;ずっと雪の効果セットする為
		AND	#07H
		SMS	R0,CPLWALK
;
		LMS	R1,CPLXSPD
		DEC	R1
		BPL	HERI_MV_0000
		INC	R1
;
		WITH	R1
		NOT
		INC	R1
HERI_MV_0000
		LMS	R0,CPLYSPD
		DEC	R0
		BPL	HERI_MV_0002
		INC	R0
;
		NOT
		INC	R0
HERI_MV_0002
		SUB	R1
		BCS	HERI_MV_0004
		ADD	R1
;
		FROM	R1
HERI_MV_0004
		HIB
		TO	R1		;[ * not break (R0) ]
		SUB	#4
		BCC	HERI_MV_0006	;スピードオーバー？ ( no:HERI_MV_0006 )
		NOP
;
		IBT	R0,#3
HERI_MV_0006
		OR	#00000100B
		SMS	R0,CMSOUND1
;
		mJSR	HERI_SUB	;ヘリコプター基本ルーチン
		IWT	R0,#P008	;ジャンプフラグ”ＯＮ”
		SMS	R0,CPLJUMP
;
		LMS	R0,CPLFLSH
;;;;		    IBT	    R1,#040H
		IBT	R1,#020H
		SUB	R1
		BMI	HERI_MV_0010	;プレイヤーダメージ？ ( no:HERI_MV_0010 )
		NOP
;
;------------------------------------------------------------------------
;-		ダメージ中の処理					-
;------------------------------------------------------------------------
		LMS	R0,CPHR_ANSP	;(R0) <-- 回転スピード
		SUB	#0
		BEQ	HERI_MV_0010	;ダメージ処理終了？ ( yes:HERI_MV_0010 )
		NOP
;
		IBT	R1,#-020H	;(R1) <-- 回転スピード減速値
		BPL	HERI_FL_0050
		NOP
;
		IBT	R1,#020H	;(R1) <-- 回転スピード減速値
HERI_FL_0050
		ADD	R1
		TO	R1
		XOR	R1
		BMI	HERI_FL_0100	;減速終了？ ( no:HERI_FL_0100 )
		NOP
;
		SUB	R0
HERI_FL_0100
		SBK			;[ SMS CPHR_ANSP ]
;
		LMS	R1,CPHR_ANGL	;(R1) <-- 回転角度
		ADD	R1
		SBK			;[ SMS CPHR_ANGL ]
;
		LMS	R0,CPHR_MKCG
		SUB	#2
		BNE	HERI_FL_0150	;前向いてる？ ( no:HERI_FL_0150 )
		INC	R0
;
		SMS	R0,CPHR_FMKF	;[ R0=1 ] 前向きフラグセット
		BRA	HERI_FL_0250
		NOP
;
HERI_FL_0150
		BCS	HERI_FL_0200
		NOP
;
		INC	R0
		INC	R0
HERI_FL_0200	EQU	$
		SBK			;[ SMS CPHR_MKCG ]
;
HERI_FL_0250
		IBT	R5,#020H	;(R5)  <-- Ｘスピード減速値
		IBT	R6,#0		;(R6)  <-- 目標Ｘスピード
		IWT	R8,#0400H	;(R8)  <-- 目標Ｙスピード
		mDJMP	HERI_MV_0700
;
;------------------------------------------------------------------------
;-		コントローラー入力					-
;------------------------------------------------------------------------
HERI_MV_0010
		LM	R0,CMKEYC1	;(R0) <-- コントローラー情報（連続）
		AND	#00001111B
		MOVE	R1,R0		;(R1) <-- 移動キー方向
		BNE	HERI_MV_0050	;移動キー入力？ ( no:HERI_MV_0100 )
		DEC	R0		;[ -1 ]
;
;-------------- 停止 ----------------------------------------------------
		IBT	R5,#02H		;(R5)  <-- Ｘスピード減速値
		IBT	R6,#0		;(R6)  <-- 目標Ｘスピード
		IWT	R8,#0400H	;(R8)  <-- 目標Ｙスピード
		IBT	R10,#0		;(R10) <-- 目標回転角度
		LMS	R0,CPLXSPD
		SUB	#0
		BEQ	HERI_MV_0100	;Ｘ移動中？ ( no:HERI_MV_0200 )
		NOP
;
		IWT	R10,#0F800H	;(R10) <-- 目標回転角度
		BRA	HERI_MV_0100
		NOP
;
;-------------- 移動 ----------------------------------------------------
HERI_MV_0050
		MULT	#5
		IWT	R14,#HR_MOVE_DT
		TO	R14
		ADD	R14
		GETB
		TO	R10		;(R10) <-- 目標回転角度
		SWAP
		INC	R14
		GETB
		INC	R14
		TO	R6		;(R6) <-- 目標Ｘスピード
		GETBH
		INC	R14
		GETB
		INC	R14
		TO	R8		;(R8) <-- 目標Ｙスピード
		GETBH
;
		IBT	R5,#0CH		;(R5) <-- Ｘスピード加速値
;
;-------------- 振り向きチェック ----------------------------------------
HERI_MV_0100
		LMS	R2,CPHR_FMKF	;(R2) <-- 前向きフラグ
		DEC	R2
		BPL	HERI_MV_0200	;前向き中？ ( yes:HERI_MV_0200 )
		INC	R2
;
		LMS	R0,CPHR_MKCG	;(R0) <-- 振り向きフラグ
		DEC	R0		;[ * -1 ]
		BMI	HERI_MV_0200	;振り向き中？ ( no:HERI_MV_0200 )
		NOP
;
		LMS	R14,CPHR_MCTM
		DEC	R14
		BMI	HERI_MV_0150	;振り向きパターン切り替え？ ( yes:HERI_MV_0150 )
		NOP
;
		SUB	#3-1		;[ * -1 ]
		BCC	HERI_MV_0400	;向き変わってる？ ( no:HERI_MV_0400 )
		NOP
;
		BRA	HERI_MV_0500
		NOP
;
;-------------- 振り向きパターン切り替え ------------------------
HERI_MV_0150
		SMS	R0,CPHR_MKCG	;振り向きフラグセット
;
		IBT	R14,#04H
		SMS	R14,CPHR_MCTM	;パターン切り替えタイマーセット
;
		SUB	#2
		BCC	HERI_MV_0400	;向き変わってる？ ( no:HERI_MV_0400 )
		NOP
;
		BNE	HERI_MV_0500	;向き切り替え？ ( no:HERI_MV_0500 )
		NOP
;
		LMS	R0,CPLCMKI	;向きセット
		XOR	#02H
		SBK			;[ SMS R0,CPLCMKI ]
		LMS	R0,CPHR_ANGL	;回転角度変換
		NOT
		INC	R0
		BRA	HERI_MV_0400
		SBK			;[ SMS CPHR_ANGL ]
;
;-------------- 振り向き入力チェック ------------------------------------
HERI_MV_0200
		FROM	R1
		AND	#00000011B
		BEQ	HERI_MV_0500	;左右キー入力？ ( no:HERI_MV_0500 )
		NOP
;
		TO	R1		;(R1) <-- セット向き
		AND	#00000010B
;
		DEC	R2
		BMI	HERI_MV_0250	;前向き中？ ( no:HERI_MV_0250 )
		NOP
;
		SMS	R1,CPLCMKI	;向きセット
		SUB	R0
		SMS	R0,CPHR_FMKF	;前向きフラグリセット
		BRA	HERI_MV_0400
		NOP
;
HERI_MV_0250
		LMS	R0,CPLCMKI
		SUB	R1
		BEQ	HERI_MV_0400	;逆向きキー入力？ ( no:HERI_MV_0400 )
		NOP
;
		LMS	R0,CPLXSPD
		SUB	#0
		BEQ	HERI_MV_0300	;Ｘ移動中？ ( no:HERI_MV_0300 )
		NOP
;
		DEC	R1		;[ * (R1)-> FFFF<-0:左移動 1<-2:右移動 ]
		XOR	R1
		BPL	HERI_MV_0500	;逆向き移動中？ ( yes:HERI_MV_0500 )
		INC	R1
;
;-------------- 振り向きセット ----------------------------------
HERI_MV_0300
		IBT	R0,#4
		SMS	R0,CPHR_MKCG	;振り向きフラグセット
		IBT	R0,#04H
		SMS	R0,CPHR_MCTM	;パターン切り替えタイマーセット
;
;-------------- 目標回転角度逆転 ----------------------------------------
HERI_MV_0400
		WITH	R10		;(R10)	<-- 目標回転角度
		NOT
		INC	R10
;
;-------------- Ｘ，Ｙスピード加減速 ------------------------------------
HERI_MV_0500
		IWT	R4,#0400H	;(R4) <-- 回転スピード
		mJSR	C_ANGL_CALC	;キャラクター回転角度計算
HERI_MV_0700
		MOVE	R7,R5		;(R7) <-- Ｙスピード減速値
;
		LMS	R0,CPLSWIM
		DEC	R0
		BMI	HERI_MV_0750	;泳ぎ中？ ( no:HERI_MV_0750 )
		NOP
;
		MOVES	R8,R8
		BMI	HERI_MV_0710	;上昇？ ( yes:HERI_MV_0750 )
		NOP
;
;------------------------------------------------------------------------
;-		水中泳ぎ処理						-
;------------------------------------------------------------------------
		IBT	R5,#02H		;(R5)  <-- Ｘスピード減速値
		FROM	R6
		DIV2
		DIV2
		TO	R6		;(R6)  <-- 目標Ｘスピード
		DIV2
		IWT	R8,#0FF00H	;(R8)  <-- 目標Ｙスピード
;
		mJSR	PUKA_CHECK	;水面”プカプカ”チェック
;
		BRA	HERI_MV_0800
		NOP
;
HERI_MV_0710
		LMS	R0,CPLWATR
		IWT	R4,#101000000B
		AND	R4
		BNE	HERI_MV_0750	;水中脱出？ ( no:HERI_MV_0750 )
		SUB	R0		;[ * 泳ぎキャンセル ]
;
		SMS	R0,CPLSWIM	;泳ぎキャンセル
;
;-------------- 水しぶきセット ----------------------------------
		IBT	R4,#014H	;(R4) <-- ”バッシャーン”セットＹ位置
		mJSR	WTUP0_SET_2	;”バッシャーン”効果セット
;
;------------------------------------------------------------------------
;-		飛行処理						-
;------------------------------------------------------------------------
HERI_MV_0750
		mJSR	X_SP_CALC	;Ｘスピード加減速
		mJSR	Y_SP_CALC	;Ｙスピード加減速
;
HERI_MV_0800
		SUB	R0		;<<< end >>>
		STOP
		NOP
;
;****************************************************************
;*		ヘリコプター基本ルーチン			*
;****************************************************************
HERI_SUB
		SMS	R11,RTS4	;[ return address save ]
;
;-------------- 回転キャラクターセット --------------------------
		LMS	R0,CPHR_MKCG
		DEC	R0		;[ * -1 ]
		BMI	HERI_SUB_0050	;振り向き中？ ( no:HERI_SUB_0050 )
		ADD	R0		;x2
;
;-------------- 振り向きパターンセット ------------------
		IWT	R14,#HR_MKCG_PT
		TO	R14
		ADD	R14
		GETB
		INC	R14
		TO	R12		;(R12) <-- キャラクターアドレス（Ｌ，Ｈ）
		GETBH
		BRA	HERI_SUB_0100
		NOP
;
;-------------- 飛んでるパターンセット ------------------
HERI_SUB_0050
		IWT	R12,#CIPCHD+00A0H  ;(R12) <-- キャラクターアドレス（Ｌ，Ｈ）
		LM	R0,CFRCNT2
		AND	#02H
		BEQ	HERI_SUB_0100
		NOP
;
		IWT	R12,#CIPCHD+00E0H  ;(R12) <-- キャラクターアドレス（Ｌ，Ｈ）
HERI_SUB_0100
		IBT	R13,#BANK CIPCHD   ;(R13) <-- キャラクターアドレス（Ｂ）
;
		IBT	R2,#020H	;(R2) <-- ビットマップ座標＿Ｙ
		IBT	R3,#000H	;(R3) <--	 ”	  ＿Ｘ
		LMS	R0,CPHR_ANGL
		TO	R5		;(R5) <-- 角度
		HIB
		IWT	R6,#0100H	;(R6) <-- 倍率
		mJSR	R_32_RTZ_32	;キャラクター拡大、縮小、回転（サイズ ３２×３２）
;
		IWT	R0,#HR00	;パターンＮｏ．セット
		SMS	R0,CPLPATN
;
;-------------- 座標計算 ----------------------------------------
		mJSR	XY_CALC		;座標計算
;
;-------------- ＢＧチェック ------------------------------------
		IWT	R14,#PLBGCK_POINT_HR  ;(R14) <-- ＢＧチェックポイントデータポインター
		mJSR	PL_BGCK_2	;ＢＧチェック
;
		LMS	R0,CPLSWIM
		DEC	R0
		BPL	HERI_SUB_0150	;水中？ ( yes:HERI_SUB_0150 )
		NOP
;
		mJSR	WATR_CHECK	;水中チェック
HERI_SUB_0150
		LMS	R11,RTS4	;[ return address load ]
		mRTS
;
;
;
;
;
;************************************************************************
;*									*
;*		潜水艦							*
;*									*
;************************************************************************
;
SBMARIN_MV
		IBT	R0,#01100100B	;[♪]
		SMS	R0,CMSOUND1
;
		mJSR	SBMARIN_SUB	;潜水艦基本ルーチン
;
		LMS	R0,CPLFLSH
		IBT	R1,#050H
		SUB	R1
		BMI	SBMARIN_MV_0050 ;プレイヤーダメージ？ ( no:SBMARIN_MV_0050 )
		NOP
;
;------------------------------------------------------------------------
;-		ダメージ中の処理					-
;------------------------------------------------------------------------
;
;-------------- プレイヤーダメージ！！ ----------------------------------
		LMS	R0,CPSB_FLCT
		IBT	R2,#010H
		ADD	R2
		SBK			;[ SMS R0,CPSB_FLCT ]
;
		SUB	R0		;[ IBT R0,#0 ]
		SMS	R0,CPLMVSP	;Ｘスピードクリアー
		SMS	R0,CPLXSPD	;Ｘスピードクリアー
		IWT	R0,#080H	;落下スピードセット
		SMS	R0,CPLYSPD
		mJSR	XY_CALC		;座標計算
;
		IWT	R14,#PLBGCK_POINT_HR  ;(R14) <-- ＢＧチェックポイントデータポインター
		mJSR	PL_BGCK_2	;ＢＧチェック
;
		mDJMP	SBMARIN_MV_0500
;
SBMARIN_MV_0050
;
;-------------- 魚雷発射チェック ----------------------------------------
		LMS	R0,CMISILE
		DEC	R0
		BPL	SBMARIN_MV_0060 ;魚雷セット中？ ( yes:SBMARIN_MV_0060 )
		NOP
;
		LMS	R0,CP_KEY_BERO
		LMS	R1,CP_KEY_JUMP
		OR	R1
		LMS	R1,CP_KEY_MNAG
		OR	R1
		LMS	R1,CMKEYC2L
		AND	R1
		BNE	SBMARIN_MV_0100 ;魚雷発射？ ( yes:SBMARIN_MV_0100 )
		NOP
;
SBMARIN_MV_0060
		mDJMP	SBMARIN_MV_0200
;
;-------------- 魚雷発射 ----------------------------------------
SBMARIN_MV_0100
		IBT	R0,#BANK LCOS
		ROMB
;
		LMS	R0,CPSB_ANGL
		TO	R1		;(R1) <-- 回転角度×２
		HIB
;
		IWT	R0,#LCOS
		TO	R14
		ADD	R1
		GETB
		IBT	R6,#08H		;(R6) <-- 半径
		MULT	R6
		ADD	R0		;x4
		ADD	R0		;
		HIB
		SEX
		LMS	R2,CPLCMKI
		DEC	R2
		BMI	SBMARIN_MV_0150
		NOP
;
		NOT
		INC	R0
SBMARIN_MV_0150
		LMS	R2,CPLXPSL
		TO	R2		;(R2) <-- 魚雷セットＸ座標
		ADD	R2
;
		IWT	R0,#LSIN
		TO	R14
		ADD	R1
		GETB
		MULT	R6
		ADD	R0		;x4
		ADD	R0		;
		HIB
		TO	R3
		SEX
		LMS	R0,CPLYPSL
		SUB	R3
		IBT	R3,#(18H-8)
		TO	R3		;(R3) <-- 魚雷セットＹ座標
		ADD	R3
;
		IBT	R0,#BANK PLAYER_DATA
		ROMB
;
;-------------- 魚雷発射けむりセット --------------------
		IWT	R5,#MSMK0	;(R5) <-- 効果Ｎｏ．
		mJSR	M_EXINSR	;効果エリア確保
;
		mSTW	R2,CEXXPSL,R1	;Ｘ座標セット
		mSTW	R3,CEXYPSL,R1	;Ｙ座標セット
		IBT	R5,#02H
		mSTW	R5,CEXWRK0,R1	;カウンター初期セット
		IBT	R5,#06H
		mSTW	R5,CEXTIM0,R1	;タイマー初期セット
		IBT	R5,#01H
		mSTW	R5,CEXCHPT,R1	;パターンＮｏ．初期セット
;
;-------------- 魚雷セット ------------------------------
		IWT	R5,#MISA0	;(R5) <-- 敵Ｎｏ．
		mJSR	M_ENINSR	;敵エリア確保
;
		BMI	SBMARIN_MV_0200 ;敵エリア無し？ ( yes:SBMARIN_MV_0200 )
		SUB	R0		;[ IBT R0,#0 ]
;
		IBT	R0,#067H	;[♪]
		SMS	R0,CMSOUND3
;
		INC	R0		;[ IBT R0,#1 ]
		SMS	R0,CMISILE	;魚雷セットフラグセット
;
		IBT	R5,#CEINIT
		mSTW	R5,CENMODE,R1	;初期モードセット
		mSTW	R2,CENXPSL,R1	;Ｘ座標セット
		mSTW	R3,CENYPSL,R1	;Ｙ座標セット
		LMS	R0,CPSB_ANGL
		HIB
		TO	R5
		ADD	R0		;x2
		mSTW	R5,CENWRK0,R1	;回転角度セット
		LMS	R0,CPLCMKI
		TO	R5
		XOR	#02H
		mSTW	R5,CENMUKI,R1	;向きセット
		IWT	R5,#0F800H
		mSTW	R5,CENWRK2,R1	;回転スピードセット
		IBT	R5,#07H
		mSTW	R5,CENCONT,R1	;カウンターセット
;
SBMARIN_MV_0200
		LMS	R0,CPLSWIM
		DEC	R0
		BPL	SBMARIN_SW	;泳ぎ中？ ( yes:SBMARIN_SW )
		NOP
;
;------------------------------------------------------------------------
;-		水上処理						-
;------------------------------------------------------------------------
		mJSR	PL_CALC		;座標計算
;
		IWT	R14,#PLBGCK_POINT_HR  ;(R14) <-- ＢＧチェックポイントデータポインター
		mJSR	PL_BGCK_2	;ＢＧチェック
		mJSR	WATR_CHECK	;水中チェック
;
		LM	R1,CMKEYC1	;(R1) <-- コントローラー情報（連続）
		mJSR	PL_KEY_XMOV	;コントローラー入力（Ｘスピード制御）
;
SBMARIN_MV_0500
		SUB	R0		;<<< end >>>
		STOP
		NOP
;
;------------------------------------------------------------------------
;-		水中泳ぎ処理						-
;------------------------------------------------------------------------
SBMARIN_SW
		mJSR	XY_CALC		;座標計算
;
		IWT	R14,#PLBGCK_POINT_HR  ;(R14) <-- ＢＧチェックポイントデータポインター
		mJSR	PL_BGCK_2	  ;ＢＧチェック
;
;------------------------------------------------------------------------
;-		コントローラー入力					-
;------------------------------------------------------------------------
		LM	R1,CMKEYC1     ;(R1) <-- コントローラー情報（連続）
		FROM	R1
		AND	#00000011B
		BEQ	SBMARIN_SW_0050 ;左右キー入力？ ( no:SBMARIN_SW_0050 )
		NOP
;
		AND	#02H
		SMS	R0,CPLCMKI	;プレイヤー向きセット
;
;-------------- 移動キーチェック ----------------------------------------
SBMARIN_SW_0050
		IBT	R5,#02H		;(R5)  <-- Ｘスピード加速値
		FROM	R1
		AND	#00001111B
		BEQ	SBMARIN_SW_0100 ;移動キー入力？ ( yes:SBMARIN_SW_0100 )
		NOP
;
		IBT	R5,#08H		;(R5) <-- Ｘスピード減速値
SBMARIN_SW_0100
		MOVE	R7,R5		;(R7) <-- Ｙスピード減速値
;
		MULT	#5
		IWT	R14,#SB_MOVE_DT
		TO	R14
		ADD	R14
		GETB
		TO	R10		;(R10) <-- 目標回転角度
		SWAP
		INC	R14
		GETB
		INC	R14
		TO	R6		;(R6) <-- 目標Ｘスピード
		GETBH
		INC	R14
		GETB
		INC	R14
		TO	R8		;(R8) <-- 目標Ｙスピード
		GETBH
;
;-------------- 水中チェック --------------------------------------------
SBMARIN_SW_0200
		mJSR	PUKA_CHECK	;水面”プカプカ”チェック
;
		LMS	R0,CPLSWPK
		DEC	R0
		BMI	SBMARIN_SW_0250 ;水面”プカプカ”？ ( no:SBMARIN_SW_0250 )
		NOP
;
		IBT	R10,#0		;(R10) <-- 目標回転角度
SBMARIN_SW_0250
		IWT	R4,#0200H	;(R4) <-- 回転スピード
		mJSR	C_ANGL_CALC	;キャラクター回転角度計算
;
		SUB	R0		;<<< end >>>
		STOP
		NOP
;
;****************************************************************
;*		潜水艦基本ルーチン				*
;****************************************************************
SBMARIN_SUB
		SMS	R11,RTS4	;[ return address save ]
;
;-------------- 回転キャラクターセット --------------------------
		IWT	R12,#CIPCHD+0000H  ;(R12) <-- キャラクターアドレス（Ｌ，Ｈ）
		LM	R0,CFRCNT2
		AND	#04H
		BEQ	SBMARIN_SUB_0050
		NOP
;
		IWT	R12,#CIPCHD+0020H  ;(R12) <-- キャラクターアドレス（Ｌ，Ｈ）
SBMARIN_SUB_0050
		IBT	R13,#BANK CIPCHD   ;(R13) <-- キャラクターアドレス（Ｂ）
;
		IBT	R2,#020H	;(R2) <-- ビットマップ座標＿Ｙ
		IBT	R3,#000H	;(R3) <--	 ”	  ＿Ｘ
		LMS	R0,CPSB_ANGL
		TO	R5		;(R5) <-- 角度
		HIB
		LMS	R0,CPLFLSH
;;;;		    IWT	    R6,#090H
		IBT	R6,#050H
		SUB	R6
		BMI	SBMARIN_SUB_0100 ;ダメージ回転？ ( no:SBMARIN_SUB_0100 )
		NOP
;
		LMS	R0,CPSB_FLCT
		ADD	R5
		TO	R5
		LOB
SBMARIN_SUB_0100
		IWT	R6,#0100H	;(R6) <-- 倍率
		mJSR	R_32_RTZ_32	;キャラクター拡大、縮小、回転（サイズ ３２×３２）
;
		IWT	R0,#CR03	;パターンＮｏ．セット
		SMS	R0,CPLPATN
;
		LMS	R11,RTS4	;[ return address load ]
		mRTS
;
;------------------------------------------------------------------------
;-		Ｘスピード加減速					-
;-			in :						-
;-				(R5) <-- スピード加減速値		-
;-				(R6) <-- 目標Ｘスピード			-
;------------------------------------------------------------------------
X_SP_CALC
		LMS	R0,CPLMVSP
		SUB	R6
		BMI	X_SP_CALC_010
		ADD	R6
;
		WITH	R5
		NOT
		INC	R5
X_SP_CALC_010
		ADD	R5
		SBK			;[ SMS R0,CPLMVSP ]
		SMS	R0,CPLXSPD
		SUB	R6
		BEQ	X_SP_CALC_020	;目標Ｘスピード？ ( yes:X_SP_CALC_020 )
		NOP
;
		XOR	R5
		BMI	X_SP_CALC_020	;目標Ｘスピードオーバー？ ( no:X_SP_CALC_020 )
		NOP
;
		SMS	R6,CPLMVSP
		SMS	R6,CPLXSPD
X_SP_CALC_020
		mRTS
;
;------------------------------------------------------------------------
;-		Ｙスピード加減速					-
;-			in :						-
;-				(R7) <-- スピード加減速値		-
;-				(R8) <-- 目標Ｙスピード			-
;------------------------------------------------------------------------
Y_SP_CALC
		LMS	R0,CPLYSPD
		SUB	R8
		BMI	Y_SP_CALC_010
		ADD	R8
;
		WITH	R7
		NOT
		INC	R7
Y_SP_CALC_010
		ADD	R7
		SBK			;[ SMS R0,CPLYSPD ]
		SUB	R8
		BEQ	Y_SP_CALC_020	;目標Ｙスピード？ ( yes:Y_SP_CALC_020 )
		NOP
;
		XOR	R7
		BMI	Y_SP_CALC_020	;目標Ｙスピードオーバー？ ( no:Y_SP_CALC_020 )
		NOP
;
		SMS	R8,CPLYSPD
Y_SP_CALC_020
		mRTS
;
;------------------------------------------------------------------------
;-		キャラクター回転角度計算				-
;-			in :						-
;-				(R4)  <-- 回転スピード			-
;-				(R10) <-- 目標回転角度			-
;-			break:						-
;-				(R14)					-
;------------------------------------------------------------------------
C_ANGL_CALC
		LMS	R0,CPHR_ANGL
		TO	R14		;(R14) <-- 回転方向
		SUB	R10
		BEQ	C_ANGL_CALC_030 ;目標回転角度？ ( yes:C_ANGL_CALC_030 )
		NOP
;
		BMI	C_ANGL_CALC_010 ;回転角度加減方向逆？ ( no:C_ANGL_CALC_010 )
		NOP
;
		WITH	R4
		NOT
		INC	R4
C_ANGL_CALC_010
		ADD	R4
		SBK			;[ SMS R0,CHR_ANGL ]
;
		SUB	R10
		XOR	R14
		BPL	C_ANGL_CALC_030 ;目標回転角度オーバー？ ( no:C_ANGL_CALC_030 )
		NOP
;
		FROM	R10
		SBK			;[ SMS R0,CHR_ANGL ]
C_ANGL_CALC_030
		mRTS
;
;------------------------------------------------------------------------
;-		水面”プカプカ”チェック				-
;-			in :						-
;-				(R5)  <-- Ｘスピード加減速値		-
;-				(R6)  <-- 目標Ｘスピード		-
;-				(R7)  <-- Ｙスピード加減速値		-
;-				(R8)  <-- 目標Ｙスピード		-
;-			break :						-
;-				(R2)(R3)				-
;------------------------------------------------------------------------
PUKA_CHECK
		SMS	R11,RTS4	;[ return address save ]
;
		mJSR	X_SP_CALC	;Ｘスピード加減速
;
		LMS	R0,CPLSWIM
		SUB	#3
		BCS	PUKA_CHECK_0100 ;水中処理初期セット？ ( no:PUKA_CHECK_0100 )
		NOP
;
;-------------- 水中処理初期セット --------------------------------------
		LMS	R0,CPLYSPD
		IBT	R3,#030H
		SUB	R3
		BPL	PUKA_CHECK_0050 ;減速終了？ ( no:PUKA_CHECK_0050 )
		SBK			;[ SMS R0,CPLYSPD ]
;
		IBT	R0,#3
		SMS	R0,CPLSWIM	;水中処理へ
		SUB	R0
		SMS	R0,CPLSWPK	;水面”プカプカ”フラグリセット
PUKA_CHECK_0050
		BRA	PUKA_CHECK_0500
		NOP
;
PUKA_CHECK_0100
		LMS	R0,CPLSWPK
		DEC	R0
		BPL	PUKA_CHECK_0200 ;水面”プカプカ”？ ( yes:PUKA_CHECK_0200 )
		NOP
;
;-------------- 水中処理 ------------------------------------------------
		IBT	R4,#0FH		;(R4) <-- あぶくセットＸ位置
		IBT	R6,#0EH		;(R6) <-- あぶくセットＹ位置
		mJSR	BABL0_SET_2	;あぶく効果セット
;
		LMS	R0,CPLWATR	;(R0) <-- 水中フラグ
		IWT	R3,#101011000B
		AND	R3
		BNE	PUKA_CHECK_0150 ;水面に顔が出た？ ( no:PUKA_CHECK_0150 )
		SUB	R0		;[ R0 <- 0 ]
;
		INC	R0		;[ IBT R0,#01H ]
		SMS	R0,CPLSWPK	;水面”プカプカ””ＯＮ”
;
;-------------- 水しぶきセット ----------------------------------
		IBT	R4,#014H	;(R4) <-- ”バッシャーン”セットＹ位置
		mJSR	WTUP0_SET_2	;”バッシャーン”効果セット
;
		LMS	R0,CPLJUMP
		DEC	R0
		BPL	PUKA_CHECK_0150 ;着地？ ( no:PUKA_CHECK_0150 )
		SUB	R0		;[ * 泳ぎキャンセル ]
;
		SMS	R0,CPLSWIM	;泳ぎキャンセル
;
PUKA_CHECK_0150
		BRA	PUKA_CHECK_0250
		NOP
;
;-------------- 水面処理 ------------------------------------------------
PUKA_CHECK_0200
		IBT	R4,#0EH		;(R4) <-- ”ピチャピチャ”セットＹ位置
		mJSR	WTUP1_SET_2	;”ピチャピチャ”効果セット
;
;-------------- 水面”プカプカ”処理 ----------------------------
		IBT	R2,#04H		;(R2) <-- 重力
		LMS	R0,CPLWATR
		IWT	R3,#101000000B
		AND	R3
		BEQ	PUKA_CHECK_0350 ;水面に顔が出た？ ( yes:PUKA_CHECK_0350 )
		NOP
;
;-------------- 水面”プカプカ”キャンセルチェック ------
		LMS	R0,CPLWATR
		IBT	R3,#000011000B
		AND	R3
		BEQ	PUKA_CHECK_0210 ;水中に浸かった？ ( no:PUKA_CHECK_0210 )
		SUB	R0		;[ R0 <- 0 ]
;
		SMS	R0,CPLSWPK	;水面”プカプカ”キャンセル
;
;-------------- 水しぶきセット ------------------
		IBT	R4,#08H		;(R4) <-- ”バッシャーン”セットＹ位置
		mJSR	WTUP0_SET_2	;”バッシャーン”効果セット
		BRA	PUKA_CHECK_0250
		NOP
;
PUKA_CHECK_0210
		IBT	R2,#0FCH	;[ IWT R2,#0FFFCH ] (R2) <-- 浮力
;
		DEC	R8		;[ (R8):目標Ｙスピード ]
		BMI	PUKA_CHECK_0350 ;潜る？ ( no:PUKA_CHECK_0350 )
		INC	R8
;
PUKA_CHECK_0250
		mJSR	Y_SP_CALC	;Ｙスピード加減速
;
		BRA	PUKA_CHECK_0500
		NOP
;
PUKA_CHECK_0350
		LMS	R0,CPLYSPD
		ADD	R2
		IBT	R2,#0D0H	;[ IWT R2,#0FFD0H ]
		SUB	R2
		BPL	PUKA_CHECK_0400 ;上昇スピードオーバー？ ( no:PUKA_CHECK_0400 )
		ADD	R2
;
		FROM	R2
PUKA_CHECK_0400
		SBK			;[ SMS (R0|R2),CPLYSPD ]
;
PUKA_CHECK_0500
		LMS	R11,RTS4	;[ return address load ]
		mRTS
;
;
;
;
;
;************************************************************************
;*									*
;*		マリオ							*
;*									*
;************************************************************************
;
MARIO_MV
		LM	R0,CSUPER_FLAG
		IWT	R1,#0C0H
		SUB	R1
		BCS	MARIO_MV_0050	;警告音セット？ ( no:MARIO_MV_0050 )
		ADD	R1
;
		INC	R0
		IBT	R1,#03FH
		AND	R1
		BNE	MARIO_MV_0050	;警告音セット？ ( no:MARIO_MV_0050 )
		NOP
;
;-------------- 警告音セット --------------------------------------------
		IBT	R0,#07FH	;[♪]
		SMS	R0,CMSOUND3
;
;------------------------------------------------------------------------
;-		マリオ普通の処理					-
;------------------------------------------------------------------------
MARIO_MV_0050
		LMS	R0,CPLSWIM
		DEC	R0
		BMI	MARIO_MV_0100	;泳ぎ中？ ( no:MARIO_MV_0100 )
		NOP
;
		mDJMP	MARIO_SW
;
MARIO_MV_0100
		mJSR	MR_CALC		;座標計算
;
		mJSR	MR_BGCK		;ＢＧチェック
		mJSR	WATR_CHECK	;水中チェック
;
		mJSR	MR_KEY		;コントローラー入力
;
MARIO_MV_0150
		mJSR	MR_PATN		;パターンＮｏ．セット
;
		SUB	R0		;<<< end >>>
		STOP
		NOP
;
;------------------------------------------------------------------------
;-		水中泳ぎ処理						-
;------------------------------------------------------------------------
MARIO_SW
;;;;		    LMS	    R0,CPLMVSP	    ;Ｘスピードセット
;;;;		    SMS	    R0,CPLXSPD
;;;;		    mJSR    XY_CALC	    ;座標計算
;;;;;
;;;;		    SUB	    R0		    ;[ IBT R0,#0 ]
;;;;		    SMS	    R0,CPLSITD	    ;お座りフラグキャンセル
;;;;		    mJSR    PL_BGCK	    ;ＢＧチェック
;;;;;
;;;;		    LMS	    R1,CPLSWIM
;;;;		    FROM    R1
;;;;		    SUB	    #3
;;;;		    BCS	    MARIO_SW_0200   ;水中泳ぎ初期セット？ ( no:MARIO_SW_0200 )
;;;;		    NOP
;;;;;
;;;;;-------------- 水中泳ぎ初期処理 ----------------------------------------
;;;;;
;;;;;-------------- 初期浮力セット ----------------------------------
;;;;		    FROM    R1		    ;x4
;;;;		    ADD	    R1		    ;
;;;;		    ADD	    R0		    ;
;;;;		    IWT	    R14,#SWIM_INDT-4
;;;;		    TO	    R14
;;;;		    ADD	    R14
;;;;		    GETBS
;;;;		    INC	    R14
;;;;		    LMS	    R2,CPLYSPD
;;;;		    ADD	    R2
;;;;		    BPL	    MARIO_SW_0050   ;減速終了？ ( no:MARIO_SW_0050 )
;;;;		    SBK			    ;[ SMS R0,CPLYSPD ]
;;;;;
;;;;		    GETB
;;;;		    SBK			    ;[ SMS R0,CPLYSPD ]
;;;;;
;;;;		    INC	    R1
;;;;		    SMS	    R1,CPLSWIM
;;;;;
;;;;MARIO_SW_0050
;;;;		    INC	    R14
;;;;;
;;;;;-------------- Ｘスピード減速 ----------------------------------
;;;;		    IBT	    R1,#040H
;;;;		    LMS	    R0,CPLMVSP
;;;;		    SUB	    #0
;;;;		    BMI	    MARIO_SW_0100
;;;;		    NOP
;;;;;
;;;;		    WITH    R1
;;;;		    NOT
;;;;		    INC	    R1
;;;;MARIO_SW_0100
;;;;		    ADD	    R1
;;;;		    TO	    R1
;;;;		    XOR	    R1
;;;;		    BMI	    MARIO_SW_0150   ;Ｘスピード減速終了？ ( no:MARIO_SW_0150 )
;;;;		    NOP
;;;;;
;;;;		    SUB	    R0		    ;[ IBT R0,#0 ]
;;;;MARIO_SW_0150
;;;;		    SBK			    ;[ SMS R0,CPLMVSP ]
;;;;		    SMS	    R0,CPLXSPD
;;;;;
;;;;;-------------- 泳ぎ初期パターンセット --------------------------
;;;;		    mDJMP   MARIO_SW_0500
;;;;;
;;;;;-------------- 水中泳ぎ処理 --------------------------------------------
;;;;MARIO_SW_0200
;;;;;
;;;;;-------------- Ｘ方向移動チェック ------------------------------
;;;;		    IBT	    R0,#ON_WATR	    ;水中歩きセット
;;;;		    SMS	    R0,CPLBGNO
;;;;		    mJSR    BERO_CHECK	    ;舌ショットチェック
;;;;		    LM	    R1,CMKEYC1	    ;(R1) <-- コントローラー情報（連続）
;;;;		    mJSR    PL_KEY_XMOV	    ;コントローラー入力（Ｘスピード制御）
;;;;;
;;;;;-------------- 水中泳ぎキャンセルチェック ------------------------------
;;;;		    LMS	    R2,CPLYSPD	    ;(R2) <-- Ｙスピード
;;;;		    IBT	    R3,#0FEH	    ;[ IWT R2,#0FFFEH ] (R3) <-- 浮力
;;;;;
;;;;		    LMS	    R0,CPLBGCR
;;;;		    IBT	    R4,#00001100B
;;;;		    AND	    R4
;;;;		    BNE	    MARIO_SW_0232   ;頭ＢＧ当たり？ ( yes:MARIO_SW_0232 )
;;;;		    NOP
;;;;;
;;;;		    LMS	    R7,CPLWATR	    ;(R7) <-- 水中フラグ
;;;;		    FROM    R7
;;;;		    AND	    R4
;;;;		    BNE	    MARIO_SW_0240   ;頭水中？ ( yes:MARIO_SW_0240 )
;;;;		    NOP
;;;;;
;;;;		    mJSR    WTUP1_SET	    ;”ピチャピチャ”効果セット
;;;;;
;;;;;-------------- 水面ジャンプチェック ----------------------------
;;;;		    LMS	    R0,CP_KEY_JUMP  ;(R0) <-- ジャンプボタン情報
;;;;		    IWT	    R1,#0000100000000000B
;;;;		    TO	    R1		    ;(R1) <-- ジャンプｕｐキー
;;;;		    OR	    R1
;;;;		    LMS	    R0,CMKEYC1L	    ;(R0) <-- コントローラー情報（連続）
;;;;		    AND	    R1
;;;;		    SUB	    R1
;;;;		    BNE	    MARIO_SW_0210   ;ジャンプｕｐキー入力？ ( no:MARIO_SW_0210 )
;;;;		    NOP
;;;;;
;;;;		    IWT	    R0,#P006
;;;;		    SMS	    R0,CPLJUMP	    ;ジャンプフラグセット
;;;;		    IWT	    R0,#0FB80H
;;;;		    SMS	    R0,CPLYSPD	    ;ジャンプＹスピードセット
;;;;		    BRA	    MARIO_SW_0220
;;;;		    SUB	    R0		    ;[ * 泳ぎキャンセル ]
;;;;;
;;;;MARIO_SW_0210
;;;;		    IBT	    R0,#10100000B
;;;;		    AND	    R7
;;;;		    BNE	    MARIO_SW_0240   ;水面に顔が出た？ ( no:MARIO_SW_0240 )
;;;;		    SUB	    R0		    ;[ * R0 <- 0 ]
;;;;;
;;;;		    LMS	    R4,CPLJUMP
;;;;		    SUB	    R4		    ;[ * CMP #0 : R0=0 ]
;;;;		    BNE	    MARIO_SW_0230   ;着地？ ( no:MARIO_SW_0230 )
;;;;		    SUB	    R0		    ;[ * 泳ぎキャンセル ]
;;;;;
;;;;MARIO_SW_0220
;;;;		    SMS	    R0,CPLSWIM	    ;泳ぎキャンセル
;;;;;
;;;;;-------------- 水しぶきセット ----------------------------------
;;;;		    mJSR    WTUP0_SET	    ;”バッシャーン”効果セット
;;;;		    BRA	    MARIO_SW_0600
;;;;		    NOP
;;;;;
;;;;MARIO_SW_0230
;;;;		    IBT	    R0,#0D0H	    ;[ IWT R0,#0FFD0H ]
;;;;		    SUB	    R2
;;;;		    BMI	    MARIO_SW_0232   ;上昇スピードオーバー？ ( no:MARIO_SW_0232 )
;;;;		    TO	    R2		    ;[ * ]
;;;;;
;;;;		    ADD	    R2		    ;[ PLYSPD <-- 0FFD0H ]
;;;;MARIO_SW_0232
;;;;		    IBT	    R3,#02H	    ;(R2) <-- 重力
;;;;;
;;;;;-------------- あぶくセット ------------------------------------
;;;;MARIO_SW_0240
;;;;		    mJSR    BABL0_SET	    ;あぶく効果セット
;;;;;
;;;;;-------------- 浮力セット --------------------------------------
;;;;MARIO_SW_0250
;;;;		    FROM    R2
;;;;		    ADD	    R3
;;;;		    IWT	    R3,#0FF00H
;;;;		    SUB	    R3
;;;;		    BMI	    MARIO_SW_0300   ;上昇スピードオーバー？ ( no:MARIO_SW_0300 )
;;;;		    TO	    R3
;;;;;
;;;;		    ADD	    R3
;;;;MARIO_SW_0300
;;;;		    SMS	    R3,CPLYSPD
;;;;;
;;;;;-------------- 泳ぎパターンセット ------------------------------
;;;;		    LM	    R0,CFRCNT2
;;;;		    LSR
;;;;		    LSR
;;;;		    TO	    R1
;;;;		    AND	    #03H*2
;;;;		    LM	    R0,CMKEYC1	    ;(R1) <-- コントローラー情報（連続）
;;;;		    AND	    #00000011B
;;;;		    BEQ	    MARIO_SW_0350   ;移動キー入力？ ( yes:MARIO_SW_0350 )
;;;;		    WITH    R1
;;;;;
;;;;		    ADD	    #4*2
;;;;MARIO_SW_0350
;;;;		    IWT	    R0,#SWIM_PATN
;;;;		    TO	    R14
;;;;		    ADD	    R1
;;;;;
;;;;;-------------- パターンＮｏ．セット ------------------------------------
;;;;MARIO_SW_0500
;;;;		    LMS	    R0,CBERFLG
;;;;		    DEC	    R0
;;;;		    BPL	    MARIO_SW_0600   ;舌ショット中？ ( yes:MARIO_SW_0600 )
;;;;		    NOP
;;;;;
;;;;		    LMS	    R0,CPLNAGE
;;;;		    LOB
;;;;		    BEQ	    MARIO_SW_0510   ;タマゴ投げ中？ ( no:MARIO_SW_0510 )
;;;;		    ADD	    R0		    ;x2
;;;;;
;;;;;-------------- タマゴ投げパターンセット ----------------------
;;;;		    IWT	    R14,#NAGE_PATN-2
;;;;		    TO	    R14
;;;;		    ADD	    R14
;;;;;
;;;;MARIO_SW_0510
;;;;		    GETB
;;;;		    INC	    R14
;;;;		    GETBH		    ;(R0) <-- パターンＮｏ．
;;;;		    SMS	    R0,CPLPATN	    ;パターンＮｏ．セット
;;;;;
;;;;MARIO_SW_0600
;;;;		    SUB	    R0		    ;<<< end >>>
;;;;		    STOP
;;;;		    NOP
;
;************************************************************************
;*									*
;*		コントローラー入力					*
;*									*
;************************************************************************
;
MR_KEY
;
;------------------------------------------------------------------------
;-		移動キーチェック					-
;------------------------------------------------------------------------
		LM	R1,CMKEYC1	;(R1) <-- コントローラー情報（連続）
		LM	R2,CMKEYC2	;(R2) <--	   ”	    （トリガー）
;
		LMS	R0,CPLJUMP
		DEC	R0
		BMI	MR_KEY_1000	;ジャンプ中？ ( no:MR_KEY_1000 )
		NOP
;
;------------------------------------------------------------------------
;-		ジャンプ中のキーチェック				-
;------------------------------------------------------------------------
		LMS	R7,CPMR_HBCT
		MOVES	R7,R7
		BPL	MR_KEY_0010	;ＢＧ頭当たり”ボヨヨ〜ン”中？ ( no:MR_KEY_0010 )
		NOP
;
;-------------- ＢＧ頭当たり”ボヨヨ〜ン”セット ------------------------
		LMS	R0,CPMR_HBSP
		IWT	R4,#060H
		ADD	R4
		SBK			;[ SMS R0,CPMR_HBSP ]
;
		ADD	R7
		SMS	R0,CPMR_HBCT
MR_KEY_0010
		mDJMP	MR_KEY_1500
;
;------------------------------------------------------------------------
;-		着地中のキーチェック					-
;------------------------------------------------------------------------
MR_KEY_1000
		LMS	R7,CPMR_FBCT
		DEC	R7
		BMI	MR_KEY_1002	;着地”ボヨヨ〜ン”？中？ ( no:MR_KEY_1002 )
		INC	R7
;
;-------------- 着地”ボヨヨ〜ン”セット --------------------------------
		LMS	R0,CPMR_FBSP
 IF  JPN | NES ;**** 日本 or NES 対応 [1995/08/07] **********************
		IWT	R4,#-060H
 ELSE	  ;**** PAL 対応 [1995/08/07] *****************************
		IWT	R4,#0FF40H
 ENDIF
		ADD	R4
		SBK			;[ SMS R0,CPMR_FBSP ]
;
		ADD	R7
		SMS	R0,CPMR_FBCT
;;;;		    mDJMP   MR_KEY_1500
;
;----------------------------------------------------------------
;-		しゃがみチェック				-
;----------------------------------------------------------------
MR_KEY_1002
		LMS	R7,CPLSITD	;(R7) <-- しゃがみフラグ
		IBT	R8,#-1		;(R8) <-- しゃがみフラグ減算データ
		FROM	R1
		AND	#00000100B	;(R0) <-- ＭＡＸチェックデータ（０）
		BEQ	MR_KEY_1010	;しゃがみ？ ( no:MR_KEY_1010 )
		NOP
;
		IBT	R8,#1		;(R8) <-- しゃがみフラグ加算データ
		IBT	R0,#5		;(R0) <-- ＭＡＸチェックデータ
MR_KEY_1010
		SUB	R7
		BEQ	MR_KEY_1020	;しゃがみフラグＭＡＸ？ ( yes:MR_KEY_1020 )
		ADD	R7
;
		FROM	R7
		ADD	R8
		SBK			;[ SMS R0,CPLSITD ]
MR_KEY_1020
		BEQ	MR_KEY_1100	;しゃがみ中？ ( no:MR_KEY_1100 )
		NOP
;
		LM	R0,CP_KEY_JUMP+1 ;(R0) <-- ジャンプボタン情報
		AND	R2
		BNE	MR_KEY_1110	;ジャンプ？ ( yes:MR_KEY_1110 )
		NOP
;
		mDJMP	MR_KEY_1800
;
;----------------------------------------------------------------
;-		ジャンプチェック				-
;----------------------------------------------------------------
MR_KEY_1100
		LM	R0,CP_KEY_JUMP+1 ;(R0) <-- ジャンプボタン情報
		AND	R2
		BNE	MR_KEY_1110	;ジャンプ？ ( yes:MR_KEY_1110 )
		NOP
;
		mDJMP	MR_KEY_1200
;
MR_KEY_1110
		IBT	R0,#038H	;[♪]
		SMS	R0,CMSOUND3
;
;;;;		    IBT	    R0,#040H
;;;;		    SMS	    R0,CSOUND_ON    ;サウンドセットフラグセット
;;;;		    LMS	    R0,CPLXPSL
;;;;		    SM	    R0,CSOUND_X	    ;サウンドセットＸ座標セット
;;;;		    LMS	    R0,CPLYPSL
;;;;		    SM	    R0,CSOUND_Y	    ;サウンドセットＹ座標セット
;
		IWT	R0,#0170H
		LM	R6,CPL_ADD_XSP
		LMULT
		WITH	R4
		HIB
		LOB
		SWAP
		TO	R7		;(R7) <-- ジャンプＸスピード加算値
		OR	R4
;
 IF  JPN | NES ;**** 日本 or NES 対応 [1995/6/30] ****************
		IWT	R6,#0FB60H	;(R6) <-- ジャンプＹスピード
 ELSE	       ;**** PAL 対応 [1995/7/20] ************************
		IWT	R6,#0FAD0H	;(R6) <-- ジャンプＹスピード
 ENDIF
		LMS	R0,CPMR_BGCF
		SUB	#0
		BEQ	MR_KEY_1150	;ソニックモード？ ( no:MR_KEY_1150 )
		NOP
;
;-------------- ソニックモードからのジャンプ --------------------
		IBT	R0,#BANK LSIN
		ROMB
;
		IWT	R14,#LSIN
		LMS	R0,CPLANGL	;(R0) <-- 足下角度
		TO	R14
		ADD	R14
		GETBS
		ADD	R0
		ADD	R0		;[ 100H <-- 040H ]
		LMULT
		WITH	R4
		HIB
		LOB
		SWAP
		OR	R4
		NOT
		INC	R0
		TO	R7		;(R7) <-- ジャンプＸスピード加算値
		ADD	R7
;
		IBT	R0,#040H	;[ IWT R0,#LSIN ]
		WITH	R14
		SUB	R0
		GETBS
		ADD	R0
		ADD	R0		;[ 100H <-- 040H ]
		LMULT
		WITH	R4
		HIB
		LOB
		SWAP
		OR	R4
		LMS	R6,CPLYSPD
		DEC	R6
		BMI	MR_KEY_1120
		INC	R6
;
		IBT	R6,#0
MR_KEY_1120
		TO	R6		;(R6) <-- ジャンプＹスピードセット
		ADD	R6
		BMI	MR_KEY_1130	;上昇？ ( yes:MR_KEY_1130 )
		TO	R6		;[ IBT R6,#0 ]
;
		SUB	R0
MR_KEY_1130
		IBT	R0,#BANK PLAYER_DATA
		ROMB
		BRA	MR_KEY_1180
		NOP
;
;-------------- ノーマルモードからのジャンプ --------------------
MR_KEY_1150
		LMS	R0,CPLBGCR
		IBT	R4,#000011000B
		AND	R4
		BEQ	MR_KEY_1180	;頭ＢＧ当たり？ ( no:MR_KEY_1180 )
		TO	R6		;[ IBT R6,#0 ]
;
		SUB	R0
MR_KEY_1180
		SMS	R6,CPLYSPD	;Ｙスピードセット
		LMS	R0,CPLXSPD
		ADD	R7
		SMS	R0,CPLMVSP
;
		IWT	R0,#P006
		SMS	R0,CPLJUMP	;ジャンプフラグ”ＯＮ”
		SUB	R0
		SMS	R0,CPLKAID	;階段フラグリセット
		SMS	R0,CPLSITD	;しゃがみリセット
		SMS	R0,CPMR_FBCT	;着地”ボヨヨ〜ン”リセット
		BRA	MR_KEY_1500
		NOP
;
MR_KEY_1200
;
;;;;;----------------------------------------------------------------
;;;;;-		    上向きチェック				    -
;;;;;----------------------------------------------------------------
;;;;		    FROM    R1
;;;;		    AND	    #00001000B
;;;;		    BEQ	    MR_KEY_1500	    ;上向く？ ( no:MR_KEY_1500 )
;;;;		    NOP
;;;;;
;;;;		    IWT	    R0,#P106
;;;;		    SMS	    R0,CPLUPFG	    ;上向きフラグ”ＯＮ”
;
;------------------------------------------------------------------------
;-		移動キーチェック					-
;------------------------------------------------------------------------
MR_KEY_1500
		LMS	R0,CPMR_SBCT
		SUB	#0
		BEQ	MR_KEY_1501	;ＢＧヨコ当たり”ボヨヨ〜ン”中？ ( no:MR_KEY_1501 )
		NOP
;
;-------------- ＢＧヨコ当たり”ボヨヨ〜ン”セット ----------------------
		LMS	R4,CPMR_SBSP
		TO	R7
		ADD	R4
		XOR	R7
		BPL	MR_KEY_15002	;ＢＧヨコ当たり”ボヨヨ〜ン”終了？ ( no:MR_KEY_15002 )
		SUB	R0		;[ IBT R0,#0 ]
;
		SBK			;[ SMS R0,CPMR_SBSP ]
		SMS	R0,CPMR_SBCT
		SMS	R4,CPLXSPD
		SMS	R4,CPLMVSP
		MOVES	R0,R4
		BMI	MR_KEY_15001
		NOP
;
		NOT
		INC	R0
MR_KEY_15001
		ADD	R0
		SMS	R0,CPLYSPD	;Ｙスピードセット
		IWT	R0,#P006
		SMS	R0,CPLJUMP	;ジャンプフラグ”ＯＮ”
		BRA	MR_KEY_1501
		NOP
;
MR_KEY_15002
 IF  JPN | NES ;**** 日本 or NES 対応 [1995/08/07] **********************
		IBT	R0,#060H
 ELSE	  ;**** PAL 対応 [1995/08/07] *****************************
		IBT	R0,#07FH
 ENDIF
		MOVES	R7,R7
		BMI	MR_KEY_15004
		NOP
;
 IF  JPN | NES ;**** 日本 or NES 対応 [1995/08/07] **********************
		IBT	R0,#-060H
 ELSE	  ;**** PAL 対応 [1995/08/07] *****************************
		IBT	R0,#-07FH
 ENDIF

MR_KEY_15004
		ADD	R4
		SBK			;[ SMS R0,CPMR_SBSP ]
		SMS	R7,CPMR_SBCT
		SUB	R0		;[ IBT R0,#0 ]
		SMS	R0,CPLYSPD	;Ｙスピードクリアー
		mDJMP	MR_KEY_1720
;
MR_KEY_1501
		LMS	R0,CPLKAID
		DEC	R0
		BMI	MR_KEY_XMOV	;階段歩き中？ ( no:MR_KEY_XMOV )
		NOP
;
		mDJMP	MR_KEY_1720
;
;-------------- Ｘスピード制御 ------------------------------------------
MR_KEY_XMOV
		LMS	R0,CPLJUMP
		DEC	R0
		BMI	MR_KEY_1502	;ジャンプ中？ ( no:MR_KEY_1502 )
		FROM	R1
;
		LMS	R0,CPLSPJP
		SUB	#2+3
		BCC	MR_KEY_1502	;ホバリング？ ( no:MR_KEY_1502 )
		FROM	R1
;
		mDJMP	MR_KEY_2000
;
;-------------- ノーマル加速 ------------------------------------
MR_KEY_1502
;;;;		    FROM    R1
		AND	#00000011B
		BNE	MR_KEY_1510	;左右キー入力？ ( yes:MR_KEY_1510 )
		NOP
;
		mDJMP	MR_KEY_1800
;
MR_KEY_1510
		SMS	R0,CPLSTOP	;止まってるフラグリセット
;
		IBT	R7,#-1		;(R7) <-- 左右キーによる移動方向（左）
		AND	#02H		;(R0) <-- プレイヤー向き
		BNE	MR_KEY_1520	;左へ？ ( yes:MR_KEY_1520 )
		NOP
;
		IBT	R7,#01H		;(R7) <-- 左右キーによる移動方向（右）
MR_KEY_1520
		LMS	R4,CPLCMKI	;(R4) <-- 移動向き
		SUB	R4
		BEQ	MR_KEY_1550	;向き変わった？ ( no:MR_KEY_1550 )
		ADD	R4
;
		SMS	R0,CPLCMKI
		MOVE	R4,R0		;(R4) <-- 移動向き
MR_KEY_1550
		LMS	R0,CPLMVSP
		SUB	#0
		BEQ	MR_KEY_1700	;止まってた？ ( yes:MR_KEY_1700 )
		NOP
;
		XOR	R7
		BPL	MR_KEY_1700	;スリップ？ ( no:MR_KEY_1700 )
		NOP
;
;----------------------------------------------------------------
;-		スリップ					-
;----------------------------------------------------------------
;;;;		    LMS	    R0,CPLJUMP
;;;;		    SUB	    #0
;;;;		    BNE	    MR_KEY_1700	    ;ジャンプ中？ ( yes:MR_KEY_1700 )
;;;;		    NOP
;
		IBT	R0,#04H
		SMS	R0,CPLSLIP	;スリップフラグ”ＯＮ”
;
;----------------------------------------------------------------
;-		加速						-
;----------------------------------------------------------------
MR_KEY_1700
		LM	R0,CPLBGNO+1	;ＢＧタイプ ×（（２＋２）×１６）
		LSR			;
		LSR			;
		TO	R7
		OR	R4		;[ ＯＲ（移動向き） ]
		LMS	R0,CPLANGL
		BIC	#0FH		;[ AND #0FFF0H ]
		LSR
		LSR
		TO	R7		;(R7) <-- 加速データポインター
		OR	R7
;
		IWT	R0,#MAX_SPEED
		TO	R14		;(R14) <-- ＭＡＸスピードデータポインター
		ADD	R7
		GETB
		INC	R14
		TO	R8		;(R8) <-- ＭＡＸスピード
		GETBH
;
;-------------- （Ｂ）加速チェック ------------------------------
		IBT	R0,#01000000B
		AND	R1
		BEQ	MR_KEY_1704	;（Ｂ）加速？ ( no:MR_KEY_1704 )
		NOP
;
		IWT	R6,#0140H	;(R6) <-- （Ｂ）加速率
		FROM	R8
		LMULT
		WITH	R4
		HIB
		LOB
		SWAP
		TO	R8		;(R8) <-- （Ｂ）加速ＭＡＸスピード
		OR	R4
;
MR_KEY_1704
		LMS	R0,CPLMVSP	;(R0) <-- 移動スピード
		SUB	R8
		BEQ	MR_KEY_1850	;ＭＡＸスピードオーバー？ ( yes:MR_KEY_1850 )
		NOP
;
		XOR	R8
		BPL	MR_KEY_1850	;ＭＡＸスピードオーバー？ ( yes:MR_KEY_1850 )
		NOP
;
		LMS	R0,CPLSLIP
		LOB
		BEQ	MR_KEY_1710	;スリップ？ ( no:MR_KEY_1710 )
		NOP
;
		INC	R7
MR_KEY_1710
		IWT	R0,#ADD_SPEED
		ADD	R7
		TO	R14
		ADD	R7
		GETB
		INC	R14
		GETBH
;
		LMS	R7,CPLMVSP
		ADD	R7
		SBK			;[ SMS R0,CPLMVSP ]
;
MR_KEY_1720
		mRTS
;
;----------------------------------------------------------------
;-		減速						-
;----------------------------------------------------------------
MR_KEY_1800
		LMS	R0,CPLJUMP
		DEC	R0
		BMI	MR_KEY_1850	;ジャンプ中？ ( no:MR_KEY_1850 )
		NOP
;
		LMS	R0,CPLSWIM
		DEC	R0
		BPL	MR_KEY_1850	;泳いでる？ ( yes:MR_KEY_1850 )
		NOP
;
;--------------------------------------------------------
;-		ジャンプ中の減速			-
;--------------------------------------------------------
		IWT	R14,#MAX_SPEED	;(R14) <-- ＭＡＸスピードデータポインター
		LMS	R0,CPLMVSP
		SUB	#0
		BPL	MR_KEY_1810
		NOP
;
		INC	R14
		INC	R14
MR_KEY_1810
		TO	R8
		GETB
		INC	R14
		WITH	R8
		GETBH
;
		SUB	R8
		BEQ	MR_KEY_1850	;ＭＡＸスピードオーバー？ ( yes:MR_KEY_1850 )
		NOP
;
		XOR	R8
		BPL	MR_KEY_1850	;ＭＡＸスピードオーバー？ ( yes:MR_KEY_1850 )
		NOP
;
		mRTS
;
;--------------------------------------------------------
;-		着地中の減速				-
;--------------------------------------------------------
MR_KEY_1850
		LM	R0,CPLBGNO+1	;ＢＧタイプ ×（２×１６）
		LSR			;
		LSR			;
		TO	R7		;
		LSR			;
		LMS	R0,CPLANGL
		BIC	#0FH		;[ AND #0FFF0H ]
		LSR
		LSR
		LSR
		TO	R4		;(R4) <-- 減速データポインター
		OR	R7
		IWT	R0,#MIN_SPEED
		TO	R14
		ADD	R4
		GETB
		INC	R14
		TO	R7		;(R7) <-- ＭＩＮスピード
		GETBH
;
		LMS	R8,CPLMVSP	;(R8) <-- 移動スピード
		FROM	R8
		SUB	R7
		BPL	MR_KEY_1860
		NOP
;
		INC	R4
MR_KEY_1860
		IWT	R0,#SUB_SPEED
		ADD	R4
		TO	R14
		ADD	R4
		GETB
		INC	R14
		GETBH
		MOVE	R4,R0		;(R4) <-- 減速値
;
		ADD	R8
		MOVE	R8,R0
		SUB	R7
		XOR	R4
		BMI	MR_KEY_1870	;ＭＩＮスピードオーバー？ ( no:MR_KEY_1870 )
		SUB	R0
;
		SMS	R0,CPLSTOP
		MOVE	R8,R7
MR_KEY_1870
		SMS	R8,CPLMVSP
		mRTS
;
;-------------- ホバリング加速 ----------------------------------
MR_KEY_2000
		LMS	R4,CPLCMKI	;(R4) <-- プレイヤー向き
		FROM	R1
		AND	#00000011B
		BEQ	MR_KEY_2050	;左右キー入力？ ( no:MR_KEY_2050 )
		NOP
;
		AND	#02H		;(R0) <-- プレイヤー向き
		SUB	R4
		BEQ	MR_KEY_2050	;プレイヤー向き変更？ ( no:MR_KEY_2050 )
		ADD	R4
;
		SBK			;[ SMS R0,CPLCMKI ]
		MOVE	R4,R0		;(R4) <-- プレイヤー向き
		LMS	R0,CPMR_ANGL
		NOT
		INC	R0
		LOB
		SBK			;[ SMS R0,CPMR_ANGL ]
		LMS	R0,CPMR_ANSP
		NOT
		INC	R0
		SBK			;[ SMS R0,CPMR_ANSP ]
MR_KEY_2050
		IWT	R8,#0200H	;(R8) <-- ＭＡＸスピード
		LMS	R14,CPMR_ANGL
		FROM	R14
		SEX
		BMI	MR_KEY_2060
		NOP
;
		IWT	R8,#0100H	;(R8) <-- ＭＡＸスピード
MR_KEY_2060
		LMS	R6,CPMR_ANSP	;(R6) <-- ホバリング回転スピード
		XOR	R6
		BMI	MR_KEY_2100	;加速ＯＫ？ ( no:MR_KEY_2100 )
		SUB	R0		;[ IBT R0,#0 ]
;
		IBT	R0,#BANK LCOS
		ROMB
;
		IWT	R0,#LCOS
		TO	R14
		ADD	R14
		GETB
		SWAP
		FMULT
		DIV2			;1/4
		DIV2			;
;
		DEC	R4
		BPL	MR_KEY_2100	;右向き？ ( yes:MR_KEY_2100 )
		INC	R4
;
		NOT
		INC	R0
MR_KEY_2100
		MOVES	R7,R0		;(R7) <-- 加速値
		BPL	MR_KEY_2150
		WITH	R8		;(R8) <-- ＭＡＸスピード
;
		NOT
		INC	R8
MR_KEY_2150
		IBT	R0,#BANK PLAYER_DATA
		ROMB
;
		LMS	R0,CPLMVSP	;(R0) <-- 移動スピード
		SUB	R8
		BEQ	MR_KEY_2160	;ＭＡＸスピードオーバー？ ( yes:MR_KEY_2160 )
		NOP
;
		XOR	R8
		BMI	MR_KEY_2200	;ＭＡＸスピードオーバー？ ( no:MR_KEY_2200 )
		NOP
;
MR_KEY_2160
		mDJMP	MR_KEY_1850
;
MR_KEY_2200
		LMS	R0,CPLMVSP
		ADD	R7
		SBK			;[ SMS R0,CPLMVSP ]
		mRTS
;
;************************************************************************
;*									*
;*		マリオパターンタイプセット				*
;*									*
;************************************************************************
;
MR_PATN
;
;------------------------------------------------------------------------
;-		キャラクターセット					-
;------------------------------------------------------------------------
		SMS	R11,RTS4	;[ return to address save ]
;
		IBT	R2,#020H	 ;(R2)	<-- ビットマップ座標＿Ｙ
		IBT	R3,#000H	 ;(R3)	<--	   ”	    ＿Ｘ
		IBT	R13,#BANK CIPCHD ;(R13) <-- キャラクターアドレス（Ｂ）
;
		LMS	R0,CPMR_CTYP
		IWT	R14,#MR_CHR_TYPE
		TO	R14
		ADD	R14
		GETB
		INC	R14
		TO	R12		;(R12) <-- キャラクターアドレス（Ｌ，Ｈ）
		GETBH
		INC	R14
;
		GETB
		DEC	R0
		BPL	MR_PATN_0050	;回転キャラ？ ( yes:MR_PATN_0050 )
		INC	R14
;
;-------------- 拡大、縮小キャラクターセット ----------------------------
		LMS	R6,CPMR_CXZM	;(R6) <-- Ｘ倍率
		LMS	R4,CPMR_CYZM	;(R4) <-- Ｙ倍率
		LMS	R8,CPMR_CNTX	;(R8) <-- 中心＿Ｘ
		LMS	R9,CPMR_CNTY	;(R9) <-- 中心＿Ｙ
		mJSR	R_32_ZOOM_XY	;キャラクター拡大、縮小、回転
		BRA	MR_PATN_0100
		NOP
;
;-------------- 回転キャラクターセット ----------------------------------
MR_PATN_0050
		LMS	R5,CPMR_ANGL	;(R5) <-- キャラクター回転角度セット
		IWT	R6,#0100H	;(R6) <-- 倍率
		mJSR	R_32_RTZ_32	;キャラクター拡大、縮小、回転
;
MR_PATN_0100
		LMS	R11,RTS4	;[ return to address load ]
;
		IBT	R0,#BANK PLAYER_DATA
		ROMB			;ＲＯＭバンク復帰
;
;------------------------------------------------------------------------
;-		新パターンセット					-
;------------------------------------------------------------------------
;
;-------------- ダメージパターンセット ----------------------------------
;
MR_PATN_01000
		LMS	R0,CPMR_BGCF
		DEC	R0
		BPL	MR_PATN_06055	;ソニックモード？ ( yes:MR_PATN_06055 )
		NOP
;
;-------------- 座りパターンセット --------------------------------------
		LMS	R0,CPLSITD
		LOB
		BEQ	MR_PATN_05000	;座り中？ ( no:MR_PATN_05000 )
		ADD	R0		;x2
;
		IBT	R12,#MR_P_SITD	;(R12) <-- お座りパターンタイプ
		BRA	MR_PATN_NONCHR
		NOP
;
;-------------- 泳ぎパターンセット --------------------------------------
MR_PATN_05000
;
;
;-------------- ＢＧヨコ当たり”ボヨヨ〜ン”パターンセット --------------
MR_PATN_06000
		LMS	R0,CPMR_SBCT
		SUB	#0
		BEQ	MR_PATN_06050	;ＢＧヨコ当たり”ボヨヨ〜ン”？ ( no:MR_PATN_06050 )
		ADD	R0
;
		BPL	MR_PATN_06010
		ADD	R0
;
		NOT
		INC	R0
MR_PATN_06010
		ADD	R0
		HIB
		IWT	R6,#0100H
		WITH	R6		;(R6)  <-- Ｘ倍率
		SUB	R0
		DIV2
		DIV2
		IWT	R4,#0100H
		TO	R4		;(R4) <-- Ｙ倍率
		ADD	R4
;
		IBT	R12,#MR_P_STOP	;(R12) <-- ”ボヨヨ〜ン”パターンタイプ
		IBT	R8,#04H		;(R8) <-- 中心＿Ｘ
		IBT	R9,#01FH	;(R9) <-- 中心＿Ｙ
		BRA	MR_PATN_ZOMCHR
		NOP
;
;-------------- ジャンプパターンセット ----------------------------------
MR_PATN_06050
		LMS	R1,CPLJUMP
		DEC	R1
		BPL	MR_PATN_06060	;ジャンプ中？ ( yes:MR_PATN_06060 )
		INC	R1
;
MR_PATN_06055
		mDJMP	MR_PATN_07000
;
MR_PATN_06060
		LMS	R0,CPLSPJP
		LOB
		SUB	#2
		BCC	MR_PATN_06068	;ホバリング？ ( no:MR_PATN_06068 )
		DEC	R0		;[ 0- <- 1- ]
;
;-------------- ホバリングパターンセット ------------------------
		IWT	R14,#MR_HOB_CHRDT
		TO	R14
		ADD	R14
;
		SUB	#2		;(C) <-- 回転する？
;
		TO	R12		;(R12) <-- ホバリングパターンタイプ
		BCC	MR_PATN_NONCHR	;回転する？ ( no:MR_PATN_NONCHR )
		GETB
;
		BRA	MR_PATN_CHRPTN
		NOP
;
;-------------- ジャンプ頭当たり”ボヨヨ〜ン”パターンセット ----
MR_PATN_06068
		IBT	R12,#MR_P_UPJP	;(R12) <-- 上昇ジャンプパターンタイプ
		LMS	R0,CPLYSPD
		DEC	R0
		BMI	MR_PATN_06070	;上昇中？ ( yes:MR_PATN_06070 )
		NOP
;
		IBT	R12,#MR_P_DWJP	;(R12) <-- 下降ジャンプパターンタイプ
MR_PATN_06070
		LMS	R0,CPMR_HBCT
		SUB	#0
		BPL	MR_PATN_NONCHR	;ジャンプ頭当たり”ボヨヨ〜ン”？ ( no:MR_PATN_NONCHR )
		ADD	R0
;
		ADD	R0
		HIB
		SEX
		IWT	R4,#0100H
		TO	R4		;(R4) <-- Ｙ倍率
		ADD	R4
		DIV2
		DIV2
		IWT	R6,#0100H
		WITH	R6		;(R6) <-- Ｘ倍率
		SUB	R0
		IBT	R8,#010H	;(R8)  <-- 中心＿Ｘ
		IBT	R9,#0		;(R9)  <--   ”＿Ｙ
		BRA	MR_PATN_ZOMCHR
		NOP
;
MR_PATN_NONCHR
		IWT	R6,#0100H	;(R6) <-- Ｘ倍率
		IWT	R4,#0100H	;(R4) <-- Ｙ倍率
		IBT	R8,#010H	;(R8) <-- 中心＿Ｘ
		IBT	R9,#010H	;(R9) <-- 中心＿Ｙ
;
;-------------- 拡大、縮小キャラクターセット --------------------
MR_PATN_ZOMCHR
		SUB	R0		;[ IBT R0,#0 ]
		SMS	R0,CPMR_ANGL	;キャラクター回転角度セット
		SMS	R6,CPMR_CXZM	;Ｘ倍率セット
		SMS	R4,CPMR_CYZM	;Ｙ倍率セット
		SMS	R8,CPMR_CNTX	;中心＿Ｘセット
		SMS	R9,CPMR_CNTY	;中心＿Ｙセット
		BRA	MR_PATN_CHRPTN
		NOP
;
;-------------- 回転キャラクターセット --------------------------
MR_PATN_ROTCHR

 IF  JPN | NES ;**** 日本 or NES 対応 [1995/08/07] **********************
		IBT	R1,#-4
 ELSE	  ;**** PAL 対応 [1995/08/07] *****************************
		IBT	R1,#-5
 ENDIF
		LMS	R0,CPMR_ANGL
		SUB	R5
		TO	R14
		SWAP
		BPL	MR_PATN_06500
		ADD	R5
;
 IF  JPN | NES ;**** 日本 or NES 対応 [1995/08/07] **********************
		IBT	R1,#4
 ELSE	  ;**** PAL 対応 [1995/08/07] *****************************
		IBT	R1,#5
 ENDIF

MR_PATN_06500
		ADD	R1
		TO	R14
		LOB
		SUB	R5
		SWAP
		XOR	R1
		BMI	MR_PATN_06510
		NOP
;
		MOVE	R14,R5
MR_PATN_06510
		SMS	R14,CPMR_ANGL	;キャラクター回転角度セット
;
;-------------- パターンＮｏ．セット ------------------------------------
MR_PATN_CHRPTN
		SMS	R12,CPMR_CTYP	;パターンタイプセット
;
		IWT	R0,#MR_CHR_TYPE+3
		TO	R14
		ADD	R12
		GETB
		INC	R14
		GETBH
;
		IBT	R1,#8*2		;(R1) <-- マントカウンターデフォルト値
		SUB	#0
		BNE	MR_PATN_06700	;マント可変パターン？ ( no:MR_PATN_06700 )
		NOP
;
;-------------- マントパターンセット ----------------------------
		LMS	R1,CPMR_MANT	;(R1) <-- マントカウンター
		LMS	R0,CPMR_MNTM
		DEC	R0
		BPL	MR_PATN_06650	;マントパターン切り替え？ ( no:MR_PATN_06650 )
		NOP
;
		IWT	R0,#MR_MANT_NOJMP
		LMS	R14,CPLJUMP
		DEC	R14
		BMI	MR_PATN_06600	;ジャンプ中？ ( no:MR_PATN_06600 )
		INC	R14
;
;-------------- ジャンプ中のマントパターンセット --------
		IWT	R0,#MR_MANT_JMPUP
		LMS	R14,CPLYSPD
		DEC	R14
		BMI	MR_PATN_06600	;上昇中？ ( yes:MR_PATN_06600 )
		NOP
;
		IWT	R0,#MR_MANT_JMPDW
MR_PATN_06600
		TO	R14
		ADD	R1
		GETBS
		INC	R14
		TO	R1		;(R1) <-- マントカウンター
		ADD	R1
;
		GETB
		SMS	R0,CPMR_MNTM	;マントパターン切り替えタイマーセット
;
MR_PATN_06650
		IWT	R0,#MR_MANT_PATN
		TO	R14
		ADD	R1
		GETB
		INC	R14
		GETBH
;
MR_PATN_06700
		SMS	R0,CPLPATN	;パターンタイプセット
		SMS	R1,CPMR_MANT	;マントカウンターセット
		mRTS
;
;-------------- ジャンプ着地パターンセット ------------------------------
MR_PATN_07000
		LMS	R0,CPMR_FBCT
		DEC	R0
		BMI	MR_PATN_08000	;着地”ボヨヨ〜ン”？ ( no:MR_PATN_08000 )
		INC	R0
;
		ADD	R0
		ADD	R0
		HIB
		IWT	R4,#0100H
		WITH	R4		;(R4)  <-- Ｙ倍率
		SUB	R0
		DIV2
		DIV2
		IWT	R6,#0100H
		TO	R6		;(R6) <-- Ｙ倍率
		ADD	R6
		IBT	R8,#010H	;(R8)  <-- 中心＿Ｘ
		IBT	R9,#01FH	;(R9)  <--   ”＿Ｙ
;
		IBT	R12,#MR_P_STOP	;(R12) <-- ”ボヨヨ〜ン”パターンタイプ
		mDJMP	MR_PATN_ZOMCHR
;
;-------------- スリップパターンセット ----------------------------------
MR_PATN_08000
		LMS	R0,CPLSLIP
		LOB
		BEQ	MR_PATN_09000	;スリップ中？ ( no:MR_PATN_09000 )
		NOP
;
		LMS	R0,CPLANGL
		LMS	R6,CPLCMKI
		DEC	R6
		BPL	MR_PATN_08050
		NOP
;
		NOT
		INC	R0
		LOB
MR_PATN_08050
		SMS	R0,CPMR_ANGL	;キャラクター回転角度セット
;
		IBT	R12,#MR_P_SLIP	;(R12) <-- スリップパターンタイプ
		mDJMP	MR_PATN_CHRPTN
;
MR_PATN_09000
		LMS	R0,CPLSTOP
		LOB
		BEQ	MR_PATN_10000	;棒立ち中？ ( yes:MR_PATN_10000 )
		NOP
;
		LMS	R0,CPLMVSP
		SUB	#0		;(N) <-- 符号
		BNE	MR_PATN_11000	;止まってる？ ( no:MR_PATN_11000 )
		NOP
;
;-------------- 止まってる時のパターンセット ----------------------------
MR_PATN_10000
		IBT	R12,#MR_P_STOP	;(R12) <-- ＳＴＯＰパターンタイプ
		mDJMP	MR_PATN_NONCHR
;
;-------------- 歩きパターンセット --------------------------------------
MR_PATN_11000
		IBT	R14,#00110000B	;(R14) <-- ヨコＢＧ当たりチェックデータ（右）
		BPL	MR_PATN_11100
		NOP
;
		IWT	R14,#11000000B	;(R14) <-- ヨコＢＧ当たりチェックデータ（左）
		NOT
		INC	R0
MR_PATN_11100
		MOVE	R5,R0		;(R5) <-- ＡＢＳ（Ｘスピード）
		IWT	R6,#080H
		SUB	R6
		BCS	MR_PATN_11200	;Ｘスピード小さすぎ？ ( no:MR_PATN_11200 )
		ADD	R6
;
		LMS	R0,CPLBGCR
		AND	R14		;(Z) set
		MOVE	R0,R6
		BEQ	MR_PATN_11200	;ヨコＢＧ当たり？ ( no:MR_PATN_11200 )
		NOP
;
		IWT	R0,#200H
;
;-------------- 歩きパターンセット ------------------------------
MR_PATN_11200
 IF  JPN | NES ;**** 日本 or NES 対応 [1995/6/30] ****************
		IWT	R6,#04000H
 ELSE	  ;**** PAL 対応 [1995/7/19] *****************************
		IWT	R6,#04000H*5/4
 ENDIF
		FMULT
		LMS	R6,CPMR_WALK
		ADD	R6
		IWT	R6,#0400H
		SUB	R6
		BCS	MR_PATN_11210	;歩くパターンオーバー？ ( yes:MR_PATN_11210 )
		NOP
;
		ADD	R6
MR_PATN_11210
		SBK			;[ SMS R0,CPMR_WALK ]
;
		TO	R12
		HIB
		SMS	R12,CPLWALK
		BNE	MR_PATN_11212	;歩くサウンドセット？ ( no:MR_PATN_11212 )
		NOP
;
;-------------- 歩くサウンドセット ------------------------------
		LMS	R0,CPLBGNO
		IWT	R14,#WALK_SOUND
		TO	R14
		ADD	R14
		GETB
		DEC	R0
		BMI	MR_PATN_11212	;歩くサウンドセット？ ( no:MR_PATN_11212 )
		INC	R0
;
		SMS	R0,CMSOUND3    ;[♪]
MR_PATN_11212
		IWT	R0,#MR_WLK_CHRDT ;(R14) <-- 歩くパターンタイプデータアドレス
		TO	R14
		ADD	R12
		TO	R12		;(R12) <-- 歩くパターンタイプ
		GETB
;
		LMS	R0,CPMR_BGCF
		DEC	R0
		BMI	MR_PATN_11240	;ソニックモード？ ( no:MR_PATN_11240 )
		SUB	R0		;[ IBT R0,#0 ] 角度を０へ
;
		LMS	R6,CPLANGL
		LMS	R0,CPLCMKI
		DEC	R0
		BPL	MR_PATN_11220
		FROM	R6
;
		NOT
		INC	R0
		TO	R6
		LOB
MR_PATN_11220
		IWT	R0,#0280H
		WITH	R5
		SUB	R0
		BCC	MR_PATN_11230
		SUB	R0
;
		FROM	R5
		LSR
		LSR
		LSR
 IF  PAL     ;**** 日本 or NES 対応 [1995/6/30] ****************
		LSR
 ENDIF	  ;**** PAL 対応 [1995/7/19] *****************************
MR_PATN_11230
		FROM	R6
		SUB	R0
MR_PATN_11240
		TO	R5		;(R5) <-- 角度
		LOB
		mDJMP	MR_PATN_ROTCHR
;
;************************************************************************
;*									*
;*		ＢＧチェック						*
;*									*
;************************************************************************
;
MR_BGCK
		LMS	R1,CPMR_BGCF	;(R1) <-- 前回ソニックモードフラグ
		SUB	R0		;[ IBT R0,#0 ] ソニックモードリセット
		SBK			;[ SMS R0,CPMR_BGCF ]
;
		LMS	R0,CPLJUMP
		DEC	R0
		BPL	MR_BGCK_0002	;プレイヤージャンプ中？ ( yes:MR_BGCK_0002 )
		NOP
;
		LMS	R0,CPLMVSP
		DEC	R0
		BPL	MR_BGCK_0000
		INC	R0
;
		NOT
		INC	R0
MR_BGCK_0000
 IF  JPN | NES ;**** 日本 or NES 対応 [1995/08/07] **********************
		IWT	R2,#0200H
 ELSE	  ;**** PAL 対応 [1995/08/07] *****************************
		IWT	R2,#0200H*5/4
 ENDIF
		SUB	R2
		BCS	MR_BGCK_0008	;ソニックＢＧチェック？ ( yes:MR_BGCK_0008 )
		NOP
;
MR_BGCK_0002
		DEC	R1
		BMI	MR_BGCK_0004	;前回ソニックモード？ ( no:MR_BGCK_0004 )
		INC	R1
;
;-------------- ソニックモードキャンセル初期セット ----------------------
		MOVE	R1,R11		;(R11) save
;
		mJSR	MARIO_PS_HOSE	;座標補正
;
		MOVE	R11,R1		;(R11) load
;
		IBT	R0,#BANK PLAYER_DATA
		ROMB
MR_BGCK_0004
		mDJMP	MR_BGCK_N
;
;========================================================================
;=		ソニックモードＢＧチェック				=
;========================================================================
MR_BGCK_0008
		LMS	R9,CPLXPSL	;(R9)  <-- プレイヤーＸ座標
		LMS	R10,CPLYPSL	;(R10) <--	”   Ｙ ”
;
;-------------- ｃｏｓ、ｓｉｎデータセット ------------------------------
		IBT	R0,#BANK LCOS
		ROMB
		LMS	R0,CPLANGL
MR_BGCK_00080
		IWT	R14,#LCOS
		TO	R14
		ADD	R14
		GETBS
		MOVE	R2,R0		;(R2) <-- ｃｏｓデータ
		SM	R0,CEWORK0	;(EWK0,1) <-- ｃｏｓデータ
;
		IBT	R0,#040H
		TO	R14		;[ IWT R14,#LSIN ]
		ADD	R14
		GETBS
		NOT
		INC	R0
		MOVE	R3,R0		;(R3) <-- ｓｉｎデータ
		SM	R0,CEWORK2	;(EWK2,3) <-- ｓｉｎデータ
;
		DEC	R1
		BPL	MR_BGCK_0009	;前回ソニックモード？ ( yes:MR_BGCK_0009 )
		INC	R1
;
;-------------- ソニックモードＢＧチェック初期プレイヤーＹ座標補正 ------
		IBT	R0,#5
		MULT	R3
		ADD	R0		;x16
		ADD	R0		;
		ADD	R0		;
		TO	R6		;(R6) <-- 着地位置までの距離
		ADD	R0		;
;
		FROM	R2
		FMULT
		TO	R9		;プレイヤーＸ座標補正
		ADD	R9
		LM	R14,CPLXPSL_OLD
		ADD	R14
		SBK			;[ SM R0,CPLXPSL_OLD ]
;
		FROM	R3
		FMULT
		TO	R10		;プレイヤーＹ座標補正
		ADD	R10
		LM	R14,CPLYPSL_OLD
		ADD	R14
		SBK			;[ SM R0,CPLYPSL_OLD ]
;
		LMS	R0,CPLANGL
		SEX
		DIV2
		DIV2
		LOB
		SBK			;[ SMS R0,CPLANGL ]
		BRA	MR_BGCK_00080
		INC	R1		;[ IBT R1,#1 ]

;-------------- ＢＧチェックポイントデータセット ------------------------
MR_BGCK_0009
		IBT	R0,#BANK PLAYER_DATA
		ROMB
		IWT	R14,#PLBGCK_POINT_MR ;(R14) <-- ＢＧチェックポイントデータポインター（大）
;
		SMS	R11,RTS2	;[ return address save ]
;
		IBT	R2,#00		;(R2)  <-- ＢＧ当たりフラグクリアー
		SMS	R2,CPLWATR	;水中当たりフラグクリアー
		SMS	R2,CPLTNEL	;トンネル当たりフラグクリアー
		SMS	R2,CPLBGNO	;歩いている床のＢＧタイプクリアー
;
;------------------------------------------------------------------------
;-		左上サイドチェック					-
;------------------------------------------------------------------------
		IBT	R3,#001H	;(R3) <-- 補正向き
		MOVE	R4,R3		;(R4) <-- 補正データ
		mJSR_X	BG_SIDECK_R_IN
		CACHE
;
;------------------------------------------------------------------------
;-		左下サイドチェック					-
;------------------------------------------------------------------------
		mJSR_X	BG_SIDECK_R+1
		HEX	3E		;[ SMS R11,RTS1 ]
;
;------------------------------------------------------------------------
;-		右上サイドチェック					-
;------------------------------------------------------------------------
		IBT	R3,#0FFH	;(R3) <-- 補正データ
		DEC	R4		;[ CMP #0 ]
		BMI	MR_BGCK_0010	;左サイド補正した？ ( yes:MR_BGCK_0010 )
		INC	R4
;
		MOVE	R4,R3		;(R4) <-- 補正データ
MR_BGCK_0010
		mJSR_X	BG_SIDECK_R+1
		HEX	3E		;[ SMS R11,RTS1 ]
;
;------------------------------------------------------------------------
;-		右下サイドチェック					-
;------------------------------------------------------------------------
		mJSR_X	BG_SIDECK_R+1
		HEX	3E		;[ SMS R11,RTS1 ]
;
;------------------------------------------------------------------------
;-		左サイド総合チェック					-
;------------------------------------------------------------------------
		LMS	R3,CPSPUSH	;(R3) <-- 横壁押しカウンターセット
		SUB	R0		;[ IBT R0,#0 ]
		SBK			;[ SMS R0,CPSPUSH ]
;
		DEC	R1
		BMI	MR_BGCK_0040	;横当たりＯＫ？ ( no:MR_BGCK_0040 )
		INC	R1
;
;-------------- ＢＧヨコ当たり”ボヨヨ〜ン”セットチェック --------------
		LMS	R0,CPMR_SBCT
		SUB	#0
		BNE	MR_BGCK_0014	;ＢＧヨコ当たり”ボヨヨ〜ン”中？ ( yes:MR_BGCK_0014 )
		SUB	R0		;[ IBT R0,#0 ]
;
		LMS	R5,CPLMVSP
		MOVES	R0,R5
		BPL	MR_BGCK_0012
		NOP
;
		NOT
		INC	R0
MR_BGCK_0012
 IF  JPN | NES ;**** 日本 or NES 対応 [1995/08/07] **********************
		IWT	R3,#0280H
 ELSE	  ;**** PAL 対応 [1995/08/07] *****************************
		IWT	R3,#0280H*5/4
 ENDIF
		SUB	R3
		BCC	MR_BGCK_0014	;ＢＧヨコ当たり”ボヨヨ〜ン”ＯＫ？ ( no:MR_BGCK_0014 )
		SUB	R0		;[ IBT R0,#0 ]
;
		FROM	R5
		DIV2
		SMS	R0,CPMR_SBSP	;ＢＧヨコ当たり”ボヨヨ〜ン”スピードセット
		SMS	R0,CPMR_SBCT	;	     ”		     カウンターセット
;
MR_BGCK_0014
;;;;		    SUB	    R0
		SMS	R0,CPLMVSP
;
;------------------------------------------------------------------------
;-		頭チェック						-
;------------------------------------------------------------------------
MR_BGCK_0040
		IBT	R3,#010H	;(R3) <-- 頭チェックフラグ
		mJSR_X	BG_HDFTCK_R+1
		HEX	3E		;[ SMS R11,RTS1 ]
;
		LMS	R0,CPLTNEL	;左、右頭フラグセット
		TO	R5
		LSR
		ROL
		SBK			;[ SMS R0,CPLTNEL ]
;
		FROM	R2		;左、右頭フラグセット
		LSR
		WITH	R2
		ROL
;
;------------------------------------------------------------------------
;-		足チェック						-
;------------------------------------------------------------------------
MR_BGCK_0050
		IBT	R3,#0F0H	;(R3) <-- 足チェックフラグ
		LMS	R4,CPLSKCC	;(R4) <-- 前回坂フラグ
		mJSR_X	BG_HDFTCK_R+1
		HEX	3E		;[ SMS R11,RTS1 ]
;
		SMS	R4,CPLSKCL	;前回坂フラグセット
;
		LMS	R0,CPLTNEL	;左、中、右足フラグセット
		TO	R5
		LSR
		ROL
		TO	R5
		LSR
		ROL
		SBK			;[ SMS R0,CPLTNEL ]
;
		FROM	R2		;左、中、右足フラグセット
		LSR
		WITH	R2
		ROL
		FROM	R2
		LSR
		WITH	R2
		ROL
;
		FROM	R2
		LSR
		BCS	MR_BGCK_0200	;足当たり？ ( yes:MR_BGCK_0200 )
		SUB	R0		;[ IBT R0,#0 ]
;
;-------------- ＢＧ当たって無い ----------------------------------------
		IWT	R0,#P008	;ジャンプフラグ”ＯＮ”
		SMS	R0,CPLJUMP
 IF BUG00 ;********* マリオ壁めりこみバグ修正[95/8/7] *******************
		SMS	R9,CPLXPSL	;座標補正用Ｘ座標セット
		SMS	R10,CPLYPSL	;     ”   Ｙ	 ”
		mJSR	MARIO_PS_HOSE	;座標補正
		LMS	R9,CPLXPSL
		LMS	R10,CPLYPSL
;
		IBT	R0,#BANK PLAYER_DATA
		ROMB
		BRA	MR_BGCK_0300
		NOP

 ELSE
		BRA	MR_BGCK_0300
		NOP

 ENDIF
;
;-------------- ＢＧ当たり ----------------------------------------------
MR_BGCK_0200
		SMS	R2,CPMR_BGCF	;ソニックモード”ＯＮ”
;
;-------------- 中足当たりＯＫ後特殊ＢＧチェック ----------------
		mJSR	FOOT_RESULT_C
;
;-------------- 足当たり情報セット ------------------------------
		SMS	R4,CPLANGL	;移動角度セット
;
		SUB	R0
;;;;		    SMS	    R0,CPLYSPD	    ;Ｙスピードクリアー
;;;;		    SMS	    R0,CPLYSDR
;
		SMS	R0,CPLSKCL	;前回坂フラグリセット
		SMS	R0,CPLSKCC
		SMS	R0,CPLSKCR
		SMS	R0,CPLKAID	;階段歩きフラグクリアー
;
MR_BGCK_0300
		mDJMP	MR_BGCK_N_0300
;
;------------------------------------------------------------------------
;-		ソニックモードキャンセルによる座標補正			-
;------------------------------------------------------------------------
MARIO_PS_HOSE
		IBT	R0,#BANK LCOS
		ROMB
		IWT	R14,#LCOS
		LMS	R0,CPLANGL
		TO	R14
		ADD	R14
		GETBS
		NOT
		INC	R0		;(R0) <-- ｃｏｓデータ
 IF BUG00 ;********* マリオ壁めりこみバグ修正[95/8/7] *******************
		IBT	R3,#0FH
 ELSE
		IBT	R3,#0EH
 ENDIF
		MULT	R3
		ADD	R0		;x4
		ADD	R0		;
		HIB
		SEX
		TO	R9		;(R9) <-- Ｘ座標補正値
		ADD	R3
		LMS	R0,CPLYPSL
		ADD	R9
		SBK			;[ SMS R0,CPLYPSL ]
		LM	R0,CPLYPSL_OLD
		ADD	R9
		SBK			;[ SM R0,CPLYPSL_OLD ]
;
		IBT	R0,#040H
		TO	R14		;[ IWT R14,#LSIN ]
		ADD	R14
		GETBS			;(R0) <-- ｓｉｎデータ
		MULT	R3
		ADD	R0		;x4
		ADD	R0		;
		HIB
		TO	R9
		SEX
		LMS	R0,CPLXPSL
		ADD	R9
		SBK			;[ SMS R0,CPLXPSL ]
		LM	R0,CPLXPSL_OLD
		ADD	R9
		mRTS_X
		SBK			;[ SM R0,CPLXPSL_OLD ]
;
;========================================================================
;=		ノーマルモードＢＧチェック				=
;========================================================================
;
MR_BGCK_N
		IWT	R14,#PLBGCK_POINT_MR0 ;(R14) <-- ＢＧチェックポイントデータポインター（大）
		LMS	R0,CPLSITD
		SUB	#2
		BCC	MR_BGCK_N_2	  ;衝突サイズ小？ ( no:MR_BGCK_N_2 )
		NOP
;
		IWT	R14,#PLBGCK_POINT_MR1 ;(R14) <-- ＢＧチェックポイントデータポインター（小）
;
MR_BGCK_N_2
		SMS	R11,RTS2	;[ return address save ]
;
		LMS	R9,CPLXPSL	;(R9)  <-- プレイヤーＸ座標
		LMS	R10,CPLYPSL	;(R10) <--	”   Ｙ ”
		IBT	R2,#00		;(R2)  <-- ＢＧ当たりフラグクリアー
		SMS	R2,CPLWATR	;水中当たりフラグクリアー
		SMS	R2,CPLTNEL	;トンネル当たりフラグクリアー
		SMS	R2,CPLHARI	;ダメージＢＧ当たりフラグクリアー
		SMS	R2,CPLBGNO	;歩いている床のＢＧタイプクリアー
		SMS	R2,CPLANGL	;移動角度リセット
;
;------------------------------------------------------------------------
;-		左上サイドチェック					-
;------------------------------------------------------------------------
		IBT	R3,#001H	;(R3) <-- 補正向き
		IBT	R4,#0		;(R4) <-- 補正データ
		mJSR_X	BG_SIDECK_IN
		CACHE
;
;------------------------------------------------------------------------
;-		左下サイドチェック					-
;------------------------------------------------------------------------
		mJSR_X	BG_SIDECK+1
		HEX	3E		;[ SMS R11,RTS1 ]
;
;------------------------------------------------------------------------
;-		右上サイドチェック					-
;------------------------------------------------------------------------
		IBT	R3,#0FFH	;(R3) <-- 補正データ
		mJSR_X	BG_SIDECK+1
		HEX	3E		;[ SMS R11,RTS1 ]
;
;------------------------------------------------------------------------
;-		右下サイドチェック					-
;------------------------------------------------------------------------
		mJSR_X	BG_SIDECK+1
		HEX	3E		;[ SMS R11,RTS1 ]
;
		WITH	R9		;Ｘ座標補正
		ADD	R4
;
;------------------------------------------------------------------------
;-		サイド総合チェック					-
;------------------------------------------------------------------------
		MOVES	R0,R1
		BEQ	MR_BGCK_N_0024	;横当たりＯＫ？ ( no:MR_BGCK_N_0024 )
		LSR
;
		LMS	R5,CPMR_SBCT
		MOVES	R5,R5
		BNE	MR_BGCK_N_0022	;ＢＧヨコ当たり”ボヨヨ〜ン”中？ ( yes:MR_BGCK_N_0022 )
		LSR
;
		OR	R1
		MOVE	R5,R0
		LSR
		LSR
		LSR
		LSR
		OR	R5
		AND	#03H
		DEC	R0
		BNE	MR_BGCK_N_0030	  ;激突？ ( yes:MR_BGCK_N_0030 )
		DEC	R0
;
;-------------- 普通の当たり --------------------------------------------
;
;-------------- 横壁押しチェック --------------------------------
		LMS	R0,CPLJUMP
		DEC	R0
		BPL	MR_BGCK_N_0022	;ジャンプ中？ ( yes:MR_BGCK_N_0022 )
		NOP
;
		FROM	R1
		AND	#0FH
		BEQ	MR_BGCK_N_0020	  ;左当たり？ ( yes:MR_BGCK_N_0020 )
		INC	R0		;[ IBT R0,#01H ]
;
		SUB	R0		;[ IBT R0,#0 ]
MR_BGCK_N_0020
		INC	R0		;[ 左:00000010B 右:00000001B ]
;
		LM	R1,CMKEYC1	;(R1) <-- コントローラー情報
		AND	R1
		BEQ	MR_BGCK_N_0022	;横壁押しキー入力？ ( no:MR_BGCK_N_0022 )
		INC	R3
;
;-------------- ドカン出入りチェック --------------------
		MOVE	R1,R0
		LMS	R0,CBABYNO
		ADD	R0
		BCC	MR_BGCK_N_0022	;赤ちゃん乗ってる？ ( no:MR_BGCK_N_0022 )
		NOP
;
		LMS	R5,CDOKNMK
		FROM	R5
		AND	#00000011B
		SUB	R1
		BNE	MR_BGCK_N_0022	;ドカン？ ( no:MR_BGCK_N_0022 )
		NOP
;
;-------------- ドカン出入りデモへ --------------
		mJSR	DOKAN_INOUT_IN	;[ (R5) <-- 向き ]
;
MR_BGCK_N_0022
		SUB	R0
		SMS	R0,CPLXSPD
		SMS	R0,CPLMVSP
;
MR_BGCK_N_0024
		BRA	MR_BGCK_N_0040
		NOP
;
;-------------- 激突 --------------------------------------------
MR_BGCK_N_0030
;
;-------------- ＢＧヨコ当たり”ボヨヨ〜ン”セットチェック --------------
		LMS	R0,CPLXSPD
		DIV2
		SMS	R0,CPMR_SBSP	;ＢＧヨコ当たり”ボヨヨ〜ン”スピードセット
		SMS	R0,CPMR_SBCT	;	     ”		     カウンターセット
;;;;		    BRA	    MR_BGCK_N_0038
		SUB	R0
;
		SMS	R0,CPLXSPD
		SMS	R0,CPLMVSP
;
;------------------------------------------------------------------------
;-		左頭チェック						-
;------------------------------------------------------------------------
MR_BGCK_N_0040
		IBT	R3,#010H	;(R3) <-- 頭チェックフラグ
		mJSR_X	BG_HDFTCK+1
		HEX	3E		;[ SMS R11,RTS1 ]
;
;------------------------------------------------------------------------
;-		右頭チェック						-
;------------------------------------------------------------------------
		mJSR_X	BG_HDFTCK+1
		HEX	3E		;[ SMS R11,RTS1 ]
;
;------------------------------------------------------------------------
;-		頭総合チェック						-
;------------------------------------------------------------------------
		FROM	R2
		AND	#00000011B
		BEQ	MR_BGCK_N_0050	  ;頭当たり？ ( no:MR_BGCK_N_0050 )
		NOP
;
;-------------- ＢＧ当たった --------------------------------------------
		LMS	R3,CPLYSPD	;(R3) <-- Ｙスピード
		MOVES	R3,R3
		BPL	MR_BGCK_N_0048	  ;プレイヤー下降中？ ( yes:MR_BGCK_N_0048 )
		SUB	R0
;
		SBK			;[ SMS R0,PLYSPD ]
		INC	R0		;[ IBT R0,#1 ]
		SMS	R0,CPLSPJP	;ジタバタジャンプ リセット
		IBT	R0,#014H	;ジタバタジャンプＮＥＸＴウェイトタイマー
		SMS	R0,CPSPJTM
;
;-------------- ドカン出入りチェック --------------------
		LMS	R0,CBABYNO
		ADD	R0
		BCC	MR_BGCK_N_0046	  ;赤ちゃん乗ってる？ ( no:MR_BGCK_N_0046 )
		NOP
;
		LM	R0,CMKEYC1
		AND	#00001000B
		BEQ	MR_BGCK_N_0046	  ;上キー入力？ ( no:MR_BGCK_N_0046 )
		NOP
;
		IWT	R0,#1111100000000000B
		AND	R7
		IWT	R1,#DK
		SUB	R1
		BNE	MR_BGCK_N_0046	  ;ドカン？ ( no:MR_BGCK_N_0046 )
		NOP
;
		MOVE	R5,R14		;(R14) save
;
		FROM	R6
		LOB
		IWT	R14,#DOKAN_TYPE
		TO	R14
		ADD	R14
		GETB
;
		MOVE	R14,R5		;(R14) load
;
		IBT	R5,#00001000B
		TO	R1
		AND	R5
		BEQ	MR_BGCK_N_0046	  ;ドカンユニットＯＫ？ ( no:MR_BGCK_N_0046 )
		SWAP
;
		ADD	R0		;(C) <-- 左ｏｒ右？
		LMS	R0,CWORK0
		AND	#0FH
		BCC	MR_BGCK_N_0044	  ;左ドカン？ ( yes:MR_BGCK_N_0044 )
		NOP
;
		ADC	#0FH		;[ ADD #010H ]
MR_BGCK_N_0044
		SUB	#(0AH-08H)+0CH
		SUB	#08H
		BCS	MR_BGCK_N_0046	  ;Ｘ位置ＯＫ？ ( no:MR_BGCK_N_0046 )
		NOP
;
;-------------- ドカン出入りデモへ --------------
		mJSR	DOKAN_INOUT_IN_2 ;[ (R5) <-- 向き ]
		BRA	MR_BGCK_N_0050
		NOP
;
;-------------- サウンドセット座標セット ----------------
MR_BGCK_N_0046
		IBT	R0,#01FH	;[♪]
		SMS	R0,CMSOUND3
;
;-------------- 頭ＢＧ当たり”ボヨヨ〜ン”セット ----------------
		SMS	R3,CPMR_HBSP	;頭ＢＧ当たり”ボヨヨ〜ン”スピードセット
		SMS	R3,CPMR_HBCT	;	   ”		   カウンターセット
		IBT	R0,#08H		;重力加算停止！！（ダミー）
		SMS	R0,CPHBOYO
;
MR_BGCK_N_0048
		INC	R10		;Ｙ座標補正
;
;------------------------------------------------------------------------
;-		左足チェック						-
;------------------------------------------------------------------------
MR_BGCK_N_0050
		IBT	R3,#0F0H	;(R3) <-- 足チェックフラグ
		LMS	R4,CPLSKCL	;(R4) <-- 前回坂フラグ
		mJSR_X	BG_HDFTCK+1
		HEX	3E		;[ SMS R11,RTS1 ]
;
;-------------- 左足のＢＧチェック情報保存 ----------------------
		SMS	R1,CWORKA	;(CWKA) <-- 左足補正値
		LMS	R0,CWORK8
		SMS	R0,CPLSKCL	;前回坂フラグセット
;
		LMS	R0,CWORK0	;(CWK10) <-- ＢＧチェックＸ座標
		SMS	R0,CWORK10
		LMS	R0,CWORK1	;(CWK11) <-- ＢＧチェックＹ座標
		SMS	R0,CWORK11
		SMS	R6,CWORK12	;(CWK12) <-- BG unit no.
		SMS	R7,CWORK13	;(CWK13) <-- BG unit no. type
;
;------------------------------------------------------------------------
;-		中足チェック						-
;------------------------------------------------------------------------
		LMS	R4,CPLSKCC	;(R4) <-- 前回坂フラグ
		mJSR_X	BG_HDFTCK+1
		HEX	3E		;[ SMS R11,RTS1 ]
;
;-------------- 左足のＢＧチェック情報保存 ----------------------
		SMS	R1,CWORKB	;(CWKB) <-- 中足補正値
		LMS	R0,CWORK8	;(CWKE) <-- 中足移動角度
		SMS	R0,CPLSKCC	;前回坂フラグセット
;
		LMS	R0,CWORK0	;(CWK14) <-- ＢＧチェックＸ座標
		SMS	R0,CWORK14
		LMS	R0,CWORK1	;(CWK15) <-- ＢＧチェックＹ座標
		SMS	R0,CWORK15
		SMS	R6,CWORK16	;(CWK16) <-- BG unit no.
		SMS	R7,CWORK17	;(CWK17) <-- BG unit no. type
;
;------------------------------------------------------------------------
;-		右足チェック						-
;------------------------------------------------------------------------
		LMS	R4,CPLSKCR	;(R4) <-- 前回坂フラグ
		mJSR_X	BG_HDFTCK+1
		HEX	3E		;[ SMS R11,RTS1 ]
;
		SMS	R1,CWORKC	;(CWKC) <-- 右足補正値
		LMS	R4,CWORK8	;(R4) <-- 右足移動角度
		SMS	R4,CPLSKCR	;前回坂フラグセット
;
;------------------------------------------------------------------------
;-		足ＢＧ総合チェック					-
;------------------------------------------------------------------------
		FROM	R2
		AND	#00000111B
		BNE	MR_BGCK_N_0200	  ;足当たった？ ( yes:MR_BGCK_N_0200 )
		NOP
;
;-------------- リフト乗ってるか？チェック ------------------------------
		LMS	R0,CONLFFG
		SUB	#0
		BEQ	MR_BGCK_N_0180	  ;リフト乗ってる？ ( no:MR_BGCK_N_0180 )
		NOP
;
		IBT	R4,#0		;(R4) <-- 移動角度
		IBT	R5,#0		;(R5) <-- 着地”ボヨヨ〜ン”Ｙスピード
		mDJMP	MR_BGCK_N_0260
;
;-------------- ＢＧ当たって無い ----------------------------------------
MR_BGCK_N_0180
		LMS	R0,CPLJUMP
		DEC	R0
		BPL	MR_BGCK_N_0190	  ;プレイヤージャンプ中？ ( yes:MR_BGCK_N_0190 )
		NOP
;
		IWT	R0,#P008	;ジャンプフラグ”ＯＮ”
		SMS	R0,CPLJUMP
MR_BGCK_N_0190
		mDJMP	MR_BGCK_N_0300
;
;-------------- ＢＧ当たり ----------------------------------------------
MR_BGCK_N_0200
;
;-------------- 最大補正値チェック [ (R3) <-- 最大補正値 ] ------
		LMS	R0,CWORKA	;(R0) <-- 左足補正値
		LMS	R5,CWORKB	;(R5) <-- 中足補正値
		SUB	R5
		BMI	MR_BGCK_N_0202	  ;左足補正値＞中足補正値？ ( yes:MR_BGCK_N_0202 )
		ADD	R5
;
		MOVE	R0,R5
MR_BGCK_N_0202
		LMS	R5,CWORKC      ;(R5) <-- 右足補正値
		MOVE	R3,R5
		SUB	R3
		BPL	MR_BGCK_N_0204	  ;（左足補正値＞中足補正値）＞右足補正値？ ( no:MR_BGCK_N_0204 )
		ADD	R3
;
		MOVE	R3,R0
;
;-------------- Ｙ座標補正 --------------------------------------
MR_BGCK_N_0204
		WITH	R10		;Ｙ座標補正
		ADD	R3
;
		FROM	R5
		SUB	R3
		BNE	MR_BGCK_N_0206	  ;右足当たりＯＫ？ ( no:MR_BGCK_N_0206 )
		NOP
;
;-------------- 右足当たりＯＫ後特殊ＢＧチェック --------
		mJSR	FOOT_RESULT
;
;-------------- 中足のＢＧチェック情報復帰 --------------
MR_BGCK_N_0206
		LMS	R0,CWORKB	;(R0) <-- 中足補正値
		SUB	R3
		BNE	MR_BGCK_N_0210	  ;中足当たりＯＫ？ ( no:MR_BGCK_N_0210 )
		NOP
;
		LMS	R0,CWORK14
		SMS	R0,CWORK0	;(CWK0) <-- 中足ＢＧチェックＸ座標
		LMS	R0,CWORK15
		SMS	R0,CWORK1	;(CWK1) <-- 中足ＢＧチェックＹ座標
		LMS	R6,CWORK16	;(R6)	<-- 中足 BG unit no.
		LMS	R7,CWORK17	;(R7)	<-- 中足 BG unit no. type
		LMS	R4,CPLSKCC	;(R4)	<-- 中足移動角度
;
;-------------- 中足当たりＯＫ後特殊ＢＧチェック --------
		mJSR	FOOT_RESULT_C
;
;-------------- 左足のＢＧチェック情報復帰 --------------
MR_BGCK_N_0210
		LMS	R0,CWORKA	;(R0) <-- 左足補正値
		SUB	R3
		BNE	MR_BGCK_N_0250	  ;中足当たりＯＫ？ ( no:MR_BGCK_N_0250 )
		NOP
;
		LMS	R0,CWORK10
		SMS	R0,CWORK0	;(CWK0) <-- 左足ＢＧチェックＸ座標
		LMS	R0,CWORK11
		SMS	R0,CWORK1	;(CWK1) <-- 左足ＢＧチェックＹ座標
		LMS	R6,CWORK12	;(R6)	<-- 左足 BG unit no.
		LMS	R7,CWORK13	;(R7)	<-- 左足 BG unit no. type
		LMS	R4,CPLSKCL	;(R4)	<-- 左足移動角度
;
;-------------- 左足当たりＯＫ後特殊ＢＧチェック --------
		mJSR	FOOT_RESULT
;
;-------------- 足当たり情報セット ------------------------------
MR_BGCK_N_0250
		LMS	R5,CPLYSPD	;(R5) <-- Ｙスピード
		SUB	R0
		SMS	R0,CPLYSPD	;Ｙスピードクリアー
		IBT	R0,#0FFH	;[ IWT R0,#0FFFFH ] 着地継続の為
		SMS	R0,CPLYSDR
;
MR_BGCK_N_0260
		SMS	R4,CPLANGL	;移動角度セット
		SUB	R0
		SMS	R0,CPLSKCL	;前回坂フラグリセット
		SMS	R0,CPLSKCC
		SMS	R0,CPLSKCR
;;;;		    SMS	    R0,CPLKAID	    ;階段歩きフラグクリアー
;
;-------------- 着地の瞬間チェック ------------------------------
		LMS	R0,CPLJUMP
		DEC	R0
		BMI	MR_BGCK_N_0270	  ;着地の瞬間？ ( no:MR_BGCK_N_0270 )
		SUB	R0
;
		SMS	R0,CPLJUMP	;ジャンプフラグ”ＯＦＦ”
		LMS	R0,CPLXSPD
		SMS	R0,CPLMVSP	;移動スピードセット
		SMS	R0,CPMR_HBCT	;頭ＢＧ当たり”ボヨヨ〜ン”リセット
		SMS	R5,CPMR_FBSP
		SMS	R5,CPMR_FBCT	;足ＢＧ当たり”ボヨヨ〜ン”カウンター
;
;-------------- ”ドスーン！！”着地チェック --------------------
		mJSR	DOSN_JUST_CK
;
MR_BGCK_N_0270
;
MR_BGCK_N_0300
		SMS	R9,CPLXPSL
		SMS	R10,CPLYPSL
		SMS	R2,CPLBGCR
;
;------------------------------------------------------------------------
;-		ダメージＢＧ当たりチェック				-
;------------------------------------------------------------------------
		LMS	R0,CPLHARI
		DEC	R0
		BMI	MR_BGCK_N_0350	  ;ダメージＢＧ当たりフラグクリアー
		NOP
;
;-------------- プレイヤーダメージセット --------------------------------
		mSFCALL PLFAILST	;プレイヤーダメージセット
		BRA	MR_BGCK_N_0500
;
;------------------------------------------------------------------------
;-		トンネルＩＮ／ＯＵＴチェック				-
;------------------------------------------------------------------------
MR_BGCK_N_0350
		LMS	R0,CPLTNEL
		OR	R2		;(R0) <-- トンネル当たりフラグ
		IWT	R6,#111111000B	;(R6) <-- トンネルチェックデータ
;
		LM	R5,CCCHGTK
		DEC	R5
		BPL	MR_BGCK_N_0400	  ;今、トンネルの中？ ( yes:MR_BGCK_N_0400 )
		INC	R5
;
;-------------- トンネルに入ったか？チェック ----------------------------
		AND	R6
		SUB	R6
		BEQ	MR_BGCK_N_0410	  ;トンネルに入った？ ( yes:MR_BGCK_N_0410 )
		NOP
;
		BRA	MR_BGCK_N_0500
		NOP
;
;-------------- トンネルから出たか？チェック ----------------------------
MR_BGCK_N_0400
		AND	R6
		BNE	MR_BGCK_N_0500	  ;トンネルから出た？ ( no:MR_BGCK_N_0500 )
		NOP
;
;-------------- トンネルＩＮ／ＯＵＴデモスタート初期セット --------------
MR_BGCK_N_0410
		mSFCALL TN_INOUT_IN
;
MR_BGCK_N_0500
		LMS	R11,RTS2	;[ return address load ]
		mRTS
;
;
;
;------------------------------------------------------------------------
;		キャッシュプログラム					-
;------------------------------------------------------------------------
;
;------------------------------------------------------------------------
;-		横当たりチェック					-
;-			in :						-
;-				(R1)  <-- 横ＢＧ当たりＯＫフラグ	-
;-				(R2)  <-- ＢＧ当たりフラグ		-
;-				(R3)  <-- 補正向き			-
;-				(R4)  <-- 補正データ			-
;-				(R9)  <-- プレイヤーＸ座標		-
;-				(R10) <--      ”   Ｙ ”		-
;-				(R11) <-- 復帰アドレス			-
;-				(R14) <-- ＢＧチェックポイント		-
;-						データアドレス		-
;-			out :						-
;-				(R0)  <-- BG unit no. type		-
;-				(R6)  <-- BG unit no.			-
;-				(R7)  <-- BG unit no. type		-
;-				(R8)  <-- BG type status data		-
;-				(CWK0) <- ＢＧチェックＸ座標		-
;-				(CWK1) <-	”    Ｙ ”		-
;-			break :						-
;-				(R5)					-
;-				(R12)					-
;-				(R13)					-
;-			use RAM :					-
;-				(RTS0)					-
;-				(RTS1)					-
;-				(CWKE)					-
;-				(CWKF)					-
;------------------------------------------------------------------------
BG_SIDECK_R_IN
		IBT	R1,#0		;(R1) <-- 横ＢＧ当たりＯＫフラグ
;
BG_SIDECK_R
		SMS	R11,RTS1	;[ return address save ]
;
		WITH	R2		;[ ASL R2 ]
		ADD	R2
		WITH	R1		;[ ASL R1 ]
		ADD	R1
		WITH	R1		;[ ASL R1 ]
		ADD	R1
;
;-------------- ＢＧ当たりチェック --------------------------------------
		mJSR_X	BGUNIT_READ_R+1
		TO	R7
;
BG_SIDECK_R000
		AND	#AL
		BEQ	BG_SIDECK_R100	;ＢＧ当たり？ ( no:BG_SIDECK_R100 )
		NOP
;
;-------------- 移動方向チェック ----------------------------------------
		LMS	R0,CPLMVSP
		SUB	#0
		BEQ	BG_SIDECK_R002
		INC	R2		;ＢＧ当たりフラグ”ＯＮ”
;
		XOR	R3
		BPL	BG_SIDECK_R100	;移動方向ＯＫ？ ( no:BG_SIDECK_R100 )
		NOP
;
BG_SIDECK_R002
		INC	R1		;横ＢＧ当たりＯＫフラグ”ＯＮ”
;
		XOR	R3
		BMI	BG_SIDECK_R010	;Ｘスピード左方向？ ( yes:BG_SIDECK_R010 )
		NOP
;
		NOT
		INC	R0
BG_SIDECK_R010
		IWT	R5,#0300H
		ADD	R5
		BPL	BG_SIDECK_R050	;壁壊し可能スピード？ ( no:BG_SIDECK_R050 )
		NOP
;
;-------------- 壁壊しチェック ----------------------------------
		IWT	R0,#1111100000000000B
		AND	R7
		IWT	R5,#ET
		SUB	R5
		BNE	BG_SIDECK_R050	;壊れるＢＧ？ ( no:BG_SIDECK_R050 )
		INC	R1		;横ＢＧ当たりＯＫフラグ”ＯＮ”（激突）
;
		INC	R1		;横ＢＧ当たりＯＫフラグ”ＯＮ”（ＢＧ壊した）
;
;-------------- ＢＧ壊す --------------------------------
		SUB	R0
		SMS	R0,CWORKE	;(CWKE) <-- 壊れたＢＧぶっ飛びＸスピード
		SMS	R0,CWORKF	;(CWKF) <-- 壊れたＢＧぶっ飛びＹスピード
;
		SMS	R1,CWORK2	;(R1) save
;
		mJSR	BRBG0_SET	;壊れたＢＧ効果セット
;
		LMS	R1,CWORK2	;(R1) load
;
		BRA	BG_SIDECK_R100
		NOP
;
;-------------- 座標補正チェック --------------------------------
BG_SIDECK_R050
		LM	R0,CEWORK0	;(R0) <-- ｃｏｓデータ
		MULT	R4		;(R0) <-- Ｘ座標補正値×ｃｏｓ
		ADD	R0		;x4
		ADD	R0		;
		TO	R5
		SWAP
		LM	R0,CPLXSDR+1
		ADD	R5		;(C) set
		SBK			;[ SMS R0,CPLXSDR ]
		FROM	R5
		SEX
		TO	R9		;Ｘ座標補正
		ADC	R9
;
		LM	R0,CEWORK2	;(R0) <-- ｓｉｎデータ
		NOT
		INC	R0
		MULT	R4
		ADD	R0		;x4
		ADD	R0		;
		TO	R5
		SWAP
		LM	R0,CPLYSDR+1
		ADD	R5		;(C) set
		SBK			;[ SMS R0,CPLYSDR ]
		FROM	R5
		SEX
		TO	R10		;Ｙ座標補正
		ADC	R10
;
		IBT	R4,#0		;Ｘ座標補正無しセット
;
BG_SIDECK_R100
;
;------------------------------------------------------------------------
;-		横用特殊ＢＧ当たりチェック				-
;------------------------------------------------------------------------
		mDJMP	SIDE_SP_CK
;
;
;----------------------------------------------------------------
;-		ＢＧユニットＮｏ．読み込み			-
;-			in :					-
;-				(R9)  <-- 敵のＸ座標		-
;-				(R10) <--  ” Ｙ ”		-
;-				(R11) <-- 復帰アドレス		-
;-				(R14) <-- ＢＧチェックポイント	-
;-						データアドレス	-
;-			out :					-
;-				(R0)  <-- BG unit no. type	-
;-				(R6)  <-- BG unit no.		-
;-				(R7)  <-- BG unit no. type	-
;-				(R8)  <-- BG type status data	-
;-			break :					-
;-				(R5)				-
;----------------------------------------------------------------
BGUNIT_READ_R
;
;-------------- ＢＧチェックポイント回転 ------------------------
		TO	R7		;(R7) <-- Ｘ
		GETB
		INC	R14
		LM	R5,CEWORK0	;(R5) <-- ｃｏｓデータ
		FROM	R5
		TO	R8		;(R8) <-- Ｘ×ｃｏｓ
		MULT	R7
;
		LM	R0,CEWORK2	;(R0) <-- ｓｉｎデータ
		TO	R6		;(R6) <-- Ｘ×ｓｉｎ
		MULT	R7
;
		TO	R7		;(R7) <-- Ｙ
		GETB
		INC	R14
		MULT	R7		;(R0) <-- Ｙ×ｓｉｎ
		ADD	R8		;(R0) <-- Ｘ×ｃｏｓ＋Ｙ×ｓｉｎ
		ADD	R0		;x4
		ADD	R0		;
		HIB
		SEX
		ADD	R9
		TO	R8		;(R8) <-- ＢＧチェックＸ座標
		ADD	#08H
;
		FROM	R7
		MULT	R5		;(R0) <-- Ｙ×ｃｏｓ
		SUB	R6		;(R0) <-- Ｙ×ｃｏｓ−Ｘ×ｓｉｎ
		ADD	R0		;x4
		ADD	R0		;
		HIB
		SEX
		ADD	R10
		IBT	R7,#020H
		ADD	R7
;
BGUNIT_READ_R_S
		LMS	R6,CBG2OF_FG
		DEC	R6		;(N) set
;
		TO	R7		;(R7) <-- BG check Y pos x2
		BMI	BGUNIT_READ_R_000 ;オフセットモード？ ( no:BGUNIT_READ_R_000 )
		ADD	R0
;
		mDJMP	BGUNIT_READ_R_O
;
BGUNIT_READ_R_000
		LMS	R5,CWRSCV1
		SUB	R5
		IWT	R5,#0E0H
		SUB	R5		;(C) set
;
		LMS	R5,CWRSCH1
		BCS	BGUNIT_READ_R_002 ;ＢＧチェックバッファＹ座標範囲内？ ( no:BGUNIT_READ_R_002 )
		FROM	R8
;
		SUB	R5
		HIB
		BNE	BGUNIT_READ_R_002 ;ＢＧチェックバッファＸ座標範囲内？ ( no:BGUNIT_READ_R_002 )
		FROM	R8
;
		LSR
		LSR
		LSR
		IBT	R5,#01F0H>>3
		TO	R5
		AND	R5
		IWT	R0,#0F0H<<1
		AND	R7
		ADD	R0
		OR	R5
		IWT	R5,#BGCHECK_BUF
		ADD	R5
		BRA	BGUNIT_READ_R_010
		LDW	(R0)
;
BGUNIT_READ_R_002
		MERGE
		BEQ	BGUNIT_READ_R_020 ;BG check point max over ? ( yes:BGUNIT_READ_R_020 )
		TO	R6
;
		LOB
		HIB
		AND	#07H*2
		UMULT	#8
		OR	R6
		IWT	R6,#CUNBUFAD
		ADD	R6
		LDB	(R0)
		IBT	R6,#3FH
		AND	R6
		TO	R6
		SWAP
		IWT	R0,#0F0H<<1
		TO	R5
		AND	R7
		FROM	R8
		LOB
		LSR
		LSR
		LSR
		OR	R5
		LSR
		OR	R6
		ADD	R0		;[ ASL ]
		IWT	R6,#CBGUNIT
		ADD	R6
		mRAM_READ		;<<< SFC-RAM read >>>
;
BGUNIT_READ_R_010
		MOVE	R6,R0		;(R6) <-- BG unit no.
		HIB
		UMULT	#3		;x3
BGUNIT_READ_R_011
		MOVE	R5,R14		;(R14) save
;
		IWT	R14,#EN_BGTYPE
		TO	R14		;(R14) <-- BG unit no. type data address
		ADD	R14
		SMS	R8,CWORK0	;(CWK0) <-- BG check X pos
		GETB
		INC	R14
;
		WITH	R7
		ASR
		SMS	R7,CWORK1	;(CWK1) <-- BG check Y pos
;
		IBT	R8,#11111000B	;(R8) <-- ＢＧタイプチェック用ＡＮＤデータ
;
		GETBH
		INC	R14
		MOVE	R7,R0		;(R0),(R7) <-- BG type data
;
		HIB			;[ 上位バイトは０になるのでＡＮＤしても上位バイトは０ ]
		AND	R8
		IBT	R8,#(CB/100H)-00001000B+2 ;[ CB=0111100000000000B：サイン拡張しない ]
		SUB	R8
		SUB	#00001111B	;[ 00000110B:CB 00001110B:MB ]
		BCS	BGUNIT_READ_R_012+1 ;点線ブロック？ ( no:BGUNIT_READ_R_012+1 )
		TO	R8		;[ * BGUNIT_READ_012 ]
;
		IBT	R8,#00001111B+00000010B ;[ 00001000B:CB 00010000B:MB ]
		ADD	R8
		LM	R8,CSWITCH_1
		AND	R8
		BEQ	BGUNIT_READ_R_012+1
		TO	R8		;[ * BGUNIT_READ_R_012 ]
;
		WITH	R7		;全当たりに変更
		OR	#AL
;
BGUNIT_READ_R_012
		TO	R8		;(R8) <-- BG type status data
		GETB
;
		MOVE	R0,R7		;(R0),(R7) <-- BG type data
		MOVE	R14,R5		;(R14) load
		mRTS
;
BGUNIT_READ_R_020
		IBT	R6,#UT0001	;(R6) <-- BG unit no.
		BRA	BGUNIT_READ_R_011
		SUB	R0		;[ (R0) <-- HIGH(R6) x3 ]
;
;----------------------------------------------------------------
;-		ＢＧユニットＮｏ．読み込み（オフセット）	-
;-			in :					-
;-				(R1)  <-- 敵のインデックス	-
;-				(R9)  <-- 敵のＸ座標		-
;-				(R10) <--  ” Ｙ ”		-
;-				(R11) <-- 復帰アドレス		-
;-				(R14) <-- ＢＧチェックポイント	-
;-						データアドレス	-
;-			out :					-
;-				(R0)  <-- BG unit no. type	-
;-				(R6)  <-- BG unit no.		-
;-				(R7)  <-- BG unit no. type	-
;-				(R8)  <-- BG type status data	-
;-				(CWK0) <- ＢＧチェックＸ座標	-
;-				(CWK1) <-	”    Ｙ ”	-
;-			break :					-
;-				(R5)				-
;----------------------------------------------------------------
BGUNIT_READ_R_O
		LM	R0,CESCCH1
		BIC	#07H		;[ AND	#0FFF8H ]
		FROM	R8
		SUB	R0
		LSR
		LSR
		IBT	R5,#0021H*2
		SUB	R5
		BCS	BGUNIT_READ_R_O40 ;オフセットエリア？ ( no:BGUNIT_READ_R_O40 )
		ADD	R5
;
		LSR			;[ AND #0FFFEH ]
		BNE	BGUNIT_READ_R_O20 ;０ラインオフセットエリア？ ( no:BGUNIT_READ_R_O20 )
		ADD	R0		;[ AND #0FFFEH ]
;
;-------------- ０ラインオフセットエリア ------------------------
		LM	R0,CBG2OFV
		BRA	BGUNIT_READ_R_O30+1
		HEX	F5		;[ IWT R5,#1FFFH ]
;
;-------------- ０ライン以外のオフセットエリア ------------------
BGUNIT_READ_R_O20
		IWT	R5,#CBG2OFF+(20H*2)-2
		ADD	R5
		LDW	(R0)
BGUNIT_READ_R_O30
		IWT	R5,#1FFFH
		AND	R5
		LM	R5,CESCCV1
		SUB	R5
		ADD	R0
		TO	R7
		ADD	R7
;
BGUNIT_READ_R_O40
		mDJMP_X BGUNIT_READ_R_000+1
		HEX	3D		;[ LMS R5,CWRSCV1 ]
;
;
;------------------------------------------------------------------------
;-		頭と足の当たりチェック					-
;-			in :						-
;-				(R2)  <-- ＢＧ当たりフラグ		-
;-				(R3)  <-- 頭か足のフラグ		-
;-				(R4)  <-- 前回坂フラグ（足のみ）	-
;-				(R9)  <-- プレイヤーＸ座標		-
;-				(R10) <--      ”   Ｙ ”		-
;-				(R11) <-- 復帰アドレス			-
;-				(R14) <-- ＢＧチェックポイント		-
;-						データアドレス		-
;-			out :						-
;-				(R0)  <-- BG unit no. type		-
;-				(R6)  <-- BG unit no.			-
;-				(R7)  <-- BG unit no. type		-
;-				(R8)  <-- BG type status data		-
;-				(CWK0) <- ＢＧチェックＸ座標		-
;-				(CWK1) <-	”    Ｙ ”		-
;-				(CWK8) <- 移動角度			-
;-
;-			break :						-
;-				(R1)					-
;-				(R5)					-
;-			use RAM :					-
;-				(RTS1)					-
;------------------------------------------------------------------------
BG_HDFTCK_R
		SMS	R11,RTS1	;[ return address save ]
;
		WITH	R2		;[ ASL R2 ]
		ADD	R2
;
		mJSR_X	BGUNIT_READ_R+1
		TO	R7
;
		MOVES	R4,R3		;(R4) <-- 頭ｏｒ足チェックフラグ
		BMI	BG_HDFTCK_R_FFE
		NOP
;
		mDJMP	BG_HDFTCK_R_170
;
BG_HDFTCK_R_FFE
		LMS	R0,CPLANGL	;(R0) <-- プレイヤー回転角度
		IBT	R1,#020H
		TO	R1
		ADD	R1
		IBT	R0,#03FH
		AND	R1
		BNE	BG_HDFTCK_R_FFF ;４５度エリア？ ( no:BG_HDFTCK_R_FFF )
		NOP
;
		LMS	R0,CPLMVSP
		DEC	R0
		BPL	BG_HDFTCK_R_FFF
		NOP
;
		DEC	R1
BG_HDFTCK_R_FFF
		IBT	R0,#040H
		AND	R1
		BEQ	BG_HDFTCK_R_UPDW ;上下補正？ ( yes:BG_HDFTCK_R_UPDW )
		NOP
;
		mDJMP	BG_HDFTCK_R_SIDE
;
;------------------------------------------------------------------------
;-		上下補正						-
;------------------------------------------------------------------------
BG_HDFTCK_R_UPDW
		IBT	R5,#00		;(R5) <-- 平地の回転角度
;
		FROM	R1
		SEX
		BPL	BG_HDFTCK_R_000 ;上下反転チェック？ ( no:BG_HDFTCK_R_000 )
		WITH	R3
;
		NOT
		INC	R3
		IWT	R5,#080H	;(R5) <-- 平地の回転角度
BG_HDFTCK_R_000
		SMS	R5,CWORK8	;(CWK8) <-- saka angle
;
		LMS	R0,CWORK1	;(R0) <-- BG check Y pos
		TO	R1		;(R1) <-- Y pos cross size
		AND	#0FH
		MOVE	R12,R1		;(R12) <-- Y pos cross size
;
		IBT	R5,#MD+SK	;(R5) <-- 坂チェックデータ
		MOVES	R3,R3
		BPL	BG_HDFTCK_R_010 ;頭チェック？ ( yes:BG_HDFTCK_R_010 )
		NOP
;
		IBT	R5,#SK		;(R5) <-- 坂チェックデータ
BG_HDFTCK_R_010
		FROM	R7
		AND	R5
		TO	R13		;(R13) <-- 下のＢＧは坂？チェックしたか？
		SUB	R5
		BEQ	BG_HDFTCK_R_020 ;坂 cross ? ( yes:BG_HDFTCK_R_020 )
		NOP
;
;-------------- 下のＢＧは坂？チェック ----------------------------------
		SMS	R6,CWORK2	;(CWK2) <-- BG unit no.
		SMS	R7,CWORK3	;(CWK3) <-- BG unit no. type
		SMS	R8,CWORK4	;(CWK4) <-- BG type status data
		LMS	R8,CWORK0
		SMS	R8,CWORK5	;(CWK5) <-- BG check X pos
		LMS	R7,CWORK1
		SMS	R7,CWORK6	;(CWK6) <-- BG check Y pos
		SMS	R5,CWORK7	;(CWK7) <-- 坂チェックデータ
;
		FROM	R3
		ADD	R7
		mJSR_X	BGUNIT_READ_R_S+1
		HEX	3D		;[ LMS R6,CBG2OF_FG ]
;
		LMS	R5,CWORK7	;(R5) <-- 坂チェックデータ
		AND	R5
		SUB	R5
		BNE	BG_HDFTCK_R_040 ;坂 cross ? ( no:BG_HDFTCK_R_040 )
		NOP
;
		WITH	R1		;(R1) <-- Y pos cross size
		SUB	R3
;
;-------------- 坂チェック ----------------------------------------------
BG_HDFTCK_R_020
		SMS	R14,REG14	;(R14) save
;
		FROM	R8		;坂タイプＮｏ．x(8x16)
		SWAP
		MOVES	R3,R3
		BPL	BG_HDFTCK_R_030 ;頭チェック？ ( yes:BG_HDFTCK_R_030 )
		LSR
;
		INC	R0		;[ +2 ]
		INC	R0		;
BG_HDFTCK_R_030
		IWT	R14,#SAKA_DATA+4
		TO	R14
		ADD	R14
		LMS	R0,CWORK0
		AND	#0FH
		ADD	R0
		ADD	R0
		ADD	R0
		TO	R14		;(R14) <-- 坂データアドレス
		ADD	R14
		TO	R5
		GETB
		INC	R14
		GETBS
;
		LMS	R14,REG14	;(R14) load
;
		TO	R1		;(R1) <-- 補正値
		SUB	R1
		BEQ	BG_HDFTCK_R_032 ;cross ? ( yes:BG_HDFTCK_R_032 )
		FROM	R1
;
		XOR	R3
		BMI	BG_HDFTCK_R_036 ;cross ? ( no:BG_HDFTCK_R_036 )
		NOP
;
BG_HDFTCK_R_032
		MOVES	R3,R3
		BMI	BG_HDFTCK_R_034
		INC	R1
;
		DEC	R1
		DEC	R1
BG_HDFTCK_R_034
		SMS	R5,CWORK8	;(CWK8) <-- saka angle
		BRA	BG_HDFTCK_R_060
		INC	R2		;[ BG cross flag set ]
;
BG_HDFTCK_R_036
		MOVES	R13,R13
		BEQ	BG_HDFTCK_R_070	  ;下のＢＧは坂？チェックしたか？ ( yes:BG_HDFTCK_R_070 )
		NOP
;
;-------------- 下のＢＧは坂ではなかった --------------------------------
BG_HDFTCK_R_040
		MOVE	R1,R12		;(R1) <-- Y pos cross size
;
		LMS	R6,CWORK2	;(R6) <-- up BG unit no.
		LMS	R7,CWORK3	;(R7) <-- up BG unit no. type
		LMS	R8,CWORK4	;(R8) <-- up BG type status data
		LMS	R0,CWORK5
		SMS	R0,CWORK0	;(CWK0) <-- BG check X pos
		LMS	R0,CWORK6
		SMS	R0,CWORK1	;(CWK1) <-- BG check Y pos
;
BG_HDFTCK_R_042
		IBT	R0,#AL
		MOVES	R3,R3
		BPL	BG_HDFTCK_R_050	  ;頭チェック？ ( yes:BG_HDFTCK_R_050 )
		NOP
;
		IBT	R0,#MD+AL
BG_HDFTCK_R_050
		AND	R7
		BEQ	BG_HDFTCK_R_070	  ;BG cross ? ( no:BG_HDFTCK_R_070 )
		NOP
;
		INC	R2		;[ BG cross flag set ]
;
		MOVES	R3,R3
		BMI	BG_HDFTCK_R_052 ;頭チェック？ ( no:BG_HDFTCK_R_052 )
		WITH	R1		;(R1) <-- 補正値
;
		XOR	#0FH
		BRA	BG_HDFTCK_R_060+1
		WITH	R10		;Ｙ座標補正
;
BG_HDFTCK_R_052
		NOT
		INC	R1
;
;-------------- ＢＧ当たり ----------------------------------------------
BG_HDFTCK_R_060
		WITH	R10		;Ｙ座標補正
		ADD	R1
;
BG_HDFTCK_R_070
		mDJMP	BG_HDFTCK_R_170
;
;------------------------------------------------------------------------
;-		左右補正						-
;------------------------------------------------------------------------
BG_HDFTCK_R_SIDE
		IBT	R5,#040H	;(R5) <-- 平地の回転角度
;
		FROM	R1
		SEX
		BPL	BG_HDFTCK_R_100 ;左右反転チェック？ ( no:BG_HDFTCK_R_100 )
		WITH	R3
;
		NOT
		INC	R3
		IWT	R5,#0C0H	;(R5) <-- 平地の回転角度
BG_HDFTCK_R_100
		SMS	R5,CWORK8	;(CWK8) <-- saka angle
;
		LMS	R0,CWORK0	;(R0) <-- BG check X pos
		TO	R1		;(R1) <-- X pos cross size
		AND	#0FH
		MOVE	R12,R1		;(R12) <-- X pos cross size
;
		FROM	R7
		TO	R13		;(R13) <-- 手前のＢＧは坂？チェックしたか？
		AND	#SK
		BNE	BG_HDFTCK_R_120 ;坂 cross ? ( yes:BG_HDFTCK_R_120 )
		NOP
;
;-------------- 手前のＢＧは坂？チェック --------------------------------
		SMS	R6,CWORK2	;(CWK2) <-- BG unit no.
		SMS	R7,CWORK3	;(CWK3) <-- BG unit no. type
		SMS	R8,CWORK4	;(CWK4) <-- BG type status data
		LMS	R0,CWORK0
		SMS	R0,CWORK5	;(CWK5) <-- BG check X pos
		TO	R8		;(R8)	<--	  "
		ADD	R3
		LMS	R0,CWORK1	;(R0)	<-- BG check Y pos
		SMS	R0,CWORK6	;(CWK6) <--	  "
;
		mJSR_X	BGUNIT_READ_R_S+1
		HEX	3D		;[ LMS R6,CBG2OF_FG ]
;
		AND	#SK
		BEQ	BG_HDFTCK_R_140 ;坂 cross ? ( no:BG_HDFTCK_R_140 )
		NOP
;
		WITH	R1		;(R1) <-- Y pos cross size
		SUB	R3
;
;-------------- 坂チェック ----------------------------------------------
BG_HDFTCK_R_120
		SMS	R14,REG14	;(R14) save
;
		FROM	R8		;坂タイプＮｏ．x(8x16)
		SWAP
		MOVES	R3,R3
		BPL	BG_HDFTCK_R_130 ;左チェック？ ( yes:BG_HDFTCK_R_130 )
		LSR
;
		INC	R0		;[ +2 ]
		INC	R0		;
BG_HDFTCK_R_130
		IWT	R14,#SAKA_DATA
		TO	R14
		ADD	R14
		LMS	R0,CWORK1
		AND	#0FH
		ADD	R0
		ADD	R0
		ADD	R0
		TO	R14		;(R14) <-- 坂データアドレス
		ADD	R14
		TO	R5
		GETB
		INC	R14
		GETBS
;
		LMS	R14,REG14	;(R14) load
;
		TO	R1		;(R1) <-- 補正値
		SUB	R1
		BEQ	BG_HDFTCK_R_132 ;cross ? ( yes:BG_HDFTCK_R_132 )
		FROM	R1
;
		XOR	R3
		BMI	BG_HDFTCK_R_136 ;cross ? ( no:BG_HDFTCK_R_136 )
		NOP
;
BG_HDFTCK_R_132
		MOVES	R3,R3
		BMI	BG_HDFTCK_R_134
		INC	R1
;
		DEC	R1
		DEC	R1
BG_HDFTCK_R_134
		SMS	R5,CWORK8	;(CWK8) <-- saka angle
		BRA	BG_HDFTCK_R_160
		INC	R2		;[ BG cross flag set ]
;
BG_HDFTCK_R_136
		MOVES	R13,R13
		BNE	BG_HDFTCK_R_170	  ;下のＢＧは坂？チェックしたか？ ( yes:BG_HDFTCK_R_170 )
		NOP
;
;-------------- 下のＢＧは坂ではなかった --------------------------------
BG_HDFTCK_R_140
		MOVE	R1,R12		;(R1) <-- Y pos cross size
;
		LMS	R6,CWORK2	;(R6) <-- up BG unit no.
		LMS	R7,CWORK3	;(R7) <-- up BG unit no. type
		LMS	R8,CWORK4	;(R8) <-- up BG type status data
		LMS	R0,CWORK5
		SMS	R0,CWORK0	;(CWK0) <-- BG check X pos
		LMS	R0,CWORK6
		SMS	R0,CWORK1	;(CWK1) <-- BG check Y pos
;
BG_HDFTCK_R_142
		FROM	R7
		AND	#AL
		BEQ	BG_HDFTCK_R_170	  ;BG cross ? ( no:BG_HDFTCK_R_170 )
		NOP
;
		INC	R2		;[ BG cross flag set ]
;
		MOVES	R3,R3
		BMI	BG_HDFTCK_R_150 ;左チェック？ ( no:BG_HDFTCK_R_150 )
		WITH	R1		;(R1) <-- 補正値
;
		XOR	#0FH
		BRA	BG_HDFTCK_R_160+1
		WITH	R9		;Ｘ座標補正
;
BG_HDFTCK_R_150
		NOT
		INC	R1
;
;-------------- ＢＧ当たり ----------------------------------------------
BG_HDFTCK_R_160
		WITH	R9		;Ｘ座標補正
		ADD	R1
;
BG_HDFTCK_R_170
		LMS	R4,CWORK8	;(R4) <-- saka angle
;
		MOVES	R3,R4
		BMI	BG_HDFTCK_R_190	  ;足チェック？ ( yes:BG_HDFTCK_R_190 )
		NOP
;
;------------------------------------------------------------------------
;-		頭用特殊ＢＧ当たりチェック				-
;------------------------------------------------------------------------
BG_HDFTCK_R_180
		mDJMP	HED_SP_CK
;
;------------------------------------------------------------------------
;-		足用特殊ＢＧ当たりチェック				-
;------------------------------------------------------------------------
BG_HDFTCK_R_190
		mDJMP	FOOT_SP_CK
;
;************************************************************************
;*									*
;*		座標計算（重力セット）					*
;*									*
;************************************************************************
;
MR_CALC
		LMS	R5,CPLJUMP	;(R5) <-- ジャンプフラグ
		DEC	R5
		BPL	MR_CALC_0010	;プレイヤージャンプ ？ ( yes:MR_CALC_0010 )
		INC	R5
;
		LMS	R0,CPLTYPE
		SUB	#P_MOGURA
		BNE	MR_CALC_0000	;モグラヨッシー？ ( no:MR_CALC_0000 )
		NOP
;
;-------------- モグラヨッシーは引力無しに ------------------------------
		IBT	R9,#00H		;(R9) <-- Ｇ
		BRA	MR_CALC_0102
		NOP
;
MR_CALC_0000
		LMS	R0,CPMR_BGCF
		DEC	R0
		BPL	MR_CALC_0100	;ソニックモード？ ( yes:MR_CALC_0100 )
		NOP
;
MR_CALC_0010
		mDJMP	PL_CALC
;
;------------------------------------------------------------------------
;-		プレイヤー着地状態					-
;------------------------------------------------------------------------
MR_CALC_0100
		IWT	R9,#0300H	;(R9) <-- Ｇ
;
MR_CALC_0102
		IBT	R0,#BANK LCOS
		ROMB			;※ＲＯＭアドレス変更（<XY_CALC>にて復帰）
;
		LMS	R6,CPLMVSP	;(R6) <-- 移動スピード
		LMS	R7,CPLANGL	;(R7) <-- 足下角度
		IWT	R0,#LCOS
		TO	R14
		ADD	R7
		GETBS
		ADD	R0
		ADD	R0		;[ 100H <-- 040H ]
		LMULT
		WITH	R4
		HIB
		LOB
		SWAP
		TO	R8		;(R8) <-- Ｘスピード
		OR	R4
;
		IWT	R0,#LSIN
		TO	R14
		ADD	R7
		GETBS
		ADD	R0
		ADD	R0		;[ 100H <-- 040H ]
		LMULT
		WITH	R4
		HIB
		LOB
		SWAP
		TO	R14		;(R14) <-- Ｙスピード
		OR	R4
;
		IBT	R0,#020H
		TO	R7
		ADD	R7
		IBT	R0,#03FH
		AND	R7
		BNE	MR_CALC_0110	;４５度エリア？ ( no:MR_CALC_0110 )
		NOP
;
		DEC	R6
		BPL	MR_CALC_0110	;移動方向（＋）？ ( yes:MR_CALC_0110 )
		INC	R6
;
		DEC	R7
MR_CALC_0110
		FROM	R7
		SEX			;[ CMP #80H ]
		BPL	MR_CALC_0120
		WITH	R9
;
		NOT
		INC	R9
MR_CALC_0120
		IBT	R0,#040H
		AND	R7
		BEQ	MR_CALC_0130	;上下補正？ ( yes:MR_CALC_0130 )
		WITH	R14
;
		WITH	R8
MR_CALC_0130
		ADD	R9
;
		SMS	R8,CPLXSPD	;Ｘスピードセット
;
		LM	R0,CONLFFG
		SUB	#0
		BEQ	MR_CALC_0150	;リフトに乗ってる？ ( no:MR_CALC_0150 )
		NOP
;
		IWT	R14,#0400H
MR_CALC_0150
		SMS	R14,CPLYSPD	;Ｙスピードセット
		mDJMP	XY_CALC
;
;
;
;
;
;************************************************************************
;*									*
;*		汽車							*
;*									*
;************************************************************************
;
TRAIN_MV
		mJSR	TRAIN_SUB	;汽車基本ルーチン
;
		LMS	R0,CPLFLSH
		IBT	R2,#050H
		SUB	R2
		BMI	TRAIN_MV_FFFF	;プレイヤーダメージ？ ( no:TRAIN_MV_FFFF )
		NOP
;
;-------------- プレイヤーダメージ！！ ----------------------------------
		LMS	R0,CPTR_FLCT
		IBT	R2,#010H
		ADD	R2
		mDJMP_X TRAIN_MV_2030
		SBK			;[ SMS R0,CPTR_FLCT ]
;
TRAIN_MV_FFFF
		LMS	R1,CPTR_MODE	;(R1) <-- レールモード（倍率）
		DEC	R1
		BMI	TRAIN_MV_0010	;レールモード？ ( no:TRAIN_MV_0010 )
		INC	R1
;
TRAIN_MV_0000
		mDJMP	TRAIN_MV_0500
;
;------------------------------------------------------------------------
;-		レール外モード						-
;------------------------------------------------------------------------
TRAIN_MV_0010
;
;-------------- 座標計算 ----------------------------------------
		mJSR	PL_CALC		;座標計算
;
;-------------- ＢＧチェック ------------------------------------
		IWT	R14,#PLBGCK_POINT_TR  ;(R14) <-- ＢＧチェックポイントデータポインター
		mJSR	PL_BGCK_2	;ＢＧチェック
;
		LMS	R1,CPTR_MODE	;(R1) <-- レールモード（倍率）
		DEC	R1
		BPL	TRAIN_MV_0000	;レールモードへ？ ( yes:TRAIN_MV_0000 )
		INC	R1
;
		IWT	R0,#0100H
		SMS	R0,CPTR_ZOOM	;拡大率セット
;
;-------------- Ｇｏｔｏレールモード中心ＢＧチェック ----
		LMS	R0,CPLJUMP
		DEC	R0
		BPL	TRAIN_MV_0020	;ジャンプ中？ ( yes:TRAIN_MV_0020 )
		NOP
;
		LMS	R0,CPLXPSL
		TO	R8		;(R8) <-- プレイヤーＸ座標
		ADD	#08H
		LMS	R0,CPLYPSL
		IBT	R7,#018H
		ADD	R7
		mJSR_X	BGUNIT_READ_S+1
		HEX	3D		;[ LMS R6,CBG2OF_FG ]
;
		IWT	R0,#1111100000000000B
		AND	R7
		IWT	R5,#SN
		SUB	R5
		BNE	TRAIN_MV_0020	;線路？ ( no:TRAIN_MV_0020 )
		NOP
;
		FROM	R6
		HIB
		IBT	R1,#UT1E00/100H
		SUB	R1
		ADD	R0		;x2
		IWT	R14,#GO_RALE_KEY
		TO	R14
		ADD	R14
		GETB
		LM	R1,CMKEYC1
		AND	R1
		BEQ	TRAIN_MV_0020	;ＧｏｔｏレールモードＯＫ？ ( no:TRAIN_MV_0020 )
		INC	R14
;
;-------------- Ｇｏｔｏレールモード --------------------
		IBT	R0,#05DH
		SMS	R0,CMSOUND3	;[♪]
;
		GETB			;目標回転角セット
		SMS	R0,CPLANGL
		SWAP
		SMS	R0,CPTR_MANG
;
		SUB	R0
		SMS	R0,CPTR_MUKI
		SMS	R0,CPTR_BACK
		SMS	R0,CPLMVSP
		IWT	R1,#0100H	;(R1) <-- レールモード”ＯＮ”
		SMS	R1,CPTR_MODE
		BRA	TRAIN_MV_0500
		NOP
;
TRAIN_MV_0020
;
;----------------------------------------------------------------
;-		コントローラー入力				-
;----------------------------------------------------------------
		LM	R0,CMKEYC1	;(R0) <-- コントローラー情報（連続）
		TO	R6		;[ 移動キー入力無しならＭＡＸスピード０ヘ ]
		AND	#00000011B
		BEQ	TRAIN_MV_0150	;移動キー入力？ ( no:TRAIN_MV_0150 )
		NOP
;
		IBT	R5,#00		;(R5) <-- 回転角度
		IWT	R6,#0180H	;(R6) <-- ＭＡＸスピード
		AND	#00000010B
		SMS	R0,CPLCMKI	;プレイヤー向きセット
		BEQ	TRAIN_MV_0100
		NOP
;
		IWT	R5,#80H*100H	;(R5) <-- 回転角度
		IWT	R6,#-0180H	;(R6) <-- ＭＡＸスピード
TRAIN_MV_0100
		SMS	R5,CPTR_ANGL	;回転角度セット
TRAIN_MV_0150
		IBT	R5,#0010H	;(R5) <-- 加速値
		mJSR	X_SP_CALC	;Ｘスピード加減速
;
		mDJMP	TRAIN_MV_2000
;
;------------------------------------------------------------------------
;-		レールモード						-
;-			in : (R1) レールモード（倍率）			-
;------------------------------------------------------------------------
TRAIN_MV_0500
;
;------------------------------------------------------------------------
;-		座標計算						-
;------------------------------------------------------------------------
		mJSR	RALE_XY_CALC	;座標計算
;
;------------------------------------------------------------------------
;-		レールチェック用ＢＧチェック				-
;------------------------------------------------------------------------
		LMS	R0,CPLXPSL
		TO	R8		;(R8) <-- ＢＧチェックＸ座標
		ADD	#08H
		MOVE	R9,R8		;(R9) <--	  ”
		LMS	R0,CPLYPSL
		IBT	R10,#018H
		ADD	R10		;(R0)  <-- ＢＧチェックＹ座標
		MOVE	R10,R0		;(R10) <--	    ”
		mJSR_X	BGUNIT_READ_S+1
		HEX	3D		;[ LMS R6,CBG2OF_FG ]
;
		IWT	R0,#1111100000000000B
		AND	R7
		IWT	R5,#SN
		TO	R7		;(R7) <-- 線路かどうか？
		SUB	R5
;
		FROM	R6
		HIB
		IBT	R5,#UT1E00/100H
		SUB	R5
;;;;		    ADD	    R0		    ;x(2*16)
;;;;		    ADD	    R0		    ;
		MULT	#8		;
		IWT	R6,#RALE_BIT_DATA
		TO	R6		;(R6) <-- 線路ビットデータポインター
		ADD	R6
;
;------------------------------------------------------------------------
;-		レールモード						-
;------------------------------------------------------------------------
		IBT	R0,#070H
		SUB	R1
		BCC	TRAIN_MV_0510	;レールモード初期セット中？ ( yes:TRAIN_MV_0500 )
		NOP
;
		mDJMP	TRAIN_MV_0800
;
;------------------------------------------------------------------------
;-		レールモード初期セット					-
;------------------------------------------------------------------------
TRAIN_MV_0510
		SMS	R1,CPTR_ZOOM	;拡大率セット
;
		IBT	R0,#-02H	;(R0) <-- レールモード（倍率）加算値
		LMS	R2,CPTR_MUKI	;(R2) <-- Ｇｏｔｏレールモードフラグ
		DEC	R2
		BMI	TRAIN_MV_0520	;Ｇｏｔｏレールモード？ ( yes:TRAIN_MV_0520 )
		INC	R2
;
		IBT	R0,#02H		;(R0) <-- レールモード（倍率）加算値
TRAIN_MV_0520
		ADD	R1
		IWT	R3,#0100H
		SUB	R3
		BCC	TRAIN_MV_0530	;レールモード解除？ ( no:TRAIN_MV_0530 )
		ADD	R3
;
		SUB	R0		;[ IBT R0,#0 ]
TRAIN_MV_0530
		SMS	R0,CPTR_MODE	;レールモード（倍率）セット
		IBT	R3,#072H
		SUB	R3
		BNE	TRAIN_MV_0540	;Ｇｏｔｏレールモード”キラリン”セット？ ( no:TRAIN_MV_0540 )
		NOP
;
;-------------- Ｇｏｔｏレールモード”キラリン”効果セット --------------
		IWT	R5,#KIRA0	;(A) <-- 効果Ｎｏ．
		mJSR	M_EXINSR	;効果エリア確保
;
		IBT	R0,#036H
		SMS	R0,CMSOUND3	;[♪]
;
		LMS	R3,CPLXPSL
		mSTW	R3,CEXXPSL,R1	;Ｘ座標セット
		LMS	R0,CPLYPSL
		TO	R3
		ADD	#0FH
		mSTW	R3,CEXYPSL,R1	;Ｙ座標セット
		IBT	R3,#6
		mSTW	R3,CEXCHPT,R1	;パターンＮｏ．初期セット
		IBT	R3,#3
		mSTW	R3,CEXTIM0,R1	;タイマー初期セット
;
TRAIN_MV_0540
		DEC	R2
		BMI	TRAIN_MV_0600	;Ｇｏｔｏレールモード？ ( yes:TRAIN_MV_0600 )
		INC	R2
;
;-------------- Ｇｏｔｏレール外モード処理 ------------------------------
;
;-------------- 足補正チェック ----------------------------------
		MOVE	R8,R9		;(R8) <-- ＢＧチェックＸ座標
		FROM	R10
		ADD	#01FH-18H	;(R0) <-- ＢＧチェックＹ座標
		mJSR_X	BGUNIT_READ_S+1
		HEX	3D		;[ LMS R6,CBG2OF_FG ]
;
		AND	#MD+AL
		BEQ	TRAIN_MV_0650	;足ＢＧ当たり？ ( no:TRAIN_MV_0650 )
		NOP
;
		LMS	R0,CPLYPSL
		DEC	R0
		BRA	TRAIN_MV_0650	;回転角計算へ
		SBK			;[ SMS R0,CPLYPSL ]
;
;-------------- Ｇｏｔｏレールモード処理 --------------------------------
TRAIN_MV_0600
		mJSR	RALE_ON_CK	;レールに乗ってるかチェック
		BNE	TRAIN_MV_0650	;レールに乗ってる？ ( yes:TRAIN_MV_0650 )
		NOP
;
;-------------- レールに乗せる補正 ------------------------------
		LMS	R0,CPTR_MANG	;(R0) <-- 目標回転角
		HIB
		LSR
		LSR
		LSR
		LSR
		IWT	R14,#GO_RALE_HSDT
		TO	R14
		ADD	R14
		TO	R3		;(R3) <-- 補正目標Ｘ
		GETB
;
		FROM	R9
		AND	#0FH
		SUB	R3		;(N) set
		IBT	R0,#01H
		BMI	TRAIN_MV_0610
		INC	R14
;
		IBT	R0,#0FFH
TRAIN_MV_0610
		ADD	R9
		SUB	#08H
		SMS	R0,CPLXPSL	;プレイヤーＸ座標補正
;
		TO	R3		;(R3) <-- 補正目標Ｙ
		GETB
		FROM	R10
		AND	#0FH
		SUB	R3		;(N) set
		IBT	R0,#01H
		BMI	TRAIN_MV_0620
		NOP
;
		IBT	R0,#0FFH
TRAIN_MV_0620
		ADD	R10
		IBT	R3,#018H
		SUB	R3
		SMS	R0,CPLYPSL	;プレイヤーＹ座標補正
;
TRAIN_MV_0650
		mDJMP	TRAIN_MV_1000	;回転角計算へ
;
;------------------------------------------------------------------------
;-		レールモード処理					-
;-				レール角度				-
;-					     3 2 1			-
;-					     4 + 0			-
;-					     5 6 7			-
;------------------------------------------------------------------------
TRAIN_MV_0800
		IWT	R0,#0100H
		SMS	R0,CPTR_ZOOM	;拡大率セット
;
;-------------- レールの補正チェック ------------------------------------
		mJSR	RALE_ON_CK	;レールに乗ってるかチェック
		BEQ	TRAIN_MV_0804	;レールに乗ってる？ ( no:TRAIN_MV_0804 )
		NOP
;
		mDJMP	TRAIN_MV_0900
;
TRAIN_MV_0804
		MOVES	R7,R7
		BNE	TRAIN_MV_0852	;レールモード解除？ ( yes:TRAIN_MV_0852 )
		NOP
;
;-------------- レールへの補正 ----------------------------------
		MOVE	R1,R9		;(R9)  save
		SMS	R10,REG10	;(R10) save
;
		IWT	R2,#4000H	;(R2) <-- 補正ＯＫチェックフラグ
;
		LMS	R0,CPTR_MANG
		HIB
		LSR
		LSR
		LSR
		LSR
		MOVE	R3,R0		;(R3) <-- 現在の移動角度／２０００Ｈ×２
;
		ADD	#(4000H/2000H)*2
TRAIN_MV_0810
		AND	#07H*2
		IWT	R14,#RALE_HS_ANAD
		TO	R14
		ADD	R14
		TO	R4		;(R4) <-- Ｘ補正加算値
		GETBS
		INC	R14
		TO	R8		;(R8) <-- Ｙ補正加算値
		GETBS
;
		WITH	R9		;(R9)  <-- ＢＧチェックＸ座標ビット位置
		AND	#0FH
		WITH	R10		;(R10) <-- ＢＧチェックＹ座標ビット位置
		AND	#0FH
;
		IBT	R12,#4		;[ ４ドットまで補正 ]
		MOVE	R13,R15
TRAIN_MV_0820
		FROM	R9
		ADD	R4
		IBT	R5,#010H	;(R5) <-- ビット位置オーバーチェックデータ
		SUB	R5
		BCS	TRAIN_MV_0830	;ビット位置オーバー？ ( yes:TRAIN_MV_0830 )
		ADD	R5
;
		MOVE	R9,R0
		FROM	R10
		ADD	R8
		SUB	R5
		BCS	TRAIN_MV_0830	;ビット位置オーバー？ ( yes:TRAIN_MV_0830 )
		ADD	R5
;
		MOVE	R10,R0
		mJSR	RALE_ON_CK	;レールに乗ってるかチェック
		BNE	TRAIN_MV_0840	;レールに乗ってる？ ( yes:TRAIN_MV_0840 )
		NOP
;
		LOOP
		NOP
;
TRAIN_MV_0830
		INC	R2		;補正不能！！
;
TRAIN_MV_0840
		WITH	R2		;[ ASL R2 ]
		ADD	R2
		BCS	TRAIN_MV_0850	;両サイドチェック終了？ ( yes:TRAIN_MV_0850 )
		NOP
;
		SMS	R9,CWORK0	;補正Ｘ位置保存
		SMS	R10,CWORK1	;  ”Ｙ	  ”
;
		FROM	R3
		ADD	#(0C000H/2000H)*2
TRAIN_MV_0848
		MOVE	R9,R1		;(R9)  load
		LMS	R10,REG10	;(R10) load
		BRA	TRAIN_MV_0810
		NOP
;
TRAIN_MV_0850
		BMI	TRAIN_MV_0880	;その場ＳＴＯＰ用補正？ ( yes:TRAIN_MV_0880 )
		NOP
;
		MOVES	R0,R2
		BEQ	TRAIN_MV_0851	;その場ＳＴＯＰ？ ( yes:TRAIN_MV_0851 )
		LSR
;
		SUB	#0011B
		BNE	TRAIN_MV_0860	;その場ＳＴＯＰ？ ( no:TRAIN_MV_0860 )
		INC	R0		;[ (Z) <-- 1:0010B 0:0001B ]
;
TRAIN_MV_0851
		IWT	R2,#0C000H
		FROM	R3
		XOR	#08H
		BRA	TRAIN_MV_0848
		NOP
;
;-------------- レールモード解除へ ------------------------------
TRAIN_MV_0852
		IBT	R0,#05DH
		SMS	R0,CMSOUND3	;[♪]
;
		IBT	R0,#070H+2	;レールモード解除”ＯＮ”
		SMS	R0,CPTR_MODE
		IBT	R0,#02H
		SMS	R0,CPTR_MUKI
		LMS	R0,CPLCMKI
		DEC	R0
		BMI	TRAIN_MV_0854
		SUB	R0		;[ IBT R0,#0 ]
;
		IWT	R0,#80H*100H
TRAIN_MV_0854
		SMS	R0,CPTR_MANG	;目標回転角度セット
		HIB
		SMS	R0,CPLANGL
		SUB	R0
		SMS	R0,CPLMVSP
		SMS	R0,CPTR_BACK
		mDJMP	TRAIN_MV_1000
;
;-------------- 移動方向切り替え補正 --------------------
TRAIN_MV_0860
		IBT	R0,#-01H*2
		BEQ	TRAIN_MV_0870	;どっちのサイド？
		NOP
;
		IBT	R0,#01H*2
		LMS	R9,CWORK0	;補正Ｘ位置保存
		LMS	R10,CWORK1	;  ”Ｙ	  ”
TRAIN_MV_0870
		ADD	R3
		AND	#07H*2
		ADD	R0
		ADD	R0
		ADD	R0
		ADD	R0
		SMS	R0,CPLANGL
		SWAP
		SMS	R0,CPTR_MANG	;目標回転角度セット

TRAIN_MV_0880
		FROM	R1
		BIC	#0FH
		OR	R9
		MOVE	R9,R0		;(R9) <-- ＢＧチェックＸ座標補正
		SUB	#08H
		SMS	R0,CPLXPSL	;プレイヤーＸ座標補正
		LMS	R0,REG10
		BIC	#0FH
		OR	R10
		MOVE	R10,R0		;(R10) <-- ＢＧチェックＹ座標補正
		IBT	R3,#018H
		SUB	R3
		SMS	R0,CPLYPSL	;プレイヤーＹ座標補正
;
;-------------- 移動方向切り替えキー入力チェック ------------------------
TRAIN_MV_0900
		LMS	R1,CPTR_MANG	;(R1) <-- 現在の移動角度
		LM	R0,CMKEYC1
		AND	#00001111B
		BEQ	TRAIN_MV_0910	;移動方向切り替えキー入力？ ( no:TRAIN_MV_0910 )
		NOP
;
		IWT	R14,#TR_KEY_ANGL-1
		TO	R14
		ADD	R14
		GETB
		TO	R1		;(R1) <-- 切り替え移動角度
		SWAP
TRAIN_MV_0910
		FROM	R1
		HIB
		LSR
		LSR
		LSR
		LSR
		AND	#07H*2
		IWT	R14,#RALE_HS_ANAD
		TO	R14
		ADD	R14
;
		MOVE	R2,R9		;(R9)  save
		MOVE	R3,R10		;(R10) save
;
		GETBS			;(R0) <-- Ｘ加算値
		ADD	R0		;x2
		INC	R14
		TO	R9
		ADD	R9
		MOVE	R8,R9		;(R9) <-- ＢＧチェックＸ座標
		GETBS
		ADD	R0		;x2
		TO	R10
		ADD	R10
		MOVE	R0,R10		;(R0)  <-- ＢＧチェックＹ座標
		mJSR_X	BGUNIT_READ_S+1
		HEX	3D		;[ LMS R6,CBG2OF_FG ]
;
		IWT	R0,#1111100000000000B
		AND	R7
		IWT	R5,#SN
		TO	R7		;(R7) <-- 線路かどうか？
		SUB	R5
;
		FROM	R6
		HIB
		IBT	R5,#UT1E00/100H
		SUB	R5
;;;;		    ADD	    R0		    ;x(2*16)
;;;;		    ADD	    R0		    ;
		MULT	#8		;
		IWT	R6,#RALE_BIT_DATA
		TO	R6		;(R6) <-- 線路ビットデータポインター
		ADD	R6
;
		mJSR	RALE_ON_CK	;レールに乗ってるかチェック
		BEQ	TRAIN_MV_0920	;レールに乗ってる？ ( no:TRAIN_MV_0920 )
		NOP
;
		SMS	R1,CPTR_MANG	;目標回転角度セット
		FROM	R1
		HIB
		SMS	R0,CPLANGL
;
;------------------------------------------------------------------------
;-		スピード計算						-
;------------------------------------------------------------------------
TRAIN_MV_0920
;;;;		    IWT	    R6,#080H	    ;(R6) <-- バックＭＡＸスピード
;;;;		    IWT	    R6,#0100H	    ;(R6) <-- バックＭＡＸスピード
;;;;		    LMS	    R0,CPTR_BACK
;;;;		    DEC	    R0
;;;;		    BPL	    TRAIN_MV_0930   ;バック？ ( yes:TRAIN_MV_0930 )
;;;;		    NOP
;;;;;
		IWT	R6,#0100H	;(R6) <-- ノーマルＭＡＸスピード
		LMS	R0,CP_KEY_BERO
		LMS	R2,CP_KEY_JUMP
		OR	R2
		LMS	R2,CP_KEY_MNAG
		OR	R2
		LMS	R2,CMKEYC1L
		AND	R2
		BEQ	TRAIN_MV_0930	;（Ｂ）加速？ ( no:TRAIN_MV_0930 )
		NOP
;
		IWT	R6,#0180H	;(R6) <-- （Ｂ）加速ＭＡＸスピード
TRAIN_MV_0930
		IBT	R5,#0010H	;(R5) <-- 加速値
		mJSR	X_SP_CALC	;Ｘスピード加減速
;
;------------------------------------------------------------------------
;-		回転角計算						-
;------------------------------------------------------------------------
TRAIN_MV_1000
		LMS	R0,CPTR_ANGL	;(R0)  <-- 現在の回転角度
		LMS	R10,CPTR_MANG	;(R10) <-- 目標回転角度
		TO	R1
		SUB	R10
		BPL	TRAIN_MV_1010
		WITH	R1
;
		NOT
		INC	R1
TRAIN_MV_1010
		LMS	R4,CPTR_BACK	;[ * SBK ] (R4) <-- 前回バック？フラグ
;
		IWT	R0,#040H*100H
		SUB	R1
		BCC	TRAIN_MV_1020	;反転角度へ？ ( yes:TRAIN_MV_1020 )
		NOP
;
		BNE	TRAIN_MV_1030	;９０度差？ ( no:TRAIN_MV_1030 )
		SUB	R0
;
		DEC	R4
		BMI	TRAIN_MV_1030	;前回バック？ ( no:TRAIN_MV_1030 )
		SUB	R0		;[ IBT R0,#0 ] 前進！！
;
TRAIN_MV_1020
		IWT	R0,#80H*100H
		TO	R10		;(R10) <-- 反転目標回転角度
		XOR	R10
		IBT	R0,#01H		;バック
TRAIN_MV_1030
		SBK			;[ SMS R0,CPTR_BACK ]
;
		LMS	R0,CPLMVSP
		DEC	R0
		BPL	TRAIN_MV_1040
		INC	R0
;
		NOT
		INC	R0
TRAIN_MV_1040
		ADD	R0		;x4
		ADD	R0		;
		IWT	R4,#0200H	;(R4) <-- ＭＩＮ回転スピード
		SUB	R4
		BCC	TRAIN_MV_1050
		ADD	R4
;
		MOVE	R4,R0		;(R4) <-- 回転スピード
TRAIN_MV_1050
		mJSR	C_ANGL_CALC
;
;----------------------------------------------------------------
;-		パターンセット					-
;----------------------------------------------------------------
TRAIN_MV_2000
		LMS	R0,CPLMVSP
		DEC	R0
		BPL	TRAIN_MV_2010
		INC	R0
;
		NOT
		INC	R0
TRAIN_MV_2010
		IWT	R1,#080H
		SUB	R1
		BCC	TRAIN_MV_2020
		TO	R1
;
		ADD	R1
TRAIN_MV_2020
		LMS	R0,CPTR_WALK
		ADD	R1
		SBK			;[ SMS R0,CPTR_WALK ]
		IWT	R1,#0600H
		SUB	R1
		BCC	TRAIN_MV_20200	;パターン切り替え？ ( no:TRAIN_MV_20200 )
		NOP
;
		SBK			;[ SMS R0,CPTR_WALK ]
		LMS	R0,CPTR_PTNO	;パターン切り替え
		XOR	#02H
		BEQ	TRAIN_MV_2021	;けむりセット？ ( yes:TRAIN_MV_2021 )
		SBK			;[ SMS R0,CPTR_PTNO ]
;
TRAIN_MV_20200
		mDJMP	TRAIN_MV_2030
;
;-------------- ”シュッポシュッポ”けむりセット ----------------
TRAIN_MV_2021
		IBT	R0,#BANK LCOS
		ROMB
;
		LMS	R0,CPTR_ANGL
		HIB
		MOVE	R10,R0		;(R10) <-- 回転角度
		IBT	R14,#040H
		ADD	R14
		SEX
		BPL	TRAIN_OAM_0010
		NOP
;
		IBT	R0,#7FH
		XOR	R10
		INC	R0
		TO	R10
		LOB
TRAIN_OAM_0010
		IWT	R0,#LCOS
		TO	R14
		ADD	R10
		TO	R1		;(R1) <-- ｃｏｓデータ
		GETB
		IBT	R0,#40H		;[ IWT R14,#LSIN ]
		TO	R14
		ADD	R14
		TO	R2		;(R2) <-- ｓｉｎデータ
		GETB
;
		IBT	R0,#BANK PLAYER_DATA
		ROMB
;
		IBT	R5,#05H		;(R5) <-- けむりセットＸオフセット値
		IBT	R6,#0E8H	;(R6) <-- けむりセットＹオフセット値
		LMS	R0,CPLPATN
		IWT	R3,#TR00
		TO	R9		;(R9) <-- レールモードパターンチェックフラグ
		SUB	R3
		BEQ	TRAIN_MV_2022	;レールモードパターン？ ( no:TRAIN_MV_2022 )
		NOP
;
		IBT	R5,#04H		;(R5) <-- けむりセットＸオフセット値
		IBT	R6,#0F2H	;(R6) <-- けむりセットＹオフセット値
TRAIN_MV_2022
		FROM	R5
		TO	R3		;(R3) <-- Ｘ×ｃｏｓ
		MULT	R1
		FROM	R6
		MULT	R2		;(R0) <-- Ｙ×ｓｉｎ
		ADD	R3
		ADD	R0		;x4
		ADD	R0		;
		HIB
		TO	R3		;(R3) <-- けむりセットＸ位置
		SEX
		LMS	R8,CPLCMKI	;(R8) <-- プレイヤー向き
		DEC	R8
		BMI	TRAIN_MV_2024
		INC	R8
;
		WITH	R3
		NOT
		INC	R3
TRAIN_MV_2024
		FROM	R5
		TO	R4		;(R4) <-- Ｘ×ｓｉｎ
		MULT	R2
		FROM	R6
		MULT	R1		;(R0) <-- Ｙ×ｃｏｓ
		SUB	R4
		ADD	R0		;x4
		ADD	R0		;
		HIB
		SEX
		TO	R4		;(R4) <-- けむりセットＹ位置
		ADD	#0EH
;
		IWT	R5,#TRSMK	;(R5) <-- 効果Ｎｏ．
		mJSR	M_EXINSR	;効果エリア確保
;
		LMS	R0,CMSOUND3	;[♪]
		DEC	R0
		BPL	TRAIN_MV_2025	;サウンドセットＯＫ？ ( no:TRAIN_MV_2025 )
		NOP
;
		IBT	R0,#045H
		SMS	R0,CMSOUND3	;[♪]
TRAIN_MV_2025
		LMS	R0,CPLXPSL
		TO	R3
		ADD	R3
		mSTW	R3,CEXXPSL,R1	;Ｘ座標セット
		LMS	R0,CPLYPSL
		TO	R4
		ADD	R4
		mSTW	R4,CEXYPSL,R1	;Ｙ座標セット
		IBT	R3,#040H	;(R3) <-- スピード
		IBT	R4,#2*2		;(R4) <-- 初期パターン
		MOVES	R9,R9
		BEQ	TRAIN_MV_2026	;レールモードパターン？ ( no:TRAIN_MV_2026 )
		NOP
;
		INC	R4		;[ IBT R4,#2*2+1 ]
		WITH	R3
		LSR
TRAIN_MV_2026
		mSTW	R3,CEXWRK2,R1	;スピードセット
		mSTW	R4,CEXCHPT,R1	;初期パターンセット
		IBT	R3,#09H
		mSTW	R3,CEXTIM0,R1	;タイマー初期セット
		IBT	R0,#40H
		ADD	R10
		DEC	R8
		BPL	TRAIN_MV_2028
		INC	R8
;
		IBT	R3,#07FH
		XOR	R3
		INC	R0
TRAIN_MV_2028
		LOB
		TO	R3
		ADD	R0
		mSTW	R3,CEXWRK0,R1	;角度セット
;
TRAIN_MV_2030
		SUB	R0		;<<< end >>>
		STOP
		NOP
;
;------------------------------------------------------------------------
;-		レールに乗ってるかチェック				-
;-			in :						-
;-				ＢＧチェック情報			-
;-			out :						-
;-				(Z) <-- 0:レールに乗ってる		-
;-					1:   ”	  乗ってない		-
;------------------------------------------------------------------------
RALE_ON_CK
		MOVES	R7,R7
		BNE	RALE_ON_CK_050	;線路？ ( no:RALE_ON_CK_050 )
		SUB	R0		;[ (Z) <- 1 ]
;
		FROM	R10
		AND	#0FH
		LSR
		TO	R14		;(R14) <-- 線路ビットデータポインター
		ADD	R6
		TO	R5		;(R5) <-- 線路ビットデータ
		GETB
;
		FROM	R9
		AND	#0FH
		LSR
		IWT	R14,#RALE_BIT_AND
		TO	R14
		ADD	R14
		GETB
;
		AND	R5
RALE_ON_CK_050
		mRTS
;
;------------------------------------------------------------------------
;-		回転スピード計算					-
;------------------------------------------------------------------------
RALE_XY_CALC
		LMS	R2,CPLMVSP	;(R2) <-- 移動スピード
		LMS	R0,CPTR_SDR
		LOB
		ADD	R2		;(C)
		SBK			;[ SMS CPTR_SDR ]
		HIB
		TO	R3		;(R3) <-- 移動ドット数
		SEX
;
		IBT	R0,#BANK LCOS
		ROMB			;※ＲＯＭアドレス変更（<XY_CALC>にて復帰）
;
		LMS	R0,CPLANGL	;(R0) <-- 足下角度
		IWT	R14,#LCOS
		TO	R14
		ADD	R14
		GETB			;(R0) <-- Ｘ移動ドット数
		TO	R4		;(R4) <-- Ｘスピード
		SEX
		BEQ	RALE_XY_CALC_10 ;Ｘ移動無し？ ( yes:RALE_XY_CALC_10 )
		NOP
;
		MOVE	R0,R3
		MOVE	R4,R2
		BPL	RALE_XY_CALC_10
		WITH	R4
;
		NOT
		INC	R4
		NOT
		INC	R0
RALE_XY_CALC_10
		SMS	R4,CPLXSPD	;Ｘスピードセット
		MOVE	R8,R0		;(R8) <-- Ｘ移動ドット数
;
		IBT	R0,#040H	;[ IWT R0,#LSIN ]
		TO	R14
		ADD	R14
		GETB			;(R0)  <-- Ｙ移動ドット数
		TO	R14		;(R14) <-- Ｙスピード
		SEX
		BEQ	RALE_XY_CALC_20 ;Ｙ移動無し？ ( yes:RALE_XY_CALC_20 )
		NOP
;
		MOVE	R0,R3
		MOVE	R14,R2
		BMI	RALE_XY_CALC_20
		WITH	R14
;
		NOT
		INC	R14
		NOT
		INC	R0
RALE_XY_CALC_20
		SMS	R14,CPLYSPD	;Ｙスピードセット
;
		MOVES	R3,R0
		BEQ	RALE_XY_CALC_50 ;Ｙ移動無し？ ( yes:RALE_XY_CALC_50 )
		NOP
;
		MOVES	R8,R8
		BEQ	RALE_XY_CALC_50 ;Ｘ移動無し？ ( yes:RALE_XY_CALC_50 )
		NOP
;
		ADD	R0		;(C) <-- (N)
		TO	R2
		ROL
		FROM	R8
		ADD	R8		;(C) <-- (N)
		WITH	R2
		ROL
;
		LMS	R0,CPLXPSL
		LSR			;(C) <--
		LMS	R0,CPLYPSL
		ROL
;
		XOR	R2
		AND	#03H
		DEC	R0		;[ FFFF,0,1,2 <-- 0,1,2,3 ]
		LSR			;[ > 2 ? ]
		BEQ	RALE_XY_CALC_30
		ROL
;
		IBT	R0,#0-1
RALE_XY_CALC_30
		INC	R0		;[ 0,1,2,0 <-- 0,1,2,3 ]
;
		LSR
		BCC	RALE_XY_CALC_40
		NOP
;
		MOVES	R8,R8
		BEQ	RALE_XY_CALC_40
		NOP
;
		BMI	RALE_XY_CALC_40
		INC	R8		;[+1]
;
		DEC	R8		;[-1]
		DEC	R8		;
RALE_XY_CALC_40
		LSR
		BCC	RALE_XY_CALC_50
		NOP
;
		MOVES	R3,R3
		BEQ	RALE_XY_CALC_50
		NOP
;
		BMI	RALE_XY_CALC_50
		INC	R3		;[+1]
;
		DEC	R3		;[-1]
		DEC	R3		;
RALE_XY_CALC_50
		LMS	R0,CPLXPSL
		ADD	R8
		SBK			;Ｘ座標移動
		LMS	R0,CPLYPSL
		ADD	R3
		SBK			;Ｙ座標移動
;
		IBT	R0,#BANK PLAYER_DATA
		ROMB			;ＲＯＭアドレス復帰
;
		mRTS
;
;****************************************************************
;*		汽車基本ルーチン				*
;****************************************************************
TRAIN_SUB
		SMS	R11,RTS4	;[ return address save ]
;
;-------------- 回転キャラクターセット --------------------------
		LMS	R0,CPTR_MODE
		DEC	R0
		IBT	R1,#070H+2
		SUB	R1		;(C) set
		IWT	R14,#TR00	;パターンＮｏ．セット
		IWT	R0,#TR_CHR_ADRS
		BCS	TRAIN_SUB_0050	;レールモード？ ( no:TRAIN_SUB_0050 )
		NOP
;
		ADD	#(2*2)
		IWT	R14,#TR01	;パターンＮｏ．セット
TRAIN_SUB_0050
		SMS	R14,CPLPATN
;
		LMS	R14,CPTR_PTNO
		TO	R14
		ADD	R14
		GETB
		INC	R14
		TO	R12		 ;(R12) <-- キャラクターアドレス（Ｌ，Ｈ）
		GETBH
		IBT	R13,#BANK CIPCHD ;(R13) <-- キャラクターアドレス（Ｂ）
;
		IBT	R2,#020H	;(R2) <-- ビットマップ座標＿Ｙ
		IBT	R3,#000H	;(R3) <--	 ”	  ＿Ｘ
		LMS	R0,CPTR_ANGL
		TO	R5		;(R5) <-- 角度
		HIB
		IWT	R6,#040H*100H
		ADD	R6
		ADD	R0		;(C) <-- (N)
		BEQ	TRAIN_SUB_0150	;プレイヤー向き変更？ ( no:TRAIN_SUB_0150 )
		NOP
;
		BCC	TRAIN_SUB_0100	;回転角度変更？ ( no:TRAIN_SUB_0100 )
		SUB	R0		;[ IBT R0,#0 ] プレイヤー右向きセット
;
		IBT	R0,#7FH		;回転角度変更
		XOR	R5
		INC	R0
		TO	R5
		LOB
		IBT	R0,#02H		;プレイヤー左向きセット
TRAIN_SUB_0100
		SMS	R0,CPLCMKI	;プレイヤー向きセット
;
TRAIN_SUB_0150
		LMS	R0,CPLFLSH
;;;;		    IWT	    R6,#090H
		IBT	R6,#050H
		SUB	R6
		BMI	TRAIN_SUB_0200	;ダメージ回転？ ( no:TRAIN_SUB_0200 )
		NOP
;
		LMS	R0,CPTR_FLCT
		ADD	R5
		TO	R5
		LOB
TRAIN_SUB_0200
		LMS	R6,CPTR_ZOOM	;(R6) <-- 倍率
		mJSR	R_32_RTZ_32	;キャラクター拡大、縮小、回転（サイズ ３２×３２）
;
		IBT	R0,#BANK PLAYER_DATA
		ROMB			;ＲＯＭアドレス復帰
;
		LMS	R11,RTS4	;[ return address load ]
		mRTS
;
;************************************************************************
;*									*
;*		モグラ							*
;*									*
;************************************************************************
;
MOGURA_MV
		SUB	R0		;[ IBT R0,#0 ]
		SMS	R0,CPLMVSP	;移動スピードクリアー
		SMS	R0,CPMG_CNVKEY	;移動方向変換コントローラー情報（連続）クリアー
;
		LMS	R0,CPLFLSH
;;;;		    IWT	    R1,#090H
		IBT	R1,#050H
		SUB	R1
		BMI	MOGURA_MV_0050	  ;プレイヤーダメージ？ ( no:MOGURA_MV_0050 )
		NOP
;
;-------------- プレイヤーダメージ！！ ----------------------------------
		LMS	R0,CPMG_FLCT
		IBT	R2,#010H
		ADD	R2
		mDJMP_X MOGURA_MV_0400
		SBK			;[ SMS R0,CPMG_FLCT ]
;
;------------------------------------------------------------------------
;-		コントローラー入力					-
;------------------------------------------------------------------------
MOGURA_MV_0050
;
;-------------- 移動キー変換 --------------------------------------------
		LM	R0,CMKEYC1
		MOVE	R3,R0		;(R3) <-- コントローラー情報（連続）
		TO	R7		;(R7) <-- コントローラー情報（連続）
		BIC	#00001111B	;[ AND #0FFF0H ]
		TO	R5		;(R5) <-- コントローラー左右情報（連続）
		AND	#00000011B
		AND	#00001100B
		LSR
		TO	R6		;(R6) <-- コントローラー上下情報（連続）
		LSR
;
		LMS	R0,CPMG_MVMK
		LMS	R1,CPMG_KEYF
		SUB	R1
		AND	#03H
		MOVE	R4,R0		;(R4) <-- 移動キー方向
		LSR
		BCC	MOGURA_MV_0060	;左右⇔上下キー入れ替え？ ( yes:MOGURA_MV_0060 )
		NOP
;
		MOVE	R14,R5		;左右⇔上下キー入れ替え
		MOVE	R5,R6
		MOVE	R6,R14
MOGURA_MV_0060
		IWT	R0,#MG_KEYCNV
		TO	R14
		ADD	R4
		GETB
		TO	R14
		LSR
		BCC	MOGURA_MV_0070	;上⇔下キー入れ替え？ ( no:MOGURA_MV_0070 )
		NOP
;
		WITH	R6		;上⇔下キー入れ替え
		LSR
		ROL
		ADD	R0
		AND	#00000010B
		TO	R6
		OR	R6
MOGURA_MV_0070
		DEC	R14
		BMI	MOGURA_MV_0080	;左⇔右キー入れ替え？ ( no:MOGURA_MV_0080 )
		NOP
;
		WITH	R5		;左⇔右キー入れ替え
		LSR
		ROL
		ADD	R0
		AND	#00000010B
		TO	R5
		OR	R5
MOGURA_MV_0080
		FROM	R6
		ADD	R6
		ADD	R0
		OR	R5
		TO	R1		;(R1) <-- コントローラー情報（連続）
		OR	R7
;
;-------------- 移動キー入力チェック ------------------------------------
		LMS	R2,CPMG_MVMK	;(R2) <-- 移動方向
		IWT	R0,#MG_MVKEY
		ADD	R2
		TO	R14
		ADD	R2
		GETB			;(R0) <-- 左右移動キーデータ
;
		TO	R5		;[ * not break (R0) ]
		AND	R1
		BNE	MOGURA_MV_0090	;移動キー入力？ ( yes:MOGURA_MV_0090 )
		INC	R14
;
;-------------- 移動キー入力無し --------------------------------
		SMS	R2,CPMG_KEYF	;移動キーロックフラグセット
		BRA	MOGURA_MV_0200
		NOP
;
;-------------- 移動キー入力 ------------------------------------
MOGURA_MV_0090
		LMS	R5,CONLFFG
		MOVES	R5,R5
		BNE	MOGURA_MV_0092	;リフトに乗ってる？ ( yes:MOGURA_MV_0092 )
		NOP
;
		TO	R5
		XOR	#00001111B	;上下キーキャンセル
		WITH	R1
		BIC	R5
;
MOGURA_MV_0092
		IWT	R5,#0100H	;(R5) <-- 右側移動スピード
		GETB
		AND	R1
		BEQ	MOGURA_MV_0100	;左側移動キー入力？ ( no:MOGURA_MV_0100 )
		SUB	R0		;[ IBT R0,#0 ] (R0) <-- プレイヤー向き
;
		IWT	R5,#-0100H	;(R5) <-- 左側移動スピード
		IBT	R0,#02H		;(R0) <-- プレイヤー向き
MOGURA_MV_0100
		LMS	R6,CPLJUMP
		DEC	R6
		BPL	MOGURA_MV_0110	;ジャンプ中？ ( yes:MOGURA_MV_0110 )
		INC	R6
;
		SMS	R5,CPLMVSP
MOGURA_MV_0110
		MOVE	R5,R0		;(R5) <-- プレイヤー向き
;
		FROM	R2
		LSR
		BCS	MOGURA_MV_0200	;上下移動？ ( yes:MOGURA_MV_0200 )
		NOP
;
		LM	R0,CPMG_ANGL+1
		IBT	R6,#07FH
		AND	R6
		BNE	MOGURA_MV_0200	;向き変更ＯＫ？ ( no:MOGURA_MV_0200 )
		NOP
;
		SMS	R5,CPLCMKI	;プレイヤー向きセット
;
MOGURA_MV_0200
		SMS	R1,CPMG_CNVKEY	;移動方向変換コントローラー情報（連続）
;
;------------------------------------------------------------------------
;-		回転角計算						-
;------------------------------------------------------------------------
		LMS	R6,CPLMVSP
		DEC	R6
		BPL	MOGURA_MV_0250
		INC	R6
;
		WITH	R6
		NOT
		INC	R6
MOGURA_MV_0250
		IWT	R0,#0400H	;x4.0
		LMULT
		WITH	R4
		HIB
		LOB
		SWAP
		TO	R4		;(R4)  <-- 回転スピード
		OR	R4
		LMS	R10,CPMG_TOAN	;(R10) <-- 目標回転角度
		mJSR	C_ANGL_CALC
;
;------------------------------------------------------------------------
;-		パターンＮｏ．セット					-
;------------------------------------------------------------------------
		MOVES	R6,R6
		BNE	MOGURA_MV_0300	;ＳＴＯＰ？ ( no:MOGURA_MV_0300 )
		SUB	R0		;[ IBT R0,#0 ]
;
		SMS	R0,CPMG_WALK
		SMS	R0,CPMG_PTNO
		BRA	MOGURA_MV_0400
		NOP

MOGURA_MV_0300	EQU	$
		IWT	R0,#080H
		SUB	R6
		BCS	MOGURA_MV_0350
		ADD	R6
;
		MOVE	R0,R6
MOGURA_MV_0350
		LMS	R1,CPMG_WALK
		ADD	R1
		SBK			;[ SMS R0,CPMG_WALK ]
		IWT	R1,#0300H
		SUB	R1
		BCC	MOGURA_MV_0400	;パターン切り替え？ ( no:MOGURA_MV_0400 )
		NOP
;
		SBK			;[ SMS R0,CPMG_WALK ]
		LMS	R0,CPMG_PTNO	;パターン切り替え
		AND	#07H
		INC	R0
		SBK			;[ SMS R0,CPMG_PTNO ]
;
;------------------------------------------------------------------------
;-		モグラ基本ルーチン					-
;------------------------------------------------------------------------
MOGURA_MV_0400
		mJSR	MOGURA_SUB	;モグラ基本ルーチン
;
		SUB	R0		;<<< end >>>
		STOP
		NOP
;
;****************************************************************
;*		モグラ基本ルーチン				*
;****************************************************************
MOGURA_SUB
		SMS	R11,RTS4	;[ return address save ]
;
;-------------- 回転キャラクターセット --------------------------
		IWT	R12,#CIPCHD+2060H  ;(R12) <-- キャラクターアドレス（Ｌ，Ｈ）
		LMS	R0,CPLPATN
		IWT	R13,#Mg02
		SUB	R13
		BEQ	MOGURA_SUB_0100 ;移動？ ( no:MOGURA_SUB_0100 )
		NOP
;
		IWT	R12,#CIPCHD+20C0H  ;(R12) <-- キャラクターアドレス（Ｌ，Ｈ）
		LM	R0,CFRCNT2
		AND	#02H
		BEQ	MOGURA_SUB_0100
		NOP
;
		IWT	R12,#CIPCHD+20E0H  ;(R12) <-- キャラクターアドレス（Ｌ，Ｈ）
MOGURA_SUB_0100
		IBT	R13,#BANK CIPCHD   ;(R13) <-- キャラクターアドレス（Ｂ）
;
		IBT	R2,#020H	;(R2) <-- ビットマップ座標＿Ｙ
		IBT	R3,#000H	;(R3) <--	 ”	  ＿Ｘ
		LMS	R0,CPMG_ANGL
		TO	R5		;(R5) <-- 角度
		HIB
		LMS	R0,CPLFLSH
;;;;		    IWT	    R6,#090H
		IBT	R6,#050H
		SUB	R6
		BMI	MOGURA_SUB_0150 ;ダメージ回転？ ( no:MOGURA_SUB_0150 )
		NOP
;
		LMS	R0,CPMG_FLCT
		ADD	R5
		TO	R5
		LOB
MOGURA_SUB_0150
		LMS	R6,CPMG_PTNO
		DEC	R6
		BMI	MOGURA_SUB_0200 ;止まってる？ ( yes:MOGURA_SUB_0200 )
		INC	R6
;
		IBT	R0,#(100H/8)/2
		ADD	R5
		LSR			;1/(100H/8)
		LSR			;
		LSR			;
		LSR			;
		LSR			;
		FROM	R6
		SUB	R0
		DEC	R0
		TO	R6
		AND	#07H
		INC	R6
MOGURA_SUB_0200
		IWT	R0,#Mg02	;パターンＮｏ．セット
		ADD	R6
		SMS	R0,CPLPATN
;
		IWT	R6,#0100H	;(R6) <-- 倍率
		mJSR	R_32_RTZ_32	;キャラクター拡大、縮小、回転（サイズ ３２×３２）
;
;-------------- 座標計算 ----------------------------------------
		mJSR	MR_CALC		;座標計算
;
;-------------- ＢＧチェック ------------------------------------
		mJSR	MG_BGCK		;モグラＢＧチェック
;
		LMS	R11,RTS4	;[ return address load ]
		mRTS
;
;************************************************************************
;*		モグラＢＧチェック					*
;************************************************************************
MG_BGCK
		SMS	R11,RTS2	;[ return address save ]
;
		LMS	R0,CPMG_TOAN
		TO	R1
		HIB
		LMS	R0,CPMG_ANGL
		LMS	R2,CPLCMKI
		DEC	R2
		BMI	MG_BGCK_0000
		HIB
;
		IBT	R3,#7FH
		XOR	R3
		INC	R0
		LOB
		WITH	R1
		XOR	R3
		INC	R1
		WITH	R1
		LOB
MG_BGCK_0000
		SUB	R1
		BEQ	MG_BGCK_0006	;キャラクター角度ＯＫ？ ( yes:MG_BGCK_0006 )
		NOP
;
;-------------- 目標角度と一致してない ----------------------------------
		LMS	R1,CPLMVSP
		MOVES	R1,R1
		BNE	MG_BGCK_0004	;移動中？ ( yes:MG_BGCK_0004 )
		NOP
;
		LMS	R1,CPMG_MVMK
		MOVES	R1,R1
		BEQ	MG_BGCK_0004	;下移動？ ( yes:MG_BGCK_0004 )
		NOP
;
		IBT	R2,#1
		SWAP
		BPL	MG_BGCK_0002
		SWAP
;
		NOT
		INC	R0
		LOB
		IBT	R2,#-1
MG_BGCK_0002
		IBT	R3,#20H
		SUB	R3
		BCC	MG_BGCK_0004	;移動方向変更？ ( no:MG_BGCK_0004 )
		NOP
;
;-------------- 移動方向変更 ------------------------------------
		FROM	R1
		ADD	R2
		AND	#03H
		SBK			;[ SMS R0,CPMG_MVMK ]
;
MG_BGCK_0004
		IBT	R0,#0FEH	;[ IWT R0,#0FFFEH ] エラー角度セット
		BRA	MG_BGCK_0007
		NOP
;
;-------------- 目標向きと一致 ------------------------------------------
MG_BGCK_0006
		ADD	R1
;
MG_BGCK_0007
		SMS	R0,CPMG_MKANGL	;前方向き回転角度セット
;
		LMS	R9,CPLXPSL	;(R9)  <-- プレイヤーＸ座標
		LMS	R10,CPLYPSL	;(R10) <--	”   Ｙ ”
		IBT	R2,#00		;(R2)  <-- ＢＧ当たりフラグ
		SMS	R2,CPLWATR	;水中当たりフラグクリアー
		SMS	R2,CPLTNEL	;トンネル当たりフラグクリアー
		SMS	R2,CPLHARI	;ダメージＢＧ当たりフラグクリアー
		SMS	R2,CPLBGNO	;歩いている床のＢＧタイプクリアー
		SMS	R2,CPMG_WRK0	;押しカウンタークリアーフラグセット
		IBT	R3,#00		;壊れるＢＧ当たりフラグクリアー
;
		IWT	R14,#PLBGCK_POINT_MG ;(R14) <-- ＢＧチェックポイントデータポインター
;
;------------------------------------------------------------------------
;-		左上サイドチェック					-
;------------------------------------------------------------------------
		IBT	R1,#AL		;(R1) <-- ＢＧ当たりチェックデータ
		IBT	R4,#0FFH	;[ IWT R4,#0FFFFH ] (R4) <-- 壊れるＢＧ当たり角度
		mJSR_X	MG_BGCK_1P_IN	;１点チェック
		HEX	3E		;[ SMS R11,RTS1 ]
;
;------------------------------------------------------------------------
;-		左中心サイドチェック					-
;------------------------------------------------------------------------
		IWT	R4,#080H	;(R4) <-- 壊れるＢＧ当たり角度
		mJSR_X	MG_BGCK_1P	;１点チェック
		HEX	3E		;[ SMS R11,RTS1 ]
;
;------------------------------------------------------------------------
;-		右上サイドチェック					-
;------------------------------------------------------------------------
		IBT	R4,#0FFH	;[ IWT R4,#0FFFFH ] (R4) <-- 壊れるＢＧ当たり角度
		mJSR_X	MG_BGCK_1P	;１点チェック
		HEX	3E		;[ SMS R11,RTS1 ]
;
;------------------------------------------------------------------------
;-		右中心サイドチェック					-
;------------------------------------------------------------------------
		IBT	R4,#00H		;(R4) <-- 壊れるＢＧ当たり角度
		mJSR_X	MG_BGCK_1P	;１点チェック
		HEX	3E		;[ SMS R11,RTS1 ]
;
;------------------------------------------------------------------------
;-		頭チェック						-
;------------------------------------------------------------------------
		IWT	R4,#0C0H	;(R4) <-- 壊れるＢＧ当たり角度
		mJSR_X	MG_BGCK_1P	;１点チェック
		HEX	3E		;[ SMS R11,RTS1 ]
;
		LMS	R0,CPLTNEL	;左、右頭フラグセット
		TO	R5
		LSR
		ROL
		SBK			;[ SMS R0,CPLTNEL ]
;
		FROM	R2
		LSR
		WITH	R2
		ROL
;
		FROM	R3
		LSR
		WITH	R3
		ROL
;
;------------------------------------------------------------------------
;-		左足チェック						-
;------------------------------------------------------------------------
		IBT	R1,#AL+MD	;(R1) <-- ＢＧ当たりチェックデータ
		IBT	R4,#0FFH	;[ IWT R4,#0FFFFH ] (R4) <-- 壊れるＢＧ当たり角度
		mJSR_X	MG_BGCK_1P	;１点チェック
		HEX	3E		;[ SMS R11,RTS1 ]
;
;------------------------------------------------------------------------
;-		中足チェック						-
;------------------------------------------------------------------------
		IBT	R4,#040H	;(R4) <-- 壊れるＢＧ当たり角度
		mJSR_X	MG_BGCK_1P	;１点チェック
		HEX	3E		;[ SMS R11,RTS1 ]
;
;------------------------------------------------------------------------
;-		右足チェック						-
;------------------------------------------------------------------------
		IBT	R4,#0FFH	;[ IWT R4,#0FFFFH ] (R4) <-- 壊れるＢＧ当たり角度
		mJSR_X	MG_BGCK_1P	;１点チェック
		HEX	3E		;[ SMS R11,RTS1 ]
;
		LMS	R0,CONLFFG
		SUB	#0
		BEQ	MG_BGCK_00070	;リフトに乗ってる？ ( no:MG_BGCK_00070 )
		NOP
;
		WITH	R2		;足ＢＧ当たりフラグセット
		OR	#111B
;
MG_BGCK_00070
		LMS	R0,CPMG_MKANGL	;前フレーム前方向き回転角度セット
		SMS	R0,CPMG_MKANGL_OLD
;
		LMS	R0,CPMG_WRK0
		DEC	R0
		BPL	MG_BGCK_0008	;押しカウンタークリアー？ ( no:MG_BGCK_0008 )
		SUB	R0		;[ IBT R0,#0 ]
;
		SMS	R0,CPMG_BRBGCT	;押しカウンタークリアー
MG_BGCK_0008
;
;------------------------------------------------------------------------
;-		座標補正チェック					-
;------------------------------------------------------------------------
		LMS	R7,CPMG_CNVKEY	;(R7) <-- 移動方向変換コントローラー情報（連続）
		IBT	R4,#0		;(R4) <-- 目標角度加算値
;
		LMS	R1,CPMG_MVMK	;(R1) <-- 移動方向
		FROM	R1
		LSR
		BCC	MG_BGCK_0010	;Ｙ座標補正？ ( yes:MG_BGCK_0010 )
		NOP
;
		MOVE	R14,R9		;Ｘ⇔Ｙ入れ替え
		MOVE	R9,R10
		MOVE	R10,R14
MG_BGCK_0010
		IWT	R0,#MG_POSCNV
		TO	R14
		ADD	R1
		GETB
		MOVE	R8,R0
		TO	R14
		LSR
		BCC	MG_BGCK_0020	;Ｙ符号反転？ ( no:MG_BGCK_0020 )
		NOP
;
		WITH	R10		;Ｙ符号反転
		NOT
		INC	R10
MG_BGCK_0020
		DEC	R14
		BMI	MG_BGCK_0030	;Ｘ符号反転？ ( no:MG_BGCK_0030 )
		NOP
;
		WITH	R9		;Ｘ符号反転
		NOT
		INC	R9
MG_BGCK_0030
;
;----------------------------------------------------------------
;-		足補正チェック					-
;----------------------------------------------------------------
		IBT	R12,#0		;(R12) <-- 下側へ自動移動向き変更フラグ
;
		FROM	R1
		MULT	#5*2
		IWT	R14,#MG_FOOTBGP
		TO	R14
		ADD	R14
		GETB
		INC	R14
		GETBH			;(R0) <-- 補正中心点チェックデータ
;
		AND	R2
		BEQ	MG_BGCK_0060	;足補正中心点ＢＧ当たり？ ( no:MG_BGCK_0060 )
		INC	R14
;
;-------------- 足補正中心点ＢＧ当たり --------------------------
		AND	R3
;;;;		    BNE	    MG_BGCK_0040    ;足補正中心点壊れるＢＧ？ ( yes:MG_BGCK_0040 )
		BEQ	MG_BGCK_0050	;足補正中心点壊れるＢＧ？ ( no:MG_BGCK_0040 )
;;;;		    NOP
		SUB	R0
;
;;;;		    GETB
;;;;		    INC	    R14
;;;;		    GETBH		    ;(R0) <-- 足補正サイドチェックデータ
;;;;;
;;;;		    TO	    R6
;;;;		    AND	    R2
;;;;		    SUB	    R6
;;;;		    BEQ	    MG_BGCK_0050    ;足補正両サイドＢＧ当たり？ ( yes:MG_BGCK_0050 )
;;;;		    SUB	    R0		    ;[ IBT R0,#0 ] 移動向き変更無し！！
;;;;;
;;;;		    INC	    R14
;;;;		    INC	    R14
;;;;;
;;;;		    INC	    R14
;;;;		    GETB
;;;;		    INC	    R14
;;;;		    GETBH		    ;(R0) <-- 左側サイドＢＧ当たりフラグ
;;;;;
;;;;		    AND	    R2
;;;;		    BEQ	    MG_BGCK_0050    ;左側サイドＢＧ当たり？ ( no:MG_BGCK_0050 )
;;;;		    INC	    R0		    ;[ IBT R0,#1 ]
;;;;;
;;;;		    IBT	    R0,#-1
;;;;		    BRA	    MG_BGCK_0050
;;;;		    NOP
;
MG_BGCK_0040
		LMS	R0,CPLCMKI
		DEC	R0		;[ -1 or 1 <- 0 or 2 ]
MG_BGCK_0050
		TO	R5		;(R5) <-- 移動向き変更向き
		NOT
		INC	R5
		IBT	R4,#0		;(R4) <-- 角度加算値
		SUB	R0		;[ IBT R0,#0 ] (R0) <-- 足補正値
		mDJMP	MG_BGCK_0200
;
;-------------- 足補正中心点ＢＧ当たって無い --------------------
MG_BGCK_0060
		GETB
		INC	R14
		GETBH			;(R0) <-- 足補正サイドチェックデータ
;
		TO	R6		;(R6) <-- 足補正サイドＢＧ当たり情報
		AND	R2
		BNE	MG_BGCK_0080	;足補正サイドＢＧ当たり？ ( yes:MG_BGCK_0080 )
		INC	R14
;
		GETB
		INC	R14
		GETBH
;
		AND	R2
		BNE	MG_BGCK_0070	;サイドＢＧ当たり？ ( yes:MG_BGCK_0070 )
		NOP
;
		mDJMP	MG_BGCK_0270
;
MG_BGCK_0070
		LMS	R5,CPLCMKI
		DEC	R5		;[ -1 or 1 <- 0 or 2 ] (R5) <-- 移動向き変更向き
;
		FROM	R10
		AND	#0FH
		BEQ	MG_BGCK_0072	;足補正？ ( no:MG_BGCK_0072 )
		NOP
;
		AND	#08H
		BEQ	MG_BGCK_0072
		DEC	R0		;[ IBT R0,#-1 ]
;
		IBT	R0,#1
MG_BGCK_0072
		mDJMP	MG_BGCK_0282
;
;-------------- 足補正サイドＢＧ当たり --------------------------
MG_BGCK_0080
		FROM	R9
		TO	R13		;(R13) <-- 足補正中心点はみ出し値
		AND	#0FH
;
		SUB	R6
		BNE	MG_BGCK_0110	;足補正両サイドＢＧ当たり？ ( no:MG_BGCK_0110 )
		NOP
;
;-------------- 足補正両サイドＢＧ当たり ----------------
		GETB
		INC	R14
		GETBH
;
;;;;		    TO	    R6		    ;(R6) <-- サイドＢＧ当たりフラグ
		AND	R2
;;;;		    SUB	    R6
;;;;		    BEQ	    MG_BGCK_0070    ;サイドＢＧ両当たり？ ( yes:MG_BGCK_0070 )
		BNE	MG_BGCK_0070	;サイドＢＧ両当たり？ ( yes:MG_BGCK_0070 )
		NOP
;
		LMS	R0,CPLCMKI
		DEC	R0
		TO	R5
		NOT
		INC	R5
;
;;;;		    IBT	    R5,#-1
		FROM	R9
		AND	#08H
		BEQ	MG_BGCK_0150
		NOP
;
;;;;		    IBT	    R5,#1	    ;(R5)  <-- 移動向き変更向き
		WITH	R13		;(R13) <-- 足補正中心点はみ出し値
		XOR	#0FH
		BRA	MG_BGCK_0150
		NOP
;
;-------------- 足補正片サイドＢＧ当たり ----------------
MG_BGCK_0110
		GETB
		INC	R14
		GETBH
;
		AND	R2
		BNE	MG_BGCK_0070	;サイドＢＧ当たり？ ( yes:MG_BGCK_0070 )
		INC	R14
;
		GETB
		INC	R14
		GETBH			;(R0) <-- 足補正サイドチェックデータ
;
		IBT	R5,#-1		;(R5) <-- 移動向き変更向き
		AND	R2
		BEQ	MG_BGCK_0120	;左側サイドＢＧ当たり？ ( no:MG_BGCK_0120 )
		INC	R14
;
		IBT	R5,#1		;(R5)  <-- 移動向き変更向き
		WITH	R13		;(R13) <-- 足補正中心点はみ出し値
		XOR	#0FH
MG_BGCK_0120
		FROM	R13
		SUB	#3		;[ 3:ＢＧチェック猶予値 ]
		SUB	#8-3
		BCC	MG_BGCK_0150	;下側へ移動向き変更？ ( no:MG_BGCK_0150 )
		NOP
;
		GETB
		INC	R14
		GETBH			;(R0) <-- 頭両サイドチェックデータ
;
		AND	R2
		BNE	MG_BGCK_0150	;頭両サイドＢＧ当たり？ ( yes:MG_BGCK_0150 )
		NOP
;
		LMS	R0,CPLMVSP
		XOR	R5
		BMI	MG_BGCK_0150	;移動方向ＯＫ？ ( no:MG_BGCK_0150 )
		NOP
;
		INC	R12		;下側へ自動移動向き変更！！
;
MG_BGCK_0150
		IWT	R0,#MG_FOOTHSD
		ADD	R13
		TO	R14
		ADD	R13
		TO	R4		;(R4) <-- 角度加算値
		GETB
		MOVES	R5,R5
		BMI	MG_BGCK_0160
		WITH	R4
;
		NOT
		INC	R4
MG_BGCK_0160
		INC	R14
		GETB			;(R0) <-- 足補正値
;
;-------------- 足補正ＯＫチェック ------------------------------
MG_BGCK_0200
		MOVE	R6,R0		;(R6) <-- 足補正値
		FROM	R10
		AND	#0FH
		TO	R14		;[ * not break (R0) ]
		SUB	#010H-04H	;[ -04H:ＢＧチェック猶予範囲 ]
		BCC	MG_BGCK_0250
		NOP
;
		IBT	R14,#010H
		SUB	R14
MG_BGCK_0250
		SUB	R6
		TO	R14		;[ * not break (R0) ]
		SUB	#08H
		BPL	MG_BGCK_0260	;足補正ＯＫ？ ( no:MG_BGCK_0260 )
		NOP
;
;-------------- 足引っ張り補正チェック ------------------
		LMS	R14,CPLJUMP
		DEC	R14
		BMI	MG_BGCK_0280	;ジャンプ中？ ( no:MG_BGCK_0280 )
		INC	R14
;
		BCC	MG_BGCK_0280	;足補正方向ＯＫ？ ( yes:MG_BGCK_0280 )
		NOP
;
;-------------- 落下！！ --------------------------------
MG_BGCK_0260
;;;;		    WITH    R2		    ;足当たりキャンセル
;;;;		    BIC	    #00000111B
MG_BGCK_0270
		mDJMP	MG_BGCK_0303
;
;-------------- 足補正 ----------------------------------
MG_BGCK_0280
;;;;		    NOT
;;;;		    INC	    R0
		SUB	#0
		BEQ	MG_BGCK_0290
		NOP
;
		IBT	R0,#-1
		BPL	MG_BGCK_0282
		NOP
;
		IBT	R0,#1
MG_BGCK_0282
		TO	R10
		ADD	R10
;
MG_BGCK_0290
		SUB	R0		;[ IBT R0,#0 ]
		SMS	R0,CPLJUMP	;ジャンプフラグ”ＯＦＦ”
;
;-------------- 移動向き下側へ変更チェック --------------
		DEC	R12
		BPL	MG_BGCK_0292	;下側へ自動移動向き変更？ ( yes:MG_BGCK_0292 )
		INC	R12
;
		IWT	R0,#MG_DWMKCHG
		TO	R14
		ADD	R1
		GETB
;
		AND	R7
		BEQ	MG_BGCK_0300	;移動向き下側へ変更？ ( no:MG_BGCK_0300 )
		NOP
;
;-------------- 移動向き下側へ変更 ----------------------
MG_BGCK_0292
		FROM	R1
		ADD	R5
		AND	#03H
		SMS	R0,CPMG_MVMK
		DEC	R12
		BPL	MG_BGCK_0300	;下側へ自動移動向き変更？ ( yes:MG_BGCK_0300 )
		INC	R12
;
		SMS	R0,CPMG_KEYF	;移動キーロックフラグセット
;
;----------------------------------------------------------------
;-		頭補正チェック					-
;----------------------------------------------------------------
MG_BGCK_0300
		FROM	R1
		MULT	#(3*2)+1
		IWT	R14,#MG_HEADBGP
		TO	R14
		ADD	R14
		GETB
		INC	R14
		GETBH			;(R0) <-- 頭チェックデータ
;
		AND	R2
		BEQ	MG_BGCK_0302	;頭中心点ＢＧ当たり？ ( no:MG_BGCK_0302 )
		INC	R14
;
		AND	R3
		BNE	MG_BGCK_0310	;頭中心点壊れるＢＧ？ ( yes:MG_BGCK_0310 )
		TO	R5		;[ IBT R5,#0 ] 移動向き変更無し！！
;					;
		BRA	MG_BGCK_0400	;
		SUB	R0		;

;-------------- 頭中心点ＢＧ当たって無い ------------------------
MG_BGCK_0302
		GETB
		INC	R14
		GETBH			;(R0) <-- 頭サイドチェックデータ
;
		TO	R6		;(R6) <-- 頭サイドＢＧ当たり情報
		AND	R2
		BNE	MG_BGCK_0304	;頭サイドＢＧ当たり？ ( yes:MG_BGCK_0304 )
		INC	R14
;
		INC	R14
		INC	R14
		GETB
;
		LM	R6,CMKEYC2	;(R6) <-- コントローラー情報（トリガー）
		AND	R6
		BEQ	MG_BGCK_0500	;上キー入力？ ( no:MG_BGCK_0500 )
		NOP
;
		WITH	R10		;Ｙ座標離す！！
		SUB	#4
;
;-------------- 落下！！ --------------------------------
MG_BGCK_0303
		SUB	R0		;[ IBT R0,#0 ] 移動方向（下）へ
		SMS	R0,CPMG_MVMK
		SMS	R0,CPMG_KEYF	;移動キーロックフラグセット
		IWT	R0,#P008
		SMS	R0,CPLJUMP	;ジャンプフラグ”ＯＮ”
		mDJMP	MG_BGCK_0500
;
;-------------- 頭サイドＢＧ当たり ------------------------------
MG_BGCK_0304
		SUB	R6
		BNE	MG_BGCK_0360	;頭両サイドＢＧ当たり？ ( no:MG_BGCK_0360 )
		NOP
;
;-------------- 頭補正両サイドＢＧ当たり ----------------
MG_BGCK_0310
		LMS	R5,CPLCMKI	;(R5) <-- 移動向き変更向き
		BRA	MG_BGCK_0400
		DEC	R5		;[ (R5) <-- -1 or 1 ]
;
;-------------- 頭補正片サイドＢＧ当たり ----------------
MG_BGCK_0360
		GETB
		INC	R14
		GETBH			;(R0) <-- 頭サイドチェックデータ
;
		IBT	R5,#1		;(R5) <-- 移動向き変更向き
		AND	R2
		BNE	MG_BGCK_0400	;左側サイドＢＧ当たり？ ( yes:MG_BGCK_0400 )
		NOP
;
		IBT	R5,#-1		;(R5) <-- 移動向き変更向き
;
;-------------- 移動向き上側へ変更チェック --------------
MG_BGCK_0400
		IWT	R0,#MG_UPMKCHG
		TO	R14
		ADD	R1
		GETB
;
		AND	R7
		BEQ	MG_BGCK_0500	;移動向き上側へ変更？ ( no:MG_BGCK_0500 )
		NOP
;
;-------------- 移動向き上側へ変更 ----------------------
		FROM	R1
		ADD	R5
		AND	#03H
		SMS	R0,CPMG_MVMK
		SMS	R0,CPMG_KEYF	;移動キーロックフラグセット
;
;----------------------------------------------------------------
;-		サイド補正チェック				-
;----------------------------------------------------------------
MG_BGCK_0500
		IBT	R0,#8*2
		MULT	R1
		IWT	R14,#MG_SIDEBGP
		TO	R14
		ADD	R14
		GETB
		INC	R14
		GETBH
;
		TO	R12		;(R12) <-- サイドＢＧ当たりフラグ
		AND	R2
		BNE	MG_BGCK_0501	;サイドＢＧ当たり？ ( yes:MG_BGCK_0501 )
		NOP
;
		mDJMP	MG_BGCK_0700
;
;-------------- サイドＢＧ当たり --------------------------------
MG_BGCK_0501
		MOVE	R6,R0		;(R6) <-- サイドＢＧ当たりチェックデータ
		TO	R11		;(R11) <-- 両サイドＢＧ当たりフラグ
		SUB	R12
;
		FROM	R12
		AND	R3		;壊れるＢＧによるＢＧ当たりフラグ反転
		TO	R12		;(R12) <-- 壊れるＢＧによるサイドＢＧ当たりフラグ
		XOR	R12
;
		WITH	R6		;(R6) <-- 壊れるＢＧによる両サイドＢＧ当たりフラグ
		SUB	R12
;
		FROM	R9
		AND	#0FH
		BNE	MG_BGCK_0510	;Ｘ座標補正？ ( yes:MG_BGCK_0510 )
		INC	R14
;
;-------------- Ｘ座標補正無しならどっちサイドＢＧ当たり？ -
		MOVES	R12,R12
		BEQ	MG_BGCK_0522	;壊れるＢＧでサイドＢＧ当たりキャンセル？ ( yes:MG_BGCK_0522 )
		NOP
;
		MOVES	R6,R6
		BNE	MG_BGCK_0502	;両サイドＢＧ当たり？ ( no:MG_BGCK_0502 )
		NOP
;
		WITH	R14
		ADD	#6
		BRA	MG_BGCK_0530
		NOP
;
MG_BGCK_0502
		GETB
		INC	R14
		GETBH			;(R0) <-- 左サイド点ＢＧ当たりチェックデータ
		INC	R14
;
		INC	R14
;
		IBT	R5,#1		;(R5) <-- 移動向き変更向き
		AND	R12
		BNE	MG_BGCK_0530	;左サイドＢＧ当たり？ ( yes:MG_BGCK_0530 )
		INC	R14
;
		IBT	R5,#-1		;(R5) <-- 移動向き変更向き
		BRA	MG_BGCK_0530
		NOP
;
;-------------- Ｘ座標補正 ------------------------------
MG_BGCK_0510
		IBT	R5,#1		;(R5) <-- 補正値
		AND	#08H
		BNE	MG_BGCK_0520	;右へ補正？ ( yes:MG_BGCK_0520 )
		NOP
;
		IBT	R5,#-1		;(R5) <-- 補正値
		INC	R14
		INC	R14
MG_BGCK_0520
		GETB
		INC	R14
		GETBH
;
		AND	R2
;;;;		    BEQ	    MG_BGCK_0700    ;Ｘ座標補正ＯＫ？ ( no:MG_BGCK_0700 )
		BEQ	MG_BGCK_0522	;Ｘ座標補正ＯＫ？ ( no:MG_BGCK_0700 )
		NOP
;
		WITH	R9		;Ｘ座標補正
		ADD	R5
;
		IWT	R14,#MG_SIDEBGP+6 ;足頭中心点へ
;
		AND	R12
		BNE	MG_BGCK_0530	;壊れるＢＧでサイドＢＧ当たりキャンセル？ ( no:MG_BGCK_0530 )
		NOP
;
;-------------- 壊れるＢＧでの引っかけ ------------------
MG_BGCK_0522
		MOVES	R11,R11
		BEQ	MG_BGCK_0526	;両サイドＢＧ当たり？ ( yes:MG_BGCK_0526 )
		NOP
;
		IBT	R0,#8*2
		MULT	R1
		IWT	R14,#MG_SIDEBGP+6
		TO	R14
		ADD	R14
		GETB
		INC	R14
		GETBH
;
		AND	R2
		BNE	MG_BGCK_0700	;足頭中心点ＢＧ当たり？ ( yes:MG_BGCK_0700 )
MG_BGCK_0523
		DEC	R14
;
		DEC	R14		;右サイドＢＧ当たりチェックデータへ
;
		GETBH
		DEC	R14
		GETBL
;
		WITH	R14		;左右キーデータへ
		ADD	#4
;
		IBT	R5,#1		;(R5) <-- Ｘ座標補正値
		AND	R2
		BEQ	MG_BGCK_0524	;右サイドＢＧ当たり？ ( no:MG_BGCK_0524 )
		NOP
;
		IBT	R5,#-1		;(R5) <-- Ｘ座標補正値
		INC	R14
		INC	R14
MG_BGCK_0524
		GETB
		AND	R7
		BNE	MG_BGCK_0700	;左右キー入力？ ( yes:MG_BGCK_0700 )
		NOP
;
		WITH	R14
		ADD	#4
		GETB
		INC	R14
		GETBH			;(R0) <-- 足両サイドＢＧ当たりチェックデータ
;
		AND	R2
		BNE	MG_BGCK_0700	;反対側足サイドＢＧ当たり？ ( yes:MG_BGCK_0700 )
		SUB	R0		;[ IBT R0,#0 ] 移動方向（下）へ
;
;-------------- 落下 ------------------------------------
		WITH	R9		;Ｘ座標補正
		ADD	R5
;
		SMS	R0,CPMG_MVMK
		SMS	R0,CPMG_KEYF	;移動キーロックフラグセット
		IWT	R0,#P008
		SMS	R0,CPLJUMP	;ジャンプフラグ”ＯＮ”
;
MG_BGCK_0526
		BRA	MG_BGCK_0700
		NOP
;
;-------------- 移動向き変更チェック --------------------
MG_BGCK_0530
		GETB
		INC	R14
		GETBH
;
		TO	R13		;(R13) <-- 足頭中心点ＢＧ当たりフラグ
		AND	R2
		BNE	MG_BGCK_0550	;足頭中心点ＢＧ当たり？ ( yes:MG_BGCK_0550 )
		INC	R14
;
;-------------- 引っかけ --------------------------------
		MOVES	R12,R12
		BEQ	MG_BGCK_0560	;両サイドＢＧ当たり？ ( yes:MG_BGCK_0560 )
		NOP
;
;;;;		    BRA	    MG_BGCK_0650
		BRA	MG_BGCK_0523
		DEC	R14
;
;-------------- 上下側へ移動向き変更 --------------------
MG_BGCK_0550
		SUB	R13
		BEQ	MG_BGCK_0700	;足頭中心点ＢＧ両当たり？ ( yes:MG_BGCK_0700 )
		NOP
;
		MOVES	R6,R6
		BNE	MG_BGCK_0570	;両サイドＢＧ当たり？ ( no:MG_BGCK_0570 )
		NOP
;
;-------------- 両サイドＢＧ当たりでキー入力の方向へ ----
MG_BGCK_0560
		IBT	R5,#1		;(R5) <-- 移動向き変更向き
		GETB			;(R0) <-- 左キー
		INC	R14
		AND	R7
		BNE	MG_BGCK_0650	;左へ移動向き変更？ ( yes:MG_BGCK_0650 )
		INC	R14
;
		IBT	R5,#-1		;(R5) <-- 移動向き変更向き
		GETB
		AND	R7
		BNE	MG_BGCK_0650	;右へ移動向き変更？ ( yes:MG_BGCK_0650 )
		NOP
;
		BRA	MG_BGCK_0700
		NOP
;
;-------------- 片サイドＢＧ当たりで移動向き変更チェック -
MG_BGCK_0570
		MOVES	R5,R5
		BPL	MG_BGCK_0600	;左サイド当たり？ ( yes:MG_BGCK_0600 )
		NOP			;[ 左キーチェック ]
;
		INC	R14		;[ 右キーチェック ]
		INC	R14
MG_BGCK_0600
		GETB
		AND	R7
		BEQ	MG_BGCK_0700	;ＢＧ当たりサイド側キー入力？ ( no:MG_BGCK_0700 )
		NOP
;
;-------------- 移動向き上下側へ変更 --------------------
MG_BGCK_0650
		FROM	R1
		ADD	R5
		AND	#03H
		SMS	R0,CPMG_MVMK
;
;----------------------------------------------------------------
;-		補正チェック後処理				-
;----------------------------------------------------------------
MG_BGCK_0700
		FROM	R8
		LSR
		BCC	MG_BGCK_0750	;Ｙ符号反転？ ( no:MG_BGCK_0750 )
		LSR
;
		WITH	R10
		NOT
		INC	R10
MG_BGCK_0750
		BCC	MG_BGCK_0800	;Ｘ符号反転？ ( no:MG_BGCK_0800 )
		NOP
;
		WITH	R9
		NOT
		INC	R9
MG_BGCK_0800
		FROM	R1
		LSR
		BCC	MG_BGCK_0850	;Ｙ座標補正？ ( yes:MG_BGCK_0850 )
		NOP
;
		MOVE	R14,R9		;Ｘ⇔Ｙ入れ替え
		MOVE	R9,R10
		MOVE	R10,R14
;
;-------------- 目標角度セット ----------------------------------
MG_BGCK_0850
		LMS	R0,CPMG_MVMK
		IWT	R14,#MG_MVANGL
		TO	R14
		ADD	R14
		GETB
;
		SMS	R0,CPLANGL	;移動角度セット
		ADD	R4		;目標角度加算値加算
		LOB
;
		LMS	R14,CPLCMKI
		DEC	R14
		BPL	MG_BGCK_0900
		SWAP			;x100H
;
		NOT
		INC	R0
MG_BGCK_0900
		SMS	R0,CPMG_TOAN	;目標角度セット
;
;------------------------------------------------------------------------
;-		ＢＧチェック結果データセット				-
;------------------------------------------------------------------------
		mDJMP	PL_BGCK_0300
;
;
;------------------------------------------------------------------------
;-		１点チェック						-
;-			in :						-
;-				(R1)  <-- ＢＧ当たりチェックデータ	-
;-				(R2)  <-- ＢＧ当たりフラグ		-
;-				(R3)  <-- 壊れるＢＧ当たりフラグ	-
;-				(R4)  <--	  ”	  角度		-
;-				(R9)  <-- プレイヤーＸ座標		-
;-				(R10) <--      ”   Ｙ ”		-
;-				(R11) <-- 復帰アドレス			-
;-				(R14) <-- ＢＧチェックポイント		-
;-						データアドレス		-
;-			out :						-
;-				(R0)  <-- BG unit no. type		-
;-				(R6)  <-- BG unit no.			-
;-				(R7)  <-- BG unit no. type		-
;-				(R8)  <-- BG type status data		-
;-				(CWK0) <- ＢＧチェックＸ座標		-
;-				(CWK1) <-	”    Ｙ ”		-
;-			break :						-
;-				(R5)					-
;-				(R12)					-
;-				(R13)					-
;-			use RAM :					-
;-				(RTS0)					-
;-				(RTS1)					-
;-				(CWKE)					-
;-				(CWKF)					-
;------------------------------------------------------------------------
MG_BGCK_1P_IN
		SMS	R11,RTS1	;[ return address save ]
;
;-------------- ＢＧ当たりチェック --------------------------------------
		mJSR_X	BGUNIT_READ
		CACHE
;
		BRA	MG_BGCK_1P_0010+1
		WITH	R2
;
MG_BGCK_1P
		SMS	R11,RTS1	;[ return address save ]
;
;-------------- ＢＧ当たりチェック --------------------------------------
		mJSR_X	BGUNIT_READ+1
		HEX	3F		;[ ALT3 ( GETBS ) ]
;
MG_BGCK_1P_0010
		WITH	R2		;[ ASL R2 ]
		ADD	R2
;
		AND	R1
		BEQ	MG_BGCK_1P_0020 ;ＢＧ当たり？ ( no:MG_BGCK_1P_0020 )
		NOP
;
		INC	R2
MG_BGCK_1P_0020
;
;------------------------------------------------------------------------
;-		モグラ用特殊ＢＧ当たりチェック				-
;-			in :						-
;-				(R2)  <-- ＢＧ当たりフラグ		-
;-				(R3)  <-- 壊れるＢＧ当たりフラグ	-
;-				(R4)  <--	  ”	  角度		-
;-				(R9)  <-- プレイヤーＸ座標		-
;-				(R10) <--      ”   Ｙ ”		-
;-				(R14) <-- ＢＧチェックポイント		-
;-						データアドレス		-
;-				(RTS1) <- 復帰アドレス			-
;-			out :						-
;-				(R6)  <-- BG unit no.			-
;-				(R7)  <-- BG unit no. type		-
;-				(CWK0) <- ＢＧチェックＸ座標		-
;-				(CWK1) <-	”    Ｙ ”		-
;-			break :						-
;-				(R1)					-
;-				(R5)					-
;-			use RAM :					-
;-				(RTS0)					-
;------------------------------------------------------------------------
MGBG_SP_CK
		mJSR	BG_SP_CHECK	;特殊ＢＧ当たりチェック
;
		WITH	R3		;[ ASL R3 ] 壊れるＢＧ当たりフラグセット
		ADD	R3
;
		IWT	R0,#1111100000000000B
		AND	R7
		HIB
;
		LSR			;[ JSRSUB ]
		INC	R0		;
		TO	R15		;
		ADD	R15		;
		HEX	FF		;
;
		mTWORD	MGBG_SP_CK_010	;[無し]
		mTWORD	MGBG_SP_CK_010	;[雪、草の上]
		mTWORD	MGBG_SP_CK_010	;[せっけん]
		mTWORD	MGBG_SP_CK_010	;[へこみ床]
		mTWORD	MGBG_SP_CK_010	;[ゴム床]
		mTWORD	MGBG_SP_CK_010	;[溶岩]
		mTWORD	COIN_CROSS	;[コイン]
		mTWORD	MGBG_SP_CK_010	;[？ブロック]
		mTWORD	BREAK_CROSS	;[食べれるＢＧ]
		mTWORD	MGBG_SP_CK_010	;[線路]
		mTWORD	FAIL_CROSS	;[当たるとダメージ]
		mTWORD	MGBG_SP_CK_010	;[杭]
		mTWORD	MGBG_SP_CK_010	;[左下階段]
		mTWORD	MGBG_SP_CK_010	;[右下階段]
		mTWORD	MGBG_SP_CK_010	;[乗ったら落ちる床]
		mTWORD	MGBG_SP_CK_010	;[点線ブロック]
		mTWORD	MGBG_SP_CK_010	;[マリオブロック]
		mTWORD	MGBG_SP_CK_010	;[ちくわブロック]
		mTWORD	MGBG_SP_CK_010	;[カウントブロック]
		mTWORD	MGBG_SP_CK_010	;[滝床（ぴちゃぴちゃ）]
		mTWORD	MGBG_SP_CK_010	;[ドカン]
		mTWORD	SUGI_CROSS	;[杉の木]
		mTWORD	CLR_COIN_CROSS	;[点線コイン]
		mTWORD	MGBG_SP_CK_010	;[氷ブロック]
		mTWORD	MGBG_SP_CK_010	;[ぐらぐら岩]
		mTWORD	MGBG_SP_CK_010	;[当たるとダメージ（坂杭）]
		mTWORD	MGBG_SP_CK_010	;[当たるとダメージ（氷柱）]
		mTWORD	MGBG_SP_CK_010	;[当たるとダウン]
;
;----------------------------------------------------------------
;-		食べれるＢＧ					-
;----------------------------------------------------------------
BREAK_CROSS
		INC	R3		;壊れるＢＧ当たりフラグセット
;
		LMS	R0,CPMG_MKANGL
		SUB	R4
		BNE	MGBG_SP_CK_010	;当たり向きＯＫ？ ( no:MGBG_SP_CK_010 )
		ADD	R4
;
		LMS	R5,CPMG_MKANGL_OLD
		SUB	R5
		BNE	MGBG_SP_CK_010	;押しカウンター加算ＯＫ？ ( no:MGBG_SP_CK_010 )
		NOP
;
		LMS	R0,CPLMVSP
		SUB	#0
		BEQ	MGBG_SP_CK_010	;押してる？ ( no:MGBG_SP_CK_010 )
		NOP
;
		LMS	R0,CPMG_WRK0	;押しカウンタークリアーフラグ”ＯＦＦ”
		INC	R0
		SBK			;[ SMS R0,CPMG_WRK0 ]
;
		LMS	R0,CPMG_BRBGCT
;;;;		    IBT	    R5,#08H
		IBT	R5,#02H
		SUB	R5
		BCS	BREAK_CROSS_010 ;ＢＧ壊す？ ( yes:BREAK_CROSS_010 )
		ADD	R5
;
		INC	R0		;押しカウンターＵＰ
		BRA	MGBG_SP_CK_010
		SBK			;[ SMS R0,CPMG_BRBGCT ]
;
;-------------- ＢＧ壊す ----------------------------------------
BREAK_CROSS_010
		DEC	R2		;ＢＧ当たりフラグキャンセル
		DEC	R3		;	     ”
;
		LMS	R0,CPLXSPD
		NOT
		INC	R0
		DIV2
		DIV2
		SMS	R0,CWORKE	;(CWKE) <-- 壊れたＢＧぶっ飛びＸスピード
		IBT	R0,#080H
		SMS	R0,CWORKF	;(CWKF) <-- 壊れたＢＧぶっ飛びＹスピード
;
		SMS	R1,REG1		;(R1) save
;
		mJSR	BRBG0_SET	;壊れたＢＧ効果セット
;
		LMS	R1,REG1		;(R1) load
;
MGBG_SP_CK_010
		LMS	R11,RTS1	;[ return address load ]
		mRTS
;
;
;************************************************************************
;*									*
;*		スキーヨッシー						*
;*									*
;************************************************************************
SKI_MV
;
;------------------------------------------------------------------------
;-		スキー基本ルーチン					-
;------------------------------------------------------------------------
		SUB	R0		;[ IBT R0,#0 ]
		SMS	R0,CPLSPJP	;ジタバタジャンプフラグ”ＯＦＦ”
;
;-------------- 雪効果セットチェックカウンターセット ------------
		LMS	R6,CPLMVSP	;(R6) <-- 移動スピード
		LMS	R0,CPSK_WALK
		ADD	R6
		SBK			;[ SMS R0,CPSK_WALK ]
		HIB
		AND	#07H
		SMS	R0,CPLWALK	;歩きパターンカウンターセット
;
;-------------- 座標計算 ------------------------------------------------
		LMS	R5,CPLJUMP	;(R5) <-- ジャンプフラグ
		DEC	R5
		BPL	SKI_MV_0010	;ジャンプ中？ ( yes:SKI_MV_0010 )
		INC	R5
;
		mJSR	PL_CALC_NOJUMP	;座標計算
		BRA	SKI_MV_0020
		NOP
;
SKI_MV_0010
		SMS	R6,CPLXSPD	;Ｘスピードセット
		LMS	R2,CPLYSPD	;(R2) <-- Ｙスピード
;;;; IF	 JPN | NES ;**** 日本 or NES 対応 [1995/6/30] ****************
		IBT	R0,#028H	;(R0) <-- 重力
;;;; ELSE     ;**** PAL 対応 [1995/7/19] *****************************
;;;;		    IBT	    R0,#028H*5/4    ;(R0) <-- 重力
;;;; ENDIF

		mJSR	PL_CALC_JUMP	;座標計算
;
;-------------- ＢＧチェック --------------------------------------------
SKI_MV_0020
		LMS	R0,CPLJUMP	;ジャンプフラグ待避
		SMS	R0,CPSK_WRK0
		LMS	R0,CPLANGL	;移動角度待避
		SMS	R0,CPSK_WRK1
;
		mJSR	PL_BGCK		;ＢＧチェック
;
;-------------- 自然ジャンプ、転びチェック ------------------------------
		LMS	R0,CPLJUMP
		DEC	R0
		BPL	SKI_MV_0100	;着地？ ( no:SKI_MV_0100 )
		NOP
;
		LMS	R0,CPSK_WRK0
		SUB	#0
		BNE	SKI_MV_0100	;前回着地？ ( no:SKI_MV_0100 )
		NOP
;
		LMS	R0,CPLANGL
		LMS	R1,CPSK_WRK1
		SUB	R1
		SEX
		BMI	SKI_MV_0050	;自然ジャンプチェック？ ( yes:SKI_MV_0050 )
		NOP
;
;-------------- 転びチェック ------------------------------------
		IBT	R1,#020H+1
		SUB	R1
		BCC	SKI_MV_0100	;転ぶ？ ( no:SKI_MV_0100 )
		NOP
;
;-------------- 転んだ！！ ------------------------------
		LMS	R0,CPSK_FAIL
		DEC	R0
		BPL	SKI_MV_0100	;すでに転んでる？ ( yes:SKI_MV_0100 )
		NOP
;
		IWT	R0,#080H	;転びフラグセット
		SBK			;[ SMS R0,CPSK_FAIL ]
;;;;		    IWT	    R0,#080H
		SMS	R0,CPSK_TIM0	;転びタイマーセット
;
		IBT	R0,#03CH	;[♪]
		SMS	R0,CMSOUND3
;
;;;; IF	 JPN | NES ;**** 日本 or NES 対応 [1995/6/30] ****************
		IWT	R1,#0FC00H	;(R1) <-- ジャンプＹスピード
;;;; ELSE     ;**** PAL 対応 [1995/7/19] *****************************
;;;;		    IWT	    R1,#0FB76H	    ;(R1) <-- ジャンプＹスピード
;;;; ENDIF
		BRA	SKI_MV_0060
		SUB	R0		;[ IBT R0,#0 ]
;
;-------------- 自然ジャンプチェック ----------------------------
SKI_MV_0050
		IBT	R1,#020H-1
		ADD	R1
		BPL	SKI_MV_0100	;ジャンプする？ ( no:SKI_MV_0100 )
		SUB	R0		;[ IBT R0,#0 ]
;
;-------------- 自然ジャンプした！！ --------------------
		LM	R1,CPL_ANGL_YSP ;(R1) <-- ジャンプＹスピード
SKI_MV_0060
		SMS	R0,CPSK_ANGL	;回転角度リセット
		SMS	R1,CPLYSPD
		IWT	R0,#P008	;ジャンプフラグ”ＯＮ”
		SMS	R0,CPLJUMP
;
SKI_MV_0100
		LMS	R0,CPSK_FAIL	;(R0) <-- 転びフラグ（雪だるま倍率）
		DEC	R0
		BPL	SKI_MV_0110	;転び中？ ( yes:SKI_MV_0110 )
		INC	R0
;
		mDJMP	SKI_MV_0500
;
;------------------------------------------------------------------------
;-		転び中の処理						-
;------------------------------------------------------------------------
SKI_MV_0110
		LMS	R1,CPLJUMP
		DEC	R1
		BPL	SKI_MV_0200	;ジャンプ中？ ( yes:SKI_MV_0200 )
		INC	R1
;
		ADD	#02H
		SMS	R0,CPSK_FAIL	;転びフラグ（雪だるま倍率）セット
		IWT	R1,#0100H
		SUB	R1
		BCC	SKI_MV_0150	;雪だるま倍率ＭＡＸ？ ( no:SKI_MV_0150 )
		ADD	R1
;
		LMS	R0,CPSK_TIM0
		DEC	R0
		BPL	SKI_MV_0120	;転び終了？ ( no:SKI_MV_0120 )
		NOP
;
;-------------- 転び終了 ------------------------------------------------
		LM	R0,CPLANGL+1
		NOT
		INC	R0
		SMS	R0,CPSK_ANGL	;回転角度リセット
;
		IBT	R0,#0AH		;[♪]
		SMS	R0,CMSOUND3
;
		IWT	R5,#SNOW1	;(R5) <-- 効果Ｎｏ．
		mJSR	M_EXINSR	;効果エリア確保
;
		LMS	R5,CPLXPSL
		mSTW	R5,CEXXPSL,R1	;Ｘ座標セット
		LMS	R0,CPLYPSL
		TO	R5
		ADD	#0CH
		mSTW	R5,CEXYPSL,R1	;Ｙ座標セット
		LMS	R5,CWORKE
		IBT	R5,#07H
		mSTW	R5,CEXWRK0,R1	;初期カウンターセット
		IBT	R5,#04H
		mSTW	R5,CEXTIM0,R1	;初期タイマーセット
;
		BRA	SKI_MV_0150
		SUB	R0		;[ IBT R0,#0 ]
;
SKI_MV_0120
		MOVE	R0,R1
SKI_MV_0150
		SMS	R0,CPSK_FAIL	;雪だるま倍率セット
;
SKI_MV_0200
		IWT	R2,#SK08	;(R2) <-- 転びパターンセット
		IWT	R1,#080H
		SUB	R1
		BEQ	SKI_MV_0400	;雪だるま？ ( no:SKI_MV_0400 )
		ADD	R1
;
;-------------- 雪だるまキャラクターセット ------------------------------
		MOVE	R6,R0		;(R6) <-- 倍率
		IBT	R2,#020H	;(R2) <-- ビットマップ座標＿Ｙ
		IBT	R3,#000H	;(R3) <--	 ”	  ＿Ｘ
		IBT	R8,#010H	;(R8) <-- 中心＿Ｘ
		IBT	R9,#010H	;(R9) <--   ”＿Ｙ
		IWT	R12,#CIPCHD+2020H+1 ;(R12) <-- 雪玉キャラクターアドレス（Ｌ，Ｈ）
		IBT	R13,#BANK CIPCHD    ;(R13) <-- キャラクターアドレス（Ｂ）
;
		mJSR	R_32_ZOOM	;キャラクター拡大、縮小（サイズ ３２×３２）
;
		IBT	R2,#020H	;(R2) <-- ビットマップ座標＿Ｙ
		IBT	R3,#000H	;(R3) <--	 ”	  ＿Ｘ
		LMS	R0,CPLMVSP
		ADD	R0		;x2
		LMS	R5,CPSK_ANGL
		ADD	R5
		SBK			;[ SMS R0,CPSK_ANGL ]
		TO	R5		;(R5) <-- 角度
		HIB
		IWT	R6,#0100H	;(R6) <-- Ｘ倍率
		MOVE	R4,R6		;(R4) <-- Ｙ  ”
		IWT	R12,#CIPCHD+0000H+1 ;(R12) <-- スキー板キャラクターアドレス（Ｌ，Ｈ）
		IBT	R13,#BANK CIPCHD   ;(R13) <-- キャラクターアドレス（Ｂ）
;
		IBT	R1,#00H		;(R1) <-- 重ね塗りモード
		mJSR	R_32_RTZ_32_XY_C ;キャラクター拡大、縮小、回転（サイズ ３２×３２）
;
		SUB	R0		;[ IBT R0,#0 ]
		SMS	R0,CPLCLOR
;
		IWT	R2,#SK00	;パターンＮｏ．セット
SKI_MV_0400
		SMS	R2,CPLPATN
		mDJMP	SKI_MV_0800
;
;------------------------------------------------------------------------
;-		滑り処理						-
;------------------------------------------------------------------------
SKI_MV_0500
;
;-------------- キャラクター回転角度計算 --------------------------------
		LM	R0,CPLANGL+1
		TO	R10		;(R10) <-- 目標回転角度
		NOT
		INC	R10
		LMS	R0,CPLMVSP
		TO	R4
		DIV2
		TO	R4		;(R4) <-- 回転スピード
		SUB	R4
		mJSR	C_ANGL_CALC	;キャラクター回転角度計算
;
;-------------- 回転キャラクターセット ----------------------------------
		LMS	R0,CPLJUMP
		DEC	R0
		BPL	SKI_MV_0540	;ジャンプ中？ ( yes:SKI_MV_0540 )
		SUB	R0		;[ IBT R0,#0 ]
;
;-------------- ジャンプキーチェック ----------------------------
		IWT	R12,#CIPCHD+2000H+1 ;(R12) <-- 着地キャラクターアドレス（Ｌ，Ｈ）
;
		LMS	R0,CMKEYC2L
		LMS	R1,CP_KEY_JUMP	;(R1) <-- ジャンプボタン情報
		AND	R1
		BEQ	SKI_MV_0550	;ジャンプキー入力？ ( no:SKI_MV_0550 )
		NOP
;
;-------------- ジャンプセット --------------------------
		IBT	R0,#049H	;[♪]
		SMS	R0,CMSOUND3
;
		IWT	R0,#0FCC0H	;Ｙスピードセット
		SMS	R0,CPLYSPD
		IWT	R0,#P006
		SMS	R0,CPLJUMP	;ジャンプフラグ”ＯＮ”
;
		IBT	R0,#BANK PLAYER_DATA
		ROMB
;
		BRA	SKI_MV_0550
		NOP
;
SKI_MV_0540
		SMS	R0,CPSK_ANGL	;回転角度リセット
;
		IWT	R12,#CIPCHD+0020H+1 ;(R12) <-- 上昇キャラクターアドレス（Ｌ，Ｈ）
		LMS	R0,CPLYSPD
		IWT	R1,#080H
		SUB	R1
		BMI	SKI_MV_0550	;上昇パターン？ ( yes:SKI_MV_0550 )
		NOP
;
		IWT	R12,#CIPCHD+4040H ;(R12) <-- 下降キャラクターアドレス（Ｌ，Ｈ）
SKI_MV_0550
		IBT	R13,#BANK CIPCHD   ;(R13) <-- キャラクターアドレス（Ｂ）
;
		IBT	R2,#020H	;(R2) <-- ビットマップ座標＿Ｙ
		IBT	R3,#000H	;(R3) <--	 ”	  ＿Ｘ
		LMS	R0,CPSK_ANGL
		TO	R5		;(R5) <-- 角度
		HIB
		IWT	R6,#0100H	;(R6) <-- 倍率
		mJSR	R_32_RTZ_32	;キャラクター拡大、縮小、回転（サイズ ３２×３２）
;
		IWT	R0,#SK00	;パターンＮｏ．セット
		SMS	R0,CPLPATN
;
;-------------- スピードセット ------------------------------------------
SKI_MV_0800
		IBT	R0,#BANK PLAYER_DATA
		ROMB
;
		LMS	R0,CPLJUMP
		DEC	R0
		BMI	SKI_MV_0810	;ジャンプ中？ ( no:SKI_MV_0810 )
		NOP
;
;-------------- ジャンプ中の減速 --------------------------------
		LMS	R0,CPLMVSP
		IWT	R1,#0200H
		SUB	R1
		BMI	SKI_MV_0820	;減速？ ( no:SKI_MV_0820 )
		ADD	R1
;
		SUB	#04H
		BRA	SKI_MV_0820
		SBK			;[ SMS R0,CPLMVSP ]
;
;-------------- 滑ってる時の加減速 ------------------------------
SKI_MV_0810
		IBT	R0,#ON_SKI	;スキー加速タイプセット
		SMS	R0,CPLBGNO
		mJSR	PL_XSP_DOWN
;
SKI_MV_0820
		SUB	R0		;<<< end >>>
		STOP
		NOP
;
;************************************************************************
;*									*
;*		タマゴヨッシー						*
;*									*
;************************************************************************
EGG_MV
;;;;		    mJSR    PL_CALC	    ;座標計算
;;;;;
;;;;		    mJSR    PL_BGCK	    ;ＢＧチェック
;;;;		    mJSR    WATR_CHECK	    ;水中チェック
;;;;;
;;;;;------------------------------------------------------------------------
;;;;;-		    コントローラー入力チェック				    -
;;;;;------------------------------------------------------------------------
;;;;		    mJSR    PL_KEY	    ;コントローラー入力
;;;;;
;;;;		    mJSR    PL_PATN	    ;パターンＮｏ．セット
;;;;;
;;;;		    SUB	    R0		    ;<<< end >>>
;;;;		    STOP
;;;;		    NOP
;
;
;
;
		mEND_NOP
;
		END

