Kernel 0.92

This commit is contained in:
Rémy GIBERT 2019-02-01 16:32:29 +00:00
parent bcfa618bfe
commit 7abd289f48
11 changed files with 1346 additions and 1409 deletions

View File

@ -515,6 +515,6 @@ BUF.GetSelLen ldy #SelEnd
rts
*--------------------------------------
MAN
SAVE USR/SRC/BIN/BIN/EDIT.S.BUF
LOAD USR/SRC/BIN/BIN/EDIT.S
SAVE USR/SRC/BIN/EDIT.S.BUF
LOAD USR/SRC/BIN/EDIT.S
ASM

View File

@ -679,6 +679,6 @@ Prompt.Save cmp #3 Ctrl-C
.9 jmp Ctrl.Q
*--------------------------------------
MAN
SAVE USR/SRC/BIN/BIN/EDIT.S.CTRL
LOAD USR/SRC/BIN/BIN/EDIT.S
SAVE USR/SRC/BIN/EDIT.S.CTRL
LOAD USR/SRC/BIN/EDIT.S
ASM

View File

@ -561,6 +561,6 @@ SCRN.scrollDn ldy #CurX
.9 jmp Ctrl.Q
*--------------------------------------
MAN
SAVE USR/SRC/BIN/BIN/EDIT.S.SCRN
LOAD USR/SRC/BIN/BIN/EDIT.S
SAVE USR/SRC/BIN/EDIT.S.SCRN
LOAD USR/SRC/BIN/EDIT.S
ASM

View File

@ -438,9 +438,9 @@ DecTmpCount lda TmpCount
ora #$ff make sure NZ
.9 rts
*--------------------------------------
.INB USR/SRC/BIN/BIN/EDIT.S.BUF
.INB USR/SRC/BIN/BIN/EDIT.S.CTRL
.INB USR/SRC/BIN/BIN/EDIT.S.SCRN
.INB USR/SRC/BIN/EDIT.S.BUF
.INB USR/SRC/BIN/EDIT.S.CTRL
.INB USR/SRC/BIN/EDIT.S.SCRN
*--------------------------------------
CS.END
SEQ.DETECT .AZ "Querying terminal capabilities...\e[999;999H\e[6n"
@ -534,5 +534,5 @@ DS.END
.ED
*--------------------------------------
MAN
SAVE USR/SRC/BIN/BIN/EDIT.S
SAVE USR/SRC/BIN/EDIT.S
ASM

View File

@ -54,16 +54,18 @@ L.MSG5 .DA MSG5
L.MSG.FREE .DA MSG.FREE
.DA 0
*--------------------------------------
CS.INIT lda #0
>STA.G MEM.COUNT Skip SLOT 0
>LEA.G MemStat
>SYSCALL GetMemStat
clc
CS.INIT clc
rts
*--------------------------------------
CS.RUN >SYSCALL GetChar
CS.RUN >LEA.G MemStat
>SYSCALL GetMemStat
>LDYAI Mem.Table+S.MEM
>STYA ZPPTR1
CS.RUN.LOOP >SLEEP
>SYSCALL GetChar
bcs .13
cmp #3 Ctrl-C ?
@ -80,11 +82,7 @@ CS.RUN >SYSCALL GetChar
.12 >STZ.G bSTOP
.13 >LDA.G bSTOP
bne .8
>INC.G MEM.COUNT
>SYSCALL GetMemByID
>STYA ZPPTR1
bne CS.RUN.LOOP
>LDA.G LINE.COUNT
bne .1
@ -99,12 +97,19 @@ CS.RUN >SYSCALL GetChar
.2 jsr CS.RUN.PRINTMEM
>LDA.G MEM.COUNT
lda ZPPTR1
clc
adc #S.MEM
sta ZPPTR1
bcc .3
inc ZPPTR1+1
.3 >INC.G MEM.COUNT
>CMP.G MemStat+S.MSTAT.MLast
beq CS.RUN.FOOTER
.8 clc
rts
bra CS.RUN.LOOP
.9 sec
rts

View File

@ -3,307 +3,707 @@ PREFIX
AUTO 4,1
.LIST OFF
*--------------------------------------
* Read From InputBuf
*--------------------------------------
CMD.Get >LDYA ZPInputBufPtr
>STYA ZPInputBufPtrBak
lda (ZPInputBufPtr)
beq .9
ldx #0 not in "
ldy #0
.1 lda (ZPInputBufPtr),y
beq .7
cmp #C.CR
beq .6
cmp #'"'
bne .2
txa
eor #$80 toggle " switch
tax
lda #'"'
bra .5
.2 cmp #';'
bne .5
txa
beq .6
lda #';'
.5 sta (ZPCLBuf),y
iny
cpy #CL.MAX
bne .1
lda #E.SYN Line Too long !!!
* sec
rts
.6 sec skip CR or ;
.HS 90 BCC
.7 clc
tya
adc ZPInputBufPtr
sta ZPInputBufPtr
bcc .8
inc ZPInputBufPtr+1
.8 lda #0
sta (ZPCLBuf),y
tya
>STA.G CL.Len
lda #$ff
>STA.G CL.bExec
CMD.STARTPROC
clc
rts
.9 lda #C.EOF
sec
rts
*--------------------------------------
* in:
* ZPCLBuf : CString command line
* out:
* ZPArgVBuf :
* /path/excmd\0 arg1\0 arg2\0 ... \0
* - or -
* intcmd\0 arg1\0 arg2\0 ... \0
*--------------------------------------
CL.Parse >STZ.G CORE.IntCmd
CMD.SHIFT lda #1
lda #S.PS.F.HOLD+S.PS.F.DUPENV
>STA.G CORE.PSFlags
>PUSHW ZPCLBuf
>LDYA ZPCLBuf
>STYA ZPCLBufPtr
>SYSCALL Args2ArgV
CMD.SHIFTA >SYSCALL ArgV
bcs .8
lda #0
sta (ZPArgVBuf)
lda (ZPCLBufPtr)
beq .8
.1 cmp #'#' comment ?
beq .8 yes, ignore remaining
>LDA.G CORE.IntCmd
bne .3 we already have Cmd, go check args
ldy #1
lda (ZPCLBufPtr),y only one char ?
bne .2
lda (ZPCLBufPtr)
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
bra .6 and skip this token
.2 jsr CL.CheckCmd
bcc .6 success, skip token, already added by CheckCmd
rts
.3 jsr CL.CheckIO
bcc .7 IO token & related args processed
tay an error ?
bne .9 yes...I/O error...
jsr CL.AddCLBufPtrToArgV no...add as an arg
bcs .9
.6 jsr CL.NextCLToken
.7 lda (ZPCLBufPtr)
bne .1
.8 clc
.9 rts
*--------------------------------------
* ZPCLBuf-> argv[] (formatted & not empty)
*--------------------------------------
CL.CheckCmd ldy #$ff
.1 iny
lda (ZPCLBufPtr),y
beq .2
cmp #'/'
bne .1
bra .4
.2 >PUSHW ZPCLBufPtr
>LDYA L.CORE.INT
jsr Lookup no / found, search internal...
bcs .4 not internal, search PATH
phx
plx
bne .3
>LDA.G CORE.PSFlags if STARTPROC, skip keyword...
and #$ff^S.PS.F.HOLD
sta (pData),y ...and toggle S.PS.F.HOLD flag
clc
.9 rts
.3 jsr CL.AddYAToArgV X unmodified
bcs .9
txa
>STA.G CORE.IntCmd
clc
rts
.4 >LDYA ZPCLBufPtr
jsr CL.AddYAToArgV
lda #$ff
>STA.G CORE.IntCmd
clc
CL.CheckCmd.RTS
rts
*--------------------------------------
CL.CheckIO >PUSHW ZPCLBufPtr
>LDYA L.CL.IO
jsr Lookup
bcs .9 not a IO token...should be an arg....
phx
jsr CL.NextCLToken skip this IO token
plx
jmp (J.CL.IO,x)
.9 lda #0
rts
*--------------------------------------
CL.IO.AMP >LDA.G CORE.PSFlags
and #$ff^S.PS.F.HOLD
sta (pData),y
clc
rts
CL.IO.IN lda #O.RDONLY+O.TEXT
jsr CL.IO.Open
bcs .9
jsr IO.Set.In
jsr CL.NextCLToken skip arg
clc
.9 rts
CL.IO.OUTA
CL.IO.1OUTA lda #O.WRONLY+O.APPEND+O.CREATE+O.TEXT
bra CL.IO.OUT.1
CL.IO.OUT
CL.IO.1OUT lda #O.WRONLY+O.TRUNC+O.CREATE+O.TEXT
CL.IO.OUT.1 jsr CL.IO.Open
bcs .9
jsr IO.Set.Out
jsr CL.NextCLToken skip arg
clc
.9 rts
CL.IO.2OUTA lda #O.WRONLY+O.APPEND+O.CREATE+O.TEXT
bra CL.IO.2OUT.1
CL.IO.2OUT lda #O.WRONLY+O.TRUNC+O.CREATE+O.TEXT
CL.IO.2OUT.1 jsr CL.IO.Open
bcs .9
jsr IO.Set.Err
jsr CL.NextCLToken skip arg
clc
.9 rts
*--------------------------------------
CL.IO.Open pha
lda (ZPCLBufPtr)
beq .9 no arg left....
>PUSHWI 0 Aux type
>PUSHBI S.FI.T.TXT ftype
pla
>PUSHA flags
>LDYA ZPCLBufPtr
>SYSCALL fopen
rts
.9 pla
lda #E.CSYN
sec
rts
*--------------------------------------
CL.NextCLToken
lda (ZPCLBufPtr)
inc ZPCLBufPtr
bne .1
inc ZPCLBufPtr+1
.1 tax
bne CL.NextCLToken
rts
*--------------------------------------
CL.AddCLBufPtrToArgV
>LDYA ZPCLBufPtr
CL.AddYAToArgV >STYA ZPPtr1
>LDYA ZPArgVBuf
>STYA ZPPtr1
>STYA ZPPtr2
.10 ldy #$ff
.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
.1 iny Compute ArgX len
lda (ZPPtr1),y
bne .1
.6 ldy #$ff
.7 iny
* beq .9
.2 tya
sec
adc ZPPtr1
sta ZPPtr1
bcc .3
inc ZPPtr1+1
.3 ldy #$ff
.4 iny
lda (ZPPtr1),y
sta (ZPPtr2),y
bne .7 including str ending \0
bne .4
tya
beq .7
sec
adc ZPPtr2
sta ZPPtr2
bcc .2
inc ZPPtr2+1
bra .2
.7 ldy #S.PS.ARGC
lda (pPS),y
dec
sta (pPS),y
.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
ldy #S.PS.hPREFIX
lda (pPs),y
>SYSCALL GetMemPtr
>SYSCALL strdup
bcs CMD.POPD.CSYN
>INC.G PUSHD.STACK
tay
txa
sta (pData),y
ldx #1
jsr CORE.GetArgX
bcc CMD.CD.1
.8 clc
.9 rts
*--------------------------------------
CMD.POPD >LDA.G PUSHD.STACK
cmp #PUSHD.STACK
beq CMD.POPD.CSYN
tay
lda (pData),y
jsr CORE.SetPrefixA
>DEC.G PUSHD.STACK
clc
CMD.POPD.RTS
rts
CMD.POPD.CSYN jmp CORE.Exec.CSYN
*--------------------------------------
CMD.CD ldx #1
jsr CORE.GetArgX
bcc CMD.CD.1
CMD.CD.HOME >LDYA L.ENV.HOME
>SYSCALL GetEnv
bcc CMD.CD.1
>LDYA L.ENV.ROOT
>SYSCALL GetEnv
bcc CMD.CD.1
jmp CMD.PWD
CMD.CD.1.9 pla
>SYSCALL freemem
bra CMD.POPD.CSYN
CMD.CD.1 >SYSCALL realpath
bcs CMD.POPD.RTS
>STYA ZPPtr1
phx
ldy #1
lda (ZPPtr1),y
beq CORE.SetPrefixPHA we have '/'
>PUSHEA.G StatBuf
>LDYA ZPPtr1
>SYSCALL STAT
bcs CMD.CD.1.9
>LDA.G StatBuf+S.STAT.P.TYPE
cmp #S.FI.T.DIR
bne CMD.CD.1.9
ldy #$ff
.1 iny
lda (ZPPtr1),y
bne .1
dey
lda (ZPPtr1),y
cmp #'/'
beq CORE.SetPrefixPHA already ends witrh a /
iny
* beq .9
sta (ZPPtr2),y arg[] ending \0
iny
lda #0
>SYSCALL getmem
bcs CMD.CD.1.9
>STYA ZPPtr2
ldy #$ff
.2 iny
lda (ZPPtr1),y
lda (ZPPtr2),y
bne .2
iny
sta (ZPPtr2),y
dey
lda #'/'
sta (ZPPtr2),y
pla
phx
>SYSCALL freemem
pla
*--------------------------------------
CORE.SetPrefixA pha
CORE.SetPrefixPHA
ldy #S.PS.hPREFIX
lda (pPs),y
>SYSCALL FreeMem
pla
ldy #S.PS.hPREFIX
sta (pPs),y
lda #0
* clc
rts
*--------------------------------------
CORE.Exec.CSYN lda #E.CSYN
sec
rts
*--------------------------------------
CORE.Exec.SSYN lda #E.SSYN
sec
rts
*--------------------------------------
CMD.SET ldx #1
jsr CORE.GetArgX
bcc CMD.SET.1
* No arg, print all ENV
ldy #S.PS.hENV
lda (pPs),y
>SYSCALL GetMemPtr
>STYA ZPPTR1
.1 lda (ZPPTR1)
beq .8 Ending 0 ?
ldy #$ff
.2 iny
lda (ZPPTR1),y
bne .2
tya
sec
adc ZPPTR1
sta ZPPTR2
lda #0
adc ZPPTR1+1
sta ZPPTR2+1
>PUSHW ZPPTR2 Push value
>PUSHW ZPPTR1 Push name
jsr CMD.SET.PRINT
bcs .9
ldy #$ff
.3 iny
lda (ZPPTR2),y
bne .3
tya
sec
adc ZPPTR2
sta ZPPTR1
lda #0
adc ZPPTR2+1
sta ZPPTR1+1
bra .1
.8 clc
.9 rts
*--------------------------------------
* SET +X VAR = VALUE1 op VALUE2 op VALUE3 ...
*--------------------------------------
CMD.SET.1 >STZ.G CORE.Varname
lda #1
>STA.G CORE.ArgIndex
.1 tax
jsr CORE.GetArgX
bcs .8
jsr CMD.IsSwitch
bcs .6
cmp #'C'
bne .2
>LDA.G bSET.C
bra .5
.2 cmp #'X'
bne .99
>LDA.G bSET.X
.5 eor #$ff
sta (pData),y
>INC.G CORE.ArgIndex
bra .1
.6 >LDA.G CORE.ArgIndex
>STA.G CORE.Varname
>INC.G CORE.ArgIndex
tax
jsr CORE.GetArgX
bcs CMD.SET.GET
>STYA ZPPTR1
lda (ZPPTR1)
cmp #'='
bne .99
ldy #1
lda (ZPPTR1),y
bne .99
>INC.G CORE.ArgIndex
tax
jsr CORE.GetArgX
bcs CMD.SET.UNSET
jsr EXP.GET
bcs .99
>PUSHYA
>LDA.G CORE.Varname
tax
jsr CORE.GetArgX
>SYSCALL SetEnv
rts
.8 clc
rts
.99 jmp CORE.Exec.CSYN
CMD.SET.UNSET >LDA.G CORE.Varname
tax
jsr CORE.GetArgX
>SYSCALL UnsetEnv
rts
CMD.SET.GET >LDA.G CORE.Varname
tax
jsr CORE.GetArgX
>SYSCALL GetEnv
bcc .1
clc
rts
.1 >PUSHYA push value
>LDA.G CORE.Varname
tax
jsr CORE.GetArgX
>PUSHYA push name
*--------------------------------------
CMD.SET.PRINT >PUSHBI 4
>LDYA L.MSG.PRINTENV
>SYSCALL printf
rts
*--------------------------------------
CMD.DATE sec
.HS 90 bcc
CMD.TIME clc
php
>LEA.G TimeBuf
>SYSCALL Time
>PUSHEA.G TimeBuf
plp
bcc .1
>PUSHW L.FMT.DATE
bra .2
.1 >PUSHW L.FMT.TIME
.2 >LDYA ZPCLBuf
>SYSCALL StrFTime
>LDYA ZPCLBuf
>SYSCALL puts
rts
*--------------------------------------
CMD.ECHO >STZ.G bECHO.N
lda #1
>STA.G CORE.ArgIndex
.1 tax
jsr CORE.GetArgX
bcs .7
jsr CMD.IsSwitch
bcs .2
cmp #'N'
bne .99
lda #$ff
>EOR.G bECHO.N
sta (pData),y
>INC.G CORE.ArgIndex
bra .1
.2 pha
>PUSHBI 0
pla
>SYSCALL printf
bcs .9
>INC.G CORE.ArgIndex
tax
jsr CORE.GetArgX
bcs .7
.6 lda #C.SPACE
>SYSCALL putchar
bcs .9
>PUSHBI 0
>LDA.G CORE.ArgIndex
tax
jsr CORE.GetArgX
>SYSCALL printf
bcs .9
>INC.G CORE.ArgIndex
tax
jsr CORE.GetArgX
bcc .6
.7 >LDA.G bECHO.N
bmi .8
>PUSHBI 0
>LDYA L.MSG.ECHOCRLF
>SYSCALL printf
rts
.8 clc
.9 rts
.99 lda #E.CSYN
sec
rts
*--------------------------------------
CMD.GETKEY ldx #1
jsr CORE.GetArgX
bcs .99
>SYSCALL getchar
bcc .1
tay
bne .9
.1 >PUSHA
>PUSHBI 1
>PUSHW L.FMT.GETKEY
>LEA.G M32.BUF
>SYSCALL sprintf
bcs .9
>PUSHEA.G M32.BUF
ldx #1
jsr CORE.GetArgX
>SYSCALL SetEnv
.9 rts
.99 jmp CORE.Exec.CSYN
*--------------------------------------
CMD.READ lda #1
>STA.G CORE.ArgIndex
tax
jsr CORE.GetArgX
bcs .9
.1 jsr CMD.IsSwitch
bcs .4
cmp #'S'
bne .2
lda #$ff
>STA.G bREAD.S
bra .7
.2 cmp #'P'
bne .9
>INC.G CORE.ArgIndex
tax
jsr CORE.GetArgX
bcs .9
pha
>PUSHBI 0
pla
>SYSCALL printf
bcs .99
bra .7
.4 >SYSCALL strdup
txa
>STA.G hVarName
.7 >INC.G CORE.ArgIndex
tax
jsr CORE.GetArgX
bcc .1
>LDA.G hVarName
beq .9
clc
.99 rts
.9 jmp CORE.Exec.CSYN
*--------------------------------------
CMD.SLEEP ldx #1
jsr CORE.GetArgX
bcs .9
>SYSCALL AToL
bcs .9
>PULLL.G Sleep
clc
rts
.9 jmp CORE.Exec.CSYN
*--------------------------------------
CMD.PAUSE lda #$FF
>STA.G bPause
clc
rts
*--------------------------------------
CMD.EXIT ldx #1
jsr CORE.GetArgX
bcs .8 no arg, exit 0
>SYSCALL AToL
bcs .9
>PULLL.G M32.ACC
lda #$FF
>STA.G bExit
>LDA.G M32.ACC
clc
rts
.8 lda #$FF
>STA.G bExit
inc
clc
.9 rts
*--------------------------------------
CMD.MD ldx #1
jsr CORE.GetArgX
bcs .9
>SYSCALL MKDir
rts
.9 jmp CORE.Exec.CSYN
*--------------------------------------
CMD.REN ldx #2
jsr CORE.GetArgX
bcs .9
>PUSHYA
ldx #1
jsr CORE.GetArgX
>SYSCALL Rename
rts
.9 jmp CORE.Exec.CSYN
*--------------------------------------
CMD.RD ldx #1
jsr CORE.GetArgX
bcs .9
phy
pha
>PUSHEA.G StatBuf
pla
ply
>SYSCALL STAT
bcs .99
>LDA.G StatBuf+S.STAT.P.TYPE
cmp #S.FI.T.DIR
bne .9
ldx #1
jsr CORE.GetArgX
>SYSCALL Remove
.99 rts
.9 jmp CORE.Exec.CSYN
*--------------------------------------
CMD.BREAK
.9 jmp CORE.Exec.SSYN
*--------------------------------------
CMD.CONTINUE
.9 jmp CORE.Exec.SSYN
*--------------------------------------
CMD.FOR
.9 jmp CORE.Exec.SSYN
*--------------------------------------
CMD.NEXT
.9 jmp CORE.Exec.SSYN
*--------------------------------------
CMD.WHILE
CMD.IF jsr CORE.StkGet
bcs .1 no context...
and #$80 get current..
lsr becomes parent
bra .2
.1 lda #$40 ...set Parent = true
.2 >STA.G CORE.Test
bit #$40 Parent is true ?
beq .3
jsr EXP.EVAL
bcs .9
.3 >LDA.G CORE.IntCmd
cmp #C.WHILE
bne .8
jsr CORE.StkPushPtr
bcs .9
.8 >LDA.G CORE.Test
>ORA.G CORE.IntCmd
jmp CORE.StkPush
clc
.9 rts
*--------------------------------------
CMD.ELSE jsr CORE.StkGet
bcs .9
bit #$40 parent is true ?
beq .8 no, skip
tax
and #$3F
cmp #C.IF
bne .9
txa
eor #$80 toggle and store at stack ptr
sta (pData),y
.8 clc
rts
.9 lda #E.NOIF
sec
rts
*--------------------------------------
CMD.FI jsr CORE.StkPull
bcs .9
and #$3F
cmp #C.IF
bne .9
clc
rts
.9 lda #E.BUF
.9 lda #E.NOIF
sec
rts
*--------------------------------------
CMD.LOOP jsr CORE.StkPull
bcs .9
tax
and #$3F
cmp #C.WHILE
bne .9
txa
bpl .1
jmp CORE.StkPullPtr
.1 jsr CORE.StkPull
bcs .99
jmp CORE.StkPull
.9 lda #E.NOWHILE
sec
.99 rts
*--------------------------------------
CMD.IsSwitch >STYA ZPPtr1
lda (ZPPtr1)
cmp #'-'
bne .9
ldy #1
lda (ZPPtr1),y
beq .9
iny
lda (ZPPtr1),y
bne .9
dey
lda (ZPPtr1),y
cmp #'a'
bcc .8
cmp #'z'+1
bcs .8
eor #$20
.8 clc
rts
.9 >LDYA ZPPtr1
sec
rts
*--------------------------------------

File diff suppressed because it is too large Load Diff

279
BIN/SHELL.S.EXP.txt Normal file
View File

@ -0,0 +1,279 @@
NEW
PREFIX
AUTO 4,1
.LIST OFF
*--------------------------------------
EXP.EVAL ldx #1
jsr CORE.GetArgX
beq .9
>PUSHYA
>LDYA L.EXP.BEGIN
jsr Lookup
bcs .9
cpx #4 [ or ![
bcs .9
dex
dex 1 or $ff
txa
and #$80 true or false
>ORA.G CORE.Test
sta (pData),y
ldx #2
jsr CORE.GetArgX
beq .9
>PUSHYA
>LDYA L.EXP.OP.UNARY -d -e -f ?
jsr Lookup
bcs .1
txa
>STA.G CORE.Operator
jsr EXP.EVAL.UNARY
bcs .9
>EOR.G CORE.Test
sta (pData),y
ldx #4 go check ]
bra .8
.9 lda #E.ESYN
sec
.99 rts
.1 ldx #3
jsr CORE.GetArgX
beq .9
>PUSHYA
>LDYA L.EXP.OP.BINARY -eq -ne .... ?
jsr Lookup
bcs .9
txa
>STA.G CORE.Operator
jsr EXP.EVAL.BINARY
bcs .9
>EOR.G CORE.Test
sta (pData),y
ldx #5 go check ]
.8 jsr CORE.GetArgX
beq .9
>STYA ZPPTR1
lda (ZPPTR1)
cmp #']'
bne .9
ldy #1
lda (ZPPTR1),y
bne .9
clc
rts
*--------------------------------------
EXP.EVAL.UNARY ldx #3
jsr CORE.GetArgX
bcs .9 we need one arg
>LDA.G CORE.Operator
tax
jmp (J.EXP.OP.UNARY,x)
.9 lda #E.ESYN
sec
rts
EXP.OP.UNARY.D jsr EXP.OP.UNARY.DEF.7
bcs EXP.OP.UNARY.DEF.9
>LDA.G StatBuf+S.STAT.P.TYPE
cmp #S.FI.T.DIR
bne EXP.OP.UNARY.DEF.9
bra EXP.OP.UNARY.DEF.8
EXP.OP.UNARY.E jsr EXP.OP.UNARY.DEF.7
bcs EXP.OP.UNARY.DEF.9
bra EXP.OP.UNARY.DEF.8 DIR or FILE exist
EXP.OP.UNARY.F jsr EXP.OP.UNARY.DEF.7
bcs EXP.OP.UNARY.DEF.9
>LDA.G StatBuf+S.STAT.P.TYPE
cmp #S.FI.T.DIR
beq EXP.OP.UNARY.DEF.9
bra EXP.OP.UNARY.DEF.8
EXP.OP.UNARY.DEF.7
>PUSHEA.G StatBuf
ldx #3
jsr CORE.GetArgX
>SYSCALL STAT
rts
EXP.OP.UNARY.DEF.8
lda #$80 true
clc
rts
EXP.OP.UNARY.DEF.9
lda #0 false
clc
rts
*--------------------------------------
EXP.EVAL.BINARY ldx #2
jsr CORE.GetArgX
bcs .9
ldx #4
jsr CORE.GetArgX
bcs .9
>LDA.G CORE.Operator
beq .1 =
cmp #2 !=
bne EXP.EVAL.BINARY.NUM
lda #$80
>STA.G CORE.Operator
.1 ldx #2
jsr CORE.GetArgX
>PUSHYA
ldx #4
jsr CORE.GetArgX
>SYSCALL strcmp
ror CS if !=
and #$80
eor #$80
>EOR.G CORE.Operator
clc
rts
.9 lda #E.ESYN
sec
rts
*--------------------------------------
EXP.EVAL.BINARY.NUM
ldx #2
jsr CORE.GetArgX
bcs .9
>SYSCALL AToL
bcs .9
>PULLL.G M32.ACC
ldx #4
jsr CORE.GetArgX
bcs .9
>SYSCALL AToL
bcs .9
>PULLL.G M32.ARG
jsr M32.Cmp
pha
>LDA.G CORE.Operator
lsr
tax
pla
and EXP.OP.BINARY.BITS,x
beq .80
lda #$80 true
clc
rts
.80 lda #0 false
clc
rts
.9 lda #E.ESYN
sec
rts
*--------------------------------------
EXP.GET >LDA.G CORE.ArgIndex
inc
tax
jsr CORE.GetArgX
bcc .1
>LDA.G CORE.ArgIndex no op, return text value
tax
jsr CORE.GetArgX
rts
.1 >LDA.G CORE.ArgIndex
tax
jsr CORE.GetArgX
>SYSCALL AToL
bcs .99
>PULLL.G M32.ACC
jsr EXP.GetNext
.2 >PUSHYA
>LDYA L.EXP.OP.MATH + - .... ?
jsr Lookup
bcs .9
txa
>STA.G CORE.Operator
jsr M32.ACC2ARG
jsr EXP.GetNext get next argument in ACC
.99 bcs .9
>SYSCALL AToL
bcs .9
>PULLL.G M32.ACC
jsr EXP.GET.OP
bcs .9
jsr EXP.GetNext another op ?
bcc .2
.8 >PUSHL.G M32.ACC
>PUSHBI 4
>PUSHW L.M32.Printf
>LEA.G M32.BUF
>SYSCALL sprintf
bcs .9
>LEA.G M32.Buf
rts
.9 lda #E.BADEXP
rts
EXP.GET.OP >LDA.G CORE.Operator
tax
jmp (J.EXP.OP.MATH,x)
*--------------------------------------
EXP.GetNext >INC.G CORE.ArgIndex
tax
jsr CORE.GetArgX
rts
*--------------------------------------
MAN
SAVE USR/SRC/BIN/SHELL.S.EXP
LOAD USR/SRC/BIN/SHELL.S
ASM

View File

@ -111,9 +111,9 @@ IO.PrintBatchErrMsg
bne .2 Scan until EoL
ldx ZPPtr1
cpx ZPInputBufPtr
cpx ZPFileBufPtr
lda ZPPtr1+1
sbc ZPInputBufPtr+1
sbc ZPFileBufPtr+1
bcc .1 not this line....
.4 ldy #0
@ -137,7 +137,7 @@ IO.PrintBatchErrMsg
lda (pPS),y
>SYSCALL fprintf
lda ZPInputBufPtr
lda ZPFileBufPtr
sec
sbc ZPPtr2
beq .8

View File

@ -63,10 +63,9 @@ ZPPtr2 .BS 2
ZPPtr3 .BS 2
ZPCLBuf .BS 2
ZPCLBufPtr .BS 2
ZPInputBufPtr .BS 2
ZPInputBufPtrBak .BS 2
ZPFileBufPtr .BS 2
ZPFileBufPtrBak .BS 2
ZPArgVBuf .BS 2
ZPArgVBufPtr .BS 2
ZS.END .ED
*--------------------------------------
* File Header (16 Bytes)
@ -110,51 +109,51 @@ J.ESC .DA CL.BS left arrow
.DA HIS.GetNext
.DA HIS.GetPrev
.DA CL.NAK right arow
L.CL.IO .DA CL.IO
J.CL.IO .DA CL.IO.AMP
.DA CL.IO.IN
.DA CL.IO.OUTA
.DA CL.IO.OUT
.DA CL.IO.1OUTA
.DA CL.IO.1OUT
.DA CL.IO.2OUTA
.DA CL.IO.2OUT
L.CORE.IO .DA CORE.IO
J.CORE.IO .DA CORE.IO.AMP
.DA CORE.IO.IN
.DA CORE.IO.OUTA
.DA CORE.IO.OUT
.DA CORE.IO.1OUTA
.DA CORE.IO.1OUT
.DA CORE.IO.2OUTA
.DA CORE.IO.2OUT
L.CORE.INT .DA CORE.INT
J.CORE.INT .DA CORE.INT.STARTPROC
.DA CORE.INT.CD
.DA CORE.INT.DATE
.DA CORE.INT.ECHO
.DA CORE.INT.EXIT
.DA CORE.INT.GETKEY
.DA CORE.INT.MD
.DA CORE.INT.PAUSE
.DA CORE.INT.PWD
.DA CORE.INT.RD
.DA CORE.INT.READ
.DA CORE.INT.REN
.DA CORE.INT.SET
.DA CORE.INT.SLEEP
.DA CORE.INT.SHIFT
.DA CORE.INT.TIME
.DA CORE.INT.PUSHD
.DA CORE.INT.POPD
.DA CORE.INT.BREAK
.DA CORE.INT.CONTINUE
.DA CORE.INT.FOR
.DA CORE.INT.NEXT
.DA CORE.INT.WHILE
.DA CORE.INT.LOOP
.DA CORE.INT.IF
.DA CORE.INT.ELSE
.DA CORE.INT.FI
L.CORE.Eval.TOKEN1 .DA CORE.Eval.TOKEN1
L.CORE.Eval.TOKEN2 .DA CORE.Eval.TOKEN2
J.CORE.Eval.TOKEN2 .DA CORE.Eval.D
.DA CORE.Eval.E
.DA CORE.Eval.F
L.CORE.Eval.TOKEN3 .DA CORE.Eval.TOKEN3
L.CORE.Eval.TOKEN4 .DA CORE.Eval.TOKEN4
J.CORE.Eval.TOKEN4 .DA M32.Add
J.CMD .DA CMD.STARTPROC
.DA CMD.CD
.DA CMD.DATE
.DA CMD.ECHO
.DA CMD.EXIT
.DA CMD.GETKEY
.DA CMD.MD
.DA CMD.PAUSE
.DA CMD.PWD
.DA CMD.RD
.DA CMD.READ
.DA CMD.REN
.DA CMD.SET
.DA CMD.SLEEP
.DA CMD.SHIFT
.DA CMD.TIME
.DA CMD.PUSHD
.DA CMD.POPD
.DA CMD.BREAK
.DA CMD.CONTINUE
.DA CMD.FOR
.DA CMD.NEXT
.DA CMD.WHILE
.DA CMD.LOOP
.DA CMD.IF
.DA CMD.ELSE
.DA CMD.FI
L.EXP.BEGIN .DA EXP.BEGIN
L.EXP.OP.UNARY .DA EXP.OP.UNARY
J.EXP.OP.UNARY .DA EXP.OP.UNARY.D
.DA EXP.OP.UNARY.E
.DA EXP.OP.UNARY.F
L.EXP.OP.BINARY .DA EXP.OP.BINARY
L.EXP.OP.MATH .DA EXP.OP.MATH
J.EXP.OP.MATH .DA M32.Add
.DA M32.Sub
.DA M32.Mul
.DA M32.Div
@ -168,9 +167,9 @@ L.ERR.Messages .DA ERR.Messages
CS.INIT clc
CS.INIT.RTS rts
*--------------------------------------
CS.RUN jsr CMD.Init
bcs CS.INIT.RTS
CS.RUN jsr CL.Init
jsr CORE.Init
ldy #S.PS.ARGC
lda (pPS),y
beq .1 no arg, continue starting interactive
@ -186,15 +185,14 @@ CS.RUN jsr CMD.Init
txa
>STA.G hFileBuf
>SYSCALL GetMemPtr
>STYA ZPInputBufPtr
>STYA ZPFileBufPtr
lda #0
jsr CORE.INT.SHIFTA Remove $0=/bin/shell
jsr CMD.SHIFTA Remove $0=/bin/shell
bra CS.RUN.LOOP
*--------------------------------------
.1 jsr CORE.INT.CD.HOME
jsr CL.Init
.1 jsr CMD.CD.HOME
jsr HIS.Init
bcs CS.INIT.RTS
@ -302,10 +300,9 @@ CS.RUN.INTERACTIVE
jsr HIS.Add
>LDYA ZPCLBuf
>STYA ZPInputBufPtr
jmp CS.RUN.Exec
.8 jmp CS.RUN.LOOP
jsr CORE.Exec
.8 jmp CS.RUN.LOOP.END
*--------------------------------------
CS.RUN.READ
.1 >SLEEP
@ -361,7 +358,7 @@ CS.RUN.BATCH >SYSCALL GetChar
clc
jmp CS.RUN.LOOP.END
.2 jsr CMD.Get
.2 jsr CORE.GetCmdFromFile
bcc .7
cmp #C.EOF
@ -383,7 +380,7 @@ CS.RUN.BATCH >SYSCALL GetChar
beq CS.RUN.LOOP.80
>LDA.G bSET.X
beq CS.RUN.Exec
beq .8
>PUSHW ZPCLBuf
>PUSHBI 2
@ -391,9 +388,9 @@ CS.RUN.BATCH >SYSCALL GetChar
>SYSCALL printf
bcs .9
*--------------------------------------
CS.RUN.Exec jsr CORE.Exec
*--------------------------------------
.8 jsr CORE.Exec
CS.RUN.LOOP.END ldy #S.PS.RC
sta (pPs),y
@ -450,7 +447,7 @@ CS.QUIT >LDA.G hFileBuf
.1 jsr HIS.Quit
jsr CL.Quit
jsr CORE.Quit
clc
rts
*--------------------------------------
@ -505,8 +502,9 @@ Lookup >STYA ZPPtr2
.INB USR/SRC/BIN/SHELL.S.CL
.INB USR/SRC/BIN/SHELL.S.HIS
.INB USR/SRC/BIN/SHELL.S.CORE
.INB USR/SRC/BIN/SHELL.S.CMD
.INB USR/SRC/BIN/SHELL.S.IO
.INB USR/SRC/BIN/SHELL.S.CMD
.INB USR/SRC/BIN/SHELL.S.EXP
*--------------------------------------
CS.END
*--------------------------------------
@ -531,7 +529,7 @@ HOME.PROFILE .AZ "${HOME}PROFILE"
*--------------------------------------
* https://www.tldp.org/LDP/abs/html/io-redirection.html
*--------------------------------------
CL.IO .AZ "&"
CORE.IO .AZ "&"
.AZ "<"
.AZ ">>"
.AZ ">"
@ -570,17 +568,14 @@ CORE.INT .AZ "STARTPROC"
.AZ "FI"
.HS 00
*--------------------------------------
CORE.Eval.TOKEN1
.AZ "!["
EXP.BEGIN .AZ "!["
.AZ "["
.HS 00
CORE.Eval.TOKEN2
.AZ "-d"
EXP.OP.UNARY .AZ "-d"
.AZ "-e"
.AZ "-f"
.HS 00
CORE.Eval.TOKEN3
.AZ "="
EXP.OP.BINARY .AZ "="
.AZ "!="
.AZ "-eq"
.AZ "-ne"
@ -589,7 +584,7 @@ CORE.Eval.TOKEN3
.AZ "-gt"
.AZ "-ge"
.HS 00
CORE.Eval.TOKEN3.BITS
EXP.OP.BINARY.BITS
.DA #%000
.DA #%000
.DA #%010
@ -598,8 +593,7 @@ CORE.Eval.TOKEN3.BITS
.DA #%110
.DA #%001
.DA #%011
CORE.Eval.TOKEN4
.AZ "+"
EXP.OP.MATH .AZ "+"
.AZ "-"
.AZ "*"
.AZ "div"

View File

@ -181,11 +181,11 @@ Kernel.Init3C >LDYAI MSG.Init3
>LDYAI MSG.Prefix
>SYSCALL printf
* lda KBD
* bpl .7
* sta KBDSTROBE
* cmp #146 CTRL-R for ROOT mode
* bne .7
lda KBD
bpl .7
sta KBDSTROBE
cmp #146 CTRL-R for ROOT mode
bne .7
>PUSHBI 0
>LDYAI MSG.CTRLR