Kernel 0.93+

This commit is contained in:
Rémy GIBERT 2019-08-12 09:40:16 +02:00
parent 9656653843
commit d380289666
7 changed files with 188 additions and 180 deletions

View File

@ -124,7 +124,7 @@ Notice that the DO X and DO Y logic is swapped between the two cases.
| END | Working | End of SWITCH Statement |
| EXIT | Working | exit function, script or shell |
| FI | Working | Terminator for IF block |
| FUNC | In Progress | FUNC fonction_name <br> \<body\> <br> END |
| FUNCTION | Working | FUNCTION fonction_name { <br> \<body\> <br> } |
| IF | Working | [ \<condition\> ] <br> ![ \<condition\> ]|
| LOOP | Working | Terminator for WHILE block |
| MD | Working | MD path or relative path <br> Create a directory |

Binary file not shown.

View File

@ -2,9 +2,20 @@ NEW
AUTO 3,1
.LIST OFF
*--------------------------------------
CMD.NOHUP >LDA.G CORE.PSFlags
ora #S.PS.F.NOHUP
sta (pData),y
CMD.. lda (ZPArgVBufPtr)
beq .9
>LDYA ZPArgVBufPtr
jsr IO.Load
bcs .99
>LDYA ZPArgVBufPtr
jmp CORE.Load.YAX exec cmd file and continue
.9 jmp CMD.Exec.CSYN
.99 rts
*--------------------------------------
CMD.NOHUP lda #S.PS.F.NOHUP
tsb CORE.PSFlags
>LDYA ZPArgVBuf
jmp CORE.ExecExtCmd
@ -51,7 +62,7 @@ CMD.POPD >LDA.G PUSHD.STACK
tay
lda (pData),y
jsr CMD.SetPrefixA
jsr CMD.SetCWDA
>DEC.G PUSHD.STACK
clc
@ -91,7 +102,7 @@ CMD.CD.YA >SYSCALL realpath
bne .12
txa
jmp CMD.SetPrefixA we have '/'
jmp CMD.SetCWDA we have '/'
.12 >PUSHEA.G StatBuf
>LDYA ZPPtr1
@ -119,7 +130,7 @@ CMD.CD.YA >SYSCALL realpath
bne .14
lda ZPTmpW
jmp CMD.SetPrefixA already ends with a /
jmp CMD.SetCWDA already ends with a /
.14 iny
iny
@ -142,7 +153,7 @@ CMD.CD.YA >SYSCALL realpath
>SYSCALL freemem
pla
*--------------------------------------
CMD.SetPrefixA pha
CMD.SetCWDA pha
ldy #S.PS.hCWD
lda (pPs),y
>SYSCALL FreeMem
@ -538,16 +549,12 @@ CMD.RD lda (ZPArgVBufPtr)
.9 jmp CMD.Exec.CSYN
*--------------------------------------
CMD.FUNC lda (ZPArgVBufPtr)
CMD.FUNCTION lda (ZPArgVBufPtr)
beq .9
jsr CORE.StkGetCtx
bcc .9 NO context allowed
bcc .9 No context allowed
lda #3 Check stack for 3 bytes
jsr CORE.StkCheck
bcs .99
>LDA.G hFuncList
bne .1
@ -557,32 +564,77 @@ CMD.FUNC lda (ZPArgVBufPtr)
.1 >PUSHW ZPArgVBufPtr
>LDA.G hFuncList
>SYSCALL SListNewKey
bcs .99
jsr CORE.StkPushYA
>STYA ZPTmpW Save KeyID
lda #$C0+C.FUNC
jsr CORE.StkPush
jsr CORE.ArgV.Next nothing after function name
beq .10
lda #$ff
>STA.G bFuncMode
cmp #'{'
bne .9
* clc
.99 rts
ldy #1
lda (ZPArgVBufPtr),y
beq .11
.9 jmp CMD.Exec.CSYN
*--------------------------------------
CMD.. lda (ZPArgVBufPtr)
beq .9
>LDYA ZPArgVBufPtr
jsr IO.Load
bcs CMD.CALL.RTS
>LDYA ZPArgVBufPtr
jmp CORE.Load.YAX exec cmd file and continue
.9 jmp CMD.Exec.CSYN
.99 rts
*--------------------------------------
.10 jsr CORE.GetCharNB
bcs .9
cmp #'{'
bne .9
jsr CORE.GetNextCharNB
bcs .9
.11 stz M32.ACC '{' counter
>LDYA ZPInputBufPtr
>STYA ZPPtr1
ldy #0
ldx #0
lda (ZPInputBufPtr)
beq .6
.12 cmp #'{'
bne .13
inc M32.ACC
bra .14
.13 cmp #'}'
bne .14
dec M32.ACC
bmi .7
.14 iny
bne .15
inx
.15 jsr CORE.GetNextChar
bne .12
.6 lda M32.ACC
bpl .9
.7 jsr CORE.GetNextChar skip ending '}'
txa
>PUSHYA DataLen
>PUSHW ZPPtr1 DataPtr
>PUSHW ZPTmpW KeyID
>LDA.G hFuncList
>SYSCALL SListAddData
rts
*--------------------------------------
CMD.CALL.UNDEF lda #E.FUNDEF
sec
@ -615,40 +667,34 @@ CMD.EXIT lda (ZPArgVBufPtr)
>LDYA ZPArgVBufPtr
jsr EXP.GET
bcs .9
>SYSCALL AToL
bcs .9
bcs .99
>PULLA
inc pStack
inc pStack
inc pStack
.1 jsr CMD.EXIT.A
.1 sta M32.ACC
.2 jsr CORE.StkPull
bcs .9
lda (pData)
bne .8
lda #$ff
>STA.G bExitOnEOF
.8 lda M32.ACC
clc
.9 rts
CMD.EXIT.A sta M32.ACC
.1 jsr CORE.StkPull
bcs CMD.EXIT.RTS
cmp #$C0 in CALL / . context ?
beq .8
beq CMD.EXIT.CALL
jsr CMD.EXIT.POP
bcc .1
bcc .2
.9 rts
.99 lda #E.ESYN
* sec
rts
.8 jsr CORE.StkPull
*--------------------------------------
CMD.EXIT.CALL jsr CORE.StkPull
>SYSCALL freemem Code buffer
ldy #S.PS.hARGV
@ -672,31 +718,39 @@ CMD.EXIT.A sta M32.ACC
sta ZPInputBuf
lda M32.ACC
clc
CMD.EXIT.CLCRTS clc
CMD.EXIT.RTS rts
*--------------------------------------
CMD.EXIT.POP and #$3F
cmp #C.IF
beq CMD.EXIT.POP0
cmp #C.CASE CASE : nothing
beq CMD.EXIT.POP0
beq CMD.EXIT.CLCRTS IF : Nothing
ldx #2
cmp #C.WHILE WHILE : one Ptr
cmp #C.WHILE WHILE : One Ptr = 2 bytes
beq CMD.EXIT.POPX
cmp #C.SWITCH SWITCH : hValue
bne .9
beq .2
jsr CORE.StkPull
ldx #1
cmp #C.CASE CASE : C.CASE + hValue
beq .1
cmp #C.DEFAULT DEFAULT : C.DEFAULT + hValue
bne .9
.1 jsr CMD.EXIT.POPX
.2 jsr CORE.StkPull
>SYSCALL freemem
rts
.9 lda #E.STACKERROR
sec
rts
*--------------------------------------
CMD.EXIT.POPX lda (pData)
.1 dec
@ -705,7 +759,7 @@ CMD.EXIT.POPX lda (pData)
sta (pData)
CMD.EXIT.POP0 clc
clc
rts
*--------------------------------------
CMD.BREAK jsr CORE.StkGetCtx Get context in CORE.TestResult
@ -819,11 +873,8 @@ CMD.DEFAULT jsr CORE.StkGetCtx Get context in CORE.TestResult
*--------------------------------------
CMD.END jsr CORE.StkGetCtx Get context in CORE.TestResult
bcs CMD.END.CSYN
and #$3F
cmp #C.FUNC
beq CMD.END.FUNC
and #$3F
cmp #C.SWITCH
beq .3
@ -833,17 +884,13 @@ CMD.END jsr CORE.StkGetCtx Get context in CORE.TestResult
cmp #C.DEFAULT
bne CMD.END.CSYN
.2 jsr CORE.StkPull remove C.CASE,C.DEFAULT
.2 jsr CORE.StkPull remove C.CASE or C.DEFAULT
.3 jsr CORE.StkPull remove C.SWITCH
jsr CORE.StkPull get hVALUE
>SYSCALL freemem
rts
CMD.END.FUNC jsr CORE.StkPull remove C.FUNC
jsr CORE.StkPull remove KeyID
jmp CORE.StkPull remove KeyID
CMD.END.CSYN jmp CMD.Exec.CSYN
*--------------------------------------
CMD.FOR jsr CORE.StkGetCtx

View File

@ -38,11 +38,9 @@ CORE.Load.YAX stx M32.ACC X=Code to Execute
>LDYA ZPInputBuf
jsr CORE.StkPushYA
bcs CORE.FUNCRESET.RTS
>LDYA ZPInputBufPtr
jsr CORE.StkPushYA
bcs CORE.FUNCRESET.RTS
ldy #S.PS.ARGC
lda (pPS),y
@ -95,6 +93,25 @@ CORE.Load.YAX stx M32.ACC X=Code to Execute
* set hStdIn = hStdOut
* set hStdOut = Std
*--------------------------------------
CORE.Run.EOF jsr CORE.StkPull
bcs .9
cmp #$C0 in CALL / . context ?
bne .9
jsr CMD.EXIT.CALL
bcs .9
jsr IO.Reset
lda #0
sec
rts Ending 0, CS,A=0
.9 lda #E.UNEXP
sec
rts
*--------------------------------------
CORE.Run.SYN lda #E.SYN
sec
rts
@ -109,25 +126,16 @@ CORE.Run >LDYA ZPInputBufPtr Save Actual cmd for looping
sta (ZPArgVBuf)
lda #S.PS.F.HOLD
>STA.G CORE.PSFlags
sta CORE.PSFlags
lda #$ff
sta CORE.IntCmd assume external
sta CORE.IntCmd assume external
jsr CORE.GetCharNB
bcc .11
bcs CORE.Run.EOF
lda #0 EOF
jsr CMD.EXIT.A
bcs .9
jsr IO.Reset
lda #0
sec
rts Ending 0, CS,A=0
.11 cmp #'|'
cmp #'|'
bne .21
jsr IO.Pipe.In
@ -149,7 +157,7 @@ CORE.Run >LDYA ZPInputBufPtr Save Actual cmd for looping
bra .8
.33 cmp #'#' commented line?
bne .2
bne .4
.12 jsr CORE.SkipLine
@ -159,11 +167,6 @@ CORE.Run >LDYA ZPInputBufPtr Save Actual cmd for looping
clc
.9 rts EOL, CS,A=0
.2 >LDA.G bFuncMode
bpl .4
jmp CORE.AddFunc
.4 >LDYA L.CMD internal command ?
jsr CORE.LookupInputBuf
bcc .41
@ -233,10 +236,10 @@ CORE.Run.7 jsr CORE.GetCharNB
jsr IO.Pipe.Out
bcs CORE.Run.RTS
>LDA.G CORE.PSFlags
lda CORE.PSFlags
and #$ff^S.PS.F.HOLD Run in the background...
ora #S.PS.F.CLOSEONX ...and close PIPE on exit
sta (pData),y
sta CORE.PSFlags
bra CORE.ExecCmd.1 Do not skip |
@ -259,16 +262,14 @@ CORE.ExecCmd.1 lda #0
tax
jmp (J.CMD,x)
CORE.ExecExtCmd >PUSHB.G CORE.PSFlags
CORE.ExecExtCmd >PUSHB CORE.PSFlags
>LDYA ZPArgVBuf
>SYSCALL execv
CORE.ExecExtCmd.Exit
bcs .9
tax CPID
>LDA.G CORE.PSFlags
lda CORE.PSFlags
and #S.PS.F.HOLD
bne .4
@ -291,45 +292,6 @@ CORE.ExecExtCmd.Exit
.8 clc
.9 rts
*--------------------------------------
CORE.AddFunc >LDYA L.ENDCMD
jsr CORE.LookupInputBuf
bcs .1
>STZ.G bFuncMode
jsr .1 add "END"
bcs .9
jmp CMD.END.FUNC Cleanup Stk
.9 jmp CORE.Run.SYN
.1 ldy #$ff
.2 iny
lda (ZPInputBufPtr),y
beq .3
eor #C.CR
bne .2
.3
>PUSHYA DataLen
>PUSHW ZPInputBufPtr DataPtr
lda (pData)
tay
dey skip C.FUNC
lda (pData),y KeyID
>PUSHA
dey
lda (pData),y KeyID
>PUSHA
>LDA.G hFuncList
>SYSCALL SListAddData
bcs .9
*--------------------------------------
CORE.SkipLine jsr CORE.GetNextCharNB
bcs .8 EOF
@ -551,9 +513,8 @@ CORE.IO.JMP txa
tax
jmp (J.CORE.IO,x)
CORE.IO.AMP >LDA.G CORE.PSFlags
and #$ff^S.PS.F.HOLD
sta (pData),y
CORE.IO.AMP lda #S.PS.F.HOLD
trb CORE.PSFlags
clc
CORE.IO.RTS rts
@ -742,13 +703,14 @@ CORE.StkPull jsr CORE.StkGet
.9 rts
*--------------------------------------
CORE.StkGet lda (pData) StackPtr
beq CORE.StkErr
beq .9
tay
lda (pData),y
clc
rts
*--------------------------------------
CORE.StkErr lda #E.STACKERROR
.9 lda #E.STACKERROR
sec
rts
*--------------------------------------

View File

@ -29,7 +29,7 @@ C.SHIFT .EQ 16
C.TIME .EQ 17
C.PUSHD .EQ 18
C.POPD .EQ 19
C.FUNC .EQ 20
C.FUNCTION .EQ 20
C.CALL .EQ 21
C.BREAK .EQ 22
C.SWITCH .EQ 23
@ -55,9 +55,9 @@ E.STKOVERFLOW .EQ $C3
E.NOWHILE .EQ $C4
E.NOFOR .EQ $C5
E.NOIF .EQ $C6
E.BADEXP .EQ $C7
E.BADFTYPE .EQ $C8
E.FUNDEF .EQ $C9
E.BADFTYPE .EQ $C7
E.FUNDEF .EQ $C8
E.UNEXP .EQ $C9
*--------------------------------------
.INB INC/MACROS.I
.INB INC/A2OSX.I
@ -76,18 +76,19 @@ ZPArgVBufPrev .BS 2
ZPArgVBufPtr .BS 2
ZPVarNamePtr .BS 2
CORE.PSFlags .BS 1
CORE.IntCmd .BS 1
CORE.Operator .BS 1
CORE.LogicOp .BS 1
CORE.TestResult .BS 1
CORE.PrevTestResult .BS 1
M32.ACC .BS 4
ZPPtr1 .BS 2
ZPPtr2 .BS 2
ZPTmpW .BS 2
M32.ACC .BS 4
ZS.END .ED
*--------------------------------------
* File Header (16 Bytes)
@ -130,7 +131,6 @@ J.ESC .DA CL.BS left arrow
.DA CL.NAK right arrow
L.IN .DA IN
L.CMD .DA CMD
L.ENDCMD .DA ENDCMD
J.CMD .DA CMD...
.DA CMD..
.DA CMD.CD
@ -151,7 +151,7 @@ J.CMD .DA CMD...
.DA CMD.TIME
.DA CMD.PUSHD
.DA CMD.POPD
.DA CMD.FUNC
.DA CMD.FUNCTION
.DA CMD.CALL
.DA CMD.BREAK
.DA CMD.SWITCH
@ -439,8 +439,10 @@ CS.RUN.BATCH >LDA.G bSET.C
lda (ZPInputBufPtr),y
sta (ZPArgVBuf),y
beq .4
eor #C.CR
bne .3
sta (ZPArgVBuf),y
.4 >PUSHW ZPArgVBuf
@ -476,7 +478,7 @@ CS.RUN.LOOP.END ldy #S.PS.RC
jsr IO.PrintErrMsg
bcs CS.RUN.LOOP.RTS
CS.RUN.LOOP.80 lda (pData)
CS.RUN.LOOP.80 lda (pData) something on stack ?
bne .8
>LDA.G bExitOnEOF
@ -652,7 +654,7 @@ CMD .AZ ".."
.AZ "TIME"
.AZ "PUSHD"
.AZ "POPD"
.AZ "FUNC"
.AZ "FUNCTION"
.AZ "CALL"
.AZ "BREAK"
.AZ "SWITCH"
@ -665,7 +667,7 @@ CMD .AZ ".."
.AZ "LOOP"
.AZ "ELSE"
.AZ "FI"
ENDCMD .AZ "END"
.AZ "END"
.HS 00
*--------------------------------------
* https://www.tldp.org/LDP/abs/html/io-redirection.html
@ -738,7 +740,6 @@ PUSHD.STACK .BS PUSHD.STACK.MAX+1
hFuncList .BS 1
bReadMode .BS 1
bFuncMode .BS 1
bExitOnEOF .BS 1
bEscMode .BS 1
@ -761,8 +762,6 @@ CL.bReady .BS 1
CORE.hArgVBuf .BS 1
CORE.PSFlags .BS 1
HIS.hBuf .BS 1
HIS.Count .BS 1
HIS.Index .BS 1

View File

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

View File

@ -9,9 +9,9 @@ ZPSListDBlkPtr .EQ ZPMEMMGR+14
*/--------------------------------------
* # SListGetData
* ## ASM
* `PUSHW DataOfs`
* `PUSHW DataLen`
* `PUSHW DataPtr`
* `PUSHW DataOfs` (Start offset in Data)
* `PUSHW DataLen` (Data bytes to return, 0 if String mode)
* `PUSHW DataPtr` (0 if KERNEL should allocate a buffer)
* `PUSHW KeyID`
* `lda hSList`
* `>SYSCALL SListGetData`
@ -36,7 +36,7 @@ K.SListGetData sta SLIST.hList
lda SLIST.DataLen
sec
sbc ZPMemMgrSize
sbc ZPMemMgrSize Offset
eor #$ff
sta SLIST.nDataCnt
lda SLIST.DataLen+1
@ -44,9 +44,9 @@ K.SListGetData sta SLIST.hList
eor #$ff
sta SLIST.nDataCnt+1 Data remaining
bcc .99
bcc .99 Offset Beyond DataLen
.10 lda ZPMemMgrSize
.10 lda ZPMemMgrSize Skip to Offset
ldx ZPMemMgrSize+1
jsr SLIST.SkipDataAX
@ -55,7 +55,11 @@ K.SListGetData sta SLIST.hList
bne .12
>LDYA SLIST.DataLen
ldx #SYS.GetMem
iny
bne .11
inc +1 for ending 0
.11 ldx #SYS.GetMem
jsr K.SYSCALL2.MAIN !!! Get a buffer In MAIN Mem !!!
bcs .9
stx .82+1
@ -106,14 +110,8 @@ K.SListGetData sta SLIST.hList
sec
.9 rts
.8 bit SLIST.bStringMode
bpl .81
lda #0
.8 lda #0
jsr SHARED.SetDataByte
inc ZPSListDataLen
bne .81
inc ZPSListDataLen+1
.81 >LDYA ZPSListDataLen
.82 ldx #$ff SELF MODIFIED
@ -182,15 +180,16 @@ K.SListAddData sta SLIST.hList
beq .8
.2 jsr SHARED.GetDataByte
jsr SLIST.AddBlockByte
bcc .1
rts
.8 lda #0
jsr SLIST.AddBlockByte Make sure 0 follow DATA
.9 rts
jsr SLIST.AddBlockByte Add an extra 0 to stop Search here
clc
rts
*/--------------------------------------
* # SListSetData
* ## ASM
@ -562,15 +561,13 @@ SLIST.AddBlockByte
.9 plx
ply
sec
SLIST.AddBlockByte.RTS
rts
*--------------------------------------
SLIST.SetBlockByte
ldy SLIST.BytePtr
sta (ZPSListDBlkPtr),y
inc SLIST.BytePtr
bne SLIST.AddBlockByte.RTS
bne SLIST.ToNextBlock.RTS
*--------------------------------------
SLIST.ToNextBlock
inc SLIST.BlockPtr
@ -578,6 +575,7 @@ SLIST.ToNextBlock
lda (ZPSListIBlkPtr),y
jsr K.GetMemPtr
>STYA ZPSListDBlkPtr
SLIST.ToNextBlock.RTS
rts
*--------------------------------------
SLIST.hList .BS 1