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 CS.RUN >LIBCALL hLIBTCPIP,LIBTCPIP.GETCFG
>STYA ZPPTR1 >STYA ZPPTR1
ldy #S.IPCFG.STATUS lda (ZPPTR1)
lda (ZPPTR1),y
bmi .1 bmi .1
jmp CS.RUN.ERR jmp CS.RUN.ERR

View File

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

View File

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

View File

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

View File

@ -480,6 +480,7 @@ S.FD.PIPE .EQ 8
* PS STRUCT * PS STRUCT
*-------------------------------------- *--------------------------------------
S.PS.F .EQ 0 S.PS.F .EQ 0
S.PS.F.NOHUP .EQ %10000000
S.PS.F.INIT .EQ %10000000 S.PS.F.INIT .EQ %10000000
S.PS.F.RUN .EQ %01000000 S.PS.F.RUN .EQ %01000000
S.PS.F.QUIT .EQ %00100000 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 | | | TIME | Working | |
| SET | Working | -X toggle debug mode | | SET | Working | -X toggle debug mode |
| SLEEP | Working | Wait <count> 10th sec | | 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 | | SHIFT | Working | Remove $1 from cmd line |
| ---- | ------ | ------- | | ---- | ------ | ------- |
| IF .. ELSE .. FI | Working | [ -d direxists ] | | IF .. ELSE .. FI | Working | [ -d direxists ] |

View File

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

View File

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

View File

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

View File

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