From 571fb59701937f520eb95834e2eabda9c29cc40d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20GIBERT?= Date: Sat, 29 Oct 2016 21:58:21 +0200 Subject: [PATCH] Kernel version 0.8 : SHELL, many new features, Error messages...etc...see README.md Important KERNEL.S.ENV.txt rewrite to implement env in SHELL --- A2OSX.BOOT.po | Bin 143360 -> 143360 bytes A2OSX.DEV.po | Bin 143360 -> 143360 bytes A2OSX.SRC.po | Bin 819200 -> 819200 bytes BIN/ASM.S.FIO.txt | 55 +++--------- BIN/ASM.S.SRC.txt | 4 +- BIN/ASM.S.SYM.txt | 12 +-- BIN/ASM.S.txt | 33 +++---- BIN/PS.S.txt | 4 +- INC/A2osX.I.txt | 14 +-- INC/PRODOS.I.txt | 50 +++++------ SBIN/SHELL.S.CMD.txt | 22 ++--- SBIN/SHELL.S.ERR.txt | 52 +++++++++++ SBIN/SHELL.S.TXT.txt | 2 +- SBIN/SHELL.S.txt | 54 +++++++---- SYS/KERNEL.S.BIN.txt | 2 +- SYS/KERNEL.S.CIO.txt | 132 +-------------------------- SYS/KERNEL.S.CNV.txt | 140 +++++++++++++++++++++++++++++ SYS/KERNEL.S.DAT.txt | 2 + SYS/KERNEL.S.ENV.txt | 202 ++++++++++++++++++++++++++++++------------ SYS/KERNEL.S.FILE.txt | 14 +-- SYS/KERNEL.S.FIO.txt | 14 +-- SYS/KERNEL.S.JMP.txt | 2 +- SYS/KERNEL.S.MEM.txt | 2 +- SYS/KERNEL.S.PS.txt | 10 +-- SYS/KERNEL.S.STR.txt | 24 ++--- SYS/KERNEL.S.TSK.txt | 4 +- SYS/KERNEL.S.txt | 1 + X.ERRORS.S.txt | 45 ++++++++++ 28 files changed, 539 insertions(+), 357 deletions(-) create mode 100644 SBIN/SHELL.S.ERR.txt create mode 100644 SYS/KERNEL.S.CNV.txt create mode 100644 X.ERRORS.S.txt diff --git a/A2OSX.BOOT.po b/A2OSX.BOOT.po index eb8243d28337efcca609edb887025acd0525b81d..e5329971f04782dacef429d0734f31b39aff06e0 100644 GIT binary patch delta 5215 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 VKeZAa?nn~QP3e@9PW7UV{{muU*LMH_ diff --git a/A2OSX.DEV.po b/A2OSX.DEV.po index ae6042295060494593e93fb64e0797911de8001c..cc4b24f8a270eed2dedd8e04cfe9e468a1f190c6 100644 GIT binary patch delta 10696 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 delta 10852 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 Reby|rUDwPT#QMS9`!5f?R80T? diff --git a/BIN/ASM.S.FIO.txt b/BIN/ASM.S.FIO.txt index df562a4c..c3ffd0ea 100644 --- a/BIN/ASM.S.FIO.txt +++ b/BIN/ASM.S.FIO.txt @@ -57,8 +57,8 @@ FIO.OpenFileA sta FIO.hFileName >STYA ZPPtr1 .1 >PUSHW ZPPtr1 - >PUSHW L.MSG.SRC.FILE - >LIBCALL hLIBSTR,LIBSTR.PRINTF + >LDYA L.MSG.SRC.FILE + >SYSCALL PrintFYA ldy #SRC.COUNT lda (pData),y @@ -69,8 +69,12 @@ FIO.OpenFileA sta FIO.hFileName sec bra FIO.OpenFileA.Exit -.10 lda FIO.hFileName +.10 >PUSHWI 0 + >PUSHBI 4 + >PUSHBI SYS.FOPEN.R+SYS.FOPEN.T + lda FIO.hFileName >SYSCALL GetMemPtrA + >PUSHYA >SYSCALL MLIOpenYA bcs .99 @@ -78,29 +82,11 @@ FIO.OpenFileA sta FIO.hFileName ldy #SRC.COUNT lda (pData),y clc - adc #SRC.hREFNUMS + adc #SRC.hFILES tay pla sta (pData),y - ldy #SRC.COUNT - lda (pData),y - clc - adc #SRC.hBUFFERS - tay - txa - sta (pData),y - - lda FIO.hFileName - >SYSCALL GetMemPtrA - >SYSCALL MLIGetFileInfoYA - bcs .99 - - >STYA ZPPtr1 - ldy #1 - lda (ZPPtr1),y - tax - ldy #SRC.COUNT lda (pData),y clc @@ -110,25 +96,12 @@ FIO.OpenFileA sta FIO.hFileName txa sta (pData),y - cmp #$FA S-C/BAS? - beq .8 +* cmp #$FA S-C/BAS? +* beq .8 - cmp #$04 TXT ? +* cmp #$04 TXT ? - bne .98 - - >PUSHBI $0D Line separator for TXT file - >PUSHBI $FF - - ldy #SRC.COUNT - lda (pData),y - clc - adc #SRC.hREFNUMS - tay - lda (pData),y - >PUSHA - >SYSCALL MLINewLine - bcs .99 +* bne .98 .8 ldy #SRC.COUNT lda (pData),y @@ -292,8 +265,8 @@ FIO.LOAD.ASM.T ldy #ASM.T.hMem sta (pData),y .1 >PUSHW L.ASM.T.FILENAME - >PUSHW L.MSG.T.FILE - >LIBCALL hLIBSTR,LIBSTR.PRINTF + >LDYA L.MSG.T.FILE + >SYSCALL PrintFYA >PUSHWI 0 Aux type >PUSHBI 6 S.FILEINFO.TYPE.BIN diff --git a/BIN/ASM.S.SRC.txt b/BIN/ASM.S.SRC.txt index 4529768e..2e278b09 100644 --- a/BIN/ASM.S.SRC.txt +++ b/BIN/ASM.S.SRC.txt @@ -24,8 +24,8 @@ SRC.PrintLine ldy #ASM.MACRO.ON >PUSHB (pData),y dey >PUSHB (pData),y - >PUSHW L.MSG.SRCLINE - >LIBCALL hLIBSTR,LIBSTR.PRINTF + >LDYA L.MSG.SRCLINE + >SYSCALL PrintFYA .9 rts *--------------------------------------- SRC.PrintLineErr ldx #0 diff --git a/BIN/ASM.S.SYM.txt b/BIN/ASM.S.SYM.txt index f2addace..d7c9b867 100644 --- a/BIN/ASM.S.SYM.txt +++ b/BIN/ASM.S.SYM.txt @@ -62,8 +62,8 @@ SYM.Quit ldy #SYM.pLastGBlock .8 clc rts *--------------------------------------- -SYM.Dump >PUSHW L.MSG.SYMBOLS - >LIBCALL hLIBSTR,LIBSTR.PRINTF +SYM.Dump >LDYA L.MSG.SYMBOLS + >SYSCALL PrintFYA ldy #SYM.DumpCount lda #20 @@ -102,8 +102,8 @@ SYM.Dump >PUSHW L.MSG.SYMBOLS lda SRC.GLabel.Value+2 >PUSHA - >PUSHW L.MSG.GSYMBOL - >LIBCALL hLIBSTR,LIBSTR.PRINTF + >LDYA L.MSG.GSYMBOL + >SYSCALL PrintFYA bcs .9 @@ -115,8 +115,8 @@ SYM.Dump >PUSHW L.MSG.SYMBOLS >PUSHA pla >PUSHA - >PUSHW L.MSG.LSYMBOL - >LIBCALL hLIBSTR,LIBSTR.PRINTF + >LDYA L.MSG.LSYMBOL + >SYSCALL PrintFYA bcc .4 rts diff --git a/BIN/ASM.S.txt b/BIN/ASM.S.txt index 4bf8efef..091c71c5 100644 --- a/BIN/ASM.S.txt +++ b/BIN/ASM.S.txt @@ -10,7 +10,6 @@ AUTO 6 *--------------------------------------- .INB /A2OSX.DEV/INC/MACROS.I .INB /A2OSX.DEV/INC/A2OSX.I - .INB /A2OSX.DEV/INC/LIBSTR.I *--------------------------------------- ZPPtr1 .EQ ZPBIN ZPPtr2 .EQ ZPBIN+2 @@ -71,7 +70,6 @@ CS.START cld .DA CS.RUN .DA CS.DOEVENT .DA CS.QUIT -L.LIBSTR .DA LIBSTR L.MSG.HELP .DA MSG.HELP L.MSG.SRCLINE .DA MSG.SRCLINE L.MSG.ERROR .DA MSG.ERROR @@ -151,11 +149,7 @@ J.EXP.OP .DA EXP.OP.EOR ^!|&<=>+-*/ .DA EXP.OP.DIV .DA 0 *--------------------------------------- -CS.INIT >LDYA L.LIBSTR - >SYSCALL LoadLibYA - sta hLIBSTR - - >SYSCALL GetArgC +CS.INIT >SYSCALL GetArgC cmp #1 beq .99 No arg, new file.... @@ -183,8 +177,8 @@ CS.INIT >LDYA L.LIBSTR clc rts -.99 >PUSHW L.MSG.HELP - >LIBCALL hLIBSTR,LIBSTR.PRINTF +.99 >LDYA L.MSG.HELP + >SYSCALL PrintFYA lda #ERR.INV.ARGS sec .9 rts @@ -205,8 +199,8 @@ CS.RUN ldy #bCANCEL lda (pData),y inc >PUSHA - >PUSHW L.MSG.PASS - >LIBCALL hLIBSTR,LIBSTR.PRINTF + >LDYA L.MSG.PASS + >SYSCALL PrintFYA ldy #SRC.hFILENAME lda (pData),y @@ -235,8 +229,8 @@ CS.RUN ldy #bCANCEL .1 jsr SYM.Dump - >PUSHW L.MSG.SUMMARY - >LIBCALL hLIBSTR,LIBSTR.PRINTF + >LDYA L.MSG.SUMMARY + >SYSCALL PrintFYA lda #0 End of assembly, exit with no error .99 sec @@ -256,8 +250,8 @@ CS.RUN ldy #bCANCEL pha >PUSHA >PUSHW SRC.LINENUM - >PUSHW L.MSG.ERROR - >LIBCALL hLIBSTR,LIBSTR.PRINTF + >LDYA L.MSG.ERROR + >SYSCALL PrintFYA pla sec rts @@ -313,9 +307,7 @@ CS.QUIT jsr FIO.FileClose >SYSCALL FreeMemA -.8 lda hLIBSTR - >SYSCALL UnloadLibA - clc +.8 clc rts *--------------------------------------- .INB BIN/ASM.S.DIR @@ -422,7 +414,6 @@ T.LI .HS 03 .AS "OFF" .HS 00 *--------------------------------------- -LIBSTR >PSTR "libstr.o" MSG.HELP >CSTR "A2osX-Macro Assembler (S-C MASM 3.0 Based)\nUsage : ASM [type TXT ($04) or S-C/BAS ($FA)]\n" MSG.PASS >CSTR "Pass:#%d\n" MSG.SRC.FILE >CSTR "Reading SRC File:%S\n" @@ -440,7 +431,6 @@ SRC.EXP.RESERVED >PSTR "^!|&<=>+-*/" ASM.T.DEFAULT .AS ".T.6502" ASM.T.FILENAMELEN .BS 1 ASM.T.FILENAME .BS 65 -hLIBSTR .BS 1 FIO.hFileName .BS 1 FIO.hFullPath .BS 1 @@ -489,8 +479,7 @@ bCANCEL .BS 1 SRC.hFILENAME .BS 1 SRC.COUNT .BS 1 -SRC.hREFNUMS .BS SRC.IN.MAXDEPTH -SRC.hBUFFERS .BS SRC.IN.MAXDEPTH +SRC.hFILES .BS SRC.IN.MAXDEPTH SRC.hFILETYPES .BS SRC.IN.MAXDEPTH DST.hFILENAME .BS 1 diff --git a/BIN/PS.S.txt b/BIN/PS.S.txt index 50a5248d..74aab67f 100644 --- a/BIN/PS.S.txt +++ b/BIN/PS.S.txt @@ -52,14 +52,14 @@ CS.INIT >LDYAI TSKMGR.TABLE+S.PS >SYSCALL GetMemPtrA >PUSHYA - ldy #S.PS.PID + ldy #S.PS.PPID lda (ZPPTR1),y >PUSHA Parent PID lda (ZPPTR1) push flags >PUSHA - ldy #S.PS.ID + ldy #S.PS.PID lda (ZPPTR1),y >PUSHA PID >LDYA L.MSG1 diff --git a/INC/A2osX.I.txt b/INC/A2osX.I.txt index 908f7448..846e9123 100644 --- a/INC/A2osX.I.txt +++ b/INC/A2osX.I.txt @@ -65,6 +65,8 @@ KrnBuf256 .EQ $0C00 Main MLICALL.PARAMS .EQ $0D00 Main, $12 bytes min !!!! KrnSTAT .EQ $0D12 *-------------------------------------- +KrnOut256 .EQ $0E00 Used to return Values to User Space +*-------------------------------------- *** Z80 Reserved $0F00-10FF*** *-------------------------------------- Z80STACK .EQ $0FFF (0FFFFh) Down to $0F00 @@ -170,7 +172,7 @@ SYS.FOPEN.A .EQ $04 Append SYS.FOPEN.T .EQ $08 Open/Append in Text mode SYS.FOPEN.X .EQ $80 Create if not exists -SYS.FCLOSEA .EQ $22 +SYS.FCloseA .EQ $22 SYS.FREAD .EQ $24 SYS.FWRITE .EQ $26 @@ -367,8 +369,8 @@ S.PS.F.HOLD .EQ %00100000 S.PS.F.SLEEP .EQ %00010000 S.PS.F.EVENT .EQ %00001000 S.PS.F.ENV .EQ %00000100 -S.PS.ID .EQ 1 -S.PS.PID .EQ 2 +S.PS.PID .EQ 1 +S.PS.PPID .EQ 2 S.PS.hCS .EQ 3 S.PS.hDS .EQ 4 S.PS.hPREFIX .EQ 5 @@ -378,8 +380,8 @@ S.PS.UID .EQ 8 S.PS.hINDEV .EQ 9 S.PS.hOUTDEV .EQ 10 S.PS.hERRDEV .EQ 11 -S.PS.CID .EQ 12 -S.PS.LASTERROR .EQ 13 +S.PS.CPID .EQ 12 +S.PS.RC .EQ 13 S.PS.PC .EQ 14 * S.PS .EQ 16 @@ -439,7 +441,7 @@ S.STAT.MODE.RG .EQ $0020 S.STAT.MODE.XU .EQ $0040 S.STAT.MODE.WU .EQ $0080 S.STAT.MODE.RU .EQ $0100 -*S.STAT.MODE.SST .EQ $0200 +*S.STAT.MODE.SST .EQ $0200 *S.STAT.MODE.SGID .EQ $0400 *S.STAT.MODE.SUID .EQ $0800 diff --git a/INC/PRODOS.I.txt b/INC/PRODOS.I.txt index aa00d044..964d6bf4 100644 --- a/INC/PRODOS.I.txt +++ b/INC/PRODOS.I.txt @@ -112,43 +112,43 @@ MLI.ERR.VOLFULL .EQ $49 MLI.ERR.EOF .EQ $4C *-------------------------------------- MLI .EQ $BF00 -JSPARE .EQ $BF03 +*JSPARE .EQ $BF03 DATETIME .EQ $BF06 SYSERR .EQ $BF09 SYSDEATH .EQ $BF0C SERR .EQ $BF0F -DEVPTRS0D1 .EQ $BF10 -DEVPTRS1D1 .EQ $BF12 -DEVPTRS2D1 .EQ $BF14 -DEVPTRS3D1 .EQ $BF16 -DEVPTRS4D1 .EQ $BF18 -DEVPTRS5D1 .EQ $BF1A -DEVPTRS6D1 .EQ $BF1C -DEVPTRS7D1 .EQ $BF1E -DEVPTRS0D2 .EQ $BF20 -DEVPTRS1D2 .EQ $BF22 -DEVPTRS2D2 .EQ $BF24 +*DEVPTRS0D1 .EQ $BF10 +*DEVPTRS1D1 .EQ $BF12 +*DEVPTRS2D1 .EQ $BF14 +*DEVPTRS3D1 .EQ $BF16 +*DEVPTRS4D1 .EQ $BF18 +*DEVPTRS5D1 .EQ $BF1A +*DEVPTRS6D1 .EQ $BF1C +*DEVPTRS7D1 .EQ $BF1E +*DEVPTRS0D2 .EQ $BF20 +*DEVPTRS1D2 .EQ $BF22 +*DEVPTRS2D2 .EQ $BF24 DEVPTRS3D2 .EQ $BF26 -DEVPTRS4D2 .EQ $BF28 -DEVPTRS5D2 .EQ $BF2A -DEVPTRS6D2 .EQ $BF2C -DEVPTRS7D2 .EQ $BF2E +*DEVPTRS4D2 .EQ $BF28 +*DEVPTRS5D2 .EQ $BF2A +*DEVPTRS6D2 .EQ $BF2C +*DEVPTRS7D2 .EQ $BF2E DEVNUM .EQ $BF30 DEVCNT .EQ $BF31 DEVLST .EQ $BF32 -> $BF3F DEVLST0END .EQ $BF40 A 0 was added to ensure list ended with 0 if 14 devices in list PRODOSCOPYRIGHT .EQ $BF41 ;free->$BF4B MEMTABL .EQ $BF58 -> $BF6F -GL.BUFF .EQ $BF70 -INTRUPT1 .EQ $BF80 -INTRUPT2 .EQ $BF82 -INTRUPT3 .EQ $BF84 -INTRUPT4 .EQ $BF86 +*GL.BUFF .EQ $BF70 +*INTRUPT1 .EQ $BF80 +*INTRUPT2 .EQ $BF82 +*INTRUPT3 .EQ $BF84 +*INTRUPT4 .EQ $BF86 DATELO .EQ $BF90 TIMELO .EQ $BF92 LEVEL .EQ $BF94 BUBIT .EQ $BF95 -SPARE1 .EQ $BF96 +*SPARE1 .EQ $BF96 MACHID .EQ $BF98 MACHID.TYPE .EQ %11001000 MACHID.TYPE.II .EQ %00000000 @@ -172,9 +172,9 @@ SAVEY .EQ $BF9F *-------------------------------------- * code $BFA0 -> $BFF3 *-------------------------------------- -BNKBYT1 .EQ $BFF4 -BNKBYT2 .EQ $BFF5 -SYS.RTS .EQ $BFF6 code -> $BFFB +*BNKBYT1 .EQ $BFF4 +*BNKBYT2 .EQ $BFF5 +*SYS.RTS .EQ $BFF6 code -> $BFFB IBAKVER .EQ $BFFC IVERSION .EQ $BFFD KBAKVER .EQ $BFFE diff --git a/SBIN/SHELL.S.CMD.txt b/SBIN/SHELL.S.CMD.txt index 3e1b8348..516120e7 100644 --- a/SBIN/SHELL.S.CMD.txt +++ b/SBIN/SHELL.S.CMD.txt @@ -9,11 +9,10 @@ AUTO 6 *-------------------------------------- Cmd.ExecYA stz Cmd.Exec.Mode Cmd.ExecYA.1 >SYSCALL ExpandPStrYA - bcs .99 - stx hCmdLine - >STYA ZPPtr1 + phx + ldy #1 ldx #0 ARGS len @@ -48,7 +47,7 @@ Cmd.ExecYA.1 >SYSCALL ExpandPStrYA .13 stx ARGS update ARGS len - lda hCmdLine Discard Expanded Cmd Line + pla >SYSCALL FreeMemA >LDYA L.CMDS @@ -82,17 +81,14 @@ Cmd.ExecYA.1 >SYSCALL ExpandPStrYA bcc .1 inc ZPPtr2+1 bra .1 - -.99 rts *-------------------------------------- Cmd.Exec.EXT ldy #1 lda CMD,y cmp #'/' Command line is already full path, no search - bne .10 - jmp .3 + beq .3 -.10 >LDYA L.ENV.PATH push ENVNAME=PATH for search - >SYSCALL GetEnvYA get value for ENV=PATH + >LDYA L.ENV.PATH push ENVNAME=PATH for search + >SYSCALL GetEnvYA get value for ENV=PATH bcs .1 No PATH, try in CD >PUSHYA push search list @@ -116,9 +112,9 @@ Cmd.Exec.EXT ldy #1 >PUSHW L.CMD replace CMD in TmpBuffer with full path >SYSCALL PStrCpy pla - >SYSCALL FreeMemA Discard this string... + >SYSCALL FreeMemA Discard this string... -.3 stz UsrBuf256 reset UsrBuf256 for final CMDLINE +.3 stz UsrBuf256 reset UsrBuf256 for final CMDLINE >PUSHW L.STAT >PUSHW L.CMD @@ -295,7 +291,7 @@ Cmd.Exec.CD1 stz UsrBuf256 ldy #S.PS.hPREFIX sta (pPs),y - + jsr SetPWD clc .9 rts *-------------------------------------- diff --git a/SBIN/SHELL.S.ERR.txt b/SBIN/SHELL.S.ERR.txt new file mode 100644 index 00000000..33f2ec2b --- /dev/null +++ b/SBIN/SHELL.S.ERR.txt @@ -0,0 +1,52 @@ +PR#3 +PREFIX /A2OSX.SRC +NEW +INC 1 +AUTO 6 + .LIST OFF +*-------------------------------------- +ERR.Print >PUSHA Save EC for PrintF + + ldx L.ERR.Codes + stx ZPPTR1 + ldx L.ERR.Codes+1 + stx ZPPTR1+1 + + ldy #0 + +.1 cmp (ZPPTR1),y + beq .2 + iny + cpy #ERR.Count + bne .1 + +.2 sty .3+1 + + lda L.ERR.Messages + sta ZPPTR1 + lda L.ERR.Messages+1 + sta ZPPTR1+1 + + ldy #0 + +.3 cpy #$ff Self Modified + beq .8 + + lda (ZPPTR1) + sec + adc ZPPTR1 + sta ZPPTR1 + bcc .4 + inc ZPPTR1+1 +.4 iny + bra .3 + +.8 >PUSHW ZPPTR1 + >LDYA L.MSG.ERROR + >SYSCALL PrintFYA + rts +*-------------------------------------- +MAN +SAVE SBIN/SHELL.S.ERR +LOAD SBIN/SHELL.S +ASM diff --git a/SBIN/SHELL.S.TXT.txt b/SBIN/SHELL.S.TXT.txt index 9ac96ece..9893487d 100644 --- a/SBIN/SHELL.S.TXT.txt +++ b/SBIN/SHELL.S.TXT.txt @@ -59,7 +59,7 @@ TXT.CloseFile ldy #hInputFile lda (pData),y beq .9 - >SYSCALL FCLOSEA + >SYSCALL FCloseA .9 lda #0 ldy #hInputFile diff --git a/SBIN/SHELL.S.txt b/SBIN/SHELL.S.txt index 661719e9..dc9f9948 100644 --- a/SBIN/SHELL.S.txt +++ b/SBIN/SHELL.S.txt @@ -38,11 +38,14 @@ CS.START cld .DA CS.QUIT *-------------------------------------- L.MSG.GREETINGS .DA MSG.GREETINGS +L.MSG.PROMPT .DA MSG.PROMPT L.MSG.ECHO .DA MSG.ECHO L.MSG.ERROR .DA MSG.ERROR L.MSG.PSTR .DA MSG.PSTR L.MSG.PRINTENV .DA MSG.PRINTENV L.ENV.PATH .DA ENV.PATH +L.ENV.PWD .DA ENV.PWD +L.ENV.PS1 .DA ENV.PS1 L.CMD .DA CMD L.ARGS .DA ARGS L.TIME .DA TIME @@ -61,9 +64,13 @@ J.INTCMDS .DA Cmd.Exec.CD .DA Cmd.Exec.STARTPROC .DA Cmd.Exec.TIME .DA Cmd.Exec.TYPE +L.ERR.Codes .DA ERR.Codes +L.ERR.Messages .DA ERR.Messages .DA 0 *-------------------------------------- -CS.INIT >SYSCALL GetArgC +CS.INIT jsr SetPWD + + >SYSCALL GetArgC cmp #1 beq CS.INIT.INTERACTIVE no arg, continue starting interactive @@ -138,7 +145,11 @@ CS.RUN lda #0 bcc .8 tay beq .8 - jsr PrintError + + pha + jsr ERR.Print + pla + bcs .99 .8 ldy #bEXIT lda (pData),y @@ -319,7 +330,7 @@ CS.QUIT jsr HIS.Quit ldy #hInputFile lda (pData),y beq .1 - >SYSCALL FCLOSEA + >SYSCALL FCloseA .1 .8 clc @@ -327,20 +338,25 @@ CS.QUIT jsr HIS.Quit *-------------------------------------- * PRIVATE *-------------------------------------- -PrintPrompt lda #'$' - >SYSCALL COutA - bcs .9 - lda #' ' - >SYSCALL COutA -.9 rts -*-------------------------------------- -PrintError pha - >PUSHA - >LDYA L.MSG.ERROR - >SYSCALL PrintFYA - pla +SetPWD ldy #S.PS.hPREFIX + lda (pPs),y + >SYSCALL GetMemPtrA + >PUSHYA + >PUSHW L.ENV.PWD + >SYSCALL SetEnv rts *-------------------------------------- +PrintPrompt >LDYA L.ENV.PS1 + >SYSCALL GetEnvYA + >SYSCALL ExpandPStrYA + phx + >PUSHYA + pla + >SYSCALL FreeMemA + >LDYA L.MSG.PROMPT + >SYSCALL PrintFYA +.9 rts +*-------------------------------------- * Remove extra SPACE & comment *-------------------------------------- CmdBuffer.Normalize @@ -418,12 +434,15 @@ CmdBuffer.DEL lda (pData) .9 rts *-------------------------------------- .INB SBIN/SHELL.S.CMD + .INB SBIN/SHELL.S.ERR .INB SBIN/SHELL.S.HIS .INB SBIN/SHELL.S.TXT *-------------------------------------- CS.END *-------------------------------------- ENV.PATH >PSTR "PATH" +ENV.PWD >PSTR "PWD" +ENV.PS1 >PSTR "PS1" CMDS >PSTR "CD" >PSTR "DATE" >PSTR "ECHO" @@ -438,12 +457,15 @@ CMDS >PSTR "CD" .HS 00 *-------------------------------------- MSG.GREETINGS >CSTR "\nA2osX-Shell on Dev=%h\n\n" +MSG.PROMPT >CSTR "%S$ " MSG.ECHO >CSTR ">%S\n" -MSG.ERROR >CSTR "[%h]\n" +MSG.ERROR >CSTR "%S ($%h)\n" FMT.DATE >PSTR "%A, %B %d %Y" FMT.TIME >PSTR "%H:%M:%S (%I:%M:%S%p)" MSG.PSTR >CSTR "%S\n" MSG.PRINTENV >CSTR "%S=%S\n" +*-------------------------------------- + .INB X.ERRORS.S *-------------------------------------- EscChars >PSTR "DBAC" EscAscii .HS 04080A0B15 diff --git a/SYS/KERNEL.S.BIN.txt b/SYS/KERNEL.S.BIN.txt index a90a384d..e1042ffc 100644 --- a/SYS/KERNEL.S.BIN.txt +++ b/SYS/KERNEL.S.BIN.txt @@ -7,7 +7,7 @@ AUTO 6 *-------------------------------------- * BIN.LoadExeYA * in : -* A = hMem of FilePath (PSTRING) +* A = hMem of FilePath (PSTR) * out : * Y,A = MEMPTR * X = hMem of Code Segment diff --git a/SYS/KERNEL.S.CIO.txt b/SYS/KERNEL.S.CIO.txt index c6b656a4..9fa95fe0 100644 --- a/SYS/KERNEL.S.CIO.txt +++ b/SYS/KERNEL.S.CIO.txt @@ -9,9 +9,9 @@ AUTO 6 * Scan a PStr (in progress) * ##In: * PUSHW PTR to target buffer -* PUSHW PString pattern (ex: "%d.%d.%d.%d") +* PUSHW PSTR pattern (ex: "%d.%d.%d.%d") * %d : byte -* PUSHW PString to scan (ex: "192.168.1.5") +* PUSHW PSTR to scan (ex: "192.168.1.5") * ##Out: *\-------------------------------------- K.SScanF jsr PullPtr1Ptr2Ptr3 @@ -473,58 +473,6 @@ K.COutA phx plx rts *-------------------------------------- -* Convert HEXBUF to ASCBUF decimal padded with 0 -*-------------------------------------- -HEX2DEC ldx #4 - -.1 stz BCDBUF,x Clear all 5 bytes - dex - bpl .1 - - sed switch to BCD mode - - ldx #32 let's roll 32 bits - -.2 asl HEXBUF - rol HEXBUF+1 - rol HEXBUF+2 - rol HEXBUF+3 - - ldy #4 - -.3 lda BCDBUF,y - adc BCDBUF,y - sta BCDBUF,y - dey - bpl .3 - - dex - bne .2 - - cld - - ldy #4 - ldx #9 - -.4 lda BCDBUF,y - pha - and #$0F - ora #$30 - sta ASCBUF,x - dex - pla - lsr - lsr - lsr - lsr - ora #$30 - sta ASCBUF,x - dey - dex - bpl .4 - - rts -*-------------------------------------- PRINTDEC lda PADLEN any Len format ? beq .1 no @@ -569,84 +517,8 @@ PRINTDEC lda PADLEN any Len format ? clc .9 rts *-------------------------------------- -* Convert ASCBUF decimal to HEXBUF -*-------------------------------------- -DEC2HEX stz HEXBUF - stz HEXBUF+1 - stz HEXBUF+2 - stz HEXBUF+3 - - ldx #0 - -.1 lda HEXBUF+3 save HEXBUF for 4+1 - pha - lda HEXBUF+2 - pha - lda HEXBUF+1 - pha - lda HEXBUF - pha - - asl HEXBUF HEXBUF * 2 -> HEXBUF - rol HEXBUF+1 - rol HEXBUF+2 - rol HEXBUF+3 -* bcs .9 overflow!!! - - asl HEXBUF HEXBUF * 4 -> HEXBUF - rol HEXBUF+1 - rol HEXBUF+2 - rol HEXBUF+3 -* bcs .9 overflow!!! - - pla HEXBUF * 4 + HEXBUF -> HEXBUF - adc HEXBUF - sta HEXBUF - pla - adc HEXBUF+1 - sta HEXBUF+1 - pla - adc HEXBUF+2 - sta HEXBUF+2 - pla - adc HEXBUF+3 - sta HEXBUF+3 -* bcs .99 overflow!!! - - asl HEXBUF HEXBUF * 10 -> HEXBUF - rol HEXBUF+1 - rol HEXBUF+2 - rol HEXBUF+3 -* bcs .99 overflow!!! - - inx - lda ASCBUF,x - and #$0F - - adc HEXBUF - sta HEXBUF - bcc .2 - inc HEXBUF+1 - bne .2 - inc HEXBUF+2 - bne .2 - inc HEXBUF+3 - -.2 cpx ASCBUF - bne .1 - rts - -*.9 pla discard saved HEXBUF -* pla -* pla -* pla -*.99 rts -*-------------------------------------- TYPES .AS "-pcbdls" ACCESS .AS "rwxrwxrwx" -HEXBUF .BS 4 32 bits max -BCDBUF .BS 5 5, enough to handle 10 digits (32bits) -ASCBUF .BS 12 LEN + sign + 10 digits ($FFFFFFFF=4.294.967.295) SIGN .BS 1 PADLEN .BS 1 PADCHAR .BS 1 diff --git a/SYS/KERNEL.S.CNV.txt b/SYS/KERNEL.S.CNV.txt new file mode 100644 index 00000000..f10c0598 --- /dev/null +++ b/SYS/KERNEL.S.CNV.txt @@ -0,0 +1,140 @@ +PR#3 +PREFIX /A2OSX.SRC +NEW +INC 1 +AUTO 6 + .LIST OFF +*-------------------------------------- +* Convert HEXBUF to ASCBUF decimal padded with 0 +*-------------------------------------- +HEX2DEC ldx #4 + +.1 stz BCDBUF,x Clear all 5 bytes + dex + bpl .1 + + sed switch to BCD mode + + ldx #32 let's roll 32 bits + +.2 asl HEXBUF + rol HEXBUF+1 + rol HEXBUF+2 + rol HEXBUF+3 + + ldy #4 + +.3 lda BCDBUF,y + adc BCDBUF,y + sta BCDBUF,y + dey + bpl .3 + + dex + bne .2 + + cld + + ldy #4 + ldx #9 + +.4 lda BCDBUF,y + pha + and #$0F + ora #$30 + sta ASCBUF,x + dex + pla + lsr + lsr + lsr + lsr + ora #$30 + sta ASCBUF,x + dey + dex + bpl .4 + + rts +*-------------------------------------- +* Convert ASCBUF decimal to HEXBUF +*-------------------------------------- +DEC2HEX stz HEXBUF + stz HEXBUF+1 + stz HEXBUF+2 + stz HEXBUF+3 + + ldx #0 + +.1 lda HEXBUF+3 save HEXBUF for 4+1 + pha + lda HEXBUF+2 + pha + lda HEXBUF+1 + pha + lda HEXBUF + pha + + asl HEXBUF HEXBUF * 2 -> HEXBUF + rol HEXBUF+1 + rol HEXBUF+2 + rol HEXBUF+3 +* bcs .9 overflow!!! + + asl HEXBUF HEXBUF * 4 -> HEXBUF + rol HEXBUF+1 + rol HEXBUF+2 + rol HEXBUF+3 +* bcs .9 overflow!!! + + pla HEXBUF * 4 + HEXBUF -> HEXBUF + adc HEXBUF + sta HEXBUF + pla + adc HEXBUF+1 + sta HEXBUF+1 + pla + adc HEXBUF+2 + sta HEXBUF+2 + pla + adc HEXBUF+3 + sta HEXBUF+3 +* bcs .99 overflow!!! + + asl HEXBUF HEXBUF * 10 -> HEXBUF + rol HEXBUF+1 + rol HEXBUF+2 + rol HEXBUF+3 +* bcs .99 overflow!!! + + inx + lda ASCBUF,x + and #$0F + + adc HEXBUF + sta HEXBUF + bcc .2 + inc HEXBUF+1 + bne .2 + inc HEXBUF+2 + bne .2 + inc HEXBUF+3 + +.2 cpx ASCBUF + bne .1 + rts + +*.9 pla discard saved HEXBUF +* pla +* pla +* pla +*.99 rts +*-------------------------------------- +HEXBUF .BS 4 32 bits max +BCDBUF .BS 5 5, enough to handle 10 digits (32bits) +ASCBUF .BS 12 LEN + sign + 10 digits ($FFFFFFFF=4.294.967.295) +*-------------------------------------- +MAN +SAVE SYS/KERNEL.S.CNV +LOAD SYS/KERNEL.S +ASM diff --git a/SYS/KERNEL.S.DAT.txt b/SYS/KERNEL.S.DAT.txt index af1e2a4b..de142715 100644 --- a/SYS/KERNEL.S.DAT.txt +++ b/SYS/KERNEL.S.DAT.txt @@ -13,6 +13,8 @@ TSKMGR.LASTID .BS 1 ENV.DRV >PSTR "DRV" ENV.LIB >PSTR "LIB" *-------------------------------------- +EmptyPSTR .DA #0 +*-------------------------------------- MAN SAVE SYS/KERNEL.S.DAT LOAD SYS/KERNEL.S diff --git a/SYS/KERNEL.S.ENV.txt b/SYS/KERNEL.S.ENV.txt index bd8084ff..09e65b0d 100644 --- a/SYS/KERNEL.S.ENV.txt +++ b/SYS/KERNEL.S.ENV.txt @@ -4,19 +4,21 @@ NEW INC 1 AUTO 6 .LIST OFF -*-------------------------------------- -* K.ExpandPStrYA -* In: -* Y,A = PTR to String to Expand (PSTRING) -* Out: -* X = hMem to Expanded String (PSTRING) -* Y,A = PTR to Expanded String -*-------------------------------------- -K.ExpandPStrYA - >STYA ZPQuickPtr3 - - stz KrnBuf256 init Expanded String len=0 +*/-------------------------------------- +* #ExpandPStrYA +* ##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... +.11 >STYA ZPQuickPtr3 + + stz KrnBuf256 init Expanded String len=0 + stz K.ExpandPStr.bFound No var found yet + stz K.ExpandPStr.bNoExp Reset no expand flag ldy #0 .10 stz K.ExpandPStr.Start @@ -27,29 +29,43 @@ K.ExpandPStrYA iny lda (ZPQuickPtr3),y + + cmp #''' + bne .21 + lda K.ExpandPStr.bNoExp + eor #$ff + sta K.ExpandPStr.bNoExp toggle flag + bra .1 + +.21 bit K.ExpandPStr.bNoExp + bmi .22 + ldx K.ExpandPStr.Start bne .3 already in a var? cmp #'$' no, found one ? beq .2 - inc KrnBuf256 no, copy char +.22 inc KrnBuf256 no, copy char ldx KrnBuf256 sta KrnBuf256,x bra .1 -.2 sty K.ExpandPStr.Start save var start +.2 sec + ror K.ExpandPStr.bFound Toggle flag + + sty K.ExpandPStr.Start save var start stz K.ExpandPStr.End bra .1 skip this char -.3 cmp #'{' in var, "{" after "$"? +.3 cmp #'{' we are in var, "{" after "$"? beq .2 cmp #'}' end of var? beq .5 -.4 jsr K.ExpandPStr.VC valid char ? + jsr K.ExpandPStr.VC we are in var, is char valid? bcs .5 no, end here sty K.ExpandPStr.End yes, save end bra .1 @@ -64,13 +80,26 @@ K.ExpandPStrYA .6 sty K.ExpandPStr.End end of PSTR lda K.ExpandPStr.Start are we in a var? - beq .7 no...exit... + beq .8 no...exit... jsr K.ExpandPStr.AV yes, expand and add to STR -.7 >LDYAI KrnBuf256 +.8 lda K.ExpandPStr.hPStr working from our temp string ? + beq .81 no... + + jsr K.FreeMemA yes, discard.... + +.81 >LDYAI KrnBuf256 jsr K.NewPStrYA - rts + bcs .9 + stx K.ExpandPStr.hPStr save this as temp string, in case of recurse + bit K.ExpandPStr.bFound Did we expand something ? + bpl .9 + jmp .11 Yes, start over with hPStr + +* or exit with Y,A & X from K.NewPStrYA + +.9 rts *-------------------------------------- K.ExpandPStr.AV lda K.ExpandPStr.End sec @@ -138,9 +167,15 @@ K.ExpandPStr.VC cmp #'0' *-------------------------------------- K.ExpandPStr.Start .BS 1 K.ExpandPStr.End .BS 1 -*-------------------------------------- -* K.PutEnvYA -*-------------------------------------- +K.ExpandPStr.bFound .BS 1 +K.ExpandPStr.bNoExp .BS 1 +K.ExpandPStr.hPStr .BS 1 +*/-------------------------------------- +* #PutEnvYA +* ##In: +* Y,A = PTR to String NAME=VALUE (PSTR) +* ##Out: +*\-------------------------------------- K.PutEnvYA >STYA ZPQuickPtr2 NAME=VALUE lda (ZPQuickPtr2) beq .9 @@ -192,13 +227,13 @@ K.PutEnvYA >STYA ZPQuickPtr2 NAME=VALUE .9 sec rts -*-------------------------------------- -* K.SetEnv -* In: -* PULLW = PTR To Name (PSTRING) -* PULLW = PTR To Value (PSTRING) -* Out: -*-------------------------------------- +*/-------------------------------------- +* #SetEnv +* ##In: +* PUSHW = PTR To Value (PSTR) +* PUSHW = PTR To Name (PSTR) +* ##Out: +*\-------------------------------------- K.SetEnv >PULLW ZPQuickPtr2 NAME... >PULLW ZPQuickPtr3 ...VALUE @@ -272,30 +307,33 @@ K.SetEnvPtr2Ptr3 .99 lda #SYSMGR.ERRENVF sec rts -*-------------------------------------- -* K.GetEnvYA -* In: -* Y,A = PTR to NAME (PSTRING) -* Out: -* CC : Y,A = PTR to VALUE (PSTRING) +*/-------------------------------------- +* #GetEnvYA +* ##In: +* Y,A = PTR to NAME (PSTR) +* ##Out: +* CC : Y,A = PTR to VALUE (PSTR) * CS : not found -*-------------------------------------- +*\-------------------------------------- K.GetEnvYA >STYA ZPQuickPtr2 jsr ENV.CheckSysVarPtr2 - bcc .9 + bcc .8 jsr ENV.FindVarPtr2 bcs .9 jsr ENV.NextEnvPtr1 Skip NAME >LDYA ZPQuickPtr1 clc just in case ADC in NextEnvPtr1 disturb CC -.9 rts -*-------------------------------------- -* K.UnsetEnvYA -* In: -* YA = PTR To Name (PSTRING) -* Out: -*-------------------------------------- +.8 rts + +.9 >LDYAI EmptyPSTR + rts +*/-------------------------------------- +* #UnsetEnvYA +* ##In: +* Y,A = PTR To Name (PSTR) +* ##Out: +*\-------------------------------------- K.UnsetEnvYA >STYA ZPQuickPtr2 Store VAR Name S.UnsetEnvPtr2 jsr ENV.FindVarPtr2 bcs .8 not found, quit @@ -325,24 +363,74 @@ ENV.CheckSysVarPtr2 cmp #'0' $0...$9 ?? bcc .1 no, cmp #'9'+1 - bcs .99 + bcs .1 and #$0F jmp K.GetArgA -.1 cmp #'*' $* : All ARGS - bne .9 - - cmp #'#' $# : ARGC - bne .9 - - cmp #'?' $? : RC - bne .9 - - cmp #'$' $$ : PID - bne .9 +.1 ldx #ENV.SysVarsJmp-ENV.SysVars-1 +.2 cmp ENV.SysVars,x + beq .3 + dex + bpl .2 + .9 sec -.99 rts + rts + +.3 txa + asl + tax + jmp (ENV.SysVarsJmp,x) +*-------------------------------------- +ENV.SysVars .AS "*#?$!" +ENV.SysVarsJmp .DA ENV.SysVarsArgs + .DA ENV.SysVarsArgC + .DA ENV.SysVarsRC + .DA ENV.SysVarsPID + .DA ENV.SysVarsCPID +*-------------------------------------- +ENV.SysVarsArgs sec + rts +ENV.SysVarsArgC jsr K.GetArgC + bra ENV.SysVarsA +ENV.SysVarsRC ldy #S.PS.RC + .HS 2C +ENV.SysVarsPID ldy #S.PS.PID + .HS 2C +ENV.SysVarsCPID ldy #S.PS.CPID + lda (pPS),y +ENV.SysVarsA sta HEXBUF + stz HEXBUF+1 + stz HEXBUF+2 + stz HEXBUF+3 + jsr HEX2DEC + + ldx #0 + +.1 lda ASCBUF,x + cmp #'0' + bne .2 + inx + cpx #10 + bne .1 + + sta KrnOut256+1 + ldy #1 + bne .8 always + +.2 ldy #0 + +.3 lda ASCBUF,x + iny + sta KrnOut256,y + inx + cpx #10 + bne .3 + +.8 sty KrnOut256 + >LDYAI KrnOut256 + clc + rts *-------------------------------------- * ENV.FindVarPtr2 * In: diff --git a/SYS/KERNEL.S.FILE.txt b/SYS/KERNEL.S.FILE.txt index a77a8e3a..21c00266 100644 --- a/SYS/KERNEL.S.FILE.txt +++ b/SYS/KERNEL.S.FILE.txt @@ -102,7 +102,7 @@ K.FOPEN jsr PFT.CheckPathSTK rts CC .98 pha save MLI error - jsr K.FCLOSEA.1 + jsr K.FCloseA.1 pla get back MLI error sec .99 rts @@ -141,9 +141,9 @@ K.FCloseA.1 ldy #S.FILE.PRODOS.REF * #FRead * Read bytes from file * ##In : -* PULLB = hFILE -* PULLW = Bytes To Read -* PULLW = Dest Ptr +* PUSHW = Dest Ptr +* PUSHW = Bytes To Read +* PUSHB = hFILE * ##Out : * Y,A = Bytes Read *\-------------------------------------- @@ -153,9 +153,9 @@ K.FRead jsr PFT.CheckFileSTK */-------------------------------------- * #FWrite * ##In: -* PULLB = hFILE -* PULLW = Bytes To Write -* PULLW = Src Ptr +* PUSHW = Src Ptr +* PUSHW = Bytes To Write +* PUSHB = hFILE * #Out: * Y,A = Bytes Written *\-------------------------------------- diff --git a/SYS/KERNEL.S.FIO.txt b/SYS/KERNEL.S.FIO.txt index e827cd45..15287510 100644 --- a/SYS/KERNEL.S.FIO.txt +++ b/SYS/KERNEL.S.FIO.txt @@ -7,10 +7,10 @@ AUTO 6 */-------------------------------------- * #FileSearch * ##In: -* PUSHW = PSTR to Search Path (PSTRING) %LIB%;/SYS/SLIB -* PUSHW = PSTR to File Name (PSTRING) +* PUSHW = Ptr to Search Path (PSTR) %LIB%;/SYS/SLIB +* PUSHW = Ptr to File Name (PSTR) * #Out: -* Y,A = PSTR to FilePath (PSTRING) +* Y,A = PSTR to FilePath (PSTR) * X = hMem to FilePath *\-------------------------------------- K.FileSearch >PULLW ZPQuickPtr4 ZPQuickPtr1 trashed by ExpandPStrYA @@ -77,9 +77,9 @@ K.FileSearch.Index .BS 1 */-------------------------------------- * #GetFullPathYA * ##In : -* Y,A = Filename (PSTRING) +* Y,A = Filename (PSTR) * #Out : -* Y,A = FullPath (PSTRING) +* Y,A = FullPath (PSTR) * X = hMem of FullPath *\-------------------------------------- K.GetFullPathYA >STYA ZPQuickPtr3 Ptr1 & 2 used by StrCpy @@ -173,7 +173,7 @@ K.LoadFile jsr K.FOPEN .99 pha lda K.LoadFile.hFile - jsr K.FCLOSEA + jsr K.FCloseA pla sec rts @@ -209,7 +209,7 @@ K.SaveFile jsr K.FOPEN .99 pha lda K.LoadFile.hFile - jsr K.FCLOSEA + jsr K.FCloseA pla sec rts diff --git a/SYS/KERNEL.S.JMP.txt b/SYS/KERNEL.S.JMP.txt index cf4d6a1c..53af375c 100644 --- a/SYS/KERNEL.S.JMP.txt +++ b/SYS/KERNEL.S.JMP.txt @@ -30,7 +30,7 @@ KERNEL.SYSCALL .DA 0 *-------------------------------------- .DA K.FOPEN $20 - .DA K.FCLOSEA + .DA K.FCloseA .DA K.FREAD .DA K.FWRITE .DA K.FFLUSHA diff --git a/SYS/KERNEL.S.MEM.txt b/SYS/KERNEL.S.MEM.txt index 60aac3b9..58827013 100644 --- a/SYS/KERNEL.S.MEM.txt +++ b/SYS/KERNEL.S.MEM.txt @@ -126,7 +126,7 @@ K.GetMem >PULLB MemMgr.ReqFlags store requested flags ldy #S.MEM.REFCNT sta (ZPMemMgrSPtr),y - ldy #S.PS.ID + ldy #S.PS.PID lda (pPs),y ldy #S.MEM.OWNERPID sta (ZPMemMgrSPtr),y diff --git a/SYS/KERNEL.S.PS.txt b/SYS/KERNEL.S.PS.txt index c6cca8f2..1dc7574c 100644 --- a/SYS/KERNEL.S.PS.txt +++ b/SYS/KERNEL.S.PS.txt @@ -89,7 +89,7 @@ K.GetPSByIDA sta K.GetPSByIDA.PS .2 lda (ZPQuickPtr1) bpl .3 - ldy #S.PS.ID + ldy #S.PS.PID lda (ZPQuickPtr1),y cmp K.GetPSByIDA.PS beq .8 @@ -165,7 +165,7 @@ PS.CreateChild >LDYAI TskMgr.Table+S.PS jsr K.GetPSByIDA bcc .4 - ldy #S.PS.ID + ldy #S.PS.PID lda TSKMGR.LASTID sta (ZPQuickPtr3),y @@ -218,13 +218,13 @@ PS.CreateChild >LDYAI TskMgr.Table+S.PS cpy #S.PS.hERRDEV+1 bne .81 - ldy #S.PS.ID + ldy #S.PS.PID lda (pPs),y - ldy #S.PS.PID + ldy #S.PS.PPID sta (ZPQuickPtr3),y - ldy #S.PS.CID + ldy #S.PS.CPID lda TSKMGR.LASTID sta (pPs),y diff --git a/SYS/KERNEL.S.STR.txt b/SYS/KERNEL.S.STR.txt index e07c55b3..647f627b 100644 --- a/SYS/KERNEL.S.STR.txt +++ b/SYS/KERNEL.S.STR.txt @@ -12,7 +12,7 @@ AUTO 6 * ##Out: * CC : success * Y,A = PTR to String -* X = hMem (PSTRING) +* X = hMem (PSTR) * CS : error * A = SYS error code *\-------------------------------------- @@ -34,15 +34,15 @@ K.NewPStrYA >STYA ZPQuickPtr2 clc .9 rts -*-------------------------------------- +*/-------------------------------------- * #PStrCpy * Copy string * ##In: -* PUSHW = PSTR to SRC (PSTRING) -* PUSHW = PSTR to DST (PSTRING) +* PUSHW = Ptr to SRC (PSTR) +* PUSHW = Ptr to DST (PSTR) * ##Out: -* DST = SRC (PSTRING) -*-------------------------------------- +* DST = SRC (PSTR) +*\-------------------------------------- K.PStrCpy jsr PullPtr1Ptr2 K.PStrCpyPtr2Ptr1 @@ -58,15 +58,15 @@ K.PStrCpyPtr2Ptr1 .2 clc rts -*-------------------------------------- +*/-------------------------------------- * #PStrCat * Append SRC to DST * ##In: -* PUSHW = PSTR to SRC (PSTRING) -* PUSHW = PSTR to DST (PSTRING) +* PUSHW = Ptr to SRC (PSTR) +* PUSHW = Ptr to DST (PSTR) * ##Out: -* DST = DST+SRC (PSTRING) -*-------------------------------------- +* DST = DST+SRC (PSTR) +*\-------------------------------------- K.PStrCat jsr PullPtr1Ptr2 lda (ZPQuickPtr2) @@ -171,7 +171,7 @@ K.PStrMatch jsr PullPtr1Ptr2 * #PStrUprYA/PStrLwrYA * Convert string to UPPERCASE/lowercase * ##In: -* Y,A = PTR to String (PSTRING) +* Y,A = PTR to String (PSTR) * ##Out: * Uppercased/lowercased String in Buffer *\-------------------------------------- diff --git a/SYS/KERNEL.S.TSK.txt b/SYS/KERNEL.S.TSK.txt index 61f138ce..21ef427d 100644 --- a/SYS/KERNEL.S.TSK.txt +++ b/SYS/KERNEL.S.TSK.txt @@ -22,7 +22,7 @@ TSK.TskMgrRun >LDYAI TskMgr.Table+S.PS skip PS 0 bit #S.PS.F.HOLD Waiting for Another Task to Terminate? beq .2 - ldy #S.PS.CID + ldy #S.PS.CPID lda (pPs),y jsr K.GetPSByIDA bcc .7 yes, running.... @@ -71,7 +71,7 @@ TSK.TskMgrRun >LDYAI TskMgr.Table+S.PS skip PS 0 ldx #TSKMGR.QUIT yes, quit this process jsr pCodeJmp Call QUIT function - ldy #S.PS.ID + ldy #S.PS.PID lda (pPs),y jsr PS.FreeA bcs * diff --git a/SYS/KERNEL.S.txt b/SYS/KERNEL.S.txt index 8739f7af..5fb0e911 100644 --- a/SYS/KERNEL.S.txt +++ b/SYS/KERNEL.S.txt @@ -84,6 +84,7 @@ A2osX.D002 .EQ * .INB SYS/KERNEL.S.ARG .INB SYS/KERNEL.S.ENV *-------------------------------------- + .INB SYS/KERNEL.S.CNV .INB SYS/KERNEL.S.RUN .INB SYS/KERNEL.S.EVT .INB SYS/KERNEL.S.TSK diff --git a/X.ERRORS.S.txt b/X.ERRORS.S.txt new file mode 100644 index 00000000..ce1c6f0e --- /dev/null +++ b/X.ERRORS.S.txt @@ -0,0 +1,45 @@ +PR#3 +PREFIX /A2OSX.SRC +NEW +INC 1 +AUTO 6 + .LIST OFF +*-------------------------------------- +ERR.Codes .DA #MLI.ERR.IO + .DA #MLI.ERR.NODEV + .DA #MLI.ERR.WRTPROT + .DA #MLI.ERR.DSKSWIT + .DA #MLI.ERR.INVPATH + .DA #MLI.ERR.PNOTFND + .DA #MLI.ERR.VNOTFND + .DA #MLI.ERR.FNOTFND + .DA #MLI.ERR.DUPFILE + .DA #MLI.ERR.OVERRUN + .DA #MLI.ERR.VOLFULL + .DA #MLI.ERR.EOF +*-------------------------------------- + .DA #SYSMGR.ERRSYN + .DA #SYSMGR.ERRFNF +*-------------------------------------- +ERR.Count .EQ *-ERR.Codes +*-------------------------------------- +ERR.Messages >PSTR "I/O Error" + >PSTR "No Device" + >PSTR "Disk Write-Protected" + >PSTR "Disk Switched" + >PSTR "Invalid Path" + >PSTR "Path Not Found" + >PSTR "Volume Not Found" + >PSTR "File Not Found" + >PSTR "Duplicate Filename" + >PSTR "Buffer Overrun" + >PSTR "Volume Is Full" + >PSTR "End Of File" +*-------------------------------------- + >PSTR "Syntax Error" + >PSTR "Command Not Found" +*-------------------------------------- + >PSTR "Unknown Error" +*-------------------------------------- +MAN +SAVE X.ERRORS.S