diff --git a/.Floppies/A2OSX.BUILD.po b/.Floppies/A2OSX.BUILD.po index a7ea23de..4d5900fb 100644 Binary files a/.Floppies/A2OSX.BUILD.po and b/.Floppies/A2OSX.BUILD.po differ diff --git a/BIN/SHELL.S.CMD.txt b/BIN/SHELL.S.CMD.txt index 8a8eb868..d2938bba 100644 --- a/BIN/SHELL.S.CMD.txt +++ b/BIN/SHELL.S.CMD.txt @@ -112,7 +112,7 @@ Cmd.INT.PUSHD >LDA.G PUSHD.STACK ldy #S.PS.hPREFIX lda (pPs),y >SYSCALL GetMemPtr - >SYSCALL NewStr + >SYSCALL strdup bcs Cmd.INT.POPD.CSYN >INC.G PUSHD.STACK @@ -210,7 +210,7 @@ Cmd.INT.CD.1 >STYA ZPPtr1 sta (ZPPtr1),y .8 >LDYA ZPPtr1 - >SYSCALL NewStr + >SYSCALL strdup bcs .90 txa @@ -510,7 +510,7 @@ Cmd.INT.READ lda #1 bcs .99 bra .7 -.4 >SYSCALL newstr +.4 >SYSCALL strdup txa >STA.G hVarName diff --git a/BIN/X.FILEENUM.S.txt b/BIN/X.FILEENUM.S.txt index 02903af4..ee216619 100644 --- a/BIN/X.FILEENUM.S.txt +++ b/BIN/X.FILEENUM.S.txt @@ -152,7 +152,7 @@ InitSrcDirYA >SYSCALL RealPath adc #0 sta ZPPtr2+1 - >SYSCALL Newstr + >SYSCALL strdup bcs .9 txa >STA.G hFilter @@ -252,7 +252,7 @@ InitDstDirYA >SYSCALL RealPath adc #0 sta ZPPtr2+1 - >SYSCALL NewStr + >SYSCALL strdup bcs .9 txa >STA.G hDstFileName diff --git a/DRV/DHGR.DRV.G.txt b/DRV/DHGR.DRV.G.txt index 28b7d719..c1a111b6 100644 --- a/DRV/DHGR.DRV.G.txt +++ b/DRV/DHGR.DRV.G.txt @@ -4,13 +4,14 @@ AUTO 4,1 .LIST OFF *-------------------------------------- Mask7BitsH .DA #%01111111 Useless - .DA #%01111110 +C2.MASK .DA #%01111110 .DA #%01111100 .DA #%01111000 .DA #%01110000 .DA #%01100000 .DA #%01000000 - +* .DA #%00000000 +C1.MASK Mask7BitsL .DA #%00000000 Useless .DA #%00000001 .DA #%00000011 @@ -35,13 +36,13 @@ Shift7BitsCol2 .DA #%00000000 Useless .DA #%01111100 .DA #%01111110 *-------------------------------------- -C1.MASK .DA #%00000000 Clear (AND) Col 1 bits - .DA #%00000001 - .DA #%00000011 - .DA #%00000111 - .DA #%00001111 - .DA #%00011111 - .DA #%00111111 +*C1.MASK .DA #%00000000 Clear (AND) Col 1 bits +* .DA #%00000001 +* .DA #%00000011 +* .DA #%00000111 +* .DA #%00001111 +* .DA #%00011111 +* .DA #%00111111 C1.DATA .DA #%11111111 set (ORA) COL 1 bits .DA #%11111110 @@ -51,13 +52,13 @@ C1.DATA .DA #%11111111 set (ORA) COL 1 bits .DA #%11100000 .DA #%11000000 *-------------------------------------- -C2.MASK .DA #%01111110 Clear (AND) Col 2 bits - .DA #%01111100 - .DA #%01111000 - .DA #%01110000 - .DA #%01100000 - .DA #%01000000 - .DA #%00000000 +*C2.MASK .DA #%01111110 Clear (AND) Col 2 bits +* .DA #%01111100 +* .DA #%01111000 +* .DA #%01110000 +* .DA #%01100000 +* .DA #%01000000 +* .DA #%00000000 C2.DATA .DA #%10000001 set (ORA) COL 2 bits .DA #%10000011 diff --git a/DRV/DHGR.DRV.S.txt b/DRV/DHGR.DRV.S.txt index 3ae1817b..e61ef89d 100644 --- a/DRV/DHGR.DRV.S.txt +++ b/DRV/DHGR.DRV.S.txt @@ -228,8 +228,25 @@ STATUS.9 lda #MLI.E.BADCTL sec rts *-------------------------------------- -OPEN sta A2osX.SCRNDEVS+2 DEV.ID in A +OPEN ldx #0 DEV.ID in A +.10 ldy A2osX.SCRNDEVS,x + beq .20 + + inx + cpx #K.SCR.MAX + bne .10 + + lda #E.OOH + sec + rts + +.20 sta A2osX.SCRNDEVS,x + sta DCB+S.DCB.GFX.DEVID + + lda #S.DIB.S.OPENED + tsb DIB+S.DIB.S + ldx #0 ldy #1 @@ -272,7 +289,7 @@ CONTROL ldy #0 iny bra .1 -.8 lda #3 +.8 lda DCB+S.DCB.GFX.DEVID sta A2osX.ASCREEN clc @@ -281,7 +298,7 @@ CONTROL ldy #0 CLOSE clc rts *-------------------------------------- -WRITE >STYA ZPIOCTL +WRITE >STYA ZPIOCTL NON STANDARD lda (ZPIOCTL) Get Cmd @@ -470,12 +487,17 @@ DIB .DA #0 .DA K.VER *-------------------------------------- DCB .DA #S.DCB.T.GFX + .BS 1 DEV.ID + .BS 1 STATUS .DA #S.CB.M.MONO+S.CB.M.C16 F - .DA 0 S .DA 560 W .DA 192 H *-------------------------------------- DRV.END + .LI ON +DRV.CS.SIZE .EQ DRV.CS.END-DRV.CS.START +DRV.SIZE .EQ DRV.END-DRV.CS.START + .LI OFF MAN SAVE USR/SRC/DRV/DHGR.DRV.S ASM diff --git a/DRV/MOUSE.DRV.S.txt b/DRV/MOUSE.DRV.S.txt index b8c8ebe4..fec3a007 100644 --- a/DRV/MOUSE.DRV.S.txt +++ b/DRV/MOUSE.DRV.S.txt @@ -119,22 +119,23 @@ FD.DEV.NAME .AZ "MOU7" * Driver Code *-------------------------------------- ZPIOCTL .EQ ZPDRV +ZPBufPtr .EQ ZPDRV+2 *-------------------------------------- DRV.CS.START cld jmp (.1,x) .1 .DA STATUS - .DA READBLOCK + .DA A2osX.BADCALL .DA A2osX.BADCALL .DA A2osX.BADCALL .DA CONTROL .DA A2osX.BADCALL .DA OPEN .DA CLOSE - .DA A2osX.BADCALL + .DA READ .DA A2osX.BADCALL .DA 0 end or relocation *-------------------------------------- -STATUS >STYA ZPIOCTL +STATUS jsr GETIOCTL ldy #S.IOCTL.STATCODE lda (ZPIOCTL),y @@ -143,20 +144,13 @@ STATUS >STYA ZPIOCTL cmp #S.IOCTL.STATCODE.GETDIB bne STATUS.DCB - ldx #S.DIB-1 + ldy #S.DIB-1 .HS 2C bit abs -.1 ldx #3 - - ldy #S.IOCTL.BUFPTR - lda (ZPIOCTL),y - sta .3+1 - iny - lda (ZPIOCTL),y - sta .3+2 +.1 ldy #3 -.2 lda DIB,x -.3 sta $ffff,x SELF MODIFIED - dex +.2 lda DIB,y + sta (ZPBufPtr),y + dey bpl .2 clc @@ -168,121 +162,7 @@ STATUS.9 lda #MLI.E.BADCTL sec rts *-------------------------------------- -READBLOCK >STYA ZPIOCTL - - stz READBLOCK.S+1 Reset Flags - - php - sei - -* ldy #READMOUSE DONE BY IRQ MANAGER -* jsr GOMOUSE - - ldx DEVSLOT0n - - lda MOUSESTSx,x - and #MOUSESTSx.MOVED - beq .1 - - ldy #S.MOUSE.X1 - - lda MOUSEXLOx,x - sta (ZPIOCTL),y - - iny - lda MOUSEXHIx,x - sta (ZPIOCTL),y - - iny - lda MOUSEYLOx,x - sta (ZPIOCTL),y - - iny - lda MOUSEYHIx,x - sta (ZPIOCTL),y - - lda #S.MOUSE.S.MOVE - tsb READBLOCK.S+1 - - 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 - tsb READBLOCK.S+1 button has been pressed, start drag... - - lda MOUSEXLOx,x - sta SrcDrag - - lda MOUSEXHIx,x - sta SrcDrag+1 - - lda MOUSEYLOx,x - sta SrcDrag+2 - - lda MOUSEYHIx,x - sta SrcDrag+3 - - bra .8 - -.2 lda READBLOCK.S+1 - - pha save move state - - ora #S.MOUSE.S.UP - sta READBLOCK.S+1 - - pla get back move state - - bne .4 no move...click! - - lda #S.MOUSE.S.CLK - bit bDblClick - bpl .3 - - lda #S.MOUSE.S.DCLK - - ldy #1 - sty bDblClick - -.3 dec bDblClick - - tsb READBLOCK.S+1 - bra .8 - -.4 lda #S.MOUSE.S.DRAG - tsb READBLOCK.S+1 - - ldy #S.MOUSE.X2+3 - -.5 lda SrcDrag-S.MOUSE.X2,y - sta (ZPIOCTL),y - dey - bpl .5 - -.8 plp - -READBLOCK.S lda #$ff SELF MODIFIED - beq .9 - - ldy #S.MOUSE.S - sta (ZPIOCTL),y - clc - rts - -.9 lda #MLI.E.EOF - sec - rts -*-------------------------------------- -CONTROL >STYA ZPIOCTL +CONTROL jsr GETIOCTL php sei @@ -331,21 +211,146 @@ CLOSE php clc rts *-------------------------------------- +READ >STYA ZPBufPtr NON STANDARD + + stz READ.S+1 Reset Flags + + php + sei + +* ldy #READMOUSE DONE BY IRQ MANAGER +* jsr GOMOUSE + + ldx DEVSLOT0n + + lda MOUSESTSx,x + and #MOUSESTSx.MOVED + beq .1 + + ldy #S.MOUSE.X1 + + lda MOUSEXLOx,x + sta (ZPBufPtr),y + + iny + lda MOUSEXHIx,x + sta (ZPBufPtr),y + + iny + lda MOUSEYLOx,x + sta (ZPBufPtr),y + + iny + lda MOUSEYHIx,x + sta (ZPBufPtr),y + + lda #S.MOUSE.S.MOVE + tsb READ.S+1 + + 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 + tsb READ.S+1 button has been pressed, start drag... + + lda MOUSEXLOx,x + sta SrcDrag + + lda MOUSEXHIx,x + sta SrcDrag+1 + + lda MOUSEYLOx,x + sta SrcDrag+2 + + lda MOUSEYHIx,x + sta SrcDrag+3 + + bra .8 + +.2 lda READ.S+1 + + pha save move state + + ora #S.MOUSE.S.UP + sta READ.S+1 + + pla get back move state + + bne .4 no move...click! + + lda #S.MOUSE.S.CLK + bit bDblClick + bpl .3 + + lda #S.MOUSE.S.DCLK + + ldy #1 + sty bDblClick + +.3 dec bDblClick + + tsb READ.S+1 + bra .8 + +.4 lda #S.MOUSE.S.DRAG + tsb READ.S+1 + + ldy #S.MOUSE.X2+3 + +.5 lda SrcDrag-S.MOUSE.X2,y + sta (ZPBufPtr),y + dey + bpl .5 + +.8 plp + +READ.S lda #$ff SELF MODIFIED + beq .9 + + ldy #S.MOUSE.S + sta (ZPBufPtr),y + clc + rts + +.9 lda #MLI.E.EOF + sec + rts +*-------------------------------------- * PRIVATE *-------------------------------------- -SETCLAMP lda (ZPIOCTL),y +GETIOCTL >STYA ZPIOCTL + + ldy #S.IOCTL.BUFPTR + lda (ZPIOCTL),y + sta ZPBufPtr + iny + lda (ZPIOCTL),y + sta ZPBufPtr+1 + + rts +*-------------------------------------- +SETCLAMP lda (ZPBufPtr),y sta LOCLAMPLO iny - lda (ZPIOCTL),y + lda (ZPBufPtr),y sta LOCLAMPHI iny - lda (ZPIOCTL),y + lda (ZPBufPtr),y sta HICLAMPLO iny - lda (ZPIOCTL),y + lda (ZPBufPtr),y sta HICLAMPHI txa diff --git a/INC/A2osX.I.txt b/INC/A2osX.I.txt index c0d2fa46..461bc9a0 100644 --- a/INC/A2osX.I.txt +++ b/INC/A2osX.I.txt @@ -206,7 +206,7 @@ SYS.RealPath .EQ $7C SYS.StrLen .EQ $80 SYS.StrCpy .EQ $82 SYS.StrCat .EQ $84 -* .EQ $86 +SYS.StrDup .EQ $86 SYS.StrUpr .EQ $88 SYS.StrLwr .EQ $8A SYS.StrCmp .EQ $8C @@ -269,7 +269,7 @@ SYS.GetMemByID .EQ $E6 SYS.GetMem .EQ $E8 SYS.GetMem0 .EQ $EA -SYS.NewStr .EQ $EC +* .EQ $EC SYS.SListAdd .EQ $EE SYS.SListLookup .EQ $F0 diff --git a/INC/GFX.I.txt b/INC/GFX.I.txt index b25dff90..caadf336 100644 --- a/INC/GFX.I.txt +++ b/INC/GFX.I.txt @@ -5,8 +5,9 @@ AUTO 4,1 *-------------------------------------- * GFX Devices *-------------------------------------- -S.DCB.GFX.F .EQ 1 +S.DCB.GFX.DEVID .EQ 1 S.DCB.GFX.S .EQ 2 +S.DCB.GFX.F .EQ 3 S.DCB.GFX.W .EQ 4 S.DCB.GFX.H .EQ 6 * diff --git a/LIB/LIBTCPIP.S.DNS.txt b/LIB/LIBTCPIP.S.DNS.txt index 82a422a2..a1dd30d3 100644 --- a/LIB/LIBTCPIP.S.DNS.txt +++ b/LIB/LIBTCPIP.S.DNS.txt @@ -219,7 +219,7 @@ DNS.ADD.I sta DNS.TmpCache jsr DNS.FIND.FREE >LDYA ZPPtrDNS - >SYSCALL newstr + >SYSCALL strdup bcs .9 txa ldy #S.DNSCACHE.hNAME diff --git a/SYS/KERNEL.S.BIN.txt b/SYS/KERNEL.S.BIN.txt index 4fcd64cf..c987dfec 100644 --- a/SYS/KERNEL.S.BIN.txt +++ b/SYS/KERNEL.S.BIN.txt @@ -41,26 +41,17 @@ K.LoadLib jsr BIN.FindLIB * out : *-------------------------------------- K.UnloadLib pha - jsr K.GetMemByID - >STYA ZPPtr1 - ldy #S.MEM.REFCNT - lda (ZPPtr1),y Get count of those referencing this lib - dec only one left ? + jsr K.GetMemPtr + >STYA .2+1 + + jsr MEM.decREFCNT beq .1 - sta (ZPPtr1),y + pla clc rts -.1 ldy #S.MEM.PTR - lda (ZPPtr1),y - sta .2+1 - - iny - lda (ZPPtr1),y - sta .2+2 - - ldx #LIBMGR.UNLOAD +.1 ldx #LIBMGR.UNLOAD .2 jsr $ffff Self Modified, Call LIB.UNLOAD function pla jmp K.FreeMem @@ -114,7 +105,7 @@ K.LoadDrv >STYA .2+1 Save "BIN\0ARGS\0\0" rts *-------------------------------------- BIN.FindLIB clc - .HS B0 bcs + .HS B0 BCS BIN.FindDRV sec >STYA BIN.CmdLine @@ -149,29 +140,22 @@ BIN.Find.ENV.LIB .AZ "LIB" *-------------------------------------- BIN.Load >STYA BIN.CmdLine >STYA .2+1 - - >LDYAI Mem.Table - >STYA ZPPtr1 - ldx #0 we will skip Slot 0... + ldx #0 .1 cpx Mem.LastSlot beq BIN.Load.1 - inx + inx we will skip Slot 0... - lda ZPPtr1 - clc - adc #S.MEM - sta ZPPtr1 - bcc .11 - inc ZPPtr1+1 + txa + jsr K.GetMemPtr -.11 lda (ZPPtr1) + lda (ZPMemMgrSPtr) bpl .1 In Use? ldy #S.MEM.BIN any BIN PATH in this slot? - lda (ZPPtr1),y + lda (ZPMemMgrSPtr),y beq .1 jsr K.GetMemPtr X unmodified, get pathname @@ -186,20 +170,14 @@ BIN.Load >STYA BIN.CmdLine ora #0 bne .2 - ldy #S.MEM.REFCNT - lda (ZPPtr1),y - inc - sta (ZPPtr1),y - - ldy #S.MEM.PTR - lda (ZPPtr1),y - pha - iny - lda (ZPPtr1),y - ply + txa + jsr K.GetMemPtr + + jsr MEM.IncREFCNT clc - rts X=hMem, Y,A=Ptr + jmp K.GetMemPtr.ZPMemMgrSPtr +* X=hMem, Y,A=Ptr *-------------------------------------- BIN.Load.1 * >PUSHWI K.S.STAT @@ -258,24 +236,23 @@ BIN.Load.1 jsr BIN.RelExe >LDYA BIN.CmdLine get back bin path - jsr K.NewStr make a copy of this string + >SYSCALL StrDup make a copy of this string bcs .98 lda BIN.hMem Keep X=hMem jsr K.GetMemByID X unmodified - >STYA ZPPtr1 - lda (ZPPtr1) + lda (ZPMemMgrSPtr) ora #S.MEM.F.CODE This is a code segment - sta (ZPPtr1) + sta (ZPMemMgrSPtr) - txa Get Back hMem + txa Get Back Cmd line hMem ldy #S.MEM.BIN - sta (ZPPtr1),y + sta (ZPMemMgrSPtr),y - lda BIN.hMem - tax return hMEM to Caller... - jmp K.GetMemPtr ...and Y,A=PTR to CS + ldx BIN.hMem return hMEM to Caller... + clc + jmp K.GetMemPtr.ZPMemMgrSPtr ...and Y,A=PTR to CS .98 pha lda BIN.hMem @@ -460,14 +437,9 @@ BIN.RelDrv ldy #H.BIN.DRV.REL.TABLE bra .1 *-------------------------------------- -.2 tya add current offset in Y to Ptr - - sec + 1 to skip last 00 from beq .2 - - adc ZPPtr1 - sta ZPPtr1 - bcc .3 - inc ZPPtr1+1 ZPPtr1=Current Code PTR +.2 jsr MEM.AddYp1ToPtr1 add current offset in Y to Ptr +* + 1 to skip last 00 from beq .2 +* ZPPtr1=Current Code PTR .3 lda BIN.R.CS.End compute new CS.END to stop relocating clc diff --git a/SYS/KERNEL.S.DEV.txt b/SYS/KERNEL.S.DEV.txt index 337273e5..00c9e23d 100644 --- a/SYS/KERNEL.S.DEV.txt +++ b/SYS/KERNEL.S.DEV.txt @@ -131,7 +131,7 @@ K.MKDev jsr MEM.SPtr1PPtr2 ptr1=fd, ptr2=name sta IRQ.Vectors+1,x .8 >LDYA ZPPtr2 - jsr K.NewStr + >SYSCALL StrDup bcs .99 txa diff --git a/SYS/KERNEL.S.ENV.txt b/SYS/KERNEL.S.ENV.txt index 0a302a85..55a3ca66 100644 --- a/SYS/KERNEL.S.ENV.txt +++ b/SYS/KERNEL.S.ENV.txt @@ -109,7 +109,7 @@ K.ExpandStr stz .88+1 Reset Intermediate string... stz K.Buf256,x >LDYAI K.Buf256 - jsr K.NewStr + >SYSCALL StrDup bcs .9 stx .88+1 save this as temp string, in case of recurse @@ -118,7 +118,7 @@ K.ExpandStr stz .88+1 Reset Intermediate string... jmp .1 Yes, start over with hPStr .88 ldx #$ff SELF MODIFIED -* or exit with Y,A from K.NewStrYA +* or exit with Y,A from STRDUP .9 rts */-------------------------------------- diff --git a/SYS/KERNEL.S.JMP.txt b/SYS/KERNEL.S.JMP.txt index 6c89c992..d773222c 100644 --- a/SYS/KERNEL.S.JMP.txt +++ b/SYS/KERNEL.S.JMP.txt @@ -83,7 +83,7 @@ K.SYSCALL.JMP .DA 0 $00 .DA K.StrLen $80 .DA K.StrCpy .DA K.StrCat - .DA 0 + .DA K.StrDup .DA K.StrUpr .DA K.StrLwr .DA K.StrCmp @@ -142,7 +142,7 @@ K.SYSCALL.JMP .DA 0 $00 .DA K.GetMemByID .DA K.GetMem .DA K.GetMem0 - .DA K.NewStr + .DA 0 .DA K.SListAdd *-------------------------------------- .DA K.SListLookup $F0 diff --git a/SYS/KERNEL.S.MEM.txt b/SYS/KERNEL.S.MEM.txt index dbfa599e..5cfe09e3 100644 --- a/SYS/KERNEL.S.MEM.txt +++ b/SYS/KERNEL.S.MEM.txt @@ -158,14 +158,9 @@ MEM.GetMem.YAX stx Mem.ReqFlags lda (pPs),y ldy #S.MEM.OWNERPID sta (ZPMemMgrSPtr),y - - ldy #S.MEM.PTR - lda (ZPMemMgrSPtr),y - pha - iny - lda (ZPMemMgrSPtr),y A = HI PTR - ply Y = LO PTR - clc X = Current hMem + clc + jmp K.GetMemPtr.ZPMemMgrSPtr +* A = HI PTR,Y = LO PTR,X = Current hMem .9 rts *-------------------------------------- @@ -222,7 +217,19 @@ Mem.AddSlot >STYA ZPMemMgrTmp1 save req size sec rts *-------------------------------------- -Mem.NextSlot lda ZPMemMgrSPtr +MEM.IncREFCNT ldy #S.MEM.REFCNT + lda (ZPMemMgrSPtr),y + inc + sta (ZPMemMgrSPtr),y + rts +*-------------------------------------- +MEM.decREFCNT ldy #S.MEM.REFCNT + lda (ZPMemMgrSPtr),y + dec + sta (ZPMemMgrSPtr),y + rts +*-------------------------------------- +MEM.NextSlot lda ZPMemMgrSPtr clc adc #S.MEM sta ZPMemMgrSPtr @@ -236,8 +243,8 @@ Mem.NextSlot lda ZPMemMgrSPtr * none. * (X unmodified) *\-------------------------------------- -K.FreeMem.ERRBAD .AZ "FreeMem:$%h=Bad hMem,BIN=%s\r\n" -K.FreeMem.ERRFREED .AZ "FreeMem:$%h=already freed,BIN=%s\r\n" +K.FreeMem.ERRBAD .AZ "FreeMem:$%h=Bad,%s\r\n" +K.FreeMem.ERRFREED .AZ "FreeMem:$%h=free,%s\r\n" *-------------------------------------- K.FreeMem.BAD sec .HS 90 BCC @@ -265,7 +272,7 @@ K.FreeMem.FREED clc .1 >SYSCALL printf plx - >DEBUG + sec rts *-------------------------------------- @@ -286,10 +293,7 @@ K.FreeMem tay .11 pla - ldy #S.MEM.REFCNT - lda (ZPMemMgrSPtr),y Get count of those referencing this hMem - dec only one left ? - sta (ZPMemMgrSPtr),y + jsr MEM.decREFCNT only one left ? bne .8 no, must be a code segment loaded several times lda (ZPMemMgrSPtr) @@ -365,7 +369,7 @@ K.GetMemPtr sta ZPMemMgrSPtr asl ZPMemMgrSPtr rol sta ZPMemMgrSPtr+1 - +K.GetMemPtr.ZPMemMgrSPtr ldy #S.MEM.PTR lda (ZPMemMgrSPtr),y pha @@ -427,58 +431,6 @@ K.GetMemStat >STYA ZPMemMgrTmp1 bpl .3 rts */-------------------------------------- -* # NewStr -* Create a new copy of this C-String -* Y,A = Ptr to source C-String -* ## RETURN VALUE -* CC : success -* Y,A = PTR to String -* X = hMem (PSTR) -* CS : error -* A = SYS error code -*\-------------------------------------- -K.NewStr >STYA .1+1 - >STYA .4+1 - - ldy #0 - lda #0 - -.1 ldx $ffff,y - beq .2 - iny - bne .1 - inc - inc .1+2 - bne .1 - -.2 iny Add one for ending 0 - bne .3 - inc - -.3 jsr K.GetMem - bcs .9 - >STYA .5+1 - - phy - pha - - ldy #0 - -.4 lda $ffff,y -.5 sta $ffff,y - beq .8 - iny - bne .4 - - inc .4+2 - inc .5+2 - bne .4 - -.8 pla - ply -* clc -.9 rts -*/-------------------------------------- * # SListGetByID * PUSHB = hSList * PUSHW = KeyID @@ -743,6 +695,17 @@ MEM.NextCharPtr1 MEM.GetCharPtr1.8 rts *-------------------------------------- +MEM.AddYp1ToPtr1 + sec + .HS 90 BCC +MEM.AddYToPtr1 clc + tya + adc ZPPtr1 + sta ZPPtr1 + bcc .8 + inc ZPPtr1+1 +.8 rts +*-------------------------------------- MEM.PutCharPtr2 sta (ZPPtr2) inc ZPPtr2 bne .8 diff --git a/SYS/KERNEL.S.PS.txt b/SYS/KERNEL.S.PS.txt index e872bbe6..841eef40 100644 --- a/SYS/KERNEL.S.PS.txt +++ b/SYS/KERNEL.S.PS.txt @@ -32,7 +32,7 @@ K.ExecL sty .1+1 jsr K.Args2ArgV bcs .9 - + jsr PS.Exec .9 php @@ -85,7 +85,7 @@ PS.Exec jsr PS.CreateChild A=PID,Child S.PS at ZPPtr3,PS.Load.hMem * out : * A = PSID * we cannot use ZPPtrs1 & 2 -* because of calling K.NewStr & PS.DupEnv +* because of calling K.StrDup & PS.DupEnv *-------------------------------------- PS.CreateChild ldx CORE.PSCount beq .3 @@ -140,7 +140,7 @@ PS.CreateChild ldx CORE.PSCount ldy #S.PS.hPREFIX copy hPREFIX... lda (pPs),y jsr K.GetMemPtr - jsr K.NewStr + >SYSCALL StrDup bcs .9 jsr PS.SetMemOwner Set Ownership @@ -389,6 +389,33 @@ PS.Load.HEADER .AZ "#!/" PS.Load.ArgSize .BS 2 PS.Load.hMem .BS 1 *-------------------------------------- +* PS.DupEnv +* In: +* A = ENV hMem To Duplicate +* Out: +* A = hMem to new ENV +* X = Count +*-------------------------------------- +PS.DupEnv jsr K.GetMemPtr + >STYA ZPPtr1 + + >LDYAI K.ENV.SIZE + + jsr K.GetMem + bcs .9 + + >STYA ZPPtr2 Target Buffer + phx save hMem + + jsr PS.SetMemOwner Set Ownership + + jsr PS.AddPtr1ToStrVUntil0 + + pla hMem + + clc +.9 rts +*-------------------------------------- * hBIN + PS.ArgV -> #S.PS.hARGV *-------------------------------------- PS.AddArgV stz PS.Load.ArgSize @@ -427,7 +454,7 @@ PS.AddArgV stz PS.Load.ArgSize inc PS.Load.ArgSize+1 -.3 jsr PS.AddYp1ToPtr1 +.3 jsr MEM.AddYp1ToPtr1 bra .1 .4 txa @@ -440,7 +467,7 @@ PS.AddArgV stz PS.Load.ArgSize inc .5 jsr K.GetMem - bcs PS.LoadGetHeader.RTS + bcs PS.AddPtr1ToStrV.8 >STYA ZPPtr2 Target Buffer txa @@ -456,48 +483,14 @@ PS.AddArgV stz PS.Load.ArgSize .6 >LDYA PS.ArgV >STYA ZPPtr1 - -.7 lda (ZPPtr1) - sta (ZPPtr2) - beq .8 Ending \0 - - jsr PS.AddPtr1ToStrV - bra .7 - -.8 clc -.9 rts *-------------------------------------- -* PS.DupEnv -* In: -* A = ENV hMem To Duplicate -* Out: -* A = hMem to new ENV -* X = Count -*-------------------------------------- -PS.DupEnv jsr K.GetMemPtr - >STYA ZPPtr1 - - >LDYAI K.ENV.SIZE - - jsr K.GetMem - bcs .9 - - >STYA ZPPtr2 Target Buffer - phx save hMem - - jsr PS.SetMemOwner Set Ownership - +PS.AddPtr1ToStrVUntil0 .1 lda (ZPPtr1) sta (ZPPtr2) - beq .8 Ending \0 + beq PS.AddPtr1ToStrV.8 Ending \0 jsr PS.AddPtr1ToStrV bra .1 - -.8 pla hMem - - clc -.9 rts *-------------------------------------- PS.AddPtr1ToStrV ldy #$ff @@ -507,26 +500,17 @@ PS.AddPtr1ToStrV sta (ZPPtr2),y bne .2 - jsr PS.AddYp1ToPtr1 + jsr MEM.AddYp1ToPtr1 tya sec adc ZPPtr2 sta ZPPtr2 - bcc .8 + bcc PS.AddPtr1ToStrV.8 inc ZPPtr2+1 -.8 rts -*-------------------------------------- -PS.AddYp1ToPtr1 tya - sec - adc ZPPtr1 - sta ZPPtr1 - bcc .8 - - inc ZPPtr1+1 - -.8 rts +PS.AddPtr1ToStrV.8 + rts *-------------------------------------- PS.SetMemOwner lda CORE.LastPSID ldy #S.MEM.OWNERPID diff --git a/SYS/KERNEL.S.STAT.txt b/SYS/KERNEL.S.STAT.txt index 8c8ac33e..ace4ba4a 100644 --- a/SYS/KERNEL.S.STAT.txt +++ b/SYS/KERNEL.S.STAT.txt @@ -275,7 +275,7 @@ STAT.NewhNodeYAX .2 stx .3+1 Store hFILE pla - jsr K.NewStr + >SYSCALL StrDup bcs .9 txa diff --git a/SYS/KERNEL.S.STDIO.txt b/SYS/KERNEL.S.STDIO.txt index 1385ad75..dbdebe03 100644 --- a/SYS/KERNEL.S.STDIO.txt +++ b/SYS/KERNEL.S.STDIO.txt @@ -709,17 +709,17 @@ PrintF.Cnt .BS 2 K.FGetS jsr PFT.CheckNodeA bcs .90 - >PULLW ZPPtr1 s + jsr MEM.SPtr1PPtr2 - >PULLA + lda ZPPtr1 sec sbc #2 eor #$ff - sta ZPPtr2 !n - >PULLA + sta ZPPtr1 !n + lda ZPPtr1+1 sbc #0 eor #$ff - sta ZPPtr2+1 !n + sta ZPPtr1+1 !n jsr K.GetC.I bcs .9 @@ -728,14 +728,9 @@ K.FGetS jsr PFT.CheckNodeA cmp #C.CR beq .8 - sta (ZPPtr1) - inc ZPPtr1 - bne .2 - inc ZPPtr1+1 + jsr MEM.PutCharPtr2 -.2 inc ZPPtr2 - bne .3 - inc ZPPtr2+1 + jsr MEM.NextCharPtr1 beq .8 .3 jsr K.GetC.I @@ -745,7 +740,7 @@ K.FGetS jsr PFT.CheckNodeA .9 pha lda #0 - sta (ZPPtr1) + sta (ZPPtr2) pla .99 rts @@ -819,14 +814,10 @@ K.SScanF >STYA ZPPtr2 String to Scan stz .5+1 reset LStack Ptr stz .80+1 rest Arg processed -.1 lda (ZPPtr1) End Of format? +.1 jsr MEM.GetCharPtr1 End Of format? beq .8 - inc ZPPtr1 - bne .11 - inc ZPPtr1+1 - -.11 cmp #'%' Escape ? + cmp #'%' Escape ? beq .2 cmp #' ' Space ? @@ -848,14 +839,10 @@ K.SScanF >STYA ZPPtr2 String to Scan beq .12 bne .1 -.2 lda (ZPPtr1) Get specifier after % +.2 jsr MEM.GetCharPtr1 Get specifier after % beq .9 unexpected End of format after "%" ? - inc ZPPtr1 - bne .21 - inc ZPPtr1+1 - -.21 ldx #K.SScanFJMP-K.SScanFTBL-2 + ldx #K.SScanFJMP-K.SScanFTBL-2 .3 cmp K.SScanFTBL,x beq .4 @@ -1311,7 +1298,7 @@ STDIO.NewHFileYAX .2 stx .3+1 Store hFILE pla - jsr K.NewStr + >SYSCALL StrDup bcs .9 txa diff --git a/SYS/KERNEL.S.STDLIB.txt b/SYS/KERNEL.S.STDLIB.txt index 28601b20..9fa31c95 100644 --- a/SYS/KERNEL.S.STDLIB.txt +++ b/SYS/KERNEL.S.STDLIB.txt @@ -411,7 +411,8 @@ K.realpath.I clc .89 lda #$ff SELF MODIFIED bpl .98 >LDYAI K.Buf256 - jmp K.NewStr + >SYSCALL StrDup + rts .90 lda #E.BADPATH sec diff --git a/SYS/KERNEL.S.STRING.txt b/SYS/KERNEL.S.STRING.txt index a6c3d4c6..76cf15fd 100644 --- a/SYS/KERNEL.S.STRING.txt +++ b/SYS/KERNEL.S.STRING.txt @@ -62,14 +62,9 @@ K.StrCpy clc bcc .2 -.1 lda (ZPPtr1) - beq .2 - - inc ZPPtr1 +.1 jsr MEM.GetCharPtr1 bne .1 - inc ZPPtr1+1 - bra .1 - + .2 ldy #0 .3 lda (ZPPtr2),y @@ -83,7 +78,59 @@ K.StrCpy clc .8 ply pla - rts +K.StrCpy.RTS rts +*/-------------------------------------- +* # StrDup +* Create a new copy of this C-String +* Y,A = Ptr to source C-String +* ## RETURN VALUE +* CC : success +* Y,A = PTR to String +* X = hMem (PSTR) +* CS : error +* A = SYS error code +*\-------------------------------------- +K.StrDup >STYA .1+1 + >STYA .4+1 + + ldy #0 + lda #0 + +.1 ldx $ffff,y + beq .2 + iny + bne .1 + inc + inc .1+2 + bne .1 + +.2 iny Add one for ending 0 + bne .3 + inc + +.3 jsr K.GetMem + bcs K.StrCpy.RTS + >STYA .5+1 + + phy + pha + + ldy #0 + +.4 lda $ffff,y +.5 sta $ffff,y + beq K.StrDup.8 + iny + bne .4 + + inc .4+2 + inc .5+2 + bne .4 + +K.StrDup.8 pla + ply +* clc + rts */-------------------------------------- * # StrUpr/StrLwr * Convert string to UPPERCASE/lowercase @@ -104,13 +151,13 @@ K.StrUpr ldx #0 K.StrLwr ldx #2 >STYA ZPPtr1 - pha save Y,A to restore them at exit phy + pha save Y,A to restore them at exit ldy #0 .1 lda (ZPPtr1),y - beq .8 + beq K.StrDup.8 cmp .9,x bcc .2 @@ -122,10 +169,6 @@ K.StrLwr ldx #2 bne .1 inc ZPPtr1+1 bra .1 - -.8 ply - pla - rts *-------------------------------------- .9 .AS "azAZ" */-------------------------------------- diff --git a/SYS/KERNEL.S.TERM.txt b/SYS/KERNEL.S.TERM.txt index 46587030..d172528c 100644 --- a/SYS/KERNEL.S.TERM.txt +++ b/SYS/KERNEL.S.TERM.txt @@ -78,7 +78,7 @@ DRV.TERM.OPEN ldx #0 DEV.ID in A sec rts -.9 lda #MLI.E.OPEN +.9 lda #MLI.E.OPEN sec rts