diff --git a/.Docs/KERNEL.md b/.Docs/KERNEL.md index a7178415..33832b95 100644 --- a/.Docs/KERNEL.md +++ b/.Docs/KERNEL.md @@ -492,6 +492,18 @@ And return, if found, the full path to it. + CS : + A = EC +# GetMemYA + +## In: ++ Y,A = Size Requested + +## Out: ++ CC : success + + YA = PTR to Mem (Uninitialised) +* X = hMem ++ CS : + + A = EC + # FreeMemA ## In: diff --git a/.Floppies/A2OSX.BOOT.po b/.Floppies/A2OSX.BOOT.po index f5880d67..c76d7d27 100644 Binary files a/.Floppies/A2OSX.BOOT.po and b/.Floppies/A2OSX.BOOT.po differ diff --git a/.Floppies/A2OSX.BUILD.po b/.Floppies/A2OSX.BUILD.po index 08418a16..bcf3af01 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 0827d4c2..f36e00df 100644 Binary files a/.Floppies/A2OSX.SRC.po and b/.Floppies/A2OSX.SRC.po differ diff --git a/BIN/X.CPMVRM.S.txt b/BIN/X.CPMVRM.S.txt index 18d65b0d..3d85fd36 100644 --- a/BIN/X.CPMVRM.S.txt +++ b/BIN/X.CPMVRM.S.txt @@ -98,10 +98,10 @@ CS.INIT >SYSCALL GetArgC bne .99 .FIN - jsr CS.INIT.Check.Wildcard +* jsr CS.INIT.Check.Wildcard >LDYA ZPPtr1 - jsr InitSrcDirYA + jsr InitSrcDirPatYA bcc .1 success, scan for any other args .9 rts @@ -132,18 +132,16 @@ CS.INIT >SYSCALL GetArgC bcs .99 .FIN -.8 >PUSHWI 256 - >PUSHBI 0 - >SYSCALL GetMem +.8 >LDYAI 256 + >SYSCALL GetMemYA bcs .9 txa ldy #hSrcFullPath sta (pData),y .DO X.COPY.TO.DEST=1 - >PUSHWI 256 - >PUSHBI 0 - >SYSCALL GetMem + >LDYAI 256 + >SYSCALL GetMemYA bcs .9 txa ldy #hDstFullPath @@ -199,14 +197,33 @@ CS.RUN >SYSCALL GetC .11 ldy #bPause lda (pData),y bpl .1 - clc +.8 clc rts .1 .DO X.COPY.TO.DEST=1 ldy #bCopy lda (pData),y - bpl .2 - jmp CS.RUN.Copy + bne .2 + + jsr CS.RUN.Copy + + ldy #bCopy Copy completed ? + lda (pData),y + bne .8 + + ldy #bCopy + lda (pData),y + beq .2 non copy error + + sec + jsr CS.RUN.CheckErr we have an error.... + bcs .9 + + .DO X.DELETE.SOURCE=1 + ldy #hToDelete + lda #0 + sta (pData),y Cancel delete if any + .FIN .FIN .2 .DO X.DELETE.SOURCE=1 @@ -214,20 +231,15 @@ CS.RUN >SYSCALL GetC lda (pData),y beq .3 - >SYSCALL GetMemPtrA - >SYSCALL RemoveYA - php - pha - ldy #hToDelete - lda (pData),y pha lda #0 sta (pData),y pla - >SYSCALL FreeMemA - pla - plp - jsr CS.RUN.CheckErr + + >SYSCALL GetMemPtrA + >SYSCALL RemoveYA + +.20 jsr CS.RUN.CheckErr bcs .9 jmp CS.RUN.NEXT .FIN @@ -291,6 +303,8 @@ CS.RUN.LEAVE jsr LeaveSubDir exit this sub dir.... jsr GetEntry bcs * + jsr CS.RUN.BuildFilePath + ldy #hSrcFullPath lda (pData),y >SYSCALL GetMemPtrA @@ -490,11 +504,6 @@ CS.RUN.FILE ldy #bQuiet ldy #hSrcFullPath lda (pData),y - >SYSCALL GetMemPtrA - - >SYSCALL NewPStrYA - bcs .9 - txa ldy #hToDelete sta (pData),y .FIN @@ -560,39 +569,19 @@ CS.RUN.Rename ldy #hDstFullPath *-------------------------------------- .DO X.COPY.TO.DEST=1 CS.RUN.CopyStart - ldy #S.STAT.P.AUXTYPE+1 - >PUSHB (ZPFileStat),y - dey - >PUSHB (ZPFileStat),y - ldy #S.STAT.P.TYPE - >PUSHB (ZPFileStat),y - >PUSHBI SYS.FOpen.R - ldy #hSrcFullPath - lda (pData),y - >SYSCALL GetMemPtrA - - >PUSHYA - >SYSCALL FOpen + lda #SYS.FOpen.R + + jsr CS.RUN.Open bcs .99 ldy #hSrcFile sta (pData),y - ldy #S.STAT.P.AUXTYPE+1 - >PUSHB (ZPFileStat),y - dey - >PUSHB (ZPFileStat),y - ldy #S.STAT.P.TYPE - >PUSHB (ZPFileStat),y - >PUSHBI SYS.FOpen.W+SYS.FOpen.X - ldy #hDstFullPath - lda (pData),y - >SYSCALL GetMemPtrA - - >PUSHYA - >SYSCALL FOpen + lda #SYS.FOpen.W+SYS.FOpen.X + + jsr CS.RUN.Open bcs .9 ldy #hDstFile @@ -601,6 +590,9 @@ CS.RUN.CopyStart ldy #bCopy lda #$ff sta (pData),y + inc + ldy #CopyRC Reset RC + sta (pData),y clc rts @@ -609,13 +601,37 @@ CS.RUN.CopyStart lda (pData),y >SYSCALL FCloseA pla + + ldy #CopyRC + sta (pData),y + sec .99 rts *-------------------------------------- +CS.RUN.Open phy Save Filename + pha Save open mode + + ldy #S.STAT.P.AUXTYPE+1 + >PUSHB (ZPFileStat),y + dey + >PUSHB (ZPFileStat),y + ldy #S.STAT.P.TYPE + >PUSHB (ZPFileStat),y + + pla + >PUSHA + + ply + lda (pData),y + >SYSCALL GetMemPtrA + + >PUSHYA + >SYSCALL FOpen + rts +*-------------------------------------- CS.RUN.Copy stz .90+1 - >PUSHWI X.COPY.BUF.SIZE - >PUSHBI 0 - >SYSCALL GetMem + >LDYAI X.COPY.BUF.SIZE + >SYSCALL GetMemYA bcs .9 >STYA ZPPtr1 @@ -665,45 +681,21 @@ CS.RUN.Copy stz .90+1 CS.RUN.CopyEnd ldy #hSrcFile lda (pData),y >SYSCALL FCloseA - bcc .1 - - jsr CS.RUN.CheckErr - -.1 ldy #hDstFile + + ldy #hDstFile lda (pData),y >SYSCALL FCloseA - bcc .2 - - jsr CS.RUN.CheckErr -.2 ldy #bCopy + ldy #bCopy lda #$0 sta (pData),y - clc - ldy #CopyRC - lda (pData),y - beq .3 - sec -.3 jsr CS.RUN.CheckErr - bcs .9 - - jmp CS.RUN.NEXT -.9 rts + rts .FIN *-------------------------------------- CS.RUN.CheckErr bcs .1 - ldy #Count - lda (pData),y - inc - sta (pData),y - bne .10 - iny - lda (pData),y - inc - sta (pData),y -.10 ldy #bQuiet + ldy #bQuiet lda (pData),y bmi .8 @@ -785,6 +777,17 @@ CS.RUN.BuildFilePath .FIN rts *-------------------------------------- +CS.RUN.IncCount ldy #Count + lda (pData),y + inc + sta (pData),y + bne .9 + iny + lda (pData),y + inc + sta (pData),y +.9 rts +*-------------------------------------- CS.DOEVENT sec rts *-------------------------------------- @@ -811,12 +814,6 @@ CS.QUIT jsr LeaveSubDir .FIN - ldy #hToDelete - jsr CS.QUIT.FREE - - ldy #hFilter - jsr CS.QUIT.FREE - ldy #hSrcFullPath jsr CS.QUIT.FREE diff --git a/BIN/X.FILEENUM.S.txt b/BIN/X.FILEENUM.S.txt index 0b4e1e9e..d367a905 100644 --- a/BIN/X.FILEENUM.S.txt +++ b/BIN/X.FILEENUM.S.txt @@ -76,9 +76,8 @@ InitSrcDirYA ldx #0 ldy #hFilter sta (pData),y -.5 >PUSHWI 256 - >PUSHBI 0 - >SYSCALL GetMem Get a 256 buffer to store BasePath +.5 >LDYAI 256 + >SYSCALL GetMemYA Get a 256 buffer to store BasePath bcs .9 >STYA ZPPtr2 @@ -183,9 +182,8 @@ InitDstDirYA >SYSCALL GetFullPathYA ldy #hDstFileName sta (pData),y -.5 >PUSHWI 256 - >PUSHBI 0 - >SYSCALL GetMem Get a 256 buffer to store DstBasePath +.5 >LDYAI 256 + >SYSCALL GetMemYA Get a 256 buffer to store DstBasePath bcs .9 >STYA ZPPtr2 diff --git a/INC/A2osX.I.txt b/INC/A2osX.I.txt index ffa82a20..74681095 100644 --- a/INC/A2osX.I.txt +++ b/INC/A2osX.I.txt @@ -252,7 +252,7 @@ SYS.GetMem .EQ $90 SYS.FreeMemA .EQ $92 SYS.GetMemPtrA .EQ $94 SYS.GetMemByIDA .EQ $96 -* .EQ $98 +SYS.GetMemYA .EQ $98 SYS.LoadStkObjYA .EQ $9A SYS.GetStkObjA .EQ $9C SYS.FreeStkObjA .EQ $9E diff --git a/SYS/KERNEL.S.JMP.txt b/SYS/KERNEL.S.JMP.txt index fa117d2c..ff456870 100644 --- a/SYS/KERNEL.S.JMP.txt +++ b/SYS/KERNEL.S.JMP.txt @@ -99,7 +99,7 @@ KERNEL.SYSCALL .DA K.FreeMemA .DA K.GetMemPtrA .DA K.GetMemByIDA - .DA 0 + .DA K.GetMemYA .DA K.LoadStkObjYA .DA K.GetStkObjA .DA K.FreeStkObjA diff --git a/SYS/KERNEL.S.MEM.txt b/SYS/KERNEL.S.MEM.txt index 31a85aa4..f1c40fb5 100644 --- a/SYS/KERNEL.S.MEM.txt +++ b/SYS/KERNEL.S.MEM.txt @@ -37,24 +37,57 @@ MemMgr.ReqFlags .EQ ZPMEMMGR+10 store requested Flags *\-------------------------------------- K.GetMem >PULLB MemMgr.ReqFlags store requested flags and #S.MEM.F.AUX - beq .11 + beq .1 sta SETREADAUX Aux Mem requested,switch to AUX sta SETWRITEAUX -.11 >PULLAX get requested size +.1 >PULLAX get requested size bit #$0F 16 bytes aligned ? - beq .10 yes, request it + beq .2 yes, request it and #$F0 align on 16 bytes clc adc #$10 - bcc .10 + bcc .2 inx -.10 >STAX MemMgr.ReqSize - - >LDYAI MemMgr.Table +.2 >STAX MemMgr.ReqSize + jsr K.GetMem.I + + bit MemMgr.ReqFlags S.MEM.F.AUX ? + bpl .9 + + sta CLRREADAUX + sta CLRWRITEAUX + +.9 rts +*/-------------------------------------- +* # GetMemYA +* ## In: +* Y,A = Size Requested +* ## Out: +* CC : success +* YA = PTR to Mem (Uninitialised) +* X = hMem +* CS : +* A = EC +*\-------------------------------------- +K.GetMemYA stz MemMgr.ReqFlags + sta MemMgr.ReqSize+1 + tya + bit #$0F 16 bytes aligned ? + beq .1 yes, request it + + and #$F0 align on 16 bytes + clc + adc #$10 + bcc .1 + inc MemMgr.ReqSize+1 + +.1 sta MemMgr.ReqSize + +K.GetMem.I >LDYAI MemMgr.Table >STYA ZPMemMgrSPtr ldx #0 Current slot=0 @@ -137,13 +170,7 @@ K.GetMem >PULLB MemMgr.ReqFlags store requested flags ply Y = LO PTR clc X = Current hMem -.9 bit MemMgr.ReqFlags - bpl .99 - - sta CLRREADAUX - sta CLRWRITEAUX - -.99 rts +.9 rts *-------------------------------------- * MemMgr.AddSlot * In: