;************************************************************************
;*									*
;*	title name	: "yossy"					*
;*	proccess	: enemy sub.1					*
;*	file name	: ys_enmy4					*
;*									*
;************************************************************************
;
;
		SALL
;
		include		ys_header.inc
		include		ys_unit.h
		include		ys_pld.h
;
		XALL
;
;
;------------------------------------------------------------------------
;-		global symbol						-
;------------------------------------------------------------------------
		GLB	BABY0IN,BABY1IN,BABY2IN,BABY3IN,POKOPIN,ZPACKIN
		GLB	HBLK1IN,HBLK2IN,HBLK3IN,HBLK4IN,PUKU1IN,PUKU2IN
		GLB	PUKU3IN,JBLK0IN,KANI0IN,TELELIN,TELESIN
;
		GLB	BABYMMV,POKOPMV,ZPACKMV,HBLK1MV,HBLK2MV,HBLK3MV
		GLB	HBLK4MV,PUKU1MV,PUKU2MV,PUKU3MV,JBLK0MV,KANI0MV
		GLB	TELELMV,TELESMV
;
		GLB	BABYMNS
;
;------------------------------------------------------------------------
;-		extern symbol						-
;------------------------------------------------------------------------
;
;-------------< sy_rpro >------------------------------------------------
		EXT	JSRSUB
		EXT	CHIPON
;
;-------------< sy_play >------------------------------------------------
		EXT	EBSTAT
		EXT	PFAL,PSTP,PMOV
		EXT	PFLP
;
;-------------< sy_bgsc >------------------------------------------------
		EXT	UNITCHG
		EXT	EDR0,EDR1,EDR2,EDR3,EDR4
;
;-------------< sy_enmy >------------------------------------------------
		EXT	ENEMY,ENINSB
		EXT	ENBGCK,ENBGCK2,ENCLEAR,DISPCK0
		EXT	ENINSR,ENINSR2,EEXCHK,EEYCHK,EEXYCK,ESTATST
		EXT	SCOREST
		EXT	ENMDCK,M7OBSET,XSDOWN,EPCRCK,MUKEOR,XSPEOR,MKEOR2,PLFLST
		EXT	FUSENST
;
		EXT	EINIT,EFAIL,EMOVE,EEATM,ENOSE,EBABL
;
		EXT	COS,SIN
;
		EXT	EATMXS,NOSWT
;
		EXT	ENDATA0,ENDATA1,ENMODE0,ENMODE1,ENMODE2,ENCRDT,ETCADR
;
		EXT	ENOSE,NOSWT
;
		EXT	BABY0,HBLK2,PUKU1
;
;-------------< sy_enmy2 >------------------------------------------------
		EXT	RAD_GETL,BGDATA_MAKEL
;
;-------------< sy_exst >------------------------------------------------
		EXT	EXINSR
;
		EXT	SHIBU,KUMOB
;
;
;-------------< sy_unit >------------------------------------------------
		EXT	UNDTADD,UNDATA,RUTDATA
;------------------------------------------------------------------------
;-		define symbol						-
;------------------------------------------------------------------------
;
;
;
;************************************************************************
;*									*
;*		program start						*
;*									*
;************************************************************************
;
		EXTEND
;
		MEM16
		IDX8
;
		DPAGE	EN0RAM
;
Group_6		GROUP	Enemy4_pro
Enemy4_pro	SECT	REL
;
;************************************************************************
;*		initial ( baby mario type0 )				*
;************************************************************************
;		MEM16
;		IDX8
;BABY0IN		EQU	$		;- baby0in -
;		LDY	BABYNO
;		BNE	BABYMIN0080
;		BRA	BABYMIN0100
;
;************************************************************************
;*		initial ( baby mario type1 )				*
;************************************************************************
;		MEM16
;		IDX8
;BABY1IN		EQU	$		;- baby1in -
;		LDY	BABYNO
;		CPY	#00001H
;		BNE	BABYMIN0080
;		BRA	BABYMIN0100
;
;************************************************************************
;*		initial ( baby mario type2 )				*
;************************************************************************
;		MEM16
;		IDX8
;BABY2IN		EQU	$		;- baby2in -
;		LDY	BABYNO
;		CPY	#00002H
;		BNE	BABYMIN0080
;		BRA	BABYMIN0100
;
;************************************************************************
;*		initial ( baby mario type3 )				*
;************************************************************************
;
		MEM16
		IDX8
BABY0IN		EQU	$		;- baby0in -
BABY1IN		EQU	$		;- baby1in -
BABY2IN		EQU	$		;- baby2in -
BABY3IN		EQU	$		;- baby3in -
		LDA	BABYNO
		SEC
		SBC	ENMYNO,X
		CLC
		ADC	#BABY0
		BEQ	BABYMIN0100

;		LDY	BABYNO
;		CPY	#00003H
;		BEQ	BABYMIN0100

BABYMIN0080	EQU	$
		JSL	>ENCLEAR

		RTL

BABYMIN0100	EQU	$
		LDA	BABYNO		;obN
		ORA	#04000H
		STA	BABYNO

		LDY	#000

		JSR	BABYM_CCHG2	;char. data trans.

		LDY	#000

		LDA	PLXPSL
		SEC
		SBC	ENXPSL,X
		BMI	BABYMIN0200

		INY
		INY

BABYMIN0200	EQU	$
		TYA
		STA	ENMUKI,X	;muki set

		RTL
;
;************************************************************************
;*		move	( baby mario )					*
;************************************************************************
;
;		ENWRK0
;B		ENWRK2		routine mode index
;B		ENWRK3		bound char. pat. index
;		ENWRK4		char. trans. data index
;		ENWRK6		x speed save
;		ENWRK8		y speed save
;
;		ENTIM0		char. pat. change timer
;
BABYM_SUB	EQU	$
		WORD	BABYM_SUB0	;init
		WORD	BABYM_SUB1	;walk
		WORD	BABYM_SUB2	;1st bound
		WORD	BABYM_SUB3	;press baby ( between 1st to 2nd bound )
		WORD	BABYM_SUB4	;2nd bound
		WORD	BABYM_SUB5	;3rd bound
		WORD	BABYM_SUB6	;furimuki
		WORD	BABYM_SUB7	;saraware
;
;
		MEM16
		IDX8
BABYMMV		EQU	$		;- babymmv -
		JSL	>ENMDCK		;mode check

		JSL	>ENBGCK		;BG check

		JSL	>EPCRCK		;vs player check

		TXY
		LDA	<ENWRK2,X
		AND	#000FFH
		ASL	A
		TAX
		JSR	(BABYM_SUB,X)

		JSR	BABYM_CCHG

		RTL
;

;
		MEM16
		IDX8
BABYM_SUB0	EQU	$
		TYX

		LDA	ENCBFG,X
		AND	#00003H
		BNE	BABYM_SUB0800

		LDA	#000C1H		;hai hai timer set
		STA	ENTIM1,X

		LDY	ENMUKI,X
		LDA	!BABYM_XHAI,Y
		STA	ENXSPD,X

		LDA	ENCLOR,X	;change screen priority
		ORA	#00100000B
		STA	ENCLOR,X

		LDA	#00040H
		STA	ENGPOW,X

		LDA	#00602H
		STA	<ENWRK2,X	;routine mode index set

BABYM_SUB0800	EQU	$

		RTS
;
		MEM16
		IDX8
BABYM_SUB1	EQU	$
		TYX

		LDA	ENTIM1,X	;hai hai end ?
		BEQ	BABYM_SUB1100	; yes: BABYM_SUB1100

		LDY	ECRSFG,X	;cross other OBJ ?
		BNE	BABYM_SUB1700	; yes: BABYM_SUB1700

		LDA	ENCBFG,X	;side BG = kabe ?
		BIT	#00003H		;
		BNE	BABYM_SUB1100	; yes: BABYM_SUB1100

		BIT	#00004H		;foot BG = yuka ?
		BNE	BABYM_SUB1200	; yes: BABYM_SUB1200

		LDA	ENSLOP,X	;foot BG = slope ?
		BNE	BABYM_SUB1200	; yes: BABYM_SUB1200

BABYM_SUB1100	EQU	$
		LDA	#000C1H		;hai hai timer set
		STA	ENTIM1,X

		LDA	ENMUKI,X	;muki reverse
		EOR	#00002H		;
		STA	ENMUKI,X	;

		LDA	ENXSPD,X	;x speed reverse
		EOR	#0FFFFH		;
		INC	A		;
		STA	ENXSPD,X	;

BABYM_SUB1200	EQU	$
		LDA	ENTIM0,X	;char. pat. change ?
		BNE	BABYM_SUB1300	;  no: BABYM_SUB1300

		LDA	#00006H		;timer set
		STA	ENTIM0,X

		LDA	ENCHPT,X	;char. pat change
		INC	A		;
		AND	#00003H		;
		STA	ENCHPT,X	;

BABYM_SUB1300	EQU	$

		RTS
;
BABYM_SUB1700	EQU	$
		BPL	BABYM_SUB1800	;cross player ?
					;  no: BABYM_SUB1800

		LDA	#ENOSE		;enemy mode set
		STA	ENMODE,X

		LDA	BABYNO		;baby nose flag set
		ORA	#08000H
		STA	BABYNO
;
BABYM_SUB1800	EQU	$

		RTS
;
		MEM16
		IDX8
BABYM_SUB2	EQU	$
		TYX

		LDA	#00005H
		STA	ENCHPT,X

		LDA	ENCBFG,X	;foot BG = yuka ?
		AND	#00004H		;
		BEQ	BABYM_SUB2500	;  no: BABYM_SUB2500

		LDA	ENYSPD,X	;joushou ?
		BMI	BABYM_SUB2500	; yes: BABYM_SUB2500

		LDA	ENXSPD,X
		BPL	BABYM_SUB2100

		SEC

BABYM_SUB2100	EQU	$
		ROR	A
		STA	ENWRK6,X

		LDA	ENWRK8,X
		BPL	BABYM_SUB2200

		SEC

BABYM_SUB2200	EQU	$
		ROR	A
		STA	ENWRK8,X

		STZ	ENXSPD,X

		LDA	#00003H
		STA	ENTIM1,X

		INC	<ENWRK2,X	;routine mode index inc.

		RTS

BABYM_SUB2500	EQU	$
		LDA	ENYSPD,X
		STA	ENWRK8,X
		CLC
		ADC	#00300H
		CMP	#00600H
		BCS	BABYM_SUB2600

		LDA	#00004H
		STA	ENCHPT,X

BABYM_SUB2600	EQU	$
		LDA	ENCBFG,X	;side BG = kabe ?
		AND	#00003H		;
		BEQ	BABYM_SUB2700	;  no: BABYM_SUB2700

		LDA	ENXSPD,X	;x speed return
		EOR	#0FFFFH		;
		INC	A		;
		STA	ENXSPD,X	;

BABYM_SUB2700	EQU	$

		RTS
;
		MEM16
		IDX8
BABYM_SUB3	EQU	$
		TYX

		LDA	ENTIM1,X	;baby press ?
		BNE	BABYM_SUB3400	; yes: BABYM_SUB3400

		LDA	ENWRK8,X	;jump speed check
		PHA			;
		BMI	BABYM_SUB3200	;
		CMP	#00120H		;
		BCC	BABYM_SUB3200	;

		DEC	<ENWRK2,X
		BRA	BABYM_SUB3300

BABYM_SUB3200	EQU	$
		LDA	#00006H
		STA	ENCHPT,X

		INC	<ENWRK2,X

BABYM_SUB3300	EQU	$
		PLA
		EOR	#0FFFFH
		INC	A
		STA	ENYSPD,X

		LDA	ENWRK6,X
		STA	ENXSPD,X

BABYM_SUB3400	EQU	$

		RTS
;
		MEM16
		IDX8
BABYM_SUB4	EQU	$
		TYX

		LDA	#00007H
		STA	ENCHPT,X

		LDA	ENCBFG,X	;foot BG = yuka ?
		AND	#00004H		;
		BEQ	BABYM_SUB4500	;  no: BABYM_SUB4500

		STZ	ENXSPD,X

		LDA	#00003H
		STA	ENTIM1,X

		LDA	#00008H
		STA	ENCHPT,X

		INC	<ENWRK2,X	;routine mode index inc.

		RTS

BABYM_SUB4500	EQU	$
		LDA	ENYSPD,X
		BMI	BABYM_SUB4600

		CMP	#00120H
		BCC	BABYM_SUB4600

		LDY	#002H		;routine mode index set
		STY	<ENWRK2,X

		BRA	BABYM_SUB4800

BABYM_SUB4600	EQU	$
		LDA	ENYSPD,X
		CLC
		ADC	#00100H
		CMP	#00200H
		BCS	BABYM_SUB4800

		LDA	#00006H
		STA	ENCHPT,X

BABYM_SUB4800	EQU	$
		LDA	ENCBFG,X	;side BG = kabe ?
		AND	#00003H		;
		BEQ	BABYM_SUB4900	;  no: BABYM_SUB4900

		LDA	ENXSPD,X	;x speed return
		EOR	#0FFFFH		;
		INC	A		;
		STA	ENXSPD,X	;

BABYM_SUB4900	EQU	$

		RTS
;
BABYM_BPAT	EQU	$
		HEX	C,B,A,6,8,9,8
;
		MEM16
		IDX8
BABYM_SUB5	EQU	$
		TYX

		LDA	ENTIM1,X
		BNE	BABYM_SUB5800

		LDA	#00003H
		STA	ENTIM1,X

		DEC	<ENWRK3,X
		LDY	<ENWRK3,X
		BNE	BABYM_SUB5100

		LDA	#00080H		;U^C}[ * 
		STA	ENTIM2,X
		LDA	#00048H		;vs vC[`FbNbN^C}[Zbg
		STA	ENTIM1,X

		LDA	#00020H		;U^C}[Zbg
		STA	ENTIM0,X

		LDA	#0000DH
		STA	ENCHPT,X

		INC	<ENWRK2,X

		RTS

BABYM_SUB5100	EQU	$
		LDA	!BABYM_BPAT,Y
		AND	#000FFH
		STA	ENCHPT,X

BABYM_SUB5800	EQU	$

		RTS
;
BABYM_XHAI	EQU	$
		WORD	0FFC0H,00040H
;
		MEM16
		IDX8
BABYM_SUB6	EQU	$
		TYX

		LDA	ENTIM2,X
		BNE	BABYM_SUB6800

		LDA	ENMUKI,X
		EOR	#00002H
		STA	ENMUKI,X
		TAY
		LDA	!BABYM_XHAI,Y
		STA	ENXSPD,X

		LDA	#000C1H		;hai hai timer set
		STA	ENTIM1,X

		LDY	#001H
		STY	<ENWRK2,X

		RTS

BABYM_SUB6800	EQU	$
		LDA	ENTIM0,X	;char. pat. change ?
		BNE	BABYM_SUB6900	;  no: BABYM_SUB6900

		LDA	#00020H		;timer set
		STA	ENTIM0,X

		LDA	ENCHPT,X	;D or E
		EOR	#00003H
		STA	ENCHPT,X

BABYM_SUB6900	EQU	$
		LDA	ENTIM1,X	;player search ?
		BNE	BABYM_SUB6A00	;  no: BABYM_SUB6A00

		LDY	ECRSFG,X	;vs player check
		JMP	BABYM_SUB1700	;

BABYM_SUB6A00	EQU	$

		RTS
;
		MEM16
		IDX8
BABYM_SUB7	EQU	$
		TYX

		LDA	ENTIM0,X
		BNE	BEBYM_SUB7300

		LDA	#0000DH
		STA	ENCHPT,X

		LDA	EPXMUK,X
		CMP	ENMUKI,X
		BEQ	BABYM_SUB7100

		INC	ENCHPT,X

BABYM_SUB7100	EQU	$
		LDY	<ENWRK0,X
		LDA	ENMODE,Y	;dorobo- mode = eat ?
		CMP	#EEATM		;
		BEQ	BABYM_SUB7180	; yes: BABYM_SUB7180

		LDA	ENXPSL,Y	;x range ok ?
		SEC			;  ( vs dorobo- )
		SBC	ENXPSL,X	;
		CLC			;
		ADC	#00010H		;
		CMP	#00020H		;
		BCS	BABYM_SUB7180	;  no: BABYM_SUB7180

		LDA	ENYPSL,Y	;y range ok ?
		SEC			;  ( vs dorobo- )
		SBC	ENYPSL,X	;
		CLC			;
		ADC	#00018H		;
		CMP	#00030H		;
		BCC	BABYM_SUB7200	; yes: BABYM_SUB7200

BABYM_SUB7180	EQU	$
		LDA	#00602H		;ENWRK2 <-- routine mode index set
		STA	<ENWRK2,X	;ENWRK3 <-- bound char. pat. index set

BABYM_SUB7200	EQU	$

		RTS

BEBYM_SUB7300	EQU	$
		LDA	ENTIM1,X	;char. pat. change ?
		BNE	BABYM_SUB7400	;  no: BABYM_SUB7400

		LDA	#00010H		;timer set
		STA	ENTIM1,X

		LDA	ENCHPT,X
		EOR	#00003H
		STA	ENCHPT,X

BABYM_SUB7400	EQU	$

		RTS
;
BABYCHNO	EQU	$
		HEX	0,1,0,0,2,2,2,2,2,2,2,2,2,2,2
;
BABYCADR	EQU	$
		WORD	002E0H*20H+CHR50,002E2H*20H+CHR50,002E6H*20H+CHR50,00000H
		WORD	002E0H*20H+CHR50,002E2H*20H+CHR50,002E8H*20H+CHR50,00000H
		WORD	002E0H*20H+CHR50,002E2H*20H+CHR50,002E4H*20H+CHR50,00000H
;
		MEM16
		IDX8
BABYM_CCHG	EQU	$
		LDY	ENCHPT,X	;same char. ?
		LDA	!BABYCHNO,Y	;
		AND	#000FFH		;
		CMP	<ENWRK4,X	;
		BEQ	BABYM_CCHG0800	; yes: BABYM_CCHG0800

		STA	<ENWRK4,X

		ASL	A
		ASL	A
		ASL	A
		TAY

BABYM_CCHG2	EQU	$
		LDA	#00003H
		STA	<EWORK0

		PHX

		LDX	#000H

BABYM_CCHG0100	EQU	$
		LDA	!BABYCADR,Y
		STA	BABYCH0,X

		CLC
		ADC	#00200H
		STA	BABYCH0+2,X

		INX
		INX
		INX
		INX

		INY
		INY

		DEC	<EWORK0
		BNE	BABYM_CCHG0100

		INC	BABYTRF		;char. trans. flag set

		PLX

BABYM_CCHG0800	EQU	$

		RTS
;
;
;************************************************************************
;*		nose	( baby mario )					*
;************************************************************************
;
BABYM_XSPD	EQU	$
		WORD	0FE80H,00180H
;
		MEM16
		IDX8
BABYMNS		EQU	$		;- babymns -
;
		LDY	<ENWRK1,X	;vC[wĂ ?
		BEQ	BABYMNS0050	; yes: BABYMNS0050

		LDY	<ENWRK0,X	;h{Ecd`c ?
		LDA	ENMODE,Y	;
		BEQ	BABYMNS0080	;  no: BABYMNS0080

BABYMNS0050	EQU	$
		LDA	PLFLSH		;player get damage ?
		CMP	#07FH		;
		BNE	BABYMNS0100 	;  no: BABYMNS0100

BABYMNS0080	EQU	$
		LDA	#EMOVE		;enemy mode set
		STA	ENMODE,X

		LDA	BABYNO		;baby nose flag clear
		AND	#07FFFH
		STA	BABYNO

		LDA	#0FC00H		;jump speed set
		STA	ENYSPD,X

		LDY	PLCMKI		;x speed set
		LDA	!BABYM_XSPD,Y	;
		STA	ENXSPD,X	;

		LDA	#00602H		;ENWRK2 <-- routine mode index set
		STA	<ENWRK2,X	;ENWRK3 <-- bound char. pat. index set

		STZ	<ENWRK0,X	;

		RTL

BABYMNS0100	EQU	$
		LDA	#0000EH
		STA	ENCHPT,X

		LDA	PLJUMP		;player jump ?
		BNE	BABYMNS0300	; yes: BABYMNS0300

		LDA	PLXSPD		;player high speed ?
		CLC			;
		ADC	#00270H		;
		CMP	#004E0H		;
		BCS	BABYMNS0300	; yes: BABYMNS0300

		DEC	ENCHPT,X	;D

BABYMNS0300	EQU	$

		JSR	BABYM_CCHG

		RTL
;
;
;************************************************************************
;*		intial	( poko peko )					*
;************************************************************************
;
		MEM16
		IDX8
POKOPIN		EQU	$
		LDA	#00400H		;zoom value set
		STA	<ENWRK0,X

		LDA	ENYPSL,X
		STA	<ENWRK4,X

		RTL
;
;
;
;************************************************************************
;*		move	( poko peko )					*
;************************************************************************
;
;
;
;		ENWRK0	g嗦 ( SUB0 ) ^őό` (SUB1- )
;		ENWRK2	ROUTINE MODE INDEX
;		ENWRK4	ό`
;		ENWRK6	x@onrD( SUB0 ) ^ό`Zf[^ ( SUB1- )
;		ENWRK8	ւ݉񐔃tbO
;
;		ENCONT
;
;		ENTIM0	w@l`w@roddc`FW^C}[
;
;
;
POKOP_SUB	EQU	$
		WORD	POKOP_SUB0		;INIT
		WORD	POKOP_SUB1		;NORMAL
		WORD	POKOP_SUB2		;ON PLAYER
;
		MEM16
		IDX8
POKOPMV		EQU	$
;-------------- move --------------------------------------------
		JSL	>ENMDCK		;mode check
;
		TXY
		LDA	<ENWRK2,X
		ASL	A
		TAX
		JSR	(POKOP_SUB,X)
;
		INC	OBM7WF		;mode 7 OBJ chara DMA "ON"
;
		LDX	<ENINDX

		RTL
;
		MEM16
		IDX8
POKOP_SUB0	EQU	$
		TYX

		LDA	ENWRK0,X	;gI ?
		CMP	#00100H		;
		BNE	POKOP_SUB0200	;  no: POKOP_SUB0200

		LDA	ENCLOR,X	;J[Agr[gZbg
		EOR	#0000EH		;
		STA	ENCLOR,X	;

		LDA	#00004H		;f@onvZbg
		STA	ENGPOW,X	;

		STZ	<ENWRK4,X	;ωNA

		LDA	#00040H
		STA	ENTIM0,X
		LSR	A
;		LDA	#00020H
		STA	ENXMAX,X
		LDA	#00004H
		STA	ENXPOW,X

		INC	<ENWRK2,X	;routine mode index inc.

		RTS

POKOP_SUB0200	EQU	$
		LDA	<ENWRK0,X	;g嗦vZ
		SEC			;
		SBC	#00010H		;
		STA	<ENWRK0,X	;
;
		LDA	<ENWRK0,X	;(R6) <-- g嗦Zbg
		STA	>R6		;
		LDA	#005		;(R1) <-- CMODE
		STA	>R1		;
		LDA	#BANK CIPCHD+6000H
		STA	>OCHRADR+2
		LDA	#CIPCHD+6000H
		STA	>R3

		LDA	ENTROB,X
		TAX
		LDA	>TROBJ_PLOT_X,X		;]GAw@onrDZbg
		STA	>OBUFXPS	;
		LDA	>TROBJ_PLOT_Y,X		;]GAx@onrDZbg
		STA	>OBUFYPS	;
;
;		ldy	#004h
;		sty	2100h
;
		M_CHIP	POKO_PEKO0
;
;		ldy	#00fh
;		sty	2100h

		LDX	<ENINDX

		LDA	<ENWRK4,X	;x@onrD␳
		SEC			;
		SBC	CCWORK1F	;
		STA	ENYPSL,X	;

POKOP_SUB0300	EQU	$

		RTS
;
		MEM16
		IDX8
POKOP_SUB1	EQU	$
		TYX

		LDA	PLJUMP		;vC[
		BEQ	POKOP_SUB1500	;  no: POKOP_SUB1500
					;	;vC[Wv
					;	;  no: POKOP_SUB1500
					;
		LDA	PLYSPD		;	;vC[㏸
		BMI	POKOP_SUB1500	;	; yes: POKOP_SUB1500
					;
		LDA	EPWIDX,X	;	;`FbNnj ?
		CLC			;	;
		ADC	#00010H		;	;
		CMP	#00020H		;	;
		BCS	POKOP_SUB1500	;	;  no: POKOP_SUB1500
					;
		LDA	EPWIDY,X	;	;c`FbNnj ?
		CMP	#00018H		;	;
		BCS	POKOP_SUB1500	;	;  no: POKOP_SUB1500

		LDA	PLYSPD		;őό`Zbg
		LSR	A		;
		LSR	A		;
		STA	<ENWRK0,X	;

		CLC			;x@roddcZbg
		ADC	ENYSPD,X	;
		STA	ENYSPD,X	;

		LDA	#0FF80H		;f@l`wZbg
		STA	ENGMAX,X	;

		LDA	PLXSPD
		BPL	POKOP_SUB1300

		SEC
		ROR	A
		BRA	POKOP_SUB1400

POKOP_SUB1300	EQU	$
		LSR	A

POKOP_SUB1400	EQU	$
		CLC
		ADC	ENXSPD,X
		STA	ENXSPD,X

		STZ	ENXMAX,X

		LDA	#00010H		;ό`Zf[^Zbg
		STA	ENWRK6,X	;

		STZ	ENWRK8,X	;ւ݉񐔃tbONA

		INC	ONLFFG		;player on flag set

		STZ	PLYSPD		;vC[x@roddcNA

		INC	<ENWRK2,X	;routine index mode inc.

		RTS

POKOP_SUB1500	EQU	$
		LDA	<ENWRK4,X	;ό`
		BEQ	POKOP_SUB1800	;
					;
		SEC			;
		SBC	#00040H		;
		BPL	POKOP_SUB1700	;
					;
		LDA	#00000H		;
					;
POKOP_SUB1700	EQU	$		;
		STA	<ENWRK4,X	;

POKOP_SUB1800	EQU	$
		LDA	ENTIM0,X
		BNE	POKOP_SUB1900

		LDA	#00040H
		STA	ENTIM0,X

		LDA	ENXMAX,X
		EOR	#0FFFFH
		INC	A
		STA	ENXMAX,X

POKOP_SUB1900	EQU	$

		JSR	POKOP_SET1

		RTS
;
POKOP_XPSREV	EQU	$
		WORD	00040H,0FFC0H
;
POKOP_XPSREV2	EQU	$
POKOP_XMAXSPD	EQU	$
		WORD	00020H,0FFE0H
;
POKOP_XSPD	EQU	$
		WORD	00080H,0FF80H
;
		MEM16
		IDX8
POKOP_SUB2	EQU	$
		TYX

		LDA	<ENWRK0,X	;ό`Zbg
		CMP	<ENWRK4,X	;
		BMI	POKOP_SUB2100	;
					;
		LDA	<ENWRK4,X	;
		CLC			;
		ADC	ENWRK6,X	;
		BRA	POKOP_SUB2300	;
					;
POKOP_SUB2100	EQU	$		;
		LDA	ENWRK8,X	;	;ŏ̂Ԃ ?
		BNE	POKOP_SUB2200	;	;  no: POKOP_SUB2200
					;
		INC	ENWRK8,X	;	;
					;
		LDA	ENWRK6,X	;	;ό`Zf[^Zbg
		LSR	A		;	;
		STA	ENWRK6,X	;	;
					;
		LDA	#00070H		;	;őό`Zbg
		STA	<ENWRK0,X	;	;
					;
POKOP_SUB2200	EQU	$		;
		LDA	<ENWRK4,X	;
		SEC			;
		SBC	ENWRK6,X	;
					;
POKOP_SUB2300	EQU	$		;
		STA	<ENWRK4,X	;

		LDA	PLBGCR		;vC[nʂɒ ?
		BNE	POKOP_SUB2400	; yes: POKOP_SUB2400

		LDA	PLJUMP		;Wv ?
		BNE	POKOP_SUB2400	; yes: POKOP_SUB2400

		LDA	EPWIDX,X	;^}̏ɂ ?
		CLC			;
		ADC	#00010H		;
		CMP	#00020H		;
		BCS	POKOP_SUB2400	; yes: POKOP_SUB2400

		LDA	EPWIDY,X	;^}̏ɂ (^}̗Xs[h̕]TĂ)?
		CMP	#0001CH		;
		BCC	POKOP_SUB2500	; yes: POKOP_SUB2500

POKOP_SUB2400	EQU	$
		LDA	#0FF60H		;f@l`wZbg
		STA	ENGMAX,X	;

		LDA	#00060H
		STA	ENTIM0,X

		LDY	#000

		LDA	PLXSPD
		BNE	POKOP_SUB2410

		LDA	PLCMKI
		BNE	POKOP_SUB2450
		BRA	POKOP_SUB2420

POKOP_SUB2410	EQU	$
		BMI	POKOP_SUB2450

POKOP_SUB2420	EQU	$
		INY
		INY

POKOP_SUB2450	EQU	$
		LDA	!POKOP_XMAXSPD,Y
		STA	ENXMAX,X

		LDA	!POKOP_XSPD,Y
		STA	ENXSPD,X

		DEC	<ENWRK2,X	;routine mode index dec.

		BRA	POKOP_SUB2800

POKOP_SUB2500	EQU	$
		INC	ONLFFG		;

		STZ	PLYSPD		;vC[x@roddcZbg

		LDA	KEYC1		;L[͂ ?
		AND	#00000011B	;
		BNE	POKOP_SUB2700	; yes: POKOP_SUB2700

		LDA	ENWRK8,X	;vC[̈ʒu␳ ?
		BEQ	POKOP_SUB2550	; yes: POKOP_SUB2550

		LDA	<ENWRK4,X
		CMP	#00068H
		BPL	POKOP_SUB2700

POKOP_SUB2550	EQU	$
		LDY	#000

		LDA	PLXPSL		;vC[̂w@onrD␳ ?
		CMP	ENXPSL,X	;
		BEQ	POKOP_SUB2700	;  no: POKOP_SUB2700
		BMI	POKOP_SUB2600	;Eɕ␳ ?
					; yes: POKOP_SUB2600

		INY			;vC[̂w@roddc␳
		INY			;
					;
POKOP_SUB2600	EQU	$		;
		LDA	!POKOP_XPSREV,Y	;
		LDY	#000		;
		CMP	PLXSPD		;
		BPL	POKOP_SUB2650	;
					;
		INY			;
		INY			;
					;
POKOP_SUB2650	EQU	$		;
		LDA	PLXSPD		;
		CLC			;
		ADC	!POKOP_XPSREV2,Y
		STA	PLXSPD		;

POKOP_SUB2700	EQU	$
		LDA	<ENWRK4,X	;vC[̂x@onrD␳
		LSR	A		;
		LSR	A		;
		LSR	A		;
		LSR	A		;
		CLC			;
		ADC	ENYPSL,X	;
		SEC			;
		SBC	#00023H		;
		STA	PLYPSL		;

POKOP_SUB2800	EQU	$
		LDA	PLXPSL
		CLC
		ADC	ENMOVX,X
		STA	PLXPSL

		JSR	POKOP_SET1

		RTS
;
		MEM16
		IDX8
POKOP_SET1	EQU	$
;
		LDA	<ENWRK4,X
		STA	>R4
;
;		ldy	#004h
;		sty	2100h
;
		M_CHIP	POKO_PEKO1
;
;		ldy	#00fh
;		sty	2100h

		RTS
;
;************************************************************************
;*		intial	( zoom pack'n )					*
;************************************************************************
;
		MEM16
		IDX8
ZPACKIN		EQU	$
		LDA	#00001H
		STA	ENCHPT,X

		RTL
;
;
;
;************************************************************************
;*		move	( zoom pack'n )					*
;************************************************************************
;
;
;
;		ENWRK0	ItZbgw@onrD
;B		ENWRK2	ROUTINE MODE INDEX
;B		ENWRK3	]Lio[
;		ENWRK4	ItZbgx@onrD
;		ENWRK6	{	(100H=1.0 200H=0.5)
;		ENWRK8	]p	(0-100H)
;
;		ENCONT	Lp^[io[
;
;		ENTIM0	Lp^[`FW^C}[
;
;
ZPACK_SUB	EQU	$
		WORD	ZPACK_SUB0		;NORMAL
		WORD	ZPACK_SUB1		;ZOOM
;
ZPACK_REV	EQU	$
		WORD	00010H,0FFF0H
;
		MEM16
		IDX8
ZPACKMV		EQU	$
;-------------- move --------------------------------------------
		LDA	ENCHPT,X		;ahf ?
		BNE	ZPACKMV0000		;  no: ZPACKMV0000

		LDY	ENMUKI,X		;̈ʒu
		LDA	!ZPACK_REV,Y		;
		STA	<EWORK0			;
						;
		I16				;
		LDY	ENOAML,X		;
		LDA	<ENWRK0,X		;
		CLC				;
		ADC	ENDSXL,X		;
		STA	SOAM_DX+0,Y		;
		STA	SOAM_DX+0+16,Y		;
		CLC				;
		ADC	<EWORK0			;
		STA	SOAM_DX+0+8,Y		;
		STA	SOAM_DX+0+24,Y		;
						;
		LDA	<ENWRK4,X		;
		CLC				;
		ADC	ENDSYL,X		;
		STA	SOAM_DX+2,Y		;
		STA	SOAM_DX+2+8,Y		;
		CLC				;
		ADC	#00010H			;
		STA	SOAM_DX+2+16,Y		;
		STA	SOAM_DX+2+24,Y		;
		I8

ZPACKMV0000	EQU	$
		JSL	>ENMDCK			;mode check
;
ZPACKMV0100	EQU	$
		TXY
		LDA	<ENWRK2,X
		ASL	A
		TAX
		JSR	(ZPACK_SUB,X)
;
		RTL
;
		MEM16
		IDX8
ZPACK_SUB0	EQU	$
		TYX

		LDA	EPWIDX,X		;vC[߂ÂĂ ?
		CLC				;
		ADC	#00050H			;
		CMP	#000A0H			;
		BCS	ZPACK_SUB0800		;
						;
		LDA	EPWIDY,X		;
		CLC				;
		ADC	#00050H			;
		CMP	#000A0H			;
		BCS	ZPACK_SUB0800		;  no: ZPACK_SUB0800

		JSL	TROBJ_SERCH_4x4		;]GAmۂł ?
		BCC	ZPACK_SUB0800		;  no: ZPACK_SUB0800

		LDA	#00300H			;{Zbg
		STA	ENWRK6,X		;

		INC	<ENWRK2,X		;routine mode index inc.

ZPACK_SUB0800	EQU	$

		RTS
;
ZPACK_XRANGE		EQU	$
			WORD	00014H,00008H
ZPACK_XRANGE2		EQU	$
			WORD	00028H,00010H
;	
		MEM16
		IDX8
ZPACK_SUB1	EQU	$
		TYX

		TROBJ_CLEAR_4
		BEQ	ZPACK_SUB1000

		RTS

ZPACK_SUB1000	EQU	$
		STZ	ENCHPT,X

		LDA	EPWIDX,X		;vC[|ꂽ ?
		CLC				;
		ADC	#00050H			;
		CMP	#000A0H			;
		BCS	ZPACK_SUB1100		;
						;
		LDA	EPWIDY,X		;
		CLC				;
		ADC	#00050H			;
		CMP	#000A0H			;
		BCC	ZPACK_SUB1200		;  no: ZPACK_SUB1200

ZPACK_SUB1100	EQU	$			;
		LDA	ENWRK6,X		;{vZZbg
		CLC				;	;kI ?
		ADC	#00010H			;	;
		CMP	#00300H			;	;
		BCC	ZPACK_SUB1400		;	;  no: ZPACK_SUB1400
						;
		JSL	>TROBJ_CLEAR		;	;use area cansel
						;
		LDA	#00001H			;	;Lp^[io[Zbg
		STA	ENCHPT,X		;	;
						;	;
		DEC	<ENWRK2,X		;	;routine mode index set
						;
		LDA	#00300H			;
		STA	ENWRK6,X		;
						;
		RTS				;
						;
ZPACK_SUB1200	EQU	$			;
		LDA	ENWRK6,X		;	;gI ?
		SEC				;	;
		SBC	#00080H			;	;
		CMP	#00100H			;	;
		BCS	ZPACK_SUB1400		;	;  no: ZPACK_SUB1400
						;
		LDA	#00100H			;
						;
ZPACK_SUB1400	EQU	$			;
		STA	ENWRK6,X		;

		LDA	EPWIDX,X		;]pZbg
		STA	<EWORK6			;
						;
		LDA	EPWIDY,X		;
		STA	<EWORK8			;
						;
		JSL	>RAD_GETL		;
		I8				;
						;
		LDA	<EWORKA			;
		SEC				;
		SBC	#00080H			;
		CMP	#00100H			;
		BCS	ZPACK_SUB1550		;
						;
		STZ	ENMUKI,X		;
						;
		LDA	<EWORKA			;
		CLC				;
		ADC	#00100H			;
		BRA	ZPACK_SUB1580		;
						;
ZPACK_SUB1550	EQU	$			;
		LDA	#00002H			;
		STA	ENMUKI,X		;
						;
		LDA	<EWORKA			;
		EOR	#0FFFFH			;
		INC	A			;
						;
ZPACK_SUB1580   EQU     $			;
		AND	#001FEH			;
		STA	ENWRK6,X		;

						;]AhXoNZbg
						;(R12) <-- ]AhXZbg
						;(R13) <-- ]oNZbg
                LDY	<ENWRK3,X       	;	;Ăp^[ ?
		BEQ	ZPACK_SUB1600		;	; yes: ZPACK_SUB1600
						;
		LDA	#CIPCHD+60C0H+001H	;chara data address set
		BRA	ZPACK_SUB1700		;
						;
ZPACK_SUB1600	EQU	$			;
		LDA	#CIPCHD+60E0H+001H	;chara data address set
						;
ZPACK_SUB1700	EQU	$			;
		STA	>R12			;
		LDA	#BANK CIPCHD+60C0H+001H	;chara data bank set
		STA	>R13			;

ZPACK_SUB1800	EQU	$
		LDA	ENWRK6,X		;(R5) <- ]pZbg
		LSR	A			;
		STA	>R5			;

		LDA	ENWRK6,X		;(R4) <- {Zbg
		STA	>R4			;

		LDA	#00600H			;(R6) <-- a
		STA	>R6

		LDA	ENMUKI,X
		STA	>R7

		LDA	ENTROB,X
		TAX
		LDA	>TROBJ_PLOT_X,X		;(R3) <- rbg}bvWQwZbg
		STA	>R3			;
		LDA	>TROBJ_PLOT_Y,X		;(R2) <- rbg}bvWQxZbg
		STA	>R2			;

;
;-------------- OBJ mode 7 set ----------------------------------
;
;		ldy	#004h
;		sty	2100h
;
;		M_CHIP	C_32_ROTZOM
		M_CHIP	ZPACK_SET
;
;		ldy	#00fh
;		sty	2100h

		LDX	<ENINDX

		INC	OBM7WF			;mode 7 OBJ chara DMA "ON"

		LDA	CCWORK11		;ItZbgw@onrD
		STA	<ENWRK0,X		;

		LDA	CCWORK10		;ItZbgx@onrD
		STA	<ENWRK4,X		;

ZPACK_SUB1850	EQU	$
		LDA	ENTIM0,X		;Lp^[`FW ?
		BNE	ZPACK_SUB1900		;  no: ZPACK_SUB1900

		LDA	#00008H			;Lp^[`FW^C}[Zbg
		STA	ENTIM0,X		;

		LDA	<ENWRK3,X		;Lp^[`FWtbO`FW
		EOR	#00001H			;
		STA	<ENWRK3,X		;

ZPACK_SUB1900	EQU	$
		LDY	#000			;vC[`FbN
		LDA	PLCMKI			;	;vC[ƐڐG ?
		EOR	ENMUKI,X		;	;
		BEQ	ZPACK_SUB1980		;	;
						;	;
		INY				;	;
		INY				;	;
						;	;
ZPACK_SUB1980	EQU	$			;	;
		LDA	ENXPSL,X		;	;
		SEC				;	;
		SBC	PLXPSL			;	;
		CLC				;	;
		ADC	<ENWRK0,X		;	;
		CLC				;	;
		ADC	!ZPACK_XRANGE,Y		;	;
		CMP	!ZPACK_XRANGE2,Y	;	;
		BCS	ZPACK_SUB1A00		;	;
						;	;
		LDA	ENYPSL,X		;	;
		SEC				;	;
		SBC	PLYPSL			;	;
		CLC				;	;
		ADC	<ENWRK4,X		;	;
		CLC				;	;
		ADC	#00014H			;	;
		CMP	#00028H			;	;
		BCS	ZPACK_SUB1A00		;	;  no: ZPACK_SUB1A00
						;
		LDA	PLFLSH			;	;vC[̓_[W󂯂Ă ?
		BNE	ZPACK_SUB1A00		;	; yes: ZPACK_SUB1A00
						;
		LDA	#PFAL			;
		STA	PLMODE			;
						;
		LDA	#00090H			;
		STA	PLFLSH			;

ZPACK_SUB1A00	EQU	$

		RTS
;
;************************************************************************
;*		intial	( ? block )					*
;************************************************************************
;
;
		MEM16
		IDX8
HBLK1IN		EQU	$
		JSL	>TROBJ_SERCH_4x4
		BCS	HBLK1IN0200

		JSL	>ENCLEAR

		RTL

HBLK1IN0200	EQU	$
		LDA	#00100H		;{Zbg
		STA	ENWRK6,X	;

		STZ	ENMUKI,X

		LDY	#000		;]xtbOZbg
		LDA	EPWIDX,X	;
		BPL	HBLK1IN0300	;
					;
		INY			;
		INY			;
					;
HBLK1IN0300	EQU	$		;
		TYA			;
		STA	<ENWRK0,X	;

		LDA	#0FC00H		;x@roddcZbg
		STA	ENYSPD,X

		LDA	#00040H		;f@onvZbg
		STA	ENGPOW,X

		LDA	ENYPSL,X
		STA	<ENWRK4,X

		JSR	HBLK_BG_CLR

		RTL
;
;
;
;************************************************************************
;*		move	( ? block )					*
;************************************************************************
;
;
;
;		ENWRK0	]xtbO
;		ENWRK2	ROUTINE MODE INDEX
;		ENWRK4	WvGhx@onrD
;		ENWRK6	]p
;		ENWRK8	{
;
;		ENCONT	
;
;		ENTIM0	
;
;
HBLK1_ROT	EQU	$
;		WORD	0FFFEH,00002H		;1/1
		WORD	0FFF8H,00008H		;1/4
;		WORD	0FFF9H,00007H
;
HBLK1_ZOOM	EQU	$
;		WORD	0FFF6H,0000AH		;1/1
		WORD	0FFD8H,00028H		;1/4
;
		MEM16
		IDX8
HBLK1MV		EQU	$
;-------------- move --------------------------------------------
		JSL	>ENMDCK		;mode check
;
		LDA	<ENWRK4,X	;ɖ߂ ?
		CMP	ENYPSL,X	;
		BCS	HBLK1MV0200	;  no: HBLK1MV0200

		STA	ENYPSL,X

		LDA	#00100H		;{NA
		STA	ENWRK8,X

		STZ	ENWRK6,X	;]pNA
		STZ	ENYSPD,X
		STZ	ENGPOW,X

		LDA	ENCHPT,X
		AND	#000FFH
		ASL	A
		TAY
		LDA	#00000		;use area cancel !!
		STA	!M7OBUS,Y

		JSR	HBLK_BG_SET

		JSL	>ENCLEAR

		RTL

HBLK1MV0200	EQU	$
		LDA	FRCNT
		AND	#00003H
		CMP	ENCHPT,X
		BEQ	HBLK1MV0300
		JMP	HBLK1MV0800

HBLK1MV0300	EQU	$
		LDY	#000		;{vZ
		LDA	ENYSPD,X	;
		BMI	HBLK1MV0400	;
					;
		INY			;
		INY			;
					;
HBLK1MV0400	EQU	$		;
		LDA	ENWRK8,X	;
		CLC			;
		ADC	!HBLK1_ZOOM,Y	;
		CMP	#000A0H		;
		BCS	HBLK1MV0500	;
					;
		LDA	#000A0H		;
		BRA	HBLK1MV0600	;
					;
HBLK1MV0500	EQU	$		;
		CMP	#00100H		;
		BCC	HBLK1MV0600	;
					;
		LDA	#00100H		;
					;
HBLK1MV0600	EQU	$		;
		STA	ENWRK8,X	;

		TYA			;]pvZ
		CLC			;
		ADC	<ENWRK0,X	;
		AND	#00002H		;
		TAY			;
		LDA	!HBLK1_ROT,Y	;
		CLC			;
		ADC	ENWRK6,X	;
		AND	#001FEH		;
		STA	ENWRK6,X	;

		LDA	#CIPCHD+7040H+000H	;chara data address set
		STA	>R12		;
		LDA	#BANK CIPCHD+7040H+000H	;chara data bank set
		STA	>R13		;

		LDA	ENWRK6,X	;(R5) <- ]pZbg
		LSR	A		;
		STA	>R5		;

		LDA	ENWRK8,X	;(R6) <- {Zbg
		STA	>R6		;

		LDA	ENTROB,X
		TAX
		LDA	>TROBJ_PLOT_X-1,X
;		LDA	#00020H		;(R3) <- rbg}bvWQwZbg
		STA	>R3		;
		LDA	>TROBJ_PLOT_Y-1,X
;		LDA	#00000H		;(R2) <- rbg}bvWQxZbg
		STA	>R2		;
;
;-------------- OBJ mode 7 set ----------------------------------
;
;		ldy	#004h
;		sty	2100h
;
;		M_CHIP	C_32_ROTZOM
		M_CHIP	C_32_ROTZOM_16
;
;		ldy	#00fh
;		sty	2100h

		LDX	<ENINDX

		INC	OBM7WF		;mode 7 OBJ chara DMA "ON"

HBLK1MV0800	EQU	$
;
		RTL
;
;
;
;
;************************************************************************
;*		intial	( ? block2 )					*
;************************************************************************
;
;
HBLK234_YSPD	EQU	$
		WORD	0FC00H
		WORD	0FC00H
		WORD	0FEC0H
;		WORD	0FF00H		;another ver. (4)
;
HBLK234_GPOW	EQU	$
		WORD	00040H
		WORD	00040H
		WORD	00012H
;
HBLK234_Z_INIT	EQU	$
		WORD	00100H
		WORD	00100H
		WORD	00100H
;		WORD	00144H		;another ver. (4)
;
		MEM16
		IDX8
HBLK2IN		EQU	$
HBLK3IN		EQU	$
HBLK4IN		EQU	$
		JSL	>TROBJ_SERCH_4x4
		BCS	HBLK234IN0200

		JSL	>ENCLEAR

		RTL

HBLK234IN0200	EQU	$
		STZ	ENMUKI,X

		LDA	ENMYNO,X
		SEC
		SBC	#HBLK2
		ASL	A
		STA	<ENWRK0,X

		TAY
		LDA	!HBLK234_Z_INIT,Y	;{Zbg
		STA	ENWRK6,X		;

		LDA	!HBLK234_YSPD,Y		;x@roddcZbg
		STA	ENYSPD,X		;

		LDA	!HBLK234_GPOW,Y		;f@onvZbg
		STA	ENGPOW,X		;

		LDA	ENYPSL,X
		STA	<ENWRK4,X

		JSR	HBLK_BG_CLR

		RTL
;
;
;
;************************************************************************
;*		move	( ? block2 )					*
;************************************************************************
;
;
;
;		ENWRK0	ENEMY TYPE
;		ENWRK2	ROUTINE MODE INDEX
;		ENWRK4	WvGhx@onrD
;		ENWRK6	{
;		ENWRK8	
;
;		ENCONT
;
;		ENTIM0	
;
;
;
HBLK234_ADDR	EQU	$
		WORD	CIPCHD+7040H+000
		WORD	CIPCHD+4080H+001
		WORD	CIPCHD+7040H+000
HBLK234_ZCMP	EQU	$
		WORD	00078H,00100H
		WORD	000A0H,00100H
		WORD	00078H,00140H
;		WORD	000A8H,00144H		;another ver. (4)
HBLK234_ZOOM	EQU	$
		WORD	0FFD8H,00028H
		WORD	0FFD8H,00028H
		WORD	0FFA0H,00060H
;
		MEM16
		IDX8
HBLK2MV		EQU	$
HBLK3MV		EQU	$
HBLK4MV		EQU	$
;-------------- move --------------------------------------------
		JSL	>ENMDCK		;mode check
;
		LDA	ENYPSL,X		;ɖ߂ ?
		CMP	<ENWRK4,X		;
		BCC	HBLK234MV0200		;  no: HBLK234MV0200

		LDA	#00100H			;{bN
		STA	ENWRK6,X		;

		STZ	ENYSPD,X		;x@roddcNA
		STZ	ENGPOW,X		;f@onvNA

		LDA	ENCHPT,X
		AND	#000FFH
		ASL	A
		TAY
		LDA	#00000		;use area cancel !!
		STA	!M7OBUS,Y

		JSR	HBLK_BG_SET

		JSL	>ENCLEAR

		RTL

HBLK234MV0200	EQU	$
		LDA	FRCNT
		AND	#00003H
		CMP	ENCHPT,X
		BEQ	HBLK234MV0300
		JMP	HBLK234MV0A00

HBLK234MV0300	EQU	$
		LDA	<ENWRK0,X
		PHA
		ASL	A
		TAY
		LDA	ENYSPD,X
		BMI	HBLK234MV0400

		INY
		INY

HBLK234MV0400	EQU	$
		LDA	!HBLK234_ZOOM,Y
		STA	<EWORK0

		PLA
		ASL	A
		TAY
		LDA	ENWRK6,X
		CLC
		ADC	<EWORK0
		CMP	!HBLK234_ZCMP,Y
		BCS	HBLK234MV0500

		LDA	!HBLK234_ZCMP,Y
		BRA	HBLK234MV0600

HBLK234MV0500	EQU	$
		CMP	!HBLK234_ZCMP+2,Y
		BCC	HBLK234MV0600

		LDA	!HBLK234_ZCMP+2,Y

HBLK234MV0600	EQU	$
		STA	ENWRK6,X

		LDY	<ENWRK0,X
		BNE	HBLK234MV0700

		LDA	ENWRK6,X		;(R6) <- w{Zbg
		STA	>R6			;(R11) <- x{Zbg
		BRA	HBLK234MV0900

HBLK234MV0700	EQU	$
		CPY	#002
		BNE	HBLK234MV0800

		LDA	#00144H			;(R6) <- w{Zbg
		STA	>R6			;
		LDA	ENWRK6,X		;(R11) <- x{Zbg
		BRA	HBLK234MV0900

HBLK234MV0800	EQU	$
		LDA	ENWRK6,X		;(R6) <- w{Zbg
		STA	>R6			;
;		LDA	#00144H			;FOR ANOTHER VERSION
		LDA	#00100H			;(R11) <- x{Zbg
		SEC				;
		SBC	ENWRK6,X		;
;		ASL	A			;FOR ANOTHER VERSION
		CLC				;
		ADC	#00100H			;

HBLK234MV0900	EQU	$
		STA	>R11

		LDA	#BANK CIPCHD+4080H+001	;chara data bank set
		STA	>R13
		LDA	!HBLK234_ADDR,Y		;chara data address set
		STA	>R12

		LDA	ENTROB,X
		TAX
		LDA	TROBJ_PLOT_X-1,X	;]GAw@onrDZbg
		STA	>R3			;
		LDA	TROBJ_PLOT_Y-1,X	;]GAx@onrDZbg
		STA	>R2			;

		CPY	#002
		BNE	HBLK234MV0980

		LDA	#00010H			;(R8) <- Sw@onrD
		STA	>R8			;
		LDA	#00010H			;(R9) <- Sx@onrD
		STA	>R9			;

;		ldy	#004h
;		sty	2100h
;
		M_CHIP	C_32_ZOOM_XY
;
;		ldy	#00fh
;		sty	2100h
		BRA	HBLK234MV0990

HBLK234MV0980	EQU	$
		LDA	#00008H			;(R8) <- Sw@onrD
		STA	>R8			;
		LDA	#00008H			;(R9) <- Sx@onrD
		STA	>R9			;

;		ldy	#004h
;		sty	2100h
;
		M_CHIP	C_32_ZOOM_XY_16
;
;		ldy	#00fh
;		sty	2100h

HBLK234MV0990	EQU	$
		LDX	<ENINDX

		INC	OBM7WF			;mode 7 OBJ chara DMA "ON"

HBLK234MV0A00	EQU	$
;
		RTL
;
		MEM16
		IDX8
HBLK_BG_CLR	EQU	$
		LDA	#UT0000			;Xy[XNAjbgf[^
		BRA	HBLK_BG0050

HBLK_BG_SET	EQU	$
		LDA	#UT5F00			;HubNjbgf[^

HBLK_BG0050	EQU	$
		PHA				;
		JSL	>BGDATA_MAKEL		;

		LDA	ENXPSL,X		;Vram addr. calc.
		PHA				;
		AND	#000F0H			;
		LSR	A			;
		LSR	A			;
		LSR	A			;
		STA	<EWORK0			;
						;
		PLA				;
		AND	#00100H			;
		BEQ	HBLK_BG0100		;
						;
		LDA	<EWORK0			;
		CLC				;
		ADC	#00400H			;
		STA	<EWORK0			;
						;
HBLK_BG0100	EQU	$			;
		LDA	ENYPSL,X		;
		AND	#000F0H			;
		ASL	A			;
		ASL	A			;
		ORA	<EWORK0			;
		STA	<EWORK0			;

		LDA	#00002H			;data v sum. set
		STA	<EWORKC

		I16				;first data offset load
		PHX				;
		LDA	>VRAMD+0		;
		TAX				;

HBLK_BG0200	EQU	$
		LDA	<EWORK0
		STA	>VRAMD+2,X

		LDA	#(000<<13)+(4-1)
		STA	>VRAMD+4,X

		LDA	<EWORK4
		STA	>VRAMD+6,X

		LDA	<EWORK6
		STA	>VRAMD+8,X

		TXA				;next data offset addr. calc.
		CLC				;
		ADC	#008			;
		TAX				;

		DEC	<EWORKC
		BEQ	HBLK_BG0300

		LDA	<EWORK0
		CLC
		ADC	#00020H
		STA	<EWORK0

		LDA	<EWORK8
		STA	<EWORK4
		LDA	<EWORKA
		STA	<EWORK6

		BRA	HBLK_BG0200

HBLK_BG0300	EQU	$
		LDA	#0FFFFH			;end data code set
		STA	>VRAMD+2,X

		TXA				;last data offset addr. set
		STA	>VRAMD+0

		PLX

		LDA	ENYPSL,X		;BG (check) data buffer clear addr. calc.
		PHA				;
		AND	#0FF00H			;
		LSR	A			;
		LSR	A			;
		LSR	A			;
		LSR	A			;
		STA	<EWORK0			;
		LDA	ENXPSL,X		;
		PHA				;
		AND	#0FF00H			;
		XBA				;
		ORA	<EWORK0			;
		TAX				;
						;
		PLA				;
		AND	#000F0H			;
		LSR	A			;
		LSR	A			;
		LSR	A			;
		STA	<EWORK0			;
						;
		PLA				;
		AND	#000F0H			;
		ASL	A			;
		ORA	<EWORK0			;
		STA	<EWORK0			;
						;
		LDA	>UNBUFAD-1,X		;
		AND	#03F00H			;
		ASL	A			;
		CLC				;
		ADC	<EWORK0			;
		STA	<EWORK0			;
		TAX				;

		PLA				;BG (check) data set
		STA	>BGUNIT,X		;

		I8
		LDX	<ENINDX

		RTS
;
;
;
;************************************************************************
;*		initial	( puku puku1 )					*
;************************************************************************
;
		MEM16
		IDX8
PUKU3IN		EQU	$
		LDA	<RANDM0
		AND	#00002H
		STA	<EWORK0

PUKU1IN		EQU	$
PUKU2IN		EQU	$
		LDA	ENMYNO,X		;enemy type set
		SEC				;
		SBC	#PUKU1			;
		ASL	A			;
		CMP	#00004H			;
		BCC	PUKUPIN0100		;
						;
		CLC				;
		ADC	<EWORK0			;
						;
PUKUPIN0100	EQU	$			;
		TAY				;
		STY	<ENWRK3,X		;

		LDA	ENYPSL,X		;end pos. check data set
		STA	<ENWRK0,X		;

		RTL
;
;
;
;************************************************************************
;*		move	( puku puku1 )					*
;************************************************************************
;
;
;
;		ENWRK0	END POS. CHECK DATA
;B		ENWRK2	ROUTINE MODE INDEX
;B		ENWRK3	ENEMY TYPE
;		ENWRK4	Y SPEED REVERSE CHECK
;		ENWRK6	{
;		ENWRK8	]p
;
;		ENCONT
;
;		ENTIM0	FLIP TIMER ( 1 ) / WAIT TIMER ( 0 )
;
;
PUKU1_SUB	EQU	$
		WORD	PUKU1_SUB0		;search
		WORD	PUKU1_SUB1		;jump
;
		MEM16
		IDX8
PUKU1MV		EQU	$
PUKU2MV		EQU	$
PUKU3MV		EQU	$
;-------------- move --------------------------------------------
		JSL	>ENMDCK		;mode check
;
;------ not display clear check -------------------------
		JSL	>DISPCK0	;display pos check
		BCC	PUKU1MV0100	;     "      ok ? ( yes:PUKU1MV0100 )

		LDA	<ENWRK2,X
		AND	#00001H
		BEQ	PUKU1MV0000

;------ not display clear set !! ----------------
		LDA	ENCHPT,X
		AND	#000FFH
		ASL	A
		TAY
		LDA	#00000		;use area cancel !!
		STA	!M7OBUS,Y

PUKU1MV0000	EQU	$
		JSL	>ENCLEAR
;
		RTL
;
PUKU1MV0100	EQU	$
		TXY
		LDA	<ENWRK2,X
		ASL	A
		TAX
		JSR	(PUKU1_SUB,X)

		RTL
;
PUKU_BAI	EQU	$
		WORD	00200H,000E0H
PUKU_COL	EQU	$
		WORD	00000H,00020H
PUKU_XSPD	EQU	$
		WORD	0FF00H,00100H
PUKU_YUSN	EQU	$
		WORD	00006H,00003H
;
		MEM16
		IDX8
PUKU1_SUB0	EQU	$
		TYX

		LDA	ENTIM0,X		;T[`EFCg ?
		BNE	PUKU1_SUB0040		; yes: PUKU1_SUB0040

		LDA	EPWIDX,X		;vC[߂ÂĂ ?
		CLC				;
		ADC	#00050H			;
		CMP	#000A0H			;
		BCC	PUKU1_SUB0080		; yes: PUKU1_SUB0080

PUKU1_SUB0040	EQU	$
		JMP	PUKU1_SUB0900

PUKU1_SUB0080	EQU	$
		LDY	#(4-1)*2
PUKU1_SUB0100	EQU	$
		LDA	M7OBUS,Y	;OBJ mode7 area nothing ?
		BEQ	PUKU1_SUB0200	;  no: PUKU1_SUB0200

		DEY
		DEY
		BPL	PUKU1_SUB0100

		JSL	>ENCLEAR

		RTS

PUKU1_SUB0200	EQU	$
		TYA			;use area set
		LSR	A
		STA	ENCHPT,X
		INC	A
		STA	M7OBUS,Y

		LDA	#0FD00H			;x@roddcZbg
		STA	ENYSPD,X		;
		STA	<ENWRK4,X		;

		LDA	#00010H			;f@onvZbg
		STA	ENGPOW,X		;

		LDY	<ENWRK3,X		;ȂȂ߂Ƃ ?
		CPY	#004H			;
		BCC	PUKU1_SUB0800		;  no: PUKU1_SUB0800

		LDY	#000			;w@roddcZbg
		LDA	EPWIDX,X		;
		BPL	PUKU1_SUB0700		;
						;
		INY				;
		INY				;
						;
PUKU1_SUB0700	EQU	$			;
		LDA	!PUKU_XSPD,Y		;
		STA	ENXSPD,X		;
		TYA				;LZbg
		STA	ENMUKI,X		;

PUKU1_SUB0800	EQU	$
		LDA	<ENWRK3,X		;{Zbg
		AND	#00002H			;
		TAY				;
		LDA	!PUKU_BAI,Y		;
;		LDA	#00200H			;
		STA	ENWRK6,X		;

		LDA	ENCLOR,X		;J[Agr[gZbg
		AND	#0FFDFH			;
		ORA	!PUKU_COL,Y		;
		STA	ENCLOR,X		;

		LDA	ENYUSN,X		;naiDf[^Zbg
		AND	#0FF00H			;
		ORA	!PUKU_YUSN,Y		;
		STA	ENYUSN,X		;

		LDA	#00008H			;tbv^C}[Zbg
		STA	ENTIM0,X		;

		LDA	ENXSPD,X		;]pvZ
		LDY	ENMUKI,X		;
		BEQ	PUKU1_SUB0880		;
						;
		EOR	#0FFFFH			;
		INC	A			;
						;
PUKU1_SUB0880	EQU	$			;
		PHA				;
		AND	#08000H			;
		STA	<EWORK0			;
		PLA				;
		LSR	A			;
		ORA	<EWORK0			;
		STA	<EWORK6			;
		LDA	ENYSPD,X		;
		PHA				;
		AND	#08000H			;
		STA	<EWORK0			;
		PLA				;
		LSR	A			;
		ORA	<EWORK0			;
		STA	<EWORK8			;
		JSL	>RAD_GETL		;
		I8				;
		LDA	<EWORKA			;
		STA	ENWRK8,X		;

		INC	<ENWRK2,X	;routine mode index inc.

PUKU1_SUB0900	EQU	$

		RTS
;
PUKU_BAI_CAL	EQU	$
;		WORD	0FFFCH,00004H		;1/1
		WORD	0FFF0H,00010H		;1/4
PUKU_CHAR	EQU	$
		WORD	CIPCHD+20A0H+001
		WORD	CIPCHD+20C0H+001
		WORD	CIPCHD+2080H+001
		WORD	CIPCHD+2080H+001
PUKU_ANGADD	EQU	$
		WORD	0FFF4H,0000CH,0FFF4H
;
		MEM16
		IDX8
PUKU1_SUB1	EQU	$
		TYX

		LDA	ENCLOR,X
		AND	#00020H
		BEQ	PUKU1_SUB1000

		JSL	>EPCRCK

PUKU1_SUB1000	EQU	$
		LDA	ENYSPD,X
		EOR	<ENWRK4,X
		BPL	PUKU1_SUB1080

		LDA	ENYSPD,X
		STA	<ENWRK4,X

		LDA	ENCLOR,X
		EOR	#00100000B
		STA	ENCLOR,X

		LDA	ENYUSN,X
		EOR	#00005H
		STA	ENYUSN,X

PUKU1_SUB1080	EQU	$
		LDA	FRCNT
		AND	#00003H
		CMP	ENCHPT,X
		BEQ	PUKU1_SUB1100
		JMP	PUKU1_SUB1800

PUKU1_SUB1100	EQU	$
		LDA	<ENWRK3,X		;{vZ
		AND	#00002H			;
		TAY				;
		LDA	ENWRK6,X		;
		CLC				;
		ADC	!PUKU_BAI_CAL,Y		;
		CMP	#00100H			;
		BCS	PUKU1_SUB1180		;
						;
		LDA	#00100H			;
						;
PUKU1_SUB1180	EQU	$			;
		STA	ENWRK6,X		;

		LDY	<ENWRK3,X

		LDA	#BANK CIPCHD+20A0H+001		;chara data bank set
		STA	>R13
		LDA	!PUKU_CHAR,Y			;chara data address set
		STA	>R12

		LDA	#00020H			;]GAw@onrDZbg
		STA	>R3			;
		LDA	#00000H			;]GAx@onrDZbg
		STA	>R2			;

		LDA	ENWRK6,X		;(R6) <- {Zbg
		STA	>R6			;

		CPY	#004H			;ȂȂ߂Ƃ ?
		BCS	PUKU1_SUB1200		; yes: PUKU1_SUB1200

		LDA	#00010H			;(R8) <- Sw@onrD
		STA	>R8			;
		LDA	#00010H			;(R9) <- Sx@onrD
		STA	>R9			;

;		ldy	#004h
;		sty	2100h
;
		M_CHIP	C_32_ZOOM
;
;		ldy	#00fh
;		sty	2100h

		BRA	PUKU1_SUB1700

PUKU1_SUB1200	EQU	$
		LDA	ENXSPD,X		;]pvZ
		LDY	ENMUKI,X		;
		BEQ	PUKU1_SUB1300		;
						;
		EOR	#0FFFFH			;
		INC	A			;
						;
PUKU1_SUB1300	EQU	$			;
		PHA				;
		AND	#08000H			;
		STA	<EWORK0			;
		PLA				;
		LSR	A			;
		ORA	<EWORK0			;
		STA	<EWORK6			;
		LDA	ENYSPD,X		;
		PHA				;
		AND	#08000H			;
		STA	<EWORK0			;
		PLA				;
		LSR	A			;
		ORA	<EWORK0			;
		STA	<EWORK8			;
		JSL	>RAD_GETL		;
		I8				;
						;
		LDY	#000			;
		LDA	ENYSPD,X		;
		BMI	PUKU1_SUB1380		;
						;
		INY				;
		INY				;
						;
PUKU1_SUB1380	EQU	$			;
		LDA	ENWRK8,X		;
		CMP	<EWORKA			;
		BEQ	PUKU1_SUB1500		;
		BPL	PUKU1_SUB1400		;
						;
		INY				;
		INY				;
						;
PUKU1_SUB1400	EQU	$			;
		CLC				;
		ADC	!PUKU_ANGADD,Y		;
		STA	ENWRK8,X		;

PUKU1_SUB1500	EQU	$
;		LDA	ENWRK8,X		;(R5) <- ]pZbg
		AND	#001FEH			;
		LSR	A			;
		STA	>R5			;
;
;		ldy	#004h
;		sty	2100h
;
		M_CHIP	C_32_ROTZOM
;
;		ldy	#00fh
;		sty	2100h


PUKU1_SUB1700	EQU	$
		LDX	<ENINDX

		LDA	ENCHPT,X
		ASL	A
		TAY
		LDA	!BRDVA0,Y		;chara VRAM address set(up)
		STA	OBM7V0
		LDA	!BRDVA1,Y		;	    "          (down)
		STA	OBM7V1
		LDA	!BRDVA2,Y
		STA	OBM7V2
		LDA	!BRDVA3,Y
		STA	OBM7V3
;
		LDA	#(WOB7CHR+20H*4)	;chara data address set
		STA	OBM7A0
		LDA	#(WOB7CHR+20H*4)+200H
		STA	OBM7A1
		LDA	#(WOB7CHR+20H*4)+400H
		STA	OBM7A2
		LDA	#(WOB7CHR+20H*4)+600H
		STA	OBM7A3

		LDA	#02H
		STA	OBM7WF			;mode 7 OBJ chara DMA "ON"

PUKU1_SUB1800	EQU	$
		LDA	<ENWRK0,X
		CMP	ENYPSL,X
		BPL	PUKU1_SUB1880

		STA	ENYPSL,X

		LDA	ENCHPT,X
		AND	#000FFH
		ASL	A
		TAY
		LDA	#00000			;use area cancel !!
		STA	!M7OBUS,Y

		LDA	<RANDM0			;Ƃё҂^C}[Zbg
		AND	#0001FH			;
		CLC				;
		ADC	#00020H			;
		STA	ENTIM0,X		;

		STZ	ENGPOW,X
		STZ	ENYSPD,X
		STZ	ENXSPD,X

		LDA	<ENWRK3,X		;ԂZbg ?
		AND	#00002H			;
		BNE	PUKU1_SUB1860		;  no: PUKU1_SUB1860

		LDA	#SHIBU		;(A) <-- exstra no.
		JSL	>EXINSR
		LDA	#00001H
		STA	EXWRK0,Y	;counter set

		LDA	#0FE00H
		STA	EXYSPD,Y	;Y speed set
		LDA	#00000H
		STA	EXCHPT,Y	;chr pattern no. set

		LDA	#00012H		;timer set
		STA	EXTIM0,Y	;

		LDA	ENXPSL,X
		STA	EXXPSL,Y	;X pos set

		LDA	ENYPSL,X
		SEC
		SBC	#00010H
		STA	EXYPSL,Y	;Y pos set

PUKU1_SUB1860	EQU	$
		LDA	<ENWRK3,X
		EOR	#00002H
		STA	<ENWRK3,X

		LDY	#000
		STY	<ENWRK2,X		;routine mode index inc.

		RTS

PUKU1_SUB1880	EQU	$
		LDY	<ENWRK3,X		;ȂȂ߂Ƃ ?
		CPY	#004H			;
		BCS	PUKU1_SUB1900		; yes: PUKU1_SUB1900

		LDA	ENTIM0,X		;Ltbv ?
		BNE	PUKU1_SUB1900		; yes: PUKU1_SUB1900

		LDA	#00008H
		STA	ENTIM0,X

		LDA	ENMUKI,X		;Ltbv ?
		EOR	#00002H			;
		STA	ENMUKI,X		;

PUKU1_SUB1900	EQU	$

;
		RTS
;
;
;************************************************************************
;*		initial	( jump block )					*
;************************************************************************
;
		MEM16
		IDX8
JBLK0IN		EQU	$
		JSL	>TROBJ_SERCH_4x4
		BCS	JBLK0IN0200

		JSL	>ENCLEAR

		RTL

JBLK0IN0200	EQU	$
		LDA	#00100H			;{Zbg
		STA	ENWRK6,X		;

		STZ	ENMUKI,X

		RTL
;
;
;
;************************************************************************
;*		move	( ? block2 )					*
;************************************************************************
;
;
;
;		ENWRK0	{l`w
;B		ENWRK2	ROUTINE MODE INDEX
;B		ENWRK3	PLAYER ON FLAG
;		ENWRK4	vC[w@onrD␳l
;		ENWRK6	{
;		ENWRK8	vC[x@onrD␳l
;
;		ENCONT
;
;		ENTIM0	
;
;
;
JBLK0_SUB	EQU	$
		WORD	JBLK0_SUB0	;NORMAL
		WORD	JBLK0_SUB1	;PRESS
		WORD	JBLK0_SUB2	;EXPAND
;
JBLK0_ZOOM	EQU	$
;		WORD	0FFA0H,00060H
		WORD	0FFC0H,00040H
;
		MEM16
		IDX8
JBLK0MV		EQU	$
;-------------- move --------------------------------------------
		JSL	>ENMDCK		;mode check
;
		JSL	>ENBGCK

		TXY
		LDA	<ENWRK2,X
		AND	#000FFH
		PHA
		ASL	A
		TAX
		JSR	(JBLK0_SUB,X)

		LDA	FRCNT
		AND	#00003H
		CMP	ENCHPT,X
		BNE	JBLK0MV0300

		JSR	JBLK0_SET

JBLK0MV0300	EQU	$
		PLA

		LDY	<ENWRK3,X		;PLAYER ON ?
		BEQ	JBLK0MV0500		;  no: JBLK0MV0500

		CMP	#00000H
		BEQ	JBLK0MV0400

		LDA	<ENWRK4,X
		STA	PLXPSL

		INC	ONLFFG

		STZ	PLYSPD		;vC[x@roddcZbg

JBLK0MV0400	EQU	$
		LDA	ENWRK8,X	;vC[x@onrD␳
		STA	PLYPSL

JBLK0MV0500	EQU	$

		RTL
;
		MEM16
		IDX8
JBLK0_SUB0	EQU	$
		TYX

		LDY	#000
		STY	<ENWRK3,X

;		LDA	PLJUMP		;vC[
;		BEQ	JBLK0_SUB0100	;  no: JBLK0_SUB0100
					;	;vC[Wv
					;	;  no: JBLK0_SUB0100
					;
		LDA	PLYSPD		;	;vC[㏸
		BMI	JBLK0_SUB0100	;	; yes: JBLK0_SUB0100
					;
		LDA	EPWIDX,X	;	;`FbNnj ?
		CLC			;	;
		ADC	#00010H		;	;
		CMP	#00020H		;	;
		BCS	JBLK0_SUB0100	;	;  no: JBLK0_SUB0100
					;
		LDA	EPWIDY,X	;	;c`FbNnj ?
		CMP	#00020H		;	;
		BCS	JBLK0_SUB0100	;	;  no: JBLK0_SUB0100

		INC	<ENWRK3,X

		LDA	PLYSPD
		STZ	PLYSPD		;vC[x@roddcZbg
		INC	ONLFFG
		LSR	A
		LSR	A
		LSR	A
		CMP	#00020H
		BCC	JBLK0_SUB0100

		SEC
		SBC	#00100H
		EOR	#0FFFFH
		INC	A
		STA	<ENWRK0,X

		LDA	PLXPSL
		STA	<ENWRK4,X

		STZ	PLXSPD

		INC	<ENWRK2,X

JBLK0_SUB0100	EQU	$

		RTS
;
		MEM16
		IDX8
JBLK0_SUB1	EQU	$
		TYX
		LDA	<ENWRK0,X
		CMP	ENWRK6,X
		BCC	JBLK0_SUB1200

		SEC
		SBC	#00100H
		SEC
		ROR	A
		SEC
		ROR	A
		CLC
		ADC	#00100H
		SEC
		SBC	#00260H
		EOR	#0FFFFH
		INC	A
		STA	<ENWRK0,X

;		CMP	#00170H
;		BCC	JBLK0_SUB1100

		CMP	#04160H			;CMP	#00100H
		BEQ	JBLK0_SUB1180

;		ASL	A
;		CLC
;		ADC	#00100H
;		EOR	#0FFFFH
;		INC	A
;		STA	ENYSPD,X

		ASL	A
		ASL	A
		EOR	#0FFFFH
		INC	A
		STA	ENYSPD,X


JBLK0_SUB1100	EQU	$
		INC	<ENWRK2,X

		LDY	<ENWRK3,X
		BEQ	JBLK0_SUB1A00

;		LDA	<ENWRK0,X
;		ASL	A
;		ASL	A
;		CLC
;		ADC	#00200H
;		EOR	#0FFFFH
;		INC	A
;		STA	PLYSPD

		LDA	ENYSPD,X
		SEC
		SBC	#00600H
		STA	PLYSPD

		LDA	#P006
		STA	PLJUMP

		TYA
		STA	SCRONF

		DEC	<ENWRK3,X		;PLAYER ON FLAG CLEAR

		RTS

JBLK0_SUB1180	EQU	$
		LDY	#000
		STY	<ENWRK2,X

		RTS

JBLK0_SUB1200	EQU	$
		LDA	FRCNT
		AND	#00003H
		CMP	ENCHPT,X
		BNE	JBLK0_SUB1A00

JBLK0_SUB1300	EQU	$
		LDA	ENWRK6,X
		SEC
		SBC	#00030H
		CMP	<ENWRK0,X
		BCS	JBLK0_SUB1500

		LDA	<ENWRK0,X

JBLK0_SUB1500	EQU	$
		STA	ENWRK6,X

JBLK0_SUB1A00	EQU	$

		RTS
;
		MEM16
		IDX8
JBLK0_SUB2	EQU	$
		TYX
		LDA	<ENWRK0,X
		CMP	ENWRK6,X
		BCS	JBLK0_SUB2200

		LDA	#00100H
		STA	<ENWRK0,X

		DEC	<ENWRK2,X

		RTS

;		EOR	#0FFFFH
;		INC	A
;		CLC
;		ADC	#00260H
;		STA	<ENWRK0,X
;		DEC	<ENWRK2,X
;		CMP	#000F0H
;		BCC	JBLK0_SUB2A00
;
;		LDA	#00100H
;		STA	ENWRK6,X
;
;		LDY	#000
;		STY	<ENWRK2,X
;
;		RTS
;
JBLK0_SUB2200	EQU	$
		LDA	FRCNT
		AND	#00003H
		CMP	ENCHPT,X
		BNE	JBLK0_SUB2A00

JBLK0_SUB2300	EQU	$
		LDA	ENWRK6,X
		CLC
		ADC	#00030H
		CMP	<ENWRK0,X
		BCC	JBLK0_SUB2600

		LDA	<ENWRK0,X
		INC	A

JBLK0_SUB2600	EQU	$
		STA	ENWRK6,X

JBLK0_SUB2A00	EQU	$

		RTS
;
		MEM16
		IDX8
JBLK0_SET	EQU	$
		LDA	ENWRK6,X		;(R6) <- w{Zbg
;		STA	>R6			;
		STA	>R4			;
		LDA	#00100H			;(R11) <- x{Zbg
		SEC				;
		SBC	ENWRK6,X		;
		CLC				;
		ADC	#00100H			;
		STA	>R11			;

		LDA	#BANK CIPCHD+7040H+000	;chara data bank set
		STA	>R13
		LDA	#CIPCHD+7050H+000	;chara data address set
		STA	>R12

		LDA	#00008H			;(R8) <- Sw@onrD
		STA	>R8			;
		LDA	#00010H			;(R9) <- Sx@onrD
		STA	>R9			;

		LDA	ENYPSL,X
		STA	>R7

		LDA	ENTROB,X
		TAX
		LDA	>TROBJ_PLOT_X-1,X	;]GAw@onrDZbg
		STA	>R3			;
		LDA	>TROBJ_PLOT_Y-1,X	;]GAx@onrDZbg
		STA	>R2			;

;		ldy	#004h
;		sty	2100h
;
;		M_CHIP	C_32_ZOOM_XY_16
		M_CHIP	M_JBLK0_SET
;
;		ldy	#00fh
;		sty	2100h

		LDX	<ENINDX

		INC	OBM7WF			;mode 7 OBJ chara DMA "ON"

		LDA	CCWORK10
		STA	ENWRK8,X

		RTS
;
;
;************************************************************************
;*		initial	( kani )					*
;************************************************************************
		MEM16
		IDX8
KANI0IN		EQU	$
		LDA	#00004H
		STA	ENCHPT,X

		LDA	#0FFFFH
		STA	<ENCONT,X

		RTL
;
;
;************************************************************************
;*		move	( kani )					*
;************************************************************************
;
;B		ENWRK0	w@onrD␳l
;B		ENWRK1	x@onrD␳l
;B		ENWRK2	ROUTINE MODE INDEX
;B		ENWRK3	nT~Y[tbO
;B		ENWRK4	nT~p^[tbO
;B		ENWRK5	nT~ӂӂJE^[iQj^nT~傫傫JE^[iRj
;		ENWRK6	tbOiOj^{iP`j
;		ENWRK8	LtbvJE^[iOj^]piP`j
;
;		ENCONT	Lio[iO`Pj^nT~ӂӂtbOiQj^nT~傫傫tbOiRj
;
;		ENTIM0	ω^C}[
;		ENTIM1	Xgbv^C}[
;		ENTIM2	nT~̂у`FbNbN^C}[
;
KANI0_SUB	EQU	$
		WORD	KANI0_SUB0		;m[}
		WORD	KANI0_SUB1		;Y[@@Y[
		WORD	KANI0_SUB2		;ӂ@ӂ
		WORD	KANI0_SUB3		;傫@傫
		WORD	KANI0_SUB4		;Ԃ@Ԃ
;
KANI0_REV	EQU	$
		WORD	00010H,0FFF0H
;
		MEM16
		IDX8
KANI0MV		EQU	$
		LDA	ENCHPT,X		;nT~ahf ?
		AND	#00004H			;
		BNE	KANI0MV0100		;  no: KANI0MV0100

		LDY	ENMUKI,X		;nT~̈ʒu
		LDA	!KANI0_REV,Y		;
		STA	<EWORK0			;
						;
		I16				;
		LDY	ENOAML,X		;
		LDA	<ENWRK0,X		;
		AND	#000FFH			;
		CMP	#00080H			;
		BCC	KANI0MV0010		;
						;
		ORA	#0FF00H			;
						;
KANI0MV0010	EQU	$			;
		CLC				;
		ADC	ENDSXL,X		;
		STA	SOAM_DX+0,Y		;
		STA	SOAM_DX+0+16,Y		;
		CLC				;
		ADC	<EWORK0			;
		STA	SOAM_DX+0+8,Y		;
		STA	SOAM_DX+0+24,Y		;
						;
		LDA	<ENWRK1,X		;
		AND	#000FFH			;
		CMP	#00080H			;
		BCC	KANI0MV0020		;
						;
		ORA	#0FF00H			;
						;
KANI0MV0020	EQU	$			;
		CLC				;
		ADC	ENDSYL,X		;
		STA	SOAM_DX+2,Y		;
		STA	SOAM_DX+2+8,Y		;
		CLC				;
		ADC	#00010H			;
		STA	SOAM_DX+2+16,Y		;
		STA	SOAM_DX+2+24,Y		;
		I8

KANI0MV0100	EQU	$
		JSL	>ENMDCK			;mode check
;
;------ not display clear check -------------------------
		JSL	>DISPCK0		;display pos check
		BCC	KANI0MV0300		;     "      ok ? ( yes:KANI0MV0300 )

		LDA	<ENWRK2,X		;]GAgĂ ?
		BEQ	KANI0MV0200		;  no: KANI0MV0200

		DEC	A
		BNE	KANI0MV0120

		LDA	<ENCONT,X
		BPL	KANI0MV0180

KANI0MV0120	EQU	$
;------ not display clear set !! ----------------
		LDA	ENCHPT,X
		AND	#000FFH

KANI0MV0180	EQU	$
		ASL	A
		TAY
		LDA	#00000			;use area cancel !!
		STA	!M7OBUS,Y

KANI0MV0200	EQU	$
		JSL	>ENCLEAR
;
		RTL
;
KANI0MV0300	EQU	$
		JSL	>ENBGCK		;BG check

		JSL	>EPCRCK		;vs player

		TXY
		LDA	<ENWRK2,X
		AND	#0FFFFH
		ASL	A
		TAX
		JSR	(KANI0_SUB,X)

		RTL
;
KANI0_XMAX	EQU	$
		WORD	00100H,00080H
		WORD	0FF00H,0FF80H
;
		MEM16
		IDX8
KANI0_SUB0	EQU	$
		TYX

		LDA	ENTIM2,X		;nT~̂у`FbN ?
		BNE	KANI0_SUB0300		;  no: KANI0_SUB0300

		LDA	EPWIDX,X
		CLC
		ADC	#00038H
		CMP	#00070H
		BCS	KANI0_SUB0300

		LDY	#(4-1)*2
KANI0_SUB0100	EQU	$
		LDA	M7OBUS,Y	;OBJ mode7 area nothing ?
		BEQ	KANI0_SUB0200	;  no: KANI0_SUB0200

		DEY
		DEY
		BPL	KANI0_SUB0100
		BRA	KANI0_SUB0300

KANI0_SUB0200	EQU	$
		TYA			;use area set
		LSR	A
		STA	<ENCONT,X
		INC	A
		STA	M7OBUS,Y

		LDY	#000
		LDA	EPWIDX,X
		BPL	KANI0_SUB0220

		INY
		INY

KANI0_SUB0220	EQU	$
		TYA
		STA	ENMUKI,X

		STZ	ENXSPD,X
		STZ	ENXPOW,X
		STZ	ENTIM0,X
		STZ	ENTIM1,X

		LDA	#00300H		;ENWRK6 <- zoom size set
		STA	ENWRK6,X

		LDA	#00002H
		STA	<ENWRK4,X

		LDA	#00010H			;]pZbg
		STA	ENWRK8,X		;

		LDA	#00201H
		STA	<ENWRK2,X	;ENWRK2 <- routine mode index inc.

KANI0_SUB0280	EQU	$

		RTS

KANI0_SUB0300	EQU	$
		LDA	ENTIM1,X		;~܂Ă ?
		BNE	KANI0_SUB0280		; yes: KANI0_SUB0280

		LDA	#00010H			;w@onvdqZbg
		STA	ENXPOW,X

		LDA	ENCBFG,X	;side BG =  ?
		BIT	#00003H		;
		BNE	KANI0_SUB0400	; yes: KANI0_SUB0400

		AND	#00004H		;foot BG =  ?
		BNE	KANI0_SUB0500	; yes: KANI0_SUB0500

		LDA	ENSLOP,X	;foot BG =  ?
		BNE	KANI0_SUB0500	; yes: KANI0_SUB0500

KANI0_SUB0400	EQU	$
		LDA	ENXPSL,X	;X POS. ␳
		SEC			;
		SBC	ENMOVX,X	;
		STA	ENXPSL,X	;

		LDA	ENYSPD,X	;Y POS. ␳
		AND	#0FF00H		;
		XBA			;
		STA	<EWORK0		;
					;
		LDA	ENYPSL,X	;
		SEC			;
		SBC	<EWORK0		;
		STA	ENYPSL,X	;

		STZ	ENXMAX,X
		STZ	ENXSPD,X
		STZ	ENXPOW,X

		LDA	#00020H			;XgbvJE^[Zbg
		STA	ENTIM1,X

		LDA	ENWRK6,X		;o[X
		EOR	#00004H			;
		STA	ENWRK6,X		;

KANI0_SUB0500	EQU	$
		LDA	ENXSPD,X		;tbv ?
		BPL	KANI0_SUB0600		;
						;
		EOR	#0FFFFH			;
		INC	A			;
						;
KANI0_SUB0600	EQU	$			;
		CLC				;
		ADC	ENWRK8,X		;
		CMP	#00A00H			;
		BCC	KANI0_SUB0900		;  no: KANI0_SUB0900

		PHA

		LDA	ENMUKI,X		;flip
		EOR	#00002H			;
		STA	ENMUKI,X		;

		PLA
		SEC
		SBC	#00A00H

KANI0_SUB0900	EQU	$
		STA	ENWRK8,X

		LDA	ENTIM0,X		;Xs[hς ?
		BNE	KANI0_SUB0B00		;  no: KANI0_SUB0B00

		LDA	<RANDM0
		AND	#0001FH
		PHA
		CLC
		ADC	#00020H
		STA	ENTIM0,X

		PLA
		AND	#00002H
		CLC
		ADC	ENWRK6,X
		TAY

		LDA	!KANI0_XMAX,Y		;w@l`w@roddcZbg
		STA	ENXMAX,X		;

KANI0_SUB0B00	EQU	$

		RTS
;
KANI0_ZADD	EQU	$
		WORD	00060H,0FFA0H
;
		MEM16
		IDX8
KANI0_SUB1	EQU	$
		TYX

		LDA	<ENCONT,X
		BMI	KANI0_SUB1100

		LDA	FRCNT
		AND	#00003H
		CMP	<ENCONT,X
		BNE	KANI0_SUB0B00

		STA	ENCHPT,X

		LDA	#0FFFFH
		STA	<ENCONT,X

		BRA	KANI0_SUB1200

KANI0_SUB1100	EQU	$
		LDA	FRCNT
		AND	#00003H
		CMP	ENCHPT,X
		BNE	KANI0_SUB0B00

KANI0_SUB1200	EQU	$
		LDY	<ENWRK3,X

		LDA	ENWRK6,X
		CLC
		ADC	!KANI0_ZADD,Y
		CMP	#00120H
		BCS	KANI0_SUB1500

		STZ	<ENWRK4,X		;nT~Ƃ

		LDA	<RANDM0			;nT~ӂӂJE^[Zbg
		PHA				;
		AND	#00002H			;
		CLC				;
		ADC	#00004H			;
		TAY				;

		STZ	<ENCONT,X		;nT~ӂӂtbOZbg

		PLA
		AND	#00003H
		BNE	KANI0_SUB1280

		INY
		INY
		INY
		INY

KANI0_SUB1280	EQU	$
		CLC
		ADC	<ENWRK2,X
		INC	A
		AND	#000FFH
		CMP	#00004H
		BCC	KANI0_SUB1300

		TYA
		LSR	A
		TAY

		LDA	#00004H

KANI0_SUB1300	EQU	$
		STA	<ENWRK2,X		;routine mode index set

		STY	<ENWRK5,X

		LDA	#00120H
		BRA	KANI0_SUB1600

KANI0_SUB1500	EQU	$
		CMP	#00300H
		BCC	KANI0_SUB1600

;------ not display clear set !! ----------------
		LDA	ENCHPT,X
		AND	#000FFH
		ASL	A
		TAY
		LDA	#00000		;use area cancel !!
		STA	!M7OBUS,Y

		LDA	#00004H			;Lp^[tbOZbg
		STA	ENCHPT,X		;

		LDY	#000			;tbOăZbg
		LDA	ENXMAX,X		;
		BPL	KANI0_SUB1580		;
						;
		LDY	#004			;
						;
KANI0_SUB1580	EQU	$			;
		TYA				;
		STA	ENWRK6,X		;

		LDA	<RANDM0			;nT~̂у`FbNbN^C}[Zbg
		AND	#0001FH			;
		CLC				;
		ADC	#00010H			;
		STA	ENTIM2,X		;

		DEC	<ENWRK2,X		;routine mode index dec.

		RTS

KANI0_SUB1600	EQU	$
		STA	ENWRK6,X

;		LDY	#002
;		LDA	EPWIDX,X		;]pZbg
;		BMI	KANI0_SUB1680		;
;						;
;		EOR	#0FFFFH			;
;		INC	A			;
;						;
;		DEY				;
;		DEY				;
;						;
;KANI0_SUB1680	EQU	$			;
;		STA	<EWORK6			;
;						;
;		TYA				;
;		LDY	#000			;
;		CMP	ENMUKI,X		;
;		BNE	KANI0_SUB16A0		;
;						;
;		LDA	<EWORK6			;
;		CMP	#0FFB0H			;
;		BCC	KANI0_SUB16A0		;
;						;
;		INY				;
;		INY				;
;						;
;KANI0_SUB16A0	EQU	$			;
;		STY	<ENWRK3,X		;
;						;
;		LDA	EPWIDY,X		;
;		EOR	#0FFFFH			;
;		INC	A			;
;		STA	<EWORK8			;
;						;
;		JSL	>RAD_GETL		;
;		I8				;
;						;
;		LDA	<EWORKA			;
;		AND	#001FEH			;
;		STA	ENWRK8,X		;
;
		JSR	KANI0_SET

KANI0_SUB1900	EQU	$

		RTS
;
KANI0_FURI	EQU	$
		WORD	0FFE0H,00040H
;
		MEM16
		IDX8
KANI0_SUB2	EQU	$
		TYX

		LDA	FRCNT
		AND	#00003H
		ASL	A
		ASL	A
		CMP	ENTROB,X
		BNE	KANI0_SUB1900

		STZ	<EWORK2			;ʃZbgtbONA

		LDY	<ENCONT,X
		LDA	ENWRK8,X
		CLC
		ADC	!KANI0_FURI,Y
		AND	#001FEH
		CPY	#000
		BNE	KANI0_SUB2100

		CMP	#00190H
		BNE	KANI0_SUB2200

		LDY	#002
		BRA	KANI0_SUB2200

KANI0_SUB2100	EQU	$
		CMP	#00090H
		BNE	KANI0_SUB2200

		INC	<EWORK2			;ʃZbgtbOZbg

		LDY	#000

KANI0_SUB2200	EQU	$
		STY	<ENCONT,X
		STA	ENWRK8,X
		CMP	#00010H
		BNE	KANI0_SUB2500

		DEC	<ENWRK5,X
		LDY	<ENWRK5,X
		BNE	KANI0_SUB2500

		LDA	#0FFFFH
		STA	<ENCONT,X
;		LDA	#00001H			;ENWRK3 <- nT~Y[tbO
		INC	A			;
		INC	A			;ENWRK2 <- routine mode index
		STA	<ENWRK2,X		;

KANI0_SUB2500	EQU	$
		JSR	KANI0_SET

		LDY	ENMUKI,X		;nT~̈ʒu
		LDA	!KANI0_REV,Y		;
		STA	<EWORK0			;
						;
		I16				;
		LDY	ENOAML,X		;
		LDA	<ENWRK0,X		;
		AND	#000FFH			;
		CMP	#00080H			;
		BCC	KANI0_SUB2510		;
						;
		ORA	#0FF00H			;
						;
KANI0_SUB2510	EQU	$			;
		CLC				;
		ADC	ENDSXL,X		;
		STA	SOAM_DX+0,Y		;
		STA	SOAM_DX+0+16,Y		;
		CLC				;
		ADC	<EWORK0			;
		STA	SOAM_DX+0+8,Y		;
		STA	SOAM_DX+0+24,Y		;
						;
		LDA	<ENWRK1,X		;
		AND	#000FFH			;
		CMP	#00080H			;
		BCC	KANI0_SUB2520		;
						;
		ORA	#0FF00H			;
						;
KANI0_SUB2520	EQU	$			;
		CLC				;
		ADC	ENDSYL,X		;
		STA	SOAM_DX+2,Y		;
		STA	SOAM_DX+2+8,Y		;
		CLC				;
		ADC	#00010H			;
		STA	SOAM_DX+2+16,Y		;
		STA	SOAM_DX+2+24,Y		;
		I8

		LDY	<EWORK2			;ʃZbg ?
		BEQ	KANI0_SUB2800		;  no: KANI0_SUB2800

		LDA	#KUMOB		;(A) <-- exstra no.
		JSL	>EXINSR
		LDA	#0000BH
		STA	EXWRK0,Y	;counter set

		LDA	#00000H
		STA	EXYSPD,Y	;Y speed set

		LDA	#00006H
		STA	EXTIM0,Y

		LDA	ENXPSL,X
		CLC
		ADC	CCWORK11
		STA	EXXPSL,Y	;X pos set

		LDA	ENYPSL,X
		CLC
		ADC	CCWORK10
		CLC
		ADC	#00010H
		STA	EXYPSL,Y	;Y pos set

KANI0_SUB2800	EQU	$

		RTS
;
		MEM16
		IDX8
KANI0_SUB3	EQU	$
		TYX

		LDA	FRCNT
		AND	#00003H
		ASL	A
		ASL	A
		CMP	ENTROB,X
		BNE	KANI0_SUB3800

		LDA	<ENWRK4,X
		EOR	#00002H
		STA	<ENWRK4,X

		DEC	<ENWRK5,X
		LDY	<ENWRK5,X
		BNE	KANI0_SUB3700

		LDA	#0FFFFH
		STA	<ENCONT,X
;		LDA	#00001H			;ENWRK3 <- nT~Y[tbO
		INC	A			;
		INC	A			;ENWRK2 <- routine mode index
		STA	<ENWRK2,X		;

KANI0_SUB3700	EQU	$
		JSR	KANI0_SET

KANI0_SUB3800	EQU	$

		RTS
;
		MEM16
		IDX8
KANI0_SUB4	EQU	$
		TYX

		LDA	FRCNT
		AND	#00003H
		ASL	A
		ASL	A
		CMP	ENTROB,X
		BNE	KANI0_SUB3800	;RTS

		LDA	ENWRK8,X
		CLC
		ADC	#00040H
		AND	#001FEH
		STA	ENWRK8,X
		CMP	#00010H
		BNE	KANI0_SUB4500

		DEC	<ENWRK5,X
		LDY	<ENWRK5,X
		BNE	KANI0_SUB4500

		LDA	#0FFFFH
		STA	<ENCONT,X
;		LDA	#00001H			;ENWRK3 <- nT~Y[tbO
		INC	A			;
		INC	A			;ENWRK2 <- routine mode index
		STA	<ENWRK2,X		;

KANI0_SUB4500	EQU	$
		STZ	<EWORK2			;ʃZbgtbONA

		JMP	KANI0_SUB2500
;
KANI0_CHAR	EQU	$
		WORD	CIPCHD+4000H+001H
		WORD	CIPCHD+4020H+001H
;
		MEM16
		IDX8
KANI0_SET	EQU	$
						;]AhXoNZbg
						;(R12) <-- ]AhXZbg
		LDY	<ENWRK4,X		;(R13) <-- ]oNZbg
		LDA	!KANI0_CHAR,Y		;chara data address set
		STA	>R12			;
		LDA	#BANK CIPCHD+4000H+001H	;chara data bank set
		STA	>R13			;

		LDA	ENWRK8,X		;(R5) <- ]pZbg
		STA	>R11			;
		LSR	A			;
		STA	>R5			;

		LDA	ENWRK6,X		;(R4) <- {Zbg
		STA	>R4			;

		LDA	ENMUKI,X
		STA	>R7

		LDA	ENTROB,X
		TAX
		LDA	>TROBJ_PLOT_X,X	;(R3) <- rbg}bvWQwZbg
		STA	>R3			;
		LDA	>TROBJ_PLOT_Y,X	;(R3) <- rbg}bvWQxZbg
		STA	>R2			;


;
;-------------- OBJ mode 7 set ----------------------------------
;
;		ldy	#004h
;		sty	2100h
;
		M_CHIP	M_KANI0_SET
;
;		ldy	#00fh
;		sty	2100h

		LDX	<ENINDX

		INC	OBM7WF			;mode 7 OBJ chara DMA "ON"

		LDY	CCWORK11		;ItZbgw@onrD
		STY	<ENWRK0,X		;

		LDY	CCWORK10		;ItZbgx@onrD
		STY	<ENWRK1,X		;

						;vC[`FbN
		LDA	EPWIDX,X		;	;vC[ƐڐG ?
		CLC				;	;
		ADC	CCWORK12		;	;
		CLC				;	;
		ADC	#00012H			;	;00008H( check pos )+00010H( range work )
		CMP	#00024H			;	;
		BCS	KANI0_SET0800		;	;
						;	;
		LDA	EPWIDY,X		;	;
		CLC				;	;
		ADC	CCWORK10		;	;
		CLC				;	;
		ADC	#00018H			;	;00008H( check pos )+00010H( range work )
		CMP	#00020H			;	;
		BCS	KANI0_SET0800		;	;  no: KANI0_SET0800
						;
		LDA	PLFLSH			;	;vC[̓_[W󂯂Ă ?
		BNE	KANI0_SET0800		;	; yes: KANI0_SET0800
						;
		LDA	#PFAL			;
		STA	PLMODE			;
						;
		LDA	#00090H			;
		STA	PLFLSH			;

KANI0_SET0800	EQU	$

		RTS
;
;************************************************************************
;*		initial	( telesa L size )				*
;************************************************************************
;
		MEM16
		IDX8
TELELIN		EQU	$
		LDY	#(4-1)*2
TELELIN0100	EQU	$
		LDA	M7OBUS,Y	;OBJ mode7 area nothing ?
		BEQ	TELELIN0200	;  no: TELELIN0200

		DEY
		DEY
		BPL	TELELIN0100

		JSL	>ENCLEAR
		RTL

TELELIN0200	EQU	$
		TYA			;use area set
		LSR	A
		STA	ENCHPT,X
		INC	A
		STA	M7OBUS,Y
;
		RTL
;
;
;************************************************************************
;*		move	( telesa L size )				*
;************************************************************************
;
;		ENWRK0	
;		ENWRK2	
;		ENWRK4	
;		ENWRK6	{
;		ENWRK8	]p
;
TELEL_XMAX	EQU	$
TELEL_GMAX	EQU	$
		WORD	00080H,0FF80H
TELEL_ZOOM	EQU	$
		WORD	0FFC0H,00010H
TELEL_CHAR	EQU	$
		WORD	CIPCHD+20E0H+001
		WORD	CIPCHD+0040H+001
;
;
		MEM16
		IDX8
TELELMV		EQU	$

		JSL	>ENMDCK		;mode check
;
;------ not display clear check -------------------------
		JSL	>DISPCK0	;display pos check
		BCC	TELELMV0100	;     "      ok ? ( yes:TELELMV0100 )

;------ not display clear set !! ----------------
		LDA	ENCHPT,X
		AND	#000FFH
		ASL	A
		TAY
		LDA	#00000		;use area cancel !!
		STA	!M7OBUS,Y
;
		JSL	>ENCLEAR

		RTL
;
TELELMV0100	EQU	$
		LDA	FRCNT
		AND	#00003H
		CMP	ENCHPT,X
		BEQ	TELELMV0200
		JMP	TELELMV0800

TELELMV0200	EQU	$
		LDA	#00004
		STA	ENXPOW,X
		STA	ENGPOW,X

		LDA	ENMUKI,X		;vC[߂Ă ?
		EOR	PLCMKI			;
		BNE	TELELMV0210		;  no: TELELMV0210

		STZ	ENGPOW,X
		STZ	ENXPOW,X
		STZ	ENXSPD,X
		STZ	ENYSPD,X

		LDY	#002

		BRA	TELELMV0300

TELELMV0210	EQU	$
		LDY	#000
		LDA	EPWIDX,X
		BMI	TELELMV0220

		INY
		INY

TELELMV0220	EQU	$
		LDA	!TELEL_XMAX,Y
		STA	ENXMAX,X

		LDY	#000
		LDA	EPWIDY,X
		BMI	TELELMV0230

		INY
		INY

TELELMV0230	EQU	$
		LDA	!TELEL_GMAX,Y
		STA	ENGMAX,X

		LDY	#000

TELELMV0300	EQU	$
		LDA	ENWRK6,X		;{vZ
		CLC				;
		ADC	!TELEL_ZOOM,Y		;
		CMP	#00120H			;
		BCS	TELELMV0400		;
						;
		LDA	#00120H			;POOA]ƊĜ
		BRA	TELELMV0500		;
						;
TELELMV0400	EQU	$			;
		CMP	#00380H			;
		BCC	TELELMV0500		;
						;
		LDA	#00320H			;
						;
TELELMV0500	EQU	$			;
		STA	ENWRK6,X		;



		LDA	#BANK CIPCHD+0040H+001H	;chara data address set
		STA	>R13			;
		LDA	!TELEL_CHAR,Y		;chara data bank set
		STA	>R12			;

		CPY	#000
		BNE	TELELMV0600

		LDA	ENXSPD,X
		ORA	ENYSPD,X
		BNE	TELELMV0608

TELELMV0600	EQU	$
		LDA	EPWIDX,X		;]pZbg
		EOR	#0FFFFH			;
		INC	A			;
		STA	<EWORK6			;
						;
		LDA	EPWIDY,X		;
		EOR	#0FFFFH			;
		INC	A			;
		BRA	TELELMV0609		;
						;
TELELMV0608	EQU	$			;
		LDA	ENXSPD,X		;]pvZ
		PHA				;
		AND	#08000H			;
		STA	<EWORK0			;
		PLA				;
		LSR	A			;
		ORA	<EWORK0			;
		STA	<EWORK6			;
		LDA	ENYSPD,X		;
		PHA				;
		AND	#08000H			;
		STA	<EWORK0			;
		PLA				;
		LSR	A			;
		ORA	<EWORK0			;
						;
TELELMV0609	EQU	$			;
		STA	<EWORK8			;
		JSL	>RAD_GETL		;
		I8				;
		LDA	<EWORKA			;
		SEC				;
		SBC	#00080H			;
		CMP	#00100H			;
		BCS	TELELMV0610		;
						;
		LDA	#00002H			;
		STA	ENMUKI,X		;
						;
		LDA	<EWORKA			;
		EOR	#0FFFFH			;
		INC	A			;
		CLC				;
		ADC	#00100H			;
		BRA	TELELMV0620		;
						;
TELELMV0610	EQU	$			;
		STZ	ENMUKI,X		;
						;
		LDA	<EWORKA			;
						;
TELELMV0620	EQU	$			;
		AND	#001FEH			;
		STA	ENWRK8,X		;


		LDA	#00000H		;(R2) <- rbg}bvWQxZbg
		STA	>R2		;

		LDA	#00020H		;(R3) <- rbg}bvWQwZbg
		STA	>R3		;

		LDA	ENWRK8,X	;(R5) <- ]pZbg
		LSR	A		;
		STA	>R5		;

		LDA	ENWRK6,X	;(R4) <- {Zbg
		STA	>R4		;

		LDA	EPWIDX,X
		STA	>R7
		LDA	EPWIDY,X
		STA	>R8
		LDA	PLFLSH
		STA	>R9

;
;-------------- OBJ mode 7 set ----------------------------------
;
;		ldy	#004h
;		sty	2100h
;
;		M_CHIP	C_32_ROTZOM
		M_CHIP	M_TELEL_SET
;
;		ldy	#00fh
;		sty	2100h

		LDX	<ENINDX

		LDA	ENCHPT,X
		ASL	A
		TAY
		LDA	!BRDVA0,Y	;chara VRAM address set(up)
		STA	OBM7V0
		LDA	!BRDVA1,Y	;	    "          (down)
		STA	OBM7V1
		LDA	!BRDVA2,Y
		STA	OBM7V2
		LDA	!BRDVA3,Y
		STA	OBM7V3
;
		LDA	#(WOB7CHR+20H*4)	;chara data address set
		STA	OBM7A0
		LDA	#(WOB7CHR+20H*4)+200H
		STA	OBM7A1
		LDA	#(WOB7CHR+20H*4)+400H
		STA	OBM7A2
		LDA	#(WOB7CHR+20H*4)+600H
		STA	OBM7A3

		LDA	#02H
		STA	OBM7WF		;mode 7 OBJ chara DMA "ON"

		LDA	CCWORK10		;	;vC[̓_[W󂯂Ă ?
		BEQ	TELELMV0800		;	; yes: TELELMV0800
						;
		LDA	#PFAL			;
		STA	PLMODE			;
						;
		LDA	#00090H			;
		STA	PLFLSH			;

TELELMV0800	EQU	$
;
		RTL
;
;
;************************************************************************
;*		initial	( telesa S size )				*
;************************************************************************
;
		MEM16
		IDX8
TELESIN		EQU	$
		LDA	#00004H
		STA	ENCHPT,X

		LDA	#0FFFFH
		STA	<ENCONT,X

		RTL
;
;
;************************************************************************
;*		move	( telesa S size )				*
;************************************************************************
;
;		ENWRK0	
;		ENWRK2	ROUTINE MODE INDEX
;		ENWRK4	
;		ENWRK6	{
;		ENWRK8	]p
;
TELES_XMAX	EQU	$
TELES_GMAX	EQU	$
		WORD	00080H,0FF80H
TELES_ZOOM	EQU	$
		WORD	0FFC0H,00010H
TELES_CHAR	EQU	$
		WORD	CIPCHD+00E0H+001
		WORD	CIPCHD+10E0H+001
;
;
		MEM16
		IDX8
TELESMV		EQU	$

		JSL	>ENMDCK		;mode check
;
;------ not display clear check -------------------------
		JSL	>DISPCK0	;display pos check
		BCC	TELESMV0100	;     "      ok ? ( yes:TELESMV0100 )

		LDA	<ENWRK2,X
		BEQ	TELESMV0080

		LDA	<ENCONT,X
		BPL	TELESMV0040

;------ not display clear set !! ----------------
		LDA	ENCHPT,X

TELESMV0040	EQU	$
		AND	#000FFH
		ASL	A
		TAY
		LDA	#00000		;use area cancel !!
		STA	!M7OBUS,Y
;
TELESMV0080	EQU	$
		JSL	>ENCLEAR

		RTL
;
TELESMV0100	EQU	$
		LDA	<ENCONT,X
		BPL	TELESMV0160

		LDA	ENCHPT,X
		AND	#00004H
		BEQ	TELESMV0180

		LDA	ENMUKI,X		;vC[߂Ă ?
		EOR	PLCMKI			;
		BNE	TELESMV0150		;  no: TELESMV0150

		LDY	#(4-1)*2
TELELMV0110	EQU	$
		LDA	M7OBUS,Y	;OBJ mode7 area nothing ?
		BEQ	TELELMV0120	;  no: TELELMV0120

		DEY
		DEY
		BPL	TELELMV0110

		RTL

TELELMV0120	EQU	$
		TYA			;use area set
		LSR	A
		STA	<ENCONT,X
		INC	A
		STA	M7OBUS,Y

		INC	<ENWRK2,X

TELESMV0150	EQU	$

		RTL
;
TELESMV0160	EQU	$
		LDA	FRCNT
		AND	#00003H
		CMP	<ENCONT,X
		BNE	TELESMV0190

		STA	ENCHPT,X
		LDA	#0FFFFH
		STA	<ENCONT,X

		BRA	TELESMV0200

TELESMV0180	EQU	$
		LDA	FRCNT
		AND	#00003H
		CMP	ENCHPT,X
		BEQ	TELESMV0200

TELESMV0190	EQU	$

		RTL

TELESMV0200	EQU	$
		LDA	#00004
		STA	ENXPOW,X
		STA	ENGPOW,X

		LDA	ENMUKI,X		;vC[߂Ă ?
		EOR	PLCMKI			;
		BNE	TELESMV0210		;  no: TELESMV0210

		STZ	ENGPOW,X
		STZ	ENXPOW,X
		STZ	ENXSPD,X
		STZ	ENYSPD,X

		LDY	#002

		BRA	TELESMV0300

TELESMV0210	EQU	$
		LDY	#000
		LDA	EPWIDX,X
		BMI	TELESMV0220

		INY
		INY

TELESMV0220	EQU	$
		LDA	!TELES_XMAX,Y
		STA	ENXMAX,X

		LDY	#000
		LDA	EPWIDY,X
		BMI	TELESMV0230

		INY
		INY

TELESMV0230	EQU	$
		LDA	!TELES_GMAX,Y
		STA	ENGMAX,X

		LDY	#000

TELESMV0300	EQU	$
		LDA	ENWRK6,X		;{vZ
		CLC				;
		ADC	!TELES_ZOOM,Y		;
		CMP	#00120H			;
		BCS	TELESMV0400		;
						;
		LDA	#00120H			;POOA]ƊĜ
		BRA	TELESMV0500		;
						;
TELESMV0400	EQU	$			;
		CMP	#00380H			;
		BCC	TELESMV0500		;
						;
		LDA	#00004H			;
		STA	ENCHPT,X		;
						;
		LDA	#00320H			;
		STA	ENWRK6,X		;
		DEC	<ENWRK2,X		;
						;
		RTL				;
						;
TELESMV0500	EQU	$			;
		STA	ENWRK6,X		;


		LDA	#BANK CIPCHD+0040H+001H	;chara data address set
		STA	>R13			;
		LDA	!TELES_CHAR,Y		;chara data bank set
		STA	>R12			;

		CPY	#000
		BNE	TELESMV0600

		LDA	ENXSPD,X
		ORA	ENYSPD,X
		BNE	TELESMV0608

TELESMV0600	EQU	$
		LDA	EPWIDX,X		;]pZbg
		EOR	#0FFFFH			;
		INC	A			;
		STA	<EWORK6			;
						;
		LDA	EPWIDY,X		;
		EOR	#0FFFFH			;
		INC	A			;
		BRA	TELESMV0609		;
						;
TELESMV0608	EQU	$			;
		LDA	ENXSPD,X		;]pvZ
		PHA				;
		AND	#08000H			;
		STA	<EWORK0			;
		PLA				;
		LSR	A			;
		ORA	<EWORK0			;
		STA	<EWORK6			;
		LDA	ENYSPD,X		;
		PHA				;
		AND	#08000H			;
		STA	<EWORK0			;
		PLA				;
		LSR	A			;
		ORA	<EWORK0			;
						;
TELESMV0609	EQU	$			;
		STA	<EWORK8			;
		JSL	>RAD_GETL		;
		I8				;
		LDA	<EWORKA			;
		SEC				;
		SBC	#00080H			;
		CMP	#00100H			;
		BCS	TELESMV0610		;
						;
		LDA	#00002H			;
		STA	ENMUKI,X		;
						;
		LDA	<EWORKA			;
		EOR	#0FFFFH			;
		INC	A			;
		CLC				;
		ADC	#00100H			;
		BRA	TELESMV0620		;
						;
TELESMV0610	EQU	$			;
		STZ	ENMUKI,X		;
						;
		LDA	<EWORKA			;
						;
TELESMV0620	EQU	$			;
		AND	#001FEH			;
		STA	ENWRK8,X		;


		LDA	#00000H		;(R2) <- rbg}bvWQxZbg
		STA	>R2		;

		LDA	#00020H		;(R3) <- rbg}bvWQwZbg
		STA	>R3		;

		LDA	ENWRK8,X	;(R5) <- ]pZbg
		LSR	A		;
		STA	>R5		;

		LDA	ENWRK6,X	;(R4) <- {Zbg
		STA	>R4		;

		LDA	EPWIDX,X
		STA	>R7
		LDA	EPWIDY,X
		STA	>R8
		LDA	PLFLSH
		STA	>R9

;
;-------------- OBJ mode 7 set ----------------------------------
;
;		ldy	#004h
;		sty	2100h
;
;		M_CHIP	C_32_ROTZOM_16
		M_CHIP	M_TELES_SET
;
;		ldy	#00fh
;		sty	2100h

		LDX	<ENINDX

		LDA	ENCHPT,X
		ASL	A
		TAY
		LDA	!BRDVA0,Y	;chara VRAM address set(up)
		STA	OBM7V0
		LDA	!BRDVA1,Y	;	    "          (down)
		STA	OBM7V1
		LDA	!BRDVA2,Y
		STA	OBM7V2
		LDA	!BRDVA3,Y
		STA	OBM7V3
;
		LDA	#(WOB7CHR+20H*4)	;chara data address set
		STA	OBM7A0
		LDA	#(WOB7CHR+20H*4)+200H
		STA	OBM7A1
		LDA	#(WOB7CHR+20H*4)+400H
		STA	OBM7A2
		LDA	#(WOB7CHR+20H*4)+600H
		STA	OBM7A3

		LDA	#02H
		STA	OBM7WF		;mode 7 OBJ chara DMA "ON"

		LDA	CCWORK10		;	;vC[̓_[W󂯂Ă ?
		BEQ	TELESMV0800		;	; yes: TELESMV0800
						;
		LDA	#PFAL			;
		STA	PLMODE			;
						;
		LDA	#00090H			;
		STA	PLFLSH			;

TELESMV0800	EQU	$
;
		RTL
;
;
;
;
;
;
		END
