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\> | | 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 | -S : no echo (password) <br> -P : "prompt message" <br> -N maxchar |
| REN | Working | Rename a file, directory or volume | | 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 | | 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 | | SHIFT | Working | Remove $1 from cmd line |

Binary file not shown.

View File

@ -104,9 +104,10 @@ CL.CHARIN.CTRL cpx #C.CR
rts rts
*-------------------------------------- *--------------------------------------
CL.Insert >LDA.G CL.Len CL.Insert >LDA.G CL.Len
>CMP.G READ.N
beq .8 Buffer full, discard...
inc inc
beq .9 Buffer full, discard... >STA.G CL.Len
sta (pData),y
pha pha
@ -128,21 +129,23 @@ CL.Insert >LDA.G CL.Len
txa txa
sta (ZPCLBuf),y sta (ZPCLBuf),y
>LDA.G bREAD.S
bpl .2
>INC.G CL.Ptr >INC.G CL.Ptr
clc
rts
.2 txa >LDA.G bREAD.S
bmi .7
txa
>SYSCALL PutChar >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 rts
*-------------------------------------- *--------------------------------------
CL.CLR lda (ZPCLBuf) CL.CLR lda (ZPCLBuf)

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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