PR#3 PREFIX /A2OSX.BUILD NEW INC 1 AUTO 6 .LIST OFF .OP 65C02 .OR $2000 .TF /A2OSX.BUILD/LIB/LIBGUI.O *-------------------------------------- .INB /A2OSX.BUILD/INC/MACROS.I .INB /A2OSX.BUILD/INC/A2OSX.I .INB /A2OSX.BUILD/INC/LIBGUI.I .INB /A2OSX.BUILD/INC/GFX.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 .MA SCMPAX sec sbc ]1 txa sbc ]1+1 bvc :1 eor #$80 :1 .EQ * .EM *-------------------------------------- ZPPtr1 .EQ ZPLIB ZPGCPtr .EQ ZPLIB+2 ZPCBPtr .EQ ZPLIB+4 *-------------------------------------- * 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 InitGUI .DA CloseGUI .DA Draw .DA SetCursor.A .DA SetCursorPos .DA HideCursor .DA ShowCursor .DA UpdateCursor .DA ReadMouse J.Cmds .DA DrawLine .DA DrawText L.DEVNAME.GFX .DA DEVNAME.GFX L.DEVNAME.MOUSE .DA DEVNAME.MOUSE L.MouseClamp .DA MouseClamp L.GC.Screen .DA GC.Screen L.CB.Cache .DA CB.Cache L.CUR.CB .DA CUR.CB L.CUR.SaveBuf .DA CUR.SaveBuf L.Cursors .DA CUR.Arrow .DA CUR.ResizeX .DA CUR.ResizeY .DA CUR.ResizeXY .DA CUR.Cross .DA CUR.Text .DA CUR.Wait1 .DA CUR.Wait2 .DA CUR.Wait3 .DA CUR.Wait4 .DA CUR.Wait5 .DA CUR.Wait6 J.Clip .DA CLIP.Point SETPIXEL .DA CLIP.Point GETPIXEL .DA CLIP.HLine .DA CLIP.VLine .DA CLIP.Rect FILLRECT .DA CLIP.BitBlt .DA CLIP.Rect GETRECTBUFSIZE .DA CLIP.Line .DA 0 *-------------------------------------- LIB.LOAD LIB.UNLOAD clc rts *-------------------------------------- InitGUI lda GC.Screen+S.GC.hDev bne .8 >LDYA L.DEVNAME.GFX >SYSCALL GetDevByName.YA bcs .9 stx GC.Screen+S.GC.hDev >STYA GoDevGfx.Jmp+1 txa ldx #DEVMGR.OPEN jsr GoDevGfx.Jmp ldx #DEVMGR.STATUS get graphic mode and resolution.... jsr GoDevGfx.Jmp >STYA ZPPtr1 ldy #S.DSTAT.GFX.W+1 lda (ZPPtr1),y sta GC.Screen+S.GC.W+1 sta MouseClamp+3 lsr sta CUR.Pos+S.POINT.X+1 dey lda (ZPPtr1),y sta MouseClamp+2 sta GC.Screen+S.GC.W ror sta CUR.Pos+S.POINT.X ldy #S.DSTAT.GFX.H+1 lda (ZPPtr1),y sta MouseClamp+7 sta GC.Screen+S.GC.H+1 lsr sta CUR.Pos+S.POINT.Y+1 dey lda (ZPPtr1),y sta MouseClamp+6 sta GC.Screen+S.GC.H ror sta CUR.Pos+S.POINT.Y >LDYA L.GC.Screen jsr GC.SetX2Y2 .1 >LDYA L.DEVNAME.MOUSE >SYSCALL GetDevByName.YA bcc .2 inc DEVNAME.MOUSE+3 lda DEVNAME.MOUSE+3 cmp #'8' bne .1 .8 ldx #DEVMGR.CONTROL Mouse driver disturb graphic screen.... jsr GoDevGfx.Jmp clc .9 rts .2 stx hDevMouse >STYA GoDevMouse+1 txa ldx #DEVMGR.OPEN jsr GoDevMouse >LDYA L.MouseClamp ldx #DEVMGR.CONTROL jsr GoDevMouse >LDYA L.CUR.SaveBuf >STYA CUR.CB+S.CB.DstPtr lda #CUR.T.ARROW jsr SetCursor.A bra .8 *-------------------------------------- CloseGUI lda hDevMouse beq .1 ldx #DEVMGR.CLOSE jsr GoDevMouse .1 stz GC.Screen+S.GC.hDev sec rts *-------------------------------------- GC.SetX2Y2 >STYA ZPGCPtr ldy #S.GC.X1+1 lda (ZPGCPtr),y tax dey lda (ZPGCPtr),y clc ldy #S.GC.W adc (ZPGCPtr),y pha iny txa adc (ZPGCPtr),y tax pla sbc #0 bcs .1 dex .1 ldy #S.GC.X2 sta (ZPGCPtr),y iny txa sta (ZPGCPtr),y ldy #S.GC.Y1+1 lda (ZPGCPtr),y tax dey lda (ZPGCPtr),y clc ldy #S.GC.H adc (ZPGCPtr),y pha iny txa adc (ZPGCPtr),y tax pla sbc #0 bcs .2 dex .2 ldy #S.GC.Y2 sta (ZPGCPtr),y iny txa sta (ZPGCPtr),y rts *-------------------------------------- ReadMouse >PULLYA ldx hDevMouse Mouse is active ? beq .9 ldx #DEVMGR.READBLOCK jmp GoDevMouse .9 sec rts *-------------------------------------- GoDevGfx >LDYA L.CB.Cache GoDevGfx.YA ldx #DEVMGR.WRITE GoDevGfx.Jmp jmp $ffff *-------------------------------------- GoDevMouse 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 *-------------------------------------- .INB /A2OSX.SRC/LIB/LIBGUI.G.CUR *-------------------------------------- DEVNAME.GFX >CSTR "GFX" DEVNAME.MOUSE >CSTR "MOU1" *-------------------------------------- hDevMouse .BS 1 *-------------------------------------- DX .BS 2 DY .BS 2 IY .BS 1 IE .BS 2 D .BS 2 INE .BS 2 Counter .BS 2 CLIP.Line.P1 .BS 1 CLIP.Line.P2 .BS 1 *-------------------------------------- CB.CmdLen .DA S.CB.Y1+1 SETPIXEL .DA S.CB.Y1+1 GETPIXEL .DA S.CB.X2+1 HLINE .DA S.CB.Y2+1 VLINE .DA S.CB.Y2+1 FILLRECT .DA S.CB.DstPtr+1 BITBLT .DA S.CB.DstPtr+1 GETRECTBUFSIZE .DA S.CB.Y2+1 DRAWLINE *-------------------------------------- MouseClamp .BS 8 *-------------------------------------- GC.Screen .BS S.GC GC.Desktop .BS S.GC GC.Bar .BS S.GC *-------------------------------------- GC.Cache .BS S.GC CB.Cache .BS S.CB *-------------------------------------- MAN SAVE /A2OSX.SRC/LIB/LIBGUI.S ASM