diff --git a/.Floppies/A2OSX.BUILD.po b/.Floppies/A2OSX.BUILD.po index f5fc8454..a2bb2a87 100644 Binary files a/.Floppies/A2OSX.BUILD.po and b/.Floppies/A2OSX.BUILD.po differ diff --git a/.Floppies/A2OSX.SRC.po b/.Floppies/A2OSX.SRC.po index e585dbdf..53be27df 100644 Binary files a/.Floppies/A2OSX.SRC.po and b/.Floppies/A2OSX.SRC.po differ diff --git a/DRV/MOUSE.DRV.S.txt b/DRV/MOUSE.DRV.S.txt index 612b2460..a88d8106 100644 --- a/DRV/MOUSE.DRV.S.txt +++ b/DRV/MOUSE.DRV.S.txt @@ -11,48 +11,12 @@ AUTO 6 .INB /A2OSX.BUILD/INC/MACROS.I .INB /A2OSX.BUILD/INC/A2OSX.I .INB /A2OSX.BUILD/INC/MLI.ERR.I + .INB /A2OSX.BUILD/INC/XY.MOUSE.I + .INB /A2OSX.BUILD/INC/LIBGUI.I *-------------------------------------- ZPGoMouse .EQ ZPDRV ZPTmpPtr1 .EQ ZPDRV+2 *-------------------------------------- -EVENT.MOUSEUP .EQ %00000001 -EVENT.MOUSEDOWN .EQ %00000010 -EVENT.MOUSEMOVE .EQ %00000100 -EVENT.MOUSEDRAG .EQ %00001000 -EVENT.MOUSECLK .EQ %00010000 -EVENT.MOUSEDCLK .EQ %00100000 -*-------------------------------------- -SETMOUSE .EQ $12 Sets mouse mode -SERVEMOUSE .EQ $13 Services mouse interrupt -READMOUSE .EQ $14 Reads mouse position -CLEARMOUSE .EQ $15 Clears mouse position to 0 (for delta mode) -POSMOUSE .EQ $16 Sets mouse position to a user-defined pos -CLAMPMOUSE .EQ $17 Sets mouse bounds in a window -HOMEMOUSE .EQ $18 Sets mouse to upper-left corner of clamp win -INITMOUSE .EQ $19 Resets mouse clamps to default values,sets mouse position to 0,0 -LOCLAMPLO .EQ $0478 low byte of low clamp. -HICLAMPLO .EQ $04F8 low byte of high clamp. -LOCLAMPHI .EQ $0578 high byte of low clamp. -HICLAMPHI .EQ $05F8 high byte of high clamp. -MOUSEXLOx .EQ $0478 -MOUSEYLOx .EQ $04F8 -MOUSEXHIx .EQ $0578 -MOUSEYHIx .EQ $05F8 -* .EQ $0678 -* .EQ $06F8 -MOUSESTSx .EQ $0778 -MOUSESTSx.DOWN .EQ %10000000 -MOUSESTSx.LDOWN .EQ %01000000 -MOUSESTSx.MOVED .EQ %00100000 -MOUSESTSx.INTVBL .EQ %00001000 -MOUSESTSx.INTBUT .EQ %00000100 -MOUSESTSx.INTMOVE .EQ %00000010 -MOUSEMODx .EQ $07F8 -MOUSEMODx.INTVBL .EQ %00001000 -MOUSEMODx.INTBUT .EQ %00000100 -MOUSEMODx.INTMOVE .EQ %00000010 -MOUSEMODx.ACTIVE .EQ %00000001 -*-------------------------------------- * File Header (16 Bytes) *-------------------------------------- CS.START cld @@ -168,30 +132,13 @@ READBLOCK >STYA ZPTmpPtr1 ldx DEVSLOT0n lda MOUSESTSx,x - and #MOUSESTSx.DOWN+MOUSESTSx.LDOWN - beq .3 no button state change:up & previously up - cmp #MOUSESTSx.DOWN+MOUSESTSx.LDOWN - beq .3 no button state change:down & previously down - - asl if CS, down & previously up - bcc .1 - - lda #EVENT.MOUSEUP - bra .2 - -.1 lda #EVENT.MOUSEDOWN - -.2 sta (ZPTmpPtr1) - -.3 lda MOUSESTSx,x and #MOUSESTSx.MOVED - beq .4 + beq .1 - lda (ZPTmpPtr1) - ora #EVENT.MOUSEMOVE + lda #S.MOUSE.S.MOVE sta (ZPTmpPtr1) -.4 ldy #1 + ldy #S.MOUSE.X1 lda MOUSEXLOx,x sta (ZPTmpPtr1),y @@ -208,12 +155,75 @@ READBLOCK >STYA ZPTmpPtr1 lda MOUSEYHIx,x sta (ZPTmpPtr1),y - plp - + stz bDblClick Reset DblClick flag + +.1 lda MOUSESTSx,x + and #MOUSESTSx.DOWN+MOUSESTSx.LDOWN + beq .8 no button state change:up & previously up + + cmp #MOUSESTSx.DOWN+MOUSESTSx.LDOWN + beq .8 no button state change:down & previously down + asl if CS, down & previously up + bcc .2 + + lda #S.MOUSE.S.DOWN + ora (ZPTmpPtr1) + sta (ZPTmpPtr1) button has been pressed, start drag... + + lda MOUSEXLOx,x + sta SrcDrag + + iny + lda MOUSEXHIx,x + sta SrcDrag+1 + + iny + lda MOUSEYLOx,x + sta SrcDrag+2 + + iny + lda MOUSEYHIx,x + sta SrcDrag+3 + + bra .8 + +.2 lda #S.MOUSE.S.UP CC: up, previously down + tay + ora (ZPTmpPtr1) + sta (ZPTmpPtr1) + + tya + bne .4 no move...click! + lda #S.MOUSE.S.CLK + bit bDblClick + beq .3 + + lda #S.MOUSE.S.DCLK + lda #1 + sta bDblClick + +.3 dec bDblClick + ora (ZPTmpPtr1) + sta (ZPTmpPtr1) + bra .8 + +.4 lda #S.MOUSE.S.DRAG + ora (ZPTmpPtr1) + sta (ZPTmpPtr1) + + ldy #S.MOUSE.X2 + +.5 lda SrcDrag-S.MOUSE.X2,y + sta (ZPTmpPtr1),y + iny + cpy #S.MOUSE.X2+4 + bne .5 + +.8 plp + lda (ZPTmpPtr1) beq .9 - clc rts @@ -308,6 +318,8 @@ DRV.CS.END DEVSLOT0n .BS 1 DEVSLOTn0 .BS 1 DEVSLOTCn .BS 1 +bDblClick .BS 1 +SrcDrag .BS 4 *-------------------------------------- DEVSTAT .DA #0 .DA #0,#0,#0 size @@ -315,7 +327,8 @@ DEVSTAT .DA #0 .BS 2 .DA #S.DSTAT.T.XY .DA #0 - .DA $0900 + .DA #0 + .DA #91 *-------------------------------------- MAN SAVE /A2OSX.SRC/DRV/MOUSE.DRV.S diff --git a/INC/LIBGUI.I.txt b/INC/LIBGUI.I.txt index b36362ee..ca230624 100644 --- a/INC/LIBGUI.I.txt +++ b/INC/LIBGUI.I.txt @@ -6,6 +6,14 @@ AUTO 6 .LIST OFF .OP 65C02 *-------------------------------------- +LIBGUI.InitGUI.A .EQ 4 +LIBGUI.CloseGUI .EQ 6 +LIBGUI.Draw .EQ 8 +LIBGUI.SetCursor.A .EQ 10 +LIBGUI.SetCursorPos .EQ 12 +LIBGUI.HideCursor .EQ 14 +LIBGUI.ShowCursor .EQ 16 +*-------------------------------------- S.CB.CMD .EQ 0 S.CB.CMD.SETPIXEL .EQ 0 S.CB.CMD.GETPIXEL .EQ 2 @@ -63,25 +71,30 @@ S.CUR.HotPointX .EQ 0 S.CUR.HotPointY .EQ 1 S.CUR.BM .EQ 2 *-------------------------------------- -S.BM.F .EQ 0 +S.BM.F .EQ 0 S.BM.F.BBP1 .EQ %00000001 S.BM.F.BBP2 .EQ %00000010 S.BM.F.BBP4 .EQ %00000100 S.BM.F.BBP8 .EQ %00001000 -S.BM.RowBytes .EQ 1 -S.BM.W .EQ 2 -S.BM.H .EQ 4 -S.BM.MASK.OFS .EQ 6 +S.BM.RowBytes .EQ 1 +S.BM.W .EQ 2 +S.BM.H .EQ 4 +S.BM.MASK.OFS .EQ 6 * -S.BM .EQ 8 +S.BM .EQ 8 *-------------------------------------- -LIBGUI.InitGUI.A .EQ 4 -LIBGUI.CloseGUI .EQ 6 -LIBGUI.Draw .EQ 8 -LIBGUI.SetCursor.A .EQ 10 -LIBGUI.SetCursorPos .EQ 12 -LIBGUI.HideCursor .EQ 14 -LIBGUI.ShowCursor .EQ 16 +S.MOUSE.S .EQ 0 +S.MOUSE.S.UP .EQ %00000001 +S.MOUSE.S.DOWN .EQ %00000010 +S.MOUSE.S.MOVE .EQ %00000100 +S.MOUSE.S.DRAG .EQ %00001000 +S.MOUSE.S.CLK .EQ %00010000 +S.MOUSE.S.DCLK .EQ %00100000 +S.MOUSE.X1 .EQ 1 +S.MOUSE.Y1 .EQ 3 +S.MOUSE.X2 .EQ 5 +S.MOUSE.Y2 .EQ 7 +S.MOUSE .EQ 9 *-------------------------------------- MAN SAVE /A2OSX.BUILD/INC/LIBGUI.I diff --git a/INC/XY.MOUSE.I.txt b/INC/XY.MOUSE.I.txt new file mode 100644 index 00000000..d9b94a3c --- /dev/null +++ b/INC/XY.MOUSE.I.txt @@ -0,0 +1,42 @@ +PR#3 +PREFIX /A2OSX.BUILD +NEW +INC 1 +AUTO 6 + .LIST OFF +*-------------------------------------- +* //c Mouse Port, IIe Mouse Card +*-------------------------------------- +SETMOUSE .EQ $12 Sets mouse mode +SERVEMOUSE .EQ $13 Services mouse interrupt +READMOUSE .EQ $14 Reads mouse position +CLEARMOUSE .EQ $15 Clears mouse position to 0 (for delta mode) +POSMOUSE .EQ $16 Sets mouse position to a user-defined pos +CLAMPMOUSE .EQ $17 Sets mouse bounds in a window +HOMEMOUSE .EQ $18 Sets mouse to upper-left corner of clamp win +INITMOUSE .EQ $19 Resets mouse clamps to default values,sets mouse position to 0,0 +LOCLAMPLO .EQ $0478 low byte of low clamp. +HICLAMPLO .EQ $04F8 low byte of high clamp. +LOCLAMPHI .EQ $0578 high byte of low clamp. +HICLAMPHI .EQ $05F8 high byte of high clamp. +MOUSEXLOx .EQ $0478 +MOUSEYLOx .EQ $04F8 +MOUSEXHIx .EQ $0578 +MOUSEYHIx .EQ $05F8 +* .EQ $0678 +* .EQ $06F8 +MOUSESTSx .EQ $0778 +MOUSESTSx.DOWN .EQ %10000000 +MOUSESTSx.LDOWN .EQ %01000000 +MOUSESTSx.MOVED .EQ %00100000 +MOUSESTSx.INTVBL .EQ %00001000 +MOUSESTSx.INTBUT .EQ %00000100 +MOUSESTSx.INTMOVE .EQ %00000010 +MOUSEMODx .EQ $07F8 +MOUSEMODx.INTVBL .EQ %00001000 +MOUSEMODx.INTBUT .EQ %00000100 +MOUSEMODx.INTMOVE .EQ %00000010 +MOUSEMODx.ACTIVE .EQ %00000001 +*-------------------------------------- +MAN +SAVE /A2OSX.BUILD/INC/XY.MOUSE.I diff --git a/LIB/LIBGUI.S.txt b/LIB/LIBGUI.S.txt index 36d55b39..d1d4dd17 100644 --- a/LIB/LIBGUI.S.txt +++ b/LIB/LIBGUI.S.txt @@ -129,7 +129,7 @@ ShowCursor rts *-------------------------------------- * In: Control Block -* hDC +* CMD * OP * MODE * COLOR diff --git a/README.md b/README.md index e072e44e..ef34214a 100644 --- a/README.md +++ b/README.md @@ -14,14 +14,14 @@ Kernel 0.9.1 stable enough to resume building. + KM.APPLETALK module not crashing anymore - (Undocummented AtInit function, had to go further in official ATINIT dissaembly) + (Undocummented AtInit function, had to go further in official ATINIT disassembly) + Improved Command Line editing and history. (SUPPR key is emulated with Ctrl-X using //e keyboard) + New DevMgr enumeration stratey, now including /RAM and other virtual Block Devices - + Math API (Hacked from APLLESOFT ROM ;-) + + Math API (Hacked from APPLESOFT ROM ;-) + CSH Script engine in progress within Shell (In progress) diff --git a/SBIN/GUI.S.txt b/SBIN/GUI.S.txt index b6e6c938..a24d8427 100644 --- a/SBIN/GUI.S.txt +++ b/SBIN/GUI.S.txt @@ -73,8 +73,8 @@ CS.INIT >LDYA L.MSG.INIT >SYSCALL GetDevByName.YA bcc .20 - inc DEVNAME.MOUSE+4 - lda DEVNAME.MOUSE+4 + inc DEVNAME.MOUSE+3 + lda DEVNAME.MOUSE+3 cmp #'8' bne .11 beq .21 No mouse found, skip mouse init @@ -136,7 +136,7 @@ CS.RUN lda A2osX.ASCREEN GUI screen active ? bcs .4 go check KB lda MouseData - bit #4 mouse move + bit #S.MOUSE.S.MOVE beq .1 lda MouseData+1 @@ -161,10 +161,10 @@ CS.RUN lda A2osX.ASCREEN GUI screen active ? >PUSHW L.SetPixel.CB >LIBCALL hLIBGUI,LIBGUI.Draw - clc - rts -.1 bit #$20 + lda MouseData + +.1 bit #S.MOUSE.S.DOWN beq .4 jsr Destop.Paint @@ -285,7 +285,7 @@ hLIBGUI .BS 1 hDevGFX .BS 1 hDevMouse .BS 1 MouseClamp .BS 8 -MouseData .BS 5 +MouseData .BS S.MOUSE *-------------------------------------- Rect.CB .DA #S.CB.CMD.FILLRECT .DA #S.CB.OP.SET diff --git a/SBIN/GUIOSD.S.txt b/SBIN/GUIOSD.S.txt new file mode 100644 index 00000000..dd5ddeec --- /dev/null +++ b/SBIN/GUIOSD.S.txt @@ -0,0 +1,257 @@ +PR#3 +PREFIX /A2OSX.BUILD +NEW +INC 1 +AUTO 6 + .LIST OFF + .OP 65C02 + .OR $2000 + .TF /A2OSX.BUILD/SBIN/GUIOSD +*-------------------------------------- + .INB /A2OSX.BUILD/INC/MACROS.I + .INB /A2OSX.BUILD/INC/A2OSX.I + .INB /A2OSX.BUILD/INC/PRODOS.I + .INB /A2OSX.BUILD/INC/IO.I + .INB /A2OSX.BUILD/INC/LIBGUI.I +*-------------------------------------- +A1L .EQ $3C +A2L .EQ $3E +A4L .EQ $42 + +MoveAux .EQ $C311 +XFer .EQ $C314 +*-------------------------------------- +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 CS + .DA DS.END-DS.START DS + .DA #64 SS + .DA #0 ZP + .DA 0 +*-------------------------------------- +* Relocation Table +*-------------------------------------- +.1 .DA CS.INIT + .DA CS.RUN + .DA CS.DOEVENT + .DA CS.QUIT + .DA 0 +*-------------------------------------- +CS.INIT + lda #0 + sec + rts +*-------------------------------------- +CS.RUN clc + rts +*-------------------------------------- +CS.DOEVENT sec + rts +*-------------------------------------- +CS.QUIT clc + rts +*-------------------------------------- +CS.END +*-------------------------------------- + .PH $0C00 +*-------------------------------------- +ZPCmdPtr .EQ ZPDRV +ZPDestBMPtr .EQ ZPDRV+2 +*-------------------------------------- +* YA =Ptr to S.CB in MAIN**** +* X = DestBM hMem +*-------------------------------------- +GUIOSD >STYA A1L Src Start Address (MAIN) + pha + + tya + clc + adc #S.CB + sta A2L Src End Address (MAIN) + pla + adc /S.CB + sta A2L+1 + + >LDYA CB.Cache + >STYA A4L Dst Address (AUX) + + sec Main To Aux + jsr MoveAux + + txa + ldx #SYS.GetMemPtr.A Get AUX Stock Object + jsr $E000 with GetMem + + >STYA ZPDestBMPtr + + ldx #0 + +.1 lda (ZPDestBMPtr) + sta DestBM.Cache,x + inc ZPDestBMPtr + bne .2 + inc ZPDestBMPtr+1 +.2 inx + cpx #S.BM + bne .1 + + ldx CB.Cache+S.CB.CMD + + jmp (J.Cmds,x) +*-------------------------------------- +J.Cmds .DA SETPIXEL + .DA GETPIXEL + .DA HLINE + .DA VLINE + .DA FILLRECT + .DA BITBLT + .DA GETRECTBUFSIZE +*-------------------------------------- +SETPIXEL >LDYA CB.Cache+S.CB.Y1 + ldx DestBM.Cache+S.BM.RowBytes + jsr YAMultX + + pha + tya + + clc + adc ZPDestBMPtr + sta ZPDestBMPtr + pla + adc ZPDestBMPtr+1 + sta ZPDestBMPtr+1 + + lda CB.Cache+S.CB.MODE + bit #S.CB.MODE.C16 + bne SETPIXEL.C16 + +SETPIXEL.MONO lda CB.Cache+S.CB.X1 + pha + and #$7 MOD 7 + tax + pla + lsr CB.Cache+S.CB.X1 + ror + lsr CB.Cache+S.CB.X1 + ror + lsr CB.Cache+S.CB.X1 + ror + clc + adc ZPDestBMPtr + sta ZPDestBMPtr + + lda CB.Cache+S.CB.X1 + adc ZPDestBMPtr+1 + sta ZPDestBMPtr+1 + + lda CB.Cache+S.CB.OP +* cmp #S.CB.OP.XOR + beq SETPIXEL.MONO.XOR + + lda CB.Cache+S.CB.COLOR + bne SETPIXEL.MONO.WHITE + +SETPIXEL.MONO.BLACK + lda (ZPDestBMPtr) + and Mono.NMasks,x + sta (ZPDestBMPtr) + + rts + +SETPIXEL.MONO.WHITE + lda (ZPDestBMPtr) + ora Mono.Masks,x + sta (ZPDestBMPtr) + + rts + +SETPIXEL.MONO.XOR + lda (ZPDestBMPtr) + eor Mono.Masks,x + sta (ZPDestBMPtr) + + rts +SETPIXEL.C16 +*-------------------------------------- +GETPIXEL +*-------------------------------------- +HLINE +*-------------------------------------- +VLINE +*-------------------------------------- +FILLRECT +*-------------------------------------- +BITBLT +*-------------------------------------- +GETRECTBUFSIZE +*-------------------------------------- +*-------------------------------------- +* IN: +* Y,A = num1 (16) +* X = num2 (8) +* OUT: +* Y,A = (Y,A) * X +*-------------------------------------- +YAMultX stx GBYTE + + sty GWORD + sta GWORD+1 + + ldy #0 Result LO + tya Result HI + + bra .3 + +.1 pha + tya + clc + adc GWORD + tay + pla + adc GWORD+1 + +.2 asl GWORD + rol GWORD+1 + +.3 lsr GBYTE + bcs .1 + bne .2 + rts +*-------------------------------------- +Mono.NMasks .DA #%11111110 + .DA #%11111101 + .DA #%11111011 + .DA #%11110111 + .DA #%11101111 + .DA #%11011111 + .DA #%10111111 + .DA #%01111111 +*-------------------------------------- +Mono.Masks .DA #%00000001 + .DA #%00000010 + .DA #%00000100 + .DA #%00001000 + .DA #%00010000 + .DA #%00100000 + .DA #%01000000 + .DA #%10000000 +*-------------------------------------- +CB.Cache .BS S.CB +DestBM.Cache .BS S.BM +GBYTE .BS 1 +GWORD .BS 2 +*-------------------------------------- + .EP +*-------------------------------------- + .DUMMY + .OR 0 +DS.START +DS.END + .ED +*-------------------------------------- +MAN +SAVE /A2OSX.SRC/SBIN/GUIOSD +ASM