A2osX/LIB/LIBGFX.S.txt

287 lines
5.6 KiB
Plaintext
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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
*--------------------------------------
* 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
.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
*--------------------------------------
CloseGFX
stz hDev
sec
rts
*--------------------------------------
InitCursor
*--------------------------------------
SetCursorYA
*--------------------------------------
HideCursor
*--------------------------------------
ShowCursor
clc
rts
*--------------------------------------
* 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
.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
*--------------------------------------
PAT.Arrow .DA #S.BM.F.BBP1
.DA #1 RowBytes
.DA 7 W
.DA 8 H
.DA 0
*--------------------------------------
MAN
SAVE /A2OSX.SRC/LIB/LIBGFX.S
ASM