From 55e11e5b0e68a8d7dce6f6197ce74fd7b7d11be8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20GIBERT?= Date: Wed, 31 Jul 2019 17:10:59 +0200 Subject: [PATCH] Kernel 0.93+ --- .Floppies/A2OSX.BUILD.po | Bin 33553920 -> 33553920 bytes BIN/KILL.S.txt | 2 +- BIN/SH.S.CMD.txt | 105 ++++++++++++---------------- BIN/SH.S.CORE.txt | 45 +++++------- BIN/SH.S.EXP.txt | 67 ++++++++---------- BIN/SH.S.HIS.txt | 18 ++--- BIN/SH.S.IO.txt | 16 ++--- BIN/SH.S.txt | 57 +++++++++------- SYS/KERNEL.S.CORE.txt | 2 +- SYS/KERNEL.S.IO.txt | 143 +++++++++++++++++---------------------- SYS/KERNEL.S.MEM.txt | 2 +- SYS/KERNEL.S.PS.txt | 17 ++--- SYS/KERNEL.S.STDIO.txt | 13 +++- SYS/KERNEL.S.UNISTD.txt | 13 ++-- 14 files changed, 221 insertions(+), 279 deletions(-) diff --git a/.Floppies/A2OSX.BUILD.po b/.Floppies/A2OSX.BUILD.po index 5b93b103f421fa870acc7160ebe14758e61d444c..8aca1820e61948cfcf131fafa8bebe6e077c1698 100644 GIT binary patch delta 52592 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 delta 53150 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 Se?-3${g(C=R=>34jsFK&+9FH< diff --git a/BIN/KILL.S.txt b/BIN/KILL.S.txt index de96f622..2bc4613c 100644 --- a/BIN/KILL.S.txt +++ b/BIN/KILL.S.txt @@ -107,7 +107,7 @@ CS.QUIT clc CS.END MSG.USAGE .AS "Usage : KILL PID\r\n" .AS " -0 : No Signal\r\n" - .AZ " -1 : SIGQUIT\r\n" + .AS " -1 : SIGQUIT\r\n" .AZ " -2 : SIGKILL\r\n" SSCANF.PID .AZ "%d" *-------------------------------------- diff --git a/BIN/SH.S.CMD.txt b/BIN/SH.S.CMD.txt index 499cb3ff..7fb5f719 100644 --- a/BIN/SH.S.CMD.txt +++ b/BIN/SH.S.CMD.txt @@ -84,7 +84,7 @@ CMD.CD.YA >SYSCALL realpath bcs CMD.POPD.RTS >STYA ZPPtr1 - stx M32.TMP Save hMem + stx ZPTmpW Save hMem ldy #1 lda (ZPPtr1),y @@ -96,7 +96,6 @@ CMD.CD.YA >SYSCALL realpath .12 >PUSHEA.G StatBuf >LDYA ZPPtr1 >SYSCALL STAT - bcs .19 .10 >LDA.G StatBuf+S.STAT.P.TYPE @@ -106,7 +105,7 @@ CMD.CD.YA >SYSCALL realpath lda #MLI.E.INVPATH .19 pha - lda M32.TMP + lda ZPTmpW >SYSCALL freemem pla sec @@ -119,7 +118,7 @@ CMD.CD.YA >SYSCALL realpath cmp #'/' bne .14 - lda M32.TMP + lda ZPTmpW jmp CMD.SetPrefixA already ends with a / .14 iny @@ -129,19 +128,17 @@ CMD.CD.YA >SYSCALL realpath bcs .19 >STYA ZPPtr2 - ldy #$ff + jsr StrCpyPtr1Ptr2 -.2 iny - lda (ZPPtr2),y - bne .2 - - iny - sta (ZPPtr2),y - dey lda #'/' sta (ZPPtr2),y + + iny + lda #0 + sta (ZPPtr2),y + phx - lda M32.TMP + lda ZPTmpW >SYSCALL freemem pla *-------------------------------------- @@ -597,12 +594,12 @@ CMD.CALL >LDA.G hFuncList >SYSCALL SListLookup bcs CMD.CALL.UNDEF - >STYA M32.TMP KeyID + >STYA ZPTmpW KeyID >PUSHWZ From Start >PUSHWI $ffff all >PUSHWZ Allocate.. - >PUSHW M32.TMP KeyID + >PUSHW ZPTmpW KeyID >LDA.G hFuncList >SYSCALL SListGetData bcs CMD.CALL.RTS @@ -756,7 +753,7 @@ CMD.EXIT.POPX lda (pData) CMD.EXIT.POP0 clc rts *-------------------------------------- -CMD.BREAK jsr CORE.StkGetCtx Get context in CORE.Test +CMD.BREAK jsr CORE.StkGetCtx Get context in CORE.TestResult bcs .9 tax @@ -794,7 +791,7 @@ CMD.SWITCH jsr CORE.StkGetCtx jsr CORE.StkPush Push EXP hVALUE bcs .9 - >LDA.G CORE.Test + lda CORE.TestResult beq .1 ora #$80 @@ -804,7 +801,7 @@ CMD.SWITCH jsr CORE.StkGetCtx .9 rts *-------------------------------------- -CMD.CASE jsr CORE.StkGetCtx Get context in CORE.Test +CMD.CASE jsr CORE.StkGetCtx Get context in CORE.TestResult bcs .9 @@ -841,13 +838,13 @@ CMD.CASE jsr CORE.StkGetCtx Get context in CORE.Test ror CS if != and #$80 eor #$80 - >ORA.G CORE.Test + ora CORE.TestResult ora #C.CASE jmp CORE.StkPush .9 jmp CMD.Exec.CSYN *-------------------------------------- -CMD.DEFAULT jsr CORE.StkGetCtx Get context in CORE.Test +CMD.DEFAULT jsr CORE.StkGetCtx Get context in CORE.TestResult bcs .9 and #$3F @@ -866,7 +863,7 @@ CMD.DEFAULT jsr CORE.StkGetCtx Get context in CORE.Test .9 jmp CMD.Exec.CSYN *-------------------------------------- -CMD.END jsr CORE.StkGetCtx Get context in CORE.Test +CMD.END jsr CORE.StkGetCtx Get context in CORE.TestResult bcs CMD.END.CSYN and #$3F @@ -923,23 +920,23 @@ CMD.FOR jsr CORE.StkGetCtx lda (ZPArgVBufPtr) cmp #'(' - beq FOR.FILE + beq CMD.FOR.FILE cmp #'`' - bne FOR.LIST + bne CMD.FOR.LIST - jmp FOR.EXEC + jmp CMD.FOR.EXEC .9 rts *-------------------------------------- -FOR.LIST >LDYA ZPArgVBufPtr +CMD.FOR.LIST >LDYA ZPArgVBufPtr >SYSCALL strdup - bcs .9 + bcs FOR.FILE.9 jsr CORE.StkPushYAX Push listPtr,hList >LDYA ZPVarNamePtr >SYSCALL strdup - bcs .9 + bcs FOR.FILE.9 txa jsr CORE.StkPush Push hVARNAME @@ -951,21 +948,11 @@ FOR.LIST >LDYA ZPArgVBufPtr jsr CORE.StkPush jsr CMD.NEXT.LIST.1 - bcs .9 + bcs FOR.FILE.9 - >ORA.G CORE.Test - ora #C.FOR Push FOR - pha - lda (pData) - tay - pla - sta (pData),y - -* clc - -.9 rts + jmp CMD.FOR.LOOP *-------------------------------------- -FOR.FILE jsr CORE.ArgV.NextChar skip "(" +CMD.FOR.FILE jsr CORE.ArgV.NextChar skip "(" >PUSHWZ Aux type >PUSHBI S.FI.T.TXT @@ -992,27 +979,19 @@ FOR.FILE jsr CORE.ArgV.NextChar skip "(" jsr CMD.NEXT.LINE bcs FOR.FILE.9 - >ORA.G CORE.Test - ora #C.FOR Push FOR - pha - lda (pData) - tay - pla - sta (pData),y - -* clc + bra CMD.FOR.LOOP FOR.FILE.9 rts *-------------------------------------- -FOR.EXEC jsr CORE.ArgV.NextChar skip "`" +CMD.FOR.EXEC jsr CORE.ArgV.NextChar skip "`" jsr IO.Pipe.Out - bcs .9 + bcs FOR.FILE.9 >PUSHB.G CORE.PSFlags >LDYA ZPArgVBufPtr >SYSCALL execl - bcs .9 + bcs FOR.FILE.9 >LDA.G IO.hOut ldy #S.PS.hStdOut @@ -1025,13 +1004,13 @@ FOR.EXEC jsr CORE.ArgV.NextChar skip "`" >PUSHBI O.RDONLY+O.TEXT >LEA.G IO.FIFO >SYSCALL fopen - bcs .9 + bcs FOR.FILE.9 jsr CORE.StkPush push hPIPE >LDYA ZPVarNamePtr >SYSCALL strdup - bcs .9 + bcs FOR.FILE.9 txa jsr CORE.StkPush Push hVARNAME @@ -1043,9 +1022,9 @@ FOR.EXEC jsr CORE.ArgV.NextChar skip "`" jsr CORE.StkPush jsr CMD.NEXT.LINE - bcs .9 + bcs FOR.FILE.9 - >ORA.G CORE.Test +CMD.FOR.LOOP ora CORE.TestResult ora #C.FOR Push FOR pha lda (pData) @@ -1053,9 +1032,7 @@ FOR.EXEC jsr CORE.ArgV.NextChar skip "`" pla sta (pData),y -* clc - -.9 rts + rts *-------------------------------------- CMD.NEXT jsr CORE.StkGet Y = StkPtr bcs .9 @@ -1293,7 +1270,7 @@ CMD.IF jsr CORE.StkGetCtx jsr EXP.TEST bcs .9 -.3 >LDA.G CORE.IntCmd +.3 lda CORE.IntCmd cmp #C.WHILE bne .8 @@ -1301,10 +1278,12 @@ CMD.IF jsr CORE.StkGetCtx jsr CORE.StkPushYA Push BEFORE WHILE/IF bcs .9 -.8 >LDA.G CORE.Test - >ORA.G CORE.IntCmd - jmp CORE.StkPush +.8 lda CORE.TestResult + ora CORE.IntCmd + jsr CORE.StkPush + clc + .9 rts *-------------------------------------- CMD.LOOP jsr CORE.StkPull diff --git a/BIN/SH.S.CORE.txt b/BIN/SH.S.CORE.txt index d072c1f3..c5a1a8d4 100644 --- a/BIN/SH.S.CORE.txt +++ b/BIN/SH.S.CORE.txt @@ -16,12 +16,12 @@ CORE.Quit >LDA.G CORE.hArgVBuf >SYSCALL FreeMem CORE.FUNCRESET >LDA.G hFuncList - beq CORE.Quit.9 + beq .8 >SYSCALL SListFree >STZ.G hFuncList -CORE.Quit.9 rts +.8 rts *-------------------------------------- * http://heirloom.sourceforge.net/sh/sh.1.html *-------------------------------------- @@ -65,7 +65,7 @@ CORE.Run >LDYA ZPInputBufPtr Save Actual cmd for looping lda #$ff - >STA.G CORE.IntCmd assume external + sta CORE.IntCmd assume external jsr CORE.GetCharNB bcc .11 @@ -125,14 +125,13 @@ CORE.Run >LDYA ZPInputBufPtr Save Actual cmd for looping .41 jsr CORE.SkipCharsA - txa - >STA.G CORE.IntCmd + stx CORE.IntCmd .42 jsr CORE.StkGet bcs CORE.Run.7 no particular context, exec... tax - >LDA.G CORE.IntCmd + lda CORE.IntCmd bmi .45 and #$3F @@ -202,8 +201,9 @@ CORE.ExecCmd.1 lda #0 >LDYA ZPArgVBuf >STYA ZPArgVBufPtr - >LDA.G CORE.IntCmd + lda CORE.IntCmd bmi CORE.ExecExtCmd + asl tax jmp (J.CMD,x) @@ -330,16 +330,12 @@ CORE.Lookup >STYA ZPPtr2 clc .8 rts -.4 inc ZPPtr1 - bne .5 - inc ZPPtr1+1 +.4 jsr IncPtr1 -.5 lda (ZPPtr1) + lda (ZPPtr1) bne .4 - inc ZPPtr1 - bne .6 - inc ZPPtr1+1 + jsr IncPtr1 .6 inx @@ -389,12 +385,7 @@ CORE.ArgV.Dup >STYA ZPPtr1 inc pha - ldy #0 - -.6 iny - lda (ZPPtr1),y - sta (ZPPtr2),y - bne .6 + jsr StrCpyPtr1Ptr2 jsr CORE.ArgV.DupNextY bra .5 @@ -418,38 +409,38 @@ CORE.ArgV.Add >LDYA ZPArgVBufPtr >STYA ZPArgVBufPrev Save String start of Expand lda #C.SPACE - sta M32.TMP + sta ZPTmpW jsr CORE.GetCharNB bcs .9 cmp #'"' bne .10 - sta M32.TMP + sta ZPTmpW bra .1 .10 cmp #'(' bne .11 ldx #')' - stx M32.TMP + stx ZPTmpW bra .12 .11 cmp #'`' bne .12 - sta M32.TMP + sta ZPTmpW .12 jsr CORE.ArgV.PutChar .1 jsr CORE.GetNextChar bcs .5 -.2 cmp M32.TMP +.2 cmp ZPTmpW bne .3 jsr CORE.GetNextChar bra .5 -.3 ldy M32.TMP +.3 ldy ZPTmpW cpy #C.SPACE bne .40 jsr CORE.IsEndCmd @@ -682,7 +673,7 @@ CORE.StkGetCtx jsr CORE.StkGet .1 lda #$40 ...set Parent = true -.2 >STA.G CORE.Test +.2 sta CORE.TestResult txa rts diff --git a/BIN/SH.S.EXP.txt b/BIN/SH.S.EXP.txt index e9b68b70..2df4a2ac 100644 --- a/BIN/SH.S.EXP.txt +++ b/BIN/SH.S.EXP.txt @@ -17,8 +17,7 @@ EXP.GET jsr CORE.ArgV.Next jsr CORE.LookupArgVBuf bcs .94 - txa - >STA.G CORE.Operator + stx CORE.Operator jsr CORE.ArgV.Next get next argument beq .94 @@ -48,10 +47,8 @@ EXP.GET jsr CORE.ArgV.Next sec rts -EXP.FPU.EXEC >LDA.G CORE.Operator - tax - lda EXP.OP.MATH.FPU,x - tax +EXP.FPU.EXEC ldy CORE.Operator + ldx EXP.OP.MATH.FPU,y jmp A2osX.FpuCall *-------------------------------------- @@ -59,7 +56,7 @@ EXP.TEST lda (ZPArgVBufPtr) beq .9 lda #$80 - >STA.G CORE.TestOp No Op + sta CORE.LogicOp No Op .10 >LDYA L.EXP.BEGIN jsr CORE.LookupArgVBuf @@ -71,11 +68,11 @@ EXP.TEST lda (ZPArgVBufPtr) asl in C php - >LDA.G CORE.Test get parent + lda CORE.TestResult get parent asl discard true/false plp get new ror set ctx and parent - >STA.G CORE.Test + sta CORE.TestResult jsr CORE.ArgV.Next beq .9 @@ -85,13 +82,12 @@ EXP.TEST lda (ZPArgVBufPtr) bcs .1 - txa - >STA.G CORE.Operator + stx CORE.Operator jsr EXP.TEST.UNARY bcs .9 - >EOR.G CORE.Test + eor CORE.TestResult sta (pData),y lda (ZPArgVBufPtr) bra .8 go check ] @@ -106,13 +102,13 @@ EXP.TEST lda (ZPArgVBufPtr) >LDYA L.EXP.OP.BINARY -eq -ne .... ? jsr CORE.LookupArgVBuf bcs .9 - txa - >STA.G CORE.Operator + + stx CORE.Operator jsr EXP.TEST.BINARY bcs .9 - >EOR.G CORE.Test + eor CORE.TestResult sta (pData),y jsr CORE.ArgV.Next @@ -132,31 +128,31 @@ EXP.TEST lda (ZPArgVBufPtr) jsr CORE.LookupArgVBuf bcs .9 - txa 0 = AND, 1 = OR - >STA.G CORE.TestOp + stx CORE.LogicOp 0 = AND, 1 = OR txa beq .84 - >lda.G CORE.Test OR : prev test is true, exit + + lda CORE.TestResult OR : prev test is true, exit bmi .88 bra .85 -.84 >lda.G CORE.Test AND : prev test is false, exit +.84 lda CORE.TestResult AND : prev test is false, exit bpl .88 -.85 >LDA.G CORE.Test - >STA.G CORE.TestArg +.85 lda CORE.TestResult + sta CORE.PrevTestResult jsr CORE.ArgV.Next beq .9 jmp .10 -.80 >LDA.G CORE.TestOp +.80 lda CORE.LogicOp bne .88 NONE, or OR : exit with last result - >LDA.G CORE.TestArg AND : stop if false - >AND.G CORE.Test - >STA.G CORE.Test + lda CORE.PrevTestResult AND : stop if false + and CORE.TestResult + sta CORE.TestResult .88 clc rts @@ -164,7 +160,7 @@ EXP.TEST lda (ZPArgVBufPtr) EXP.TEST.UNARY jsr CORE.ArgV.Next beq EXP.OP.UNARY.ESYN we need one arg or ] - >LDA.G CORE.Operator + lda CORE.Operator asl tax jmp (J.EXP.OP.UNARY,x) @@ -230,7 +226,7 @@ EXP.OP.UNARY.Z lda (ZPArgVBufPtr) [ -Z ] ? beq EXP.OP.UNARY.ESYN bra EXP.OP.UNARY.DEF.9 FALSE *-------------------------------------- -EXP.TEST.BINARY >LDA.G CORE.Operator +EXP.TEST.BINARY lda CORE.Operator cmp #6 =, !=, <= <, >=, > bcs EXP.TEST.BINARY.NUM @@ -299,21 +295,14 @@ EXP.TEST.BINARY.NUM .5 lda #%001 001 ACC < ARG EXP.TEST.BINARY.END - pha - - >LDA.G CORE.Operator - tax - pla + clc + ldx CORE.Operator and EXP.OP.BINARY.BITS,x - beq .80 + beq .8 false lda #$80 true - clc - rts - -.80 lda #0 false - clc - rts + +.8 rts *-------------------------------------- MAN SAVE USR/SRC/BIN/SH.S.EXP diff --git a/BIN/SH.S.HIS.txt b/BIN/SH.S.HIS.txt index 0e5e9903..b885eade 100644 --- a/BIN/SH.S.HIS.txt +++ b/BIN/SH.S.HIS.txt @@ -61,13 +61,9 @@ HIS.Add >LDA.G HIS.hBuf bra .10 retry.... -.2 clc A = ending O offset - adc ZPPTR1 - sta ZPPTR1 - bcc .3 - inc ZPPTR1+1 - -.3 ldy #$ff +.2 jsr AddAPtr1 A = ending O offset + + ldy #$ff .4 iny lda (ZPCLBuf),y @@ -126,13 +122,9 @@ HIS.GetNext >LDA.G HIS.hBuf HIS.SetA jsr HIS.GetA tya - clc - adc ZPPTR1 - sta ZPPTR1 - bcc .1 - inc ZPPTR1+1 + jsr AddAPtr1 -.1 jsr CL.CLR + jsr CL.CLR ldy #$ff diff --git a/BIN/SH.S.IO.txt b/BIN/SH.S.IO.txt index 02fa4afa..180cf940 100644 --- a/BIN/SH.S.IO.txt +++ b/BIN/SH.S.IO.txt @@ -145,12 +145,12 @@ IO.PrintBatchErrMsg .11 >STYA ZPPtr2 - stz M32.TMP Line Count - stz M32.TMP+1 + stz ZPTmpW Line Count + stz ZPTmpW+1 -.1 inc M32.TMP +.1 inc ZPTmpW bne .2 - inc M32.TMP+1 + inc ZPTmpW+1 .2 ldy #$ff @@ -210,7 +210,7 @@ IO.PrintBatchErrMsg sta (ZPCLBuf),y bra .7 -.8 >PUSHW M32.TMP +.8 >PUSHW ZPTmpW >PUSHW ZPCLBuf >PUSHBI 4 >PUSHW L.MSG.BATCHERR @@ -245,11 +245,7 @@ IO.PrintErrMsg pha Save EC for PrintF bmi .8 lda (ZPPTR1) - sec - adc ZPPTR1 - sta ZPPTR1 - bcc .3 - inc ZPPTR1+1 + jsr AddAp1Ptr1 bra .3 .8 >PUSHW ZPPTR1 diff --git a/BIN/SH.S.txt b/BIN/SH.S.txt index bd1f964b..7540b92a 100644 --- a/BIN/SH.S.txt +++ b/BIN/SH.S.txt @@ -76,11 +76,17 @@ ZPArgVBufPrev .BS 2 ZPArgVBufPtr .BS 2 ZPVarNamePtr .BS 2 +CORE.IntCmd .BS 1 +CORE.Operator .BS 1 +CORE.LogicOp .BS 1 +CORE.TestResult .BS 1 +CORE.PrevTestResult .BS 1 + M32.ACC .BS 4 -M32.TMP .BS 4 ZPPtr1 .BS 2 ZPPtr2 .BS 2 +ZPTmpW .BS 2 ZS.END .ED *-------------------------------------- @@ -531,12 +537,7 @@ RemoveStrFromArgV .2 jsr AddYp1Ptr1 - ldy #$ff - -.4 iny - lda (ZPPtr1),y - sta (ZPPtr2),y - bne .4 + jsr StrCpyPtr1Ptr2 tya beq .8 @@ -551,11 +552,12 @@ RemoveStrFromArgV .8 rts *-------------------------------------- GetPtr1Next lda (ZPPtr1) - beq .8 - inc ZPPtr1 - bne .8 + beq IncPtr1.8 + +IncPtr1 inc ZPPtr1 + bne IncPtr1.8 inc ZPPtr1+1 -.8 rts +IncPtr1.8 rts *-------------------------------------- GetPtr1Len ldy #$ff @@ -565,13 +567,24 @@ GetPtr1Len ldy #$ff rts *-------------------------------------- AddYp1Ptr1 tya - sec +AddAp1Ptr1 sec + .HS 90 BCC +AddAPtr1 clc adc ZPPtr1 sta ZPPtr1 bcc .8 inc ZPPtr1+1 .8 rts *-------------------------------------- +StrCpyPtr1Ptr2 ldy #$ff + +.1 iny + lda (ZPPtr1),y + sta (ZPPtr2),y + bne .1 + + rts +*-------------------------------------- ToUpperCase cmp #'a' bcc .8 cmp #'z'+1 @@ -602,13 +615,18 @@ MSG.PRINTENV .AZ "%s = %s\r\n" MSG.PID .AZ "PID=%d\r\n" FMT.DATE .AZ "%A (%w), %B %d %Y" FMT.TIME .AZ "%H:%M:%S (%I:%M:%S%p)" -FMT.GETKEY .AZ "%d" +FMT.GETKEY .AZ "%d" +M32.Printf .AZ "%L" *-------------------------------------- HOME .AZ "${HOME}" HOME.PROFILE .AZ "${HOME}PROFILE" PS1 .AZ "${PS1}" .HS 00 To Make It ArgV *-------------------------------------- +EscChars .AS 'DBAC' +EscChars.Cnt .EQ *-EscChars +EscChars.Remap .DA #C.BS,#C.VT,#C.LF,#C.FS +*-------------------------------------- IN .AZ "IN" *-------------------------------------- CMD .AZ ".." @@ -707,11 +725,6 @@ EXP.OP.LOGIC .AZ "AND" .HS 00 *-------------------------------------- .INB USR/SRC/SHARED/X.ERRORS.S -*-------------------------------------- -EscChars .AS 'DBAC' -EscChars.Cnt .EQ *-EscChars -EscChars.Remap .DA #C.BS,#C.VT,#C.LF,#C.FS -M32.Printf .AZ "%L" *-------------------------------------- .DUMMY .OR 0 @@ -743,15 +756,9 @@ CL.Ptr .BS 1 CL.Len .BS 1 CL.bReady .BS 1 -CORE.IntCmd .BS 1 CORE.hArgVBuf .BS 1 CORE.PSFlags .BS 1 -CORE.ArgIndex .BS 1 -CORE.Test .BS 1 -CORE.TestOp .BS 1 -CORE.TestArg .BS 1 -CORE.Operator .BS 1 HIS.hBuf .BS 1 HIS.Count .BS 1 @@ -761,7 +768,7 @@ IO.hIn .BS 1 IO.hOut .BS 1 IO.hErr .BS 1 -*M32.BUF .BS 12 -1234567890\0 +*M32.BUF .BS 12 -1234567890\0 M32.BUF .EQ * IO.FIFO .BS 12 /DEV/FIFOxx\0 *-------------------------------------- diff --git a/SYS/KERNEL.S.CORE.txt b/SYS/KERNEL.S.CORE.txt index cbe8a440..ac981d20 100644 --- a/SYS/KERNEL.S.CORE.txt +++ b/SYS/KERNEL.S.CORE.txt @@ -124,7 +124,7 @@ CORE.Events jsr CORE.GetEvents pha - >PUSHWZ Param + >PUSHWZ Param >PUSHBI IOCTL.CONTROL request pla diff --git a/SYS/KERNEL.S.IO.txt b/SYS/KERNEL.S.IO.txt index d82f9e6b..349c3e9d 100644 --- a/SYS/KERNEL.S.IO.txt +++ b/SYS/KERNEL.S.IO.txt @@ -1,24 +1,6 @@ NEW AUTO 3,1 *-------------------------------------- -IO.OPEN.CDEV -IO.OPEN.BDEV jsr K.IOCTL.GetPDrv - - ldx #IOCTL.OPEN - lda IO.hDev - jsr K.IOCTL.pDrvJmp - bcs .9 - - lda IO.hDev - -.9 rts -*-------------------------------------- -IO.OPEN.DSOCK -*-------------------------------------- -IO.OPEN.SSOCK lda IO.hFD - clc - rts -*-------------------------------------- IO.CLOSE.REG IO.CLOSE.DIR ldy #S.FD.REG.REF lda (pFD),y @@ -35,47 +17,6 @@ IO.CLOSE.DIR ldy #S.FD.REG.REF .2 lda IO.hFD jmp K.FreeMem *-------------------------------------- -IO.CLOSE.CDEV -IO.CLOSE.BDEV - clc - rts -*-------------------------------------- -IO.CLOSE.DSOCK -IO.CLOSE.SSOCK - ldy #S.FD.SSOCK.CLOSE - lda (pFD),y - tax Function Offset in LIB - - ldy #S.FD.SSOCK.IOHANDLER - lda (pFD),y - jsr K.GetMemPtr - >STYA .1+1 - - lda IO.hFD - -.1 jmp $FFFF SELF MODIFIED -*-------------------------------------- -IO.CLOSE.NOD ldx #2 - - lda IO.hFD - -.1 cmp Nod.Table.hFD-2,x - bne .2 - - stz Nod.Table.hFD-2,x - - lda Nod.Table.hPath-2,x - stz Nod.Table.hPath-2,x - jmp K.FreeMem - -.2 inx - cpx #K.Nod.MAX+2 - bne .1 - - lda #E.INVH -* sec - rts -*-------------------------------------- IO.READ.REG ldx #MLIREAD .HS 2C BIT ABS *-------------------------------------- @@ -93,6 +34,23 @@ IO.WRITE.REG ldx #MLIWRITE >LDYA K.MLI.PARAMS+6 .9 rts *-------------------------------------- +IO.OPEN.CDEV +IO.OPEN.BDEV jsr K.IOCTL.GetPDrv + + ldx #IOCTL.OPEN + lda IO.hDev + jsr K.IOCTL.pDrvJmp + bcs .9 + + lda IO.hDev + +.9 rts +*-------------------------------------- +IO.CLOSE.CDEV +IO.CLOSE.BDEV + clc + rts +*-------------------------------------- IO.READ.CDEV ldx #IOCTL.READ .HS 2C BIT ABS *-------------------------------------- @@ -110,11 +68,15 @@ IO.WRITE.CDEV ldx #IOCTL.WRITE .9 rts *-------------------------------------- -IO.WRITE.SSOCK ldy #S.FD.SSOCK.WRITE - .HS 2C BIT ABS +IO.OPEN.DSOCK *-------------------------------------- -IO.READ.SSOCK ldy #S.FD.SSOCK.READ - +IO.OPEN.SSOCK lda IO.hFD + clc + rts +*-------------------------------------- +IO.CLOSE.DSOCK +IO.CLOSE.SSOCK + ldy #S.FD.SSOCK.CLOSE lda (pFD),y tax Function Offset in LIB @@ -127,6 +89,22 @@ IO.READ.SSOCK ldy #S.FD.SSOCK.READ .1 jmp $FFFF SELF MODIFIED *-------------------------------------- +IO.READ.SSOCK ldy #S.FD.SSOCK.READ + .HS 2C BIT ABS +*-------------------------------------- +IO.WRITE.SSOCK ldy #S.FD.SSOCK.WRITE + + lda (pFD),y + tax Function Offset in LIB + + ldy #S.FD.SSOCK.IOHANDLER + lda (pFD),y + jsr K.GetMemPtr + >STYA .1+1 + + lda IO.hFD + +.1 jmp $FFFF SELF MODIFIED */-------------------------------------- * # IOCTL * ## C @@ -166,19 +144,6 @@ K.IOCTL.GetPDrv ldy #S.FD.DEV.DRVPTR lda (pFD),y sta pDRV+1 rts -*-------------------------------------- -IO.EOF lda (pFD) - tax - jmp (.1,x) - -.1 .DA IO.EOF.REG - .DA STDIO.IOERR DIR - .DA IO.EOF.CDEV - .DA STDIO.IOERR BDEV - .DA STDIO.IOERR LNK - .DA STDIO.IOERR DSOCK - .DA IO.EOF.SSOCK - .DA IO.EOF.PIPE *-------------------------------------- IO.EOF.REG >MLICALL MLIGETMARK bcs IO.EOF.REG.RTS @@ -226,11 +191,6 @@ IO.EOF.FALSE lda #0 * clc rts *-------------------------------------- -IO.GetPFD sta IO.hFD - jsr K.GetMemPtr - >STYA pFD - rts -*-------------------------------------- * X = 0 > REG * X = 1 > DIR * X = 2 > PIPE @@ -293,6 +253,27 @@ IO.MLI.OPEN >LDYAI 1024 get a ProDOS IOBUF * clc .9 rts *-------------------------------------- +IO.CLOSE.NOD ldx #2 + + lda IO.hFD + +.1 cmp Nod.Table.hFD-2,x + bne .2 + + stz Nod.Table.hFD-2,x + + lda Nod.Table.hPath-2,x + stz Nod.Table.hPath-2,x + jmp K.FreeMem + +.2 inx + cpx #K.Nod.MAX+2 + bne .1 + + lda #E.INVH +* sec + rts +*-------------------------------------- IO.DEV.FIFO .AS "/DEV/FIFO" *-------------------------------------- MAN diff --git a/SYS/KERNEL.S.MEM.txt b/SYS/KERNEL.S.MEM.txt index 56b95fc7..317c5927 100644 --- a/SYS/KERNEL.S.MEM.txt +++ b/SYS/KERNEL.S.MEM.txt @@ -100,7 +100,7 @@ MEM.GetMem.YAX stx MEM.ReqFlags .4 cpx Mem.LastSlot any other slot to check? bne .1 last one, create a new slot - + lda MEM.BestSlot beq .5 diff --git a/SYS/KERNEL.S.PS.txt b/SYS/KERNEL.S.PS.txt index c2485f7e..81882226 100644 --- a/SYS/KERNEL.S.PS.txt +++ b/SYS/KERNEL.S.PS.txt @@ -385,16 +385,15 @@ PS.LoadBIN jsr BIN.Load K.Buf256= "${ROOT}BIN/SHELL\0", K.IOBuf=/.../SCRIPT lda (ZPPtr4),y Load SS.SIZE ldy #S.PS.ZP.STACK - sta (PS.NewPSPtr),y save pStack LO... + sta (PS.NewPSPtr),y save pStack LO... tay beq .3 SS.SIZE.LO=0, set as default $100 - lda #1 SS.SIZE.HI + lda #$ff SS.SIZE.HI - .HS 2C bit abs -.3 lda #1 +.3 inc ldx #S.MEM.F.ALIGN+S.MEM.F.STACK jsr MEM.GetMem.YAX @@ -410,16 +409,8 @@ PS.LoadBIN jsr BIN.Load K.Buf256= "${ROOT}BIN/SHELL\0", K.IOBuf=/.../SCRIPT ldy #S.PS.hSS sta (PS.NewPSPtr),y save SS hMem in S.PS - jsr Mem.SetOwner Set Ownership + jmp Mem.SetOwner Set Ownership -* ldy #H.BIN.ZP.SIZE -* lda (ZPPtr4),y -* clc -* adc #10 Add room for 5 saved PTR -* ldy #S.PS.ZP.SIZE -* sta (PS.NewPSPtr),y - -* clc .9 rts *-------------------------------------- PS.LoadGetHeader diff --git a/SYS/KERNEL.S.STDIO.txt b/SYS/KERNEL.S.STDIO.txt index 2bd154a6..f6d20027 100644 --- a/SYS/KERNEL.S.STDIO.txt +++ b/SYS/KERNEL.S.STDIO.txt @@ -1199,7 +1199,18 @@ K.FSeek.RTS K.FEOF jsr PFT.CheckNodeA bcs K.FSeek.RTS - jmp IO.EOF +IO.EOF lda (pFD) + tax + jmp (.1,x) + +.1 .DA IO.EOF.REG + .DA STDIO.IOERR DIR + .DA IO.EOF.CDEV + .DA STDIO.IOERR BDEV + .DA STDIO.IOERR LNK + .DA STDIO.IOERR DSOCK + .DA IO.EOF.SSOCK + .DA IO.EOF.PIPE */-------------------------------------- * # FTell * Return the current value of the file-position indicator diff --git a/SYS/KERNEL.S.UNISTD.txt b/SYS/KERNEL.S.UNISTD.txt index 1cec5024..e7c217b4 100644 --- a/SYS/KERNEL.S.UNISTD.txt +++ b/SYS/KERNEL.S.UNISTD.txt @@ -66,7 +66,7 @@ UNISTD.Open ldx #5 /DEV/ bne .2 lda Nod.Table.hFD-2,x return hFD - jsr IO.GetPFD + jsr UNISTD.GetPFD bra .71 @@ -168,7 +168,7 @@ IO.OPEN.ERR pha Save Error Code * `lda fd` * `>SYSCALL close` *\-------------------------------------- -K.Close jsr IO.GetPFD +K.Close jsr UNISTD.GetPFD UNISTD.Close lda (pFD) #S.FD.T tax @@ -196,7 +196,7 @@ UNISTD.Close lda (pFD) #S.FD.T * CC: Y,A = bytes read * CS: A = EC *\-------------------------------------- -K.Read jsr IO.GetPFD +K.Read jsr UNISTD.GetPFD UNISTD.Read lda (pFD) #S.FD.T tax @@ -224,7 +224,7 @@ UNISTD.Read lda (pFD) #S.FD.T * CC: Y,A = bytes written * CS: A = EC *\-------------------------------------- -K.Write jsr IO.GetPFD +K.Write jsr UNISTD.GetPFD UNISTD.Write lda (pFD) #S.FD.T tax @@ -239,6 +239,11 @@ UNISTD.Write lda (pFD) #S.FD.T .DA IO.WRITE.SSOCK .DA IO.WRITE.PIPE *-------------------------------------- +UNISTD.GetPFD sta IO.hFD + jsr K.GetMemPtr + >STYA pFD + rts +*-------------------------------------- MAN SAVE USR/SRC/SYS/KERNEL.S.UNISTD LOAD USR/SRC/SYS/KERNEL.S