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 .DA GetScreenGC 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.ResizeXY1 .DA CUR.ResizeXY2 .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.Get >STYA .1+1 ldx #S.GC-1 .1 lda $ffff,x SELF MODIFIED sta GC.Cache,x dex bpl .1 rts *-------------------------------------- GC.SetX2Y2 >STYA ZPPtr1 ldy #S.GC.X1+1 lda (ZPPtr1),y tax dey lda (ZPPtr1),y clc ldy #S.GC.W adc (ZPPtr1),y pha iny txa adc (ZPPtr1),y tax pla sbc #0 bcs .1 dex .1 ldy #S.GC.X2 sta (ZPPtr1),y iny txa sta (ZPPtr1),y ldy #S.GC.Y1+1 lda (ZPPtr1),y tax dey lda (ZPPtr1),y clc ldy #S.GC.H adc (ZPPtr1),y pha iny txa adc (ZPPtr1),y tax pla sbc #0 bcs .2 dex .2 ldy #S.GC.Y2 sta (ZPPtr1),y iny txa sta (ZPPtr1),y rts *-------------------------------------- CB.Get >STYA .1+1 ldx #S.CB-1 .1 lda $ffff,x SELF MODIFIED sta CB.Cache,x dex bpl .1 rts *-------------------------------------- ReadMouse >PULLYA ldx hDevMouse Mouse is active ? beq .9 ldx #DEVMGR.READBLOCK jmp GoDevMouse .9 sec rts *-------------------------------------- GetScreenGC >LDYA L.GC.Screen 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.TaskBar .BS S.GC *-------------------------------------- GC.Cache .BS S.GC CB.Cache .BS S.CB *-------------------------------------- MAN SAVE /A2OSX.SRC/LIB/LIBGUI.S ASM