Kernel 0.93+

This commit is contained in:
Rémy GIBERT 2019-08-15 14:48:58 +02:00
parent d380289666
commit fe13be19e4
9 changed files with 379 additions and 354 deletions

View File

@ -134,7 +134,7 @@ Notice that the DO X and DO Y logic is swapped between the two cases.
| PUSHD | Working | Save actual working directory <br> PUSHD \<dir\> do also a CD to \<dir\> |
| PWD | Working | Print Working Directory |
| RD | Working | Delete an empty directory |
| READ | Working | -S : no echo (password) <br> -P : "prompt message" |
| READ | Working | -S : no echo (password) <br> -P : "prompt message" <br> -N maxchar |
| REN | Working | Rename a file, directory or volume |
| 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 |
| SHIFT | Working | Remove $1 from cmd line |

Binary file not shown.

View File

@ -104,9 +104,10 @@ CL.CHARIN.CTRL cpx #C.CR
rts
*--------------------------------------
CL.Insert >LDA.G CL.Len
>CMP.G READ.N
beq .8 Buffer full, discard...
inc
beq .9 Buffer full, discard...
sta (pData),y
>STA.G CL.Len
pha
@ -128,21 +129,23 @@ CL.Insert >LDA.G CL.Len
txa
sta (ZPCLBuf),y
>LDA.G bREAD.S
bpl .2
>INC.G CL.Ptr
clc
rts
.2 txa
>LDA.G bREAD.S
bmi .7
txa
>SYSCALL PutChar
jsr CL.PrintEOL
>INC.G CL.Ptr
.7 >LDA.G READ.N READ N = 1, don't wait for CR
dec
bne .8
jmp CL.PrintEOL
lda #$ff
>STA.G CL.bReady
.9 clc
.8 clc
rts
*--------------------------------------
CL.CLR lda (ZPCLBuf)

View File

@ -7,12 +7,16 @@ CMD.. lda (ZPArgVBufPtr)
>LDYA ZPArgVBufPtr
jsr IO.Load
bcs .99
>LDYA ZPArgVBufPtr
jmp CORE.Load.YAX exec cmd file and continue
bcs CMD.SHIFTA.RTS
.9 jmp CMD.Exec.CSYN
.99 rts
>LDYA ZPArgVBufPtr
jsr CORE.Load.YAX Exec . file
bcs CMD.SHIFTA.RTS
lda #$C0+C..
jmp CORE.StkPush
.9 jmp CMD.E.CSYN
*--------------------------------------
CMD.NOHUP lda #S.PS.F.NOHUP
tsb CORE.PSFlags
@ -33,7 +37,7 @@ CMD.SHIFTA >SYSCALL ArgV
sta (pPS),y
.8 clc
rts
CMD.SHIFTA.RTS rts
*--------------------------------------
CMD.PUSHD >LDA.G PUSHD.STACK
cmp #PUSHD.STACK+PUSHD.STACK.MAX
@ -69,7 +73,7 @@ CMD.POPD >LDA.G PUSHD.STACK
CMD.POPD.RTS
rts
CMD.POPD.CSYN jmp CMD.Exec.CSYN
CMD.POPD.CSYN jmp CMD.E.CSYN
*--------------------------------------
CMD.PWD ldy #S.PS.hCWD
lda (pPs),y
@ -285,7 +289,7 @@ CMD.SET.1
.8 clc
.9 rts
.99 jmp CMD.Exec.CSYN
.99 jmp CMD.E.CSYN
CMD.SET.UNSET >LDYA ZPVarNamePtr
>SYSCALL UnsetEnv
@ -319,16 +323,16 @@ CMD.SET.EXEC jsr CORE.ArgV.NextChar skip "`"
jsr IO.Pipe.In
bcs .9
lda #$ff
>STA.G bREAD.S secret
>STA.G bReadMode
lda #255
>STA.G READ.N
>STA.G bREAD.S
jmp CMD.READ.VAR
>SLEEP
clc
.9 rts
*--------------------------------------
CMD.DATE sec
.HS 90 bcc
.HS 90 BCC
CMD.TIME clc
php
>LEA.G TimeBuf
@ -444,10 +448,16 @@ CMD.GETKEY lda (ZPArgVBufPtr)
>LDYA ZPArgVBufPtr
>SYSCALL SetEnv
.9 rts
.9
CMD.GETKEY.RTS rts
*--------------------------------------
CMD.READ lda (ZPArgVBufPtr)
beq .9
beq .9
stz ZPVarNamePtr+1
>STZ.G bREAD.S
dec
>STA.G READ.N
.1 jsr CMD.IsSwitch
bcs .4
@ -457,10 +467,10 @@ CMD.READ lda (ZPArgVBufPtr)
lda #$ff
>STA.G bREAD.S
bra .7
bra .5
.2 cmp #'P'
bne .9
.2 cmp #'P'
bne .3
jsr CORE.ArgV.Next
beq .9
@ -468,39 +478,73 @@ CMD.READ lda (ZPArgVBufPtr)
>PUSHBI 0
>LDYA ZPArgVBufPtr
>SYSCALL printf
bcs .99
bra .7
bcs CMD.GETKEY.RTS
bra .5
.9 jmp CMD.E.CSYN
.3 cmp #'N'
bne .9
jsr CORE.ArgV.Next
beq .9
>LDYA ZPArgVBufPtr
>SYSCALL AToL
bcs CMD.GETKEY.RTS
>PULLA
>STA.G READ.N
inc pStack
inc pStack
inc pStack
bra .5
.4 >LDYA ZPArgVBufPtr
>STYA ZPVarNamePtr
>LDA.G bReadMode
bne .9
lda #$ff
>STA.G bReadMode
.7 jsr CORE.ArgV.Next
.5 jsr CORE.ArgV.Next
bne .1
>LDA.G bReadMode
lda ZPVarNamePtr+1
beq .9
clc
.99 rts
.9 jmp CMD.Exec.CSYN
CMD.READ.VAR jsr CL.Reset
.1 >SYSCALL GetChar
bcs .9
jsr CL.CHARIN
>LDA.G CL.bReady
bpl .1
lda (ZPCLBuf)
bne .2
>LDYA ZPVarNamePtr
>SYSCALL UnSetEnv
rts
.2 >PUSHW ZPCLBuf
>LDYA ZPVarNamePtr
>SYSCALL SetEnv
.9 rts
*--------------------------------------
CMD.SLEEP lda (ZPArgVBufPtr)
beq .9
beq CMD.REN.CSYN
>LDYA ZPArgVBufPtr
>SYSCALL AToL
bcs .9
bcs CMD.REN.CSYN
>PULLL.G Sleep
clc
rts
.9 jmp CMD.Exec.CSYN
*--------------------------------------
CMD.PAUSE lda #$FF
>STA.G bPause
@ -508,13 +552,11 @@ CMD.PAUSE lda #$FF
rts
*--------------------------------------
CMD.MD lda (ZPArgVBufPtr)
beq .9
beq CMD.REN.CSYN
>LDYA ZPArgVBufPtr
>SYSCALL MKDir
rts
.9 jmp CMD.Exec.CSYN
*--------------------------------------
CMD.REN lda (ZPArgVBufPtr)
beq .9
@ -529,10 +571,11 @@ CMD.REN lda (ZPArgVBufPtr)
rts
.90 >PULLYA
.9 jmp CMD.Exec.CSYN
.9
CMD.REN.CSYN jmp CMD.E.CSYN
*--------------------------------------
CMD.RD lda (ZPArgVBufPtr)
beq .9
beq CMD.REN.CSYN
>PUSHEA.G StatBuf
>LDYA ZPArgVBufPtr
@ -541,13 +584,11 @@ CMD.RD lda (ZPArgVBufPtr)
>LDA.G StatBuf+S.STAT.P.TYPE
cmp #S.FI.T.DIR
bne .9
bne CMD.REN.CSYN
>LDYA ZPArgVBufPtr
>SYSCALL Remove
.99 rts
.9 jmp CMD.Exec.CSYN
*--------------------------------------
CMD.FUNCTION lda (ZPArgVBufPtr)
beq .9
@ -580,7 +621,7 @@ CMD.FUNCTION lda (ZPArgVBufPtr)
lda (ZPArgVBufPtr),y
beq .11
.9 jmp CMD.Exec.CSYN
.9 jmp CMD.E.CSYN
.99 rts
*--------------------------------------
@ -659,7 +700,11 @@ CMD.CALL >LDA.G hFuncList
bcs CMD.CALL.RTS
>LDYA ZPArgVBufPtr FUNC PARAM1 PARAM2...
jmp CORE.Load.YAX
jsr CORE.Load.YAX Exec FUNC
bcs CMD.CALL.RTS
lda #$C0+C.CALL
jmp CORE.StkPush
*--------------------------------------
CMD.EXIT lda (ZPArgVBufPtr)
beq .1 no arg, exit 0
@ -678,12 +723,18 @@ CMD.EXIT lda (ZPArgVBufPtr)
inc pStack
.1 sta M32.ACC
.2 jsr CORE.StkPull
.2 jsr CORE.StkPull Pull everything until CALL . CL...
bcs .9
cmp #$C0 in CALL / . context ?
beq CMD.EXIT.CALL
cmp #$C0+C.. in CALL . CL context ?
beq CMD.EXIT.FILE
cmp #$C0+C.CALL
beq CMD.EXIT.FILE
cmp #$C0+C.CLEXEC
beq CMD.EXIT.SH
jsr CMD.EXIT.POP
bcc .2
@ -694,7 +745,14 @@ CMD.EXIT lda (ZPArgVBufPtr)
* sec
rts
*--------------------------------------
CMD.EXIT.CALL jsr CORE.StkPull
CMD.EXIT.SH jsr CMD.EXIT.FILE
lda #$ff
>STA.G bExitOnEOF
clc
rts
*--------------------------------------
CMD.EXIT.FILE jsr CORE.StkPull
>SYSCALL freemem Code buffer
ldy #S.PS.hARGV
@ -776,11 +834,12 @@ CMD.BREAK jsr CORE.StkGetCtx Get context in CORE.TestResult
jsr CORE.StkPull remove C.CASE
jsr CORE.StkGet
and #$7F
sta (pDATA),y
.8 clc
rts
.9 jmp CMD.Exec.CSYN
.9 jmp CMD.E.CSYN
*--------------------------------------
* stack-1 hVALUE
* stack SWITCH TOKEN
@ -793,6 +852,7 @@ CMD.SWITCH jsr CORE.StkGetCtx
jsr EXP.GET
bcs .9
>SYSCALL strdup
bcs .9
@ -850,17 +910,20 @@ CMD.CASE jsr CORE.StkGetCtx Get context in CORE.TestResult
ora #C.CASE
jmp CORE.StkPush
.9 jmp CMD.Exec.CSYN
.9
CMD.E.CSYN lda #E.CSYN
sec
rts
*--------------------------------------
CMD.DEFAULT jsr CORE.StkGetCtx Get context in CORE.TestResult
bcs .9
bcs CMD.E.CSYN
and #$3F
cmp #C.SWITCH
beq .1
cmp #C.CASE
bne .9
bne CMD.E.CSYN
jsr CORE.StkPull remove C.CASE
@ -868,11 +931,9 @@ CMD.DEFAULT jsr CORE.StkGetCtx Get context in CORE.TestResult
and #$C0
ora #C.DEFAULT
jmp CORE.StkPush
.9 jmp CMD.Exec.CSYN
*--------------------------------------
CMD.END jsr CORE.StkGetCtx Get context in CORE.TestResult
bcs CMD.END.CSYN
bcs CMD.E.CSYN
and #$3F
cmp #C.SWITCH
@ -882,7 +943,7 @@ CMD.END jsr CORE.StkGetCtx Get context in CORE.TestResult
beq .2
cmp #C.DEFAULT
bne CMD.END.CSYN
bne CMD.E.CSYN
.2 jsr CORE.StkPull remove C.CASE or C.DEFAULT
@ -890,27 +951,25 @@ CMD.END jsr CORE.StkGetCtx Get context in CORE.TestResult
jsr CORE.StkPull get hVALUE
>SYSCALL freemem
rts
CMD.END.CSYN jmp CMD.Exec.CSYN
*--------------------------------------
CMD.FOR jsr CORE.StkGetCtx
lda (ZPArgVBufPtr)
beq CMD.END.CSYN
beq CMD.E.CSYN
>LDYA ZPArgVBufPtr
>STYA ZPVarNamePtr
jsr CORE.ArgV.Next
beq CMD.END.CSYN
beq CMD.E.CSYN
>PUSHW ZPArgVBufPtr
>LDYA L.IN
>SYSCALL StrCaseCmp
bcs CMD.END.CSYN
bcs CMD.E.CSYN
jsr CORE.ArgV.Next
beq CMD.END.CSYN
beq CMD.E.CSYN
lda #8 Make sure 8 bytes free on stack
jsr CORE.StkCheck

View File

@ -21,20 +21,18 @@ CORE.FUNCRESET >LDA.G hFuncList
>SYSCALL SListFree
>STZ.G hFuncList
.8
CORE.FUNCRESET.RTS
rts
.8 rts
*--------------------------------------
CORE.Load.YAX stx M32.ACC X=Code to Execute
CORE.Load.YAX stx M32.ACC X = Code to Execute
jsr CORE.ArgV.Dup Y,A = ArgV
bcs CORE.FUNCRESET.RTS
sta M32.ACC+2 A=ARGC
stx M32.ACC+1 X=ARGV
bcs .9
sta M32.ACC+2 A = ARGC
stx M32.ACC+1 X = hARGV
lda #8
jsr CORE.StkCheck
bcs CORE.FUNCRESET.RTS
bcs .9
>LDYA ZPInputBuf
jsr CORE.StkPushYA
@ -48,7 +46,7 @@ CORE.Load.YAX stx M32.ACC X=Code to Execute
ldy #S.PS.hARGV
lda (pPS),y
jsr CORE.StkPush old ARGV
jsr CORE.StkPush old hARGV
ldy #S.PS.ARGC
lda M32.ACC+2 new ARGC
@ -56,18 +54,18 @@ CORE.Load.YAX stx M32.ACC X=Code to Execute
iny #S.PS.hARGV
lda M32.ACC+1
sta (pPS),y new ARGV
sta (pPS),y new hARGV
lda M32.ACC new code
jsr CORE.StkPush
lda M32.ACC
* lda M32.ACC
>SYSCALL GetMemPtr
>STYA ZPInputBuf
>STYA ZPInputBufPtr
lda #$C0
jmp CORE.StkPush
* clc
.9 rts
*--------------------------------------
* http://heirloom.sourceforge.net/sh/sh.1.html
*--------------------------------------
@ -94,13 +92,16 @@ CORE.Load.YAX stx M32.ACC X=Code to Execute
* set hStdOut = Std
*--------------------------------------
CORE.Run.EOF jsr CORE.StkPull
bcs .9
bcs *
cmp #$C0 in CALL / . context ?
cmp #$C0+C.. check CALL . CL context
beq .1
cmp #$C0+C.CALL
beq .1
cmp #$C0+C.CLEXEC
bne .9
jsr CMD.EXIT.CALL
bcs .9
.1 jsr CMD.EXIT.FILE
jsr IO.Reset
@ -108,7 +109,7 @@ CORE.Run.EOF jsr CORE.StkPull
sec
rts Ending 0, CS,A=0
.9 lda #E.UNEXP
.9 lda #E.UNEXPEOF
sec
rts
*--------------------------------------
@ -305,12 +306,14 @@ CORE.SkipLine jsr CORE.GetNextCharNB
* search ZPInputBufPtr/ZPArgVBufPtr in Y,A table
*--------------------------------------
CORE.LookupInputBuf
>STYA ZPPtr1
>LDYA ZPInputBufPtr
bra CORE.Lookup
CORE.LookupArgVBuf
>STYA ZPPtr1
sec
.HS 90 BCC
CORE.LookupArgVBuf
clc
>STYA ZPPtr1 Keywords table
>LDYA ZPArgVBufPtr
bcc CORE.Lookup
>LDYA ZPInputBufPtr
CORE.Lookup >STYA ZPPtr2
@ -318,47 +321,59 @@ CORE.Lookup >STYA ZPPtr2
.1 ldy #$ff
.2 iny
lda (ZPPtr2),y
beq .3 Src Keyword end
jsr CORE.IsSpaceOrEndCmd
bcc .3 Src Keyword end
.2 jsr .7 get next valid char in src text
bcs .3
lda (ZPPtr1),y
beq .4 Table Keyword end
lda (ZPPtr2),y
.20 jsr ToUpperCase
eor (ZPPtr1),y match table char ?
asl compare only 7 bits
bne .4 no match...get next table keyword
jsr ToUpperCase
cmp (ZPPtr1),y
beq .2
bcc .2 not last char in this keyword
jsr .7 next char in text...
bcc .4 valid....failed
.8 tya Keyword Len
bra .4
.3 lda (ZPPtr1),y
bne .4
tya Keyword Len
dey
clc
.8 rts
.4 jsr IncPtr1
rts
lda (ZPPtr1)
bne .4
.3 dey
lda (ZPPtr1),y was last char in this keyword ?
bmi .8
iny
.41 jsr IncPtr1 skip chars to next keyword
.4 lda (ZPPtr1)
bpl .41
jsr IncPtr1
.6 inx
lda (ZPPtr1) Array Ending 0, must be an external Cmd....
lda (ZPPtr1) Array Ending 0, lookup failed
bne .1
lda #E.SYN
sec
rts
.7 iny
lda (ZPPtr2),y Get Src text char...
beq .9 end of text
jsr CORE.IsSpaceOrEndCmd
bcc .9 end of valid chars
clc
rts
.9 sec
rts
*--------------------------------------
* ArgV
*--------------------------------------
@ -388,7 +403,7 @@ CORE.ArgV.Dup >STYA ZPPtr1
>STYA ZPPtr2
lda #$ff Arg count-1 (skip $0)
lda #$ff Arg count-1 (skip $0)
pha
.5 pla
@ -666,16 +681,22 @@ CORE.StkGetCtx jsr CORE.StkGet
tax
bcs .1 no context...
cmp #$C0 in a call...
cmp #$C0+C.. in a call...
beq .1 CS
cmp #$C0+C.CALL
beq .1 CS
cmp #$C0+C.CLEXEC
beq .1 CS
and #$80 get current..
lsr becomes parent
bra .2
bra .8
.1 lda #$40 ...set Parent = true
.2 sta CORE.TestResult
.8 sta CORE.TestResult
txa
rts

View File

@ -28,11 +28,11 @@ EXP.GET jsr CORE.ArgV.Next
jsr EXP.FPU.EXEC
jsr CORE.ArgV.Next another op ?
jsr CORE.ArgV.Next another op ?
bne .2
.8 >PUSHBI 4 ACC on stack
>PUSHW L.M32.Printf
>PUSHW L.FMT.Long
>LEA.G M32.BUF
>SYSCALL sprintf
bcs .9

View File

@ -199,7 +199,7 @@ IO.PrintBatchErrMsg
>PUSHBI 2
>PUSHW L.MSG.BATCHLINE
jsr .80
jsr IO.PrintErr
ldy #$ff
ldx #'-'
@ -217,11 +217,7 @@ IO.PrintBatchErrMsg
>PUSHBI 4
>PUSHW L.MSG.BATCHERR
.80 ldy #S.PS.hStdErr
lda (pPS),y
>SYSCALL fprintf
.9 rts
.80 bra IO.PrintErr
*--------------------------------------
IO.PrintErrMsg pha Save EC for PrintF
@ -255,7 +251,8 @@ IO.PrintErrMsg pha Save EC for PrintF
>PUSHA
>PUSHBI 3
>PUSHW L.MSG.ERROR
ldy #S.PS.hStdErr
IO.PrintErr ldy #S.PS.hStdErr
lda (pPS),y
>SYSCALL fprintf
rts

View File

@ -1,5 +1,5 @@
NEW
AUTO 4,1
AUTO 3,1
.LIST OFF
.OP 65C02
.OR $2000
@ -48,6 +48,8 @@ C.ELSE .EQ 31
C.FI .EQ 32
C.END .EQ 33
*--------------------------------------
C.CLEXEC .EQ 63
*--------------------------------------
E.CSYN .EQ $C0
E.ESYN .EQ $C1
E.STACKERROR .EQ $C2
@ -57,7 +59,7 @@ E.NOFOR .EQ $C5
E.NOIF .EQ $C6
E.BADFTYPE .EQ $C7
E.FUNDEF .EQ $C8
E.UNEXP .EQ $C9
E.UNEXPEOF .EQ $C9
*--------------------------------------
.INB INC/MACROS.I
.INB INC/A2OSX.I
@ -125,6 +127,7 @@ L.MSG.PID .DA MSG.PID
L.FMT.DATE .DA FMT.DATE
L.FMT.TIME .DA FMT.TIME
L.FMT.GETKEY .DA FMT.GETKEY
L.FMT.Long .DA FMT.Long
J.ESC .DA CL.BS left arrow
.DA HIS.GetNext
.DA HIS.GetPrev
@ -187,10 +190,9 @@ J.EXP.OP.UNARY .DA EXP.OP.UNARY.D
L.EXP.OP.BINARY .DA EXP.OP.BINARY
L.EXP.OP.MATH .DA EXP.OP.MATH
L.EXP.OP.LOGIC .DA EXP.OP.LOGIC
L.HOME .DA HOME
L.HOME.PROFILE .DA HOME.PROFILE
L.HOME .DA HOME
L.PS1 .DA PS1
L.M32.Printf .DA M32.Printf
L.ERR.Codes .DA ERR.Codes
L.ERR.Messages .DA ERR.Messages
.DA 0
@ -222,7 +224,12 @@ CS.RUN jsr CL.Init
lda (pPS),y
>SYSCALL GetMemPtr
plx
jsr CORE.Load.YAX
jsr CORE.Load.YAX Exec Batch file
bcs CS.INIT.RTS
lda #$C0+C..
jsr CORE.StkPush
bra CS.RUN.LOOP
*--------------------------------------
.1 jsr CMD.CD.HOME
@ -235,26 +242,22 @@ CS.RUN jsr CL.Init
>SYSCALL printf
bcs CS.INIT.RTS
>PUSHEA.G StatBuf
>LDYA L.HOME.PROFILE
>SYSCALL STAT
bcs CS.RUN.LOOP no profile...
>LDYA L.HOME.PROFILE
jsr IO.Load
bcs CS.RUN.LOOP
bcs CS.RUN.LOOP No profile...
>LDYA L.HOME.PROFILE
jsr CORE.Load.YAX exec profile and continue
jsr CORE.Load.YAX Exec profile and continue
* bcs CS.RUN.LOOP
bcs CS.RUN.LOOP
lda #$C0+C..
jsr CORE.StkPush
*--------------------------------------
CS.RUN.LOOP >SLEEP
.1 jsr CheckSleep
beq .3
>LDA.G bSET.C
bne CS.RUN.LOOP
beq .2
ldy #S.PS.hStdIn
lda (pPS),y
@ -268,67 +271,69 @@ CS.RUN.LOOP >SLEEP
bcs .9 I/O err
cmp #3 Ctrl-C
bne CS.RUN.LOOP
bne .11
lda (pData) batch mode ?
beq CS.RUN.LOOP
>LDA.G bSET.C
beq .8
bra CS.RUN.LOOP
.11 cmp #19 test Ctrl-s
bne CS.RUN.LOOP
.3 >LDA.G bPause
bpl .6
.4 >SYSCALL GetChar
bcs .9 I/O err
.5 cmp #3 Ctrl-C
bne .60
lda (pData) batch mode ?
beq .61
>LDA.G bSET.C
beq .8
bra .61
.60 tax
>LDA.G bPause
asl
bpl .61 not from PAUSE command
cpx #C.CR
bne .4
.61 >STZ.G bPause
bra .62
.6 >LDA.G bReadMode read mode ?
bne .7
.62 lda (pData) batch mode ?
beq CS.RUN.INTERACTIVE
jmp CS.RUN.BATCH
.7 jmp CS.RUN.READ
lda #$80
>STA.G bPause
bra CS.RUN.LOOP
*--------------------------------------
.8 lda #3 User Interrupt
sec
.9 rts
*--------------------------------------
CS.RUN.INTERACTIVE
>LDA.G bExitOnEOF
beq .10
jmp CS.RUN.LOOP.EXIT
.2 >LDA.G bPause
bpl .6
.10 jsr IO.Reset
.3 >SYSCALL GetChar
bcs .9 I/O err
cmp #3 Ctrl-C
bne .4
lda (pData) batch mode ?
beq .5
>LDA.G bSET.C
beq .8
bra .5
.4 tax
>LDA.G bPause
asl $ff ?
bpl .5 not from PAUSE command
cpx #C.CR
bne .3
.5 >STZ.G bPause
*--------------------------------------
.6 lda (pData) batch mode ?
bne CS.RUN.BATCH
*--------------------------------------
CS.RUN.INTERACTIVE
jsr IO.Reset
jsr CL.Reset
jsr CL.PrintPrompt
bcs .9
>STZ.G bREAD.S
dec
>STA.G READ.N
.1 >SYSCALL GetChar
bcs .9 I/O error
@ -361,7 +366,11 @@ CS.RUN.INTERACTIVE
>SYSCALL GetMemPtr Y,A =ARGV
plx
jsr CORE.Load.YAX X = Copy of CL
jsr CORE.Load.YAX Exec CL
bcs .9
lda #$C0+C.CLEXEC
jsr CORE.StkPush
.6 jsr CORE.Run
@ -369,68 +378,7 @@ CS.RUN.INTERACTIVE
.9 rts
*--------------------------------------
CS.RUN.READ jsr CL.RESET
.1 >SYSCALL GetChar
bcs CS.RUN.READ.9
jsr CL.CHARIN
>LDA.G CL.bReady
bpl .1
lda (ZPCLBuf)
bne .2
>LDYA ZPVarNamePtr
>SYSCALL UnSetEnv
bra .7
.2 >PUSHW ZPCLBuf
>LDYA ZPVarNamePtr
>SYSCALL SetEnv
.7 php
pha
>STZ.G bReadMode
>STA.G bREAD.S
pla
plp
.8 jmp CS.RUN.LOOP.END
CS.RUN.READ.9 rts
*--------------------------------------
CS.RUN.BATCH >LDA.G bSET.C
bne .2
ldy #S.PS.hStdIn
lda (pPS),y
>SYSCALL feof
bcs .2 unsupported
tay
bne .2
>SYSCALL GetChar
bcs CS.RUN.READ.9
cmp #3 test Ctrl-c
bne .1
bra CS.RUN.LOOP.END CS
.1 cmp #19 test Ctrl-s
bne .2
lda #$80
>STA.G bPause
clc
jmp CS.RUN.LOOP.END
.2 >LDA.G bSET.X
CS.RUN.BATCH >LDA.G bSET.X
beq .5
ldy #$ff
@ -452,27 +400,25 @@ CS.RUN.BATCH >LDA.G bSET.C
bcs CS.RUN.LOOP.RTS
.5 jsr CORE.Run
bcc CS.RUN.LOOP.END
tay 0 = EOF
bne CS.RUN.LOOP.END
lda #0
sec
CS.RUN.LOOP.END ldy #S.PS.RC
sta (pPs),y
bcc CS.RUN.LOOP.80
tay
beq CS.RUN.LOOP.80
beq CS.RUN.LOOP.80 0 = EOF
>LDA.G bSET.E
bmi CS.RUN.LOOP.80
jsr CORE.StkGet
cmp #$C0+C.CLEXEC
beq .1
jsr IO.PrintBatchErrMsg
bcs CS.RUN.LOOP.RTS
ldy #S.PS.RC
.1 ldy #S.PS.RC
lda (pPs),y
jsr IO.PrintErrMsg
@ -518,6 +464,7 @@ CS.DOEVENT lda (pEvent)
CS.QUIT jsr HIS.Quit
jsr CL.Quit
jsr CORE.Quit
clc
rts
*--------------------------------------
@ -621,12 +568,12 @@ MSG.PID .AZ "PID=%d\r\n"
FMT.DATE .AZ "%A (%w), %B %d %Y"
FMT.TIME .AZ "%H:%M:%S (%I:%M:%S%p)"
FMT.GETKEY .AZ "%d"
M32.Printf .AZ "%L"
FMT.Long .AZ "%L"
*--------------------------------------
HOME .AZ "${HOME}"
HOME.PROFILE .AZ "${HOME}PROFILE"
PS1 .AZ "${PS1}"
.HS 00 To Make It ArgV
PS1 .AZ "${PS1}"
HOME .AZ "${HOME}"
*--------------------------------------
EscChars .AS 'DBAC'
EscChars.Cnt .EQ *-EscChars
@ -634,76 +581,82 @@ EscChars.Remap .DA #C.BS,#C.VT,#C.LF,#C.FS
*--------------------------------------
IN .AZ "IN"
*--------------------------------------
CMD .AZ ".."
.AZ "."
.AZ "CD"
.AZ "NOHUP"
.AZ "DATE"
.AZ "ECHO"
.AZ "EXIT"
.AZ "GETKEY"
.AZ "MD"
.AZ "PAUSE"
.AZ "PWD"
.AZ "RD"
.AZ "READ"
.AZ "REN"
.AZ "SET"
.AZ "SLEEP"
.AZ "SHIFT"
.AZ "TIME"
.AZ "PUSHD"
.AZ "POPD"
.AZ "FUNCTION"
.AZ "CALL"
.AZ "BREAK"
.AZ "SWITCH"
.AZ "CASE"
.AZ "DEFAULT"
.AZ "FOR"
.AZ "WHILE"
.AZ "IF"
.AZ "NEXT"
.AZ "LOOP"
.AZ "ELSE"
.AZ "FI"
.AZ "END"
CMD .AT ".."
.AT "."
.AT "CD"
.AT "NOHUP"
.AT "DATE"
.AT "ECHO"
.AT "EXIT"
.AT "GETKEY"
.AT "MD"
.AT "PAUSE"
.AT "PWD"
.AT "RD"
.AT "READ"
.AT "REN"
.AT "SET"
.AT "SLEEP"
.AT "SHIFT"
.AT "TIME"
.AT "PUSHD"
.AT "POPD"
.AT "FUNCTION"
.AT "CALL"
.AT "BREAK"
.AT "SWITCH"
.AT "CASE"
.AT "DEFAULT"
.AT "FOR"
.AT "WHILE"
.AT "IF"
.AT "NEXT"
.AT "LOOP"
.AT "ELSE"
.AT "FI"
.AT "END"
.HS 00
CORE.IO .AT "&"
.AT "<"
.AT ">>"
.AT ">"
.AT "1>>"
.AT "1>"
.AT "2>>"
.AT "2>"
.HS 00
EXP.BEGIN .AT "!["
.AT "["
.HS 00
EXP.OP.UNARY .AT "-D"
.AT "-E"
.AT "-F"
.AT "-N"
.AT "-Z"
.HS 00
EXP.OP.BINARY .AT "="
.AT "!="
.AT ".<"
.AT "<="
.AT ".>"
.AT ">="
.AT "-EQ"
.AT "-NE"
.AT "-LT"
.AT "-LE"
.AT "-GT"
.AT "-GE"
.HS 00
EXP.OP.MATH .AT "+"
.AT "-"
.AT "*"
.AT "/"
.AT "MOD"
.HS 00
EXP.OP.LOGIC .AT "AND"
.AT "OR"
.HS 00
*--------------------------------------
* https://www.tldp.org/LDP/abs/html/io-redirection.html
*--------------------------------------
CORE.IO .AZ "&"
.AZ "<"
.AZ ">>"
.AZ ">"
.AZ "1>>"
.AZ "1>"
.AZ "2>>"
.AZ "2>"
.HS 00
*--------------------------------------
EXP.BEGIN .AZ "!["
.AZ "["
.HS 00
EXP.OP.UNARY .AZ "-D"
.AZ "-E"
.AZ "-F"
.AZ "-N"
.AZ "-Z"
.HS 00
EXP.OP.BINARY .AZ "="
.AZ "!="
.AZ ".<"
.AZ "<="
.AZ ".>"
.AZ ">="
.AZ "-EQ"
.AZ "-NE"
.AZ "-LT"
.AZ "-LE"
.AZ "-GT"
.AZ "-GE"
.HS 00
EXP.OP.BINARY.BITS
.DA #%010
.DA #%101
@ -718,16 +671,8 @@ EXP.OP.BINARY.BITS
.DA #%110
.DA #%001
.DA #%011
EXP.OP.MATH .AZ "+"
.AZ "-"
.AZ "*"
.AZ "/"
.AZ "MOD"
.HS 00
EXP.OP.MATH.FPU .DA #FPU.ADD32,#FPU.SUB32,#FPU.IMUL32,#FPU.IDIV32,#FPU.IMOD32
EXP.OP.LOGIC .AZ "AND"
.AZ "OR"
.HS 00
*--------------------------------------
.INB USR/SRC/SHARED/X.ERRORS.S
*--------------------------------------
@ -739,7 +684,6 @@ PUSHD.STACK .BS PUSHD.STACK.MAX+1
hFuncList .BS 1
bReadMode .BS 1
bExitOnEOF .BS 1
bEscMode .BS 1
@ -750,6 +694,7 @@ bSET.E .BS 1
bSET.X .BS 1
bREAD.S .BS 1
READ.N .BS 1
Sleep .BS 4
StatBuf .BS S.STAT

View File

@ -41,7 +41,7 @@ ERR.Codes .DA #MLI.E.IO
.DA #E.NOIF
.DA #E.BADFTYPE
.DA #E.FUNDEF
.DA #E.UNEXP
.DA #E.UNEXPEOF
*--------------------------------------
ERR.Count .EQ *-ERR.Codes
*--------------------------------------