Kernel 0.93+

This commit is contained in:
Rémy GIBERT 2019-11-15 15:40:48 +01:00
parent a4c15ff86a
commit 6f4c01182e
12 changed files with 204 additions and 101 deletions

Binary file not shown.

View File

@ -255,7 +255,7 @@ MSG3 .AZ "High Memory: $%H\r\n"
MSG4 .AZ "Free ULimit: $%H\r\n" MSG4 .AZ "Free ULimit: $%H\r\n"
MSG5 .AZ "Low Memory: $%H\r\n" MSG5 .AZ "Low Memory: $%H\r\n"
MSG.FREE .AZ "\r\nFree Memory: %D Bytes.\r\n" MSG.FREE .AZ "\r\nFree Memory: %D Bytes.\r\n"
MSG.FLAGS .AS "UZNAfcds" MSG.FLAGS .AS "UZXAfcds"
*-------------------------------------- *--------------------------------------
.DUMMY .DUMMY
.OR 0 .OR 0

View File

@ -98,9 +98,8 @@ CMD.CD.YA >SYSCALL realpath
txa txa
jmp CMD.SetCWDA we have '/' jmp CMD.SetCWDA we have '/'
.12 >PUSHEA.G StatBuf .12 >LDYA ZPPtr1
>LDYA ZPPtr1 jsr IO.StatYA
>SYSCALL STAT
bcs .19 bcs .19
.10 >LDA.G StatBuf+S.STAT.P.TYPE .10 >LDA.G StatBuf+S.STAT.P.TYPE
@ -241,18 +240,23 @@ CMD.SET.1
bne .99 bne .99
jsr CORE.ArgV.Next jsr CORE.ArgV.Next
beq CMD.SET.UNSET beq CMD.SET.UNSET
cmp #'`' cmp #'`'
beq CMD.SET.EXEC beq CMD.SET.EXEC
jsr EXP.GET jsr EXP.GET
bcs .9 bcc CMD.SET.YA
>PUSHYA
>LDYA ZPVarNamePtr
>SYSCALL SetEnv
rts rts
.8 clc .8 clc
.9 rts .9 rts
.99 jmp CMD.E.CSYN .99 jmp CMD.E.CSYN
CMD.SET.YA >PUSHYA
>LDYA ZPVarNamePtr
>SYSCALL SetEnv
rts
CMD.SET.UNSET >LDYA ZPVarNamePtr CMD.SET.UNSET >LDYA ZPVarNamePtr
>SYSCALL UnsetEnv >SYSCALL UnsetEnv
rts rts
@ -262,6 +266,7 @@ CMD.SET.GET >LDYA ZPVarNamePtr
bcc .1 bcc .1
clc clc
rts rts
.1 >PUSHYA push value .1 >PUSHYA push value
>LDYA ZPVarNamePtr >LDYA ZPVarNamePtr
>PUSHYA push name >PUSHYA push name
@ -409,7 +414,7 @@ CMD.READ lda (ZPArgVBufPtr)
CMD.READ.VAR jsr CL.Reset CMD.READ.VAR jsr CL.Reset
.1 >SYSCALL GetChar .1 >SYSCALL GetChar
bcs CMD.READ.VAR.9 bcs CMD.SLEEP.RTS
jsr CL.CHARIN jsr CL.CHARIN
@ -417,18 +422,12 @@ CMD.READ.VAR jsr CL.Reset
bpl .1 bpl .1
lda (ZPCLBuf) lda (ZPCLBuf)
bne CMD.READ.VAR.SET bne .2
CMD.READ.VAR.UNSET jmp CMD.SET.UNSET
>LDYA ZPVarNamePtr
>SYSCALL UnSetEnv
rts
CMD.READ.VAR.SET
>PUSHW ZPCLBuf
>LDYA ZPVarNamePtr
>SYSCALL SetEnv
CMD.READ.VAR.9 rts .2 >LDYA ZPCLBuf
jmp CMD.SET.YA
*-------------------------------------- *--------------------------------------
CMD.SLEEP lda (ZPArgVBufPtr) CMD.SLEEP lda (ZPArgVBufPtr)
beq CMD.REN.CSYN beq CMD.REN.CSYN
@ -439,7 +438,7 @@ CMD.SLEEP lda (ZPArgVBufPtr)
>PULLL.G Sleep >PULLL.G Sleep
clc clc
rts CMD.SLEEP.RTS rts
*-------------------------------------- *--------------------------------------
CMD.PAUSE lda #$FF CMD.PAUSE lda #$FF
>STA.G bPause >STA.G bPause
@ -461,10 +460,11 @@ CMD.PWD ldy #S.PS.hCWD
*-------------------------------------- *--------------------------------------
CMD.RD lda (ZPArgVBufPtr) CMD.RD lda (ZPArgVBufPtr)
beq CMD.REN.CSYN beq CMD.REN.CSYN
>PUSHEA.G StatBuf
>LDYA ZPArgVBufPtr >LDYA ZPArgVBufPtr
>SYSCALL STAT jsr IO.StatYA
bcs .99 bcs .99
>LDA.G StatBuf+S.STAT.P.TYPE >LDA.G StatBuf+S.STAT.P.TYPE
cmp #S.FI.T.DIR cmp #S.FI.T.DIR
bne CMD.REN.CSYN bne CMD.REN.CSYN
@ -716,6 +716,7 @@ CMD.EXIT.POP and #$3F
cmp #C.SWITCH SWITCH : hValue cmp #C.SWITCH SWITCH : hValue
beq .2 beq .2
ldx #1 ldx #1
cmp #C.CASE CASE : C.CASE + hValue cmp #C.CASE CASE : C.CASE + hValue
beq .1 beq .1
@ -799,13 +800,15 @@ CMD.CASE jsr CORE.StkGetCtx Get context in CORE.TestResult
rts keep existing context rts keep existing context
.10 jsr CORE.StkPull remove previous C.CASE .10 jsr CORE.StkPull remove previous C.CASE
bra CMD.CASE bra CMD.CASE
.1 jsr EXP.GET .1 jsr EXP.GET
bcs .9 bcs .9
>PUSHYA >PUSHYA
lda (pDATA) lda (pData)
tay tay
dey get hVALUE dey get hVALUE
lda (pDATA),y lda (pData),y
>SYSCALL GetMemPtr >SYSCALL GetMemPtr
>SYSCALL strcmp >SYSCALL strcmp
ror CS if != ror CS if !=
@ -823,10 +826,13 @@ CMD.DEFAULT jsr CORE.StkGetCtx Get context in CORE.TestResult
bcs CMD.E.CSYN bcs CMD.E.CSYN
and #$3F and #$3F
cmp #C.SWITCH cmp #C.SWITCH
beq .1 beq .1
cmp #C.CASE cmp #C.CASE
bne CMD.E.CSYN bne CMD.E.CSYN
jsr CORE.StkPull remove C.CASE jsr CORE.StkPull remove C.CASE
.1 jsr CORE.StkGet .1 jsr CORE.StkGet
@ -838,10 +844,13 @@ CMD.END jsr CORE.StkGetCtx Get context in CORE.TestResult
bcs CMD.E.CSYN bcs CMD.E.CSYN
and #$3F and #$3F
cmp #C.SWITCH cmp #C.SWITCH
beq .3 beq .3
cmp #C.CASE cmp #C.CASE
beq .2 beq .2
cmp #C.DEFAULT cmp #C.DEFAULT
bne CMD.E.CSYN bne CMD.E.CSYN
.2 jsr CORE.StkPull remove C.CASE or C.DEFAULT .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 CMD.NEXT.LIST lda (pData),y Y = StkPtr
bpl .1 bpl .1
jsr CMD.NEXT.LIST.TOKEN jsr CMD.NEXT.LIST.TOKEN
bcs .9 bcs .9
bpl .1 bpl .1
lda (pData) lda (pData)
sec sec
sbc #6 sbc #6
@ -985,11 +996,13 @@ CMD.NEXT.LIST lda (pData),y Y = StkPtr
sta ZPInputBufPtr+1 sta ZPInputBufPtr+1
clc clc
rts rts
.1 lda (pData) .1 lda (pData)
tay tay
sec sec
sbc #8 sbc #8
sta (pData) sta (pData)
dey dey
dey dey
lda (pData),y hVARNAME lda (pData),y hVARNAME
@ -1036,12 +1049,15 @@ CMD.NEXT.LIST.TOKEN
sta (ZPCLBuf),y sta (ZPCLBuf),y
iny iny
bra .1 bra .1
.3 lda #0 .3 lda #0
sta (ZPCLBuf),y sta (ZPCLBuf),y
tya tya
beq .8 beq .8
jsr CMD.READ.VAR.SET
>LDYA ZPCLBuf
jsr CMD.SET.YA
bcs .9 bcs .9
lda (pData) lda (pData)
@ -1053,14 +1069,12 @@ CMD.NEXT.LIST.TOKEN
dey dey
lda ZPPtr1+1 lda ZPPtr1+1
sta (pData),y sta (pData),y
lda #$80 lda #$80
clc clc
rts
.8 jsr CMD.READ.VAR.UNSET
bcs .9
lda #0
* clc
.9 rts .9 rts
.8 jmp CMD.NEXT.END
*-------------------------------------- *--------------------------------------
* stack-4 CmdPtr * stack-4 CmdPtr
* stack-3 hFILE/hPIPE * stack-3 hFILE/hPIPE
@ -1087,11 +1101,13 @@ CMD.NEXT.FILEEXEC
sta ZPInputBufPtr+1 sta ZPInputBufPtr+1
clc clc
rts rts
.1 lda (pData) .1 lda (pData)
tay tay
sec sec
sbc #6 sbc #6
sta (pData) sta (pData)
dey dey
dey dey
lda (pData),y hVARNAME lda (pData),y hVARNAME
@ -1120,17 +1136,20 @@ CMD.NEXT.LINE lda (pData)
dey dey
lda (pData),y hFILE/hPIPE lda (pData),y hFILE/hPIPE
>SYSCALL fgets >SYSCALL fgets
bcs .8 bcs CMD.NEXT.END
jsr CMD.READ.VAR.SET
bcs .9 >LDYA ZPCLBuf
jsr CMD.SET.YA
bcs CMD.NEXT.LINE.RTS
lda #$80 lda #$80
* clc * clc
rts rts
.8 jsr CMD.READ.VAR.UNSET
CMD.NEXT.END jsr CMD.SET.UNSET
bcs .9 bcs .9
lda #0 lda #0
* clc clc keep this CLC for CMD.NEXT.LIST.TOKEN
.9 .9
CMD.NEXT.LINE.RTS CMD.NEXT.LINE.RTS
rts rts
@ -1165,15 +1184,12 @@ CMD.LOOP jsr CORE.StkPull
bne .9 bne .9
txa txa
bmi .8 bmi .8
lda (pData)
dec
dec Discard loop Ptr
sta (pData)
clc ldx #2 Discard loop Ptr
rts jmp CMD.EXIT.POPX
.8 jmp CORE.StkPullInputBufPtr .8 jmp CORE.StkPullInputBufPtr
.9 lda #E.NOWHILE .9 lda #E.NOWHILE
sec sec
rts rts

View File

@ -627,12 +627,14 @@ CORE.StkPush.1 lda (pData) StackPtr
inc inc
cmp #CORE.STACK.MAX cmp #CORE.STACK.MAX
bcs .9 bcs .9
sta (pData) StackPtr sta (pData) StackPtr
tay tay
pla pla
sta (pData),y sta (pData),y
* clc * clc
rts rts
.9 pla .9 pla
lda #E.STKOVERFLOW lda #E.STKOVERFLOW
* sec * sec

View File

@ -7,9 +7,11 @@ EXP.GET jsr CORE.ArgV.Next
>LDYA ZPArgVBufPrev no op, return text value >LDYA ZPArgVBufPrev no op, return text value
clc clc
rts rts
.1 >LDYA ZPArgVBufPrev .1 >LDYA ZPArgVBufPrev
>SYSCALL AToL To Int32 on stack >SYSCALL AToL To Int32 on stack
bcs .9 bcs .9
.2 >LDYA L.EXP.OP.MATH + - .... ? .2 >LDYA L.EXP.OP.MATH + - .... ?
jsr CORE.LookupArgVBuf jsr CORE.LookupArgVBuf
bcs .94 bcs .94
@ -31,10 +33,12 @@ EXP.GET jsr CORE.ArgV.Next
bcs .9 bcs .9
>LEA.G M32.BUF >LEA.G M32.BUF
rts rts
.94 >POP 4 .94 >POP 4
.9 lda #E.ESYN .9 lda #E.ESYN
sec sec
rts rts
EXP.FPU.EXEC ldy CORE.Operator EXP.FPU.EXEC ldy CORE.Operator
ldx EXP.OP.MATH.FPU,y 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 bra EXP.OP.UNARY.DEF.8
EXP.OP.UNARY.STAT EXP.OP.UNARY.STAT
>PUSHEA.G StatBuf
>LDYA ZPArgVBufPtr >LDYA ZPArgVBufPtr
>SYSCALL STAT jsr IO.StatYA
php php
jsr CORE.ArgV.Next jsr CORE.ArgV.Next
@ -196,18 +199,23 @@ EXP.TEST.BINARY lda CORE.Operator
>STYA ZPPtr1 >STYA ZPPtr1
jsr CORE.ArgV.Next jsr CORE.ArgV.Next
beq EXP.TEST.BINARY.ESYN beq EXP.TEST.BINARY.ESYN
>PUSHW ZPPtr1 >PUSHW ZPPtr1
>LDYA ZPArgVBufPtr >LDYA ZPArgVBufPtr
>SYSCALL strcmp >SYSCALL strcmp
bcs .1 CS if != bcs .1 CS if !=
lda #%010 010 str1 = str2 lda #%010 010 str1 = str2
bra EXP.TEST.BINARY.END bra EXP.TEST.BINARY.END
.1 asl CS if < .1 asl CS if <
bcs .2 bcs .2
lda #%100 010 str1 < str2 lda #%100 010 str1 < str2
bra EXP.TEST.BINARY.END bra EXP.TEST.BINARY.END
.2 lda #%001 010 str1 > str2 .2 lda #%001 010 str1 > str2
bra EXP.TEST.BINARY.END bra EXP.TEST.BINARY.END
EXP.TEST.BINARY.ESYN4 EXP.TEST.BINARY.ESYN4
>POP 4 >POP 4

View File

@ -147,6 +147,14 @@ IO.FOpenYAX pha
>SYSCALL fopen >SYSCALL fopen
rts rts
*-------------------------------------- *--------------------------------------
IO.StatYA phy
pha
>PUSHEA.G StatBuf
pla
ply
>SYSCALL STAT
rts
*--------------------------------------
IO.PrintBatchErrMsg IO.PrintBatchErrMsg
>LDYA ZPInputBuf >LDYA ZPInputBuf
>STYA ZPPtr1 >STYA ZPPtr1

View File

@ -326,7 +326,7 @@ SYS.SListFree .EQ $FE
S.MEM.F .EQ 0 S.MEM.F .EQ 0
S.MEM.F.INUSE .EQ %10000000 (Internal Flag) S.MEM.F.INUSE .EQ %10000000 (Internal Flag)
S.MEM.F.INIT0 .EQ %01000000 Fill with "0" 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.ALIGN .EQ %00010000
S.MEM.F.FD .EQ %00001000 S.MEM.F.FD .EQ %00001000
S.MEM.F.CODE .EQ %00000100 S.MEM.F.CODE .EQ %00000100

View File

@ -145,9 +145,8 @@ CS.RUN.AUTH >LDYA L.LIBCRYPT
jmp CS.RUN.EXEC jmp CS.RUN.EXEC
.8 >PUSHBI 0 .8 >LDYA L.MSG.BAD
>LDYA L.MSG.BAD >SYSCALL puts
>SYSCALL printf
bcs .9 bcs .9
dec ZPRetryCnt 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.CRLF .AZ "\r\n"
MSG.LOGIN .AZ "\r\nlogin:" MSG.LOGIN .AZ "\r\nlogin:"
MSG.PASSWORD .AZ "\r\npassword:" 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 MSG.BS .DA #C.BS,#C.SPACE,#C.BS,#0
ETCISSUE .AZ "${ROOT}ETC/ISSUE" ETCISSUE .AZ "${ROOT}ETC/ISSUE"
ETCMOTD .AZ "${ROOT}ETC/MOTD" ETCMOTD .AZ "${ROOT}ETC/MOTD"

View File

@ -162,6 +162,7 @@ Kernel.Init3C >PUSHBI 0
>PUSHBI 0 PS Flags >PUSHBI 0 PS Flags
>LDYAI CTRLR.SHELL >LDYAI CTRLR.SHELL
bra .8 bra .8
.7 >PUSHWI ETCINIT.CMDLINE .7 >PUSHWI ETCINIT.CMDLINE
>PUSHBI 2 >PUSHBI 2
>LDYAI MSG.EtcInit >LDYAI MSG.EtcInit
@ -169,8 +170,10 @@ Kernel.Init3C >PUSHBI 0
>PUSHBI 0 PS Flags >PUSHBI 0 PS Flags
>LDYAI ETCINIT.CMDLINE >LDYAI ETCINIT.CMDLINE
.8 >SYSCALL2 ExecL .8 >SYSCALL2 ExecL
bcs Kernel.Init3.Err bcs Kernel.Init3.Err
>PUSHBI 0 >PUSHBI 0
>LDYAI MSG.Init3.OK >LDYAI MSG.Init3.OK
>SYSCALL2 printf >SYSCALL2 printf

View File

@ -189,7 +189,7 @@ IO.MLI.CREATE sta K.MLI.PARAMS+7 Storage Type
rts rts
*-------------------------------------- *--------------------------------------
IO.MLI.OPEN >LDYAI 1024 get a ProDOS IOBUF 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 jsr MEM.GetMem.YAX
bcs .9 bcs .9

View File

@ -38,11 +38,14 @@ MEM.GetMem.YAX stx MEM.ReqFlags
tya tya
bit #K.MEM.ALIGN-1 aligned ? bit #K.MEM.ALIGN-1 aligned ?
beq .10 yes, request it beq .10 yes, request it
and #K.MEM.nALIGNm1 align on boundary and #K.MEM.nALIGNm1 align on boundary
clc clc
adc #K.MEM.ALIGN adc #K.MEM.ALIGN
bcc .10 bcc .10
inc ZPMemMgrSize+1 inc ZPMemMgrSize+1
.10 sta ZPMemMgrSize .10 sta ZPMemMgrSize
>LDYAI Mem.Table >LDYAI Mem.Table
>STYA ZPMemMgrSPtr >STYA ZPMemMgrSPtr
@ -51,18 +54,35 @@ MEM.GetMem.YAX stx MEM.ReqFlags
stx MEM.BestScore stx MEM.BestScore
stx MEM.BestScore+1 stx MEM.BestScore+1
ldx #0 Current slot=0 ldx #0 Current slot=0
bra .4 skip slot 0, Check if some free slot to reuse first bra .4 skip slot 0, Check if some free slot to reuse first
.1 inx move to next slot .1 inx move to next slot
jsr Mem.NextSlot jsr Mem.NextSlot
lda (ZPMemMgrSPtr) Get Flags lda (ZPMemMgrSPtr) Get Flags
bmi .4 in use ? bmi .4 in use ?
.2 lda MEM.ReqFlags Found an empty slot .2 lda MEM.ReqFlags Found an empty slot
and #S.MEM.F.ALIGN is request needs a page align ? bit #S.MEM.F.NOCROSS
beq .3 beq .21
ldy ZPMemMgrSize+1 > 255, not applicable
bne .22 Align to page if $100
ldy #S.MEM.PTR 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 lda (ZPMemMgrSPtr),y get LO of PTR
bne .4 not page-aligned bne .4 not page-aligned
.3 ldy #S.MEM.LEN .3 ldy #S.MEM.LEN
sec sec
lda (ZPMemMgrSPtr),y get LEN of this block lda (ZPMemMgrSPtr),y get LEN of this block
@ -72,7 +92,6 @@ MEM.GetMem.YAX stx MEM.ReqFlags
lda (ZPMemMgrSPtr),y lda (ZPMemMgrSPtr),y
sbc ZPMemMgrSize+1 sbc ZPMemMgrSize+1
ply Y,A = SlotLen - ReqSize ply Y,A = SlotLen - ReqSize
bcc .4 req size > slot size bcc .4 req size > slot size
cpy MEM.BestScore cpy MEM.BestScore
@ -80,8 +99,8 @@ MEM.GetMem.YAX stx MEM.ReqFlags
sbc MEM.BestScore+1 sbc MEM.BestScore+1
pla pla
bcs .4 Delta is >= BestScore bcs .4 Delta is >= BestScore
bne .4 Delta is > 255... bne .4 Delta is > 255...
sty MEM.BestScore sty MEM.BestScore
sta MEM.BestScore+1 sta MEM.BestScore+1
stx MEM.BestSlot stx MEM.BestSlot
@ -96,18 +115,41 @@ MEM.GetMem.YAX stx MEM.ReqFlags
*-------------- Create a New SLOT *-------------- Create a New SLOT
.5 lda MEM.ReqFlags .5 lda MEM.ReqFlags
and #S.MEM.F.ALIGN is request needs a page align ? bit #S.MEM.F.NOCROSS
beq .6 beq .51
lda Mem.Free target PTR will be page aligned ?
sec lda ZPMemMgrSize+1 > 255, not applicable
sbc ZPMemMgrSize bne .52 Align to page if $100
beq .6 yes, allocate
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 tay no, reserve a free slot to fill gap
lda #0 lda #0
jsr Mem.AddSlot X = new slot jsr Mem.AddSlot X = new slot
bcs .9 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 lda #S.MEM.F.ALIGN Make sure marked FREE
sta (ZPMemMgrSPtr) sta (ZPMemMgrSPtr)
.6 >LDYA ZPMemMgrSize .6 >LDYA ZPMemMgrSize
jsr Mem.AddSlot X = new slot jsr Mem.AddSlot X = new slot
bcs .9 bcs .9
@ -119,29 +161,7 @@ MEM.GetMem.YAX stx MEM.ReqFlags
and #S.MEM.F.INIT0 and #S.MEM.F.INIT0
beq .8 beq .8
ldy #S.MEM.PTR jsr MEM.Init0
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
.8 lda #0 .8 lda #0
ldy #S.MEM.BIN ldy #S.MEM.BIN
@ -167,6 +187,7 @@ Mem.AddSlot >STYA ZPMemMgrTmp1 save req size
ldx Mem.LastSlot ldx Mem.LastSlot
inx inx
beq .99 > 255 ERR:OUT OF SLOT beq .99 > 255 ERR:OUT OF SLOT
lda Mem.Free Compute base PTR=FREE-REQ size lda Mem.Free Compute base PTR=FREE-REQ size
sec sec
sbc ZPMemMgrTmp1 sbc ZPMemMgrTmp1
@ -199,6 +220,7 @@ Mem.AddSlot >STYA ZPMemMgrTmp1 save req size
clc clc
rts rts
.98 pla discard new Mem.Free HI .98 pla discard new Mem.Free HI
.99 lda #E.OOM .99 lda #E.OOM
sec sec
rts rts
@ -210,6 +232,37 @@ MEM.NextSlot lda ZPMemMgrSPtr
bcc .8 bcc .8
inc ZPMemMgrSPtr+1 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 * # FreeMem
* A = hMem To Free * A = hMem To Free

View File

@ -57,6 +57,7 @@ K.ExecL sty .1+1
*\-------------------------------------- *\--------------------------------------
K.ExecV >STYA PS.ArgV K.ExecV >STYA PS.ArgV
>PULLB PS.Flags >PULLB PS.Flags
PS.Exec jsr PS.CreateChild A=PID,Child S.PS at PS.NewPSPtr,PS.Load.hMem PS.Exec jsr PS.CreateChild A=PID,Child S.PS at PS.NewPSPtr,PS.Load.hMem
bcs .9 bcs .9
sta .8+1 sta .8+1
@ -208,14 +209,18 @@ PS.Load ldy #$ff
.1 iny .1 iny
lda (PS.ArgV),y lda (PS.ArgV),y
beq .2 no / in path...try search in PATH beq .2 no / in path...try search in PATH
cmp #'/' cmp #'/'
bne .1 bne .1
>PUSHWI K.S.STAT >PUSHWI K.S.STAT
>LDYA PS.ArgV found /, some path specified, no search >LDYA PS.ArgV found /, some path specified, no search
ldx #SYS.stat ldx #SYS.stat
jsr K.SYSCALL2 jsr K.SYSCALL2
bcc .6 REAL path in K.Buf256 bcc .6 REAL path in K.Buf256
.99 rts .99 rts
.2 >LDYA PS.ArgV .2 >LDYA PS.ArgV
jsr ENV.Search.PATH Get fullpath in K.Buf256 jsr ENV.Search.PATH Get fullpath in K.Buf256
bcc .6 bcc .6
@ -226,9 +231,11 @@ PS.Load ldy #$ff
>LDYA PS.ArgV >LDYA PS.ArgV
jsr ENV.Search.YA jsr ENV.Search.YA
bcs .99 bcs .99
.6 lda K.S.STAT+S.STAT.P.TYPE .6 lda K.S.STAT+S.STAT.P.TYPE
cmp #S.FI.T.BIN cmp #S.FI.T.BIN
beq PS.LoadBIN beq PS.LoadBIN
.7 cmp #S.FI.T.TXT .7 cmp #S.FI.T.TXT
beq PS.Load.SCRIPT beq PS.Load.SCRIPT
@ -327,23 +334,20 @@ PS.LoadBIN jsr BIN.Load K.Buf256= "${ROOT}BIN/SHELL\0", K.IOBuf=/.../SCRIPT
phy phy
ldy #S.PS.ZP.DATA+1 ldy #S.PS.ZP.DATA+1
sta (PS.NewPSPtr),y save pData HI... sta (PS.NewPSPtr),y save pData HI...
dey dey
pla pla
sta (PS.NewPSPtr),y save pData LO... sta (PS.NewPSPtr),y save pData LO...
txa txa
ldy #S.PS.hDS 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 jsr Mem.SetOwner Set Ownership
.2 ldy #H.BIN.SS.SIZE .2 ldy #H.BIN.SS.SIZE
lda (ZPPtr4),y Load SS.SIZE lda (ZPPtr4),y Load SS.SIZE
ldy #S.PS.ZP.STACK
sta (PS.NewPSPtr),y save pStack LO...
tay tay
beq .3 SS.SIZE.LO=0, set as default $100 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 .3 inc
ldx #S.MEM.F.ALIGN+S.MEM.F.STACK ldx #S.MEM.F.NOCROSS+S.MEM.F.STACK
jsr MEM.GetMem.YAX jsr MEM.GetMem.YAX
bcs .9 bcs .9
phy save pStack base LO
ldy #S.PS.ZP.STACK+1 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 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 sta (PS.NewPSPtr),y
txa txa
ldy #S.PS.hSS 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 jmp Mem.SetOwner Set Ownership
.9 rts .9 rts
*-------------------------------------- *--------------------------------------