Kernel 0.93

This commit is contained in:
Rémy GIBERT 2019-04-01 16:24:01 +01:00
parent cdd1d64001
commit 4dbd36cb7b
8 changed files with 199 additions and 173 deletions

View File

@ -61,6 +61,7 @@ where [ exp ] and [ condition ] allow to detail operators....
| \<op\> | Working | \+ signed int32 add <br> \- signed int32 sub <br> \* <br> / <br> mod | | \<op\> | Working | \+ signed int32 add <br> \- signed int32 sub <br> \* <br> / <br> mod |
| \<condition\> | Working |[ -D direxists ] <br> [ -E fileordirexists ] <br> [ -F fileexists ]<br> [ -N $VAR variable is not empty ] <br> [ -Z $VAR variable is empty ] <br> [ string1 = string2 ] <br> [ string1 != string2 ] <br> [ string1 .< string2 ] <br> [ string1 <= string2 ] <br> [ string1 .> string2 ] <br> [ string1 >= string2 ] <br> [ int32 -eq int32 ] <br> [ int32 -ne int32 ] <br> [ int32 -lt int32 ] <br> [ int32 -le int32 ] <br> [ int32 -gt int32 ] <br> [ int32 -ge int32 ] | | \<condition\> | Working |[ -D direxists ] <br> [ -E fileordirexists ] <br> [ -F fileexists ]<br> [ -N $VAR variable is not empty ] <br> [ -Z $VAR variable is empty ] <br> [ string1 = string2 ] <br> [ string1 != string2 ] <br> [ string1 .< string2 ] <br> [ string1 <= string2 ] <br> [ string1 .> string2 ] <br> [ string1 >= string2 ] <br> [ int32 -eq int32 ] <br> [ int32 -ne int32 ] <br> [ int32 -lt int32 ] <br> [ int32 -le int32 ] <br> [ int32 -gt int32 ] <br> [ int32 -ge int32 ] |
| BREAK | Working | Exit CASE of SWITCH | | BREAK | Working | Exit CASE of SWITCH |
| CALL | Working | CALL function <arg> ... |
| CASE | Working | CASE <expression> | | CASE | Working | CASE <expression> |
| CD | Working | CD path or relative path | | CD | Working | CD path or relative path |
| DATE | Working | | | DATE | Working | |
@ -80,7 +81,7 @@ where [ exp ] and [ condition ] allow to detail operators....
| PUSHD | Working | Save actual working directory <br> PUSHD \<dir\> do also a CD to \<dir\> | | PUSHD | Working | Save actual working directory <br> PUSHD \<dir\> do also a CD to \<dir\> |
| PWD | Working | Print Working Directory | | PWD | Working | Print Working Directory |
| RD | Working | Delete an empty directory | | RD | Working | Delete an empty directory |
| READ | Working | -S : no echo (password) <br> -P : "prompt message" | | READ | Working | -F : Undefine all functions <br> -S : no echo (password) <br> -P : "prompt message" |
| REN | Working | Rename a file, directory or volume | | REN | Working | Rename a file, directory or volume |
| RETURN | In Progress | Exit function with return code | | RETURN | In Progress | Exit function with return code |
| SET | Working | -X : toggle debug mode <br> -C : toggle Control-C break mode | | SET | Working | -X : toggle debug mode <br> -C : toggle Control-C break mode |

Binary file not shown.

View File

@ -228,17 +228,25 @@ CMD.SET.1
cmp #'C' cmp #'C'
bne .2 bne .2
>LDA.G bSET.C ldy #bSET.C
bra .5 bra .5
.2 cmp #'X' .2 cmp #'X'
bne .3
ldy #bSET.X
bra .5
.3 cmp #'F'
bne .99 bne .99
>LDA.G bSET.X jsr CORE.FUNCRESET
bra .50
.5 eor #$ff .5 lda (pData),y
eor #$ff
sta (pData),y sta (pData),y
jsr CORE.ArgV.Next .50 jsr CORE.ArgV.Next
bne .1 bne .1
clc clc
rts rts
@ -564,18 +572,31 @@ CMD.FUNC lda (ZPArgVBufPtr)
lda #$ff lda #$ff
>STA.G bFuncMode >STA.G bFuncMode
clc clc
rts .99 rts
.9 jmp CMD.Exec.CSYN .9 jmp CMD.Exec.CSYN
.99 rts
*-------------------------------------- *--------------------------------------
CMD.RETURN CMD.RETURN lda (ZPArgVBufPtr)
.9 jmp CMD.Exec.CSYN beq .8 no arg, exit 0
>LDYA ZPArgVBufPtr
>SYSCALL AToL
bcs .9
>PULLL M32.ACC
lda M32.ACC
.8 pha
lda #$FF
>STA.G bExit
pla
clc
.9 rts
*-------------------------------------- *--------------------------------------
CMD.CALL >LDA.G hFuncList CMD.CALL >LDA.G hFuncList
beq .9 beq .9
>PUSHW ZPInputBufPtr >PUSHW ZPArgVBufPtr
>LDA.G hFuncList >LDA.G hFuncList
>SYSCALL SListLookup >SYSCALL SListLookup
bcs .9 bcs .9
@ -589,13 +610,7 @@ CMD.CALL >LDA.G hFuncList
>LDA.G hFuncList >LDA.G hFuncList
>SYSCALL SListGetData >SYSCALL SListGetData
bcs .99 bcs .99
txa jmp CORE.CALL
pha
>SYSCALL GetMemPtr
pla
>SYSCALL freemem
rts
.9 lda #E.FUNDEF .9 lda #E.FUNDEF
sec sec

View File

@ -12,16 +12,17 @@ CORE.Init >LDYAI 256
.9 rts .9 rts
*-------------------------------------- *--------------------------------------
CORE.Quit >LDA.G hFuncList CORE.Quit >LDA.G CORE.hArgVBuf
beq .1 beq CORE.FUNCRESET
>SYSCALL SListFree
.1 >LDA.G CORE.hArgVBuf
beq .9
>SYSCALL FreeMem >SYSCALL FreeMem
.9 rts CORE.FUNCRESET >LDA.G hFuncList
beq CORE.Quit.9
>SYSCALL SListFree
>STZ.G hFuncList
CORE.Quit.9 rts
*-------------------------------------- *--------------------------------------
* http://heirloom.sourceforge.net/sh/sh.1.html * http://heirloom.sourceforge.net/sh/sh.1.html
*-------------------------------------- *--------------------------------------
@ -71,6 +72,9 @@ CORE.Run >LDYA ZPInputBufPtr Save Actual cmd for looping
jsr CORE.GetCharNB jsr CORE.GetCharNB
bcc .11 bcc .11
jsr CORE.RETURN
bcs .9
jsr IO.Reset jsr IO.Reset
lda #0 lda #0
@ -227,11 +231,7 @@ CORE.ExecExtCmd >LDA.G CORE.CmdFile
bpl .1 bpl .1
>LDYA ZPArgVBufPtr >LDYA ZPArgVBufPtr
>SYSCALL puts jsr CORE.FCALL.NOQUIT
>DEBUG
>LDYA ZPArgVBufPtr
jsr IO.FILECALL.NOQUIT
bra CORE.ExecExtCmd.Exit bra CORE.ExecExtCmd.Exit
.1 >PUSHB.G CORE.PSFlags .1 >PUSHB.G CORE.PSFlags
@ -565,6 +565,85 @@ CORE.IO.Open pha Open Mode
lda #E.SYN lda #E.SYN
sec sec
rts rts
*--------------------------------------
CORE.FCALL.QUIT sec
.HS 90 BCC
CORE.FCALL.NOQUIT
clc
>STYA ZPPtr1 Filename
lda #0
ror
>STA.G bExitOnEOF
>PUSHWI 0 Aux type
>PUSHBI S.FI.T.TXT
>PUSHBI O.RDONLY
>LDYA ZPPtr1
>SYSCALL LoadTxtFile
bcs CORE.CALL.9
CORE.CALL lda ZPInputBuf X=hBuf
jsr CORE.StkPush
bcs CORE.CALL.9
lda ZPInputBuf+1
jsr CORE.StkPush
bcs CORE.CALL.9
lda ZPInputBufPtr
jsr CORE.StkPush
bcs CORE.CALL.9
lda ZPInputBufPtr+1
jsr CORE.StkPush
bcs CORE.CALL.9
txa
jsr CORE.StkPush
bcs CORE.CALL.9
txa
>SYSCALL GetMemPtr
>STYA ZPInputBuf
>STYA ZPInputBufPtr
lda #$C0
jmp CORE.StkPush
CORE.CALL.90 lda #E.STKOVERFLOW
sec
CORE.CALL.9 rts
*--------------------------------------
CORE.RETURN jsr CORE.StkPull
bcs .90
cmp #$C0
bne .90
jsr CORE.StkPull
>SYSCALL freemem
jsr CORE.StkPull
sta ZPInputBufPtr+1
jsr CORE.StkPull
sta ZPInputBufPtr
jsr CORE.StkPull
sta ZPInputBuf+1
jsr CORE.StkPull
sta ZPInputBuf
* clc
rts
.90 lda #E.STACKERROR
sec
rts
*-------------------------------------- *--------------------------------------
* Input Buffer * Input Buffer
*-------------------------------------- *--------------------------------------
@ -640,7 +719,7 @@ CORE.StkPushPtr bcs .1
.2 jsr CORE.StkPush .2 jsr CORE.StkPush
bcs CORE.StkPullPtr.9 bcs CORE.StkPullPtr.9
txa txa
bra CORE.StkPush bra CORE.StkPush
*-------------------------------------- *--------------------------------------
CORE.StkPullPtr jsr CORE.StkPull CORE.StkPullPtr jsr CORE.StkPull
bcs CORE.StkPullPtr.9 bcs CORE.StkPullPtr.9
@ -691,6 +770,8 @@ CORE.StkPush pha
CORE.StkGetCtx jsr CORE.StkGet CORE.StkGetCtx jsr CORE.StkGet
tax tax
bcs .1 no context... bcs .1 no context...
cmp #$C0 in a call...
beq .1 CS
and #$80 get current.. and #$80 get current..
lsr becomes parent lsr becomes parent
@ -699,6 +780,7 @@ CORE.StkGetCtx jsr CORE.StkGet
.1 lda #$40 ...set Parent = true .1 lda #$40 ...set Parent = true
.2 >STA.G CORE.Test .2 >STA.G CORE.Test
txa txa
rts rts
*-------------------------------------- *--------------------------------------

View File

@ -62,7 +62,11 @@ EXP.GET.OP >LDA.G CORE.Operator
EXP.TEST lda (ZPArgVBufPtr) EXP.TEST lda (ZPArgVBufPtr)
beq .9 beq .9
>LDYA L.EXP.BEGIN lda #$ff
>STA.G CORE.TestArg True
>STA.G CORE.TestOp no op
.10 >LDYA L.EXP.BEGIN
jsr CORE.LookupArgVBuf jsr CORE.LookupArgVBuf
bcs .9 bcs .9
@ -125,7 +129,36 @@ EXP.TEST lda (ZPArgVBufPtr)
ldy #1 ldy #1
lda (ZPArgVBufPtr),y lda (ZPArgVBufPtr),y
bne .9 bne .9
clc
jsr CORE.ArgV.Next
beq .82
>LDYA L.EXP.OP.LOGIC
jsr CORE.LookupArgVBuf
bcs .9
txa
>STA.G CORE.TestOp
>LDA.G CORE.Test
>STA.G CORE.TestArg
txa
bne .81 OR...
tay AND : stop if already false
bpl .88
.81 jsr CORE.ArgV.Next
beq .9
jmp .10
.82 >LDA.G CORE.TestOp
bmi .88
>LDA.G CORE.Test
>ORA.G CORE.TestArg
>STA.G CORE.Test
.88 clc
rts rts
*-------------------------------------- *--------------------------------------
EXP.TEST.UNARY jsr CORE.ArgV.Next EXP.TEST.UNARY jsr CORE.ArgV.Next
@ -265,11 +298,6 @@ EXP.TEST.BINARY.END
clc clc
rts rts
*-------------------------------------- *--------------------------------------
EXP.OP.AND
EXP.OP.OR
clc
rts
*--------------------------------------
MAN MAN
SAVE USR/SRC/BIN/SH.S.EXP SAVE USR/SRC/BIN/SH.S.EXP
LOAD USR/SRC/BIN/SH.S LOAD USR/SRC/BIN/SH.S

View File

@ -3,97 +3,11 @@ PREFIX
AUTO 4,1 AUTO 4,1
.LIST OFF .LIST OFF
*-------------------------------------- *--------------------------------------
IO.Init lda #FILECALL.STACK
>STA.G FILECALL.STACK
rts
*--------------------------------------
IO.Reset jsr IO.Reset.In IO.Reset jsr IO.Reset.In
jsr IO.Reset.Out jsr IO.Reset.Out
jsr IO.Reset.Err jsr IO.Reset.Err
IO.Reset.9 rts IO.Reset.9 rts
*-------------------------------------- *--------------------------------------
IO.FILECALL.QUIT sec
.HS 90 BCC
IO.FILECALL.NOQUIT clc
>STYA ZPPtr1 Filename
lda #0
ror
>STA.G bExitOnEOF
>LDA.G FILECALL.STACK
cmp #FILECALL.STACK+FILECALL.STACK.MAX*3
beq .90
>PUSHWI 0 Aux type
>PUSHBI S.FI.T.TXT
>PUSHBI O.RDONLY
>LDYA ZPPtr1
>SYSCALL LoadTxtFile
bcs .9
>LDA.G FILECALL.STACK
tay
iny
lda ZPInputBufPtr+1
sta (pData),y
iny
lda ZPInputBufPtr
sta (pData),y
iny
txa
sta (pData),y
tya
>STA.G FILECALL.STACK
txa
>SYSCALL GetMemPtr
>STYA ZPInputBuf
>STYA ZPInputBufPtr
lda #$ff
>STA.G bBatchMode
*
* clc
rts
.90 lda #E.STKOVERFLOW
sec
.9 rts
*--------------------------------------
IO.FEXIT >LDA.G FILECALL.STACK
cmp #FILECALL.STACK
beq .90
tay
dey
lda (pData),y
tax hBuf
dey
lda (pData),y
sta ZPInputBufPtr
dey
lda (pData),y
sta ZPInputBufPtr+1
tya
>STA.G FILECALL.STACK
txa
>SYSCALL GetMemPtr
>STYA ZPInputBuf
* clc
rts
.90 lda #E.STACKERROR
sec
rts
*--------------------------------------
IO.Pipe.In >LDA.G IO.hOut IO.Pipe.In >LDA.G IO.hOut
ldy #S.PS.hStdOut ldy #S.PS.hStdOut
sta (pPS),y sta (pPS),y

View File

@ -7,9 +7,8 @@ AUTO 4,1
.TF BIN/SH .TF BIN/SH
*-------------------------------------- *--------------------------------------
HISTORY.MAX .EQ 256 HISTORY.MAX .EQ 256
CORE.STACK.MAX .EQ 64 CORE.STACK.MAX .EQ 128
PUSHD.STACK.MAX .EQ 8 PUSHD.STACK.MAX .EQ 8
FILECALL.STACK.MAX .EQ 8
*-------------------------------------- *--------------------------------------
C.NOHUP .EQ 0 C.NOHUP .EQ 0
C.CD .EQ 1 C.CD .EQ 1
@ -188,8 +187,6 @@ J.EXP.OP.MATH .DA M32.Add
.DA M32.Div .DA M32.Div
.DA M32.Mod .DA M32.Mod
L.EXP.OP.LOGIC .DA EXP.OP.LOGIC L.EXP.OP.LOGIC .DA EXP.OP.LOGIC
J.EXP.OP.LOGIC .DA EXP.OP.AND
.DA EXP.OP.OR
L.HOME.PROFILE .DA HOME.PROFILE L.HOME.PROFILE .DA HOME.PROFILE
L.M32.Printf .DA M32.Printf L.M32.Printf .DA M32.Printf
L.ERR.Codes .DA ERR.Codes L.ERR.Codes .DA ERR.Codes
@ -202,7 +199,6 @@ CS.INIT.RTS rts
*-------------------------------------- *--------------------------------------
CS.RUN jsr CL.Init CS.RUN jsr CL.Init
jsr CORE.Init jsr CORE.Init
jsr IO.Init
ldy #S.PS.ARGC ldy #S.PS.ARGC
lda (pPS),y lda (pPS),y
@ -211,12 +207,15 @@ CS.RUN jsr CL.Init
lda #1 lda #1
>SYSCALL ArgV >SYSCALL ArgV
jsr IO.FILECALL.QUIT Exec file an exit jsr CORE.FCALL.QUIT Exec file an exit
bcs CS.INIT.RTS bcs CS.INIT.RTS
lda #0 lda #0
jsr CMD.SHIFTA Remove $0=/bin/sh jsr CMD.SHIFTA Remove $0=/bin/sh
lda #$ff
>STA.G bBatchMode
bra CS.RUN.LOOP bra CS.RUN.LOOP
*-------------------------------------- *--------------------------------------
.1 jsr CMD.CD.HOME .1 jsr CMD.CD.HOME
@ -235,7 +234,7 @@ CS.RUN jsr CL.Init
bcs CS.RUN.LOOP no profile... bcs CS.RUN.LOOP no profile...
>LDYA L.HOME.PROFILE >LDYA L.HOME.PROFILE
jsr IO.FILECALL.NOQUIT exec profile and continue jsr CORE.FCALL.NOQUIT exec profile and continue
* bcs CS.RUN.LOOP * bcs CS.RUN.LOOP
*-------------------------------------- *--------------------------------------
@ -300,15 +299,8 @@ CS.RUN.LOOP >SLEEP
.9 rts .9 rts
*-------------------------------------- *--------------------------------------
CS.RUN.INTERACTIVE CS.RUN.INTERACTIVE
>LDA.G hInputBuf some commmands left in buffer lda (pData) some commmands left in buffer
beq .10
lda (ZPInputBufPtr)
bne .6 bne .6
>LDA.G hInputBuf
>SYSCALL freemem
>STZ.G hInputBuf
.10 jsr IO.Reset .10 jsr IO.Reset
jsr CL.Reset jsr CL.Reset
@ -339,10 +331,8 @@ CS.RUN.INTERACTIVE
>LDYA ZPCLBuf >LDYA ZPCLBuf
>SYSCALL strdup >SYSCALL strdup
bcs .8 bcs .8
>STYA ZPInputBuf
>STYA ZPInputBufPtr jsr CORE.CALL
txa
>STA.G hInputBuf
.6 jsr CORE.Run .6 jsr CORE.Run
@ -385,30 +375,30 @@ CS.RUN.READ jsr CL.RESET
CS.RUN.READ.9 rts CS.RUN.READ.9 rts
*-------------------------------------- *--------------------------------------
CS.RUN.BATCH CS.RUN.BATCH
* ldy #S.PS.hStdIn ldy #S.PS.hStdIn
* lda (pPS),y lda (pPS),y
* >SYSCALL feof >SYSCALL feof
* bcs .2 unsupported bcs .2 unsupported
* tay tay
* beq .2 beq .2
* >SYSCALL GetChar >SYSCALL GetChar
* bcs CS.RUN.READ.9 bcs CS.RUN.READ.9
* cmp #3 test Ctrl-c cmp #3 test Ctrl-c
* bne .1 bne .1
* sec sec
* rts rts
*.1 cmp #19 test Ctrl-s .1 cmp #19 test Ctrl-s
* bne .2 bne .2
* lda #$80 lda #$80
* >STA.G bPause >STA.G bPause
* clc clc
* jmp CS.RUN.LOOP.END jmp CS.RUN.LOOP.END
.2 >LDA.G bSET.X .2 >LDA.G bSET.X
beq .5 beq .5
@ -436,7 +426,7 @@ CS.RUN.BATCH
bne CS.RUN.LOOP.END bne CS.RUN.LOOP.END
pha pha
jsr IO.FEXIT jsr CORE.RETURN
>LDA.G bExitOnEOF >LDA.G bExitOnEOF
>STA.G bExit >STA.G bExit
@ -494,12 +484,7 @@ CS.DOEVENT lda (pEvent)
.9 sec .9 sec
rts rts
*-------------------------------------- *--------------------------------------
CS.QUIT >LDA.G hInputBuf CS.QUIT jsr HIS.Quit
beq .1
>SYSCALL FreeMem
.1 jsr HIS.Quit
jsr CL.Quit jsr CL.Quit
jsr CORE.Quit jsr CORE.Quit
clc clc
@ -693,12 +678,9 @@ M32.Printf .AZ "%L"
DS.START DS.START
CORE.STACK .BS CORE.STACK.MAX+1 pData (0 = Stack Ptr) CORE.STACK .BS CORE.STACK.MAX+1 pData (0 = Stack Ptr)
PUSHD.STACK .BS PUSHD.STACK.MAX+1 PUSHD.STACK .BS PUSHD.STACK.MAX+1
FILECALL.STACK .BS FILECALL.STACK.MAX*3+1
hFuncList .BS 1 hFuncList .BS 1
hInputBuf .BS 1
bReadMode .BS 1 bReadMode .BS 1
bBatchMode .BS 1 bBatchMode .BS 1
bFuncMode .BS 1 bFuncMode .BS 1
@ -726,10 +708,12 @@ CORE.IntCmd .BS 1
CORE.CmdFile .BS 1 CORE.CmdFile .BS 1
CORE.hArgVBuf .BS 1 CORE.hArgVBuf .BS 1
CORE.PSFlags .BS 1
CORE.ArgIndex .BS 1 CORE.ArgIndex .BS 1
CORE.Test .BS 1 CORE.Test .BS 1
CORE.TestOp .BS 1
CORE.TestArg .BS 1
CORE.Operator .BS 1 CORE.Operator .BS 1
CORE.PSFlags .BS 1
HIS.hBuf .BS 1 HIS.hBuf .BS 1
HIS.Count .BS 1 HIS.Count .BS 1

View File

@ -41,6 +41,7 @@ ERR.Codes .DA #MLI.E.IO
.DA #E.NOFOR .DA #E.NOFOR
.DA #E.NOIF .DA #E.NOIF
.DA #E.BADFTYPE .DA #E.BADFTYPE
.DA #E.FUNDEF
*-------------------------------------- *--------------------------------------
ERR.Count .EQ *-ERR.Codes ERR.Count .EQ *-ERR.Codes
*-------------------------------------- *--------------------------------------
@ -82,6 +83,7 @@ ERR.Messages >PSTR "I/O Error"
>PSTR "NEXT Without FOR" >PSTR "NEXT Without FOR"
>PSTR "FI/ELSE Without IF" >PSTR "FI/ELSE Without IF"
>PSTR "Bad File Type" >PSTR "Bad File Type"
>PSTR "Undefined Function"
*-------------------------------------- *--------------------------------------
>PSTR "Unknown Error" >PSTR "Unknown Error"
*-------------------------------------- *--------------------------------------