
	;
	;	|@`WPUpwKvO Vol0.2@|
	;			- H07.02/14. By Wani.
	;
	;	ӁF	[ A816.exe Ver1.06 M.Matsuzaka ]
	;	ӁF	[ A816.exe Ver1.06 ]ȏ
	;		[ AB: 8Bit,XY:16Bit,B=00H ]{ˁB
	;	F	[ Select ]	蓮؂ւB
	;		[ Start ]	BB
	;		[ L,R ]		E]B
	;		[ Up,Down ]	xgkB
	;		[ Left,Right ]	wgkB
	;		[ A,B ]		҂ǃAbvI
	;
	;-----------------------------------------------: 
		org	$000000
WC_Work:		ds	16			; vZ[NB
WNMI_Flag:		ds	1			; mlhƁEEE
WCon:			ds	2			; L[́B
Wtrg:			ds	2			; gḰB
RANDOM_Loop:		ds	1
RANDOM_Work:		ds	4			; Random Work.
WR_Seeta:		ds	1			; ]pxB
WR_PX:			ds	2			; {wW
WR_PY:			ds	2			; {xW
WR_DX:			ds	2			; ϊwW
WR_DY:			ds	2			; ϊxWB
WR_Sin:			ds	2			; rlB
WR_Cos:			ds	2			; brlB
WR_XZoom:		ds	2			; wgk(0.5=0080H,1.0=0100H,2.0=0200H)
WR_YZoom:		ds	2			; xgk(0.5=0080H,1.0=0100H,2.0=0200H)
WR_Work:		ds	2			; p[NB
WUser_W:		ds	4			; ėp[NB
WAFlag:			ds	1			; ^]H
WAXYZoom:		ds	4
WAWrout:		ds	2
WATime:			ds	2
WSCMoveW:		ds	4*16			; BG Scroll.
WSCMoveC:		ds	4*16

		org	$000100
SP_Add:			ds	4*128			; roWB
SP_Att:			ds	128/4
WSP_PXY:		ds	2			; {WB
WSP_PY:			ds	2
			ds	4*126

		org	$008000
	;-----------------------------------------------: 
NMI_Jump:	sep.b	%00100000			; mlh荞݁B
		inc	!WNMI_Flag			; mlhƁEEE
		pha
		lda	@$4210
		pla
		rti
Copro_Address:	rti					; Rvߊ荞݁B
Break_Address:	rti					; uCNߊ荞݁B
IRQ_Select:	rti					; hqp荞݁B

	;-----------------------------------------------: 
W_NMI:		lda	@$4200				; mlh҂B
		ora.b	%10000001
		sta	@$4200
		stz	!WNMI_Flag
_W_NMI_00:	lda	!WNMI_Flag
		beq	_W_NMI_00
		rts
WSP_Set:	ldx.w	$0000				; SP Set.
		stx	@$2102
		stz	@$4300
		lda.b	004h
		sta	@$4301
		ldx.w	SP_Add
		stx	@$4302
		lda.b	000h
		sta	@$4304
		ldx.w	00220h
		stx	@$4305
		lda.b	00000001b
		sta	@$420B
		rts
WContRead:	lda	@$4212				; Reading?
		lsr	a
		bcs	WContRead
		rep.b	%00100000			; [ A ] 16Bit.
		lda	@$4218				; 1P Key Read.
		eor	!WCon				; L[́B
		and	@$4218
		and.w	$FFF0
		sta	!Wtrg				; gḰB
		lda	@$4218
		and.w	$FFF0
		sta	!WCon
		lda.w	$0000
		sep.b	%00100000			; [ A ] 8Bit.
		rts
	;-----------------------------------------------:
	;
	;		- RANDOM Data Read. -
	;
	;	Entry:		jsr	RANDOM_Read
	;	Return:		[ A ]
	;	Used:		[ A ],[ P ]
	;
WRANDOM_Table:	db	054,253,144,004,082,161,046,164,068,234,012,114,064,040,245,071
		db	240,083,178,058,196,013,233,024,160,048,125,235,086,166,016,188
		db	007,055,108,143,077,115,098,185,008,165,152,035,174,252,197,095
		db	116,207,159,000,176,036,067,163,113,053,107,214,145,124,056,173
		db	242,094,057,227,126,081,153,019,220,072,243,078,025,236,134,006
		db	029,151,216,028,001,206,045,232,135,175,024,198,167,039,226,123
		db	208,014,103,241,037,104,215,122,030,097,209,070,136,201,187,015
		db	050,186,062,133,193,018,076,199,092,231,061,112,003,168,085,225
		db	194,073,228,065,251,027,219,049,189,137,026,200,091,096,254,205
		db	150,239,025,248,080,229,141,182,255,213,111,154,084,244,146,069
		db	005,102,106,195,142,038,211,075,247,060,246,033,179,051,224,155
		db	172,157,089,031,093,183,002,148,127,191,105,221,059,203,130,063
		db	042,217,132,158,120,121,017,230,043,087,250,052,237,010,249,140
		db	074,101,020,171,088,044,149,079,155,181,022,147,109,210,090,162
		db	184,131,202,129,218,099,192,110,238,119,212,066,204,032,190,117
		db	021,011,100,041,170,138,023,156,034,009,128,180,118,223,139,047
WRANDOM_Read:	phx
		phy
		php
		sep.b	%00110000			; [ A,X,Y ] 8Bit.
		lda.b	$00
		xba
		ldy	!RANDOM_Loop			; RND Loop.
		lda	@RANDOM_Work,y
		tax
		inc	a
		sta	@RANDOM_Work,y
		dey
		bpl	_WRANDOM_Read
		ldy.b	$03
_WRANDOM_Read:	sty	!RANDOM_Loop
		lda	@WRANDOM_Table,x
		plp
		ply
		plx
		rts

	;-----------------------------------------------: 
Reset_Address:	sei					; Zbg̃X^`gAhXB
		clc					; UTWPU`hցB
		xce
		sep.b	%00100000			; [ A ] 8Bit.
		rep.b	%00011000			; [ X,Y ] 16Bit & DCB Off.
		stz	@$420B
		stz	@$420C
		ldx.w	01FFFh
		txs
		ldx.w	$0000				; [ DR ] = 0000H
		phx
		pld
		lda.b	$00
		pha
		plb					; [ DB ] = 00H

		lda.b	08Fh				; SFC Init.
		sta	@$2100
		lda.b	%00000011			; $2101 8/16,6000H-
		sta	@$2101
		stz	@$2102
		stz	@$2103
		lda.b	%00001001			; $2105 BG3,Mode 1.
		sta	@$2105
		stz	@$2106
		stz	@$2107
		stz	@$2108
		lda.b	%01011000			; $2109 BG3:5800H-,1x1.
		sta	@$2109
		stz	@$210A
		stz	@$210B
		lda.b	$00				; $210C BG4,3:0000H-
		sta	@$210C

		stz	@$2111
		stz	@$2111
		stz	@$2112
		stz	@$2112

		lda.b	080h
		sta	@$2115
		stz	@$2116
		stz	@$2117
		stz	@$2121
		stz	@$2125
		stz	@$212C
		stz	@$212D
		stz	@$212E
		stz	@$212F
		lda.b	030h
		sta	@$2130
		stz	@$2131
		lda.b	00E0h
		sta	@$2132
		lda.b	000h
		sta	@$2133
		lda.b	000h
		sta	@$4200
		lda.b	0FFh
		sta	@$4201
		stz	@$4202
		stz	@$4203
		stz	@$4204
		stz	@$4205
		stz	@$4206
		stz	@$4207
		stz	@$4208
		stz	@$4209
		stz	@$420A
		stz	@$420D

		ldx.w	0000Ah				; DMA Clear.
_WR_00:		stz	@$4300,x
		stz	@$4310,x
		stz	@$4320,x
		stz	@$4330,x
		stz	@$4340,x
		stz	@$4350,x
		stz	@$4360,x
		stz	@$4370,x
		dex
		bpl	_WR_00

		stz	@$4200
		stz	@$420C
		lda.b	10000000b
		sta	@$2100

		ldx.w	01FFFh				; RAM Clear.
_WR_01:		stz	@$0000,x
		dex
		bpl	_WR_01

		ldx.w	$0000				; SP Clear.
		lda.b	0E0h
_WR_02:		sta	@SP_Add+0,x
		sta	@SP_Add+1,x
		inx
		inx
		inx
		inx
		cpx.w	00200h
		bcc	_WR_02
		ldx.w	00020h
_WR_02s:	stz	@SP_Att,x
		dex
		bpl	_WR_02s

		lda.b	080h				; V-Ram Init.
		sta	@$2115
		ldx.w	07FFFh
		stx	@$2116
_WR_03:		stz	@$2118
		stz	@$2119
		dex
		bpl	_WR_03

		stz	@$420B				; Color SET.
		lda.b	000h
		sta	@$2121
		stz	@$4300
		lda.b	022h
		sta	@$4301
		ldx.w	WColor
		stx	@$4302
		lda.b	000h
		sta	@$4304
		ldx.w	00200h
		stx	@$4305

		lda.b	080h				; BG4C Font SET.
		sta	@$2115
		ldx.w	$0000
		stx	@$2116
		lda.b	001h
		sta	@$4310
		lda.b	018h
		sta	@$4311
		ldx.w	W4CBGFont
		stx	@$4312
		lda.b	page W4CBGFont
		sta	@$4314
		ldx.w	02000h
		stx	@$4315
		lda.b	00000011b
		sta	@$420B

		lda.b	080h				; BGMap SET.
		sta	@$2115
		ldx.w	$5800
		stx	@$2116
		lda.b	001h
		sta	@$4310
		lda.b	018h
		sta	@$4311
		ldx.w	WBG_Map
		stx	@$4312
		lda.b	page WBG_Map
		sta	@$4314
		ldx.w	00800h
		stx	@$4315
		lda.b	00000011b
		sta	@$420B

		lda.b	080h				; SP Font SET.
		sta	@$2115
		ldx.w	$6000
		stx	@$2116
		lda.b	001h
		sta	@$4310
		lda.b	018h
		sta	@$4311
		ldx.w	WSPFont
		stx	@$4312
		lda.b	page WSPFont
		sta	@$4314
		ldx.w	04000h
		stx	@$4315
		lda.b	00000011b
		sta	@$420B

		ldx.w	$1234				; B
		stx	!RANDOM_Work+$00
		ldx.w	$9876
		stx	!RANDOM_Work+$02
		stz	!RANDOM_Loop			; RND Loop.

		jsr	WSCMInit			; B
		lda.b	$FF
		sta	!WAFlag				; ^]H
		ldx.w	$0000
		stx	!WATime

		jsr	Start_Jump			; oB

		jsr	MMatuLOGO			; M.Matuzaka\B

		lda.b	00Fh
		sta	@$2100
		lda.b	%00010100
		sta	@$212C

		nop
		nop
		nop

WLoop:		jsr	W_NMI				; mlh҂B
		jsr	WSP_Set
		jsr	WContRead			; Reading?
		jsr	WRANDOM_Read			; Random.
		jsr	WSCMove				; EEE
		jsr	WAuto				; 蓮EEE
		jsr	WSXY_Make00			; rorDDD

		nop
		nop
		nop
		bra	WLoop

		nop
		nop
		nop

	;-----------------------------------------------: 
MMatuLOGODa:	dw	$D0B8,$3010,$D0C0,$3011,$D0C8,$3012,$D0D0,$3013
		dw	$D0D8,$3014,$D0E0,$3015,$D0E8,$3016,$D0F0,$3017
MMatuLOGO:	ldx.w	$0020-1				; M.Matuzaka\B
_MMatuLOGO_00:	lda	@MMatuLOGODa,x
		sta	@SP_Add+$1C0,x
		dex
		bpl	_MMatuLOGO_00
		rts

	;-----------------------------------------------: 
Start_Jump:	ldx.w	00180h
		stx	!WR_XZoom			; wgkB
		ldx.w	001C0h
		stx	!WR_YZoom			; xgkB
		stz	!WR_Seeta			; ]pxB
		jsr	WSCM2Init			; ړB
		rts

	;-----------------------------------------------: 
WAutoInit:	ldx.w	$01FF				; B
		stx	!WATime
		jsr	WRANDOM_Read			; Random.
		and.b	%00001100
		inc	a
		inc	a
		sta	!WAXYZoom+$00
		jsr	WRANDOM_Read			; Random.
		sta	!WAXYZoom+$01
		jsr	WRANDOM_Read			; Random.
		and.b	%00001100
		inc	a
		inc	a
		sta	!WAXYZoom+$02
		jsr	WRANDOM_Read			; Random.
		sta	!WAXYZoom+$03
		jsr	WRANDOM_Read			; Random.
		and.b	%00000110
		inc	a
		sta	!WAWrout+$00
		jsr	WRANDOM_Read			; Random.
		sta	!WAWrout+$01
		rts

WAuto:		ldx.w	$D008
		stx	@SP_Add+$1F0
		ldx.w	$D010
		stx	@SP_Add+$1F4
		ldx.w	$D018
		stx	@SP_Add+$1F8
		lda	!WAFlag				; 蓮EEE
		bne	_WAuto_00
		jsr	WXYZoomC			; L[́B
		jsr	WKRout				; ]B
		ldx.w	$3006
		stx	@SP_Add+$1F2
		ldx.w	$3007
		stx	@SP_Add+$1F6
		ldx.w	$3008
		stx	@SP_Add+$1FA
		rts

_WAuto_00:	lda	!Wtrg+$01			; gḰB
		and.b	%00100000
		beq	_WAuto_01
		lda	!WAFlag
		eor.b	%11111111
		sta	!WAFlag
		rts
_WAuto_01:	ldx.w	$3003
		stx	@SP_Add+$1F2
		ldx.w	$3004
		stx	@SP_Add+$1F6
		ldx.w	$3005
		stx	@SP_Add+$1FA

		ldx	!WATime+$00			; ǂȂH
		dex
		stx	!WATime+$00
		bpl	_WAuto_02
		jsr	WAutoInit			; B
		jsr	WSCM2Init			; ړB
_WAuto_02:	rep.b	%00110000			; [ A,X,Y ] 16Bit.
		lda	!WAXYZoom+$01			; XZoom.
		and.w	$0080
		bne	_WAuto_04
		lda	!WAXYZoom+$00
		and.w	$00FF
		clc
		adc	!WR_XZoom			; wgkB
		cmp.w	$0300
		bcc	_WAuto_03
		lda	!WAXYZoom+$01
		eor.w	$0080
		sta	!WAXYZoom+$01
		lda.w	$0300
_WAuto_03:	sta	!WR_XZoom			; wgkB
		bra	_WAuto_08
_WAuto_04:	lda	!WAXYZoom+$00
		and.w	$00FF
		eor.w	$FFFF
		inc	a
		clc
		adc	!WR_XZoom			; wgkB
		beq	_WAuto_05
		cmp.w	$0300
		bcc	_WAuto_06
_WAuto_05:	lda	!WAXYZoom+$01
		eor.w	$0080
		sta	!WAXYZoom+$01
		lda.w	$0001
_WAuto_06:	sta	!WR_XZoom			; wgkB
	;	bra	_WAuto_08
_WAuto_08:	lda	!WAXYZoom+$03			; YZoom.
		and.w	$0080
		bne	_WAuto_0C
		lda	!WAXYZoom+$02
		and.w	$00FF
		clc
		adc	!WR_YZoom			; xgkB
		cmp.w	$0380
		bcc	_WAuto_09
		lda	!WAXYZoom+$03
		eor.w	$0080
		sta	!WAXYZoom+$03
		lda.w	$0380
_WAuto_09:	sta	!WR_YZoom			; xgkB
		bra	_WAuto_10
_WAuto_0C:	lda	!WAXYZoom+$02
		and.w	$00FF
		eor.w	$FFFF
		inc	a
		clc
		adc	!WR_YZoom			; xgkB
		beq	_WAuto_0D
		cmp.w	$0380
		bcc	_WAuto_0E
_WAuto_0D:	lda	!WAXYZoom+$03
		eor.w	$0080
		sta	!WAXYZoom+$03
		lda.w	$0001
_WAuto_0E:	sta	!WR_YZoom			; xgkB
	;	bra	_WAuto_10
_WAuto_10:	lda.w	$0000
		sep.b	%00100000			; [ A ] 8Bit.
		lda	!WAWrout+$01
		bmi	_WAuto_11
		lda	!WR_Seeta			; ]pxB
		clc
		adc	!WAWrout+$00
		sta	!WR_Seeta
		rts
_WAuto_11:	lda	!WR_Seeta			; ]pxB
		sec
		sbc	!WAWrout+$00
		sta	!WR_Seeta
		rts

	;-----------------------------------------------: 
WSXY_Make00:	ldx.w	014+019+008+018-001		; rorDDD
		stx	!WUser_W+0			; ėp[NB
		lda	!WR_Seeta			; ]pxB
		rep.b	00110000b			; [ A,X,Y ] 16Bit.
		asl	a
		tax
		lda.w	@WSin_Table,x
		sta	!WR_Sin				; rlB
		lda.w	@WCos_Table,x
		sta	!WR_Cos				; brlB
_WSXY_Make_00:	lda	!WUser_W+0
		asl	a
		asl	a
		tax
		lda	@WFont_Data00+0,x
		sta	!WR_PX
		lda	@WFont_Data00+2,x
		sta	!WR_PY
		phx
		jsr	WR_ZoomRout
		plx
		lda	!WR_DX
		clc
		adc.w	$0080-$0002
		sta	@SP_Add+00,x
		lda	!WR_DY
		clc
		adc.w	00060h
		sta	@SP_Add+01,x
		lda.w	03000h
		sta	@SP_Add+02,x
		dec	!WUser_W+0
		bpl	_WSXY_Make_00

		ldx.w	4*14-4				; m`nԂB
		lda.w	$3001
_WSXY_Make_02:	sta	@SP_Add+02,x			; ܍킹(;_;)
		dex
		dex
		dex
		dex
		bpl	_WSXY_Make_02
		lda.w	$0000
		sep.b	%00100000			; [ A ] 8Bit.

		rts

	;-----------------------------------------------: 
WKRout:		lda	!WCon+$00			; ]B
		asl	a
		asl	a
		bmi	_WKRout_00
		asl	a
		bmi	_WKRout_04
		rts
_WKRout_00:	dec	!WR_Seeta			; ]pxB
		dec	!WR_Seeta
		lda	!WCon+$00
		ora	!WCon+$01
		bpl	_WKRout_01
		dec	!WR_Seeta
		dec	!WR_Seeta
_WKRout_01:	rts
_WKRout_04:	inc	!WR_Seeta			; ]pxB
		inc	!WR_Seeta
		lda	!WCon+$00
		ora	!WCon+$01
		bpl	_WKRout_05
		inc	!WR_Seeta
		inc	!WR_Seeta
_WKRout_05:	rts

	;-----------------------------------------------: 
WXYZoomC:	lda	!WCon+$01			; L[́B
		lsr	a
		bcs	_WXYZoomC_00			; EB
		lsr	a
		bcs	_WXYZoomC_04			; B
_WXYZoomC_:	lda	!WCon+$01			; L[́B
		lsr	a
		lsr	a
		lsr	a
		bcs	_WXYZoomC_08			; B
		lsr	a
		bcs	_WXYZoomC_0C			; B
		lda	!Wtrg+$01			; gḰB
		and.b	%00010000
		bne	_WXYZoomC_J
		lda	!Wtrg+$01			; gḰB
		and.b	%00100000
		bne	_WXYZoomC_A
		rts
_WXYZoomC_A:	lda	!WAFlag
		eor.b	%11111111
		sta	!WAFlag
		rts
_WXYZoomC_J:	jsr	Start_Jump
		rts
_WXYZoomC_00:	ldx	!WR_XZoom			; wg嗦B
		inx
		inx
		inx
		inx
		lda	!WCon+$00
		ora	!WCon+$01
		bpl	_WXYZoomC_01
		inx
		inx
		inx
		inx
_WXYZoomC_01:	cpx.w	$0300
		bcc	_WXYZoomC_02
		ldx.w	$0300
_WXYZoomC_02:	stx	!WR_XZoom
		bra	_WXYZoomC_
_WXYZoomC_04:	ldx	!WR_XZoom			; wkB
		dex
		dex
		dex
		dex
		lda	!WCon+$00
		ora	!WCon+$01
		bpl	_WXYZoomC_05
		dex
		dex
		dex
		dex
_WXYZoomC_05:	cpx.w	$0000
		beq	_WXYZoomC_06
		cpx.w	$0300
		bcc	_WXYZoomC_07
_WXYZoomC_06:	ldx.w	$0001
_WXYZoomC_07:	stx	!WR_XZoom
		bra	_WXYZoomC_

_WXYZoomC_08:	ldx	!WR_YZoom			; xkB
		dex
		dex
		dex
		dex
		lda	!WCon+$00
		ora	!WCon+$01
		bpl	_WXYZoomC_09
		dex
		dex
		dex
		dex
_WXYZoomC_09:	cpx.w	$0000
		beq	_WXYZoomC_0A
		cpx.w	$0380
		bcc	_WXYZoomC_0B
_WXYZoomC_0A:	ldx.w	$0001
_WXYZoomC_0B:	stx	!WR_YZoom
		rts
_WXYZoomC_0C:	ldx	!WR_YZoom			; xg嗦B
		inx
		inx
		inx
		inx
		lda	!WCon+$00
		ora	!WCon+$01
		bpl	_WXYZoomC_0D
		inx
		inx
		inx
		inx
_WXYZoomC_0D:	cpx.w	$0380
		bcc	_WXYZoomC_0E
		ldx.w	$0380
_WXYZoomC_0E:	stx	!WR_YZoom
		rts

	;-----------------------------------------------: 
WSCMData:	db	$10+%00000000
		dw	WSCMoveW+$01
		db	$10+%00000000
		dw	WSCMoveW+$05
		db	$10+%00000000
		dw	WSCMoveW+$09
		db	$10+%00000000
		dw	WSCMoveW+$0D
		db	$10+%00000000
		dw	WSCMoveW+$11
		db	$10+%00000000
		dw	WSCMoveW+$15
		db	$10+%00000000
		dw	WSCMoveW+$19
		db	$10+%00000000
		dw	WSCMoveW+$1D
		db	$10+%00000000
		dw	WSCMoveW+$21
		db	$10+%00000000
		dw	WSCMoveW+$25
		db	$10+%00000000
		dw	WSCMoveW+$29
		db	$10+%00000000
		dw	WSCMoveW+$2D
		db	$10+%00000000
		dw	WSCMoveW+$31
		db	$01+%00000000
		dw	WSCMoveW+$35
		db	$00
WSCMInit:	ldx.w	4*16-4				; B
		rep.b	%00100000			; [ A ] 16Bit.
_WSCMInit_00:	stz	!WSCMoveW+$00,x
		stz	!WSCMoveW+$02,x
		lda.w	$0000
		sep.b	%00100000			; [ A ] 8Bit.
		lda.b	%01000010
		sta	@$4370
		lda.b	$11
		sta	@$4371
		ldx.w	WSCMData
		stx	@$4372
		lda.b	page WSCMData
		sta	@$4374
		lda.b	%10000000
		sta	@$420C
		rts

WSCM2Init:	ldx.w	4*16-4				; ړB
		rep.b	%00100000			; [ A ] 16Bit.
_WSCM2Init_00:	jsr	WRANDOM_Read			; Random.
		asl	a
		asl	a
		sta	!WSCMoveC+$00,x
		jsr	WRANDOM_Read			; Random.
		xba
		and.w	$8000
		ora	!WSCMoveC+$00,x
		sta	!WSCMoveC+$00,x
		dex
		dex
		dex
		dex
		bpl	_WSCM2Init_00
		lda.w	$0000
		sep.b	%00100000			; [ A ] 8Bit.
		rts

WSCMove:	ldx.w	4*16-4				; EEE
		rep.b	%00100000			; [ A ] 16Bit.
_WSCMove00:	lda	!WSCMoveC+$00,x
		bpl	_WSCMove01
		and.w	$7FFF
		eor.w	$FFFF
		inc	a
_WSCMove01:	clc
		adc	!WSCMoveW+$00,x
		sta	!WSCMoveW+$00,x
		dex
		dex
		dex
		dex
		bpl	_WSCMove00
		lda.w	$0000
		sep.b	%00100000			; [ A ] 8Bit.
		rts


	;-----------------------------------------------: 
	;
	;	|@PUPURQǎvZB@|
	;
	;	Entry:	[ X,WC_Work+00,01 ] x [ Y,WC_Work+04,05 ]
	;	return:	[ WC_Work+08 - 0B ]
	;	Used:	[ A ],[ X,Y ],[ WC_Work+00,01,04,05,08 - 0F ]
	;	ӁF	[ WC_Work+00,01,04,05 ]͕ω܂B
	;		botvZǂƑIv(^^)
	;
WR_C16x16r:	stx	!WC_Work+00			; CPU:16x16=32Bit.
		sty	!WC_Work+04
WR_C16x16:	php
		rep.b	%00100000			; [ A ] 16Bit.
		sep.b	%00010000			; [ X,Y ] 8Bit.
		stz	!WC_Work+0Ah
		ldx	!WC_Work+04
		stx	@$4202
		ldx	!WC_Work+00
		stx	@$4203
		nop					; Nop x 4.
		nop
		nop
		nop
		lda.b	@$4216
		sta	!WC_Work+08
		ldx	!WC_Work+01
		stx	@$4203
		lda	!WC_Work+09			; Nop x 4.
		clc
		adc	@$4216
		sta	!WC_Work+09
		ldx	!WC_Work+05
		stx	@$4202
		ldx	!WC_Work+00
		stx	@$4203
		lda	!WC_Work+09			; Nop x 4.
		clc
		adc	@$4216
		sta	!WC_Work+09
		ldx	!WC_Work+01
		stx	@$4203
		nop					; Nop x 4.
		lda	!WC_Work+0Ah
		adc	@$4216
		sta	!WC_Work+0Ah
		lda.w	$0000				; K[B]̓NA邱ƁB
		plp
		rts

	;
	;	|@(0,0)SŊgkWϊ@|
	;	Entry:	[ WR_PX,WR_PY ]			{wxWB
	;		[ WR_XZoom,WR_YZoom ]		wxgk(0.5=0080H,1.0=0100H,2.0=0200H)
	;	Return:	[ WR_DX,WR_DY ]			ϊwxWB
	;	Used:	[ A,X,Y ]
	;	ӁF	ro\̃NbsOoȂ璍ӂ悤ɂˁB
	;
WR_Zoom:	php					; (0,0)SŊgkWϊB
		rep.b	00100000b			; [ A ] 16Bit.
		ldx	!WR_PX				; Matrix `
		ldy	!WR_XZoom			; wgkB
		jsr	WR_C16x16r
		lda	!WC_Work+09
		sta	!WR_DX				; cw쐬B
		ldx	!WR_PY				; Matrix c
		ldy	!WR_YZoom			; xgkB
		jsr	WR_C16x16r
		lda	!WC_Work+09
		sta	!WR_DY				; cx쐬B
		lda.w	$0000
		plp
		rts
	;
	;	|@(0,0)Sŉ]Wϊ@|
	;	Entry:	[ WR_PX,WR_PY ]			{wxWB
	;		[ WR_Sin,WR_Cos ]		rblB
	;	Return:	[ WR_DX,WR_DY ]			ϊwxWB
	;	Used:	[ A,X,Y ]
	;	ӁF	ro\̃NbsOoȂ璍ӂ悤ɂˁB
	;
WR_Rout:	php					; (0,0)Sŉ]WϊB
		rep.b	00100000b			; [ A ] 16Bit.
		ldx	!WR_PX				; Matrix `
		ldy	!WR_Cos
		jsr	WR_C16x16r
		lda	!WC_Work+09
		sta	!WR_Work			; p[NB
		ldx	!WR_PY				; Matrix a
		ldy	!WR_Sin
		jsr	WR_C16x16r
		lda	!WR_Work
		sec
		sbc	!WC_Work+09
		sta	!WR_DX				; cw쐬B
		ldx	!WR_PX				; Matrix b
		ldy	!WR_Sin
		jsr	WR_C16x16r
		lda	!WC_Work+09
		sta	!WR_Work			; p[NB
		ldx	!WR_PY				; Matrix c
		ldy	!WR_Cos
		jsr	WR_C16x16r
		lda	!WC_Work+09
		clc
		adc	!WR_Work			; p[NB
		sta	!WR_DY				; cx쐬B
		lda.w	$0000
		plp
		rts
	;
	;	|@(0,0)SŊgk]Wϊ@|
	;	Entry:	[ WR_PX,WR_PY ]			{wxWB
	;		[ WR_Sin,WR_Cos ]		rblB
	;		[ WR_XZoom,WR_YZoom ]		wxgk(0.5=0080H,1.0=0100H,2.0=0200H)
	;	Return:	[ WR_DX,WR_DY ]			ϊwxWB
	;	Used:	[ A,X,Y ]
	;	ӁF	gkOȉɂƂȂ邩ˁB
	;		ro\̃NbsOoȂ璍ӂ悤ɂˁB
	;
WR_ZoomRout:	php					; (0,0)Sŉ]WϊB
		sep.b	%00100000			; [ A ] 8Bit.
		jsr	WR_Zoom				; gkWϊB
		lda	!WR_DX
		sta	!WR_PX
		lda	!WR_DY
		sta	!WR_PY
		jsr	WR_Rout
		plp
		rts

	;===============================================:
	;	SQTUiK	512Bytes.
	;	+1:	00000001.00000000
	;	+:	00000000.xxxxxxxx
	;	 0:	00000000.00000000
	;	-:	11111111.xxxxxxxx
	;	-1:	11111111.00000000
WSin_Table:	dw	$0000,$0006,$000c,$0012,$0019,$001f,$0025,$002b	; /   0
		dw	$0031,$0038,$003e,$0044,$004a,$0050,$0056,$005c
		dw	$0061,$0067,$006d,$0073,$0078,$007e,$0083,$0088
		dw	$008e,$0093,$0098,$009d,$00a2,$00a7,$00ab,$00b0
		dw	$00b5,$00b9,$00bd,$00c1,$00c5,$00c9,$00cd,$00d1
		dw	$00d4,$00d8,$00db,$00de,$00e1,$00e4,$00e7,$00ea
		dw	$00ec,$00ee,$00f1,$00f3,$00f4,$00f6,$00f8,$00f9
		dw	$00fb,$00fc,$00fd,$00fe,$00fe,$00ff,$00ff,$00ff
WCos_Table:	dw	$0100,$00ff,$00ff,$00ff,$00fe,$00fe,$00fd,$00fc	; /  90
		dw	$00fb,$00f9,$00f8,$00f6,$00f4,$00f3,$00f1,$00ee
		dw	$00ec,$00ea,$00e7,$00e4,$00e1,$00de,$00db,$00d8
		dw	$00d4,$00d1,$00cd,$00c9,$00c5,$00c1,$00bd,$00b9
		dw	$00b5,$00b0,$00ab,$00a7,$00a2,$009d,$0098,$0093
		dw	$008e,$0088,$0083,$007e,$0078,$0073,$006d,$0067
		dw	$0061,$005c,$0056,$0050,$004a,$0044,$003e,$0038
		dw	$0031,$002b,$0025,$001f,$0019,$0012,$000c,$0006
		dw	$0000,$fffa,$fff4,$ffee,$ffe7,$ffe1,$ffdb,$ffd5	; / 180
		dw	$ffcf,$ffc8,$ffc2,$ffbc,$ffb6,$ffb0,$ffaa,$ffa4
		dw	$ff9f,$ff99,$ff93,$ff8d,$ff88,$ff82,$ff7d,$ff78
		dw	$ff72,$ff6d,$ff68,$ff63,$ff5e,$ff59,$ff55,$ff50
		dw	$ff4b,$ff47,$ff43,$ff3f,$ff3b,$ff37,$ff33,$ff2f
		dw	$ff2c,$ff28,$ff25,$ff22,$ff1f,$ff1c,$ff19,$ff16
		dw	$ff14,$ff12,$ff0f,$ff0d,$ff0c,$ff0a,$ff08,$ff07
		dw	$ff05,$ff04,$ff03,$ff02,$ff02,$ff01,$ff01,$ff01
		dw	$ff00,$ff01,$ff01,$ff01,$ff02,$ff02,$ff03,$ff04	; / 270
		dw	$ff05,$ff07,$ff08,$ff0a,$ff0c,$ff0d,$ff0f,$ff12
		dw	$ff14,$ff16,$ff19,$ff1c,$ff1f,$ff22,$ff25,$ff28
		dw	$ff2c,$ff2f,$ff33,$ff37,$ff3b,$ff3f,$ff43,$ff47
		dw	$ff4b,$ff50,$ff55,$ff59,$ff5e,$ff63,$ff68,$ff6d
		dw	$ff72,$ff78,$ff7d,$ff82,$ff88,$ff8d,$ff93,$ff99
		dw	$ff9f,$ffa4,$ffaa,$ffb0,$ffb6,$ffbc,$ffc2,$ffc8
		dw	$ffcf,$ffd5,$ffdb,$ffe1,$ffe7,$ffee,$fff4,$fffa
		dw	$0000,$0006,$000c,$0012,$0019,$001f,$0025,$002b	; /   0
		dw	$0031,$0038,$003e,$0044,$004a,$0050,$0056,$005c
		dw	$0061,$0067,$006d,$0073,$0078,$007e,$0083,$0088
		dw	$008e,$0093,$0098,$009d,$00a2,$00a7,$00ab,$00b0
		dw	$00b5,$00b9,$00bd,$00c1,$00c5,$00c9,$00cd,$00d1
		dw	$00d4,$00d8,$00db,$00de,$00e1,$00e4,$00e7,$00ea
		dw	$00ec,$00ee,$00f1,$00f3,$00f4,$00f6,$00f8,$00f9
		dw	$00fb,$00fc,$00fd,$00fe,$00fe,$00ff,$00ff,$00ff

	;-----------------------------------------------: 
WFont_Data00:						; A 14P.
WF_A:		equ	-0030
		dw		    WF_A-04,-08,WF_A+00,-08,WF_A+04,-08
		dw	WF_A-08,-04,					WF_A+08,-04
		dw	WF_A-08,+00,WF_A-04,+00,WF_A+00,+00,WF_A+04,+00,WF_A+08,+00
		dw	WF_A-08,+04,					WF_A+08,+04
		dw	WF_A-08,+08,					WF_A+08,+08
WFont_Data01:						; 8 19P.
WF_8:		equ	-0006
		dw	WF_8-08,-08,WF_8-04,-08,WF_8+00,-08,WF_8+04,-08,WF_8+08,-08
		dw	WF_8-08,-04,					WF_8+08,-04
		dw	WF_8-08,+00,WF_8-04,+00,WF_8+00,+00,WF_8+04,+00,WF_8+08,+00
		dw	WF_8-08,+04,					WF_8+08,+04
		dw	WF_8-08,+08,WF_8-04,+08,WF_8+00,+08,WF_8+04,+08,WF_8+08,+08
WFont_Data02:						; 1  8P.
WF_1:		equ	+0014
		dw				    WF_1+00,-08
		dw			WF_1-04,-04,WF_1+00,-04
		dw				    WF_1+00,+00
		dw				    WF_1+00,+04
		dw			WF_1-04,+08,WF_1+00,+08,WF_1+04,+08
WFont_Data03:						; 6 18P.
WF_6:		equ	+0034
		dw	WF_6-08,-08,WF_6-04,-08,WF_6+00,-08,WF_6+04,-08,WF_6+08,-08
		dw	WF_6-08,-04
		dw	WF_6-08,+00,WF_6-04,+00,WF_6+00,+00,WF_6+04,+00,WF_6+08,+00
		dw	WF_6-08,+04,					WF_6+08,+04
		dw	WF_6-08,+08,WF_6-04,+08,WF_6+00,+08,WF_6+04,+08,WF_6+08,+08

	;-----------------------------------------------: 
WColor:		bin	WA816_T.16C			; PUFFt@CB
W4CBGFont:	bin	WA816_T.4F			; SFtHgt@CB
WSPFont:	bin	WA816_T.SP			; PUFrot@CB
WBG_Map:	bin	WA816_T.MAP			; aflt@CB

	;-----------------------------------------------: 
		org	$00FFE4
		dw	Copro_Address			; Rvߊ荞݁B
		dw	Break_Address			; uCNߊ荞݁B
		dw	Reset_Address			; VXeُ튄荞݂łB
		dw	NMI_Jump			; mlh荞݁B
		dw	Reset_Address			; Zbg荞݁B
		dw	IRQ_Select			; hqp荞݁B
		org	$FFF4
		dw	Copro_Address			; Rvߊ荞݁B
		dw	Break_Address			; uCNߊ荞݁B
		dw	Reset_Address			; VXeُ튄荞݂łB
		dw	NMI_Jump			; mlh荞݁B
		dw	Reset_Address			; Zbg荞݁B
		dw	IRQ_Select			; hqp荞݁B

