Kernel 0.93

This commit is contained in:
Rémy GIBERT 2019-04-04 16:44:20 +01:00
parent fcc36ca1ed
commit 058026fea0
5 changed files with 189 additions and 184 deletions

View File

@ -64,12 +64,13 @@ where [ exp ] and [ condition ] allow to detail operators....
| CALL | Working | CALL function <arg> ... | | 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 |
| .. | Working | CD .. |
| DATE | Working | | | DATE | Working | |
| DEFAULT | Working | Default CASE for SWITCH | | DEFAULT | Working | Default CASE for SWITCH |
| ECHO | Working | \b,\e,\f,\n,\\\ and \\% supported <br> -N : Suppress \r\n | | ECHO | Working | \b,\e,\f,\n,\\\ and \\% supported <br> -N : Suppress \r\n |
| ELSE | Working | Optional branch for IF block | | ELSE | Working | Optional branch for IF block |
| END | Working | End of SWITCH Statement | | END | Working | End of SWITCH Statement |
| EXIT | Working | exit script or shell | | EXIT | Working | exit function, script or shell |
| FI | Working | Terminator for IF block | | FI | Working | Terminator for IF block |
| FUNC | In Progress | FUNC fonction_name <br> \<body\> <br> END | | FUNC | In Progress | FUNC fonction_name <br> \<body\> <br> END |
| IF | Working | [ \<condition\> ] | | IF | Working | [ \<condition\> ] |
@ -81,10 +82,9 @@ 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 | -F : Undefine all functions <br> -S : no echo (password) <br> -P : "prompt message" | | READ | Working | -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 | | SET | Working | -X : toggle debug mode <br> -C : toggle Control-C break mode <br> -E : toggle error printing mode <br> -F : delete all declared functions |
| SET | Working | -X : toggle debug mode <br> -C : toggle Control-C break mode |
| SHIFT | Working | Remove $1 from cmd line | | SHIFT | Working | Remove $1 from cmd line |
| SLEEP | Working | Wait \<count\> 10th sec | | SLEEP | Working | Wait \<count\> 10th sec |
| SWITCH | Working | SWITCH <expression> | | SWITCH | Working | SWITCH <expression> |

View File

@ -572,17 +572,24 @@ CMD.. lda (ZPArgVBufPtr)
beq .9 beq .9
>LDYA ZPArgVBufPtr >LDYA ZPArgVBufPtr
jmp CORE.FCALL exec cmd file and continue jsr IO.Load
bcs CMD.CALL.RTS
>LDYA ZPArgVBufPtr
jmp CMD.CALL exec cmd file and continue
.9 jmp CMD.Exec.CSYN .9 jmp CMD.Exec.CSYN
*-------------------------------------- *--------------------------------------
CMD.CALL.UNDEF lda #E.FUNDEF
sec
CMD.CALL.RTS rts
*--------------------------------------
CMD.CALL >LDA.G hFuncList CMD.CALL >LDA.G hFuncList
beq .9 beq CMD.CALL.UNDEF
>PUSHW ZPArgVBufPtr >PUSHW ZPArgVBufPtr
>LDA.G hFuncList >LDA.G hFuncList
>SYSCALL SListLookup >SYSCALL SListLookup
bcs .9 bcs CMD.CALL.UNDEF
>STYA M32.TMP KeyID >STYA M32.TMP KeyID
@ -592,47 +599,131 @@ CMD.CALL >LDA.G hFuncList
>PUSHW M32.TMP KeyID >PUSHW M32.TMP KeyID
>LDA.G hFuncList >LDA.G hFuncList
>SYSCALL SListGetData >SYSCALL SListGetData
bcs .99 bcs CMD.CALL.RTS
>LDYA ZPArgVBufPtr FUNC PARAM1 PARAM2... >LDYA ZPArgVBufPtr FUNC PARAM1 PARAM2...
jmp CORE.CALL X = Func Code
CMD.CALL.YAX stx M32.ACC X=Code to Execute
.9 lda #E.FUNDEF
sec jsr CORE.ArgV.Dup Y,A = ArgV
.99 rts
*--------------------------------------
CMD.RETURN jsr CORE.RETURN
bcs .9 bcs .9
lda (ZPArgVBufPtr) stx M32.ACC+1 X=ARGV
beq .8 no arg, exit 0
lda #7
>LDYA ZPArgVBufPtr jsr CORE.StkCheck
>SYSCALL AToL
bcs .9 bcs .9
>PULLL M32.ACC lda ZPInputBuf
jsr CORE.StkPush
lda ZPInputBuf+1
jsr CORE.StkPush
lda ZPInputBufPtr
jsr CORE.StkPush
lda ZPInputBufPtr+1
jsr CORE.StkPush
ldy #S.PS.hARGV
lda (pPS),y
jsr CORE.StkPush
lda M32.ACC+1 new ARGV
ldy #S.PS.hARGV
sta (pPS),y
lda M32.ACC lda M32.ACC
jsr CORE.StkPush
.8 clc lda M32.ACC
>SYSCALL GetMemPtr
>STYA ZPInputBuf
>STYA ZPInputBufPtr
lda #$C0
jsr CORE.StkPush
>INC.G bBatchMode
clc
.9 rts .9 rts
*-------------------------------------- *--------------------------------------
CMD.EXIT lda (ZPArgVBufPtr) CMD.EXIT lda (ZPArgVBufPtr)
beq .8 no arg, exit 0 beq CMD.EXIT.A no arg, exit 0
>LDYA ZPArgVBufPtr >LDYA ZPArgVBufPtr
jsr EXP.GET
bcs CMD.EXIT.RTS
>SYSCALL AToL >SYSCALL AToL
bcs .9 bcs CMD.EXIT.RTS
>PULLL M32.ACC >PULLA
lda M32.ACC inc pStack
inc pStack
inc pStack
.8 pha CMD.EXIT.A sta M32.ACC
>DEBUG
.1 jsr CORE.StkPull
bcs CMD.EXIT.RTS
cmp #$C0 in CALL / . context ?
beq .8
and #$3F
ldx #1
cmp #C.IF
beq .3
.2 ldx #3
cmp #C.WHILE
bne CMD.EXIT.99
.3 lda (pData)
.4 dec
dex
bne .4
sta (pData)
bra .1
.8 jsr CORE.StkPull
>SYSCALL freemem Code buffer
ldy #S.PS.hARGV
lda (pPS),y
>SYSCALL freemem ArgV buffer
jsr CORE.StkPull
ldy #S.PS.hARGV
sta (pPS),y
jsr CORE.StkPull
sta ZPInputBufPtr+1
jsr CORE.StkPull
sta ZPInputBufPtr
jsr CORE.StkPull
sta ZPInputBuf+1
jsr CORE.StkPull
sta ZPInputBuf
>DEC.G bBatchMode
pha
lda #$FF lda #$FF
>STA.G bExit >STA.G bExit
pla pla
clc clc
.9 rts CMD.EXIT.RTS rts
CMD.EXIT.99 lda #E.STACKERROR
sec
rts
*-------------------------------------- *--------------------------------------
CMD.BREAK jsr CORE.StkGetCtx Get context in CORE.Test CMD.BREAK jsr CORE.StkGetCtx Get context in CORE.Test
bcs .9 bcs .9
@ -659,6 +750,10 @@ CMD.BREAK jsr CORE.StkGetCtx Get context in CORE.Test
*-------------------------------------- *--------------------------------------
CMD.SWITCH jsr CORE.StkGetCtx CMD.SWITCH jsr CORE.StkGetCtx
lda #2
jsr CORE.StkCheck
bcs .9
jsr EXP.GET jsr EXP.GET
bcs .9 bcs .9
>SYSCALL strdup >SYSCALL strdup
@ -799,6 +894,14 @@ CMD.FOR jsr CORE.StkGetCtx
jsr CORE.ArgV.Next jsr CORE.ArgV.Next
beq CMD.END.CSYN beq CMD.END.CSYN
lda #8
jsr CORE.StkCheck
bcs .9
sec
jsr CORE.StkPushPtr Push CmdPtr AFTER FOR
lda (ZPArgVBufPtr)
cmp #'(' cmp #'('
beq FOR.FILE beq FOR.FILE
@ -806,15 +909,9 @@ CMD.FOR jsr CORE.StkGetCtx
bne FOR.LIST bne FOR.LIST
jmp FOR.EXEC jmp FOR.EXEC
.9 rts
*-------------------------------------- *--------------------------------------
FOR.LIST lda #8 FOR.LIST >LDYA ZPArgVBufPtr
jsr CORE.StkCheck
bcs .9
sec
jsr CORE.StkPushPtr Push CmdPtr AFTER FOR
>LDYA ZPArgVBufPtr
>SYSCALL strdup >SYSCALL strdup
bcs .9 bcs .9
@ -851,14 +948,7 @@ FOR.LIST lda #8
.9 rts .9 rts
*-------------------------------------- *--------------------------------------
FOR.FILE lda #8 FOR.FILE jsr CORE.ArgV.NextChar skip "("
jsr CORE.StkCheck
bcs FOR.FILE.9
sec
jsr CORE.StkPushPtr Push CmdPtr AFTER FOR
jsr CORE.ArgV.NextChar skip "("
>PUSHWI 0 Aux type >PUSHWI 0 Aux type
>PUSHBI S.FI.T.TXT >PUSHBI S.FI.T.TXT
@ -897,14 +987,7 @@ FOR.FILE lda #8
FOR.FILE.9 rts FOR.FILE.9 rts
*-------------------------------------- *--------------------------------------
FOR.EXEC lda #8 FOR.EXEC jsr CORE.ArgV.NextChar skip "`"
jsr CORE.StkCheck
bcs FOR.FILE.9
sec
jsr CORE.StkPushPtr Push CmdPtr AFTER FOR
jsr CORE.ArgV.NextChar skip "`"
jsr IO.Pipe.Out jsr IO.Pipe.Out
bcs .9 bcs .9
@ -1222,6 +1305,7 @@ CMD.IF jsr CORE.StkGetCtx
*-------------------------------------- *--------------------------------------
CMD.LOOP jsr CORE.StkPull CMD.LOOP jsr CORE.StkPull
bcs .9 bcs .9
tax tax
and #$3F and #$3F
cmp #C.WHILE cmp #C.WHILE
@ -1231,8 +1315,8 @@ CMD.LOOP jsr CORE.StkPull
bmi .8 bmi .8
lda (pData) lda (pData)
sec dec
sbc #2 Discard loop Ptr dec Discard loop Ptr
sta (pData) sta (pData)
clc clc

View File

@ -71,7 +71,8 @@ CORE.Run >LDYA ZPInputBufPtr Save Actual cmd for looping
jsr CORE.GetCharNB jsr CORE.GetCharNB
bcc .11 bcc .11
jsr CORE.RETURN lda #0 EOF
jsr CMD.EXIT.A
bcs .9 bcs .9
jsr IO.Reset jsr IO.Reset
@ -321,100 +322,6 @@ CORE.SkipLine jsr CORE.GetNextCharNB
jsr CORE.GetNextChar skip CR... jsr CORE.GetNextChar skip CR...
.8 rts .8 rts
*--------------------------------------
CORE.FCALL >STYA ZPPtr1 ArgV
>PUSHWI 0 Aux type
>PUSHBI S.FI.T.TXT
>PUSHBI O.RDONLY
>LDYA ZPPtr1
>SYSCALL LoadTxtFile
bcs CORE.CALL.9
>LDYA ZPPtr1
CORE.CALL stx M32.ACC X=Code to Execute
jsr CORE.ArgV.Dup Y,A = ArgV
bcs CORE.CALL.9
stx M32.ACC+1 X=ARGV
lda #7
jsr CORE.StkCheck
bcs CORE.CALL.9
lda ZPInputBuf
jsr CORE.StkPush
lda ZPInputBuf+1
jsr CORE.StkPush
lda ZPInputBufPtr
jsr CORE.StkPush
lda ZPInputBufPtr+1
jsr CORE.StkPush
ldy #S.PS.hARGV
lda (pPS),y
jsr CORE.StkPush
lda M32.ACC+1 new ARGV
ldy #S.PS.hARGV
sta (pPS),y
lda M32.ACC
jsr CORE.StkPush
lda M32.ACC
>SYSCALL GetMemPtr
>STYA ZPInputBuf
>STYA ZPInputBufPtr
lda #$C0
jsr CORE.StkPush
>INC.G bBatchMode
* clc
CORE.CALL.9 rts
*--------------------------------------
CORE.RETURN jsr CORE.StkPull
bcs .90
cmp #$C0
bne .90
jsr CORE.StkPull
>SYSCALL freemem Code buffer
ldy #S.PS.hARGV
lda (pPS),y
>SYSCALL freemem ArgV buffer
jsr CORE.StkPull
ldy #S.PS.hARGV
sta (pPS),y
jsr CORE.StkPull
sta ZPInputBufPtr+1
jsr CORE.StkPull
sta ZPInputBufPtr
jsr CORE.StkPull
sta ZPInputBuf+1
jsr CORE.StkPull
sta ZPInputBuf
>DEC.G bBatchMode
* clc
rts
.90 lda #E.STACKERROR
sec
rts
*-------------------------------------- *--------------------------------------
* search ZPInputBufPtr/ZPArgVBufPtr in Y,A table * search ZPInputBufPtr/ZPArgVBufPtr in Y,A table
*-------------------------------------- *--------------------------------------
@ -779,15 +686,6 @@ CORE.StkPushPtr bcs .1
txa txa
bra CORE.StkPush bra CORE.StkPush
*-------------------------------------- *--------------------------------------
CORE.StkPullPtr jsr CORE.StkPull
bcs CORE.StkPullPtr.9
sta ZPInputBufPtr+1
jsr CORE.StkPull
bcs CORE.StkPullPtr.9
sta ZPInputBufPtr
CORE.StkPullPtr.9
rts
*--------------------------------------
CORE.StkPushYA phy CORE.StkPushYA phy
jsr CORE.StkPush jsr CORE.StkPush
pla pla
@ -846,6 +744,15 @@ CORE.StkGetCtx jsr CORE.StkGet
txa txa
rts rts
*-------------------------------------- *--------------------------------------
CORE.StkPullPtr jsr CORE.StkPull
bcs CORE.StkPullPtr.9
sta ZPInputBufPtr+1
jsr CORE.StkPull
bcs CORE.StkPullPtr.9
sta ZPInputBufPtr
CORE.StkPullPtr.9
rts
*--------------------------------------
CORE.StkPull jsr CORE.StkGet CORE.StkPull jsr CORE.StkGet
bcs .9 bcs .9

View File

@ -7,7 +7,16 @@ 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.Load pha
>PUSHWI 0 Aux type
>PUSHBI S.FI.T.TXT
>PUSHBI O.RDONLY
pla
>SYSCALL LoadTxtFile
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
@ -21,7 +30,7 @@ IO.Pipe.In >LDA.G IO.hOut
>SYSCALL fopen >SYSCALL fopen
bcs IO.Set.RTS bcs IO.Set.RTS
*-------------------------------------- *--------------------------------------
IO.Set.In pha IO.Set.In pha
jsr IO.Reset.In jsr IO.Reset.In
ldy #S.PS.hStdIn ldy #S.PS.hStdIn
@ -31,7 +40,7 @@ IO.Set.In pha
ldy #S.PS.hStdIn ldy #S.PS.hStdIn
sta (pPS),y sta (pPS),y
IO.Set.RTS rts IO.Set.RTS rts
*-------------------------------------- *--------------------------------------
IO.Reset.In >LDA.G IO.hIn IO.Reset.In >LDA.G IO.hIn
beq .8 beq .8
@ -49,7 +58,7 @@ IO.Reset.In >LDA.G IO.hIn
>STZ.G IO.hIn >STZ.G IO.hIn
.8 clc .8 clc
IO.Reset.In.RTS rts IO.Reset.In.RTS rts
*-------------------------------------- *--------------------------------------
IO.Pipe.Out >SYSCALL pipe IO.Pipe.Out >SYSCALL pipe
bcs IO.Reset.In.RTS bcs IO.Reset.In.RTS
>STA.G IO.hPipe >STA.G IO.hPipe

View File

@ -31,24 +31,23 @@ C.TIME .EQ 17
C.PUSHD .EQ 18 C.PUSHD .EQ 18
C.POPD .EQ 19 C.POPD .EQ 19
C.FUNC .EQ 20 C.FUNC .EQ 20
C.RETURN .EQ 21 C.CALL .EQ 21
C.CALL .EQ 22 C.BREAK .EQ 22
C.BREAK .EQ 23 C.SWITCH .EQ 23
C.SWITCH .EQ 24 C.CASE .EQ 24
C.CASE .EQ 25 C.DEFAULT .EQ 25
C.DEFAULT .EQ 26 C.END .EQ 26
C.END .EQ 27
*-------------------------------------- *--------------------------------------
C.FOR .EQ 28 C.FOR .EQ 27
C.FOR.LIST .EQ 0 C.FOR.LIST .EQ 0
C.FOR.FILE .EQ 2 C.FOR.FILE .EQ 2
C.FOR.EXEC .EQ 4 C.FOR.EXEC .EQ 4
C.WHILE .EQ 29 C.WHILE .EQ 28
C.IF .EQ 30 C.IF .EQ 29
C.NEXT .EQ 31 C.NEXT .EQ 30
C.LOOP .EQ 32 C.LOOP .EQ 31
C.ELSE .EQ 33 C.ELSE .EQ 32
C.FI .EQ 34 C.FI .EQ 33
*-------------------------------------- *--------------------------------------
E.CSYN .EQ $C0 E.CSYN .EQ $C0
E.ESYN .EQ $C1 E.ESYN .EQ $C1
@ -150,7 +149,6 @@ J.CMD .DA CMD...
.DA CMD.PUSHD .DA CMD.PUSHD
.DA CMD.POPD .DA CMD.POPD
.DA CMD.FUNC .DA CMD.FUNC
.DA CMD.RETURN
.DA CMD.CALL .DA CMD.CALL
.DA CMD.BREAK .DA CMD.BREAK
.DA CMD.SWITCH .DA CMD.SWITCH
@ -218,9 +216,14 @@ CS.RUN jsr CL.Init
lda (pPS),y lda (pPS),y
>SYSCALL GetMemPtr >SYSCALL GetMemPtr
jsr CORE.FCALL Exec file an exit jsr IO.Load
bcs CS.INIT.RTS bcs CS.INIT.RTS
phx
ldy #S.PS.hARGV
lda (pPS),y
>SYSCALL GetMemPtr
plx
jsr CMD.CALL.YAX
bra CS.RUN.LOOP bra CS.RUN.LOOP
*-------------------------------------- *--------------------------------------
.1 jsr CMD.CD.HOME .1 jsr CMD.CD.HOME
@ -239,7 +242,10 @@ 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 CORE.FCALL exec profile and continue jsr IO.Load
bcs CS.RUN.LOOP
>LDYA L.HOME.PROFILE
jsr CMD.CALL.YAX exec profile and continue
* bcs CS.RUN.LOOP * bcs CS.RUN.LOOP
*-------------------------------------- *--------------------------------------
@ -347,7 +353,7 @@ CS.RUN.INTERACTIVE
>SYSCALL GetMemPtr Y,A =ARGV >SYSCALL GetMemPtr Y,A =ARGV
plx plx
jsr CORE.CALL X = Copy of CL jsr CMD.CALL.YAX X = Copy of CL
.6 jsr CORE.Run .6 jsr CORE.Run
@ -442,7 +448,7 @@ CS.RUN.BATCH >LDA.G bSET.C
bne CS.RUN.LOOP.END bne CS.RUN.LOOP.END
pha pha
jsr CORE.RETURN jsr CMD.EXIT.A
lda (pData) lda (pData)
bne .6 bne .6
@ -614,7 +620,6 @@ CMD .AZ ".."
.AZ "PUSHD" .AZ "PUSHD"
.AZ "POPD" .AZ "POPD"
.AZ "FUNC" .AZ "FUNC"
.AZ "RETURN"
.AZ "CALL" .AZ "CALL"
.AZ "BREAK" .AZ "BREAK"
.AZ "SWITCH" .AZ "SWITCH"