A2osX/LIB/LIBGFX.S.txt

287 lines
5.6 KiB
Plaintext
Raw Normal View History

PR#3
PREFIX /A2OSX.BUILD
NEW
INC 1
AUTO 6
.LIST OFF
.OP 65C02
.OR $2000
.TF /A2OSX.BUILD/LIB/LIBGFX.O
*--------------------------------------
.INB /A2OSX.BUILD/INC/MACROS.I
.INB /A2OSX.BUILD/INC/A2OSX.I
.INB /A2OSX.BUILD/INC/LIBGFX.I
*--------------------------------------
.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
2016-06-15 06:21:42 +00:00
*--------------------------------------
* File Header (16 Bytes)
*--------------------------------------
CS.START cld
jmp (.1,x)
.DA #$61 6502,Level 1 (65c02)
.DA #1 BIN Layout Version 1
.DA 0
.DA CS.END-CS.START
.DA 0
.DA 0
.DA 0
*--------------------------------------
* Relocation Table
*--------------------------------------
.1 .DA LIB.LOAD
.DA LIB.UNLOAD
2016-06-15 15:58:45 +00:00
.DA InitGFXA
.DA CloseGFX
2016-06-15 15:58:45 +00:00
.DA InitCursor
.DA SetCursorYA
.DA HideCursor
.DA ShowCursor
.DA DrawLine
L.CB.Cache .DA CB.Cache
.DA 0
*--------------------------------------
LIB.LOAD
LIB.UNLOAD clc
rts
2016-06-15 06:21:42 +00:00
*--------------------------------------
2016-06-15 15:58:45 +00:00
InitGFXA sta hDev
>SYSCALL GetDevByIDA
>STYA GoDevGFX.1+1
2016-06-15 06:21:42 +00:00
clc
rts
*--------------------------------------
CloseGFX
stz hDev
2016-06-15 06:21:42 +00:00
sec
rts
*--------------------------------------
InitCursor
*--------------------------------------
SetCursorYA
*--------------------------------------
HideCursor
*--------------------------------------
ShowCursor
clc
rts
2016-06-15 06:21:42 +00:00
*--------------------------------------
* 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
2016-06-15 06:21:42 +00:00
hDev .BS 1
*--------------------------------------
DX .BS 2
DY .BS 2
IY .BS 1
DXY .BS 2
Counter .BS 2
*--------------------------------------
CB.Cache .BS S.CB
*--------------------------------------
2016-06-15 15:58:45 +00:00
CUR.Arrow .DA #0
.DA #0
CUR.Arrow.DATA .DA %00000001.000000000
.DA %00000011.000000000
.DA %00000101.000000000
.DA %00001001.000000000
.DA %00010001.000000000
.DA %00100011.000000000
.DA %01110101.000000000
.DA %00011000.000000000
.DA %00000000.000000000
.DA %00000000.000000000
.DA %00000000.000000000
.DA %00000000.000000000
.DA %00000000.000000000
.DA %00000000.000000000
.DA %00000000.000000000
.DA %00000000.000000000
CUR.Arrow.MASK .DA %00000000.000000000
.DA %00000000.000000000
.DA %00000010.000000000
.DA %00000110.000000000
.DA %00001110.000000000
.DA %00011100.000000000
.DA %00001000.000000000
.DA %00000000.000000000
.DA %00000000.000000000
.DA %00000000.000000000
.DA %00000000.000000000
.DA %00000000.000000000
.DA %00000000.000000000
.DA %00000000.000000000
.DA %00000000.000000000
.DA %00000000.000000000
2016-06-15 06:21:42 +00:00
*--------------------------------------
PAT.Arrow .DA #S.BM.F.BBP1
2016-06-15 15:58:45 +00:00
.DA #1 RowBytes
.DA 7 W
.DA 8 H
.DA 0
2016-06-15 06:21:42 +00:00
*--------------------------------------
MAN
SAVE /A2OSX.SRC/LIB/LIBGFX.S
ASM