misc/vcntest.s
;========================================================================================
;  vcntest.s
;  Copyright (C) 2003-2019 Makoto Kamada
;
;  This file is part of the XEiJ (X68000 Emulator in Java).
;  You can use, modify and redistribute the XEiJ if the conditions are met.
;  Read the XEiJ License for more details.
;  https://stdkmd.net/xeij/
;========================================================================================

	.include	doscall.mac
	.include	iocscall.mac

setrgb	.macro	rgb,sym
&sym = ((((rgb>>8).and.255)>>3)<<11).or.((((rgb>>16).and.255)>>3)<<6).or.(((rgb.and.255)>>3)<<1)
	.endm

	setrgb	$F0F8FF,ALICEBLUE
	setrgb	$FAEBD7,ANTIQUEWHITE
	setrgb	$00FFFF,AQUA
	setrgb	$7FFFD4,AQUAMARINE
	setrgb	$F0FFFF,AZURE
	setrgb	$F5F5DC,BEIGE
	setrgb	$FFE4C4,BISQUE
	setrgb	$000000,BLACK
	setrgb	$FFEBCD,BLANCHEDALMOND
	setrgb	$0000FF,BLUE
	setrgb	$8A2BE2,BLUEVIOLET
	setrgb	$A52A2A,BROWN
	setrgb	$DEB887,BURLYWOOD
	setrgb	$5F9EA0,CADETBLUE
	setrgb	$7FFF00,CHARTREUSE
	setrgb	$D2691E,CHOCOLATE
	setrgb	$FF7F50,CORAL
	setrgb	$6495ED,CORNFLOWERBLUE
	setrgb	$FFF8DC,CORNSILK
	setrgb	$DC143C,CRIMSON
	setrgb	$00FFFF,CYAN
	setrgb	$00008B,DARKBLUE
	setrgb	$008B8B,DARKCYAN
	setrgb	$B8860B,DARKGOLDENROD
	setrgb	$A9A9A9,DARKGRAY
	setrgb	$006400,DARKGREEN
	setrgb	$BDB76B,DARKKHAKI
	setrgb	$8B008B,DARKMAGENTA
	setrgb	$556B2F,DARKOLIVEGREEN
	setrgb	$FF8C00,DARKORANGE
	setrgb	$9932CC,DARKORCHID
	setrgb	$8B0000,DARKRED
	setrgb	$E9967A,DARKSALMON
	setrgb	$8FBC8F,DARKSEAGREEN
	setrgb	$483D8B,DARKSLATEBLUE
	setrgb	$2F4F4F,DARKSLATEGRAY
	setrgb	$00CED1,DARKTURQUOISE
	setrgb	$9400D3,DARKVIOLET
	setrgb	$FF1493,DEEPPINK
	setrgb	$00BFFF,DEEPSKYBLUE
	setrgb	$696969,DIMGRAY
	setrgb	$1E90FF,DODGERBLUE
	setrgb	$B22222,FIREBRICK
	setrgb	$FFFAF0,FLORALWHITE
	setrgb	$228B22,FORESTGREEN
	setrgb	$FF00FF,FUCHSIA
	setrgb	$DCDCDC,GAINSBORO
	setrgb	$F8F8FF,GHOSTWHITE
	setrgb	$FFD700,GOLD
	setrgb	$DAA520,GOLDENROD
	setrgb	$808080,GRAY
	setrgb	$008000,GREEN
	setrgb	$ADFF2F,GREENYELLOW
	setrgb	$F0FFF0,HONEYDEW
	setrgb	$FF69B4,HOTPINK
	setrgb	$CD5C5C,INDIANRED
	setrgb	$4B0082,INDIGO
	setrgb	$FFFFF0,IVORY
	setrgb	$F0E68C,KHAKI
	setrgb	$E6E6FA,LAVENDER
	setrgb	$FFF0F5,LAVENDERBLUSH
	setrgb	$7CFC00,LAWNGREEN
	setrgb	$FFFACD,LEMONCHIFFON
	setrgb	$ADD8E6,LIGHTBLUE
	setrgb	$F08080,LIGHTCORAL
	setrgb	$E0FFFF,LIGHTCYAN
	setrgb	$FAFAD2,LIGHTGOLDENRODYELLOW
	setrgb	$90EE90,LIGHTGREEN
	setrgb	$D3D3D3,LIGHTGREY
	setrgb	$FFB6C1,LIGHTPINK
	setrgb	$FFA07A,LIGHTSALMON
	setrgb	$20B2AA,LIGHTSEAGREEN
	setrgb	$87CEFA,LIGHTSKYBLUE
	setrgb	$778899,LIGHTSLATEGRAY
	setrgb	$B0C4DE,LIGHTSTEELBLUE
	setrgb	$FFFFE0,LIGHTYELLOW
	setrgb	$00FF00,LIME
	setrgb	$32CD32,LIMEGREEN
	setrgb	$FAF0E6,LINEN
	setrgb	$FF00FF,MAGENTA
	setrgb	$800000,MAROON
	setrgb	$66CDAA,MEDIUMAQUAMARINE
	setrgb	$0000CD,MEDIUMBLUE
	setrgb	$BA55D3,MEDIUMORCHID
	setrgb	$9370DB,MEDIUMPURPLE
	setrgb	$3CB371,MEDIUMSEAGREEN
	setrgb	$7B68EE,MEDIUMSLATEBLUE
	setrgb	$00FA9A,MEDIUMSPRINGGREEN
	setrgb	$48D1CC,MEDIUMTURQUOISE
	setrgb	$C71585,MEDIUMVIOLETRED
	setrgb	$191970,MIDNIGHTBLUE
	setrgb	$F5FFFA,MINTCREAM
	setrgb	$FFE4E1,MISTYROSE
	setrgb	$FFE4B5,MOCCASIN
	setrgb	$FFDEAD,NAVAJOWHITE
	setrgb	$000080,NAVY
	setrgb	$FDF5E6,OLDLACE
	setrgb	$808000,OLIVE
	setrgb	$6B8E23,OLIVEDRAB
	setrgb	$FFA500,ORANGE
	setrgb	$FF4500,ORANGERED
	setrgb	$DA70D6,ORCHID
	setrgb	$EEE8AA,PALEGOLDENROD
	setrgb	$98FB98,PALEGREEN
	setrgb	$AFEEEE,PALETURQUOISE
	setrgb	$DB7093,PALEVIOLETRED
	setrgb	$FFEFD5,PAPAYAWHIP
	setrgb	$FFDAB9,PEACHPUFF
	setrgb	$CD853F,PERU
	setrgb	$FFC0CB,PINK
	setrgb	$DDA0DD,PLUM
	setrgb	$B0E0E6,POWDERBLUE
	setrgb	$800080,PURPLE
	setrgb	$FF0000,RED
	setrgb	$BC8F8F,ROSYBROWN
	setrgb	$4169E1,ROYALBLUE
	setrgb	$8B4513,SADDLEBROWN
	setrgb	$FA8072,SALMON
	setrgb	$F4A460,SANDYBROWN
	setrgb	$2E8B57,SEAGREEN
	setrgb	$FFF5EE,SEASHELL
	setrgb	$A0522D,SIENNA
	setrgb	$C0C0C0,SILVER
	setrgb	$87CEEB,SKYBLUE
	setrgb	$6A5ACD,SLATEBLUE
	setrgb	$708090,SLATEGRAY
	setrgb	$FFFAFA,SNOW
	setrgb	$00FF7F,SPRINGGREEN
	setrgb	$4682B4,STEELBLUE
	setrgb	$D2B48C,TAN
	setrgb	$008080,TEAL
	setrgb	$D8BFD8,THISTLE
	setrgb	$FF6347,TOMATO
	setrgb	$40E0D0,TURQUOISE
	setrgb	$EE82EE,VIOLET
	setrgb	$F5DEB3,WHEAT
	setrgb	$FFFFFF,WHITE
	setrgb	$F5F5F5,WHITESMOKE
	setrgb	$FFFF00,YELLOW
	setrgb	$9ACD32,YELLOWGREEN

	setrgb	$000000,TRANSPARENT

	.text

	move.w	#3,-(sp)
	move.w	#14,-(sp)
	DOS	_CONCTRL
	addq.l	#4,sp

	moveq.l	#0,d1		;software keyboard off
	moveq.l	#0,d2
	IOCS	_SKEY_MOD
	IOCS	_MS_INIT
	IOCS	_MS_CURON
loop:
	moveq.l	#16,d1
;	IOCS	_CRTMOD
	bsr	crtmod
	IOCS	_B_CUROFF

refresh:
	lea.l	menus,a2
@@:	movea.l	(a2)+,a1
	bsr	print_menu
	tst.l	(a2)
	bne	@b
	lea.l	menu_test,a1
	bsr	print_menu
	lea.l	menu_reset,a1
	bsr	print_menu
	lea.l	menu_exit,a1
	bsr	print_menu

update:
	bsr	calc_vcn4
	lea.l	regs_hex4_0,a1
	bsr	hex4
	bsr	calc_vcn5
	lea.l	regs_hex4_1,a1
	bsr	hex4
	bsr	calc_vcn6
	lea.l	regs_hex4_2,a1
	bsr	hex4
;		  louirb10
	moveq.l	#%00000001,d1	;italic cyan
	bsr	b_color
	moveq.l	#colregs,d1
	moveq.l	#rowregs,d2
	bsr	b_locate
	lea.l	string_regs,a1
	bsr	b_print

wait1:
	bsr	inkey
	cmp.w	#$011B,d0
	beq	abort
	tst.l	d0
	bne	draw
	IOCS	_MS_GETDT
	tst.b	d0		;right button
	bmi	abort
	tst.w	d0		;left button
	bpl	wait1
	IOCS	_MS_CURGT
	move.l	d0,d1
	move.l	d0,d2
	swap.w	d1
	ext.l	d1		;x
	ext.l	d2		;y
	divs.w	#6,d1
	divs.w	#6,d2
	ext.l	d1		;col
	ext.l	d2		;row

	lea.l	menus,a2
@@:	movea.l	(a2)+,a1
	bsr	select_menu
	bpl	update
	tst.l	(a2)
	bne	@b

	lea.l	menu_exit,a1
	bsr	select_menu
	bpl	abort

	lea.l	menu_reset,a1
	bsr	select_menu
	bmi	@f
;col0
	move.w	#0,menu_spprw
	move.w	#1,menu_txprw
	move.w	#2,menu_grprw
	move.w	#0,menu_gr1st
	move.w	#1,menu_gr2nd
	move.w	#2,menu_gr3rd
	move.w	#3,menu_gr4th
;col1
	move.w	#1,menu_spon
	move.w	#1,menu_txon
	move.w	#1,menu_gr1on
	move.w	#1,menu_gr2on
	move.w	#1,menu_gr3on
	move.w	#1,menu_gr4on
	move.w	#0,menu_grxon
;col2
	move.w	#0,menu_grmode
	move.w	#0,menu_ahon
	move.w	#0,menu_exon
	move.w	#1,menu_exarea
	move.w	#2,menu_extranslucent
;col3
	move.w	#0,menu_txtfill
	move.w	#3,menu_sprfill
	move.w	#0,menu_sprprw
	move.w	#5,menu_bg0fill
	move.w	#7,menu_bg1fill
;col4
	move.w	#0,menu_txpalet00
	move.w	#2,menu_txpalet01
	move.w	#1,menu_sppalet10
	move.w	#1,menu_sppalet11
	move.w	#1,menu_sppalet20
	move.w	#1,menu_sppalet21
	move.w	#1,menu_sppalet30
	move.w	#1,menu_sppalet31
	move.w	#0,menu_bg0on
	move.w	#0,menu_bg1on
;col5
	move.w	#0,menu_gr0fill
	move.w	#0,menu_gr1fill
	move.w	#0,menu_gr2fill
	move.w	#0,menu_gr3fill
;col6
	move.w	#0,menu_grpalet0000
	move.w	#2,menu_grpalet0001
	move.w	#0,menu_grpalet0002
	move.w	#0,menu_grpalet0003
	move.w	#0,menu_grpalet0004
	move.w	#0,menu_grpalet0005
	move.w	#0,menu_grpalet0006
	move.w	#0,menu_grpalet0007
	move.w	#0,menu_grpalet0010
	move.w	#0,menu_grpalet0011
	move.w	#0,menu_grpalet2020
	move.w	#0,menu_grpalet2121

	bra	refresh
@@:

	lea.l	menu_test,a1
	bsr	select_menu
	bmi	wait1
draw:

	move.w	menu_grmode,d0
	add.w	d0,d0
	lea.l	grmode_to_crtmod,a0
	move.w	(a0,d0.w),d1
	IOCS	_CRTMOD
	IOCS	_B_CUROFF
	moveq.l	#0<<16|0,d1		;x,y
	IOCS	_MS_CURST
	IOCS	_G_CLR_ON
	IOCS	_SP_INIT
	IOCS	_SP_ON

	bsr	calc_vcn4
	IOCS	_G_MOD

	bsr	calc_vcn5
	IOCS	_PRIORITY

	bsr	calc_vcn6
	IOCS	_CRTMOD2

;txtfill
  .if 0
;ROM 1.3 or IOCS.X needed
	move.w	#$FFFF,-(sp)	;line style
	move.w	#256,-(sp)	;height
	move.w	#256,-(sp)	;width
	move.w	#0,-(sp)	;y
	move.w	#0,-(sp)	;x
	move.w	menu_txtfill,-(sp)	;plane select
	ori.w	#$8000,(sp)	;multiple plane mode
	movea.l	sp,a1
	IOCS	_TXFILL
	lea.l	12(sp),sp
  .else
	moveq.l	#3,d1
1:	move.w	menu_txtfill,d0	;plane select
	btst.l	d1,d0
	beq	2f
	move.w	#$FFFF,-(sp)	;line style
	move.w	#256,-(sp)	;height
	move.w	#256,-(sp)	;width
	move.w	#0,-(sp)	;y
	move.w	#0,-(sp)	;x
	move.w	d1,-(sp)	;plane select
	movea.l	sp,a1
	IOCS	_TXFILL
	lea.l	12(sp),sp
2:	dbra	d1,1b
  .endif

;sprfill
	move.l	#1,d1		;pattern number 1
	move.l	#1,d2		;size 16x16
	moveq.l	#1,d0
	and.w	menu_sprfill,d0	;palet code
	lsl.w	#2,d0
	lea.l	sp_pats,a1
	movea.l	(a1,d0.w),a1	;pattern
	IOCS	_SP_DEFCG
	moveq.l	#0,d0
	move.w	menu_sprfill,d0
	lsr.w	#1,d0		;palet block
	lsl.w	#8,d0
	move.b	#1,d0		;pattern number 1
	movea.l	d0,a4		;palet block,pattern number 1
	moveq.l	#0,d0
	move.w	menu_sprprw,d0
	movea.l	d0,a5		;priority
	movea.l	#1<<31|64,a1	;ignore vsync 1,sprite number 64..127
	movea.l	#16+16*4,a3	;y
3:	movea.l	#16+16*4,a2	;x
2:	move.l	a1,d1		;ignore vsync 1,sprite number 64..127
	move.l	a2,d2		;x
	move.l	a3,d3		;y
	move.l	a4,d4		;palet block,pattern number 1
	move.l	a5,d5		;priority
	IOCS	_SP_REGST
	addq.l	#1,a1		;ignore vsync 1,sprite number 64..127
	adda.l	#16,a2		;x
	cmpa.l	#16+16*12,a2
	blo	2b
	adda.l	#16,a3		;y
	cmpa.l	#16+16*12,a3
	blo	3b

;bg0fill
	tst.w	menu_bg0on
	bne	1f
	move.l	#0,d1		;BG page number 0
	move.l	#0,d2		;BG text area 0
	move.l	#0,d3		;off
	IOCS	_BGCTRLST
	bra	2f
1:	move.l	#0,d1		;BG page number 0
	move.l	#0,d2		;BG text area 0
	move.l	#1,d3		;on
	IOCS	_BGCTRLST
	move.l	#2,d1		;pattern number 2
	move.l	#0,d2		;size 8x8
	moveq.l	#1,d0
	and.w	menu_bg0fill,d0	;palet code
	lsl.w	#2,d0
	lea.l	sp_pats,a1
	movea.l	(a1,d0.w),a1	;pattern
	IOCS	_SP_DEFCG
	move.l	#0,d1		;BG text area 0
	moveq.l	#0,d0
	move.w	menu_bg0fill,d0
	lsr.w	#1,d0		;palet block
	lsl.w	#8,d0
	move.b	#2,d0		;palet block,pattern number 2
	or.w	#0<<15|0<<14,d0	;hrev 0,vrev 0,palet block,pattern number 2
	move.l	d0,d2		;hrev 0,vrev 0,palet block,pattern number 2
	IOCS	_BGTEXTCL
2:

;bg1fill
	tst.w	menu_bg1on
	bne	1f
	move.l	#1,d1		;BG page number 1
	move.l	#1,d2		;BG text area 1
	move.l	#0,d3		;off
	IOCS	_BGCTRLST
	bra	2f
1:	move.l	#1,d1		;BG page number 1
	move.l	#1,d2		;BG text area 1
	move.l	#1,d3		;on
	IOCS	_BGCTRLST
	move.l	#3,d1		;pattern number 3
	move.l	#0,d2		;size 8x8
	moveq.l	#1,d0
	and.w	menu_bg1fill,d0	;palet code
	lsl.w	#2,d0
	lea.l	sp_pats,a1
	movea.l	(a1,d0.w),a1	;pattern
	IOCS	_SP_DEFCG
	move.l	#1,d1		;BG text area 1
	moveq.l	#0,d0
	move.w	menu_bg1fill,d0
	lsr.w	#1,d0		;palet block
	lsl.w	#8,d0
	move.b	#3,d0		;palet block,pattern number 3
	or.w	#0<<15|0<<14,d0	;hrev 0,vrev 0,palet block,pattern number 3
	move.l	d0,d2		;hrev 0,vrev 0,palet block,pattern number 3
	IOCS	_BGTEXTCL
2:

;txpalet00
	move.l	#0,d1		;palet code 0
	move.w	menu_txpalet00,d0
	add.w	d0,d0
	lea.l	txpalet00_to_color,a0
	move.w	(a0,d0.w),d2			;color code
	IOCS	_TPALET2

;txpalet01
	move.l	#1,d1		;palet code 1
	move.w	menu_txpalet01,d0
	add.w	d0,d0
	lea.l	txpalet01_to_color,a0
	move.w	(a0,d0.w),d2			;color code
	IOCS	_TPALET2

;sppalet10
	move.l	#1<<31|1<<4|0,d1	;ignore vsync 1,palet block 1,palet code 0
	move.l	#0,d2		;palet block is specified by d1
	move.w	menu_sppalet10,d0
	add.w	d0,d0
	lea.l	sppalet10_to_color,a0
	move.w	(a0,d0.w),d3			;color code
	IOCS	_SPALET

;sppalet11
	move.l	#1<<31|1<<4|1,d1	;ignore vsync 1,palet block 1,palet code 1
	move.l	#0,d2		;palet block is specified by d1
	move.w	menu_sppalet11,d0
	add.w	d0,d0
	lea.l	sppalet11_to_color,a0
	move.w	(a0,d0.w),d3			;color code
	IOCS	_SPALET

;sppalet20
	move.l	#1<<31|2<<4|0,d1	;ignore vsync 1,palet block 2,palet code 0
	move.l	#0,d2		;palet block is specified by d1
	move.w	menu_sppalet20,d0
	add.w	d0,d0
	lea.l	sppalet20_to_color,a0
	move.w	(a0,d0.w),d3			;color code
	IOCS	_SPALET

;sppalet21
	move.l	#1<<31|2<<4|1,d1	;ignore vsync 1,palet block 2,palet code 1
	move.l	#0,d2		;palet block is specified by d1
	move.w	menu_sppalet21,d0
	add.w	d0,d0
	lea.l	sppalet21_to_color,a0
	move.w	(a0,d0.w),d3			;color code
	IOCS	_SPALET

;sppalet30
	move.l	#1<<31|3<<4|0,d1	;ignore vsync 1,palet block 3,palet code 0
	move.l	#0,d2		;palet block is specified by d1
	move.w	menu_sppalet30,d0
	add.w	d0,d0
	lea.l	sppalet30_to_color,a0
	move.w	(a0,d0.w),d3			;color code
	IOCS	_SPALET

;sppalet31
	move.l	#1<<31|3<<4|1,d1	;ignore vsync 1,palet block 3,palet code 1
	move.l	#0,d2		;palet block is specified by d1
	move.w	menu_sppalet31,d0
	add.w	d0,d0
	lea.l	sppalet31_to_color,a0
	move.w	(a0,d0.w),d3			;color code
	IOCS	_SPALET

;gr0fill
	moveq.l	#0,d1
	IOCS	_APAGE
	tst.l	d0
	bmi	@f
	move.w	menu_gr0fill,d0
	add.w	d0,d0
	lea.l	gr0fill_to_palet,a0
	move.w	(a0,d0.w),-(sp)	;palet code
	move.w	#256-1,-(sp)	;y2
	move.w	#256-1,-(sp)	;x2
	move.w	#0,-(sp)	;y1
	move.w	#0,-(sp)	;x1
	movea.l	sp,a1
	IOCS	_FILL
	lea.l	10(sp),sp
@@:

;gr1fill
	moveq.l	#1,d1
	IOCS	_APAGE
	tst.l	d0
	bmi	@f
	move.w	menu_gr1fill,d0
	add.w	d0,d0
	lea.l	gr1fill_to_palet,a0
	move.w	(a0,d0.w),-(sp)	;palet code
	move.w	#256-1,-(sp)	;y2
	move.w	#256-1,-(sp)	;x2
	move.w	#0,-(sp)	;y1
	move.w	#0,-(sp)	;x1
	movea.l	sp,a1
	IOCS	_FILL
	lea.l	10(sp),sp
@@:

;gr2fill
	moveq.l	#2,d1
	IOCS	_APAGE
	tst.l	d0
	bmi	@f
	move.w	menu_gr2fill,d0
	add.w	d0,d0
	lea.l	gr2fill_to_palet,a0
	move.w	(a0,d0.w),-(sp)	;palet code
	move.w	#256-1,-(sp)	;y2
	move.w	#256-1,-(sp)	;x2
	move.w	#0,-(sp)	;y1
	move.w	#0,-(sp)	;x1
	movea.l	sp,a1
	IOCS	_FILL
	lea.l	10(sp),sp
@@:

;gr3fill
	moveq.l	#3,d1
	IOCS	_APAGE
	tst.l	d0
	bmi	@f
	move.w	menu_gr3fill,d0
	add.w	d0,d0
	lea.l	gr3fill_to_palet,a0
	move.w	(a0,d0.w),-(sp)	;palet code
	move.w	#256-1,-(sp)	;y2
	move.w	#256-1,-(sp)	;x2
	move.w	#0,-(sp)	;y1
	move.w	#0,-(sp)	;x1
	movea.l	sp,a1
	IOCS	_FILL
	lea.l	10(sp),sp
@@:

;grpalet0000
	move.l	#0,d1			;palet code
	move.w	menu_grpalet0000,d0
	add.w	d0,d0
	lea.l	grpalet0000_to_color,a0
	move.w	(a0,d0.w),d2		;color code
	IOCS	_GPALET

;grpalet0001
	move.l	#1,d1			;palet code
	move.w	menu_grpalet0001,d0
	add.w	d0,d0
	lea.l	grpalet0001_to_color,a0
	move.w	(a0,d0.w),d2		;color code
	IOCS	_GPALET

;grpalet0002
	move.l	#2,d1			;palet code
	move.w	menu_grpalet0002,d0
	add.w	d0,d0
	lea.l	grpalet0002_to_color,a0
	move.w	(a0,d0.w),d2		;color code
	IOCS	_GPALET

;grpalet0003
	move.l	#3,d1			;palet code
	move.w	menu_grpalet0003,d0
	add.w	d0,d0
	lea.l	grpalet0003_to_color,a0
	move.w	(a0,d0.w),d2		;color code
	IOCS	_GPALET

;grpalet0004
	move.l	#4,d1			;palet code
	move.w	menu_grpalet0004,d0
	add.w	d0,d0
	lea.l	grpalet0004_to_color,a0
	move.w	(a0,d0.w),d2		;color code
	IOCS	_GPALET

;grpalet0005
	move.l	#5,d1			;palet code
	move.w	menu_grpalet0005,d0
	add.w	d0,d0
	lea.l	grpalet0005_to_color,a0
	move.w	(a0,d0.w),d2		;color code
	IOCS	_GPALET

;grpalet0006
	move.l	#6,d1			;palet code
	move.w	menu_grpalet0006,d0
	add.w	d0,d0
	lea.l	grpalet0006_to_color,a0
	move.w	(a0,d0.w),d2		;color code
	IOCS	_GPALET

;grpalet0007
	move.l	#7,d1			;palet code
	move.w	menu_grpalet0007,d0
	add.w	d0,d0
	lea.l	grpalet0007_to_color,a0
	move.w	(a0,d0.w),d2		;color code
	IOCS	_GPALET

;grpalet0010
	move.l	#$10,d1			;palet code
	move.w	menu_grpalet0010,d0
	add.w	d0,d0
	lea.l	grpalet0010_to_color,a0
	move.w	(a0,d0.w),d2		;color code
	IOCS	_GPALET

;grpalet0011
	move.l	#$11,d1			;palet code
	move.w	menu_grpalet0011,d0
	add.w	d0,d0
	lea.l	grpalet0011_to_color,a0
	move.w	(a0,d0.w),d2		;color code
	IOCS	_GPALET

;grpalet2020
	move.w	#$2020,d1		;palet code
	move.w	menu_grpalet2020,d0
	add.w	d0,d0
	lea.l	grpalet2020_to_color,a0
	move.w	(a0,d0.w),d2		;color code
	IOCS	_GPALET

;grpalet2121
	move.w	#$2121,d1		;palet code
	move.w	menu_grpalet2121,d0
	add.w	d0,d0
	lea.l	grpalet2121_to_color,a0
	move.w	(a0,d0.w),d2		;color code
	IOCS	_GPALET

wait2:
	bsr	inkey
	cmp.w	#$011B,d0
	beq	abort
	tst.l	d0
	bne	loop
	IOCS	_MS_GETDT
	tst.b	d0		;right button
	bmi	abort
	tst.w	d0		;left button
	bpl	wait2
@@:	IOCS	_MS_GETDT
	tst.w	d0		;left button
	bmi	@b
	bra	loop

abort:
	IOCS	_MS_CUROF
	moveq.l	#16,d1
;	IOCS	_CRTMOD
	bsr	crtmod
	moveq.l	#-1,d1		;software keyboard auto
	moveq.l	#0,d2
	IOCS	_SKEY_MOD

	clr.w	-(sp)
	move.w	#14,-(sp)
	DOS	_CONCTRL
	addq.l	#4,sp

	DOS	_EXIT

calc_vcn4:
	movem.l	d0/a0,-(sp)
	moveq.l	#0,d1

	move.w	menu_grmode,d0
	add.w	d0,d0
	lea.l	grmode_to_vcn4,a0
	or.w	(a0,d0.w),d1

	movem.l	(sp)+,d0/a0
	rts

calc_vcn5:
	movem.l	d0/a0,-(sp)
	moveq.l	#0,d1

	move.w	menu_spprw,d0
	add.w	d0,d0
	lea.l	spprw_to_vcn5,a0
	or.w	(a0,d0.w),d1

	move.w	menu_txprw,d0
	add.w	d0,d0
	lea.l	txprw_to_vcn5,a0
	or.w	(a0,d0.w),d1

	move.w	menu_grprw,d0
	add.w	d0,d0
	lea.l	grprw_to_vcn5,a0
	or.w	(a0,d0.w),d1

	move.w	menu_gr1st,d0
	add.w	d0,d0
	lea.l	gr1st_to_vcn5,a0
	or.w	(a0,d0.w),d1

	move.w	menu_gr2nd,d0
	add.w	d0,d0
	lea.l	gr2nd_to_vcn5,a0
	or.w	(a0,d0.w),d1

	move.w	menu_gr3rd,d0
	add.w	d0,d0
	lea.l	gr3rd_to_vcn5,a0
	or.w	(a0,d0.w),d1

	move.w	menu_gr4th,d0
	add.w	d0,d0
	lea.l	gr4th_to_vcn5,a0
	or.w	(a0,d0.w),d1

	movem.l	(sp)+,d0/a0
	rts

calc_vcn6:
	movem.l	d0/a0,-(sp)
	moveq.l	#0,d1

	move.w	menu_spon,d0
	add.w	d0,d0
	lea.l	spon_to_vcn6,a0
	or.w	(a0,d0.w),d1

	move.w	menu_txon,d0
	add.w	d0,d0
	lea.l	txon_to_vcn6,a0
	or.w	(a0,d0.w),d1

	move.w	menu_gr1on,d0
	add.w	d0,d0
	lea.l	gr1on_to_vcn6,a0
	or.w	(a0,d0.w),d1

	move.w	menu_gr2on,d0
	add.w	d0,d0
	lea.l	gr2on_to_vcn6,a0
	or.w	(a0,d0.w),d1

	move.w	menu_gr3on,d0
	add.w	d0,d0
	lea.l	gr3on_to_vcn6,a0
	or.w	(a0,d0.w),d1

	move.w	menu_gr4on,d0
	add.w	d0,d0
	lea.l	gr4on_to_vcn6,a0
	or.w	(a0,d0.w),d1

	move.w	menu_grxon,d0
	add.w	d0,d0
	lea.l	grxon_to_vcn6,a0
	or.w	(a0,d0.w),d1

	move.w	menu_ahon,d0
	add.w	d0,d0
	lea.l	ahon_to_vcn6,a0
	or.w	(a0,d0.w),d1

	move.w	menu_exon,d0
	add.w	d0,d0
	lea.l	exon_to_vcn6,a0
	or.w	(a0,d0.w),d1

	move.w	menu_exarea,d0
	add.w	d0,d0
	lea.l	exarea_to_vcn6,a0
	or.w	(a0,d0.w),d1

	move.w	menu_extranslucent,d0
	add.w	d0,d0
	lea.l	extranslucent_to_vcn6,a0
	or.w	(a0,d0.w),d1

9:

	movem.l	(sp)+,d0/a0
	rts

;<d1.w:number
;<a1.l:buffer
hex4:
	movem.l	d0/d2,-(sp)
	moveq.l	#4-1,d2
2:	rol.w	#4,d1
	moveq.l	#$0F,d0
	and.b	d1,d0
	cmp.b	#10,d0
	blo	@f
	addq.b	#7,d0
@@:	add.b	#'0',d0
	move.b	d0,(a1)+
	dbra	d2,2b
	movem.l	(sp)+,d0/d2
	rts

inkey:
	movem.l	d1,-(sp)
	moveq.l	#0,d1
	bra	2f
1:	IOCS	_B_KEYINP
	move.l	d0,d1
2:	IOCS	_B_KEYSNS
	tst.l	d0
	bne	1b
	move.l	d1,d0
	movem.l	(sp)+,d1
	rts

;<d1.w:col
;<d2.w:row=row0+2*value
;<a1.l:menu
;	0.w	current
;	4.w	col0
;	6.w	row0
;	8.w	cols
;	10.w	values
;>d0.w:value
select_menu:
	moveq.l	#0,d0
	move.w	d1,d0
	sub.w	4(a1),d0	;col0
	blo	8f
	cmp.w	8(a1),d0	;cols
	bhs	8f
	move.w	d2,d0		;row0+2*value
	sub.w	6(a1),d0	;row0
				;2*value
	blo	8f
	lsr.w	#1,d0		;2*value/2=value
	cmp.w	10(a1),d0	;value-values
	bhs	8f
	move.w	d0,(a1)		;current
	bsr	print_menu
9:	tst.l	d0
	rts
8:	moveq.l	#-1,d0
	bra	9b

;<a1.l:menu
;	0.w	current
;	4.w	col0
;	6.w	row0
;	8.w	cols
;	10.w	values
;	12.b[(cols+1)*rows]	texts
print_menu:
	movem.l	d0-d7/a0-a6,-(sp)
	movea.l	a1,a4

	moveq.l	#0,d6		;value
6:
	move.w	4(a4),d1	;col0
	move.w	6(a4),d2	;row0
	add.w	d6,d2
	add.w	d6,d2		;row0+2*value
;	IOCS	_B_LOCATE
	bsr	b_locate

	moveq.l	#%0011,d1	;white
	cmp.w	(a4),d6		;value-current
	bne	@f
;		  louirb10
	moveq.l	#%00010010,d1	;italic yellow
@@:
;	IOCS	_B_COLOR
	bsr	b_color

	move.w	8(a4),d0	;cols
	addq.w	#1,d0		;cols+1
	mulu.w	d6,d0		;(cols+1)*value
	lea.l	12(a4,d0.w),a1	;12+(cols+1)*value
;	IOCS	_B_PRINT
	bsr	b_print

	addq.w	#1,d6		;value
	cmp.w	10(a4),d6	;value-values
	blo	6b

;	moveq.l	#3,d1		;white
;	IOCS	_B_COLOR
;	IOCS	_B_CUROFF

	movem.l	(sp)+,d0-d7/a0-a6
	rts

waitkey:
	movem.l	d0,-(sp)
@@:	IOCS	_B_KEYSNS
	tst.l	d0
	beq	@b
	IOCS	_B_KEYINP
	movem.l	(sp)+,d0
	rts



;<d1.w:x
;<d2.w:y
b_locate:
	move.w	d1,cursor_x
	move.w	d2,cursor_y
	rts
cursor_x:
	.dc.w	0
cursor_y:
	.dc.w	0

;<d1.w:color
b_color:
	move.w	d1,text_color
	rts
text_color:
	.dc.w	%0011

;<a1.l:text
b_print:
	link.w	a6,#-76
	movem.l	d0-d3/a1-a2,-(sp)
	movea.l	a1,a2
1:	moveq.l	#6,d1		;6x12
	swap.w	d1
	move.b	(a2)+,d1	;character (ASCII only)
	beq	9f
	lea.l	-76(a6),a1	;pattern buffer
	IOCS	_FNTGET

	move.w	text_color,d3

	btst.l	#4,d3		;italic
	beq	@f
	lea.l	-76+4(a6),a1
  .rept 4
	move.b	(a1),d0
	lsr.b	#1,d0
	and.b	#$FC,d0
	or.b	d0,(a1)+
  .endm
	addq.l	#4,a1
  .rept 4
	move.b	(a1),d0
	add.b	d0,d0
	or.b	d0,(a1)+
  .endm
@@:

	btst.l	#2,d3		;bold
	beq	@f
	lea.l	-76+4(a6),a1
  .rept 12
	move.b	(a1),d0
	lsr.b	#1,d0
	and.b	#$FC,d0
	or.b	d0,(a1)+
  .endm
@@:

	btst.l	#5,d3		;underline
	beq	@f
	lea.l	-76+4(a6),a1
	move.b	#$FC,11(a1)
@@:

	btst.l	#6,d3		;overline
	beq	@f
	lea.l	-76+4(a6),a1
	move.b	#$FC,1(a1)
@@:

	btst.l	#7,d3		;line-through
	beq	@f
	lea.l	-76+4(a6),a1
	move.b	#$FC,6(a1)
@@:

	btst.l	#3,d3		;reverse
	beq	@f
	lea.l	-76+4(a6),a1
  .rept 12
	eori.b	#$FC,(a1)+
  .endm
@@:

	moveq.l	#%0001,d1	;plane 0
	IOCS	_TCOLOR
	move.w	cursor_x,d1
	mulu.w	#6,d1		;x
	move.w	cursor_y,d2
	mulu.w	#6,d2		;y
	lea.l	space(pc),a1
	btst.l	#0,d3		;plane 0
	beq	@f
	lea.l	-76(a6),a1	;pattern buffer
@@:	IOCS	_TEXTPUT

	moveq.l	#%0010,d1	;plane 1
	IOCS	_TCOLOR
	move.w	cursor_x,d1
	mulu.w	#6,d1		;x
	move.w	cursor_y,d2
	mulu.w	#6,d2		;y
	lea.l	space(pc),a1
	btst.l	#1,d3		;plane 1
	beq	@f
	lea.l	-76(a6),a1	;pattern buffer
@@:	IOCS	_TEXTPUT

	addq.w	#1,cursor_x
	bra	1b
9:	movem.l	(sp)+,d0-d3/a1-a2
	unlk	a6
	rts
space:
	.dc.w	6,12
	.dcb.b	12,$00

crtmod:
	movem.l	d0-d2/a1,-(sp)
	movea.l	#$0000093C,a1
	IOCS	_B_BPEEK
	cmp.b	d1,d0
	beq	1f
	IOCS	_CRTMOD
	bra	9f
1:	move.w	#$06E4,d1	;SP>TX>GR,G0>G1>G2>G3
	IOCS	_PRIORITY
	move.w	#$0020,d1	;TX
	IOCS	_CRTMOD2
	moveq.l	#3,d1
@@:	moveq.l	#-2,d2
	IOCS	_TPALET
	dbra	d1,@b
	IOCS	_B_CUROFF
  .if 0
    .if 0
;ROM 1.3 or IOCS.X needed
	move.w	#$0000,-(sp)	;line style
	move.w	#512,-(sp)	;height
	move.w	#768,-(sp)	;width
	move.w	#0,-(sp)	;y
	move.w	#0,-(sp)	;x
	move.w	#1<<15|%0011,-(sp)	;multiple plane mode,plane select
	movea.l	sp,a1
	IOCS	_TXFILL
	lea.l	12(sp),sp
    .else
	moveq.l	#3,d1
1:	move.w	#$0000,-(sp)	;line style
	move.w	#512,-(sp)	;height
	move.w	#768,-(sp)	;width
	move.w	#0,-(sp)	;y
	move.w	#0,-(sp)	;x
	move.w	d1,-(sp)	;plane select
	movea.l	sp,a1
	IOCS	_TXFILL
	lea.l	12(sp),sp
2:	dbra	d1,1b
    .endif
  .else
	moveq.l	#2,d1
	IOCS	_B_CLR_ST
  .endif
	moveq.l	#0,d1
	moveq.l	#0,d2
	IOCS	_B_LOCATE
9:	movem.l	(sp)+,d0-d2/a1
	rts



	.data

hgap=3
vgap=1

col0=(768/6-(8+hgap+8+hgap+17+hgap+11+hgap+17+hgap+13+hgap+19))>>1
col1=col0+8+hgap
col2=col1+8+hgap
col3=col2+17+hgap
col4=col3+11+hgap
col5=col4+17+hgap
col6=col5+13+hgap
;col7=col6+19+hgap

coltest=(768/6-(4+9+5+3+4))>>1
rowtest=1

colreset=coltest+4+9
rowreset=1

colexit=colreset+5+3
rowexit=1

row0=4
rowmax=row0+60

colregs=col1+1
rowregs=rowmax

	.even
menu_test:
	.dc.w	0,0
	.dc.w	coltest,rowtest,2f-1f-1,1
1:	.dc.b	'TEST',0
2:

	.even
menu_reset:
	.dc.w	0,0
	.dc.w	colreset,rowreset,2f-1f-1,1
1:	.dc.b	'RESET',0
2:

	.even
menu_exit:
	.dc.w	0,0
	.dc.w	colexit,rowexit,2f-1f-1,1
1:	.dc.b	'EXIT',0
2:

string_regs:
	.dc.b	'REGS: $'
regs_hex4_0:
	.dc.b	'xxxx'
	.dc.b	' $'
regs_hex4_1:
	.dc.b	'xxxx'
	.dc.b	' $'
regs_hex4_2:
	.dc.b	'xxxx',0

	.even
menus:
;col0
	.dc.l	menu_spprw
	.dc.l	menu_txprw
	.dc.l	menu_grprw
	.dc.l	menu_gr1st
	.dc.l	menu_gr2nd
	.dc.l	menu_gr3rd
	.dc.l	menu_gr4th
;col1
	.dc.l	menu_spon
	.dc.l	menu_txon
	.dc.l	menu_gr1on
	.dc.l	menu_gr2on
	.dc.l	menu_gr3on
	.dc.l	menu_gr4on
	.dc.l	menu_grxon
;col2
	.dc.l	menu_grmode
	.dc.l	menu_ahon
	.dc.l	menu_exon
	.dc.l	menu_exarea
	.dc.l	menu_extranslucent
;col3
	.dc.l	menu_txtfill
	.dc.l	menu_sprfill
	.dc.l	menu_sprprw
	.dc.l	menu_bg0fill
	.dc.l	menu_bg1fill
;col4
	.dc.l	menu_txpalet00
	.dc.l	menu_txpalet01
	.dc.l	menu_sppalet10
	.dc.l	menu_sppalet11
	.dc.l	menu_sppalet20
	.dc.l	menu_sppalet21
	.dc.l	menu_sppalet30
	.dc.l	menu_sppalet31
	.dc.l	menu_bg0on
	.dc.l	menu_bg1on
;col5
	.dc.l	menu_gr0fill
	.dc.l	menu_gr1fill
	.dc.l	menu_gr2fill
	.dc.l	menu_gr3fill
;col6
	.dc.l	menu_grpalet0000
	.dc.l	menu_grpalet0001
	.dc.l	menu_grpalet0002
	.dc.l	menu_grpalet0003
	.dc.l	menu_grpalet0004
	.dc.l	menu_grpalet0005
	.dc.l	menu_grpalet0006
	.dc.l	menu_grpalet0007
	.dc.l	menu_grpalet0010
	.dc.l	menu_grpalet0011
	.dc.l	menu_grpalet2020
	.dc.l	menu_grpalet2121

	.dc.l	0

col=col0
row=row0

	.even
menu_spprw:
	.dc.w	0,0
	.dc.w	col,row,2f-1f-1,(3f-1f)/(2f-1f)
row=row+2*(3f-1f)/(2f-1f)+vgap
1:	.dc.b	'SP PRW 0',0
2:	.dc.b	'SP PRW 1',0
	.dc.b	'SP PRW 2',0
	.dc.b	'SP PRW 3',0
3:
	.even
spprw_to_vcn5:
;		 SpwTpwGpw4th3rd2nd1st
	.dc.w	%00_00_00_00_00_00_00
	.dc.w	%01_00_00_00_00_00_00
	.dc.w	%10_00_00_00_00_00_00
	.dc.w	%11_00_00_00_00_00_00

	.even
menu_txprw:
	.dc.w	1,0
	.dc.w	col,row,2f-1f-1,(3f-1f)/(2f-1f)
row=row+2*(3f-1f)/(2f-1f)+vgap
1:	.dc.b	'TX PRW 0',0
2:	.dc.b	'TX PRW 1',0
	.dc.b	'TX PRW 2',0
	.dc.b	'TX PRW 3',0
3:
	.even
txprw_to_vcn5:
;		 SpwTpwGpw4th3rd2nd1st
	.dc.w	%00_00_00_00_00_00_00
	.dc.w	%00_01_00_00_00_00_00
	.dc.w	%00_10_00_00_00_00_00
	.dc.w	%00_11_00_00_00_00_00

	.even
menu_grprw:
	.dc.w	2,0
	.dc.w	col,row,2f-1f-1,(3f-1f)/(2f-1f)
row=row+2*(3f-1f)/(2f-1f)+vgap
1:	.dc.b	'GR PRW 0',0
2:	.dc.b	'GR PRW 1',0
	.dc.b	'GR PRW 2',0
	.dc.b	'GR PRW 3',0
3:
	.even
grprw_to_vcn5:
;		 SpwTpwGpw4th3rd2nd1st
	.dc.w	%00_00_00_00_00_00_00
	.dc.w	%00_00_01_00_00_00_00
	.dc.w	%00_00_10_00_00_00_00
	.dc.w	%00_00_11_00_00_00_00

	.even
menu_gr1st:
	.dc.w	0,0
	.dc.w	col,row,2f-1f-1,(3f-1f)/(2f-1f)
row=row+2*(3f-1f)/(2f-1f)+vgap
1:	.dc.b	'GR 1ST 0',0
2:	.dc.b	'GR 1ST 1',0
	.dc.b	'GR 1ST 2',0
	.dc.b	'GR 1ST 3',0
3:
	.even
gr1st_to_vcn5:
;		 SpwTpwGpw4th3rd2nd1st
	.dc.w	%00_00_00_00_00_00_00
	.dc.w	%00_00_00_00_00_00_01
	.dc.w	%00_00_00_00_00_00_10
	.dc.w	%00_00_00_00_00_00_11

	.even
menu_gr2nd:
	.dc.w	1,0
	.dc.w	col,row,2f-1f-1,(3f-1f)/(2f-1f)
row=row+2*(3f-1f)/(2f-1f)+vgap
1:	.dc.b	'GR 2ND 0',0
2:	.dc.b	'GR 2ND 1',0
	.dc.b	'GR 2ND 2',0
	.dc.b	'GR 2ND 3',0
3:
	.even
gr2nd_to_vcn5:
;		 SpwTpwGpw4th3rd2nd1st
	.dc.w	%00_00_00_00_00_00_00
	.dc.w	%00_00_00_00_00_01_00
	.dc.w	%00_00_00_00_00_10_00
	.dc.w	%00_00_00_00_00_11_00

	.even
menu_gr3rd:
	.dc.w	2,0
	.dc.w	col,row,2f-1f-1,(3f-1f)/(2f-1f)
row=row+2*(3f-1f)/(2f-1f)+vgap
1:	.dc.b	'GR 3RD 0',0
2:	.dc.b	'GR 3RD 1',0
	.dc.b	'GR 3RD 2',0
	.dc.b	'GR 3RD 3',0
3:
	.even
gr3rd_to_vcn5:
;		 SpwTpwGpw4th3rd2nd1st
	.dc.w	%00_00_00_00_00_00_00
	.dc.w	%00_00_00_00_01_00_00
	.dc.w	%00_00_00_00_10_00_00
	.dc.w	%00_00_00_00_11_00_00

	.even
menu_gr4th:
	.dc.w	3,0
	.dc.w	col,row,2f-1f-1,(3f-1f)/(2f-1f)
row=row+2*(3f-1f)/(2f-1f)+vgap
1:	.dc.b	'GR 4TH 0',0
2:	.dc.b	'GR 4TH 1',0
	.dc.b	'GR 4TH 2',0
	.dc.b	'GR 4TH 3',0
3:
	.even
gr4th_to_vcn5:
;		 SpwTpwGpw4th3rd2nd1st
	.dc.w	%00_00_00_00_00_00_00
	.dc.w	%00_00_00_01_00_00_00
	.dc.w	%00_00_00_10_00_00_00
	.dc.w	%00_00_00_11_00_00_00

col=col1
row=row0

	.even
menu_spon:
	.dc.w	1,0
	.dc.w	col,row,2f-1f-1,(3f-1f)/(2f-1f)
row=row+2*(3f-1f)/(2f-1f)+vgap
1:	.dc.b	'SP OFF',0
2:	.dc.b	'SP ON ',0
3:
	.even
spon_to_vcn6:
;		 15 14 13 12 11 10  9  8  7  6  5  4  3  2  1  0
;		 YS AH VH EX HF PL GG GT BC SP TX GX G4 G3 G2 G1
	.dc.w	%_0__0__0__0__0__0__0__0__0__0__0__0__0__0__0__0	;TX OFF
	.dc.w	%_0__0__0__0__0__0__0__0__0__1__0__0__0__0__0__0	;SP ON

	.even
menu_txon:
	.dc.w	1,0
	.dc.w	col,row,2f-1f-1,(3f-1f)/(2f-1f)
row=row+2*(3f-1f)/(2f-1f)+vgap
1:	.dc.b	'TX OFF',0
2:	.dc.b	'TX ON ',0
3:
	.even
txon_to_vcn6:
;		 15 14 13 12 11 10  9  8  7  6  5  4  3  2  1  0
;		 YS AH VH EX HF PL GG GT BC SP TX GX G4 G3 G2 G1
	.dc.w	%_0__0__0__0__0__0__0__0__0__0__0__0__0__0__0__0	;TX OFF
	.dc.w	%_0__0__0__0__0__0__0__0__0__0__1__0__0__0__0__0	;TX ON

	.even
menu_gr1on:
	.dc.w	1,0
	.dc.w	col,row,2f-1f-1,(3f-1f)/(2f-1f)
row=row+2*(3f-1f)/(2f-1f)+vgap
1:	.dc.b	'1ST OFF',0
2:	.dc.b	'1ST ON ',0
3:
	.even
gr1on_to_vcn6:
;		 15 14 13 12 11 10  9  8  7  6  5  4  3  2  1  0
;		 YS AH VH EX HF PL GG GT BC SP TX GX G4 G3 G2 G1
	.dc.w	%_0__0__0__0__0__0__0__0__0__0__0__0__0__0__0__0	;1ST OFF
	.dc.w	%_0__0__0__0__0__0__0__0__0__0__0__0__0__0__0__1	;1ST ON

	.even
menu_gr2on:
	.dc.w	1,0
	.dc.w	col,row,2f-1f-1,(3f-1f)/(2f-1f)
row=row+2*(3f-1f)/(2f-1f)+vgap
1:	.dc.b	'2ND OFF',0
2:	.dc.b	'2ND ON ',0
3:
	.even
gr2on_to_vcn6:
;		 15 14 13 12 11 10  9  8  7  6  5  4  3  2  1  0
;		 YS AH VH EX HF PL GG GT BC SP TX GX G4 G3 G2 G1
	.dc.w	%_0__0__0__0__0__0__0__0__0__0__0__0__0__0__0__0	;2ND OFF
	.dc.w	%_0__0__0__0__0__0__0__0__0__0__0__0__0__0__1__0	;2ND ON

	.even
menu_gr3on:
	.dc.w	1,0
	.dc.w	col,row,2f-1f-1,(3f-1f)/(2f-1f)
row=row+2*(3f-1f)/(2f-1f)+vgap
1:	.dc.b	'3RD OFF',0
2:	.dc.b	'3RD ON ',0
3:
	.even
gr3on_to_vcn6:
;		 15 14 13 12 11 10  9  8  7  6  5  4  3  2  1  0
;		 YS AH VH EX HF PL GG GT BC SP TX GX G4 G3 G2 G1
	.dc.w	%_0__0__0__0__0__0__0__0__0__0__0__0__0__0__0__0	;3RD OFF
	.dc.w	%_0__0__0__0__0__0__0__0__0__0__0__0__0__1__0__0	;3RD ON

	.even
menu_gr4on:
	.dc.w	1,0
	.dc.w	col,row,2f-1f-1,(3f-1f)/(2f-1f)
row=row+2*(3f-1f)/(2f-1f)+vgap
1:	.dc.b	'4TH OFF',0
2:	.dc.b	'4TH ON ',0
3:
	.even
gr4on_to_vcn6:
;		 15 14 13 12 11 10  9  8  7  6  5  4  3  2  1  0
;		 YS AH VH EX HF PL GG GT BC SP TX GX G4 G3 G2 G1
	.dc.w	%_0__0__0__0__0__0__0__0__0__0__0__0__0__0__0__0	;4TH OFF
	.dc.w	%_0__0__0__0__0__0__0__0__0__0__0__0__1__0__0__0	;4TH ON

	.even
menu_grxon:
	.dc.w	0,0
	.dc.w	col,row,2f-1f-1,(3f-1f)/(2f-1f)
row=row+2*(3f-1f)/(2f-1f)+vgap
1:	.dc.b	'1024 OFF',0
2:	.dc.b	'1024 ON ',0
3:
	.even
grxon_to_vcn6:
;		 15 14 13 12 11 10  9  8  7  6  5  4  3  2  1  0
;		 YS AH VH EX HF PL GG GT BC SP TX GX G4 G3 G2 G1
	.dc.w	%_0__0__0__0__0__0__0__0__0__0__0__0__0__0__0__0	;1024 OFF
	.dc.w	%_0__0__0__0__0__0__0__0__0__0__0__1__0__0__0__0	;1024 ON

col=col2
row=row0

	.even
menu_grmode:
	.dc.w	0,0
	.dc.w	col,row,2f-1f-1,(3f-1f)/(2f-1f)
row=row+2*(3f-1f)/(2f-1f)+vgap
1:	.dc.b	' 512 x    16 x 4',0
2:	.dc.b	' 512 x   256 x 2',0
	.dc.b	' 512 x 65536 x 1',0
	.dc.b	'1024 x    16 x 1',0
3:
	.even
grmode_to_crtmod:
	.dc.w	6	; 512 x    16 x 4
	.dc.w	10	; 512 x   256 x 2
	.dc.w	14	; 512 x 65536 x 1
	.dc.w	2	;1024 x    16 x 1
	.even
grmode_to_vcn4:
	.dc.w	%0_00	; 512 x    16 x 4
	.dc.w	%0_01	; 512 x   256 x 2
	.dc.w	%0_11	; 512 x 65536 x 1
	.dc.w	%1_00	;1024 x    16 x 1

	.even
menu_ahon:
	.dc.w	0,0
	.dc.w	col,row,2f-1f-1,(3f-1f)/(2f-1f)
row=row+2*(3f-1f)/(2f-1f)+vgap
1:	.dc.b	'NORMAL  ',0
2:	.dc.b	'GR+TX 00',0
3:
	.even
ahon_to_vcn6:
;		 15 14 13 12 11 10  9  8  7  6  5  4  3  2  1  0
;		 YS AH VH EX HF PL GG GT BC SP TX GX G4 G3 G2 G1
	.dc.w	%_0__0__0__0__0__0__0__0__0__0__0__0__0__0__0__0	;
	.dc.w	%_0__1__0__0__0__0__0__0__0__0__0__0__0__0__0__0	;A

	.even
menu_exon:
	.dc.w	0,0
	.dc.w	col,row,2f-1f-1,(3f-1f)/(2f-1f)
row=row+2*(3f-1f)/(2f-1f)+vgap
1:	.dc.b	'NORMAL          ',0
2:	.dc.b	'SPECIAL PRIORITY',0
	.dc.b	'TRANSLUCENT     ',0
3:
	.even
exon_to_vcn6:
;		 15 14 13 12 11 10  9  8  7  6  5  4  3  2  1  0
;		 YS AH VH EX HF PL GG GT BC SP TX GX G4 G3 G2 G1
	.dc.w	%_0__0__0__0__0__0__0__0__0__0__0__0__0__0__0__0	;
	.dc.w	%_0__0__0__1__0__0__0__0__0__0__0__0__0__0__0__0	;X
	.dc.w	%_0__0__0__1__1__0__0__0__0__0__0__0__0__0__0__0	;XH

	.even
menu_exarea:
	.dc.w	1,0
	.dc.w	col,row,2f-1f-1,(3f-1f)/(2f-1f)
row=row+2*(3f-1f)/(2f-1f)+vgap
1:	.dc.b	'LSB OF COLOR CODE',0
2:	.dc.b	'LSB OF PALET CODE',0
3:
	.even
exarea_to_vcn6:
;		 15 14 13 12 11 10  9  8  7  6  5  4  3  2  1  0
;		 YS AH VH EX HF PL GG GT BC SP TX GX G4 G3 G2 G1
	.dc.w	%_0__0__0__0__0__0__0__0__0__0__0__0__0__0__0__0	;W
	.dc.w	%_0__0__0__0__0__1__0__0__0__0__0__0__0__0__0__0	;P

	.even
menu_extranslucent:
	.dc.w	2,0
	.dc.w	col,row,2f-1f-1,(3f-1f)/(2f-1f)
row=row+2*(3f-1f)/(2f-1f)+vgap
1:	.dc.b	'1ST          ',0
2:	.dc.b	'1ST+SP/TX    ',0
	.dc.b	'1ST+2ND      ',0
	.dc.b	'1ST+2ND+SP/TX',0
3:
	.even
extranslucent_to_vcn6:
;		 15 14 13 12 11 10  9  8  7  6  5  4  3  2  1  0
;		 YS AH VH EX HF PL GG GT BC SP TX GX G4 G3 G2 G1
	.dc.w	%_0__0__0__0__0__0__0__0__0__0__0__0__0__0__0__0	;
	.dc.w	%_0__0__0__0__0__0__0__1__0__0__0__0__0__0__0__0	;T
	.dc.w	%_0__0__0__0__0__0__1__0__0__0__0__0__0__0__0__0	;G
	.dc.w	%_0__0__0__0__0__0__1__1__0__0__0__0__0__0__0__0	;GT

col=col3
row=row0

	.even
menu_txtfill:
	.dc.w	0,0
	.dc.w	col,row,2f-1f-1,(3f-1f)/(2f-1f)
row=row+2*(3f-1f)/(2f-1f)+vgap
1:	.dc.b	'TXT FILL 00',0
2:	.dc.b	'TXT FILL 01',0
3:

	.even
menu_sprfill:
	.dc.w	3,0
	.dc.w	col,row,2f-1f-1,(3f-1f)/(2f-1f)
row=row+2*(3f-1f)/(2f-1f)+vgap
1:	.dc.b	'SPR FILL 00',0
2:	.dc.b	'SPR FILL 01',0
	.dc.b	'SPR FILL 10',0
	.dc.b	'SPR FILL 11',0
	.dc.b	'SPR FILL 20',0
	.dc.b	'SPR FILL 21',0
	.dc.b	'SPR FILL 30',0
	.dc.b	'SPR FILL 31',0
3:

	.even
menu_sprprw:
	.dc.w	0,0
	.dc.w	col,row,2f-1f-1,(3f-1f)/(2f-1f)
row=row+2*(3f-1f)/(2f-1f)+vgap
1:	.dc.b	'SPR PRW 0',0
2:	.dc.b	'SPR PRW 1',0
	.dc.b	'SPR PRW 2',0
	.dc.b	'SPR PRW 3',0
3:

	.even
menu_bg0fill:
	.dc.w	5,0
	.dc.w	col,row,2f-1f-1,(3f-1f)/(2f-1f)
row=row+2*(3f-1f)/(2f-1f)+vgap
1:	.dc.b	'BG0 FILL 00',0
2:	.dc.b	'BG0 FILL 01',0
	.dc.b	'BG0 FILL 10',0
	.dc.b	'BG0 FILL 11',0
	.dc.b	'BG0 FILL 20',0
	.dc.b	'BG0 FILL 21',0
	.dc.b	'BG0 FILL 30',0
	.dc.b	'BG0 FILL 31',0
3:

	.even
menu_bg1fill:
	.dc.w	7,0
	.dc.w	col,row,2f-1f-1,(3f-1f)/(2f-1f)
row=row+2*(3f-1f)/(2f-1f)+vgap
1:	.dc.b	'BG1 FILL 00',0
2:	.dc.b	'BG1 FILL 01',0
	.dc.b	'BG1 FILL 10',0
	.dc.b	'BG1 FILL 11',0
	.dc.b	'BG1 FILL 20',0
	.dc.b	'BG1 FILL 21',0
	.dc.b	'BG1 FILL 30',0
	.dc.b	'BG1 FILL 31',0
3:

col=col4
row=row0

	.even
menu_txpalet00:
	.dc.w	0,0
	.dc.w	col,row,2f-1f-1,(3f-1f)/(2f-1f)
row=row+2*(3f-1f)/(2f-1f)+vgap
1:	.dc.b	'TX 00 TRANSPARENT',0
2:	.dc.b	'TX 00 BLACK+1    ',0
	.dc.b	'TX 00 GRAY       ',0
	.dc.b	'TX 00 SILVER     ',0
	.dc.b	'TX 00 WHITE      ',0
3:
	.even
txpalet00_to_color:
	.dc.w	TRANSPARENT
	.dc.w	BLACK+1
	.dc.w	GRAY
	.dc.w	SILVER
	.dc.w	WHITE

	.even
menu_txpalet01:
	.dc.w	2,0
	.dc.w	col,row,2f-1f-1,(3f-1f)/(2f-1f)
row=row+2*(3f-1f)/(2f-1f)+vgap
1:	.dc.b	'TX 01 TRANSPARENT',0
2:	.dc.b	'TX 01 BLACK+1    ',0
	.dc.b	'TX 01 ORANGE     ',0
3:
	.even
txpalet01_to_color:
	.dc.w	TRANSPARENT
	.dc.w	BLACK+1
	.dc.w	ORANGE

	.even
menu_sppalet10:
	.dc.w	1,0
	.dc.w	col,row,2f-1f-1,(3f-1f)/(2f-1f)
row=row+2*(3f-1f)/(2f-1f)+vgap
1:	.dc.b	'SP 10 TRANSPARENT',0
2:	.dc.b	'SP 10 PURPLE     ',0
3:
	.even
sppalet10_to_color:
	.dc.w	TRANSPARENT
	.dc.w	PURPLE

	.even
menu_sppalet11:
	.dc.w	1,0
	.dc.w	col,row,2f-1f-1,(3f-1f)/(2f-1f)
row=row+2*(3f-1f)/(2f-1f)+vgap
1:	.dc.b	'SP 11 TRANSPARENT',0
2:	.dc.b	'SP 11 FUCHSIA    ',0
3:
	.even
sppalet11_to_color:
	.dc.w	TRANSPARENT
	.dc.w	FUCHSIA

	.even
menu_sppalet20:
	.dc.w	1,0
	.dc.w	col,row,2f-1f-1,(3f-1f)/(2f-1f)
row=row+2*(3f-1f)/(2f-1f)+vgap
1:	.dc.b	'SP 20 TRANSPARENT',0
2:	.dc.b	'SP 20 TEAL       ',0
3:
	.even
sppalet20_to_color:
	.dc.w	TRANSPARENT
	.dc.w	TEAL

	.even
menu_sppalet21:
	.dc.w	1,0
	.dc.w	col,row,2f-1f-1,(3f-1f)/(2f-1f)
row=row+2*(3f-1f)/(2f-1f)+vgap
1:	.dc.b	'SP 21 TRANSPARENT',0
2:	.dc.b	'SP 21 AQUA       ',0
3:
	.even
sppalet21_to_color:
	.dc.w	TRANSPARENT
	.dc.w	AQUA

	.even
menu_sppalet30:
	.dc.w	1,0
	.dc.w	col,row,2f-1f-1,(3f-1f)/(2f-1f)
row=row+2*(3f-1f)/(2f-1f)+vgap
1:	.dc.b	'SP 30 TRANSPARENT',0
2:	.dc.b	'SP 30 OLIVE      ',0
3:
	.even
sppalet30_to_color:
	.dc.w	TRANSPARENT
	.dc.w	OLIVE

	.even
menu_sppalet31:
	.dc.w	1,0
	.dc.w	col,row,2f-1f-1,(3f-1f)/(2f-1f)
row=row+2*(3f-1f)/(2f-1f)+vgap
1:	.dc.b	'SP 31 TRANSPARENT',0
2:	.dc.b	'SP 31 YELLOW     ',0
3:
	.even
sppalet31_to_color:
	.dc.w	TRANSPARENT
	.dc.w	YELLOW

	.even
menu_bg0on:
	.dc.w	0,0
	.dc.w	col,row,2f-1f-1,(3f-1f)/(2f-1f)
row=row+2*(3f-1f)/(2f-1f)+vgap
1:	.dc.b	'BG0 OFF',0
2:	.dc.b	'BG0 ON ',0
3:

	.even
menu_bg1on:
	.dc.w	0,0
	.dc.w	col,row,2f-1f-1,(3f-1f)/(2f-1f)
row=row+2*(3f-1f)/(2f-1f)+vgap
1:	.dc.b	'BG1 OFF',0
2:	.dc.b	'BG1 ON ',0
3:

col=col5
row=row0

	.even
menu_gr0fill:
	.dc.w	0,0
	.dc.w	col,row,2f-1f-1,(3f-1f)/(2f-1f)
row=row+2*(3f-1f)/(2f-1f)+vgap
1:	.dc.b	'GR0 FILL 0000',0
2:	.dc.b	'GR0 FILL 0001',0
	.dc.b	'GR0 FILL 0002',0
	.dc.b	'GR0 FILL 0003',0
	.dc.b	'GR0 FILL 0004',0
	.dc.b	'GR0 FILL 0005',0
	.dc.b	'GR0 FILL 0006',0
	.dc.b	'GR0 FILL 0007',0
	.dc.b	'GR0 FILL 0010',0
	.dc.b	'GR0 FILL 0011',0
	.dc.b	'GR0 FILL 2020',0
	.dc.b	'GR0 FILL 2121',0
3:
	.even
gr0fill_to_palet:
	.dc.w	$0000
	.dc.w	$0001
	.dc.w	$0002
	.dc.w	$0003
	.dc.w	$0004
	.dc.w	$0005
	.dc.w	$0006
	.dc.w	$0007
	.dc.w	$0010
	.dc.w	$0011
	.dc.w	$2020
	.dc.w	$2121

	.even
menu_gr1fill:
	.dc.w	0,0
	.dc.w	col,row,2f-1f-1,(3f-1f)/(2f-1f)
row=row+2*(3f-1f)/(2f-1f)+vgap
1:	.dc.b	'GR1 FILL 0000',0
2:	.dc.b	'GR1 FILL 0001',0
	.dc.b	'GR1 FILL 0002',0
	.dc.b	'GR1 FILL 0003',0
	.dc.b	'GR1 FILL 0004',0
	.dc.b	'GR1 FILL 0005',0
	.dc.b	'GR1 FILL 0006',0
	.dc.b	'GR1 FILL 0007',0
	.dc.b	'GR1 FILL 0010',0
	.dc.b	'GR1 FILL 0011',0
3:
	.even
gr1fill_to_palet:
	.dc.w	$0000
	.dc.w	$0001
	.dc.w	$0002
	.dc.w	$0003
	.dc.w	$0004
	.dc.w	$0005
	.dc.w	$0006
	.dc.w	$0007
	.dc.w	$0010
	.dc.w	$0011

	.even
menu_gr2fill:
	.dc.w	0,0
	.dc.w	col,row,2f-1f-1,(3f-1f)/(2f-1f)
row=row+2*(3f-1f)/(2f-1f)+vgap
1:	.dc.b	'GR2 FILL 0000',0
2:	.dc.b	'GR2 FILL 0001',0
	.dc.b	'GR2 FILL 0002',0
	.dc.b	'GR2 FILL 0003',0
	.dc.b	'GR2 FILL 0004',0
	.dc.b	'GR2 FILL 0005',0
3:
	.even
gr2fill_to_palet:
	.dc.w	$0000
	.dc.w	$0001
	.dc.w	$0002
	.dc.w	$0003
	.dc.w	$0004
	.dc.w	$0005

	.even
menu_gr3fill:
	.dc.w	0,0
	.dc.w	col,row,2f-1f-1,(3f-1f)/(2f-1f)
row=row+2*(3f-1f)/(2f-1f)+vgap
1:	.dc.b	'GR3 FILL 0000',0
2:	.dc.b	'GR3 FILL 0001',0
	.dc.b	'GR3 FILL 0002',0
	.dc.b	'GR3 FILL 0003',0
	.dc.b	'GR3 FILL 0004',0
	.dc.b	'GR3 FILL 0005',0
3:
	.even
gr3fill_to_palet:
	.dc.w	$0000
	.dc.w	$0001
	.dc.w	$0002
	.dc.w	$0003
	.dc.w	$0004
	.dc.w	$0005

col=col6
row=row0

	.even
menu_grpalet0000:
	.dc.w	0,0
	.dc.w	col,row,2f-1f-1,(3f-1f)/(2f-1f)
row=row+2*(3f-1f)/(2f-1f)+vgap
1:	.dc.b	'GR 0000 TRANSPARENT',0
2:	.dc.b	'GR 0000 BLACK+1    ',0
	.dc.b	'GR 0000 WHITE      ',0
	.dc.b	'GR 0000 WHITE+1    ',0
3:
grpalet0000_to_color:
	.dc.w	TRANSPARENT
	.dc.w	BLACK+1
	.dc.w	WHITE
	.dc.w	WHITE+1

	.even
menu_grpalet0001:
	.dc.w	2,0
	.dc.w	col,row,2f-1f-1,(3f-1f)/(2f-1f)
row=row+2*(3f-1f)/(2f-1f)+vgap
1:	.dc.b	'GR 0001 TRANSPARENT',0
2:	.dc.b	'GR 0001 BLACK+1    ',0
	.dc.b	'GR 0001 LIME       ',0
	.dc.b	'GR 0001 LIME+1     ',0
3:
grpalet0001_to_color:
	.dc.w	TRANSPARENT
	.dc.w	BLACK+1
	.dc.w	LIME
	.dc.w	LIME+1

	.even
menu_grpalet0002:
	.dc.w	0,0
	.dc.w	col,row,2f-1f-1,(3f-1f)/(2f-1f)
row=row+2*(3f-1f)/(2f-1f)+vgap
1:	.dc.b	'GR 0002 RED  ',0
2:	.dc.b	'GR 0002 RED+1',0
3:
grpalet0002_to_color:
	.dc.w	RED
	.dc.w	RED+1

	.even
menu_grpalet0003:
	.dc.w	0,0
	.dc.w	col,row,2f-1f-1,(3f-1f)/(2f-1f)
row=row+2*(3f-1f)/(2f-1f)+vgap
1:	.dc.b	'GR 0003 BLUE  ',0
2:	.dc.b	'GR 0003 BLUE+1',0
3:
grpalet0003_to_color:
	.dc.w	BLUE
	.dc.w	BLUE+1

	.even
menu_grpalet0004:
	.dc.w	0,0
	.dc.w	col,row,2f-1f-1,(3f-1f)/(2f-1f)
row=row+2*(3f-1f)/(2f-1f)+vgap
1:	.dc.b	'GR 0004 FUCHSIA  ',0
2:	.dc.b	'GR 0004 FUCHSIA+1',0
3:
grpalet0004_to_color:
	.dc.w	FUCHSIA
	.dc.w	FUCHSIA+1

	.even
menu_grpalet0005:
	.dc.w	0,0
	.dc.w	col,row,2f-1f-1,(3f-1f)/(2f-1f)
row=row+2*(3f-1f)/(2f-1f)+vgap
1:	.dc.b	'GR 0005 AQUA  ',0
2:	.dc.b	'GR 0005 AQUA+1',0
3:
grpalet0005_to_color:
	.dc.w	AQUA
	.dc.w	AQUA+1

	.even
menu_grpalet0006:
	.dc.w	0,0
	.dc.w	col,row,2f-1f-1,(3f-1f)/(2f-1f)
row=row+2*(3f-1f)/(2f-1f)+vgap
1:	.dc.b	'GR 0006 YELLOW  ',0
2:	.dc.b	'GR 0006 YELLOW+1',0
3:
grpalet0006_to_color:
	.dc.w	YELLOW
	.dc.w	YELLOW+1

	.even
menu_grpalet0007:
	.dc.w	0,0
	.dc.w	col,row,2f-1f-1,(3f-1f)/(2f-1f)
row=row+2*(3f-1f)/(2f-1f)+vgap
1:	.dc.b	'GR 0007 PURPLE  ',0
2:	.dc.b	'GR 0007 PURPLE+1',0
3:
grpalet0007_to_color:
	.dc.w	PURPLE
	.dc.w	PURPLE+1

	.even
menu_grpalet0010:
	.dc.w	0,0
	.dc.w	col,row,2f-1f-1,(3f-1f)/(2f-1f)
row=row+2*(3f-1f)/(2f-1f)+vgap
1:	.dc.b	'GR 0010 TEAL  ',0
2:	.dc.b	'GR 0010 TEAL+1',0
3:
grpalet0010_to_color:
	.dc.w	TEAL
	.dc.w	TEAL+1

	.even
menu_grpalet0011:
	.dc.w	0,0
	.dc.w	col,row,2f-1f-1,(3f-1f)/(2f-1f)
row=row+2*(3f-1f)/(2f-1f)+vgap
1:	.dc.b	'GR 0011 OLIVE  ',0
2:	.dc.b	'GR 0011 OLIVE+1',0
3:
grpalet0011_to_color:
	.dc.w	OLIVE
	.dc.w	OLIVE+1

	.even
menu_grpalet2020:
	.dc.w	0,0
	.dc.w	col,row,2f-1f-1,(3f-1f)/(2f-1f)
row=row+2*(3f-1f)/(2f-1f)+vgap
1:	.dc.b	'GR 2020 TRANSPARENT',0
2:	.dc.b	'GR 2020 BLACK+1    ',0
3:
grpalet2020_to_color:
	.dc.w	TRANSPARENT
	.dc.w	BLACK+1

	.even
menu_grpalet2121:
	.dc.w	0,0
	.dc.w	col,row,2f-1f-1,(3f-1f)/(2f-1f)
row=row+2*(3f-1f)/(2f-1f)+vgap
1:	.dc.b	'GR 2121 WHITE  ',0
2:	.dc.b	'GR 2121 WHITE+1',0
3:
grpalet2121_to_color:
	.dc.w	WHITE
	.dc.w	WHITE+1

	.even
sp_pats:
	.dc.l	sp_pat0
	.dc.l	sp_pat1
	.dc.l	sp_pat2
sp_pat0:
	.dcb.l	32,$00000000	;top left,bottom left,top right,bottom right
sp_pat1:
	.dcb.l	32,$11111111	;top left,bottom left,top right,bottom right
sp_pat2:
	.dcb.l	32,$22222222	;top left,bottom left,top right,bottom right


	.end