Kernel version 0.9 : DHGR.DRV, primitives,

LIBGFX : DrawLine working....
This commit is contained in:
Rémy GIBERT 2017-06-15 17:36:25 +02:00
parent ad99363574
commit 34d100b807
6 changed files with 431 additions and 58 deletions

View File

@ -17,6 +17,7 @@ AUTO 6
ZPBase .EQ ZPDRV
ZPShiftLo .EQ ZPDRV+2
ZPShiftHi .EQ ZPDRV+4
ZPCount .EQ ZPDRV+6
*--------------------------------------
* File Header (16 Bytes)
*--------------------------------------
@ -262,20 +263,20 @@ SETPIXEL >STYA ZPBase
SETPIXEL.MONO ldx CB.Cache+S.CB.X1+1 Get X Hi byte....
lda DIV7.lo,x
sta .2+1
sta .1+1
lda DIV7.hi,x
sta .2+2
sta .1+2
lda MOD7.lo,x
sta .4+1
sta .2+1
lda MOD7.hi,x
sta .4+2
sta .2+2
lda DIV7.BASE,x
ldx CB.Cache+S.CB.X1
clc
.2 adc $ffff,x DIV7 : x = X.LO, a = X DIV 7
.1 adc $ffff,x DIV7 : x = X.LO, a = X DIV 7
pha save X DIV 7
lsr
@ -290,7 +291,7 @@ SETPIXEL.MONO ldx CB.Cache+S.CB.X1+1 Get X Hi byte....
tay
sta $c000,y
.4 ldy $ffff,x MOD7 : x = X.LO, y = X MOD 7
.2 ldy $ffff,x MOD7 : x = X.LO, y = X MOD 7
lda CB.Cache+S.CB.OP
beq .5
@ -322,8 +323,8 @@ SETPIXEL.C16 lda CB.Cache+S.CB.X1
ror
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)
tay Y=X/4 (range 0->139)
lda DIV7.0,y A=X/4/7 (range 0->19)
asl times 2 (range 0->38)
@ -424,9 +425,56 @@ HLINE.I lda CB.Cache+S.CB.MODE
bit #S.CB.MODE.C16
bne HLINE.C16
HLINE.MONO
HLINE.MONO lda CB.Cache+S.CB.X2 Count=X2-X1
sec
sbc CB.Cache+S.CB.X1
eor #$ff
sta ZPCount
lda CB.Cache+S.CB.X2+1
sbc CB.Cache+S.CB.X1+1
eor #$ff
sta ZPCount+1
ldx CB.Cache+S.CB.X1+1 Get X Hi byte....
lda DIV7.lo,x
sta .1+1
lda DIV7.hi,x
sta .1+2
lda MOD7.lo,x
sta .2+1
lda MOD7.hi,x
sta .2+2
lda DIV7.BASE,x
ldx CB.Cache+S.CB.X1
clc
.1 adc $ffff,x DIV7 : x = X.LO, a = X DIV 7
pha save X DIV 7
lsr
ldy CB.Cache+S.CB.Y1
clc
adc BASEL,y setup line Base Ptr (A=Col)
sta ZPBase
lda BASEH,y
sta ZPBase+1
ply
lda COL.BANK,y
tay
sta $c000,y
.2 ldy $ffff,x MOD7 : x = X.LO, y = X MOD 7
HLINE.C16
rts
*--------------------------------------
@ -440,8 +488,163 @@ VLINE >STYA ZPBase
dey
bpl .1
sta SET80STORE
VLINE.MONO ldx CB.Cache+S.CB.X1+1 Get X Hi byte....
lda DIV7.lo,x
sta .1+1
lda DIV7.hi,x
sta .1+2
lda MOD7.lo,x
sta .2+1
lda MOD7.hi,x
sta .2+2
lda DIV7.BASE,x
ldx CB.Cache+S.CB.X1
clc
.1 adc $ffff,x DIV7 : x = X.LO, a = X DIV 7
sta XDIV7 save X DIV 7
.2 lda $ffff,x MOD7 : x = X.LO, y = X MOD 7
sta XMOD7
lda CB.Cache+S.CB.OP
beq .4
ldx CB.Cache+S.CB.Y1
.3 lda XDIV7
tay
lsr
clc
adc BASEL,x
sta ZPBase
lda BASEH,x
sta ZPBase+1
ldx COL.BANK,y
sta $C000,x
ldy XMOD7
lda (ZPBase) XOR
eor Mono.Masks,y y = mod 7
sta (ZPBase)
inc CB.Cache+S.CB.Y1
ldx CB.Cache+S.CB.Y1
cpx CB.Cache+S.CB.Y2
bne .3
sta CLR80STORE
rts
.4 lda (ZPBase)
ldx CB.Cache+S.CB.COLOR get color
bne .6
and Mono.NMasks,y includes And $7F for mono
sta (ZPBase)
sta CLR80STORE
rts
.6 and #$7F switch back this byte to mono
ora Mono.Masks,y
sta (ZPBase)
sta CLR80STORE
rts
VLINE.C16 lda CB.Cache+S.CB.X1
lsr CB.Cache+S.CB.X1+1 divide by 4
ror
lsr CB.Cache+S.CB.X1+1
ror
tay Y=X/4 (range 0->139)
lda DIV7.0,y A=X/4/7 (range 0->19)
asl times 2 (range 0->38)
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
sta ZPBase+1 ...the 4 columns
lda MOD7.0,y get MOD
asl times 4 to compute index in MASK tables
asl
tax set in X for Masks,NMasks
lda CB.Cache+S.CB.COLOR
asl times 4 to compute index in PIXELS table
asl
tay
lda Color.Masks,x bits in 1st byte to light?
beq .10
and Color.Pixels,y apply color
sta GBYTE
sta SETPAGE2
lda (ZPBase)
and Color.NMasks,x reset existing pixel,
ora GBYTE
sta (ZPBase)
.10 inx
iny
lda Color.Masks,x
beq .11
and Color.Pixels,y apply color
sta GBYTE
sta CLRPAGE2
lda (ZPBase)
and Color.NMasks,x reset existing pixel,
ora GBYTE
sta (ZPBase)
.11 inc ZPBase
inx
iny
lda Color.Masks,x
beq .12
and Color.Pixels,y apply color
sta GBYTE
sta SETPAGE2
lda (ZPBase)
and Color.NMasks,x reset existing pixel,
ora GBYTE
sta (ZPBase)
.12 inx
iny
lda Color.Masks,x
beq .13
and Color.Pixels,y apply color
sta GBYTE
sta CLRPAGE2
lda (ZPBase)
and Color.NMasks,x reset existing pixel,
ora GBYTE
sta (ZPBase)
.13 sta CLR80STORE
rts
*--------------------------------------
* FILLRECT
@ -516,16 +719,10 @@ Shifthi.hi .BS 7
*--------------------------------------
CB.Cache .BS S.CB
*--------------------------------------
CX .BS 2
CY .BS 1
COL .BS 1
XDIV7 .BS 1
XMOD7 .BS 1
GBYTE .BS 1
*--------------------------------------
SB.StartPage .BS 1
SB.Page .BS 1
SB.StartCol .BS 1
SB.Col .BS 1
*--------------------------------------
STAT .DA #0
.DA #0,#0,#0
>PSTR "Apple II DHGR"

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -120,19 +120,26 @@ DrawLine ldy #S.CB.Y2+1
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
* >SWAP16 CB.Cache+S.CB.Y1,CB.Cache+S.CB.Y2
lda CB.Cache+S.CB.Y1
ldx CB.Cache+S.CB.Y2
stx CB.Cache+S.CB.Y1
sta CB.Cache+S.CB.Y2
.2 stz IY
>NOT16 DX swap X1/X2, Y1/Y2, set DX=-DX (DX positive)
sec
.2 lda #1
sta IY
lda CB.Cache+S.CB.Y2
sec
sbc CB.Cache+S.CB.Y1
sta DY
lda CB.Cache+S.CB.Y2+1
sbc CB.Cache+S.CB.Y1+1
* lda CB.Cache+S.CB.Y2+1
lda #0
* sbc CB.Cache+S.CB.Y1+1
sbc #0
sta DY+1 DY% = Y2% - Y1%
bmi .3 DY < 0 ...
@ -144,25 +151,28 @@ DrawLine ldy #S.CB.Y2+1
jmp GoDevGFX DY=0 : HLIN X1,X2 At Y1
.3 >NOT16 DY set DY=-DY
dec IY
lda #$ff
sta IY set IY=-1
.4 ldx #DEVMGR.GFX.SETPIXEL
jsr GoDevGFX
sec
lda DX
sec
sbc DY
sta DXY
tax
lda DX+1
sbc DY+1
sta DXY+1
* sbc DY+1
sbc #0
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
txa
beq DrawLine.IncXY DX=DY, go inc X & Y
jmp DrawLine.IncX DY is lower than DX, we will increase on X axis
DrawLine.XY lda DX DX=DY
DrawLine.IncXY lda DX DX=DY
eor #$ff
sta Counter
lda DX+1
@ -178,23 +188,12 @@ DrawLine.XY lda DX DX=DY
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
.3 lda CB.Cache+S.CB.Y1 Y1=Y1+IY
clc
adc IY
sta CB.Cache+S.CB.Y1
bcs .5
dec CB.Cache+S.CB.Y1+1
.5 ldx #DEVMGR.GFX.SETPIXEL
ldx #DEVMGR.GFX.SETPIXEL
jsr GoDevGFX
bra .1
@ -207,7 +206,82 @@ DrawLine.IncY lda DY
eor #$ff
sta Counter+1
rts
lda DX IE=2*DX
asl
sta IE
pha
lda DX+1
rol
sta IE+1
tax
pla D=IE-DY
sec
sbc DY
sta D
txa
sbc DY+1
sta D+1
lda DX INE=2*(DX-DY)
sec
sbc DY
pha
lda DX+1
sbc DY+1
tax
pla
asl
sta INE
txa
rol
sta INE+1
.1 inc Counter
bne .2
inc Counter+1
beq .8
.2 lda D+1 IF D < 0 ...
bmi .4
lda D D > 0 : D=D+INE
clc
adc INE
sta D
lda D+1
adc INE+1
sta D+1
inc CB.Cache+S.CB.X1 X1=X1+1
bne .5
inc CB.Cache+S.CB.X1+1
bra .5
.4 lda D D > 0 : D=D+IE
clc
adc IE
sta D
lda D+1
adc IE+1
sta D+1
.5 lda CB.Cache+S.CB.Y1 Y1=Y1+IY
clc
adc IY
sta CB.Cache+S.CB.Y1
ldx #DEVMGR.GFX.SETPIXEL
jsr GoDevGFX
bra .1
.8 rts
DrawLine.IncX lda DX
eor #$ff
@ -216,7 +290,83 @@ DrawLine.IncX lda DX
eor #$ff
sta Counter+1
rts
lda DY IE=2*DY
asl
sta IE
pha
* lda DY+1
lda #0
rol
sta IE+1
tax
pla D=IE-DX
sec
sbc DX
sta D
txa
sbc DX+1
sta D+1
lda DY INE=2*(DY-DX)
sec
sbc DX
pha
* lda DY+1
lda #0
sbc DX+1
tax
pla
asl
sta INE
txa
rol
sta INE+1
.1 inc Counter
bne .2
inc Counter+1
beq .8
.2 lda D+1 ID D < 0 ....
bmi .4
lda D D > 0 : D=D+INE
clc
adc INE
sta D
lda D+1
adc INE+1
sta D+1
lda CB.Cache+S.CB.Y1 Y1=Y1+IY
clc
adc IY
sta CB.Cache+S.CB.Y1
bra .5
.4 lda D D < 0 : D=D+IE
clc
adc IE
sta D
lda D+1
adc IE+1
sta D+1
.5 inc CB.Cache+S.CB.X1 X1=X1+1
bne .6
inc CB.Cache+S.CB.X1+1
.6 ldx #DEVMGR.GFX.SETPIXEL
jsr GoDevGFX
bra .1
.8 rts
*--------------------------------------
GetCB >PULLW ZPCBPtr
@ -235,7 +385,9 @@ hDev .BS 1
DX .BS 2
DY .BS 2
IY .BS 1
DXY .BS 2
IE .BS 2
D .BS 2
INE .BS 2
Counter .BS 2
*--------------------------------------
CB.Cache .BS S.CB

View File

@ -42,6 +42,8 @@ L.MouseData .DA MouseData
L.SetPixel.CB .DA SetPixel.CB
L.DrawLine1.CB .DA DrawLine1.CB
L.DrawLine2.CB .DA DrawLine2.CB
L.DrawLine3.CB .DA DrawLine3.CB
L.DrawLine4.CB .DA DrawLine4.CB
.DA 0
*--------------------------------------
CS.INIT >LDYA L.MSG.INIT
@ -225,6 +227,10 @@ Destop.Paint lda #S.CB.MODE.C16
>LIBCALL hLibGFX,LIBGFX.DrawLine
>PUSHW L.DrawLine2.CB
>LIBCALL hLibGFX,LIBGFX.DrawLine
>PUSHW L.DrawLine3.CB
>LIBCALL hLibGFX,LIBGFX.DrawLine
>PUSHW L.DrawLine4.CB
>LIBCALL hLibGFX,LIBGFX.DrawLine
.8 rts
*--------------------------------------
@ -253,21 +259,39 @@ SetPixel.Y .BS 2
*--------------------------------------
DrawLine1.CB .BS 1 hDC
DrawLine1.OP .DA #0
DrawLine1.Mode .DA #S.CB.MODE.MONO
DrawLine1.Mode .DA #S.CB.MODE.C16
DrawLine1.Color .DA #1
DrawLine1.X1 .DA 200
DrawLine1.Y1 .DA 0
DrawLine1.X2 .DA 200+191
DrawLine1.Y2 .DA 191
DrawLine1.X1 .DA 80
DrawLine1.Y1 .DA 191
DrawLine1.X2 .DA 80+191
DrawLine1.Y2 .DA 0
*--------------------------------------
DrawLine2.CB .BS 1 hDC
DrawLine2.OP .DA #0
DrawLine2.Mode .DA #S.CB.MODE.C16
DrawLine2.Mode .DA #S.CB.MODE.MONO
DrawLine2.Color .DA #8
DrawLine2.X1 .DA 220
DrawLine2.X1 .DA 90
DrawLine2.Y1 .DA 0
DrawLine2.X2 .DA 220+191
DrawLine2.X2 .DA 140
DrawLine2.Y2 .DA 191
*--------------------------------------
DrawLine3.CB .BS 1 hDC
DrawLine3.OP .DA #0
DrawLine3.Mode .DA #S.CB.MODE.MONO
DrawLine3.Color .DA #8
DrawLine3.X1 .DA 100
DrawLine3.Y1 .DA 0
DrawLine3.X2 .DA 100+191
DrawLine3.Y2 .DA 191
*--------------------------------------
DrawLine4.CB .BS 1 hDC
DrawLine4.OP .DA #0
DrawLine4.Mode .DA #S.CB.MODE.MONO
DrawLine4.Color .DA #8
DrawLine4.X1 .DA 110
DrawLine4.Y1 .DA 0
DrawLine4.X2 .DA 559
DrawLine4.Y2 .DA 191
MAN
SAVE /A2OSX.SRC/SBIN/DESKTOP.S
ASM