misc/vcntest2.s
;========================================================================================
; vcntest2.s
; Copyright (C) 2003-2021 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
moveq.l #-1,d1
IOCS _CRTMOD
move.l d0,-(sp)
moveq.l #6,d1 ;256x256 dots, 16 colors, 4 plane
IOCS _CRTMOD
IOCS _B_CUROFF
IOCS _G_CLR_ON
moveq.l #%1111,d1
IOCS _VPAGE
IOCS _SP_INIT
IOCS _SP_ON
moveq.l #0,d1 ;pattern number=0
moveq.l #0,d2 ;size=8x8
lea.l sp_pat0,a1 ;pattern
IOCS _SP_DEFCG
moveq.l #0,d1 ;BG page number=0
moveq.l #0,d2 ;BG text area=0
move.l #1,d3 ;on
IOCS _BGCTRLST
moveq.l #0,d1 ;4bit palet=0
moveq.l #0,d2 ;palet block=0
move.l #%00000_00000_00000_0,d3 ;wait=no, color=transparent
IOCS _SPALET
moveq.l #0,d1 ;4bit palet=0
moveq.l #1,d2 ;palet block=1
move.l #0<<31|%11111_11111_00000_0,d3 ;wait=no, color=yellow
IOCS _SPALET
moveq.l #0,d1 ;palet=0
move.l #%00000_00000_00000_0,d2 ;color=black
IOCS _TPALET
moveq.l #1,d1 ;palet=1
move.l #%10000_10000_10000_0,d2 ;color=gray
IOCS _TPALET
moveq.l #0,d1 ;palet=0
move.l #%00000_00000_00000_0,d2 ;color=black
IOCS _GPALET
moveq.l #1,d1 ;palet=1
move.l #%11111_00000_00000_0,d2 ;color=lime
IOCS _GPALET
moveq.l #2,d1 ;palet=2
move.l #%00000_11111_00000_0,d2 ;color=red
IOCS _GPALET
moveq.l #3,d1 ;palet=3
move.l #%00000_00000_11111_0,d2 ;color=blue
IOCS _GPALET
moveq.l #4,d1 ;palet=4
move.l #%00000_11111_11111_0,d2 ;color=fuchsia
IOCS _GPALET
moveq.l #5,d1 ;palet=5
move.l #%11111_00000_11111_0,d2 ;color=aqua
IOCS _GPALET
;SE1T
; A1 BG=$10(yellow) > GR=2(red) > TX=$0(black) = yellow
; A2 BG=$10(yellow) > GR=2(red) > TX=$1(gray) = red
; Sp Tx Gr G4 G3 G2 G1
move.l #%00_00_10_01_11_10_01_00,d1 ;S>G>T
IOCS _PRIORITY
; 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
move.w #%_0__0__0__0__0__0__0__0__0__1__1__0__0__0__0__1,d1
IOCS _CRTMOD2
moveq.l #2,d1 ;palet=2
move.l #%00000_11111_00000_0,d2 ;color=red
IOCS _GPALET
moveq.l #0,d1 ;1st
IOCS _APAGE
;
move.w #2,-(sp) ;graphic palet=red
pea.l text_a1
bsr draw_text
addq.l #6,sp
move.w #%0000,-(sp) ;text palet=0
bsr copy_text
addq.l #2,sp
bsr wait_esc
beq exit
;
move.w #2,-(sp) ;graphic palet=red
pea.l text_a2
bsr draw_text
addq.l #6,sp
move.w #%0001,-(sp) ;text palet=1
bsr copy_text
addq.l #2,sp
bsr wait_esc
beq exit
;E2_XHPG
; B1 1st:2(red) + 2nd:2(red) = red
; B2 1st:2(red) + 2nd:3(blue) = red
; B3 1st:3(blue) + 2nd:2(red) = purple
; B4 1st:3(blue) + 2nd:3(blue) = purple
; Sp Tx Gr G4 G3 G2 G1
move.l #%00_00_01_10_11_10_01_00,d1 ;S>T>G
IOCS _PRIORITY
; 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
move.w #%_0__0__0__1__1__1__1__0__0__0__0__0__0__0__1__1,d1
IOCS _CRTMOD2
moveq.l #2,d1 ;palet=2
move.l #%00000_11111_00000_0,d2 ;color=red
IOCS _GPALET
;
moveq.l #0,d1 ;1st
IOCS _APAGE
move.w #2,-(sp) ;graphic palet=red
pea.l text_b1
bsr draw_text
addq.l #6,sp
moveq.l #1,d1 ;2nd
IOCS _APAGE
move.w #2,-(sp) ;graphic palet=red
pea.l text_b1
bsr draw_text
addq.l #6,sp
bsr wait_esc
beq exit
;
moveq.l #0,d1 ;1st
IOCS _APAGE
move.w #2,-(sp) ;graphic palet=red
pea.l text_b2
bsr draw_text
addq.l #6,sp
moveq.l #1,d1 ;2nd
IOCS _APAGE
move.w #3,-(sp) ;graphic palet=blue
pea.l text_b2
bsr draw_text
addq.l #6,sp
bsr wait_esc
beq exit
;
moveq.l #0,d1 ;1st
IOCS _APAGE
move.w #3,-(sp) ;graphic palet=blue
pea.l text_b3
bsr draw_text
addq.l #6,sp
moveq.l #1,d1 ;2nd
IOCS _APAGE
move.w #2,-(sp) ;graphic palet=red
pea.l text_b3
bsr draw_text
addq.l #6,sp
bsr wait_esc
beq exit
;
moveq.l #0,d1 ;1st
IOCS _APAGE
move.w #3,-(sp) ;graphic palet=blue
pea.l text_b4
bsr draw_text
addq.l #6,sp
moveq.l #1,d1 ;2nd
IOCS _APAGE
move.w #3,-(sp) ;graphic palet=blue
pea.l text_b4
bsr draw_text
addq.l #6,sp
bsr wait_esc
beq exit
;E2_XHCG
; C1 1st:2(red(even)) + 2nd:2(red(even)) = red
; C2 1st:2(red(even)) + 2nd:3(blue) = red
; C3 1st:2(red(even)) + 2nd:4(fuchsia) = red
; C4 1st:2(red(even)) + 2nd:5(aqua) = red
; C5 1st:3(blue) + 2nd:2(red(even)) = blue
; C6 1st:3(blue) + 2nd:3(blue) = blue
; C7 1st:3(blue) + 2nd:4(fuchsia) = aqua
; C8 1st:3(blue) + 2nd:5(aqua) = aqua
; D1 1st:2(red(odd)) + 2nd:2(red(odd)) = purple
; D2 1st:2(red(odd)) + 2nd:3(blue) = purple
; D3 1st:2(red(odd)) + 2nd:4(fuchsia) = gray
; D4 1st:2(red(odd)) + 2nd:5(aqua) = gray
; D5 1st:3(blue) + 2nd:2(red(odd)) = purple
; D6 1st:3(blue) + 2nd:3(blue) = purple
; D7 1st:3(blue) + 2nd:4(fuchsia) = gray
; D8 1st:3(blue) + 2nd:5(aqua) = gray
; Sp Tx Gr G4 G3 G2 G1
move.l #%00_00_01_10_11_10_01_00,d1 ;S>T>G
IOCS _PRIORITY
; 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
move.w #%_0__0__0__1__1__0__1__0__0__0__0__0__0__0__1__1,d1
IOCS _CRTMOD2
;
moveq.l #2,d1 ;palet=2
move.l #%00000_11111_00000_0,d2 ;color=red(even)
IOCS _GPALET
;
moveq.l #0,d1 ;1st
IOCS _APAGE
move.w #2,-(sp) ;graphic palet=red(even)
pea.l text_c1
bsr draw_text
addq.l #6,sp
moveq.l #1,d1 ;2nd
IOCS _APAGE
move.w #2,-(sp) ;graphic palet=red(even)
pea.l text_c1
bsr draw_text
addq.l #6,sp
bsr wait_esc
beq exit
;
moveq.l #0,d1 ;1st
IOCS _APAGE
move.w #2,-(sp) ;graphic palet=red(even)
pea.l text_c2
bsr draw_text
addq.l #6,sp
moveq.l #1,d1 ;2nd
IOCS _APAGE
move.w #3,-(sp) ;graphic palet=blue
pea.l text_c2
bsr draw_text
addq.l #6,sp
bsr wait_esc
beq exit
;
moveq.l #0,d1 ;1st
IOCS _APAGE
move.w #2,-(sp) ;graphic palet=red(even)
pea.l text_c3
bsr draw_text
addq.l #6,sp
moveq.l #1,d1 ;2nd
IOCS _APAGE
move.w #4,-(sp) ;graphic palet=fuchsia
pea.l text_c3
bsr draw_text
addq.l #6,sp
bsr wait_esc
beq exit
;
moveq.l #0,d1 ;1st
IOCS _APAGE
move.w #2,-(sp) ;graphic palet=red(even)
pea.l text_c4
bsr draw_text
addq.l #6,sp
moveq.l #1,d1 ;2nd
IOCS _APAGE
move.w #5,-(sp) ;graphic palet=aqua
pea.l text_c4
bsr draw_text
addq.l #6,sp
bsr wait_esc
beq exit
;
moveq.l #0,d1 ;1st
IOCS _APAGE
move.w #3,-(sp) ;graphic palet=blue
pea.l text_c5
bsr draw_text
addq.l #6,sp
moveq.l #1,d1 ;2nd
IOCS _APAGE
move.w #2,-(sp) ;graphic palet=red(even)
pea.l text_c5
bsr draw_text
addq.l #6,sp
bsr wait_esc
beq exit
;
moveq.l #0,d1 ;1st
IOCS _APAGE
move.w #3,-(sp) ;graphic palet=blue
pea.l text_c6
bsr draw_text
addq.l #6,sp
moveq.l #1,d1 ;2nd
IOCS _APAGE
move.w #3,-(sp) ;graphic palet=blue
pea.l text_c6
bsr draw_text
addq.l #6,sp
bsr wait_esc
beq exit
;
moveq.l #0,d1 ;1st
IOCS _APAGE
move.w #3,-(sp) ;graphic palet=blue
pea.l text_c7
bsr draw_text
addq.l #6,sp
moveq.l #1,d1 ;2nd
IOCS _APAGE
move.w #4,-(sp) ;graphic palet=fuchsia
pea.l text_c7
bsr draw_text
addq.l #6,sp
bsr wait_esc
beq exit
;
moveq.l #0,d1 ;1st
IOCS _APAGE
move.w #3,-(sp) ;graphic palet=blue
pea.l text_c8
bsr draw_text
addq.l #6,sp
moveq.l #1,d1 ;2nd
IOCS _APAGE
move.w #5,-(sp) ;graphic palet=aqua
pea.l text_c8
bsr draw_text
addq.l #6,sp
bsr wait_esc
beq exit
;
moveq.l #2,d1 ;palet=2
move.l #%00000_11111_00000_1,d2 ;color=red(odd)
IOCS _GPALET
;
moveq.l #0,d1 ;1st
IOCS _APAGE
move.w #2,-(sp) ;graphic palet=red(odd)
pea.l text_d1
bsr draw_text
addq.l #6,sp
moveq.l #1,d1 ;2nd
IOCS _APAGE
move.w #2,-(sp) ;graphic palet=red(odd)
pea.l text_d1
bsr draw_text
addq.l #6,sp
bsr wait_esc
beq exit
;
moveq.l #0,d1 ;1st
IOCS _APAGE
move.w #2,-(sp) ;graphic palet=red(odd)
pea.l text_d2
bsr draw_text
addq.l #6,sp
moveq.l #1,d1 ;2nd
IOCS _APAGE
move.w #3,-(sp) ;graphic palet=blue
pea.l text_d2
bsr draw_text
addq.l #6,sp
bsr wait_esc
beq exit
;
moveq.l #0,d1 ;1st
IOCS _APAGE
move.w #2,-(sp) ;graphic palet=red(odd)
pea.l text_d3
bsr draw_text
addq.l #6,sp
moveq.l #1,d1 ;2nd
IOCS _APAGE
move.w #4,-(sp) ;graphic palet=fuchsia
pea.l text_d3
bsr draw_text
addq.l #6,sp
bsr wait_esc
beq exit
;
moveq.l #0,d1 ;1st
IOCS _APAGE
move.w #2,-(sp) ;graphic palet=red(odd)
pea.l text_d4
bsr draw_text
addq.l #6,sp
moveq.l #1,d1 ;2nd
IOCS _APAGE
move.w #5,-(sp) ;graphic palet=aqua
pea.l text_d4
bsr draw_text
addq.l #6,sp
bsr wait_esc
beq exit
;
moveq.l #0,d1 ;1st
IOCS _APAGE
move.w #3,-(sp) ;graphic palet=blue
pea.l text_d5
bsr draw_text
addq.l #6,sp
moveq.l #1,d1 ;2nd
IOCS _APAGE
move.w #2,-(sp) ;graphic palet=red(odd)
pea.l text_d5
bsr draw_text
addq.l #6,sp
bsr wait_esc
beq exit
;
moveq.l #0,d1 ;1st
IOCS _APAGE
move.w #3,-(sp) ;graphic palet=blue
pea.l text_d6
bsr draw_text
addq.l #6,sp
moveq.l #1,d1 ;2nd
IOCS _APAGE
move.w #3,-(sp) ;graphic palet=blue
pea.l text_d6
bsr draw_text
addq.l #6,sp
bsr wait_esc
beq exit
;
moveq.l #0,d1 ;1st
IOCS _APAGE
move.w #3,-(sp) ;graphic palet=blue
pea.l text_d7
bsr draw_text
addq.l #6,sp
moveq.l #1,d1 ;2nd
IOCS _APAGE
move.w #4,-(sp) ;graphic palet=fuchsia
pea.l text_d7
bsr draw_text
addq.l #6,sp
bsr wait_esc
beq exit
;
moveq.l #0,d1 ;1st
IOCS _APAGE
move.w #3,-(sp) ;graphic palet=blue
pea.l text_d8
bsr draw_text
addq.l #6,sp
moveq.l #1,d1 ;2nd
IOCS _APAGE
move.w #5,-(sp) ;graphic palet=aqua
pea.l text_d8
bsr draw_text
addq.l #6,sp
bsr wait_esc
beq exit
exit:
moveq.l #0,d1 ;palet=0
moveq.l #-2,d2 ;color=system
IOCS _TPALET
moveq.l #1,d1 ;palet=1
moveq.l #-2,d2 ;color=system
IOCS _TPALET
IOCS _B_CURON
move.l (sp)+,d1
IOCS _CRTMOD
DOS _EXIT
wait_esc:
@@: IOCS _B_KEYINP
tst.b d0
beq @b
cmp.b #27,d0
rts
draw_text:
link.w a6,#0
;<8+4(a6).w:graphic palet
;<8+0(a6).l:text
movem.l d1-d7/a0-a5,-(sp)
move.w #%00000_00000_00000_0,-(sp) ;palet=black
move.w #256,-(sp) ;height=256
move.w #256,-(sp) ;width=256
move.w #0,-(sp) ;y=0
move.w #0,-(sp) ;x=0
movea.l sp,a1
IOCS _FILL
lea.l 10(sp),sp
move.w #1<<8|0,-(sp) ;font size=16, angle=0
move.w 8+4(a6),-(sp) ;palet
move.w #8<<8|8,-(sp) ;scale=8x8
move.l 8+0(a6),-(sp) ;text
move.w #64,-(sp) ;y=64
move.w #0,-(sp) ;x=0
movea.l sp,a1
IOCS _SYMBOL
lea.l 14(sp),sp
movem.l (sp)+,d1-d7/a0-a5
unlk a6
rts
copy_text:
link.w a6,#0
;<8+0(a6).w:plane select
movem.l d1-d7/a0-a5,-(sp)
moveq.l #0,d1 ;BG text area=0
move.l #0<<15|0<<14|0<<8|0,d2 ;hrev=0, vrev=0, palet block=0, pattern number=0
IOCS _BGTEXTCL
moveq.l #3,d1
1: move.w #$0000,-(sp) ;line style
move.w #256,-(sp) ;height=256
move.w #256,-(sp) ;width=256
move.w #0,-(sp) ;y=0
move.w #0,-(sp) ;x=0
move.w d1,-(sp) ;plane select
movea.l sp,a1
IOCS _TXFILL
lea.l 12(sp),sp
dbra d1,1b
moveq.l #0,d6 ;y
6: moveq.l #0,d5 ;x
5:
clr.w -(sp) ;buffer
move.w d6,-(sp) ;y
move.w d5,-(sp) ;x
movea.l sp,a1
IOCS _POINT
tst.w 4(sp)
addq.l #6,sp
beq 8f
moveq.l #0,d1 ;BG text area=0
move.l d5,d2 ;x
lsr.w #3,d2 ;BG x
move.l d6,d3 ;y
lsr.w #3,d3 ;BG y
move.l #0<<15|0<<14|1<<8|0,d4 ;hrev=0, vrev=0, palet block=1, pattern number=0
IOCS _BGTEXTST
moveq.l #3,d1
1: move.w 8+0(a6),d0 ;plane select
btst.l d1,d0
beq 2f
move.w #$FFFF,-(sp) ;line style
move.w #8,-(sp) ;height=8
move.w #8,-(sp) ;width=8
move.w d6,-(sp) ;y
move.w d5,-(sp) ;x
move.w d1,-(sp) ;plane select
movea.l sp,a1
IOCS _TXFILL
lea.l 12(sp),sp
2: dbra d1,1b
8: addq.w #8,d5
cmp.w #256,d5
blo 5b
addq.w #8,d6
cmp.w #256,d6
blo 6b
movem.l (sp)+,d1-d7/a0-a5
unlk a6
rts
sp_pat0:
.dcb.l 8*4,$00000000 ;top left, bottom left, top right, bottom right
text_a1: .dc.b 'A1',$89,$A9,0 ;yellow
text_a2: .dc.b 'A2',$90,$D4,0 ;red
text_b1: .dc.b 'B1',$90,$D4,0 ;red
text_b2: .dc.b 'B2',$90,$D4,0 ;red
text_b3: .dc.b 'B3',$8E,$87,0 ;purple
text_b4: .dc.b 'B4',$8E,$87,0 ;purple
text_c1: .dc.b 'C1',$90,$D4,0 ;red
text_c2: .dc.b 'C2',$90,$D4,0 ;red
text_c3: .dc.b 'C3',$90,$D4,0 ;red
text_c4: .dc.b 'C4',$90,$D4,0 ;red
text_c5: .dc.b 'C5',$90,$C2,0 ;blue
text_c6: .dc.b 'C6',$90,$C2,0 ;blue
text_c7: .dc.b 'C7',$90,$85,0 ;aqua
text_c8: .dc.b 'C8',$90,$85,0 ;aqua
text_d1: .dc.b 'D1',$8E,$87,0 ;purple
text_d2: .dc.b 'D2',$8E,$87,0 ;purple
text_d3: .dc.b 'D3',$8A,$44,0 ;gray
text_d4: .dc.b 'D4',$8A,$44,0 ;gray
text_d5: .dc.b 'D5',$8E,$87,0 ;purple
text_d6: .dc.b 'D6',$8E,$87,0 ;purple
text_d7: .dc.b 'D7',$8A,$44,0 ;gray
text_d8: .dc.b 'D8',$8A,$44,0 ;gray
.even
.end