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