mirror of
https://github.com/A2osX/A2osX.git
synced 2024-11-29 02:49:54 +00:00
484 lines
13 KiB
Plaintext
484 lines
13 KiB
Plaintext
|
PR#3
|
|||
|
PREFIX /DATA/A2OSX
|
|||
|
NEW
|
|||
|
INC 1
|
|||
|
AUTO 6
|
|||
|
.LIST OFF
|
|||
|
.OP 65C02
|
|||
|
.OR $2000
|
|||
|
.TF DRV/DHGR.DRV
|
|||
|
*--------------------------------------
|
|||
|
.INB INC/MACROS.I
|
|||
|
.INB INC/A2OSX.I
|
|||
|
.INB INC/IO.I
|
|||
|
*--------------------------------------
|
|||
|
ZPBASE .EQ ZPDRV
|
|||
|
ZPCOLOR .EQ ZPDRV+2
|
|||
|
*--------------------------------------
|
|||
|
* Main DRV entry point
|
|||
|
* input :
|
|||
|
* X = CMD
|
|||
|
* 0 : OPEN
|
|||
|
* 2 : GETEVENT
|
|||
|
* 6 : OUT
|
|||
|
* 8 : CLOSE
|
|||
|
*--------------------------------------
|
|||
|
* CLD $D8
|
|||
|
* JMP (*,x) $7C
|
|||
|
* #JMPTABLE
|
|||
|
* /JMPTABLE
|
|||
|
*--------------------------------------
|
|||
|
CS.START cld
|
|||
|
jmp (.1,x)
|
|||
|
.1 .DA OPEN
|
|||
|
.DA GETEVENT
|
|||
|
.DA OUT
|
|||
|
.DA CLOSE
|
|||
|
.DA GETINFO
|
|||
|
.DA SETPIXEL
|
|||
|
.DA GETPIXEL
|
|||
|
.DA HLINE
|
|||
|
.DA VLINE
|
|||
|
.DA FILLREC
|
|||
|
.DA BITBLT
|
|||
|
L.DEVINFO .DA DEVINFO
|
|||
|
.DA 0 end or relocation
|
|||
|
.DA CS.END-CS.START Code Length To Relocate
|
|||
|
.DA DS.END-DS.START Data Segment to Allocate
|
|||
|
*--------------------------------------
|
|||
|
OPEN
|
|||
|
lda #S.DEV.F.GFX
|
|||
|
sta (pDevContext)
|
|||
|
|
|||
|
ldy #S.DEV.NAME
|
|||
|
ldx #0
|
|||
|
.1 lda DEVNAME,x
|
|||
|
sta (pDevContext),y
|
|||
|
cpx DEVNAME
|
|||
|
beq .8
|
|||
|
inx
|
|||
|
iny
|
|||
|
bne .1
|
|||
|
|
|||
|
.8 lda A2osX.SCREENS
|
|||
|
ora #A2osX.SCREENS.G
|
|||
|
sta A2osX.SCREENS
|
|||
|
|
|||
|
clc
|
|||
|
rts
|
|||
|
*--------------------------------------
|
|||
|
GETEVENT
|
|||
|
OUT clc
|
|||
|
rts
|
|||
|
*--------------------------------------
|
|||
|
CLOSE lda A2osX.SCREENS
|
|||
|
and #$FF^A2osX.SCREENS.G
|
|||
|
sta A2osX.SCREENS
|
|||
|
clc
|
|||
|
rts
|
|||
|
*--------------------------------------
|
|||
|
GETINFO >LDYA L.DEVINFO
|
|||
|
clc
|
|||
|
rts
|
|||
|
*--------------------------------------
|
|||
|
* SETPIXEL
|
|||
|
*--------------------------------------
|
|||
|
* PULLB = X.LO
|
|||
|
* PULLB = X.HI
|
|||
|
* PULLB = Y
|
|||
|
* PULLB = Mode
|
|||
|
* 00000000=mono
|
|||
|
* 00000001=xor (mono on 1 bit)
|
|||
|
* 10000000=color
|
|||
|
* PULLB = Color (if not xor)
|
|||
|
*--------------------------------------
|
|||
|
SETPIXEL >PULLA X.LO
|
|||
|
tax
|
|||
|
>PULLA X.HI
|
|||
|
lsr if 256 =< x < 511
|
|||
|
bcs .1
|
|||
|
lsr
|
|||
|
bcs .2 if 512 < x
|
|||
|
lda DIV7.0,x
|
|||
|
tay
|
|||
|
lda MOD7.0,x
|
|||
|
bra .3
|
|||
|
|
|||
|
.1 lda DIV7.256,x
|
|||
|
tay
|
|||
|
lda MOD7.256,x
|
|||
|
bra .3
|
|||
|
|
|||
|
.2 lda DIV7.512,x
|
|||
|
tay
|
|||
|
lda MOD7.512,x
|
|||
|
|
|||
|
.3 pha save MOD,y=DIV
|
|||
|
|
|||
|
>PULLA Pull Y
|
|||
|
tax
|
|||
|
lda BASEL,x setup line Base Ptr
|
|||
|
sta ZPBASE
|
|||
|
lda BASEH,x
|
|||
|
sta ZPBASE+1
|
|||
|
|
|||
|
sta SET80STORE and prepare for page switching
|
|||
|
|
|||
|
plx get back MOD in x
|
|||
|
|
|||
|
>PULLA Pull Mode
|
|||
|
bmi SETPIXEL.COLOR
|
|||
|
*--------------------------------------
|
|||
|
* X=MOD,Y=DIV
|
|||
|
*--------------------------------------
|
|||
|
SETPIXEL.MONO pha
|
|||
|
tya
|
|||
|
lsr
|
|||
|
tay
|
|||
|
bcs .1 odd=main ram
|
|||
|
sta SETPAGE2
|
|||
|
bra .2
|
|||
|
.1 sta CLRPAGE2
|
|||
|
.2 pla
|
|||
|
lsr CS=xor
|
|||
|
bcs SETPIXEL.MONOX
|
|||
|
|
|||
|
>PULLA get COLOR
|
|||
|
lsr
|
|||
|
bcs SETPIXEL.MONOW
|
|||
|
|
|||
|
lda (ZPBASE),y
|
|||
|
and Mono.NMasks,x
|
|||
|
sta (ZPBASE),y
|
|||
|
rts
|
|||
|
|
|||
|
SETPIXEL.MONOW lda (ZPBASE),y
|
|||
|
and #$7F switch back ths byte to mono
|
|||
|
ora Mono.Masks,x
|
|||
|
sta (ZPBASE),y
|
|||
|
rts
|
|||
|
|
|||
|
SETPIXEL.MONOX lda (ZPBASE),y
|
|||
|
eor Mono.Masks,x
|
|||
|
sta (ZPBASE),y
|
|||
|
rts
|
|||
|
*--------------------------------------
|
|||
|
* X=MOD,Y=DIV
|
|||
|
*--------------------------------------
|
|||
|
SETPIXEL.COLOR tya
|
|||
|
lsr Divide Col by 2 to get in range 0->39
|
|||
|
and #$FE make it 0->38 as color mask on 4 bytes
|
|||
|
clc
|
|||
|
adc ZPBASE ZPBASE now point to first of the 4 columns
|
|||
|
sta ZPBASE
|
|||
|
txa get MOD
|
|||
|
asl times 4 to compute index in color tables
|
|||
|
asl
|
|||
|
tax set in X for Masks,NMasks
|
|||
|
|
|||
|
>PULLA get COLOR
|
|||
|
asl
|
|||
|
asl
|
|||
|
tay
|
|||
|
|
|||
|
lda Color.Masks,x
|
|||
|
beq .1
|
|||
|
|
|||
|
sta SETPAGE2
|
|||
|
lda (ZPBASE)
|
|||
|
and Color.NMasks,x reset existing pixel,
|
|||
|
ora Color.Pixels,y apply color
|
|||
|
and Color.Enable,x filter 4 color bits color.enable bit
|
|||
|
sta (ZPBASE)
|
|||
|
|
|||
|
.1 inx
|
|||
|
iny
|
|||
|
|
|||
|
lda Color.Masks,x
|
|||
|
beq .2
|
|||
|
|
|||
|
sta CLRPAGE2
|
|||
|
lda (ZPBASE)
|
|||
|
and Color.NMasks,x reset existing pixel,
|
|||
|
ora Color.Pixels,y apply color
|
|||
|
and Color.Enable,x filter 4 color bits color.enable bit
|
|||
|
sta (ZPBASE)
|
|||
|
|
|||
|
.2 inc ZPBASE
|
|||
|
inx
|
|||
|
iny
|
|||
|
|
|||
|
lda Color.Masks,x
|
|||
|
beq .3
|
|||
|
|
|||
|
sta SETPAGE2
|
|||
|
lda (ZPBASE)
|
|||
|
and Color.NMasks,x reset existing pixel,
|
|||
|
ora Color.Pixels,y apply color
|
|||
|
and Color.Enable,x filter 4 color bits color.enable bit
|
|||
|
sta (ZPBASE)
|
|||
|
|
|||
|
.3 inx
|
|||
|
iny
|
|||
|
|
|||
|
lda Color.Masks,x
|
|||
|
beq .8
|
|||
|
|
|||
|
sta CLRPAGE2
|
|||
|
lda (ZPBASE)
|
|||
|
and Color.NMasks,x reset existing pixel,
|
|||
|
ora Color.Pixels,y apply color
|
|||
|
and Color.Enable,x filter 4 color bits color.enable bit
|
|||
|
sta (ZPBASE)
|
|||
|
.8 rts
|
|||
|
*--------------------------------------
|
|||
|
GETPIXEL
|
|||
|
*--------------------------------------
|
|||
|
HLINE
|
|||
|
*--------------------------------------
|
|||
|
VLINE
|
|||
|
*--------------------------------------
|
|||
|
FILLREC
|
|||
|
*--------------------------------------
|
|||
|
* params : X,Y,W,H
|
|||
|
*--------------------------------------
|
|||
|
BITBLT
|
|||
|
rts
|
|||
|
*--------------------------------------
|
|||
|
* PRIVATE
|
|||
|
*--------------------------------------
|
|||
|
DIV7.0 .HS 0000000000000001010101010101
|
|||
|
.HS 0202020202020203030303030303
|
|||
|
.HS 0404040404040405050505050505
|
|||
|
.HS 0606060606060607070707070707
|
|||
|
.HS 0808080808080809090909090909
|
|||
|
.HS 0A0A0A0A0A0A0A0B0B0B0B0B0B0B
|
|||
|
.HS 0C0C0C0C0C0C0C0D0D0D0D0D0D0D
|
|||
|
.HS 0E0E0E0E0E0E0E0F0F0F0F0F0F0F
|
|||
|
.HS 1010101010101011111111111111
|
|||
|
.HS 1212121212121213131313131313
|
|||
|
.HS 1414141414141415151515151515
|
|||
|
.HS 1616161616161617171717171717
|
|||
|
.HS 1818181818181819191919191919
|
|||
|
.HS 1A1A1A1A1A1A1A1B1B1B1B1B1B1B
|
|||
|
.HS 1C1C1C1C1C1C1C1D1D1D1D1D1D1D
|
|||
|
.HS 1E1E1E1E1E1E1E1F1F1F1F1F1F1F
|
|||
|
.HS 2020202020202021212121212121
|
|||
|
.HS 2222222222222223232323232323
|
|||
|
.HS 24242424
|
|||
|
DIV7.256 .HS 24242425252525252525
|
|||
|
.HS 2626262626262627272727272727
|
|||
|
.HS 2828282828282829292929292929
|
|||
|
.HS 2A2A2A2A2A2A2A2B2B2B2B2B2B2B
|
|||
|
.HS 2C2C2C2C2C2C2C2D2D2D2D2D2D2D
|
|||
|
.HS 2E2E2E2E2E2E2E2F2F2F2F2F2F2F
|
|||
|
.HS 3030303030303031313131313131
|
|||
|
.HS 3232323232323233333333333333
|
|||
|
.HS 3434343434343435353535353535
|
|||
|
.HS 3636363636363637373737373737
|
|||
|
.HS 3838383838383839393939393939
|
|||
|
.HS 3A3A3A3A3A3A3A3B3B3B3B3B3B3B
|
|||
|
.HS 3C3C3C3C3C3C3C3D3D3D3D3D3D3D
|
|||
|
.HS 3E3E3E3E3E3E3E3F3F3F3F3F3F3F
|
|||
|
.HS 4040404040404041414141414141
|
|||
|
.HS 4242424242424243434343434343
|
|||
|
.HS 4444444444444445454545454545
|
|||
|
.HS 4646464646464647474747474747
|
|||
|
.HS 4848484848484849
|
|||
|
DIV7.512 .HS 494949494949
|
|||
|
.HS 4A4A4A4A4A4A4A4B4B4B4B4B4B4B
|
|||
|
.HS 4C4C4C4C4C4C4C4D4D4D4D4D4D4D
|
|||
|
.HS 4E4E4E4E4E4E4E4F4F4F4F4F4F4F
|
|||
|
*--------------------------------------
|
|||
|
MOD7.0 .HS 0001020304050600010203040506
|
|||
|
.HS 0001020304050600010203040506
|
|||
|
.HS 0001020304050600010203040506
|
|||
|
.HS 0001020304050600010203040506
|
|||
|
.HS 0001020304050600010203040506
|
|||
|
.HS 0001020304050600010203040506
|
|||
|
.HS 0001020304050600010203040506
|
|||
|
.HS 0001020304050600010203040506
|
|||
|
.HS 0001020304050600010203040506
|
|||
|
.HS 0001020304050600010203040506
|
|||
|
.HS 0001020304050600010203040506
|
|||
|
.HS 0001020304050600010203040506
|
|||
|
.HS 0001020304050600010203040506
|
|||
|
.HS 0001020304050600010203040506
|
|||
|
.HS 0001020304050600010203040506
|
|||
|
.HS 0001020304050600010203040506
|
|||
|
.HS 0001020304050600010203040506
|
|||
|
.HS 0001020304050600010203040506
|
|||
|
.HS 00010203
|
|||
|
MOD7.256 .HS 04050600010203040506
|
|||
|
.HS 0001020304050600010203040506
|
|||
|
.HS 0001020304050600010203040506
|
|||
|
.HS 0001020304050600010203040506
|
|||
|
.HS 0001020304050600010203040506
|
|||
|
.HS 0001020304050600010203040506
|
|||
|
.HS 0001020304050600010203040506
|
|||
|
.HS 0001020304050600010203040506
|
|||
|
.HS 0001020304050600010203040506
|
|||
|
.HS 0001020304050600010203040506
|
|||
|
.HS 0001020304050600010203040506
|
|||
|
.HS 0001020304050600010203040506
|
|||
|
.HS 0001020304050600010203040506
|
|||
|
.HS 0001020304050600010203040506
|
|||
|
.HS 0001020304050600010203040506
|
|||
|
.HS 0001020304050600010203040506
|
|||
|
.HS 0001020304050600010203040506
|
|||
|
.HS 0001020304050600010203040506
|
|||
|
.HS 0001020304050600
|
|||
|
MOD7.512 .HS 010203040506
|
|||
|
.HS 0001020304050600010203040506
|
|||
|
.HS 0001020304050600010203040506
|
|||
|
.HS 0001020304050600010203040506
|
|||
|
*--------------------------------------
|
|||
|
BASEL .HS 00.00.00.00.00.00.00.00
|
|||
|
.HS 80.80.80.80.80.80.80.80
|
|||
|
.HS 00.00.00.00.00.00.00.00
|
|||
|
.HS 80.80.80.80.80.80.80.80
|
|||
|
.HS 00.00.00.00.00.00.00.00
|
|||
|
.HS 80.80.80.80.80.80.80.80
|
|||
|
.HS 00.00.00.00.00.00.00.00
|
|||
|
.HS 80.80.80.80.80.80.80.80
|
|||
|
.HS 28.28.28.28.28.28.28.28
|
|||
|
.HS A8.A8.A8.A8.A8.A8.A8.A8
|
|||
|
.HS 28.28.28.28.28.28.28.28
|
|||
|
.HS A8.A8.A8.A8.A8.A8.A8.A8
|
|||
|
.HS 28.28.28.28.28.28.28.28
|
|||
|
.HS A8.A8.A8.A8.A8.A8.A8.A8
|
|||
|
.HS 28.28.28.28.28.28.28.28
|
|||
|
.HS A8.A8.A8.A8.A8.A8.A8.A8
|
|||
|
.HS 50.50.50.50.50.50.50.50
|
|||
|
.HS D0.D0.D0.D0.D0.D0.D0.D0
|
|||
|
.HS 50.50.50.50.50.50.50.50
|
|||
|
.HS D0.D0.D0.D0.D0.D0.D0.D0
|
|||
|
.HS 50.50.50.50.50.50.50.50
|
|||
|
.HS D0.D0.D0.D0.D0.D0.D0.D0
|
|||
|
.HS 50.50.50.50.50.50.50.50
|
|||
|
.HS D0.D0.D0.D0.D0.D0.D0.D0
|
|||
|
*--------------------------------------
|
|||
|
BASEH .HS 20.24.28.2C.30.34.38.3C
|
|||
|
.HS 20.24.28.2C.30.34.38.3C
|
|||
|
.HS 21.25.29.2D.31.35.39.3D
|
|||
|
.HS 21.25.29.2D.31.35.39.3D
|
|||
|
.HS 22.26.2A.2E.32.36.3A.3E
|
|||
|
.HS 22.26.2A.2E.32.36.3A.3E
|
|||
|
.HS 23.27.2B.2F.33.37.3B.3F
|
|||
|
.HS 23.27.2B.2F.33.37.3B.3F
|
|||
|
.HS 20.24.28.2C.30.34.38.3C
|
|||
|
.HS 20.24.28.2C.30.34.38.3C
|
|||
|
.HS 21.25.29.2D.31.35.39.3D
|
|||
|
.HS 21.25.29.2D.31.35.39.3D
|
|||
|
.HS 22.26.2A.2E.32.36.3A.3E
|
|||
|
.HS 22.26.2A.2E.32.36.3A.3E
|
|||
|
.HS 23.27.2B.2F.33.37.3B.3F
|
|||
|
.HS 23.27.2B.2F.33.37.3B.3F
|
|||
|
.HS 20.24.28.2C.30.34.38.3C
|
|||
|
.HS 20.24.28.2C.30.34.38.3C
|
|||
|
.HS 21.25.29.2D.31.35.39.3D
|
|||
|
.HS 21.25.29.2D.31.35.39.3D
|
|||
|
.HS 22.26.2A.2E.32.36.3A.3E
|
|||
|
.HS 22.26.2A.2E.32.36.3A.3E
|
|||
|
.HS 23.27.2B.2F.33.37.3B.3F
|
|||
|
.HS 23.27.2B.2F.33.37.3B.3F
|
|||
|
*--------------------------------------
|
|||
|
Mono.NMasks .DA %01111110
|
|||
|
.DA %01111101
|
|||
|
.DA %01111011
|
|||
|
.DA %01110111
|
|||
|
.DA %01101111
|
|||
|
.DA %01011111
|
|||
|
.DA %00111111
|
|||
|
*--------------------------------------
|
|||
|
Mono.Masks .DA %00000001
|
|||
|
.DA %00000010
|
|||
|
.DA %00000100
|
|||
|
.DA %00001000
|
|||
|
.DA %00010000
|
|||
|
.DA %00100000
|
|||
|
.DA %01000000
|
|||
|
*--------------------------------------
|
|||
|
* bits to "and" to reset color of pixel (0 means nothing to do)
|
|||
|
*--------------------------------------
|
|||
|
Color.NMasks .DA %01110000.00000000.00000000.00000000
|
|||
|
.DA %00001111.01111110.00000000.00000000
|
|||
|
.DA %00000000.01100001.00000000.00000000
|
|||
|
.DA %00000000.00011111.01111100.00000000
|
|||
|
.DA %00000000.00000000.01000011.00000000
|
|||
|
.DA %00000000.00000000.00111111.01111000
|
|||
|
.DA %00000000.00000000.00000000.00000111
|
|||
|
*--------------------------------------
|
|||
|
* bits to "and" to Get color of pixel (0 means nothing to do)
|
|||
|
* 4 bytes * 7 mods
|
|||
|
*--------------------------------------
|
|||
|
Color.Masks .DA %00001111.00000000.00000000.00000000 (nothing to do)
|
|||
|
.DA %01110000.00000001.00000000.00000000 asl0,asl0,rol1,asl0,rol1,asl0,rol1
|
|||
|
.DA %00000000.00011110.00000000.00000000 lsr1
|
|||
|
.DA %00000000.01100000.00000011.00000000 asl1,asl1,rol2,asl1,rol2
|
|||
|
.DA %00000000.00000000.00111100.00000000 lsr2,lsr2
|
|||
|
.DA %00000000.00000000.01000000.00000111 asl2,asl2,rol3
|
|||
|
.DA %00000000.00000000.00000000.01111000 lsr3,lsr3,lsr3
|
|||
|
*--------------------------------------
|
|||
|
Color.Enable .DA %10001111.00000000.00000000.00000000
|
|||
|
.DA %11110000.00000001.00000000.00000000
|
|||
|
.DA %00000000.10011110.00000000.00000000
|
|||
|
.DA %00000000.11100000.00000011.00000000
|
|||
|
.DA %00000000.00000000.10111100.00000000
|
|||
|
.DA %00000000.00000000.11000000.00000111
|
|||
|
.DA %00000000.00000000.00000000.11111000
|
|||
|
*--------------------------------------
|
|||
|
* bits to "ora" to set color of pixel (including "color bit set " for byte hosting bit0)
|
|||
|
* 4 bytes * 16 Colors
|
|||
|
* pixel masks c1110000.c3322221.c5444433.c6666555
|
|||
|
*--------------------------------------
|
|||
|
Color.Pixels .DA %00000000.00000000.00000000.00000000 0000,Black (color bit disable)
|
|||
|
.DA %10010001.10100010.11000100.10001000 0001,Magenta
|
|||
|
.DA %10100010.11000100.10001000.10010001 0010,Brown
|
|||
|
.DA %10110011.11100110.11001100.10011001 0011,Orange
|
|||
|
.DA %11000100.10001000.10010001.10100010 0100,Dark Green
|
|||
|
.DA %11010101.10101010.11010101.10101010 0101,Grey1
|
|||
|
.DA %11100110.11001100.10011001.10110011 0110,Green
|
|||
|
.DA %11110111.11101110.11011101.10111011 0111,Yellow
|
|||
|
.DA %10001000.10010001.10100010.11000100 1000,Dark Blue
|
|||
|
.DA %10011001.10110011.11100110.11001100 1001,Violet
|
|||
|
.DA %10101010.11010101.10101010.11010101 1010,Grey2
|
|||
|
.DA %10111011.11110111.11101111.11011101 1011,Pink
|
|||
|
.DA %11001100.10011001.10110011.11100110 1100,Medium Blue
|
|||
|
.DA %11011101.10111011.11110111.11101110 1101,Light Blue
|
|||
|
.DA %11101110.11011101.10111011.11110111 1110,Aqua
|
|||
|
.DA %01111111.01111111.01111111.01111111 1111,White (color bit disable)
|
|||
|
|
|||
|
*Black 00 00 00 00 0000
|
|||
|
*Magenta 08 11 22 44 0001
|
|||
|
*Brown 44 08 11 22 0010
|
|||
|
*Orange 4C 19 33 66 0011
|
|||
|
*Dark Green 22 44 08 11 0100
|
|||
|
*Grey1 2A 55 2A 55 0101
|
|||
|
*Green 66 4C 19 33 0110
|
|||
|
*Yellow 6E 5D 3B 77 0111
|
|||
|
*Dark Blue 11 22 44 08 1000
|
|||
|
*Violet 19 33 66 4C 1001
|
|||
|
*Grey2 55 2A 55 2A 1010
|
|||
|
*Pink 5D 3B 77 6E 1011
|
|||
|
*Medium Blue 33 66 4C 19 1100
|
|||
|
*Light Blue 3B 77 6E 5D 1101
|
|||
|
*Aqua 77 6E 5D 3B 1110
|
|||
|
*White 7F 7F 7F 7F 1111
|
|||
|
|
|||
|
|
|||
|
*--------------------------------------
|
|||
|
CS.END
|
|||
|
DEVNAME >PSTRING "GFX"
|
|||
|
*--------------------------------------
|
|||
|
DS.START
|
|||
|
*--------------------------------------
|
|||
|
DEVINFO .DA #S.DEV.F.GFX type of DEVINFO STRUCT
|
|||
|
DEVINFO.W .DA 560 X.SIZE
|
|||
|
DEVINFO.H .DA 192 Y.SIZE
|
|||
|
DS.END
|
|||
|
*--------------------------------------
|
|||
|
MAN
|
|||
|
SAVE DRV/DHGR.DRV.S
|
|||
|
ASM
|