Kernel 0.92+

This commit is contained in:
Rémy GIBERT 2019-02-03 21:58:26 +00:00
parent 80567cfd8d
commit 8e1da7eb9a
11 changed files with 222 additions and 230 deletions

Binary file not shown.

View File

@ -54,8 +54,7 @@ CS.INIT >LDYA L.LIBTCPIP
CS.RUN >LIBCALL hLIBTCPIP,LIBTCPIP.GETCFG
>STYA ZPPTR1
ldy #S.IPCFG.STATUS
lda (ZPPTR1),y
lda (ZPPTR1)
bmi .1
jmp CS.RUN.ERR

View File

@ -3,46 +3,20 @@ PREFIX
AUTO 4,1
.LIST OFF
*--------------------------------------
CMD.STARTPROC
clc
rts
CMD.NOHUP >LDA.G CORE.PSFlags
ora #S.PS.F.NOHUP
sta (pData),y
>LDYA ZPArgVBuf
jsr RemoveStrFromArgV
jmp CORE.ExecExtCmd
*--------------------------------------
CMD.SHIFT lda #1
CMD.SHIFTA >SYSCALL ArgV
bcs .8
>STYA ZPPtr1
>STYA ZPPtr2
.10 ldy #$ff
.1 iny Compute ArgX len
lda (ZPPtr1),y
bne .1
.2 tya
sec
adc ZPPtr1
sta ZPPtr1
bcc .3
inc ZPPtr1+1
.3 ldy #$ff
.4 iny
lda (ZPPtr1),y
sta (ZPPtr2),y
bne .4
tya
beq .7
sec
adc ZPPtr2
sta ZPPtr2
bcc .2
inc ZPPtr2+1
bra .2
jsr RemoveStrFromArgV
.7 ldy #S.PS.ARGC
lda (pPS),y
@ -52,12 +26,6 @@ CMD.SHIFTA >SYSCALL ArgV
.8 clc
rts
*--------------------------------------
CMD.PWD ldy #S.PS.hPREFIX
lda (pPs),y
>SYSCALL GetMemPtr
>SYSCALL puts
rts
*--------------------------------------
CMD.PUSHD >LDA.G PUSHD.STACK
cmp #PUSHD.STACK+PUSHD.STACK.MAX
beq CMD.POPD.CSYN
@ -86,14 +54,20 @@ CMD.POPD >LDA.G PUSHD.STACK
tay
lda (pData),y
jsr CORE.SetPrefixA
jsr CMD.SetPrefixA
>DEC.G PUSHD.STACK
clc
CMD.POPD.RTS
rts
CMD.POPD.CSYN jmp CORE.Exec.CSYN
CMD.POPD.CSYN jmp CMD.Exec.CSYN
*--------------------------------------
CMD.PWD ldy #S.PS.hPREFIX
lda (pPs),y
>SYSCALL GetMemPtr
>SYSCALL puts
rts
*--------------------------------------
CMD.CD ldx #1
jsr CORE.GetArgX
@ -105,34 +79,41 @@ CMD.CD.HOME >LDYA L.ENV.HOME
>LDYA L.ENV.ROOT
>SYSCALL GetEnv
bcc CMD.CD.1
jmp CMD.PWD
CMD.CD.1.9 pla
>SYSCALL freemem
bra CMD.POPD.CSYN
bcs CMD.PWD
CMD.CD.1 >SYSCALL realpath
bcs CMD.POPD.RTS
>STYA ZPPtr1
phx
stx ZPPtr3 Save hMem
ldy #1
lda (ZPPtr1),y
beq CORE.SetPrefixPHA we have '/'
bne .12
>PUSHEA.G StatBuf
txa
jmp CMD.SetPrefixA we have '/'
.12 >PUSHEA.G StatBuf
>LDYA ZPPtr1
>SYSCALL STAT
bcs CMD.CD.1.9
bcs .19
>LDA.G StatBuf+S.STAT.P.TYPE
.10 >LDA.G StatBuf+S.STAT.P.TYPE
cmp #S.FI.T.DIR
bne CMD.CD.1.9
beq .11
lda #MLI.E.INVPATH
.19 pha
lda ZPPtr3
>SYSCALL freemem
pla
sec
rts
ldy #$ff
.11 ldy #$ff
.1 iny
lda (ZPPtr1),y
@ -141,13 +122,16 @@ CMD.CD.1 >SYSCALL realpath
dey
lda (ZPPtr1),y
cmp #'/'
beq CORE.SetPrefixPHA already ends witrh a /
bne .14
iny
lda ZPPtr3
jmp CMD.SetPrefixA already ends with a /
.14 iny
iny
lda #0
>SYSCALL getmem
bcs CMD.CD.1.9
bcs .19
>STYA ZPPtr2
ldy #$ff
@ -167,8 +151,7 @@ CMD.CD.1 >SYSCALL realpath
>SYSCALL freemem
pla
*--------------------------------------
CORE.SetPrefixA pha
CORE.SetPrefixPHA
CMD.SetPrefixA pha
ldy #S.PS.hPREFIX
lda (pPs),y
>SYSCALL FreeMem
@ -181,11 +164,11 @@ CORE.SetPrefixPHA
* clc
rts
*--------------------------------------
CORE.Exec.CSYN lda #E.CSYN
CMD.Exec.CSYN lda #E.CSYN
sec
rts
*--------------------------------------
CORE.Exec.SSYN lda #E.SSYN
CMD.Exec.SSYN lda #E.SSYN
sec
rts
*--------------------------------------
@ -309,7 +292,7 @@ CMD.SET.1 >STZ.G CORE.Varname
.8 clc
rts
.99 jmp CORE.Exec.CSYN
.99 jmp CMD.Exec.CSYN
CMD.SET.UNSET >LDA.G CORE.Varname
tax
@ -448,7 +431,7 @@ CMD.GETKEY ldx #1
>SYSCALL SetEnv
.9 rts
.99 jmp CORE.Exec.CSYN
.99 jmp CMD.Exec.CSYN
*--------------------------------------
CMD.READ lda #1
>STA.G CORE.ArgIndex
@ -495,7 +478,7 @@ CMD.READ lda #1
clc
.99 rts
.9 jmp CORE.Exec.CSYN
.9 jmp CMD.Exec.CSYN
*--------------------------------------
CMD.SLEEP ldx #1
jsr CORE.GetArgX
@ -508,7 +491,7 @@ CMD.SLEEP ldx #1
clc
rts
.9 jmp CORE.Exec.CSYN
.9 jmp CMD.Exec.CSYN
*--------------------------------------
CMD.PAUSE lda #$FF
>STA.G bPause
@ -544,7 +527,7 @@ CMD.MD ldx #1
>SYSCALL MKDir
rts
.9 jmp CORE.Exec.CSYN
.9 jmp CMD.Exec.CSYN
*--------------------------------------
CMD.REN ldx #2
jsr CORE.GetArgX
@ -556,7 +539,7 @@ CMD.REN ldx #2
>SYSCALL Rename
rts
.9 jmp CORE.Exec.CSYN
.9 jmp CMD.Exec.CSYN
*--------------------------------------
CMD.RD ldx #1
jsr CORE.GetArgX
@ -578,19 +561,19 @@ CMD.RD ldx #1
>SYSCALL Remove
.99 rts
.9 jmp CORE.Exec.CSYN
.9 jmp CMD.Exec.CSYN
*--------------------------------------
CMD.BREAK
.9 jmp CORE.Exec.SSYN
.9 jmp CMD.Exec.SSYN
*--------------------------------------
CMD.CONTINUE
.9 jmp CORE.Exec.SSYN
.9 jmp CMD.Exec.SSYN
*--------------------------------------
CMD.FOR
.9 jmp CORE.Exec.SSYN
.9 jmp CMD.Exec.SSYN
*--------------------------------------
CMD.NEXT
.9 jmp CORE.Exec.SSYN
.9 jmp CMD.Exec.SSYN
*--------------------------------------
CMD.WHILE
CMD.IF jsr CORE.StkGet

View File

@ -19,20 +19,30 @@ CORE.Quit >LDA.G CORE.hArgVBuf
*--------------------------------------
* Input : ZPCLBuf/ZPFileBufPtr
* Get Line from buf until ;, CR, \0 (EOL / EOF) -> ZPArgVBuf
* Tokenize ZPArgVBuf
*--------------------------------------
CORE.GetCmdFromFile
CORE.GetCmdFromFileBuf
>LDYA ZPFileBufPtr
>STYA ZPFileBufPtrBak
jsr CORE.GetCmd
bcs .9
lda (ZPFileBufPtr)
>LDYA ZPPtr1
>STYA ZPFileBufPtr
.9 rts
CORE.GetCmdFromClBuf
>LDYA ZPCLBuf
CORE.GetCmd >STYA ZPPtr1
lda (ZPPtr1)
beq .9
ldx #0 not in "
ldy #0
.1 lda (ZPFileBufPtr),y
.1 lda (ZPPtr1),y
beq .7
cmp #C.CR
@ -56,13 +66,12 @@ CORE.GetCmdFromFile
lda #';'
.5 sta (ZPCLBuf),y
.5 sta (ZPArgVBuf),y
iny
cpy #CL.MAX
bne .1
lda #E.SYN Line Too long !!!
* sec
sec
rts
.6 sec skip CR or ;
@ -71,19 +80,14 @@ CORE.GetCmdFromFile
.7 clc
tya
adc ZPFileBufPtr
sta ZPFileBufPtr
adc ZPPtr1
sta ZPPtr1
bcc .8
inc ZPFileBufPtr+1
inc ZPPtr1+1
.8 lda #0
sta (ZPCLBuf),y
sta (ZPArgVBuf),y
tya
>STA.G CL.Len
lda #$ff
>STA.G CL.bExec
clc
rts
@ -91,7 +95,8 @@ CORE.GetCmdFromFile
sec
rts
*--------------------------------------
* Input : ZPArgVBuf
* Input : ZPArgVBuf (String)
* Tokenize ZPArgVBuf
* :LOOP
* if CmdSep=| :
* set hStdIn = hStdOut
@ -112,13 +117,13 @@ CORE.GetCmdFromFile
* set hStdIn = hStdOut
* set hStdOut = Std
*--------------------------------------
CORE.Exec >PUSHW ZPCLBuf
>LDYA ZPCLBuf
>STYA ZPCLBufPtr
CORE.Exec >PUSHW ZPArgVBuf
>LDYA ZPArgVBuf
>STYA ZPArgVBufPtr
>SYSCALL Args2ArgV TOKENIZE CL in ZPCLBuf
>SYSCALL Args2ArgV TOKENIZE CL in ZPArgVBuf
lda (ZPCLBufPtr) empty line ?
lda (ZPArgVBufPtr) empty line ?
beq .80
cmp #'#' comment ?
@ -128,10 +133,7 @@ CORE.Exec >PUSHW ZPCLBuf
*************** LOOP Cmd Arg
.10 lda #0
sta (ZPArgVBuf)
lda #S.PS.F.HOLD+S.PS.F.DUPENV
.10 lda #S.PS.F.HOLD+S.PS.F.DUPENV
>STA.G CORE.PSFlags
>LDA.G CL.CmdSep
@ -146,36 +148,33 @@ CORE.Exec >PUSHW ZPCLBuf
beq .80 yes, ignore remaining
ldy #1
lda (ZPCLBufPtr),y only one char ?
lda (ZPArgVBufPtr),y only one char ?
bne .2
lda (ZPCLBufPtr)
lda (ZPArgVBufPtr)
cmp #'.' leading dot ?
bne .2
>LDA.G CORE.PSFlags yes, child process will run in same ENV
and #$ff^S.PS.F.DUPENV
sta (pData),y
jsr CORE.NextCLToken and skip this token
jsr CORE.ShiftArgVToken and skip this token
.2 jsr CORE.IO.Check
bcc .7 IO token & related args processed
tay an error ?
bne .90 yes...I/O error...
jsr CORE.AddCLBufPtrToArgV no...add as cmd or arg
bcs .90
jsr CORE.NextArgVToken no...keep as cmd or arg
.6 jsr CORE.NextCLToken
.7 lda (ZPCLBufPtr)
.7 lda (ZPArgVBufPtr)
beq .71 EOL...
cmp #';'
bne .70
>STA.G CL.CmdSep
jsr CORE.NextCLToken Skip ;
jsr CORE.ShiftArgVToken Skip ;
bra .72 exec
.70 cmp #'|'
@ -185,10 +184,10 @@ CORE.Exec >PUSHW ZPCLBuf
* PIPE
jsr CORE.NextCLToken Skip |
jsr CORE.ShiftArgVToken Skip |
bra .72 and exec
jsr CORE.NextCLToken Skip ;
jsr CORE.ShiftArgVToken Skip ;
lda #0
.71 >STA.G CL.CmdSep
@ -241,9 +240,15 @@ CORE.ExecCmd ldy #$ff
bpl .8 parent context is FALSE, skip line
.3 >LDA.G CORE.IntCmd
bpl .80 Internal
>PUSHB.G CORE.PSFlags
bmi CORE.ExecExtCmd
tax
jmp (J.CMD,x)
.8 clc
.9 rts
*--------------------------------------
CORE.ExecExtCmd >PUSHB.G CORE.PSFlags
>LDYA ZPArgVBuf
>SYSCALL execv
bcs .9
@ -270,59 +275,19 @@ CORE.ExecCmd ldy #$ff
.8 clc
.9 rts
.80 tax
jmp (J.CMD,x)
*--------------------------------------
CORE.NextCLToken
lda (ZPCLBufPtr)
inc ZPCLBufPtr
CORE.NextArgVToken
lda (ZPArgVBufPtr)
inc ZPArgVBufPtr
bne .1
inc ZPCLBufPtr+1
inc ZPArgVBufPtr+1
.1 tax
bne CORE.NextCLToken
bne CORE.NextArgVToken
rts
*--------------------------------------
CORE.AddCLBufPtrToArgV
>LDYA ZPCLBufPtr
>STYA ZPPtr1
>LDYA ZPArgVBuf
>STYA ZPPtr2
.1 lda (ZPPtr2) scan to end of argV
beq .6
.2 inc ZPPtr2
bne .3
inc ZPPtr2+1
.3 lda (ZPPtr2)
bne .2
inc ZPPtr2
bne .4
inc ZPPtr2+1
.4 lda (ZPPtr2)
bne .2
.6 ldy #$ff
.7 iny
* beq .9
lda (ZPPtr1),y
sta (ZPPtr2),y
bne .7 including str ending \0
iny
* beq .9
sta (ZPPtr2),y arg[] ending \0
clc
rts
.9 lda #E.BUF
sec
rts
CORE.ShiftArgVToken
>LDYA ZPArgVBufPtr
jmp RemoveStrFromArgV
*--------------------------------------
CORE.GetArgX >LDYA ZPArgVBuf
@ -433,13 +398,13 @@ CORE.StkGet lda (pData) StackPtr
sec
rts
*--------------------------------------
CORE.IO.Check >PUSHW ZPCLBufPtr
CORE.IO.Check >PUSHW ZPArgVBufPtr
>LDYA L.CORE.IO
jsr Lookup
bcs .9 not a IO token...should be an arg....
phx
jsr CORE.NextCLToken skip this IO token
jsr CORE.ShiftArgVToken skip this IO token
plx
jmp (J.CORE.IO,x)
@ -458,7 +423,7 @@ CORE.IO.IN lda #O.RDONLY+O.TEXT
bcs .9
jsr IO.Set.In
jsr CORE.NextCLToken skip arg
jsr CORE.ShiftArgVToken skip arg
clc
.9 rts
@ -472,7 +437,7 @@ CORE.IO.OUT.1 jsr CORE.IO.Open
bcs .9
jsr IO.Set.Out
jsr CORE.NextCLToken skip arg
jsr CORE.ShiftArgVToken skip arg
clc
.9 rts
@ -484,19 +449,19 @@ CORE.IO.2OUT.1 jsr CORE.IO.Open
bcs .9
jsr IO.Set.Err
jsr CORE.NextCLToken skip arg
jsr CORE.ShiftArgVToken skip arg
clc
.9 rts
*--------------------------------------
CORE.IO.Open pha
lda (ZPCLBufPtr)
lda (ZPArgVBufPtr)
beq .9 no arg left....
>PUSHWI 0 Aux type
>PUSHBI S.FI.T.TXT ftype
pla
>PUSHA flags
>LDYA ZPCLBufPtr
>LDYA ZPArgVBufPtr
>SYSCALL fopen
rts

View File

@ -11,7 +11,7 @@ History.MAX .EQ 256
CORE.STACK.MAX .EQ 64
PUSHD.STACK.MAX .EQ 8
*--------------------------------------
C.STARTPROC .EQ 0
C.NOHUP .EQ 0
C.CD .EQ 2
C.DATE .EQ 4
C.ECHO .EQ 6
@ -62,10 +62,10 @@ ZPPtr1 .BS 2
ZPPtr2 .BS 2
ZPPtr3 .BS 2
ZPCLBuf .BS 2
ZPCLBufPtr .BS 2
ZPFileBufPtr .BS 2
ZPFileBufPtrBak .BS 2
ZPArgVBuf .BS 2
ZPArgVBufPtr .BS 2
ZS.END .ED
*--------------------------------------
* File Header (16 Bytes)
@ -119,7 +119,7 @@ J.CORE.IO .DA CORE.IO.AMP
.DA CORE.IO.2OUTA
.DA CORE.IO.2OUT
L.CORE.INT .DA CORE.INT
J.CMD .DA CMD.STARTPROC
J.CMD .DA CMD.NOHUP
.DA CMD.CD
.DA CMD.DATE
.DA CMD.ECHO
@ -189,7 +189,7 @@ CS.RUN jsr CL.Init
lda #0
jsr CMD.SHIFTA Remove $0=/bin/shell
bra CS.RUN.LOOP
*--------------------------------------
.1 jsr CMD.CD.HOME
@ -300,6 +300,11 @@ CS.RUN.INTERACTIVE
jsr HIS.Add
jsr CORE.GetCmdFromClBuf
lda (ZPArgVBuf)
beq .8
jsr CORE.Exec
.8 jmp CS.RUN.LOOP.END
@ -358,7 +363,8 @@ CS.RUN.BATCH >SYSCALL GetChar
clc
jmp CS.RUN.LOOP.END
.2 jsr CORE.GetCmdFromFile
.2 jsr CORE.GetCmdFromFileBuf
bcc .7
cmp #C.EOF
@ -373,20 +379,17 @@ CS.RUN.BATCH >SYSCALL GetChar
.3 sec
bra CS.RUN.LOOP.END
.7 >LDA.G CL.bExec
bpl CS.RUN.LOOP.80
lda (ZPCLBuf)
.7 lda (ZPArgVBuf)
beq CS.RUN.LOOP.80
>LDA.G bSET.X
beq .8
>PUSHW ZPCLBuf
>PUSHW ZPArgVBuf
>PUSHBI 2
>LDYA L.MSG.TRACE
>SYSCALL printf
bcs .9
.8 jsr CORE.Exec
@ -498,6 +501,41 @@ Lookup >STYA ZPPtr2
sec
rts
*--------------------------------------
RemoveStrFromArgV
>STYA ZPPtr1
>STYA ZPPtr2
ldy #$ff
.1 iny Compute ArgX len
lda (ZPPtr1),y
bne .1
.2 tya
sec
adc ZPPtr1
sta ZPPtr1
bcc .3
inc ZPPtr1+1
.3 ldy #$ff
.4 iny
lda (ZPPtr1),y
sta (ZPPtr2),y
bne .4
tya
beq .8
sec
adc ZPPtr2
sta ZPPtr2
bcc .2
inc ZPPtr2+1
bra .2
.8 rts
*--------------------------------------
.INB USR/SRC/BIN/SHELL.S.CL
.INB USR/SRC/BIN/SHELL.S.HIS
@ -539,7 +577,7 @@ CORE.IO .AZ "&"
.AZ "2>"
.HS 00
*--------------------------------------
CORE.INT .AZ "STARTPROC"
CORE.INT .AZ "NOHUP"
.AZ "CD"
.AZ "DATE"
.AZ "ECHO"

View File

@ -480,6 +480,7 @@ S.FD.PIPE .EQ 8
* PS STRUCT
*--------------------------------------
S.PS.F .EQ 0
S.PS.F.NOHUP .EQ %10000000
S.PS.F.INIT .EQ %10000000
S.PS.F.RUN .EQ %01000000
S.PS.F.QUIT .EQ %00100000

View File

@ -280,7 +280,7 @@ OApple+1,OApple+2,OApple+3 to switch between screens : Kernel Log, text, DHGR.
| TIME | Working | |
| SET | Working | -X toggle debug mode |
| SLEEP | Working | Wait <count> 10th sec |
| STARTPROC | Working | Used in A2osX.startup |
| NOHUP | Working | Start a process with PPID=PS0 (Daemon) |
| SHIFT | Working | Remove $1 from cmd line |
| ---- | ------ | ------- |
| IF .. ELSE .. FI | Working | [ -d direxists ] |

View File

@ -22,20 +22,22 @@ BIN.R.Offset .BS 2
K.LoadLib jsr ENV.Search.LIB
bcs .9
>LDYAI K.Buf256
jsr BIN.Load Y,A = "/PATH/BIN"
bcs .9
>STYA .1+1
stx BIN.hMem
stx .8+1
txa Pass hLib to LibLoad
ldx #LIBMGR.LOAD
.1 jsr $ffff Self Modified, Call LIB.LOAD function
.1 jsr $ffff SELF MODIFIED, Call LIB.LOAD function
ldx .8+1
bcs BIN.Load.Cleanup
lda BIN.hMem hLib
clc
.8 lda #$ff SELF MODIFIED, hLib
* clc
.9 rts
*--------------------------------------
* UnloadLib
@ -47,11 +49,14 @@ K.UnloadLib pha
jsr K.GetMemPtr
>STYA .2+1
jsr MEM.decREFCNT
ldy #S.MEM.REFCNT
lda (ZPMemMgrSPtr),y
dec
sta (ZPMemMgrSPtr),y
beq .1
pla
clc
* clc
rts
.1 ldx #LIBMGR.UNLOAD
@ -75,8 +80,8 @@ K.LoadDrv >STYA .2+1 Save "BIN\0ARGS\0\0"
bcs .9
>STYA .3+1
stx BIN.hMem
stx .8+1
ldx #$ff
.1 inx Skip "BIN"
@ -91,20 +96,22 @@ K.LoadDrv >STYA .2+1 Save "BIN\0ARGS\0\0"
adc .2+2 Y,A = ARGS
.3 jsr $ffff SELF MODIFIED, call Dev.Detect
bcs BIN.Load.Cleanup
.8 ldx #$ff SELF MODIFIED, hMem
jsr BIN.Load.Cleanup
bcs .9
lda #0 Make sure RC = 0 if success
clc
.9 rts
BIN.Load.Cleanup
php
pha
lda BIN.hMem
txa
jsr K.FreeMem
pla
sec
plp
BIN.Load.Cleanup.RTS
rts
*--------------------------------------
@ -147,12 +154,15 @@ BIN.Load >STYA BIN.CmdLine
bne .2
txa
jsr K.GetMemPtr
jsr MEM.GetMemByID
jsr MEM.IncREFCNT
ldy #S.MEM.REFCNT
lda (ZPMemMgrSPtr),y
inc
sta (ZPMemMgrSPtr),y
clc
jmp K.GetMemPtr.ZPMemMgrSPtr
jmp MEM.GetMEMPTR
* X=hMem, Y,A=Ptr
*--------------------------------------
* STAT Already called by Filesearch in FindDRV, FindLIB
@ -210,7 +220,7 @@ BIN.Load.1 >LDYA K.S.STAT+S.STAT.P.AUXTYPE
>SYSCALL StrDup make a copy of this string
bcs .98
lda BIN.hMem Keep X=hMem
lda BIN.hMem Keep X=new string hMem
jsr MEM.GetMemByID X unmodified
lda (ZPMemMgrSPtr)
@ -223,9 +233,10 @@ BIN.Load.1 >LDYA K.S.STAT+S.STAT.P.AUXTYPE
ldx BIN.hMem return hMEM to Caller...
clc
jmp K.GetMemPtr.ZPMemMgrSPtr ...and Y,A=PTR to CS
jmp MEM.GetMEMPTR ...and Y,A=PTR to CS
.98 jmp BIN.Load.Cleanup Discard Loaded Code, exits CS
.98 ldx BIN.hMem
jmp BIN.Load.Cleanup Discard Loaded Code, exits CS
*/--------------------------------------
* # InsDrv
* ## C

View File

@ -24,7 +24,6 @@ FIO.hFILE .BS 1
FIO.MemPtr .BS 2
FIO.hMem .BS 1
FIO.BytesRead .BS 2
FIO.ZPSIZE .EQ *
.ED
*--------------------------------------
K.LoadTxtFile sec

View File

@ -192,7 +192,7 @@ MEM.GetMem.YAX stx MEM.ReqFlags
ldy #S.MEM.OWNERPID
sta (ZPMemMgrSPtr),y
clc
jmp K.GetMemPtr.ZPMemMgrSPtr
jmp MEM.GetMEMPTR
* A = HI PTR,Y = LO PTR,X = Current hMem
.9 rts
@ -248,18 +248,6 @@ Mem.AddSlot >STYA ZPMemMgrTmp1 save req size
sec
rts
*--------------------------------------
MEM.IncREFCNT ldy #S.MEM.REFCNT
lda (ZPMemMgrSPtr),y
inc
sta (ZPMemMgrSPtr),y
rts
*--------------------------------------
MEM.decREFCNT ldy #S.MEM.REFCNT
lda (ZPMemMgrSPtr),y
dec
sta (ZPMemMgrSPtr),y
rts
*--------------------------------------
MEM.NextSlot lda ZPMemMgrSPtr
clc
adc #S.MEM
@ -284,7 +272,7 @@ K.FreeMem.FREED clc
phx
php
pha
phy hMem n Y
ldy #S.PS.hARGV
lda (pPS),y
jsr K.GetMemPtr
@ -314,17 +302,14 @@ K.FreeMem tay
bcc .10
bne K.FreeMem.BAD
.10 pha
jsr MEM.GetMemByID X unmodified
.10 jsr MEM.GetMemByID X,Y unmodified
lda (ZPMemMgrSPtr) In use ?
bmi .11
bpl K.FreeMem.FREED
pla
bra K.FreeMem.FREED
.11 pla
jsr MEM.decREFCNT only one left ?
ldy #S.MEM.REFCNT
lda (ZPMemMgrSPtr),y
dec
sta (ZPMemMgrSPtr),y only one left ?
bne .8 no, must be a code segment loaded several times
lda (ZPMemMgrSPtr)
@ -392,8 +377,7 @@ K.FreeMem tay
.FIN
*--------------------------------------
K.GetMemPtr jsr MEM.GetMemByID
K.GetMemPtr.ZPMemMgrSPtr
ldy #S.MEM.PTR
MEM.GetMEMPTR ldy #S.MEM.PTR
lda (ZPMemMgrSPtr),y
pha
iny
@ -445,6 +429,7 @@ K.SListAddData
K.SListGetData
K.SListSetData pha
>PULLW ZPSListID
bra K.SListPullA
*/--------------------------------------
* # SListGetByID
* ## ASM
@ -577,7 +562,10 @@ K.LoadStkObj >SYSCALL LoadFile
bcs .99
stx .8+1 Save MAIN hMem
>STYA A2L Save LEN temporarly
iny
bne .1
inc +1 for ending 0
.1 >STYA A2L Save LEN temporarly
jsr K.NewStkObj
bcs .9
@ -601,6 +589,11 @@ K.LoadStkObj >SYSCALL LoadFile
sec Main To Aux
jsr AuxMove
lda #0
sta SETWRITEAUX
sta (A2L)
sta CLRWRITEAUX
.8 lda #$ff SELF MODIFIED
jsr K.FreeMem release MAIN memory

View File

@ -183,13 +183,16 @@ PS.CreateChild ldx #0
cpy #S.PS.hStdErr+1
bne .81
bit PS.Flags S.PS.F.NOHUP
bmi .5
ldy #S.PS.PID
lda (pPs),y
ldy #S.PS.PPID
sta (PS.NewPSPtr),y
lda #S.PS.F.HOLD
.5 lda #S.PS.F.HOLD
bit PS.Flags
beq .82