mirror of
https://github.com/A2osX/A2osX.git
synced 2025-02-27 00:30:55 +00:00
546 lines
15 KiB
Plaintext
546 lines
15 KiB
Plaintext
PR#3
|
||
PREFIX /A2OSX.BUILD
|
||
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
|
||
|
||
lda #A2osX.SCREENS.G
|
||
>SYSCALL SYS.ScreenSelectA
|
||
|
||
sta SET80STORE
|
||
ldx #192
|
||
|
||
.81 dex
|
||
|
||
lda BASEL,x
|
||
sta ZPBASE
|
||
lda BASEH,x
|
||
sta ZPBASE+1
|
||
|
||
lda #$D5
|
||
|
||
ldy #39
|
||
sta SETPAGE2
|
||
.82 sta (ZPBASE),y
|
||
dey
|
||
bpl .82
|
||
|
||
lda #$AA
|
||
|
||
ldy #39
|
||
sta CLRPAGE2
|
||
.83 sta (ZPBASE),y
|
||
dey
|
||
bpl .83
|
||
|
||
dex
|
||
|
||
lda BASEL,x
|
||
sta ZPBASE
|
||
lda BASEH,x
|
||
sta ZPBASE+1
|
||
|
||
lda #$2A
|
||
|
||
ldy #39
|
||
sta SETPAGE2
|
||
.84 sta (ZPBASE),y
|
||
dey
|
||
bpl .84
|
||
|
||
lda #$55
|
||
|
||
ldy #39
|
||
sta CLRPAGE2
|
||
.85 sta (ZPBASE),y
|
||
dey
|
||
bpl .85
|
||
|
||
txa
|
||
bne .81
|
||
|
||
>DEBUG
|
||
|
||
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
|
||
* 00000001=mono
|
||
* 00000010=16 colors
|
||
* 1000000=xor (mono on 1 bit)
|
||
* 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
|
||
ldy DIV7.0,x
|
||
lda MOD7.0,x
|
||
bra .3
|
||
|
||
.1 ldy DIV7.256,x
|
||
lda MOD7.256,x
|
||
bra .3
|
||
|
||
.2 ldy DIV7.512,x
|
||
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
|
||
sta SETHIRES
|
||
plx get back MOD in x
|
||
|
||
>PULLA Pull Mode
|
||
and #$FF
|
||
bpl SETPIXEL.SOLID
|
||
|
||
SETPIXEL.XOR tya
|
||
lsr
|
||
tay
|
||
bcs .1 odd=main ram
|
||
sta SETPAGE2
|
||
bra .2
|
||
.1 sta CLRPAGE2
|
||
.2 lda (ZPBASE),y
|
||
eor Mono.Masks,x
|
||
sta (ZPBASE),y
|
||
rts
|
||
*--------------------------------------
|
||
* A=Mode,X=MOD,Y=DIV
|
||
*--------------------------------------
|
||
SETPIXEL.SOLID dec
|
||
bne SETPIXEL.COLOR
|
||
tya
|
||
lsr
|
||
tay
|
||
bcs .1 odd=main ram
|
||
sta SETPAGE2
|
||
bra .2
|
||
.1 sta CLRPAGE2
|
||
|
||
.2 >PULLA get COLOR
|
||
lsr
|
||
bcs .3 set white pixel
|
||
|
||
lda (ZPBASE),y
|
||
and Mono.NMasks,x includes And $7F for mono
|
||
sta (ZPBASE),y
|
||
rts
|
||
|
||
.3 lda (ZPBASE),y
|
||
and #$7F switch back this byte to mono
|
||
ora 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
|
||
and Color.Pixels,y apply color
|
||
sta GBYTE
|
||
|
||
sta SETPAGE2
|
||
lda (ZPBASE)
|
||
and Color.NMasks,x reset existing pixel,
|
||
ora GBYTE
|
||
sta (ZPBASE)
|
||
|
||
.1 inx
|
||
iny
|
||
|
||
lda Color.Masks,x
|
||
beq .2
|
||
and Color.Pixels,y apply color
|
||
sta GBYTE
|
||
|
||
sta CLRPAGE2
|
||
lda (ZPBASE)
|
||
and Color.NMasks,x reset existing pixel,
|
||
ora GBYTE
|
||
sta (ZPBASE)
|
||
|
||
.2 inc ZPBASE
|
||
inx
|
||
iny
|
||
|
||
lda Color.Masks,x
|
||
beq .3
|
||
and Color.Pixels,y apply color
|
||
sta GBYTE
|
||
|
||
sta SETPAGE2
|
||
lda (ZPBASE)
|
||
and Color.NMasks,x reset existing pixel,
|
||
ora GBYTE
|
||
sta (ZPBASE)
|
||
|
||
.3 inx
|
||
iny
|
||
|
||
lda Color.Masks,x
|
||
beq .8
|
||
and Color.Pixels,y apply color
|
||
sta GBYTE
|
||
|
||
sta CLRPAGE2
|
||
lda (ZPBASE)
|
||
and Color.NMasks,x reset existing pixel,
|
||
ora GBYTE
|
||
sta (ZPBASE)
|
||
|
||
.8 rts
|
||
*--------------------------------------
|
||
GETPIXEL
|
||
*--------------------------------------
|
||
HLINE
|
||
*--------------------------------------
|
||
VLINE
|
||
*--------------------------------------
|
||
FILLREC
|
||
*--------------------------------------
|
||
* params : X,Y,W,H
|
||
*--------------------------------------
|
||
BITBLT
|
||
rts
|
||
*--------------------------------------
|
||
CS.END
|
||
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.DEL .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.Masks .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 (color bit disable)
|
||
.DA #%10010001,#%10100010,#%11000100,#%10001000
|
||
.DA #%10100010,#%11000100,#%10001000,#%10010001
|
||
.DA #%10110011,#%11100110,#%11001100,#%10011001
|
||
.DA #%11000100,#%10001000,#%10010001,#%10100010
|
||
.DA #%11010101,#%10101010,#%11010101,#%10101010
|
||
.DA #%11100110,#%11001100,#%10011001,#%10110011
|
||
.DA #%11110111,#%11101110,#%11011101,#%10111011
|
||
.DA #%10001000,#%10010001,#%10100010,#%11000100
|
||
.DA #%10011001,#%10110011,#%11100110,#%11001100
|
||
.DA #%10101010,#%11010101,#%10101010,#%11010101
|
||
.DA #%10111011,#%11110111,#%11101111,#%11011101
|
||
.DA #%11001100,#%10011001,#%10110011,#%11100110
|
||
.DA #%11011101,#%10111011,#%11110111,#%11101110
|
||
.DA #%11101110,#%11011101,#%10111011,#%11110111
|
||
.DA #%01111111,#%01111111,#%01111111,#%01111111 (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
|
||
*--------------------------------------
|
||
DEVNAME >PSTRING "GFX"
|
||
GBYTE .BS 1
|
||
*--------------------------------------
|
||
DS.START
|
||
DEVINFO .DA #S.DEV.F.GFX type of DEVINFO STRUCT
|
||
DEVINFO.MODES .DA #%10000011 XOR,16 & B/W
|
||
DEVINFO.W .DA 560 X.SIZE
|
||
DEVINFO.H .DA 192 Y.SIZE
|
||
DS.END
|
||
*--------------------------------------
|
||
MAN
|
||
SAVE DRV/DHGR.DRV.S
|
||
ASM
|