mirror of
https://github.com/A2osX/A2osX.git
synced 2024-10-12 10:23:48 +00:00
Kernel 0.9.1 : DHGR Driver, BitBLT, mouse pointer, Off Screen Driver
This commit is contained in:
parent
ab08792170
commit
940866d6ed
Binary file not shown.
Binary file not shown.
@ -239,7 +239,7 @@ LBUF.DrawAtY.AND.ORA
|
|||||||
sta $C000,y
|
sta $C000,y
|
||||||
ldy COL.OFS,x
|
ldy COL.OFS,x
|
||||||
|
|
||||||
>DEBUG
|
* >DEBUG
|
||||||
lda LBUF.MASK,x get MASK bits
|
lda LBUF.MASK,x get MASK bits
|
||||||
ora LBUF.C2.MASK
|
ora LBUF.C2.MASK
|
||||||
and (ZPBasePtr),y
|
and (ZPBasePtr),y
|
||||||
|
@ -49,15 +49,18 @@ S.CB.DstPtr .EQ 18
|
|||||||
*
|
*
|
||||||
S.CB .EQ 20
|
S.CB .EQ 20
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
S.DC.hDev .EQ 0
|
S.GC.hDev .EQ 0
|
||||||
S.DC.hMem .EQ 1
|
S.GC.hMem .EQ 1
|
||||||
S.DC.Parent .EQ 2
|
S.GC.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.GC.X1 .EQ 4
|
||||||
|
S.GC.Y1 .EQ 6
|
||||||
|
S.GC.X2 .EQ 8
|
||||||
|
S.GC.Y2 .EQ 10
|
||||||
|
S.GC.W .EQ 12
|
||||||
|
S.GC.H .EQ 14
|
||||||
|
*
|
||||||
|
S.GC .EQ 16
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CUR.T.ARROW .EQ 0
|
CUR.T.ARROW .EQ 0
|
||||||
CUR.T.PLUS .EQ 2
|
CUR.T.PLUS .EQ 2
|
||||||
|
154
LIB/LIBGUI.S.CLIP.txt
Normal file
154
LIB/LIBGUI.S.CLIP.txt
Normal file
@ -0,0 +1,154 @@
|
|||||||
|
PR#3
|
||||||
|
PREFIX /A2OSX.BUILD
|
||||||
|
NEW
|
||||||
|
INC 1
|
||||||
|
AUTO 6
|
||||||
|
.LIST OFF
|
||||||
|
*--------------------------------------
|
||||||
|
ClipLine.LEFT .EQ 1
|
||||||
|
ClipLine.RIGHT .EQ 2
|
||||||
|
ClipLine.BOTTOM .EQ 4
|
||||||
|
ClipLine.TOP .EQ 8
|
||||||
|
*--------------------------------------
|
||||||
|
* In:
|
||||||
|
* Control Block in CB.Cache
|
||||||
|
* Graphic Context in GC.Cache
|
||||||
|
*--------------------------------------
|
||||||
|
ClipLine jsr ClipLine.EncodeP1
|
||||||
|
jsr ClipLine.EncodeP2
|
||||||
|
|
||||||
|
.1 lda ClipLine.P1
|
||||||
|
ora ClipLine.P2
|
||||||
|
beq .88
|
||||||
|
|
||||||
|
lda ClipLine.P1
|
||||||
|
and ClipLine.P2
|
||||||
|
bne .99
|
||||||
|
|
||||||
|
lda ClipLine.P1
|
||||||
|
beq .5
|
||||||
|
|
||||||
|
bit #ClipLine.TOP
|
||||||
|
beq .2
|
||||||
|
* Y1 is above S.CB.Y1....
|
||||||
|
* DY=Y2-Y1;
|
||||||
|
|
||||||
|
jsr ClipLine.EncodeP1
|
||||||
|
bra .1
|
||||||
|
|
||||||
|
.2 bit #ClipLine.BOTTOM
|
||||||
|
beq .3
|
||||||
|
* Y1 is below S.CB.Y2....
|
||||||
|
|
||||||
|
jsr ClipLine.EncodeP1
|
||||||
|
bra .1
|
||||||
|
|
||||||
|
.3 bit #ClipLine.RIGHT
|
||||||
|
beq .4
|
||||||
|
* X1 is after S.CB.X2....
|
||||||
|
jsr ClipLine.EncodeP1
|
||||||
|
bra .1
|
||||||
|
* X1 is before S.CB.X1....
|
||||||
|
.4
|
||||||
|
jsr ClipLine.EncodeP1
|
||||||
|
bra .1
|
||||||
|
* P2
|
||||||
|
.5 lda ClipLine.P2
|
||||||
|
|
||||||
|
bit #ClipLine.TOP
|
||||||
|
beq .6
|
||||||
|
* Y2 is above S.CB.Y1....
|
||||||
|
jsr ClipLine.EncodeP2
|
||||||
|
bra .1
|
||||||
|
|
||||||
|
.6 bit #ClipLine.BOTTOM
|
||||||
|
beq .7
|
||||||
|
* Y2 is below S.CB.Y2....
|
||||||
|
jsr ClipLine.EncodeP2
|
||||||
|
bra .1
|
||||||
|
|
||||||
|
.7 bit #ClipLine.RIGHT
|
||||||
|
beq .8
|
||||||
|
* X2 is after S.CB.X2....
|
||||||
|
jsr ClipLine.EncodeP2
|
||||||
|
bra .1
|
||||||
|
* X2 is before S.CB.X1....
|
||||||
|
.8
|
||||||
|
jsr ClipLine.EncodeP2
|
||||||
|
bra .1
|
||||||
|
|
||||||
|
.88 clc
|
||||||
|
rts
|
||||||
|
|
||||||
|
.99 sec
|
||||||
|
rts
|
||||||
|
*--------------------------------------
|
||||||
|
ClipLine.EncodeP1
|
||||||
|
ldy #0
|
||||||
|
|
||||||
|
lda CB.Cache+S.CB.X1
|
||||||
|
ldx CB.Cache+S.CB.X1+1
|
||||||
|
jsr ClipLine.EncodeX.AX
|
||||||
|
|
||||||
|
tay
|
||||||
|
|
||||||
|
lda CB.Cache+S.CB.Y1
|
||||||
|
ldx CB.Cache+S.CB.Y1+1
|
||||||
|
jsr ClipLine.EncodeY.AX
|
||||||
|
|
||||||
|
sta ClipLine.P1
|
||||||
|
rts
|
||||||
|
*--------------------------------------
|
||||||
|
ClipLine.EncodeP2
|
||||||
|
ldy #0
|
||||||
|
|
||||||
|
lda CB.Cache+S.CB.X2
|
||||||
|
ldx CB.Cache+S.CB.X2+1
|
||||||
|
jsr ClipLine.EncodeX.AX
|
||||||
|
|
||||||
|
tay
|
||||||
|
|
||||||
|
lda CB.Cache+S.CB.Y2
|
||||||
|
ldx CB.Cache+S.CB.Y2+1
|
||||||
|
jsr ClipLine.EncodeY.AX
|
||||||
|
|
||||||
|
sta ClipLine.P2
|
||||||
|
rts
|
||||||
|
*--------------------------------------
|
||||||
|
ClipLine.EncodeX.AX
|
||||||
|
pha
|
||||||
|
>SCMPAX GC.Cache+S.GC.X1
|
||||||
|
bmi .1
|
||||||
|
tya
|
||||||
|
ora #ClipLine.LEFT
|
||||||
|
plx
|
||||||
|
rts
|
||||||
|
|
||||||
|
.1 pla
|
||||||
|
>SCMPAX GC.Cache+S.GC.X1
|
||||||
|
bpl .8
|
||||||
|
tya
|
||||||
|
ora #ClipLine.RIGHT
|
||||||
|
.8 rts
|
||||||
|
*--------------------------------------
|
||||||
|
ClipLine.EncodeY.AX
|
||||||
|
pha
|
||||||
|
>SCMPAX GC.Cache+S.GC.Y1
|
||||||
|
bmi .1
|
||||||
|
tya
|
||||||
|
ora #ClipLine.TOP
|
||||||
|
plx
|
||||||
|
rts
|
||||||
|
|
||||||
|
.1 pla
|
||||||
|
>SCMPAX GC.Cache+S.GC.Y1
|
||||||
|
bpl .8
|
||||||
|
tya
|
||||||
|
ora #ClipLine.BOTTOM
|
||||||
|
|
||||||
|
.8 rts
|
||||||
|
*--------------------------------------
|
||||||
|
MAN
|
||||||
|
SAVE /A2OSX.SRC/LIB/LIBGUI.S.CLIP
|
||||||
|
LOAD /A2OSX.SRC/LIB/LIBGUI.S
|
||||||
|
ASM
|
22
LIB/LIBGUI.S.CUR.txt
Normal file
22
LIB/LIBGUI.S.CUR.txt
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
PR#3
|
||||||
|
PREFIX /A2OSX.BUILD
|
||||||
|
NEW
|
||||||
|
INC 1
|
||||||
|
AUTO 6
|
||||||
|
.LIST OFF
|
||||||
|
*--------------------------------------
|
||||||
|
SetCursor.A
|
||||||
|
*--------------------------------------
|
||||||
|
SetCursorPos
|
||||||
|
*--------------------------------------
|
||||||
|
HideCursor
|
||||||
|
*--------------------------------------
|
||||||
|
ShowCursor
|
||||||
|
|
||||||
|
clc
|
||||||
|
rts
|
||||||
|
*--------------------------------------
|
||||||
|
MAN
|
||||||
|
SAVE /A2OSX.SRC/LIB/LIBGUI.S.CUR
|
||||||
|
LOAD /A2OSX.SRC/LIB/LIBGUI.S
|
||||||
|
ASM
|
325
LIB/LIBGUI.S.DRAW.txt
Normal file
325
LIB/LIBGUI.S.DRAW.txt
Normal file
@ -0,0 +1,325 @@
|
|||||||
|
PR#3
|
||||||
|
PREFIX /A2OSX.BUILD
|
||||||
|
NEW
|
||||||
|
INC 1
|
||||||
|
AUTO 6
|
||||||
|
*--------------------------------------
|
||||||
|
Draw >PULLW ZPCmdPtr
|
||||||
|
|
||||||
|
lda (ZPCmdPtr) Get Cmd
|
||||||
|
|
||||||
|
.1 tax
|
||||||
|
cpx #S.CB.CMD.DRAWLINE
|
||||||
|
bcc .3 Native DRV Cmd
|
||||||
|
|
||||||
|
ldy CB.CmdLen,x
|
||||||
|
|
||||||
|
.2 lda (ZPCmdPtr),y Y=Byte count-1 to cache
|
||||||
|
sta CB.Cache,y
|
||||||
|
dey
|
||||||
|
bpl .2
|
||||||
|
|
||||||
|
jsr Draw.Jmp
|
||||||
|
bra .7
|
||||||
|
|
||||||
|
.3 >LDYA ZPCmdPtr
|
||||||
|
|
||||||
|
jsr GoDev.YA
|
||||||
|
|
||||||
|
.7 lda (ZPCmdPtr) Get Cmd
|
||||||
|
tax
|
||||||
|
lda CB.CmdLen,x
|
||||||
|
sec
|
||||||
|
adc ZPCmdPtr
|
||||||
|
sta ZPCmdPtr
|
||||||
|
bcc .8
|
||||||
|
inc ZPCmdPtr+1
|
||||||
|
|
||||||
|
.8 lda (ZPCmdPtr) Get Cmd
|
||||||
|
bne .1
|
||||||
|
|
||||||
|
clc
|
||||||
|
rts
|
||||||
|
|
||||||
|
Draw.Jmp jmp (J.Cmds,x)
|
||||||
|
*--------------------------------------
|
||||||
|
* In: Control Block in CB.Cache
|
||||||
|
* CMD
|
||||||
|
* OP
|
||||||
|
* MODE
|
||||||
|
* COLOR
|
||||||
|
* X1
|
||||||
|
* Y1
|
||||||
|
* X2
|
||||||
|
* Y2
|
||||||
|
*--------------------------------------
|
||||||
|
DrawLine lda CB.Cache+S.CB.X2
|
||||||
|
sec
|
||||||
|
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...
|
||||||
|
|
||||||
|
lda #S.CB.CMD.VLINE
|
||||||
|
sta CB.Cache+S.CB.CMD
|
||||||
|
jmp GoDev 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
|
||||||
|
lda CB.Cache+S.CB.Y1
|
||||||
|
ldx CB.Cache+S.CB.Y2
|
||||||
|
stx CB.Cache+S.CB.Y1
|
||||||
|
sta CB.Cache+S.CB.Y2
|
||||||
|
|
||||||
|
>NOT16 DX swap X1/X2, Y1/Y2, set DX=-DX (DX positive)
|
||||||
|
|
||||||
|
.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
|
||||||
|
lda #0
|
||||||
|
* sbc CB.Cache+S.CB.Y1+1
|
||||||
|
sbc #0
|
||||||
|
sta DY+1 DY = Y2 - Y1
|
||||||
|
|
||||||
|
bmi .3 DY < 0 ...
|
||||||
|
|
||||||
|
ora DY
|
||||||
|
bne .4
|
||||||
|
|
||||||
|
lda #S.CB.CMD.HLINE
|
||||||
|
sta CB.Cache+S.CB.CMD
|
||||||
|
jmp GoDev DY=0 : HLIN X1,X2 At Y1
|
||||||
|
|
||||||
|
.3 >NOT16 DY set DY=-DY
|
||||||
|
lda #$ff
|
||||||
|
sta IY set IY=-1
|
||||||
|
|
||||||
|
.4 lda #S.CB.CMD.SETPIXEL
|
||||||
|
sta CB.Cache+S.CB.CMD
|
||||||
|
jsr GoDev
|
||||||
|
|
||||||
|
lda DX
|
||||||
|
sec
|
||||||
|
sbc DY
|
||||||
|
tax
|
||||||
|
|
||||||
|
lda DX+1
|
||||||
|
* sbc DY+1
|
||||||
|
sbc #0
|
||||||
|
bmi DrawLine.IncY DY is greater than DX, we will increase on Y 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.IncXY 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 lda CB.Cache+S.CB.Y1 Y1=Y1+IY
|
||||||
|
clc
|
||||||
|
adc IY
|
||||||
|
sta CB.Cache+S.CB.Y1
|
||||||
|
|
||||||
|
jsr GoDev
|
||||||
|
bra .1
|
||||||
|
|
||||||
|
.8 rts
|
||||||
|
|
||||||
|
DrawLine.IncY lda DY
|
||||||
|
eor #$ff
|
||||||
|
sta Counter
|
||||||
|
lda DY+1
|
||||||
|
eor #$ff
|
||||||
|
sta Counter+1
|
||||||
|
|
||||||
|
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
|
||||||
|
|
||||||
|
jsr GoDev
|
||||||
|
bra .1
|
||||||
|
|
||||||
|
.8 rts
|
||||||
|
|
||||||
|
DrawLine.IncX lda DX
|
||||||
|
eor #$ff
|
||||||
|
sta Counter
|
||||||
|
lda DX+1
|
||||||
|
eor #$ff
|
||||||
|
sta Counter+1
|
||||||
|
|
||||||
|
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+1k
|
||||||
|
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 jsr GoDev
|
||||||
|
bra .1
|
||||||
|
|
||||||
|
.8 rts
|
||||||
|
*--------------------------------------
|
||||||
|
MAN
|
||||||
|
SAVE /A2OSX.SRC/LIB/LIBGUI.S.DRAW
|
||||||
|
LOAD /A2OSX.SRC/LIB/LIBGUI.S
|
||||||
|
ASM
|
348
LIB/LIBGUI.S.txt
348
LIB/LIBGUI.S.txt
@ -31,6 +31,15 @@ AUTO 6
|
|||||||
sbc ]1+1
|
sbc ]1+1
|
||||||
sta ]1+1
|
sta ]1+1
|
||||||
.EM
|
.EM
|
||||||
|
.MA SCMPAX
|
||||||
|
sec
|
||||||
|
sbc ]1
|
||||||
|
txa
|
||||||
|
sbc ]1+1
|
||||||
|
bvc :1
|
||||||
|
eor #$80
|
||||||
|
:1 .EQ *
|
||||||
|
.EM
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
ZPDCPtr .EQ ZPLIB+2
|
ZPDCPtr .EQ ZPLIB+2
|
||||||
ZPCmdPtr .EQ ZPLIB+4
|
ZPCmdPtr .EQ ZPLIB+4
|
||||||
@ -66,7 +75,7 @@ LIB.LOAD
|
|||||||
LIB.UNLOAD clc
|
LIB.UNLOAD clc
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
InitGUI.A sta hDev
|
InitGUI.A sta GC.Screen+S.GC.hDev
|
||||||
>SYSCALL GetDevByID.A
|
>SYSCALL GetDevByID.A
|
||||||
>STYA GoDev.Jmp+1
|
>STYA GoDev.Jmp+1
|
||||||
|
|
||||||
@ -74,342 +83,19 @@ InitGUI.A sta hDev
|
|||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CloseGUI
|
CloseGUI
|
||||||
stz hDev
|
stz GC.Screen+S.GC.hDev
|
||||||
sec
|
sec
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
Draw >PULLW ZPCmdPtr
|
|
||||||
|
|
||||||
lda (ZPCmdPtr) Get Cmd
|
|
||||||
|
|
||||||
.1 tax
|
|
||||||
cpx #S.CB.CMD.DRAWLINE
|
|
||||||
bcc .3 Native DRV Cmd
|
|
||||||
|
|
||||||
ldy CB.CmdLen,x
|
|
||||||
|
|
||||||
.2 lda (ZPCmdPtr),y Y=Byte count-1 to cache
|
|
||||||
sta CB.Cache,y
|
|
||||||
dey
|
|
||||||
bpl .2
|
|
||||||
|
|
||||||
jsr Draw.Jmp
|
|
||||||
bra .7
|
|
||||||
|
|
||||||
.3 >LDYA ZPCmdPtr
|
|
||||||
|
|
||||||
jsr GoDev.YA
|
|
||||||
|
|
||||||
.7 lda (ZPCmdPtr) Get Cmd
|
|
||||||
tax
|
|
||||||
lda CB.CmdLen,x
|
|
||||||
sec
|
|
||||||
adc ZPCmdPtr
|
|
||||||
sta ZPCmdPtr
|
|
||||||
bcc .8
|
|
||||||
inc ZPCmdPtr+1
|
|
||||||
|
|
||||||
.8 lda (ZPCmdPtr) Get Cmd
|
|
||||||
bne .1
|
|
||||||
|
|
||||||
clc
|
|
||||||
rts
|
|
||||||
|
|
||||||
Draw.Jmp jmp (J.Cmds,x)
|
|
||||||
*--------------------------------------
|
|
||||||
SetCursor.A
|
|
||||||
*--------------------------------------
|
|
||||||
SetCursorPos
|
|
||||||
*--------------------------------------
|
|
||||||
HideCursor
|
|
||||||
*--------------------------------------
|
|
||||||
ShowCursor
|
|
||||||
|
|
||||||
clc
|
|
||||||
rts
|
|
||||||
*--------------------------------------
|
|
||||||
* In: Control Block
|
|
||||||
* CMD
|
|
||||||
* OP
|
|
||||||
* MODE
|
|
||||||
* COLOR
|
|
||||||
* X1
|
|
||||||
* Y1
|
|
||||||
* X2
|
|
||||||
* Y2
|
|
||||||
*--------------------------------------
|
|
||||||
DrawLine lda CB.Cache+S.CB.X2
|
|
||||||
sec
|
|
||||||
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...
|
|
||||||
|
|
||||||
lda #S.CB.CMD.VLINE
|
|
||||||
sta CB.Cache+S.CB.CMD
|
|
||||||
jmp GoDev 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
|
|
||||||
lda CB.Cache+S.CB.Y1
|
|
||||||
ldx CB.Cache+S.CB.Y2
|
|
||||||
stx CB.Cache+S.CB.Y1
|
|
||||||
sta CB.Cache+S.CB.Y2
|
|
||||||
|
|
||||||
>NOT16 DX swap X1/X2, Y1/Y2, set DX=-DX (DX positive)
|
|
||||||
|
|
||||||
.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
|
|
||||||
lda #0
|
|
||||||
* sbc CB.Cache+S.CB.Y1+1
|
|
||||||
sbc #0
|
|
||||||
sta DY+1 DY% = Y2% - Y1%
|
|
||||||
|
|
||||||
bmi .3 DY < 0 ...
|
|
||||||
|
|
||||||
ora DY
|
|
||||||
bne .4
|
|
||||||
|
|
||||||
lda #S.CB.CMD.HLINE
|
|
||||||
sta CB.Cache+S.CB.CMD
|
|
||||||
jmp GoDev DY=0 : HLIN X1,X2 At Y1
|
|
||||||
|
|
||||||
.3 >NOT16 DY set DY=-DY
|
|
||||||
lda #$ff
|
|
||||||
sta IY set IY=-1
|
|
||||||
|
|
||||||
.4 lda #S.CB.CMD.SETPIXEL
|
|
||||||
sta CB.Cache+S.CB.CMD
|
|
||||||
jsr GoDev
|
|
||||||
|
|
||||||
lda DX
|
|
||||||
sec
|
|
||||||
sbc DY
|
|
||||||
tax
|
|
||||||
|
|
||||||
lda DX+1
|
|
||||||
* sbc DY+1
|
|
||||||
sbc #0
|
|
||||||
bmi DrawLine.IncY DY is greater than DX, we will increase on Y 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.IncXY 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 lda CB.Cache+S.CB.Y1 Y1=Y1+IY
|
|
||||||
clc
|
|
||||||
adc IY
|
|
||||||
sta CB.Cache+S.CB.Y1
|
|
||||||
|
|
||||||
jsr GoDev
|
|
||||||
bra .1
|
|
||||||
|
|
||||||
.8 rts
|
|
||||||
|
|
||||||
DrawLine.IncY lda DY
|
|
||||||
eor #$ff
|
|
||||||
sta Counter
|
|
||||||
lda DY+1
|
|
||||||
eor #$ff
|
|
||||||
sta Counter+1
|
|
||||||
|
|
||||||
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
|
|
||||||
|
|
||||||
jsr GoDev
|
|
||||||
bra .1
|
|
||||||
|
|
||||||
.8 rts
|
|
||||||
|
|
||||||
DrawLine.IncX lda DX
|
|
||||||
eor #$ff
|
|
||||||
sta Counter
|
|
||||||
lda DX+1
|
|
||||||
eor #$ff
|
|
||||||
sta Counter+1
|
|
||||||
|
|
||||||
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 jsr GoDev
|
|
||||||
bra .1
|
|
||||||
|
|
||||||
.8 rts
|
|
||||||
*--------------------------------------
|
|
||||||
GoDev >LDYA L.CB.Cache
|
GoDev >LDYA L.CB.Cache
|
||||||
GoDev.YA ldx #DEVMGR.WRITE
|
GoDev.YA ldx #DEVMGR.WRITE
|
||||||
GoDev.Jmp jmp $ffff
|
GoDev.Jmp jmp $ffff
|
||||||
|
*--------------------------------------
|
||||||
|
.INB /A2OSX.SRC/LIB/LIBGUI.S.DRAW
|
||||||
|
.INB /A2OSX.SRC/LIB/LIBGUI.S.CLIP
|
||||||
|
.INB /A2OSX.SRC/LIB/LIBGUI.S.CUR
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CS.END
|
CS.END
|
||||||
hDev .BS 1
|
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
DX .BS 2
|
DX .BS 2
|
||||||
DY .BS 2
|
DY .BS 2
|
||||||
@ -418,6 +104,8 @@ IE .BS 2
|
|||||||
D .BS 2
|
D .BS 2
|
||||||
INE .BS 2
|
INE .BS 2
|
||||||
Counter .BS 2
|
Counter .BS 2
|
||||||
|
ClipLine.P1 .BS 1
|
||||||
|
ClipLine.P2 .BS 1
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CB.CmdLen .DA S.CB.Y1+1 SETPIXEL
|
CB.CmdLen .DA S.CB.Y1+1 SETPIXEL
|
||||||
.DA S.CB.Y1+1 GETPIXEL
|
.DA S.CB.Y1+1 GETPIXEL
|
||||||
@ -428,6 +116,8 @@ CB.CmdLen .DA S.CB.Y1+1 SETPIXEL
|
|||||||
.DA S.CB.DstPtr+1 GETRECTBUFSIZE
|
.DA S.CB.DstPtr+1 GETRECTBUFSIZE
|
||||||
.DA S.CB.Y2+1 DRAWLINE
|
.DA S.CB.Y2+1 DRAWLINE
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
|
GC.Screen .BS S.GC
|
||||||
|
GC.Cache .BS S.GC
|
||||||
CB.Cache .BS S.CB
|
CB.Cache .BS S.CB
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
MAN
|
MAN
|
||||||
|
Loading…
Reference in New Issue
Block a user