Kernel version 0.9 : Cleanup in DHGR stuff, adding primitives (DrawLine,....etc...)

This commit is contained in:
Rémy GIBERT 2017-06-09 17:36:05 +02:00
parent 77e3328220
commit d0d356419f
8 changed files with 365 additions and 248 deletions

View File

@ -17,7 +17,6 @@ AUTO 6
ZPBase .EQ ZPDRV
ZPShiftLo .EQ ZPDRV+2
ZPShiftHi .EQ ZPDRV+4
ZPCtrlBlk .EQ ZPDRV+8
*--------------------------------------
* File Header (16 Bytes)
*--------------------------------------
@ -153,12 +152,8 @@ DRV.CS.START .DA STATUS
.DA GETPIXEL
.DA HLINE
.DA VLINE
.DA FILLRECT
.DA BITBLT
.DA FILLREC
.DA SETCURPOS
.DA SETCUR
.DA HIDECUR
.DA SHOWCUR
*--------------------------------------
L.STAT .DA STAT
L.DIV7.0 .DA DIV7.0
@ -241,29 +236,26 @@ CLOSE clc
*--------------------------------------
* SETPIXEL
* In : YA = Ptr to CtrlBlk :
* 0 : X
* 2 : Y
* 4 : Mode
* 00000000=xor
* 00000001=b/w (1 bit/pixel)
* 00000100=16 colors (4 bits/pixel)
* 00001000=256 colors (8 bits/pixel)
* 5 : Color
* 1 : OP (XOR only)
* 2 : Mode
* 3 : Color
* 4 : SrcX1
* 6 : SrcY1
*--------------------------------------
SETPIXEL >STYA ZPBase
ldy #5
ldy #S.CB.Y1 Skip S.CB.Y1+1.....always 0
.1 lda (ZPBase),y
sta ZPCtrlBlk,y
sta CB.Cache,y
dey
bpl .1
sta SET80STORE
lda ZPCtrlBlk+4
bit #%00000100
bne .7
*-----B&W -----------------------------
ldx ZPCtrlBlk+1 X.HI
lda CB.Cache+S.CB.MODE
bit #S.CB.MODE.C16
bne SETPIXEL.C16
*---- MONO ----------------------------
ldx CB.Cache+S.CB.X1+1
lda DIV7.hi,x
sta .2+2
@ -272,7 +264,7 @@ SETPIXEL >STYA ZPBase
lda MOD7.hi,x
sta .4+2
ldx ZPCtrlBlk X.LO
ldx CB.Cache+S.CB.X1
.2 lda DIV7.0,x A=Col*2+AuxBit
eor #1 toggle last bit : 0=Aux, 1=Main
@ -281,6 +273,8 @@ SETPIXEL >STYA ZPBase
rol .3+1 if CS, -> SETPAGE2
.3 sta CLRPAGE2
ldy CB.Cache+S.CB.Y1
adc BASEL,y setup line Base Ptr (A=Col)
sta ZPBase
lda BASEH,y
@ -288,10 +282,10 @@ SETPIXEL >STYA ZPBase
.4 ldy MOD7.0,x x = X.LO
dec ZPCtrlBlk+4 get mode
bne .5
lda CB.Cache+S.CB.OP
beq .5
lda (ZPBase) Mode=0, XOR
lda (ZPBase) XOR
eor Mono.Masks,y y = mod 7
sta (ZPBase)
@ -299,7 +293,7 @@ SETPIXEL >STYA ZPBase
rts
.5 lda (ZPBase)
ldx ZPCtrlBlk+5 mode=1, get color
ldx CB.Cache+S.CB.COLOR get color
bne .6
and Mono.NMasks,y includes And $7F for mono
@ -313,17 +307,17 @@ SETPIXEL >STYA ZPBase
sta CLR80STORE
rts
*-----16 Colors -----------------------
.7 lda ZPCtrlBlk X.LO
lsr ZPCtrlBlk+1 divide by 4
SETPIXEL.C16 lda CB.Cache+S.CB.X1
lsr CB.Cache+S.CB.X1+1 divide by 4
ror
lsr ZPCtrlBlk+1
lsr CB.Cache+S.CB.X1+1
ror
tay Y=CX/4 (range 0->139)
lda DIV7.0,y A=CX/4/7 (range 0->19)
asl times 2 (range 0->38)
ldx ZPCtrlBlk+2
ldx CB.Cache+S.CB.Y1
adc BASEL,x setup line Base Ptr (cc by asl)
sta ZPBase ZPBase now point to first of...
lda BASEH,x
@ -335,7 +329,7 @@ SETPIXEL >STYA ZPBase
asl
tax set in X for Masks,NMasks
lda ZPCtrlBlk+5 get COLOR
lda CB.Cache+S.CB.COLOR
asl times 4 to compute index in PIXELS table
asl
@ -402,187 +396,86 @@ SETPIXEL >STYA ZPBase
.13 sta CLR80STORE
rts
*--------------------------------------
* GETPIXEL
*--------------------------------------
GETPIXEL rts
*--------------------------------------
HLINE rts
* HLINE X1,X2 at Y1
*--------------------------------------
VLINE rts
HLINE >STYA ZPBase
ldy #S.CB.X2+1
.1 lda (ZPBase),y
sta CB.Cache,y
dey
bpl .1
lda CB.Cache+S.CB.MODE
bit #S.CB.MODE.C16
bne HLINE.C16
*----- MONO ---------------------------
HLINE.C16
rts
*--------------------------------------
FILLREC rts
* VLINE Y1,Y2 at X1
*--------------------------------------
VLINE >STYA ZPBase
ldy #S.CB.Y2
.1 lda (ZPBase),y
sta CB.Cache,y
dey
bpl .1
VLINE.I
rts
*--------------------------------------
* FILLRECT
* 2 : Mode
* 3 : Color
* 4 : SrcX1
* 6 : SrcY1
* 8 : SrcX2
* 10 : SrcY2
*--------------------------------------
FILLRECT >STYA ZPBase
ldy #S.CB.Y2
.1 lda (ZPBase),y
sta CB.Cache,y
dey
bpl .1
.2 jsr VLINE.I
lda CB.Cache+S.CB.Y1
cmp CB.Cache+S.CB.Y2
beq .8
inc CB.Cache+S.CB.Y1
bra .2
.8 rts
*--------------------------------------
* BitBlt
* In : YA = Ptr to CtrlBlk :
* 0 : Operation
* %00000001 : Save
* %00000010 : Replace
* %00000100 : AND with Src BitMask
* %00001000 : ORA with Src BitMap
* %00010000 : XOR
* 2 : SavePTR
* 4 : SrcAX
* 6 : SrcAY
* 8 : SrcBX
* 10 : SrcBY
* 1 : OP
* 4 : SrcX1
* 6 : SrcY1
* 8 : SrcX2
* 10 : SrcY2
* 12 : DestX
* 14 : DestY
* 16 : BM Struct
* 16 : BM Struct Ptr
* 18 : Save Ptr
*--------------------------------------
BITBLT >STYA ZPCtrlBlk
lda (ZPCtrlBlk)
clc
rts
*--------------------------------------
* Y,A = pPoint
*--------------------------------------
SETCURPOS >STYA ZPBase
ldy #3
.1 lda (ZPBase),y
sta CUR.X,y
dey
bpl .1
bit CUR.State
bpl .2
jsr HIDECUR.I
jsr SHOWCUR.I
.2 clc
rts
*--------------------------------------
* Y,A = pCur
*--------------------------------------
SETCUR >STYA ZPBase
ldy #S.CUR-1
.1 lda (ZPBase),y
sta CUR.Buf,y
dey
bpl .1
bit CUR.State
bpl .2
jsr HIDECUR.I
jsr SHOWCUR.I
.2 clc
rts
*--------------------------------------
SHOWCUR bit CUR.State
bpl SHOWCUR.I
clc
rts
SHOWCUR.I sta SET80STORE
ldx CUR.X+1
lda DIV7.hi,x
sta .71+2
lda MOD7.hi,x
sta .72+2
ldx CUR.X
.71 lda DIV7.0,x
lsr
sta SB.StartCol
lda #0
sbc #0
sta SB.StartPage
.72 ldy MOD7.0,x
lda Shiftlo.Hi,y
sta ZPShiftLo+1
lda ShiftHi.Hi,y
sta ZPShiftHi+1
lda L.Shift0.Lo
sta ZPShiftLo
lda L.Shift0.hi
sta ZPShifthi
lda CUR.Y
sta CY
ldx #0 index to CUR data/mask
.1 ldy CY
lda BaseL,y
clc
adc SB.StartCol
sta ZPBase
lda BaseH,y
sta ZPBase+1
lda SB.StartPage
sta SB.Page
lda SB.Page
tay
eor #1
sta SB.Page
sta CLRPAGE2,y
BITBLT >STYA ZPBase
lda (ZPBase)
ldy CUR.Buf+S.CUR.MASK,x
and (ZPShiftLo),y
ldy CUR.Buf+S.CUR.DATA,x
ora (ZPShiftLo),y
sta (ZPBase)
lda SB.Page
tay
eor #1
sta SB.Page
sta CLRPAGE2,y
beq .3
inc ZPBase
.3 lda (ZPBase)
ldy CUR.Buf+S.CUR.MASK,x
and (ZPShiftHi),y
ldy CUR.Buf+S.CUR.DATA,x
ora (ZPShiftHi),y
inx
ldy CUR.Buf+S.CUR.MASK,x
and (ZPShiftLo),y
ldy CUR.Buf+S.CUR.DATA,x
ora (ZPShiftLo),y
sta (ZPBase)
lda SB.Page
tay
eor #1
sta SB.Page
sta CLRPAGE2,y
beq .4
inc ZPBase
.4 lda (ZPBase)
ldy CUR.Buf+S.CUR.MASK,x
and (ZPShiftHi),y
ldy CUR.Buf+S.CUR.DATA,x
ora (ZPShiftHi),y
sta (ZPBase)
inx
cpx #32
bne .1
sta CLR80STORE
sec
ror CUR.State
SHOWCUR.RTS clc
rts
*--------------------------------------
HIDECUR bit CUR.State
bpl HIDECUR.RTS
HIDECUR.I
clc
ror CUR.State
HIDECUR.RTS clc
rts
*--------------------------------------
DRV.CS.END
@ -610,22 +503,13 @@ MOD7.hi .BS 3
Shiftlo.hi .BS 7
Shifthi.hi .BS 7
*--------------------------------------
CB.Cache .BS S.CB
*--------------------------------------
CX .BS 2
CY .BS 1
COL .BS 1
GBYTE .BS 1
*--------------------------------------
CUR.State .BS 1
CUR.X .BS 2
CUR.Xdiv7 .BS 1
CUR.Xmod7 .BS 1
CUR.Y .BS 2
CUR.Buf .BS S.CUR
CUR.SaveCol .BS 1
CUR.SaveColCnt .BS 1
CUR.SaveRow .BS 1
CUR.SaveRowCnt .BS 1
CUR.SaveBuf .BS 3*16 MAX 3 bytes*16 rows
SB.StartPage .BS 1
SB.Page .BS 1
SB.StartCol .BS 1
@ -639,7 +523,7 @@ STAT .DA #0
.DA #0
.DA $0900
*--------------------------------------
DEVSTAT.MODES .DA #%10000011 XOR,16 & B/W
DEVSTAT.MODES .DA #S.CB.MODE.MONO+S.CB.MODE.C16
DEVSTAT.W .DA 560 X.SIZE
DEVSTAT.H .DA 192 Y.SIZE
*--------------------------------------

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -373,7 +373,8 @@ DEVMGR.GFX.SETPIXEL .EQ 22
DEVMGR.GFX.GETPIXEL .EQ 24
DEVMGR.GFX.HLINE .EQ 26
DEVMGR.GFX.VLINE .EQ 28
DEVMGR.GFX.BITBLT .EQ 30
DEVMGR.GFX.FILLRECT .EQ 30
DEVMGR.GFX.BITBLT .EQ 32
*--------------------------------------
S.DEVSTAT.S .EQ 0
S.DEVSTAT.S.BLOCK .EQ %10000000

View File

@ -6,6 +6,41 @@ AUTO 6
.LIST OFF
.OP 65C02
*--------------------------------------
S.CB.hDC .EQ 0
S.CB.OP .EQ 1
S.CB.OP.SAVE .EQ %00000001
S.CB.OP.REPLACE .EQ %00000010
S.CB.OP.AND .EQ %00000100
S.CB.OP.ORA .EQ %00001000
S.CB.OP.XOR .EQ %00010000
S.CB.MODE .EQ 2
S.CB.MODE.MONO .EQ %00000001 b/w (1 bit/pixel)
*S.CB.MODE.C4 .EQ %00000010
*S.CB.MODE.C8 .EQ %00000100
S.CB.MODE.C16 .EQ %00001000 16 colors (4 bits/pixel)
S.CB.MODE.C256 .EQ %00010000 256 colors (8 bits/pixel)
S.CB.COLOR .EQ 3
S.CB.X1 .EQ 4
S.CB.Y1 .EQ 6
S.CB.X2 .EQ 8
S.CB.Y2 .EQ 10
S.CB.DestX .EQ 12
S.CB.DestY .EQ 14
S.CB.SrcPtr .EQ 16
S.CB.DstPtr .EQ 18
*
S.CB .EQ 20
*--------------------------------------
S.DC.hDev .EQ 0
S.DC.hMem .EQ 1
S.DC.Parent .EQ 2
S.DC.X .EQ 4
S.DC.Y .EQ 6
S.DC.W .EQ 8
S.DC.H .EQ 10
*
S.DC .EQ 12
*--------------------------------------
S.CUR.HotPointX .EQ 0
S.CUR.HotPointY .EQ 1
S.CUR.DATA .EQ 2 16x16 bits = 32 bytes
@ -15,8 +50,8 @@ S.CUR .EQ 66
S.BM.F .EQ 0
S.BM.F.BBP1 .EQ %00000001
S.BM.F.BBP2 .EQ %00000010
S.BM.F.BBP4 .EQ %00000100
S.BM.F.BBP8 .EQ %00001000
S.BM.F.BBP4 .EQ %00001000
S.BM.F.BBP8 .EQ %00010000
S.BM.RowBytes .EQ 1
S.BM.W .EQ 2
S.BM.H .EQ 4
@ -24,10 +59,12 @@ S.BM.MASK.OFFSET .EQ 6
S.BM.DATA .EQ 8
*--------------------------------------
LIBGFX.InitGFXA .EQ 4
LIBGFX.SetCursorPos .EQ 6
LIBGFX.SetCursorYA .EQ 8
LIBGFX.HideCursor .EQ 10
LIBGFX.ShowCursor .EQ 12
LIBGFX.CloseGFX .EQ 4
LIBGFX.SetCursorPos .EQ 8
LIBGFX.SetCursorYA .EQ 10
LIBGFX.HideCursor .EQ 12
LIBGFX.ShowCursor .EQ 14
LIBGFX.DrawLine .EQ 16
*--------------------------------------
MAN
SAVE /A2OSX.BUILD/INC/LIBGFX.I

View File

@ -12,7 +12,28 @@ AUTO 6
.INB /A2OSX.BUILD/INC/A2OSX.I
.INB /A2OSX.BUILD/INC/LIBGFX.I
*--------------------------------------
ZPPtr1 .EQ ZPLIB
.MA SWAP16
lda ]1
ldx ]2
stx ]1
sta ]2
lda ]1+1
ldx ]2+1
stx ]1+1
sta ]2+1
.EM
.MA NOT16
sec
lda #0
sbc ]1
sta ]1
lda #0
sbc ]1+1
sta ]1+1
.EM
*--------------------------------------
ZPCBPtr .EQ ZPLIB
ZPDCPtr .EQ ZPLIB+2
*--------------------------------------
* File Header (16 Bytes)
*--------------------------------------
@ -31,22 +52,28 @@ CS.START cld
.1 .DA LIB.LOAD
.DA LIB.UNLOAD
.DA InitGFXA
.DA CloseGFX
.DA InitCursor
.DA SetCursorYA
.DA HideCursor
.DA ShowCursor
.DA DrawLine
L.CB.Cache .DA CB.Cache
.DA 0
*--------------------------------------
LIB.LOAD
LIB.UNLOAD clc
rts
*--------------------------------------
InitGFXA sta hDev
>SYSCALL GetDevByIDA
>STYA GoDevGFX.1+1
clc
rts
.9 stz hDev
rts
*--------------------------------------
CloseGFX
stz hDev
sec
rts
*--------------------------------------
@ -61,11 +88,158 @@ ShowCursor
clc
rts
*--------------------------------------
* .INB LIB/LIBGFX.S.CUR
* In: Control Block
* hDC
* OP
* MODE
* COLOR
* X1
* Y1
* X2
* Y2
*--------------------------------------
DrawLine ldy #S.CB.Y2+1
jsr GetCB
sec
lda CB.Cache+S.CB.X2
sbc CB.Cache+S.CB.X1
sta DX
lda CB.Cache+S.CB.X2+1
sbc CB.Cache+S.CB.X1+1
sta DX+1 DX% = X2% - X1%
bmi .1 DX < 0....
ora DX
bne .2 DX > 0...
ldx #DEVMGR.GFX.VLINE
jmp GoDevGFX DX=0 : VLIN Y1,Y2 At X1
.1 >SWAP16 CB.Cache+S.CB.X1,CB.Cache+S.CB.X2
>SWAP16 CB.Cache+S.CB.Y1,CB.Cache+S.CB.Y2
>NOT16 DX swap X1/X2, Y1/Y2, set DX=-DX
.2 stz IY
sec
lda CB.Cache+S.CB.Y2
sbc CB.Cache+S.CB.Y1
sta DY
lda CB.Cache+S.CB.Y2+1
sbc CB.Cache+S.CB.Y1+1
sta DY+1 DY% = Y2% - Y1%
bmi .3 DY < 0 ...
ora DY
bne .4
ldx #DEVMGR.GFX.HLINE
jmp GoDevGFX DY=0 : HLIN X1,X2 At Y1
.3 >NOT16 DY set DY=-DY
dec IY
.4 ldx #DEVMGR.GFX.SETPIXEL
jsr GoDevGFX
sec
lda DX
sbc DY
sta DXY
lda DX+1
sbc DY+1
sta DXY+1
bmi DrawLine.IncY DY is greater than DX, we will increase on Y axis
ora DXY
bne DrawLine.IncX DY is lower than DX, we will increase on X axis
DrawLine.XY lda DX DX=DY
eor #$ff
sta Counter
lda DX+1
eor #$ff
sta Counter+1
.1 inc Counter
bne .2
inc Counter+1
beq .8
.2 inc CB.Cache+S.CB.X1
bne .3
inc CB.Cache+S.CB.X1+1
.3 bit IY
bmi .4
inc CB.Cache+S.CB.Y1
bne .5
inc CB.Cache+S.CB.Y1+1
bra .5
.4 sec
lda CB.Cache+S.CB.Y1
sbc #1
sta CB.Cache+S.CB.Y1
bcs .5
dec CB.Cache+S.CB.Y1+1
.5 ldx #DEVMGR.GFX.SETPIXEL
jsr GoDevGFX
bra .1
.8 rts
DrawLine.IncY lda DY
eor #$ff
sta Counter
lda DY+1
eor #$ff
sta Counter+1
rts
DrawLine.IncX lda DX
eor #$ff
sta Counter
lda DX+1
eor #$ff
sta Counter+1
rts
*--------------------------------------
GetCB >PULLW ZPCBPtr
.1 lda (ZPCBPtr),y Y=Byte count to cache
sta CB.Cache,y
dey
bpl .1
rts
*--------------------------------------
GoDevGFX >LDYA L.CB.Cache
GoDevGFX.1 jmp $ffff
*--------------------------------------
CS.END
hDev .BS 1
*--------------------------------------
DX .BS 2
DY .BS 2
IY .BS 1
DXY .BS 2
Counter .BS 2
*--------------------------------------
CB.Cache .BS S.CB
*--------------------------------------
CUR.Arrow .DA #0
.DA #0
CUR.Arrow.DATA .DA %00000001.000000000

View File

@ -39,8 +39,9 @@ L.DEVNAME.MOUSE .DA DEVNAME.MOUSE
L.MSG.INIT .DA MSG.INIT
L.MouseClamp .DA MouseClamp
L.MouseData .DA MouseData
L.SetPixel.X .DA SetPixel.X
L.DrawLine.X1 .DA DrawLine.X1
L.SetPixel.CB .DA SetPixel.CB
L.DrawLine1.CB .DA DrawLine1.CB
L.DrawLine2.CB .DA DrawLine2.CB
.DA 0
*--------------------------------------
CS.INIT >LDYA L.MSG.INIT
@ -117,9 +118,7 @@ CS.INIT >LDYA L.MSG.INIT
clc
rts
*--------------------------------------
CS.RUN ldy #S.EVT.hDEV
lda A2osX.ASCREEN GUI screen active ?
CS.RUN lda A2osX.ASCREEN GUI screen active ?
cmp #3
bne .8 no, exit....
@ -147,13 +146,15 @@ CS.RUN ldy #S.EVT.hDEV
lda MouseData+4
sta SetPixel.Y+1
lda #4
lda #0 S.CB.OP.XOR
sta SetPixel.OP
lda #S.CB.MODE.MONO
sta SetPixel.Mode
lda #15
lda #1
sta SetPixel.Color
>LDYA L.SetPixel.X
>LDYA L.SetPixel.CB
ldx #DEVMGR.GFX.SETPIXEL
jsr GoDevGFX
clc
@ -176,21 +177,21 @@ CS.DOEVENT sec
CS.QUIT clc
rts
*--------------------------------------
Destop.Paint lda #4
Destop.Paint lda #S.CB.MODE.C16
sta SetPixel.Mode
lda #0
sta SetPixel.Color
lda #0
lda #20
sta SetPixel.Y
.1 lda #0
.1 lda #20
sta SetPixel.X
lda /0
lda /20
sta SetPixel.X+1
.2 >LDYA L.SetPixel.X
.2 >LDYA L.SetPixel.CB
ldx #DEVMGR.GFX.SETPIXEL
jsr GoDevGFX
@ -203,9 +204,9 @@ Destop.Paint lda #4
inc SetPixel.X+1
.3 lda SetPixel.X
cmp #279
cmp #79
lda SetPixel.X+1
sbc /279
sbc /79
bcc .2
inc SetPixel.Y
@ -220,6 +221,11 @@ Destop.Paint lda #4
cmp #16
bne .1
>PUSHW L.DrawLine1.CB
>LIBCALL hLibGFX,LIBGFX.DrawLine
>PUSHW L.DrawLine2.CB
>LIBCALL hLibGFX,LIBGFX.DrawLine
.8 rts
*--------------------------------------
*--------------------------------------
@ -237,16 +243,31 @@ hDevGFX .BS 1
hDevMouse .BS 1
MouseClamp .BS 8
MouseData .BS 5
SetPixel.X .BS 2
SetPixel.Y .BS 2
*--------------------------------------
SetPixel.CB .BS 1 hDC
SetPixel.OP .BS 1
SetPixel.Mode .BS 1
SetPixel.Color .BS 1
DrawLine.X1 .BS 2
DrawLine.Y1 .BS 2
DrawLine.X2 .BS 2
DrawLine.Y2 .BS 2
DrawLine.Mode .BS 1
DrawLine.Color .BS 1
SetPixel.X .BS 2
SetPixel.Y .BS 2
*--------------------------------------
DrawLine1.CB .BS 1 hDC
DrawLine1.OP .DA #0
DrawLine1.Mode .DA #S.CB.MODE.MONO
DrawLine1.Color .DA #1
DrawLine1.X1 .DA 200
DrawLine1.Y1 .DA 0
DrawLine1.X2 .DA 200+191
DrawLine1.Y2 .DA 191
*--------------------------------------
DrawLine2.CB .BS 1 hDC
DrawLine2.OP .DA #0
DrawLine2.Mode .DA #S.CB.MODE.C16
DrawLine2.Color .DA #8
DrawLine2.X1 .DA 220
DrawLine2.Y1 .DA 0
DrawLine2.X2 .DA 220+191
DrawLine2.Y2 .DA 191
MAN
SAVE /A2OSX.SRC/SBIN/DESKTOP.S
ASM