From e7825666a6047e5421727a5b780f8739e848139d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20GIBERT?= Date: Thu, 24 Aug 2017 14:46:48 +0200 Subject: [PATCH] Kernel 0.9.1 : Code reorganization & move to CSTR --- .Floppies/A2OSX.BUILD.po | Bin 819200 -> 819200 bytes .Floppies/A2OSX.SRC.po | Bin 819200 -> 819200 bytes BIN/ARP.S.txt | 2 +- BIN/ASM.S.txt | 2 +- BIN/CAT.S.txt | 4 +- BIN/CHTYP.S.txt | 2 +- BIN/DEVDUMP.S.txt | 2 +- BIN/DNSINFO.S.txt | 4 +- BIN/EDIT.S.txt | 2 +- BIN/FORMAT.S.txt | 2 +- BIN/LS.S.txt | 2 +- BIN/MD.S.txt | 2 +- BIN/NSCUTIL.S.txt | 2 +- BIN/PING.S.txt | 6 +- BIN/RPCDUMP.S.txt | 6 +- BIN/X.CPMVRM.S.txt | 2 +- INC/A2osX.I.txt | 7 +- SBIN/GETTY.S.txt | 4 +- SBIN/INSDRV.S.txt | 4 +- SBIN/SHELL.S.CMD.txt | 2 +- SBIN/SHELL.S.txt | 2 +- SYS/KERNEL.S.ARG.txt | 4 +- SYS/KERNEL.S.BIN.txt | 164 +++++++++++++-- SYS/KERNEL.S.CHR.txt | 10 - SYS/KERNEL.S.CIO.txt | 10 - SYS/KERNEL.S.CNV.txt | 10 - SYS/KERNEL.S.DIR.txt | 4 +- SYS/KERNEL.S.DRV.txt | 58 ------ SYS/KERNEL.S.ENV.txt | 116 +++++++---- SYS/KERNEL.S.FILE.txt | 10 - SYS/KERNEL.S.FIO.txt | 22 +- SYS/KERNEL.S.INIT.txt | 10 +- SYS/KERNEL.S.JMP.txt | 38 ++-- SYS/KERNEL.S.LIB.txt | 76 ------- SYS/KERNEL.S.MEM.txt | 2 +- SYS/KERNEL.S.PS.txt | 6 +- SYS/KERNEL.S.RUN.txt | 2 +- SYS/KERNEL.S.STAT.txt | 79 ++++++++ SYS/KERNEL.S.STDIO.txt | 428 ++++++++++++++++++++++++++++++++++++--- SYS/KERNEL.S.STR.txt | 10 - SYS/KERNEL.S.STRING.txt | 12 +- SYS/KERNEL.S.TIME.txt | 6 +- SYS/KERNEL.S.txt | 11 +- 43 files changed, 794 insertions(+), 353 deletions(-) delete mode 100644 SYS/KERNEL.S.CHR.txt delete mode 100644 SYS/KERNEL.S.CIO.txt delete mode 100644 SYS/KERNEL.S.CNV.txt delete mode 100644 SYS/KERNEL.S.FILE.txt create mode 100644 SYS/KERNEL.S.STAT.txt delete mode 100644 SYS/KERNEL.S.STR.txt diff --git a/.Floppies/A2OSX.BUILD.po b/.Floppies/A2OSX.BUILD.po index f806e85dde723a1f77e8faf0c6d4b03d265eb8da..0c977aaaf73cabc9efd017909c057d739d3af6a4 100644 GIT binary patch delta 15017 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 O{dcXMa%645tp5k3WnO6j diff --git a/.Floppies/A2OSX.SRC.po b/.Floppies/A2OSX.SRC.po index f543758c0c62960cf607a9d30c74178c8c767f1e..1c9d8898f4eec72a4d6bcb2b5e1616ca61e9119c 100644 GIT binary patch delta 42672 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 JlDa9*{U3XzP7(kB delta 42429 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 GetArgC .1 >PUSHW L.DST.IP >PUSHW L.SSCANF.IP lda #1 - >SYSCALL GetArgA + >SYSCALL GetArg.A >PUSHYA >SYSCALL SSCANF diff --git a/BIN/ASM.S.txt b/BIN/ASM.S.txt index a4e83110..95acc03f 100644 --- a/BIN/ASM.S.txt +++ b/BIN/ASM.S.txt @@ -154,7 +154,7 @@ CS.INIT >SYSCALL GetArgC beq .99 No arg, new file.... lda #1 - >SYSCALL GetArgA + >SYSCALL GetArg.A >SYSCALL GetFullPathYA txa diff --git a/BIN/CAT.S.txt b/BIN/CAT.S.txt index 83882ee8..20b097d8 100644 --- a/BIN/CAT.S.txt +++ b/BIN/CAT.S.txt @@ -47,7 +47,7 @@ CS.INIT >SYSCALL GetArgC beq .5 lda ArgCount - >SYSCALL GetArgA + >SYSCALL GetArg.A >STYA ZPPtr1 ldy #1 @@ -121,7 +121,7 @@ CS.RUN >SYSCALL GetC lda (pData),y inc sta (pData),y - >SYSCALL GetArgA + >SYSCALL GetArg.A bcs .99 No more arg...the end! >STYA ZPPtr1 diff --git a/BIN/CHTYP.S.txt b/BIN/CHTYP.S.txt index 7ab5bddb..625a5613 100644 --- a/BIN/CHTYP.S.txt +++ b/BIN/CHTYP.S.txt @@ -58,7 +58,7 @@ CS.INIT >SYSCALL GetArgC inc ArgIndex lda ArgIndex - >SYSCALL GetArgA + >SYSCALL GetArg.A >STYA ZPPtr1 lda (ZPPtr1) diff --git a/BIN/DEVDUMP.S.txt b/BIN/DEVDUMP.S.txt index a5456d14..f1ec6621 100644 --- a/BIN/DEVDUMP.S.txt +++ b/BIN/DEVDUMP.S.txt @@ -41,7 +41,7 @@ CS.INIT >SYSCALL GetArgC beq .9 lda #1 - >SYSCALL GetArgA + >SYSCALL GetArg.A >SYSCALL GetDevByNameYA bcs .9 diff --git a/BIN/DNSINFO.S.txt b/BIN/DNSINFO.S.txt index fe2fc0b8..bae27280 100644 --- a/BIN/DNSINFO.S.txt +++ b/BIN/DNSINFO.S.txt @@ -60,14 +60,14 @@ CS.RUN.ADD cmp #3 >PUSHW L.IP >PUSHW L.SSCANF.IP lda #3 - >SYSCALL GetArgA + >SYSCALL GetArg.A >PUSHYA >SYSCALL SSCANF bcs .9 >PUSHW L.IP lda #2 - >SYSCALL GetArgA + >SYSCALL GetArg.A >PUSHYA >LIBCALL hLIBTCPIP,LIBTCPIP.DNS.ADD bcs .99 diff --git a/BIN/EDIT.S.txt b/BIN/EDIT.S.txt index 7e64bdbf..33f7a99f 100644 --- a/BIN/EDIT.S.txt +++ b/BIN/EDIT.S.txt @@ -108,7 +108,7 @@ CS.INIT lda #$ff beq .1 No arg, new file.... lda #1 - >SYSCALL GetArgA + >SYSCALL GetArg.A >SYSCALL GetFullPathYA txa diff --git a/BIN/FORMAT.S.txt b/BIN/FORMAT.S.txt index 9f4d822f..89876ae0 100644 --- a/BIN/FORMAT.S.txt +++ b/BIN/FORMAT.S.txt @@ -53,7 +53,7 @@ CS.INIT >SYSCALL GetArgC inc ArgIndex lda ArgIndex - >SYSCALL GetArgA + >SYSCALL GetArg.A >STYA ZPPtr1 lda (ZPPtr1) diff --git a/BIN/LS.S.txt b/BIN/LS.S.txt index 6f547048..a1d6e44d 100644 --- a/BIN/LS.S.txt +++ b/BIN/LS.S.txt @@ -60,7 +60,7 @@ CS.INIT >SYSCALL GetArgC beq .5 lda ArgCount - >SYSCALL GetArgA + >SYSCALL GetArg.A >STYA ZPPtr1 lda (ZPPtr1) diff --git a/BIN/MD.S.txt b/BIN/MD.S.txt index 8d9b35d4..2ad1d46e 100644 --- a/BIN/MD.S.txt +++ b/BIN/MD.S.txt @@ -41,7 +41,7 @@ CS.RUN >SYSCALL GetArgC beq .99 lda #1 - >SYSCALL GetArgA + >SYSCALL GetArg.A >SYSCALL GetFullPathYA bcs .9 diff --git a/BIN/NSCUTIL.S.txt b/BIN/NSCUTIL.S.txt index 4b4eac6b..7462ebc1 100644 --- a/BIN/NSCUTIL.S.txt +++ b/BIN/NSCUTIL.S.txt @@ -76,7 +76,7 @@ CS.RUN.READ jsr NSC.Init rts CS.RUN.SET lda #1 - >SYSCALL GetArgA + >SYSCALL GetArg.A >STYA ZPPtr1 lda (ZPPtr1) diff --git a/BIN/PING.S.txt b/BIN/PING.S.txt index 6a8b458f..08a37294 100644 --- a/BIN/PING.S.txt +++ b/BIN/PING.S.txt @@ -80,7 +80,7 @@ CS.RUN.IPOK >SYSCALL GetArgC .2 >PUSHW pData DST.IP lda #1 - >SYSCALL GetArgA + >SYSCALL GetArg.A >PUSHYA >LIBCALL hLIBTCPIP,LIBTCPIP.HST.GETBYNAME bcc CS.RUN.HOSTOK @@ -89,7 +89,7 @@ CS.RUN.IPOK >SYSCALL GetArgC bcc .2 lda #1 - >SYSCALL GetArgA + >SYSCALL GetArg.A >PUSHYA >LDYA L.MSG.UNKNOWN bra .99 @@ -101,7 +101,7 @@ CS.RUN.IPOK >SYSCALL GetArgC rts CS.RUN.HOSTOK lda #1 - >SYSCALL GetArgA + >SYSCALL GetArg.A >PUSHYA ldy #DST.IP+3 diff --git a/BIN/RPCDUMP.S.txt b/BIN/RPCDUMP.S.txt index e5a9c0b8..05bec13e 100644 --- a/BIN/RPCDUMP.S.txt +++ b/BIN/RPCDUMP.S.txt @@ -83,7 +83,7 @@ CS.RUN jsr Init.Timeout .1 >PUSHW L.Socket.Dst.Addr lda #1 - >SYSCALL GetArgA + >SYSCALL GetArg.A >PUSHYA >LIBCALL hLIBTCPIP,LIBTCPIP.HST.GETBYNAME bcc .2 @@ -93,7 +93,7 @@ CS.RUN jsr Init.Timeout bcc .1 lda #1 - >SYSCALL GetArgA + >SYSCALL GetArg.A >PUSHYA >LDYA L.MSG.UNKNOWN >SYSCALL PrintFYA @@ -155,7 +155,7 @@ CS.RUN jsr Init.Timeout rts .99 lda #1 - >SYSCALL GetArgA + >SYSCALL GetArg.A >PUSHYA >LDYA L.MSG.TIMEOUT >SYSCALL PrintFYA diff --git a/BIN/X.CPMVRM.S.txt b/BIN/X.CPMVRM.S.txt index af157c05..eb0564d5 100644 --- a/BIN/X.CPMVRM.S.txt +++ b/BIN/X.CPMVRM.S.txt @@ -54,7 +54,7 @@ CS.INIT >SYSCALL GetArgC inc ArgIndex lda ArgIndex - >SYSCALL GetArgA + >SYSCALL GetArg.A >STYA ZPPtr1 lda (ZPPtr1) diff --git a/INC/A2osX.I.txt b/INC/A2osX.I.txt index cff90e21..36633317 100644 --- a/INC/A2osX.I.txt +++ b/INC/A2osX.I.txt @@ -63,8 +63,9 @@ K.MLI.PATH .EQ $03B0 64+1 -> $03D0 *-------------------------------------- *UsrBuf256 .EQ $0C00 Main *-------------------------------------- -KrnBuf256 .EQ $0D00 Main +K.Buf256 .EQ $0D00 Main *-------------------------------------- +K.STACK .EQ $0F00 Up to $0FFF *-------------------------------------- *** Z80 Reserved $0F00-10FF*** *-------------------------------------- @@ -172,7 +173,7 @@ SYS.ChGrp .EQ $0E SYS.LoadDrvYA .EQ $10 SYS.LoadLibYA .EQ $12 SYS.UnloadLibA .EQ $14 -SYS.LoadExeYA .EQ $16 +SYS.LoadBin.YA .EQ $16 SYS.TimeYA .EQ $18 SYS.CTime2Time .EQ $1A SYS.PTime2Time .EQ $1C @@ -231,7 +232,7 @@ SYS.Sleep .EQ $6C * .EQ $6E *-------------------------------------- SYS.GetArgC .EQ $70 -SYS.GetArgA .EQ $72 +SYS.GetArg.A .EQ $72 SYS.ExpandPStrYA .EQ $74 * .EQ $76 SYS.PutEnvYA .EQ $78 diff --git a/SBIN/GETTY.S.txt b/SBIN/GETTY.S.txt index fb0cecb8..ded066a2 100644 --- a/SBIN/GETTY.S.txt +++ b/SBIN/GETTY.S.txt @@ -51,7 +51,7 @@ CS.INIT >SYSCALL GetArgC rts .1 lda #1 - >SYSCALL GetArgA + >SYSCALL GetArg.A >SYSCALL MkNodYA bcs .9 @@ -64,7 +64,7 @@ CS.INIT >SYSCALL GetArgC sta (pPs),y lda #2 - >SYSCALL GetArgA + >SYSCALL GetArg.A bcs .9 >SYSCALL ExpandPStrYA diff --git a/SBIN/INSDRV.S.txt b/SBIN/INSDRV.S.txt index 6efce01b..b704f80a 100644 --- a/SBIN/INSDRV.S.txt +++ b/SBIN/INSDRV.S.txt @@ -48,14 +48,14 @@ CS.INIT >SYSCALL GetArgC rts .1 lda #1 get PTR to ARG[1] (Driver name) - >SYSCALL GetArgA + >SYSCALL GetArg.A >PUSHYA >LDYA L.MSG.LOAD >SYSCALL PrintFYA lda #1 get PTR to ARG[1] (Driver name) - >SYSCALL GetArgA + >SYSCALL GetArg.A >SYSCALL LoadDrvYA YA = PTR to ARG[1...n] bcs .99 diff --git a/SBIN/SHELL.S.CMD.txt b/SBIN/SHELL.S.CMD.txt index 9100a433..dadb85ff 100644 --- a/SBIN/SHELL.S.CMD.txt +++ b/SBIN/SHELL.S.CMD.txt @@ -210,7 +210,7 @@ Cmd.Exec.EXT ldy #1 *-------------------------------------- Cmd.Exec.EXT.TXT lda #0 Get arg[0] = /PATH/SHELL - >SYSCALL GetArgA + >SYSCALL GetArg.A >PUSHYA >PUSHWI UsrBuf256 >SYSCALL PStrCpy diff --git a/SBIN/SHELL.S.txt b/SBIN/SHELL.S.txt index e4117cc6..c95b150a 100644 --- a/SBIN/SHELL.S.txt +++ b/SBIN/SHELL.S.txt @@ -113,7 +113,7 @@ CS.INIT jsr SetPWD >PUSHBI SYS.FOpen.R lda #1 - >SYSCALL GetArgA + >SYSCALL GetArg.A >PUSHYA >SYSCALL LoadFile bcs .9 diff --git a/SYS/KERNEL.S.ARG.txt b/SYS/KERNEL.S.ARG.txt index 9a9be783..dfb74f9f 100644 --- a/SYS/KERNEL.S.ARG.txt +++ b/SYS/KERNEL.S.ARG.txt @@ -25,7 +25,7 @@ K.GetArgC jsr ARG.InitArgPtr1 .8 txa rts */-------------------------------------- -* # GetArgA +* # GetArg.A * ## In: * A = argument index. * ## Out: @@ -33,7 +33,7 @@ K.GetArgC jsr ARG.InitArgPtr1 * Y,A = CStr To Arg[A] * CS : Out Of Bound *\-------------------------------------- -K.GetArgA sta .2+1 +K.GetArg.A sta .2+1 jsr ARG.InitArgPtr1 lda .2+1 diff --git a/SYS/KERNEL.S.BIN.txt b/SYS/KERNEL.S.BIN.txt index 4cb9bc52..e5b36395 100644 --- a/SYS/KERNEL.S.BIN.txt +++ b/SYS/KERNEL.S.BIN.txt @@ -4,17 +4,151 @@ LOMEM $A00 INC 1 AUTO 6 *-------------------------------------- -* BIN.LoadExeYA +* K.LoadDrv.YA +* in : +* Y,A = PTR To Full Cmd Line PStrArray +* out : +* none +*-------------------------------------- +K.LoadDrv.YA >STYA K.LoadDrv.CmdArray + + >LDYAI ENV.DRV push ENVNAME=DRV + >SYSCALL GetEnvYA get value for ENV=DRV + bcs .9 + + >PUSHYA Push $DRV value + + >PUSHW K.LoadDrv.CmdArray (ARG[0] = DRVNAME) + + jsr K.FileSearch.I find Driver in $DRV + bcs .9 + + >LDYAI K.Buf256 + jsr K.LoadBin.YA Y,A =filename full path + bcs .9 + + >STYA pDrv + stx .97+1 + + >LDYA K.LoadDrv.CmdArray + >STYA ZPPtr1 + +.1 lda (ZPPtr1) Advance to ARG[1] + beq .2 + inc ZPPtr1 + bne .1 + inc ZPPtr1+1 + bra .1 + +.2 >LDYA ZPPtr1 + + jsr pDrvJmp call Dev.Detect + bcs .96 + + jsr BIN.InstallDRV + bcs .96 + + jsr .96 Cleanup... + + lda #0 Make sure RC = 0 if success + clc +.9 rts + +.96 pha +.97 lda #$ff + jsr K.FreeMemA + pla + rts +*-------------------------------------- +K.LoadDrv.CmdArray .BS 2 +*-------------------------------------- +* K.LoadLib.YA +* in : +* Y,A = PTR To Lib Name +* out : +* A = hMem To loaded LIB +*-------------------------------------- +K.LoadLib.YA >STYA K.LoadLib.Name SAVE LIBname for K.FileSearch + >LDYAI ENV.LIB push ENVNAME=LIB + >SYSCALL GetEnvYA get value for ENV=LIB + bcs .9 + + >PUSHYA Push $LIB value + + >PUSHW K.LoadLib.Name + + jsr K.FileSearch.I find libname in $LIB + bcs .9 + + >LDYAI K.Buf256 + jsr K.LoadBin.YA Y,A=filename full path + bcs .9 + + stx .8+1 + >STYA LIB.Jump+1 + + txa Pass hLib to LibLoad + ldx #LIBMGR.LOAD + jsr LIB.Jump Call LIB.LOAD function + + bcs .99 + +.8 lda #$ff hLib + clc +.9 rts + +.99 pha + lda .8+1 + jsr K.FreeMemA + pla + + sec + rts +*-------------------------------------- +K.LoadLib.Name .BS 2 +*-------------------------------------- +* K.UnloadLib.A +* in : +* A = hMem To Lib +* out : +*-------------------------------------- +K.UnloadLib.A pha + jsr K.GetMemByIDA + >STYA ZPPtr1 + ldy #S.MEM.REFCNT + lda (ZPPtr1),y Get count of those referencing this lib + dec only one left ? + beq .1 + sta (ZPPtr1),y + pla + clc + rts + +.1 ldy #S.MEM.PTR + lda (ZPPtr1),y + sta LIB.Jump+1 + + iny + lda (ZPPtr1),y + sta LIB.Jump+2 + + ldx #LIBMGR.UNLOAD + jsr LIB.Jump Call LIB.UNLOAD function + pla + jmp K.FreeMemA +LIB.Jump jmp $ffff Self Modiied +*-------------------------------------- +* K.LoadBin.YA * in : * A = hMem of FilePath (PSTR) * out : * Y,A = MEMPTR * X = hMem of Code Segment *-------------------------------------- -K.LoadEXEYA >STYA K.LoadEXEYA.Filename - >SYSCALL StrUprYA Y,A unmodified +K.LoadBin.YA >STYA K.LoadBin.YA.Filename + jsr MEM.GetMemByNameYA - bcs K.LoadEXEYA.1 not already loaded + bcs K.LoadBin.YA.1 not already loaded >STYA ZPPtr1 Save base address ldy #S.MEM.REFCNT @@ -25,8 +159,8 @@ K.LoadEXEYA >STYA K.LoadEXEYA.Filename txa jmp K.GetMemPtrA X=hMem from K.GetMemByNameA *-------------------------------------- -K.LoadEXEYA.1 >PUSHWI K.S.STAT - >PUSHW K.LoadEXEYA.Filename +K.LoadBin.YA.1 >PUSHWI K.S.STAT + >PUSHW K.LoadBin.YA.Filename jsr K.STAT Look for AUXTYPE bcs .9 @@ -36,12 +170,12 @@ K.LoadEXEYA.1 >PUSHWI K.S.STAT >PUSHYA Push AUXTYPE >PUSHBI 6 S.FILEINFO.TYPE.BIN >PUSHBI SYS.FOpen.R - >PUSHW K.LoadEXEYA.Filename + >PUSHW K.LoadBin.YA.Filename jsr K.LoadFile .9 bcs .99 Error Loading file - stx K.LoadEXEYA.hMem save hMem + stx K.LoadBin.YA.hMem save hMem pha YA=CODE+DATA size tya @@ -78,11 +212,11 @@ K.LoadEXEYA.1 >PUSHWI K.S.STAT jsr BIN.RelocateEXE - >LDYA K.LoadEXEYA.Filename get back bin path + >LDYA K.LoadBin.YA.Filename get back bin path >SYSCALL NewPStrYA make a copy of this string bcs .98 - lda K.LoadEXEYA.hMem Keep X=hMem + lda K.LoadBin.YA.hMem Keep X=hMem jsr K.GetMemByIDA X unmodified >STYA ZPPtr1 @@ -94,28 +228,28 @@ K.LoadEXEYA.1 >PUSHWI K.S.STAT ldy #S.MEM.BIN sta (ZPPtr1),y - lda K.LoadEXEYA.hMem + lda K.LoadBin.YA.hMem tax return hMEM to Caller... jsr K.GetMemPtrA clc ...and Y,A=PTR to CS rts .98 pha - lda K.LoadEXEYA.hMem + lda K.LoadBin.YA.hMem jsr K.FreeMemA Discard Loaded Code pla sec .99 rts *-------------------------------------- -K.LoadEXEYA.Filename .BS 2 -K.LoadEXEYA.hMem .BS 1 +K.LoadBin.YA.Filename .BS 2 +K.LoadBin.YA.hMem .BS 1 *-------------------------------------- * BIN.InstallDRV * In: * pDrv = .DRV File Loaded Address * Note: -* K.LoadEXEYA called from K.LoadDrvYA +* K.LoadBin.YA called from K.LoadDrvYA * Already setup correctly pDrv, * BIN.Relocate.Start,End *-------------------------------------- diff --git a/SYS/KERNEL.S.CHR.txt b/SYS/KERNEL.S.CHR.txt deleted file mode 100644 index 1cb03960..00000000 --- a/SYS/KERNEL.S.CHR.txt +++ /dev/null @@ -1,10 +0,0 @@ -PR#3 -PREFIX /A2OSX.BUILD -LOMEM $A00 -INC 1 -AUTO 6 -*-------------------------------------- -MAN -SAVE /A2OSX.SRC/SYS/KERNEL.S.CHR -LOAD /A2OSX.SRC/SYS/KERNEL.S -ASM diff --git a/SYS/KERNEL.S.CIO.txt b/SYS/KERNEL.S.CIO.txt deleted file mode 100644 index f87438f2..00000000 --- a/SYS/KERNEL.S.CIO.txt +++ /dev/null @@ -1,10 +0,0 @@ -PR#3 -PREFIX /A2OSX.BUILD -LOMEM $A00 -INC 1 -AUTO 6 -*-------------------------------------- -MAN -SAVE /A2OSX.SRC/SYS/KERNEL.S.CIO -LOAD /A2OSX.SRC/SYS/KERNEL.S -ASM diff --git a/SYS/KERNEL.S.CNV.txt b/SYS/KERNEL.S.CNV.txt deleted file mode 100644 index 20b160bf..00000000 --- a/SYS/KERNEL.S.CNV.txt +++ /dev/null @@ -1,10 +0,0 @@ -PR#3 -PREFIX /A2OSX.BUILD -LOMEM $A00 -INC 1 -AUTO 6 -*-------------------------------------- -MAN -SAVE /A2OSX.SRC/SYS/KERNEL.S.CNV -LOAD /A2OSX.SRC/SYS/KERNEL.S -ASM diff --git a/SYS/KERNEL.S.DIR.txt b/SYS/KERNEL.S.DIR.txt index 3ff3597e..7940c67e 100644 --- a/SYS/KERNEL.S.DIR.txt +++ b/SYS/KERNEL.S.DIR.txt @@ -38,7 +38,7 @@ K.OpenDirYA jsr PFT.CheckPathYA cmp #$0F Directory ? bne .98 - jsr FILE.SetIOBUF + jsr STDIO.SetIOBUF bcs .98 @@ -102,7 +102,7 @@ K.ReadDirA.ROOT ldy #S.NODE.DIR.FC did we already returned something ? stz K.MLI.PARAMS+1 All Volumes - >LDYAI KrnBuf256 + >LDYAI K.Buf256 >STYA K.MLI.PARAMS+2 >STYA ZPPtr2 >MLICALL MLIONLINE diff --git a/SYS/KERNEL.S.DRV.txt b/SYS/KERNEL.S.DRV.txt index 0d8f9247..77309e28 100644 --- a/SYS/KERNEL.S.DRV.txt +++ b/SYS/KERNEL.S.DRV.txt @@ -4,64 +4,6 @@ LOMEM $A00 INC 1 AUTO 6 *-------------------------------------- -* K.LoadDrvYA -* in : -* Y,A = PTR To Full Cmd Line PStrArray -* out : -* none -*-------------------------------------- -K.LoadDrvYA >STYA K.LoadDrv.CmdArray - - >LDYAI ENV.DRV push ENVNAME=DRV - >SYSCALL GetEnvYA get value for ENV=DRV - bcs .9 - - >PUSHYA Push $DRV value - - >PUSHW K.LoadDrv.CmdArray (ARG[0] = DRVNAME) - - jsr K.FileSearch.I find Driver in $DRV - bcs .9 - - >LDYAI KrnBuf256 - jsr K.LoadExeYA Y,A =filename full path - bcs .9 - - >STYA pDrv - stx .97+1 - - >LDYA K.LoadDrv.CmdArray Advance to ARG[1] - >STYA ZPPtr1 - - lda ZPPtr1 - sec - adc (ZPPtr1) - sta ZPPtr1 - bcc .1 - inc ZPPtr1+1 - -.1 >LDYA ZPPtr1 - - jsr pDrvJmp call Dev.Detect - bcs .96 - - jsr BIN.InstallDRV - bcs .96 - - jsr .96 Cleanup... - - lda #0 Make sure RC = 0 if success - clc -.9 rts - -.96 pha -.97 lda #$ff - jsr K.FreeMemA - pla - rts -*-------------------------------------- -K.LoadDrv.CmdArray .BS 2 -*-------------------------------------- MAN SAVE /A2OSX.SRC/SYS/KERNEL.S.DRV LOAD /A2OSX.SRC/SYS/KERNEL.S diff --git a/SYS/KERNEL.S.ENV.txt b/SYS/KERNEL.S.ENV.txt index ef860906..1985f3b5 100644 --- a/SYS/KERNEL.S.ENV.txt +++ b/SYS/KERNEL.S.ENV.txt @@ -4,18 +4,54 @@ LOMEM $A00 INC 1 AUTO 6 */-------------------------------------- -* # ExpandPStrYA +* # NewPStrYA +* Create a new copy of PSTR +* ## In: +* Y,A = PTR to buffer +* ## Out: +* CC : success +* Y,A = PTR to String +* X = hMem (PSTR) +* CS : error +* A = SYS error code +*\-------------------------------------- +K.NewPStr.YA >STYA ZPPtr2 + lda (ZPPtr2) + inc + tay + lda #0 Y,A = len of new string + jsr K.GetMemYA + bcs .9 + + >STYA ZPPtr1 + + lda (ZPPtr2) + sta (ZPPtr1) + tay + beq .2 + +.1 lda (ZPPtr2),y + sta (ZPPtr1),y + dey + bne .1 + +.2 >LDYA ZPPtr1 + + clc +.9 rts +*/-------------------------------------- +* # ExpandPStr.YA * ## In: * Y,A = PTR to String to Expand (PSTR) * ## Out: * X = hMem to Expanded String (PSTR) * Y,A = PTR to Expanded String *\-------------------------------------- -K.ExpandPStrYA stz K.ExpandPStr.hPStr Reset Intermediate string... +K.ExpandPStr.YA stz K.ExpandPStr.hPStr Reset Intermediate string... .1 >STYA ZPPtr2 - stz KrnBuf256 init Expanded String len=0 + stz K.Buf256 init Expanded String len=0 stz K.ExpandPStr.bFound No var found yet stz K.ExpandPStr.bNoExp Reset no expand flag @@ -43,11 +79,11 @@ K.ExpandPStrYA stz K.ExpandPStr.hPStr Reset Intermediate string... .21 bit K.ExpandPStr.bNoExp bpl .23 -.22 ldx KrnBuf256 +.22 ldx K.Buf256 inx beq .8 - sta KrnBuf256,x - stx KrnBuf256 + sta K.Buf256,x + stx K.Buf256 bra .11 .23 ldx K.ExpandPStr.bInVar already in a var? @@ -110,8 +146,8 @@ K.ExpandPStrYA stz K.ExpandPStr.hPStr Reset Intermediate string... jsr K.FreeMemA yes, discard.... -.81 >LDYAI KrnBuf256 - jsr K.NewPStrYA +.81 >LDYAI K.Buf256 + jsr K.NewPStr.YA bcs .9 stx K.ExpandPStr.hPStr save this as temp string, in case of recurse ldx K.ExpandPStr.bFound Did we expand something ? @@ -147,7 +183,7 @@ K.ExpandPStrGetValue bcc .9 >LDYAI K.ExpandPStr.Name - jsr K.GetEnvYA + jsr K.GetEnv.YA bcs .9 >STYA ZPPtr3 @@ -162,52 +198,52 @@ K.ExpandPStr.bFound .BS 1 K.ExpandPStr.hPStr .BS 1 K.ExpandPStr.Name .BS 16 */-------------------------------------- -* # PutEnvYA +* # PutEnv.YA * ## In: * Y,A = PTR to String NAME=VALUE (PSTR) * ## Out: *\-------------------------------------- -K.PutEnvYA >STYA ZPPtr1 NAME=VALUE +K.PutEnv.YA >STYA ZPPtr1 NAME=VALUE lda (ZPPtr1) beq .9 - sta KrnBuf256 + sta K.Buf256 tay -.1 lda (ZPPtr1),y copy PSTR to KrnBuf256 - sta KrnBuf256,y +.1 lda (ZPPtr1),y copy PSTR to K.Buf256 + sta K.Buf256,y dey bne .1 ldy #0 .2 iny - cpy KrnBuf256 last char ? + cpy K.Buf256 last char ? beq .9 no "=" found - lda KrnBuf256,y + lda K.Buf256,y cmp #'=' bne .2 cpy #1 String like "=value" ? beq .9 - cpy KrnBuf256 last char ? + cpy K.Buf256 last char ? beq .9 we have "VAR=" - lda KrnBuf256 get actual string len + lda K.Buf256 get actual string len - sty KrnBuf256 set length of VAR string - dec KrnBuf256 ...without "=" + sty K.Buf256 set length of VAR string + dec K.Buf256 ...without "=" clc Substract VAR len+1 from whole len to get - sbc KrnBuf256 VALUE len - sta KrnBuf256,y save it at "=" POS + sbc K.Buf256 VALUE len + sta K.Buf256,y save it at "=" POS - stz ZPPtr1 #KrnBuf256 + stz ZPPtr1 #K.Buf256 sty ZPPtr2 - lda /KrnBuf256 + lda /K.Buf256 sta ZPPtr1+1 sta ZPPtr2+1 @@ -295,14 +331,14 @@ K.SetEnvPtr1Ptr2 sec rts */-------------------------------------- -* # GetEnvYA +* # GetEnv.YA * ## In: * Y,A = PTR to NAME (PSTR) * ## Out: * CC : Y,A = PTR to VALUE (PSTR) * CS : not found *\-------------------------------------- -K.GetEnvYA >STYA ZPPtr1 +K.GetEnv.YA >STYA ZPPtr1 jsr ENV.FindVarPtr1 bcs .9 @@ -314,12 +350,12 @@ K.GetEnvYA >STYA ZPPtr1 .9 >LDYAI EmptyPSTR rts */-------------------------------------- -* # UnsetEnvYA +* # UnsetEnv.YA * ## In: * Y,A = PTR To Name (PSTR) * ## Out: *\-------------------------------------- -K.UnsetEnvYA >STYA ZPPtr1 Store VAR Name +K.UnsetEnv.YA >STYA ZPPtr1 Store VAR Name S.UnsetEnvPtr1 jsr ENV.FindVarPtr1 bcs .8 not found, quit @@ -335,7 +371,7 @@ S.UnsetEnvPtr1 jsr ENV.FindVarPtr1 * K.ExpandPStr.Name * Out: * CC: Found -* Append VALUE to KrnBuf256 +* Append VALUE to K.Buf256 * CS: Not Found *-------------------------------------- ENV.ExpandSysVar @@ -350,7 +386,7 @@ ENV.ExpandSysVar cmp #'9'+1 bcs .1 and #$0F - jsr K.GetArgA + jsr K.GetArg.A bcs .99 >STYA ZPPtr3 @@ -383,7 +419,7 @@ ENV.SysVarsJmp .DA ENV.SysVarsArgs .DA ENV.SysVarsCPID *-------------------------------------- ENV.SysVarsArgs lda #1 - jsr K.GetArgA + jsr K.GetArg.A bcs ENV.SysVarsExit2 >STYA ZPPtr3 @@ -396,12 +432,12 @@ ENV.SysVarsArgs lda #1 lda (ZPPtr3) beq ENV.SysVarsExit2 - ldx KrnBuf256 + ldx K.Buf256 inx beq ENV.SysVarsExit2 make sure not overlapping buf 256 - stx KrnBuf256 + stx K.Buf256 lda #' ' - sta KrnBuf256,x + sta K.Buf256,x jsr ENV.AppendPtr3ToBuf bra .2 @@ -434,12 +470,12 @@ ENV.SysVarsA sta HEXBUF cpy #9 Print always last char bne .1 -.2 ldx KrnBuf256 +.2 ldx K.Buf256 .3 inx beq ENV.SysVarsExit2 - sta KrnBuf256,x + sta K.Buf256,x iny cpy #10 beq ENV.SysVarsExit @@ -447,7 +483,7 @@ ENV.SysVarsA sta HEXBUF lda ASCBUF,y bra .3 -ENV.SysVarsExit stx KrnBuf256 +ENV.SysVarsExit stx K.Buf256 ENV.SysVarsExit2 clc rts @@ -539,19 +575,19 @@ ENV.NextEnvPtr3 lda ZPPtr3 *-------------------------------------- ENV.AppendPtr3ToBuf ldy #0 - ldx KrnBuf256 + ldx K.Buf256 .1 iny lda (ZPPtr3),y inx beq .9 - sta KrnBuf256,x + sta K.Buf256,x tya cmp (ZPPtr3) last char? bne .1 - stx KrnBuf256 + stx K.Buf256 .9 rts *-------------------------------------- MAN diff --git a/SYS/KERNEL.S.FILE.txt b/SYS/KERNEL.S.FILE.txt deleted file mode 100644 index ad83e014..00000000 --- a/SYS/KERNEL.S.FILE.txt +++ /dev/null @@ -1,10 +0,0 @@ -PR#3 -PREFIX /A2OSX.BUILD -LOMEM $A00 -INC 1 -AUTO 6 -*-------------------------------------- -MAN -SAVE /A2OSX.SRC/SYS/KERNEL.S.FILE -LOAD /A2OSX.SRC/SYS/KERNEL.S -ASM diff --git a/SYS/KERNEL.S.FIO.txt b/SYS/KERNEL.S.FIO.txt index d4f0a6eb..b23808c1 100644 --- a/SYS/KERNEL.S.FIO.txt +++ b/SYS/KERNEL.S.FIO.txt @@ -22,12 +22,12 @@ K.FileSearch >PULLW ZPPtr2 DstBuf jsr K.FileSearch.I bcs .9 - lda KrnBuf256 + lda K.Buf256 sta (ZPPtr2) tay -.1 lda KrnBuf256,y +.1 lda K.Buf256,y sta (ZPPtr2),y dey bne .1 @@ -44,7 +44,7 @@ K.FileSearch.I >PULLW ZPPtr4 ZPPtr1 trashed by ExpandPStrYA stz .11+1 -.1 stz KrnBuf256 reset String +.1 stz K.Buf256 reset String ldx #0 .11 ldy #$ff Self Modified @@ -57,7 +57,7 @@ K.FileSearch.I >PULLW ZPPtr4 ZPPtr1 trashed by ExpandPStrYA cmp #';' beq .3 inx - sta KrnBuf256,x + sta K.Buf256,x bra .2 .3 txa @@ -70,15 +70,15 @@ K.FileSearch.I >PULLW ZPPtr4 ZPPtr1 trashed by ExpandPStrYA .4 iny lda (ZPPtr4),y Append Fiename... inx - sta KrnBuf256,x + sta K.Buf256,x tya cmp (ZPPtr4) bne .4 - stx KrnBuf256 set string length + stx K.Buf256 set string length >PUSHWI K.S.STAT - >PUSHWI KrnBuf256 + >PUSHWI K.Buf256 jsr K.STAT bcs .1 Failed...retry next path... @@ -106,7 +106,7 @@ K.GetFullPathYA >STYA ZPPtr3 Ptr1 & 2 used by StrCpy lda (ZPPtr3) beq K.GetFullPathYA.9 - stz KrnBuf256 + stz K.Buf256 ldy #1 lda (ZPPtr3),y @@ -117,14 +117,14 @@ K.GetFullPathYA >STYA ZPPtr3 Ptr1 & 2 used by StrCpy lda (pPs),y jsr K.GetMemPtrA >PUSHYA - >PUSHWI KrnBuf256 + >PUSHWI K.Buf256 >SYSCALL PStrCpy .1 >PUSHW ZPPtr3 - >PUSHWI KrnBuf256 + >PUSHWI K.Buf256 >SYSCALL PStrCat K.GetFullPathYA.NewStr - >LDYAI KrnBuf256 + >LDYAI K.Buf256 >SYSCALL NewPStrYA rts diff --git a/SYS/KERNEL.S.INIT.txt b/SYS/KERNEL.S.INIT.txt index e3753d87..58798668 100644 --- a/SYS/KERNEL.S.INIT.txt +++ b/SYS/KERNEL.S.INIT.txt @@ -76,8 +76,8 @@ Kernel.Init2 >LDAXI MSG.Init2 >STYA ZPPtr3 jsr Kernel.Move - >LDYAI D.STACK.TOP - >STYA pStack init Soft Stack + >LDYAI K.STACK + >STYA pStack init Soft Stack sta CLRALTZP Make MAIN ZP is enabled for X.PRINT.F @@ -775,12 +775,12 @@ TskMgrInit >LDYAI TskMgr.Table+S.PS Clear whole process table except PS0 ldy #S.PS.hENV sta (pPs),y - >LDYAI UsrBuf256 + >LDYAI K.Buf256 >STYA K.MLI.PARAMS+1 >MLICALL MLIGETPREFIX bcs .9 - >LDYAI UsrBuf256 + >LDYAI K.Buf256 >SYSCALL NewPStrYA bcs .9 @@ -788,7 +788,7 @@ TskMgrInit >LDYAI TskMgr.Table+S.PS Clear whole process table except PS0 ldy #S.PS.hPREFIX sta (pPs),y - >PUSHWI UsrBuf256 push ENV value + >PUSHWI K.Buf256 push ENV value >PUSHWI I.ENV.A2osX push ENV name >SYSCALL SetEnv bcs .9 diff --git a/SYS/KERNEL.S.JMP.txt b/SYS/KERNEL.S.JMP.txt index ca9c1e51..acb266a9 100644 --- a/SYS/KERNEL.S.JMP.txt +++ b/SYS/KERNEL.S.JMP.txt @@ -17,11 +17,11 @@ K.SYSCALL.JMP .DA K.FileSearch $00 .DA K.ChOwn .DA K.ChGrp *-------------------------------------- - .DA K.LoadDrvYA $10 - .DA K.LoadLibYA - .DA K.UnloadLibA - .DA K.LoadExeYA - .DA K.TimeYA + .DA K.LoadDrv.YA $10 + .DA K.LoadLib.YA + .DA K.UnloadLib.A + .DA K.LoadBin.YA + .DA K.Time.YA .DA K.CTime2Time .DA K.PTime2Time .DA 0 @@ -49,18 +49,18 @@ K.SYSCALL.JMP .DA K.FileSearch $00 .DA 0 $40 .DA K.SScanF .DA 0 - .DA K.PrintFYA - .DA K.SPrintFYA - .DA K.FPrintFYA + .DA K.PrintF.YA + .DA K.SPrintF.YA + .DA K.FPrintF.YA .DA K.AToI .DA 0 *-------------------------------------- - .DA K.NewPStrYA $50 - .DA K.PStrCpy - .DA K.PStrCat - .DA K.PStrMatch - .DA K.PStrUprYA - .DA K.PStrLwrYA + .DA 0 $50 + .DA K.StrCpy + .DA K.StrCat + .DA K.StrMatch + .DA K.StrUpr.YA + .DA K.StrLwr.YA .DA K.StrFTime .DA 0 K.PStr2StrArrayYA *-------------------------------------- @@ -74,13 +74,13 @@ K.SYSCALL.JMP .DA K.FileSearch $00 .DA 0 *-------------------------------------- .DA K.GetArgC $70 - .DA K.GetArgA - .DA K.ExpandPStrYA + .DA K.GetArg.A + .DA K.ExpandPStr.YA .DA 0 - .DA K.PutEnvYA + .DA K.PutEnv.YA .DA K.SetEnv - .DA K.GetEnvYA - .DA K.UnsetEnvYA + .DA K.GetEnv.YA + .DA K.UnsetEnv.YA *-------------------------------------- .DA K.GetDevByIDA $80 .DA K.GetDevByNameYA diff --git a/SYS/KERNEL.S.LIB.txt b/SYS/KERNEL.S.LIB.txt index a6ea7b22..3c3bd144 100644 --- a/SYS/KERNEL.S.LIB.txt +++ b/SYS/KERNEL.S.LIB.txt @@ -4,82 +4,6 @@ LOMEM $A00 INC 1 AUTO 6 *-------------------------------------- -* K.LoadLibYA -* in : -* Y,A = PTR To Lib Name -* out : -* A = hMem To loaded LIB -*-------------------------------------- -K.LoadLibYA >STYA K.LoadLib.Name SAVE LIBname for K.FileSearch - >LDYAI ENV.LIB push ENVNAME=LIB - >SYSCALL GetEnvYA get value for ENV=LIB - bcs .9 - - >PUSHYA Push $LIB value - - >PUSHW K.LoadLib.Name - - jsr K.FileSearch.I find libname in $LIB - bcs .9 - - >LDYAI KrnBuf256 - jsr K.LoadExeYA Y,A=filename full path - bcs .9 - - stx .8+1 - >STYA LIB.Jump+1 - - txa Pass hLib to LibLoad - ldx #LIBMGR.LOAD - jsr LIB.Jump Call LIB.LOAD function - - bcs .99 - -.8 lda #$ff hLib - clc -.9 rts - -.99 pha - lda .8+1 - jsr K.FreeMemA - pla - - sec - rts -*-------------------------------------- -K.LoadLib.Name .BS 2 -*-------------------------------------- -* K.UnloadLibA -* in : -* A = hMem To Lib -* out : -*-------------------------------------- -K.UnloadLibA pha - jsr K.GetMemByIDA - >STYA ZPPtr1 - ldy #S.MEM.REFCNT - lda (ZPPtr1),y Get count of those referencing this lib - dec only one left ? - beq .1 - sta (ZPPtr1),y - pla - clc - rts - -.1 ldy #S.MEM.PTR - lda (ZPPtr1),y - sta LIB.Jump+1 - - iny - lda (ZPPtr1),y - sta LIB.Jump+2 - - ldx #LIBMGR.UNLOAD - jsr LIB.Jump Call LIB.UNLOAD function - pla - jmp K.FreeMemA -LIB.Jump jmp $ffff Self Modiied -*-------------------------------------- MAN SAVE /A2OSX.SRC/SYS/KERNEL.S.LIB LOAD /A2OSX.SRC/SYS/KERNEL.S diff --git a/SYS/KERNEL.S.MEM.txt b/SYS/KERNEL.S.MEM.txt index e76e7e63..bb5d20d9 100644 --- a/SYS/KERNEL.S.MEM.txt +++ b/SYS/KERNEL.S.MEM.txt @@ -365,7 +365,7 @@ K.FreeMemA phy >PUSHYA >LDYAI K.FreeMemA.ERR - jsr K.PrintFYA + jsr K.PrintF.YA .91 ldx #$ff bit $C000,x diff --git a/SYS/KERNEL.S.PS.txt b/SYS/KERNEL.S.PS.txt index b7d0b292..8a4b56e4 100644 --- a/SYS/KERNEL.S.PS.txt +++ b/SYS/KERNEL.S.PS.txt @@ -175,7 +175,7 @@ PS.CreateChild >LDYAI TskMgr.Table+S.PS ldy #S.PS.hPREFIX copy hPREFIX... lda (pPs),y jsr K.GetMemPtrA - jsr K.NewPStrYA + jsr K.NewPStr.YA bcs .9 txa @@ -232,7 +232,7 @@ PS.CreateChild >LDYAI TskMgr.Table+S.PS .9 rts *-------------------------------------- PS.Init >LDYA K.CreateProcess.CmdLine - jsr PS.PStr2StrArrayYA + jsr PS.Str2StrArrayYA bcs .9 phy save PTR to StrArray... @@ -244,7 +244,7 @@ PS.Init >LDYA K.CreateProcess.CmdLine pla Restore PTR... ply - >SYSCALL LoadExeYA Y,A=filename full path + >SYSCALL LoadBin.YA Y,A=filename full path bcs .9 >STYA ZPPtr4 save PTR to Code Segment diff --git a/SYS/KERNEL.S.RUN.txt b/SYS/KERNEL.S.RUN.txt index 141bc618..5af1670a 100644 --- a/SYS/KERNEL.S.RUN.txt +++ b/SYS/KERNEL.S.RUN.txt @@ -92,7 +92,7 @@ RUN.DumpEvent ldy #S.EVT-1 bpl .1 >LDYAI MSG.DumpEvent - jmp K.PrintFYA + jmp K.PrintF.YA *-------------------------------------- MSG.DumpEvent >CSTR "!Evt:F=%b,Dev=$%h,LO=$%h,HI=$%h,W1=$%H,W2=$%H\n" SYS.CPULOADI .BS 1 diff --git a/SYS/KERNEL.S.STAT.txt b/SYS/KERNEL.S.STAT.txt new file mode 100644 index 00000000..6f0945c9 --- /dev/null +++ b/SYS/KERNEL.S.STAT.txt @@ -0,0 +1,79 @@ +PR#3 +PREFIX /A2OSX.BUILD +LOMEM $A00 +INC 1 +AUTO 6 +*/-------------------------------------- +* # Stat +* Return information about a file +* ## In : +* PUSHW = PTR to S.STAT buffer +* PUSHW = PTR to Filename (PSTR) +* ## Out : +*\-------------------------------------- +K.Stat jsr PFT.CheckPathSTK + jsr STDIO.PullMLIPath + >PULLW ZPPtr2 + >MLICALL MLIGETFILEINFO + bcs .9 + + ldx K.MLI.PARAMS+S.FILEINFO.ACCESS + + lda #S.STAT.MODE.XO+S.STAT.MODE.WO+S.STAT.MODE.RO + cpx #S.FILEINFO.ACCESS.FULL + beq .2 + + lda #S.STAT.MODE.XO+S.STAT.MODE.RO + cpx #S.FILEINFO.ACCESS.R + beq .2 + + lda #0 + +.2 ldy #S.STAT.MODE + sta (ZPPtr2),y + + ldx #K.Stat.DST-K.Stat.SRC + +.3 ldy K.Stat.SRC-1,x + lda K.MLI.PARAMS,y + ldy K.Stat.DST-1,x + sta (ZPPtr2),y + dex + bne .3 + + ldy #S.STAT.SIZE + lda #0 + sta (ZPPtr2),y + + iny + + lda K.MLI.PARAMS+S.FILEINFO.BLOCKSUSED + asl + sta (ZPPtr2),y + + iny + + lda K.MLI.PARAMS+S.FILEINFO.BLOCKSUSED+1 + rol + sta (ZPPtr2),y + + iny + + lda #0 + rol + sta (ZPPtr2),y + + clc +.9 rts +*-------------------------------------- +K.Stat.SRC .DA #S.FILEINFO.TYPE + .DA #S.FILEINFO.AUXTYPE,#S.FILEINFO.AUXTYPE+1 + .DA #S.FILEINFO.BLOCKSUSED,#S.FILEINFO.BLOCKSUSED+1 +K.Stat.DST .DA #S.STAT.P.TYPE + .DA #S.STAT.P.AUXTYPE,#S.STAT.P.AUXTYPE+1 + .DA #S.STAT.BLOCKS,#S.STAT.BLOCKS+1 +*-------------------------------------- +MAN +SAVE /A2OSX.SRC/SYS/KERNEL.S.STAT +LOAD /A2OSX.SRC/SYS/KERNEL.S +ASM diff --git a/SYS/KERNEL.S.STDIO.txt b/SYS/KERNEL.S.STDIO.txt index 3c16a16e..4f400ed0 100644 --- a/SYS/KERNEL.S.STDIO.txt +++ b/SYS/KERNEL.S.STDIO.txt @@ -4,6 +4,402 @@ LOMEM $A00 INC 1 AUTO 6 */-------------------------------------- +* # FOpen +* Open a file +* ## In : +* PUSHW = AUXTYPE +* PUSHB = TYPE +* PUSHB = MODE +* SYS.FOpen.R : if R and !exists -> ERROR +* SYS.FOpen.W : if W and !exists -> CREATE +* SYS.FOpen.A : Append +* SYS.FOpen.T : Open/Append in Text mode +* SYS.FOpen.X : Create if not exists +* PUSHW = PATH (PSTR) +* ## Out : +* CC : A = hFILE +* CS : A = EC +*\-------------------------------------- +K.FOpen jsr PFT.CheckPathSTK + jsr STDIO.PullMLIPath + >PULLB K.FOpen.MODE + >PULLB K.FOpen.TYPE + >PULLW K.FOpen.AUXTYPE + + >MLICALL MLIGETFILEINFO + bcc K.FOpen.10 Already Exists + + bit K.FOpen.MODE Create if not exists ? + bpl K.FOpen.9 No, return MLI error + + lda #S.FILEINFO.ACCESS.FULL Yes, Create... + sta K.MLI.PARAMS+3 Access + lda K.FOpen.TYPE + sta K.MLI.PARAMS+4 File type + >LDYA K.FOpen.AUXTYPE + >STYA K.MLI.PARAMS+5 Aux type + lda #S.FILEINFO.STORETYPE.STD + sta K.MLI.PARAMS+7 + + ldx #3 + +.1 lda DATELO,x + sta K.MLI.PARAMS+8,x + dex + bpl .1 + + >MLICALL MLICREATE + bcc K.FOpen.10 +K.FOpen.9 rts + +K.FOpen.10 >LDYAI S.NODE.REG + jsr K.GetMem0YA + bcs K.FOpen.9 + + >STYA ZPPtr1 + stx hFILE + + jsr STDIO.SetIOBUF + bcs .98 + + >MLICALL MLIOPEN + bcs .98 + + lda K.MLI.PARAMS+5 get ref_num + ldy #S.NODE.REG.REF + sta (ZPPtr1),y + + sta K.MLI.PARAMS+1 Next MLI Calls are REF_NUM based + + lda K.FOpen.MODE + bit #SYS.FOpen.W + beq .20 Write mode ? + + and #SYS.FOpen.A Append ? + bne .11 yes, go to end of file + + stz K.MLI.PARAMS+2 + stz K.MLI.PARAMS+3 + stz K.MLI.PARAMS+4 + >MLICALL MLISETEOF no, reset size to 0 + bcs .98 + bra .20 + +.11 >MLICALL MLIGETEOF + bcs .98 + + >MLICALL MLISETMARK + bcs .98 + +.20 lda K.FOpen.MODE + and #SYS.FOpen.T Text Mode ? + beq .30 + + lda #$FF + sta K.MLI.PARAMS+2 + lda #$0D + sta K.MLI.PARAMS+3 + >MLICALL MLINEWLINE + +.30 ldy #S.NODE.T + lda #S.NODE.T.REG + sta (ZPPtr1),y + lda hFILE + clc + rts CC + +.98 pha save MLI error + lda hFILE + jsr K.FCloseA.1 + pla get back MLI error + sec + rts +*-------------------------------------- +K.FOpen.MODE .BS 1 +K.FOpen.TYPE .BS 1 +K.FOpen.AUXTYPE .BS 2 +hFILE .BS 1 +*/-------------------------------------- +* # FCloseA +* Close a file +* ## In : +* A = hFILE +* ## Out : +*\-------------------------------------- +K.FCloseA jsr PFT.CheckNodeA + pha + jsr K.GetMemPtrA + >STYA ZPPtr1 + pla + +K.FCloseA.1 sta K.FCloseA.2+1 + ldy #S.NODE.REG.REF + lda (ZPPtr1),y + beq .1 + sta K.MLI.PARAMS+1 + >MLICALL MLICLOSE + +.1 ldy #S.NODE.REG.IOBUF + lda (ZPPtr1),y + beq K.FCloseA.2 + jsr K.FreeMemA + +K.FCloseA.2 lda #$ff Self Modified + jmp K.FreeMemA +*/-------------------------------------- +* # FReadA +* Read ONE byte from file +* ## In : +* A = hFILE +* ## Out : +* A = Byte Read +*\-------------------------------------- +K.FReadA jsr PFT.CheckNodeA + ldx #MLIREAD + bra K.FReadWrite.0 +*/-------------------------------------- +* # FWriteAY +* ## In: +* A = hFILE +* Y = char +* # Out: +* Y,A = Bytes Written +*\-------------------------------------- +K.FWriteAY jsr PFT.CheckNodeA + sty K.FWriteAY.Buf + ldx #MLIWRITE +K.FReadWrite.0 jsr STDIO.GetRefNum + >LDYAI K.FWriteAY.Buf + >STYA K.MLI.PARAMS+2 + lda #1 + sta K.MLI.PARAMS+4 + stz K.MLI.PARAMS+5 + lda #4 Param Count = 4 for MLIREAD & MLIWRITE + jsr A2osX.MLICALL + bcs .9 + lda K.FWriteAY.Buf +.9 rts +K.FWriteAY.Buf .BS 1 +*/-------------------------------------- +* # FRead +* Read bytes from file +* ## In : +* PUSHW = Dest Ptr +* PUSHW = Bytes To Read +* PUSHB = hFILE +* ## Out : +* Y,A = Bytes Read +*\-------------------------------------- +K.FRead jsr PFT.CheckNodeSTK + ldx #MLIREAD + bra K.FReadWrite.1 +*/-------------------------------------- +* # FWrite +* ## In: +* PUSHW = Src Ptr +* PUSHW = Bytes To Write +* PUSHB = hFILE +* # Out: +* Y,A = Bytes Written +*\-------------------------------------- +K.FWrite jsr PFT.CheckNodeSTK + ldx #MLIWRITE +K.FReadWrite.1 >PULLA + jsr STDIO.GetRefNum + >PULLW K.MLI.PARAMS+4 + >PULLW K.MLI.PARAMS+2 + + lda #4 Param Count = 4 for MLIREAD & MLIWRITE + jsr A2osX.MLICALL + bcs .9 + >LDYA K.MLI.PARAMS+6 +.9 rts +*/-------------------------------------- +* # FFlushA +* ## In: +* A = hFILE +*\-------------------------------------- +K.FFlushA jsr PFT.CheckNodeA + jsr STDIO.GetRefNum + >MLICALL MLIFLUSH + rts +*/------------------------------------- +* # FSeek +* ## In: +* PUSHW = OffsetHi +* PUSHW = OffsetLo +* PUSHB = From +* PUSHB = hFILE +*\------------------------------------- +K.FSeek jsr PFT.CheckNodeSTK + >PULLA + jsr STDIO.GetRefNum + >PULLA FROM + tax + >PULLW K.FSeek.OFFSET + >PULLW K.FSeek.OFFSET+2 + + cpx #SYS.FSeek.SET + + bne .1 + stz K.MLI.PARAMS+2 + stz K.MLI.PARAMS+3 + stz K.MLI.PARAMS+4 + bra .8 + +.1 cpx #SYS.FSeek.CUR + bne .2 + >MLICALL MLIGETMARK + bcc .8 + rts + +.2 cpx #SYS.FSeek.END + bne .98 + >MLICALL MLIGETEOF + bcs .9 + +.8 ldx #0 + ldy #3 + + clc + +.81 lda K.MLI.PARAMS+2,x + adc K.FSeek.OFFSET,x + sta K.MLI.PARAMS+2,x + + inx + dey + bne .81 + + bcs .99 Offset out of range! + + >MLICALL MLISETMARK + +.9 rts + +.98 lda #SYSMGR.ERRSYN + .HS 2C bit abs +.99 lda #SYSMGR.ERRFTB + sec + rts +*-------------------------------------- +K.FSeek.OFFSET .BS 4 +*/-------------------------------------- +* # FTellA +* ## In: +* A = hFILE +* ## Out: +* Y,A,X = Offset +*\-------------------------------------- +K.FTellA jsr PFT.CheckNodeA +K.FTellA.1 jsr STDIO.GetRefNum + >MLICALL MLIGETMARK + bcs .9 + >LDYA K.MLI.PARAMS+2 + ldx K.MLI.PARAMS+4 +.9 rts +*/-------------------------------------- +* # FEOFA +* ## In: +* A = hFILE +* ## Out: +* CC : +* A=0 EOF +* A !=0 NOT EOF +* CS : +*\-------------------------------------- +K.FEOFA jsr PFT.CheckNodeA + jsr STDIO.GetRefNum + jsr K.FTellA.1 + bcs .9 + >STYA K.FEOFA.MARK + stx K.FEOFA.MARK+2 + + >MLICALL MLIGETEOF + bcs .9 + + sec + lda K.MLI.PARAMS+2 + sbc K.FEOFA.MARK + bne .8 + lda K.MLI.PARAMS+3 + sbc K.FEOFA.MARK+1 + bne .8 + lda K.MLI.PARAMS+4 + sbc K.FEOFA.MARK+2 +.8 clc +.9 rts +K.FEOFA.MARK .BS 3 +*/-------------------------------------- +* # RemoveYA +*\-------------------------------------- +K.RemoveYA jsr PFT.CheckPathYA + jsr STDIO.PullMLIPath + >MLICALL MLIDESTROY + rts +*/-------------------------------------- +* # Rename +* Rename a file +* ## In : +* PUSHW = New Name +* PUSHW = Old Name +* ## Out : +*\-------------------------------------- +K.Rename jsr PFT.CheckPathSTK + jsr STDIO.PullMLIPath + >PULLW .1+1 + + ldy #0 + +.1 lda $ffff,y Self Modified + beq .8 + iny + sta K.Buf256,y + cpy #MLI.MAXPATH + bne .1 + +.8 sty K.Buf256 + >LDYAI K.Buf256 + >STYA K.MLI.PARAMS+3 + + >MLICALL MLIRename + rts +*-------------------------------------- +STDIO.PullMLIPath + >PULLW .1+1 + + ldy #0 + +.1 lda $ffff,y Self Modified + beq .8 + iny + sta K.MLI.PATH,y + cpy #MLI.MAXPATH + bne .1 + +.8 sty K.MLI.PATH + >LDYAI K.MLI.PATH + >STYA K.MLI.PARAMS+1 + rts +*-------------------------------------- +STDIO.SetIOBUF >PUSHWI 1024 get a ProDOS IOBUF + >PUSHBI S.MEM.F.ALIGN+S.MEM.F.NOMOVE + jsr K.GetMem + bcs .9 + + >STYA K.MLI.PARAMS+3 Save Ptr to IOBUF for MLIOPEN call + txa + ldy #S.NODE.REG.IOBUF + sta (ZPPtr1),y +.9 rts +*-------------------------------------- +STDIO.GetRefNum jsr K.GetMemPtrA + >STYA ZPPtr1 + ldy #S.NODE.REG.REF + lda (ZPPtr1),y + sta K.MLI.PARAMS+1 + rts +*/-------------------------------------- * # FPutCAY * Print A (char) to File * ## In: @@ -331,15 +727,15 @@ K.SScanF.IsDigit .1 sec rts */-------------------------------------- -* # PrintFYA/SPrintFYA/FPrintFYA +* # PrintF.YA/SPrintF.YA/FPrintF.YA * Prints C-Style String * ## In: -* PrintFYA : +* PrintF.YA : * Y,A = PTR to CStr -* SPrintFYA : +* SPrintF.YA : * Y,A = PTR to CStr * PULLW = Ptr to Dst Buffer -* FPrintFYA : +* FPrintF.YA : * Y,A = PTR to CStr * PULLB = hNode * ## Out: @@ -378,12 +774,12 @@ K.SScanF.IsDigit * %011s : 'ABCDEFGH000' * %2f : '3.14' *\-------------------------------------- -K.SPrintFYA >STYA ZPPtr1 +K.SPrintF.YA >STYA ZPPtr1 >PULLW Printf.Cout.Ptr+1 -K.FPrintFYA >STYA ZPPtr1 +K.FPrintF.YA >STYA ZPPtr1 -K.PrintFYA >STYA ZPPtr1 +K.PrintF.YA >STYA ZPPtr1 ldy #0 @@ -730,24 +1126,6 @@ Printf.Cout jmp K.PutCharA Printf.Cout.Ptr sta $ffff Self modified *-------------------------------------- -FILE.SetIOBUF >PUSHWI 1024 get a ProDOS IOBUF - >PUSHBI S.MEM.F.ALIGN+S.MEM.F.NOMOVE - jsr K.GetMem - bcs .9 - - >STYA K.MLI.PARAMS+3 Save Ptr to IOBUF for MLIOPEN call - txa - ldy #S.NODE.REG.IOBUF - sta (ZPPtr1),y -.9 rts -*-------------------------------------- -FILE.SetupPrt1A jsr K.GetMemPtrA - >STYA ZPPtr1 - ldy #S.NODE.REG.REF - lda (ZPPtr1),y - sta K.MLI.PARAMS+1 - rts -*-------------------------------------- MAN SAVE /A2OSX.SRC/SYS/KERNEL.S.STDIO LOAD /A2OSX.SRC/SYS/KERNEL.S diff --git a/SYS/KERNEL.S.STR.txt b/SYS/KERNEL.S.STR.txt deleted file mode 100644 index 73fd4ba8..00000000 --- a/SYS/KERNEL.S.STR.txt +++ /dev/null @@ -1,10 +0,0 @@ -PR#3 -PREFIX /A2OSX.BUILD -LOMEM $A00 -INC 1 -AUTO 6 -*-------------------------------------- -MAN -SAVE /A2OSX.SRC/SYS/KERNEL.S.STR -LOAD /A2OSX.SRC/SYS/KERNEL.S -ASM diff --git a/SYS/KERNEL.S.STRING.txt b/SYS/KERNEL.S.STRING.txt index 952f6c6b..d02d2900 100644 --- a/SYS/KERNEL.S.STRING.txt +++ b/SYS/KERNEL.S.STRING.txt @@ -143,16 +143,16 @@ K.StrMatch jsr PullPtr1Ptr2 .9 sec rts */-------------------------------------- -* # StrUprYA/StrLwrYA +* # StrUpr.YA/StrLwr.YA * Convert string to UPPERCASE/lowercase * ## In: * Y,A = PTR to String (CSTR) * ## Out: * Uppercased/lowercased String in Buffer *\-------------------------------------- -K.StrUprYA ldx #0 +K.StrUpr.YA ldx #0 .HS 2C bit abs -K.StrLwrYA ldx #2 +K.StrLwr.YA ldx #2 >STYA ZPPtr1 pha save Y,A to restore them at exit @@ -163,9 +163,9 @@ K.StrLwrYA ldx #2 .1 lda (ZPPtr1),y beq .8 - cmp K.PStrUprLwr,x + cmp .9,x bcc .2 - cmp K.PStrUprLwr+1,x + cmp .9+1,x bcs .2 eor #$20 sta (ZPPtr1),y @@ -178,7 +178,7 @@ K.StrLwrYA ldx #2 pla rts *-------------------------------------- -K.PStrUprLwr .AS "azAZ" +.9 .AS "azAZ" *-------------------------------------- MAN SAVE /A2OSX.SRC/SYS/KERNEL.S.STRING diff --git a/SYS/KERNEL.S.TIME.txt b/SYS/KERNEL.S.TIME.txt index 6fd3232e..4edb0452 100644 --- a/SYS/KERNEL.S.TIME.txt +++ b/SYS/KERNEL.S.TIME.txt @@ -11,13 +11,13 @@ CENTURY0 .EQ 19 YEAR0 .EQ 70 DAY0 .EQ 4 day 0 was a thursday *-------------------------------------- -* K.TimeYA get System Time +* K.Time.YA get System Time * In : * Y,A = PTR to S.TIME * Out : * S.TIME filled with System date/time *-------------------------------------- -K.TimeYA >STYA ZPPtr2 +K.Time.YA >STYA ZPPtr2 >MLICALL MLIGETTIME >LDYAI DATELO >STYA ZPPtr1 @@ -618,6 +618,6 @@ K.StrFTime.BIN .BS 1 K.StrFTime.DEC .BS 1 always < 100 *-------------------------------------- MAN -SAVE /A2OSX.SRC/SYS/KERNEL.S.Time +SAVE /A2OSX.SRC/SYS/KERNEL.S.TIME LOAD /A2OSX.SRC/SYS/KERNEL.S ASM diff --git a/SYS/KERNEL.S.txt b/SYS/KERNEL.S.txt index 5391a037..21430d80 100644 --- a/SYS/KERNEL.S.txt +++ b/SYS/KERNEL.S.txt @@ -28,24 +28,22 @@ A2osX.GP .PH $BD00 .EP A2osX.D1 .PH $D000 .DA #RRAMWRAMBNK1 + .INB /A2OSX.SRC/SYS/KERNEL.S.STDIO + .INB /A2OSX.SRC/SYS/KERNEL.S.STAT .INB /A2OSX.SRC/SYS/KERNEL.S.FIO - .INB /A2OSX.SRC/SYS/KERNEL.S.DRV - .INB /A2OSX.SRC/SYS/KERNEL.S.LIB .INB /A2OSX.SRC/SYS/KERNEL.S.TIME - .INB /A2OSX.SRC/SYS/KERNEL.S.FILE .INB /A2OSX.SRC/SYS/KERNEL.S.DIR .INB /A2OSX.SRC/SYS/KERNEL.S.PFT .INB /A2OSX.SRC/SYS/KERNEL.S.BIN .EP A2osX.D2 .PH $D000 .DA #RRAMWRAMBNK2 - .INB /A2OSX.SRC/SYS/KERNEL.S.CIO - .INB /A2OSX.SRC/SYS/KERNEL.S.STR + .INB /A2OSX.SRC/SYS/KERNEL.S.STRING + .INB /A2OSX.SRC/SYS/KERNEL.S.STDLIB .INB /A2OSX.SRC/SYS/KERNEL.S.DEV .INB /A2OSX.SRC/SYS/KERNEL.S.PS .INB /A2OSX.SRC/SYS/KERNEL.S.ARG .INB /A2OSX.SRC/SYS/KERNEL.S.ENV - .INB /A2OSX.SRC/SYS/KERNEL.S.CNV .INB /A2OSX.SRC/SYS/KERNEL.S.RUN .INB /A2OSX.SRC/SYS/KERNEL.S.EVT .INB /A2OSX.SRC/SYS/KERNEL.S.TSK @@ -55,7 +53,6 @@ A2osX.E0 .PH $E000 .INB /A2OSX.SRC/SYS/KERNEL.S.DAT .INB /A2OSX.SRC/SYS/KERNEL.S.IRQ .INB /A2OSX.SRC/SYS/KERNEL.S.MEM - .INB /A2OSX.SRC/SYS/KERNEL.S.CHR .INB /A2OSX.SRC/SYS/KERNEL.S.D01 .EP A2osX.E0.E .EQ *