diff --git a/.Floppies/A2OSX.BUILD.po b/.Floppies/A2OSX.BUILD.po index 35f86ddb..ed8fc032 100644 Binary files a/.Floppies/A2OSX.BUILD.po and b/.Floppies/A2OSX.BUILD.po differ diff --git a/BIN/MEMDUMP.S.txt b/BIN/MEMDUMP.S.txt index 12871b4a..377b9f9b 100644 --- a/BIN/MEMDUMP.S.txt +++ b/BIN/MEMDUMP.S.txt @@ -255,7 +255,7 @@ MSG3 .AZ "High Memory: $%H\r\n" MSG4 .AZ "Free ULimit: $%H\r\n" MSG5 .AZ "Low Memory: $%H\r\n" MSG.FREE .AZ "\r\nFree Memory: %D Bytes.\r\n" -MSG.FLAGS .AS "UZNAfcds" +MSG.FLAGS .AS "UZXAfcds" *-------------------------------------- .DUMMY .OR 0 diff --git a/BIN/SH.S.CMD.txt b/BIN/SH.S.CMD.txt index 47d6ef33..549c51ed 100644 --- a/BIN/SH.S.CMD.txt +++ b/BIN/SH.S.CMD.txt @@ -98,9 +98,8 @@ CMD.CD.YA >SYSCALL realpath txa jmp CMD.SetCWDA we have '/' -.12 >PUSHEA.G StatBuf - >LDYA ZPPtr1 - >SYSCALL STAT +.12 >LDYA ZPPtr1 + jsr IO.StatYA bcs .19 .10 >LDA.G StatBuf+S.STAT.P.TYPE @@ -241,18 +240,23 @@ CMD.SET.1 bne .99 jsr CORE.ArgV.Next beq CMD.SET.UNSET + cmp #'`' beq CMD.SET.EXEC jsr EXP.GET - bcs .9 - >PUSHYA - >LDYA ZPVarNamePtr - >SYSCALL SetEnv + bcc CMD.SET.YA + rts .8 clc .9 rts .99 jmp CMD.E.CSYN + +CMD.SET.YA >PUSHYA + >LDYA ZPVarNamePtr + >SYSCALL SetEnv + rts + CMD.SET.UNSET >LDYA ZPVarNamePtr >SYSCALL UnsetEnv rts @@ -262,6 +266,7 @@ CMD.SET.GET >LDYA ZPVarNamePtr bcc .1 clc rts + .1 >PUSHYA push value >LDYA ZPVarNamePtr >PUSHYA push name @@ -409,7 +414,7 @@ CMD.READ lda (ZPArgVBufPtr) CMD.READ.VAR jsr CL.Reset .1 >SYSCALL GetChar - bcs CMD.READ.VAR.9 + bcs CMD.SLEEP.RTS jsr CL.CHARIN @@ -417,18 +422,12 @@ CMD.READ.VAR jsr CL.Reset bpl .1 lda (ZPCLBuf) - bne CMD.READ.VAR.SET - -CMD.READ.VAR.UNSET - >LDYA ZPVarNamePtr - >SYSCALL UnSetEnv - rts -CMD.READ.VAR.SET - >PUSHW ZPCLBuf - >LDYA ZPVarNamePtr - >SYSCALL SetEnv - -CMD.READ.VAR.9 rts + bne .2 + + jmp CMD.SET.UNSET + +.2 >LDYA ZPCLBuf + jmp CMD.SET.YA *-------------------------------------- CMD.SLEEP lda (ZPArgVBufPtr) beq CMD.REN.CSYN @@ -439,7 +438,7 @@ CMD.SLEEP lda (ZPArgVBufPtr) >PULLL.G Sleep clc - rts +CMD.SLEEP.RTS rts *-------------------------------------- CMD.PAUSE lda #$FF >STA.G bPause @@ -461,10 +460,11 @@ CMD.PWD ldy #S.PS.hCWD *-------------------------------------- CMD.RD lda (ZPArgVBufPtr) beq CMD.REN.CSYN - >PUSHEA.G StatBuf + >LDYA ZPArgVBufPtr - >SYSCALL STAT + jsr IO.StatYA bcs .99 + >LDA.G StatBuf+S.STAT.P.TYPE cmp #S.FI.T.DIR bne CMD.REN.CSYN @@ -716,6 +716,7 @@ CMD.EXIT.POP and #$3F cmp #C.SWITCH SWITCH : hValue beq .2 + ldx #1 cmp #C.CASE CASE : C.CASE + hValue beq .1 @@ -799,13 +800,15 @@ CMD.CASE jsr CORE.StkGetCtx Get context in CORE.TestResult rts keep existing context .10 jsr CORE.StkPull remove previous C.CASE bra CMD.CASE + .1 jsr EXP.GET bcs .9 + >PUSHYA - lda (pDATA) + lda (pData) tay dey get hVALUE - lda (pDATA),y + lda (pData),y >SYSCALL GetMemPtr >SYSCALL strcmp ror CS if != @@ -823,10 +826,13 @@ CMD.DEFAULT jsr CORE.StkGetCtx Get context in CORE.TestResult bcs CMD.E.CSYN and #$3F + cmp #C.SWITCH beq .1 + cmp #C.CASE bne CMD.E.CSYN + jsr CORE.StkPull remove C.CASE .1 jsr CORE.StkGet @@ -838,10 +844,13 @@ CMD.END jsr CORE.StkGetCtx Get context in CORE.TestResult bcs CMD.E.CSYN and #$3F + cmp #C.SWITCH beq .3 + cmp #C.CASE beq .2 + cmp #C.DEFAULT bne CMD.E.CSYN .2 jsr CORE.StkPull remove C.CASE or C.DEFAULT @@ -970,9 +979,11 @@ CMD.NEXT jsr CORE.StkGet Y = StkPtr *-------------------------------------- CMD.NEXT.LIST lda (pData),y Y = StkPtr bpl .1 + jsr CMD.NEXT.LIST.TOKEN bcs .9 bpl .1 + lda (pData) sec sbc #6 @@ -985,11 +996,13 @@ CMD.NEXT.LIST lda (pData),y Y = StkPtr sta ZPInputBufPtr+1 clc rts + .1 lda (pData) tay sec sbc #8 sta (pData) + dey dey lda (pData),y hVARNAME @@ -1036,12 +1049,15 @@ CMD.NEXT.LIST.TOKEN sta (ZPCLBuf),y iny bra .1 + .3 lda #0 sta (ZPCLBuf),y tya beq .8 - jsr CMD.READ.VAR.SET + + >LDYA ZPCLBuf + jsr CMD.SET.YA bcs .9 lda (pData) @@ -1053,14 +1069,12 @@ CMD.NEXT.LIST.TOKEN dey lda ZPPtr1+1 sta (pData),y + lda #$80 clc - rts -.8 jsr CMD.READ.VAR.UNSET - bcs .9 - lda #0 -* clc .9 rts + +.8 jmp CMD.NEXT.END *-------------------------------------- * stack-4 CmdPtr * stack-3 hFILE/hPIPE @@ -1087,11 +1101,13 @@ CMD.NEXT.FILEEXEC sta ZPInputBufPtr+1 clc rts + .1 lda (pData) tay sec sbc #6 sta (pData) + dey dey lda (pData),y hVARNAME @@ -1120,17 +1136,20 @@ CMD.NEXT.LINE lda (pData) dey lda (pData),y hFILE/hPIPE >SYSCALL fgets - bcs .8 - jsr CMD.READ.VAR.SET - bcs .9 + bcs CMD.NEXT.END + + >LDYA ZPCLBuf + jsr CMD.SET.YA + bcs CMD.NEXT.LINE.RTS lda #$80 * clc rts -.8 jsr CMD.READ.VAR.UNSET + +CMD.NEXT.END jsr CMD.SET.UNSET bcs .9 lda #0 -* clc + clc keep this CLC for CMD.NEXT.LIST.TOKEN .9 CMD.NEXT.LINE.RTS rts @@ -1165,15 +1184,12 @@ CMD.LOOP jsr CORE.StkPull bne .9 txa bmi .8 - lda (pData) - dec - dec Discard loop Ptr - sta (pData) - - clc - rts + + ldx #2 Discard loop Ptr + jmp CMD.EXIT.POPX .8 jmp CORE.StkPullInputBufPtr + .9 lda #E.NOWHILE sec rts diff --git a/BIN/SH.S.CORE.txt b/BIN/SH.S.CORE.txt index 3e84362a..43f8d5f1 100644 --- a/BIN/SH.S.CORE.txt +++ b/BIN/SH.S.CORE.txt @@ -627,12 +627,14 @@ CORE.StkPush.1 lda (pData) StackPtr inc cmp #CORE.STACK.MAX bcs .9 + sta (pData) StackPtr tay pla sta (pData),y * clc rts + .9 pla lda #E.STKOVERFLOW * sec diff --git a/BIN/SH.S.EXP.txt b/BIN/SH.S.EXP.txt index 4e5cf5a0..cc37e179 100644 --- a/BIN/SH.S.EXP.txt +++ b/BIN/SH.S.EXP.txt @@ -7,9 +7,11 @@ EXP.GET jsr CORE.ArgV.Next >LDYA ZPArgVBufPrev no op, return text value clc rts + .1 >LDYA ZPArgVBufPrev >SYSCALL AToL To Int32 on stack bcs .9 + .2 >LDYA L.EXP.OP.MATH + - .... ? jsr CORE.LookupArgVBuf bcs .94 @@ -31,10 +33,12 @@ EXP.GET jsr CORE.ArgV.Next bcs .9 >LEA.G M32.BUF rts + .94 >POP 4 .9 lda #E.ESYN sec rts + EXP.FPU.EXEC ldy CORE.Operator ldx EXP.OP.MATH.FPU,y @@ -155,9 +159,8 @@ EXP.OP.UNARY.F jsr EXP.OP.UNARY.STAT bra EXP.OP.UNARY.DEF.8 EXP.OP.UNARY.STAT - >PUSHEA.G StatBuf >LDYA ZPArgVBufPtr - >SYSCALL STAT + jsr IO.StatYA php jsr CORE.ArgV.Next @@ -196,18 +199,23 @@ EXP.TEST.BINARY lda CORE.Operator >STYA ZPPtr1 jsr CORE.ArgV.Next beq EXP.TEST.BINARY.ESYN + >PUSHW ZPPtr1 >LDYA ZPArgVBufPtr >SYSCALL strcmp bcs .1 CS if != + lda #%010 010 str1 = str2 bra EXP.TEST.BINARY.END + .1 asl CS if < bcs .2 + lda #%100 010 str1 < str2 -bra EXP.TEST.BINARY.END + bra EXP.TEST.BINARY.END + .2 lda #%001 010 str1 > str2 -bra EXP.TEST.BINARY.END + bra EXP.TEST.BINARY.END EXP.TEST.BINARY.ESYN4 >POP 4 diff --git a/BIN/SH.S.IO.txt b/BIN/SH.S.IO.txt index 0c00e415..7f7cc093 100644 --- a/BIN/SH.S.IO.txt +++ b/BIN/SH.S.IO.txt @@ -147,6 +147,14 @@ IO.FOpenYAX pha >SYSCALL fopen rts *-------------------------------------- +IO.StatYA phy + pha + >PUSHEA.G StatBuf + pla + ply + >SYSCALL STAT + rts +*-------------------------------------- IO.PrintBatchErrMsg >LDYA ZPInputBuf >STYA ZPPtr1 diff --git a/INC/A2osX.I.txt b/INC/A2osX.I.txt index 361dec3e..bca25d66 100644 --- a/INC/A2osX.I.txt +++ b/INC/A2osX.I.txt @@ -326,7 +326,7 @@ SYS.SListFree .EQ $FE S.MEM.F .EQ 0 S.MEM.F.INUSE .EQ %10000000 (Internal Flag) S.MEM.F.INIT0 .EQ %01000000 Fill with "0" -S.MEM.F.NOMOVE .EQ %00100000 +S.MEM.F.NOCROSS .EQ %00100000 S.MEM.F.ALIGN .EQ %00010000 S.MEM.F.FD .EQ %00001000 S.MEM.F.CODE .EQ %00000100 diff --git a/SBIN/LOGIN.S.txt b/SBIN/LOGIN.S.txt index c28df8bd..39b989bb 100644 --- a/SBIN/LOGIN.S.txt +++ b/SBIN/LOGIN.S.txt @@ -145,9 +145,8 @@ CS.RUN.AUTH >LDYA L.LIBCRYPT jmp CS.RUN.EXEC -.8 >PUSHBI 0 - >LDYA L.MSG.BAD - >SYSCALL printf +.8 >LDYA L.MSG.BAD + >SYSCALL puts bcs .9 dec ZPRetryCnt @@ -477,7 +476,7 @@ MSG.NOAUTH .AS "\r\n\r\nA2osX-Login:No ETC/PASSWD file present, Logged as ROOT. MSG.CRLF .AZ "\r\n" MSG.LOGIN .AZ "\r\nlogin:" MSG.PASSWORD .AZ "\r\npassword:" -MSG.BAD .AZ "Bad user or password\r\n" +MSG.BAD .AZ "Bad user or password" MSG.BS .DA #C.BS,#C.SPACE,#C.BS,#0 ETCISSUE .AZ "${ROOT}ETC/ISSUE" ETCMOTD .AZ "${ROOT}ETC/MOTD" diff --git a/SYS/KERNEL.S.INIT.txt b/SYS/KERNEL.S.INIT.txt index 2d1a93b5..ff67f3d8 100644 --- a/SYS/KERNEL.S.INIT.txt +++ b/SYS/KERNEL.S.INIT.txt @@ -162,6 +162,7 @@ Kernel.Init3C >PUSHBI 0 >PUSHBI 0 PS Flags >LDYAI CTRLR.SHELL bra .8 + .7 >PUSHWI ETCINIT.CMDLINE >PUSHBI 2 >LDYAI MSG.EtcInit @@ -169,8 +170,10 @@ Kernel.Init3C >PUSHBI 0 >PUSHBI 0 PS Flags >LDYAI ETCINIT.CMDLINE + .8 >SYSCALL2 ExecL bcs Kernel.Init3.Err + >PUSHBI 0 >LDYAI MSG.Init3.OK >SYSCALL2 printf diff --git a/SYS/KERNEL.S.IO.txt b/SYS/KERNEL.S.IO.txt index f3680470..73d641c5 100644 --- a/SYS/KERNEL.S.IO.txt +++ b/SYS/KERNEL.S.IO.txt @@ -189,7 +189,7 @@ IO.MLI.CREATE sta K.MLI.PARAMS+7 Storage Type rts *-------------------------------------- IO.MLI.OPEN >LDYAI 1024 get a ProDOS IOBUF - ldx #S.MEM.F.ALIGN+S.MEM.F.NOMOVE + ldx #S.MEM.F.ALIGN jsr MEM.GetMem.YAX bcs .9 diff --git a/SYS/KERNEL.S.MEM.txt b/SYS/KERNEL.S.MEM.txt index 053cb89b..406280e8 100644 --- a/SYS/KERNEL.S.MEM.txt +++ b/SYS/KERNEL.S.MEM.txt @@ -38,11 +38,14 @@ MEM.GetMem.YAX stx MEM.ReqFlags tya bit #K.MEM.ALIGN-1 aligned ? beq .10 yes, request it + and #K.MEM.nALIGNm1 align on boundary clc adc #K.MEM.ALIGN bcc .10 + inc ZPMemMgrSize+1 + .10 sta ZPMemMgrSize >LDYAI Mem.Table >STYA ZPMemMgrSPtr @@ -51,18 +54,35 @@ MEM.GetMem.YAX stx MEM.ReqFlags stx MEM.BestScore stx MEM.BestScore+1 ldx #0 Current slot=0 - bra .4 skip slot 0, Check if some free slot to reuse first + .1 inx move to next slot jsr Mem.NextSlot lda (ZPMemMgrSPtr) Get Flags bmi .4 in use ? + .2 lda MEM.ReqFlags Found an empty slot - and #S.MEM.F.ALIGN is request needs a page align ? - beq .3 + bit #S.MEM.F.NOCROSS + beq .21 + + ldy ZPMemMgrSize+1 > 255, not applicable + bne .22 Align to page if $100 + ldy #S.MEM.PTR + lda (ZPMemMgrSPtr),y get LO of PTR + clc + adc ZPMemMgrSize + bcs .4 cross page boundary.... + + lda MEM.ReqFlags get back flags to test if match + +.21 bit #S.MEM.F.ALIGN is request needs a page align ? + beq .3 + +.22 ldy #S.MEM.PTR lda (ZPMemMgrSPtr),y get LO of PTR bne .4 not page-aligned + .3 ldy #S.MEM.LEN sec lda (ZPMemMgrSPtr),y get LEN of this block @@ -72,7 +92,6 @@ MEM.GetMem.YAX stx MEM.ReqFlags lda (ZPMemMgrSPtr),y sbc ZPMemMgrSize+1 ply Y,A = SlotLen - ReqSize - bcc .4 req size > slot size cpy MEM.BestScore @@ -80,8 +99,8 @@ MEM.GetMem.YAX stx MEM.ReqFlags sbc MEM.BestScore+1 pla bcs .4 Delta is >= BestScore - bne .4 Delta is > 255... + sty MEM.BestScore sta MEM.BestScore+1 stx MEM.BestSlot @@ -96,18 +115,41 @@ MEM.GetMem.YAX stx MEM.ReqFlags *-------------- Create a New SLOT .5 lda MEM.ReqFlags - and #S.MEM.F.ALIGN is request needs a page align ? - beq .6 - lda Mem.Free target PTR will be page aligned ? - sec - sbc ZPMemMgrSize - beq .6 yes, allocate + bit #S.MEM.F.NOCROSS + beq .51 + + lda ZPMemMgrSize+1 > 255, not applicable + bne .52 Align to page if $100 + + lda Mem.Free target PTR will be in same page ? + cmp ZPMemMgrSize + bcs .6 yes, allocate + tay no, reserve a free slot to fill gap lda #0 jsr Mem.AddSlot X = new slot bcs .9 + + lda #S.MEM.F.NOCROSS Make sure marked FREE + sta (ZPMemMgrSPtr) + bra .6 + +.51 bit #S.MEM.F.ALIGN is request needs a page align ? + beq .6 + +.52 lda Mem.Free target PTR will be page aligned ? + sec + sbc ZPMemMgrSize + beq .6 yes, allocate + + tay no, reserve a free slot to fill gap + lda #0 + jsr Mem.AddSlot X = new slot + bcs .9 + lda #S.MEM.F.ALIGN Make sure marked FREE sta (ZPMemMgrSPtr) + .6 >LDYA ZPMemMgrSize jsr Mem.AddSlot X = new slot bcs .9 @@ -119,30 +161,8 @@ MEM.GetMem.YAX stx MEM.ReqFlags and #S.MEM.F.INIT0 beq .8 - ldy #S.MEM.PTR - lda (ZPMemMgrSPtr),y ZPMemMgrSPtr already set - sta .12+1 - iny - lda (ZPMemMgrSPtr),y - sta .12+2 - lda ZPMemMgrSize - eor #$ff - tay y=not lo count - lda ZPMemMgrSize+1 - eor #$ff a=not hi count - phx - ldx #0 -.11 iny - bne .12 - inc - beq .13 -.12 stz $ffff,x - inx - bne .11 - inc .12+2 - bra .11 -.13 plx - + jsr MEM.Init0 + .8 lda #0 ldy #S.MEM.BIN sta (ZPMemMgrSPtr),y @@ -167,6 +187,7 @@ Mem.AddSlot >STYA ZPMemMgrTmp1 save req size ldx Mem.LastSlot inx beq .99 > 255 ERR:OUT OF SLOT + lda Mem.Free Compute base PTR=FREE-REQ size sec sbc ZPMemMgrTmp1 @@ -199,6 +220,7 @@ Mem.AddSlot >STYA ZPMemMgrTmp1 save req size clc rts .98 pla discard new Mem.Free HI + .99 lda #E.OOM sec rts @@ -209,7 +231,38 @@ MEM.NextSlot lda ZPMemMgrSPtr sta ZPMemMgrSPtr bcc .8 inc ZPMemMgrSPtr+1 -.8 rts +.8 rts +*-------------------------------------- +MEM.Init0 phx + ldy #S.MEM.PTR + lda (ZPMemMgrSPtr),y ZPMemMgrSPtr already set + sta .12+1 + iny + lda (ZPMemMgrSPtr),y + sta .12+2 + lda ZPMemMgrSize + eor #$ff + tay y=not lo count + lda ZPMemMgrSize+1 + eor #$ff a=not hi count + + ldx #0 + +.11 iny + bne .12 + + inc + beq .13 + +.12 stz $ffff,x + inx + bne .11 + + inc .12+2 + bra .11 + +.13 plx + rts */-------------------------------------- * # FreeMem * A = hMem To Free diff --git a/SYS/KERNEL.S.PS.txt b/SYS/KERNEL.S.PS.txt index 3db0f61a..b19b97e7 100644 --- a/SYS/KERNEL.S.PS.txt +++ b/SYS/KERNEL.S.PS.txt @@ -57,6 +57,7 @@ K.ExecL sty .1+1 *\-------------------------------------- K.ExecV >STYA PS.ArgV >PULLB PS.Flags + PS.Exec jsr PS.CreateChild A=PID,Child S.PS at PS.NewPSPtr,PS.Load.hMem bcs .9 sta .8+1 @@ -208,14 +209,18 @@ PS.Load ldy #$ff .1 iny lda (PS.ArgV),y beq .2 no / in path...try search in PATH + cmp #'/' bne .1 + >PUSHWI K.S.STAT >LDYA PS.ArgV found /, some path specified, no search ldx #SYS.stat jsr K.SYSCALL2 bcc .6 REAL path in K.Buf256 + .99 rts + .2 >LDYA PS.ArgV jsr ENV.Search.PATH Get fullpath in K.Buf256 bcc .6 @@ -226,9 +231,11 @@ PS.Load ldy #$ff >LDYA PS.ArgV jsr ENV.Search.YA bcs .99 + .6 lda K.S.STAT+S.STAT.P.TYPE cmp #S.FI.T.BIN beq PS.LoadBIN + .7 cmp #S.FI.T.TXT beq PS.Load.SCRIPT @@ -289,7 +296,7 @@ PS.Load.SCRIPT ldx #$ff PS.LoadBIN jsr BIN.Load K.Buf256= "${ROOT}BIN/SHELL\0", K.IOBuf=/.../SCRIPT bcs .9 >STYA ZPPtr4 save PTR to Code Segment - + phy ldy #S.PS.ZP.CODE+1 sta (PS.NewPSPtr),y save pCode HI... @@ -327,23 +334,20 @@ PS.LoadBIN jsr BIN.Load K.Buf256= "${ROOT}BIN/SHELL\0", K.IOBuf=/.../SCRIPT phy ldy #S.PS.ZP.DATA+1 - sta (PS.NewPSPtr),y save pData HI... + sta (PS.NewPSPtr),y save pData HI... dey pla - sta (PS.NewPSPtr),y save pData LO... + sta (PS.NewPSPtr),y save pData LO... txa ldy #S.PS.hDS - sta (PS.NewPSPtr),y save DS hMem in S.PS + sta (PS.NewPSPtr),y save DS hMem in S.PS jsr Mem.SetOwner Set Ownership .2 ldy #H.BIN.SS.SIZE lda (ZPPtr4),y Load SS.SIZE - ldy #S.PS.ZP.STACK - sta (PS.NewPSPtr),y save pStack LO... - tay beq .3 SS.SIZE.LO=0, set as default $100 @@ -351,19 +355,29 @@ PS.LoadBIN jsr BIN.Load K.Buf256= "${ROOT}BIN/SHELL\0", K.IOBuf=/.../SCRIPT .3 inc - ldx #S.MEM.F.ALIGN+S.MEM.F.STACK + ldx #S.MEM.F.NOCROSS+S.MEM.F.STACK jsr MEM.GetMem.YAX bcs .9 + phy save pStack base LO ldy #S.PS.ZP.STACK+1 - sta (PS.NewPSPtr),y save pStack HI...(LO already set to Stack TOP) + sta (PS.NewPSPtr),y save pStack HI... ldy #S.PS.ZP.LOCAL+1 + sta (PS.NewPSPtr),y save pLocal HI... + + pla make pStack = Base... + ldy #H.BIN.SS.SIZE ...plus Stack size +* clc + adc (ZPPtr4),y + + ldy #S.PS.ZP.STACK sta (PS.NewPSPtr),y + txa ldy #S.PS.hSS - sta (PS.NewPSPtr),y save SS hMem in S.PS - + sta (PS.NewPSPtr),y save SS hMem in S.PS + clc Potentially CS from ADC (ZPPtr4),y jmp Mem.SetOwner Set Ownership .9 rts *--------------------------------------