Kernel 0.9.1 : SHELL, CSH style scripting.....(wip)

This commit is contained in:
Rémy GIBERT 2017-10-20 17:42:24 +02:00
parent cd31830346
commit a4d5f42fda
5 changed files with 212 additions and 168 deletions

Binary file not shown.

Binary file not shown.

View File

@ -27,8 +27,6 @@ CSH.Init lda #$FF
>STA.G CSH.hBuf >STA.G CSH.hBuf
>SYSCALL GetMemPtr.A >SYSCALL GetMemPtr.A
>STYA ZPCSHBufPtr >STYA ZPCSHBufPtr
>STYA.G CSH.BufBase
>LDYAI 256 >LDYAI 256
>SYSCALL GetMem0.YA >SYSCALL GetMem0.YA
@ -89,18 +87,19 @@ CSH.Run lda #0
bra .9 error, todo : PREOPS ++ --..... bra .9 error, todo : PREOPS ++ --.....
.3 jsr CSH.GetLen Get the len of this possible keyword/var .3 >LDYA L.CSHCMDS
jsr CSH.IsKeyword jsr CSH.IsKeyword
bcs .4 not an internal CSH keyword.... bcs .4 not an internal CSH keyword....
stx CSH.CmdSave txa
>STA.G CSH.CmdSave
jmp (J.CSHCMDS,x) jmp (J.CSHCMDS,x)
.4 jsr CSH.GetVar .4 jsr CSH.GetVar Y=Ptr To Value
bcs .5 bcs .5
jsr CSH.GetCharNB jsr CSH.GetCharNB
bcs .9 bcs .9
cmp #'=' cmp #'='
@ -109,17 +108,16 @@ CSH.Run lda #0
jsr CSH.GetNextCharNB Skip = jsr CSH.GetNextCharNB Skip =
bcs .99 bcs .99
phy
jsr CSH.ExpEval jsr CSH.ExpEval
ply
bcs .9 bcs .9
jsr CSH.GetChar jsr CSH.SetVarValueAtY
bcs .9 bcs .9
cmp #';' cmp #';'
bne .99 bne .99
jsr CSH.SetVar
bcs .9
jmp CSH.GetNextCharNB Skip ; jmp CSH.GetNextCharNB Skip ;
.99 lda #CSH.E.SYNTAX .99 lda #CSH.E.SYNTAX
@ -195,68 +193,56 @@ CSH.RestorePtr phy
ply ply
rts rts
*-------------------------------------- *--------------------------------------
CSH.GetLen ldy #0 we have already a letter CSH.IsKeyword >STYA ZPPtr1
.1 iny
lda (ZPCSHBufPtr),y
beq .8
jsr CSH.IsLetterOrDigit
bcc .1
.8 tya jsr CSH.GetIdentLen
>STA.G CSH.IdentLen
rts phy Y = kw len
*--------------------------------------
CSH.IsKeyword >LDYA L.CSHCMDS
>STYA ZPPtr2
ldx #0 ldx #0
.1 lda (ZPPtr2) .1 lda (ZPPtr1)
beq .9 Ending 0, not found.... beq .9 Ending 0, not found....
>LDA.G CSH.IdentLen pla
pha Get Back Len
cmp (ZPPtr2) Same Len ? cmp (ZPPtr1) Same Len ?
bne .4 bne .4
tay tay
.2 lda (ZPCSHBufPtr),y .2 lda (ZPPtr1),y
cmp #'a' To Uppercase .3 dey
bcc .3 cmp (ZPCSHBufPtr),y
cmp #'z'+1
bcs .3
eor #$20
.3 cmp (ZPPtr2),y
bne .4 bne .4
dey tya
bne .2 bne .2
>LDA.G CSH.IdentLen pla Found keyword...
clc clc
adc ZPCSHBufPtr adc ZPCSHBufPtr ..advance Ptr to char after it..
sta ZPCSHBufPtr sta ZPCSHBufPtr
bcc .8 bcc .8
inc ZPCSHBufPtr+1 inc ZPCSHBufPtr+1
clc Found an internal Cmd... clc
.8 rts .8 rts
.4 inx .4 inx
inx inx
lda ZPPtr2 lda ZPPtr1
sec sec
adc (ZPPtr2) adc (ZPPtr1)
sta ZPPtr2 sta ZPPtr1
bcc .1 bcc .1
inc ZPPtr2+1 inc ZPPtr1+1
bra .1 bra .1
.9 sec .9 pla
sec
rts rts
*-------------------------------------- *--------------------------------------
CSH.WHILE CSH.WHILE
@ -292,13 +278,13 @@ CSH.IF jsr CSH.GetCharNB
jsr CSH.GetNextCharNB Skip '{' jsr CSH.GetNextCharNB Skip '{'
lda CSH.CmdSave Push "IF" or "WHILE" >LDA.G CSH.CmdSave Push "IF" or "WHILE"
beq .1 if "IF", no need to push Saved Ptr beq .1 if "IF", no need to push Saved Ptr
pha pha
lda CSH.BufPtrSave+1 WHILE : push loop address... >LDA.G CSH.BufPtrSave+1 WHILE : push loop address...
jsr CSH.Push jsr CSH.Push
lda CSH.BufPtrSave >LDA.G CSH.BufPtrSave
jsr CSH.Push jsr CSH.Push
pla pla
@ -376,10 +362,13 @@ CSH.TYPE >STA.G CSH.ACCT
jsr CSH.IsLetter jsr CSH.IsLetter
bcs .9 bcs .9
jsr CSH.GetLen jsr CSH.GetVar Already exists ?
jsr CSH.FindVar
bcc .90 bcc .90
jsr CSH.AddVar No, add with undefined value...
bcs .99
* Y=Ptr in DATA to Value
jsr CSH.GetCharNB jsr CSH.GetCharNB
bcs .9 bcs .9
cmp #';' cmp #';'
@ -391,32 +380,33 @@ CSH.TYPE >STA.G CSH.ACCT
jsr CSH.GetNextCharNB jsr CSH.GetNextCharNB
bcs .9 bcs .9
phy Save Ptr To Value
jsr CSH.ExpEval jsr CSH.ExpEval
ply
bcs .9 bcs .9
jsr CSH.SetVarValueAtY Update value to this var
jsr CSH.GetChar jsr CSH.GetChar
bcs .9 bcs .9
cmp #';' cmp #';'
bne .9 bne .9
.8 jsr CSH.AddVar .8 jsr CSH.GetNextCharNB Skip ;
bcs .99
jsr CSH.GetNextCharNB Skip ;
clc clc
rts rts
.90 lda #CSH.E.DUP .90 lda #CSH.E.DUP
sec sec
rts rts
.9 lda #CSH.E.SYNTAX .9 lda #CSH.E.SYNTAX
sec sec
.99 rts .99 rts
*-------------------------------------- *--------------------------------------
CSH.ExpEval jsr CSH.ZeroACC CSH.ExpEval jsr CSH.ZeroACC
ldy #0
jsr CSH.GetCharNB jsr CSH.GetCharNB
bcs .9 bcs .9
cmp #')' cmp #')'
@ -433,6 +423,7 @@ CSH.ExpEval jsr CSH.ZeroACC
bcs .9 bcs .9
jsr CSH.GetNumInACC jsr CSH.GetNumInACC
bcs .9 bcs .9
@ -443,41 +434,45 @@ CSH.ExpEval jsr CSH.ZeroACC
sec sec
.99 rts .99 rts
*-------------------------------------- *--------------------------------------
CSH.GetNumInACC CSH.GetNumInACC >LDA.G CSH.ACCT
cmp #CSH.TYPE.FLOAT
bcc .1
>PUSHWI ZPCSHBufPtr
>PUSHW ZPCSHBufPtr
>PUSHEA.G CSH.ACC
>SYSCALL StrToF
rts
.1 >PUSHBI 10
>LDA.G CSH.ACCT >PUSHWI ZPCSHBufPtr
>PUSHW ZPCSHBufPtr
* >SYSCALL StrToL >PUSHEA.G CSH.ACC
* bcs .9 >DEBUG
* rts >SYSCALL StrToL
.9 lda #CSH.E.SYNTAX
sec
rts rts
*-------------------------------------- *--------------------------------------
CSH.ZeroACC lda #0 CSH.ZeroACC lda #0
ldx #5
>STA.G CSH.ACC ldy #CSH.ACC
.1 sta (pData),y
iny iny
sta (pData),y dex
iny bne .1
sta (pData),y
iny
sta (pData),y
rts rts
*-------------------------------------- *--------------------------------------
* Vars... * Vars...
*-------------------------------------- *--------------------------------------
CSH.AddVar jsr CSH.FindVar CSH.AddVar jsr CSH.GetIdentLen
bcc .97
>LDA.G CSH.SymbolsPtr
sec sec
>ADC.G CSH.IdentLen >ADC.G CSH.SymbolsPtr
bcs .99 bcs .99
adc #2 TYPE + OFS adc #1 OFS
bcs .99 bcs .99
>LDA.G CSH.DataPtr >LDA.G CSH.DataPtr
@ -485,7 +480,7 @@ CSH.AddVar jsr CSH.FindVar
>LDA.G CSH.ACCT >LDA.G CSH.ACCT
tax tax
* clc sec +1 for Type
adc CSH.TSIZE,x adc CSH.TSIZE,x
bcs .98 Out of memory bcs .98 Out of memory
@ -494,17 +489,13 @@ CSH.AddVar jsr CSH.FindVar
jsr CSH.GetChar jsr CSH.GetChar
.10 sta (ZPCSHSymbols),y .1 sta (ZPCSHSymbols),y
iny iny
jsr CSH.GetNextChar jsr CSH.GetNextChar
jsr CSH.IsLetterOrDigit jsr CSH.IsLetterOrDigit
bcc .10 bcc .1
lda CSH.ACCT
sta (ZPCSHSymbols),y
iny
pla Get Back Data OFS pla Get Back Data OFS
pha pha
sta (ZPCSHSymbols),y sta (ZPCSHSymbols),y
@ -513,94 +504,98 @@ CSH.AddVar jsr CSH.FindVar
tya tya
>STA.G CSH.SymbolsPtr >STA.G CSH.SymbolsPtr
>LEA.G CSH.ACCT
>STYA ZPPtr1 ACCT/ACC in ZPPtr1
ply Get Back Data OFS again ply Get Back Data OFS again
phy
>LDA.G CSH.ACCT lda (ZPPtr1)
sta (ZPCSHSymbols),y Add Type to Data
iny
tax tax
lda CSH.TSIZE,x lda CSH.TSIZE,x A = byte count to store
ldx #0
.1 pha
>LDA.G CSH.ACC
tax tax
.2 inc ZPPtr1
bne .3
inc ZPPtr1+1
.3 lda (ZPPtr1)
sta (ZPCSHData),y sta (ZPCSHData),y
iny iny
inx dex
pla bne .2
dec
bne .1
tya tya
>STA.G CSH.DataPtr >STA.G CSH.DataPtr
ply Exit with Y=Data Offset
clc clc
rts rts
.97 lda #CSH.E.DUP
sec
rts
.98 pla .98 pla
.99 lda #CSH.E.OOM .99 lda #CSH.E.OOM
sec sec
rts rts
*-------------------------------------- *--------------------------------------
CSH.SetVar CSH.SetVarValueAtY
clc clc
rts rts
*-------------------------------------- *--------------------------------------
CSH.GetVar jsr CSH.FindVar CSH.GetVar >LDYA ZPCSHSymbols
bcs .9 >STYA ZPPtr1
clc jsr CSH.GetIdentLen
.9 rts phy
*--------------------------------------
CSH.FindVar >LDYA ZPCSHSymbols
>STYA ZPPTR1
.1 lda (ZPPTR1) .1 lda (ZPPtr1)
beq .9 beq .9
>CMP.G CSH.IdentLen pla
bne .4 pha
cmp (ZPPtr1)
bne .3
tay tay
.2 lda (ZPPTR1),y .2 lda (ZPPtr1),y
dey
cmp (ZPCSHBufPtr),y cmp (ZPCSHBufPtr),y
bne .3 bne .3
dey tya
bne .2 bne .2
lda (ZPPTR1) pla
sec
adc ZPPTR1 jsr CSH.VarSkipName
sta ZPPTR1
bcc .8
inc ZPPTR1+1
clc clc
.8 rts .8 rts
.3 lda (ZPPTR1) skip Name .3 jsr CSH.VarSkipName
.4 sec
adc ZPPTR1
bcc .5
inc ZPPTR1+1
clc
.5 adc #2 Skip Type+OFS .5 inc ZPPtr1 Skip Pointer to TYPE/DATA
sta ZPPTR1 bne .1
bcc .1 inc ZPPtr1+1
inc ZPPTR1+1
bra .1 bra .1
.9 sec .9 pla
sec
rts rts
*-------------------------------------- *--------------------------------------
CSH.VarSkipName lda (ZPPtr1)
sec
adc ZPPtr1
sta ZPPtr1
bcc .8
inc ZPPtr1+1
.8 rts
*--------------------------------------
* Stack * Stack
*-------------------------------------- *--------------------------------------
CSH.Push pha CSH.Push pha
@ -655,6 +650,16 @@ CSH.CheckStack pha
*-------------------------------------- *--------------------------------------
* CHAR related Subs..... * CHAR related Subs.....
*-------------------------------------- *--------------------------------------
CSH.GetIdentLen ldy #0
.1 iny
lda (ZPCSHBufPtr),y
beq .8
jsr CSH.IsLetterOrDigit
bcc .1
.8 rts
*--------------------------------------
CSH.GetCharNB jsr CSH.GetChar CSH.GetCharNB jsr CSH.GetChar
bcs CSH.GetNextCharNB.RTS bcs CSH.GetNextCharNB.RTS
jsr CSH.CheckCharNB jsr CSH.CheckCharNB
@ -724,6 +729,72 @@ CSH.IsDigit10 cmp #'0'
.9 sec .9 sec
rts rts
*-------------------------------------- *--------------------------------------
CSH.ErrorMsg >LDA.G CSH.hBuf
>SYSCALL GetMemPtr.A
>STYA ZPPtr1
lda #0
>STA.G CSH.LineNum
iny
>STA.G CSH.LineNum+1
.1 >LDYA ZPPtr1
>STYA ZPPtr2 Save actual line start
>INCW.G CSH.LineNum
.2 lda (ZPPtr1)
beq .6 EoF
inc ZPPtr1
bne .3
inc ZPPtr1+1
.3 cmp #$0D
bne .2 Scan until EoL
ldx ZPPtr1
cpx ZPCSHBufPtr
lda ZPPtr1+1
sbc ZPCSHBufPtr+1
bcc .1 not this line....
.4 ldy #0
.5 lda (ZPPtr2),y
beq .6
iny
cmp #$0D
beq .6
phy
>SYSCALL PutChar.A
ply
bra .5
.6 lda #$0D
>SYSCALL PutChar.A
lda #$0A
>SYSCALL PutChar.A
lda ZPCSHBufPtr
sec
sbc ZPPtr2
beq .8
tay
.7 phy
lda #'-'
>SYSCALL PutChar.A
ply
dey
bne .7
.8 >PUSHW.G CSH.LineNum
>LDYA L.MSG.CSHERR
>SYSCALL PrintF.YA
rts
*--------------------------------------
MAN MAN
SAVE /A2OSX.SRC/SBIN/SHELL.S.CSH SAVE /A2OSX.SRC/SBIN/SHELL.S.CSH
LOAD /A2OSX.SRC/SBIN/SHELL.S LOAD /A2OSX.SRC/SBIN/SHELL.S

View File

@ -34,7 +34,6 @@ CSH.E.NOVERFLW .EQ $7D
CSH.E.OOM .EQ $7C CSH.E.OOM .EQ $7C
CSH.E.DUP .EQ $7B CSH.E.DUP .EQ $7B
CSH.E.UNDEF .EQ $7A CSH.E.UNDEF .EQ $7A
CSH.E.TOOLONG .EQ $79
*-------------------------------------- *--------------------------------------
* File Header (16 Bytes) * File Header (16 Bytes)
*-------------------------------------- *--------------------------------------
@ -214,33 +213,9 @@ CS.RUN.BATCH jsr CSH.Run
pha pha
lda ZPCSHBufPtr jsr CSH.ErrorMsg
sec
>SBC.G CSH.BufBase
tay
lda ZPCSHBufPtr+1 pla
>SBC.G CSH.BufBase+1
>PUSHYA
>LDYA L.MSG.CSHERR
>SYSCALL PrintF.YA
jsr CSH.RestorePtr
jsr CSH.GetChar
bcs .2
>SYSCALL PutChar.A
.1 jsr CSH.GetNextChar
bcs .2
cmp #13
beq .2
>SYSCALL PutChar.A
bra .1
.2 pla
ldy #S.PS.RC ldy #S.PS.RC
sta (pPs),y sta (pPs),y
@ -510,7 +485,7 @@ MSG.PROMPT >CSTR "$ "
MSG.ECHO >CSTR ">%s\r\n" MSG.ECHO >CSTR ">%s\r\n"
MSG.ERROR >CSTR "[$%h]:%S.\r\n" MSG.ERROR >CSTR "[$%h]:%S.\r\n"
MSG.PRINTENV >CSTR "%s=%s\r\n" MSG.PRINTENV >CSTR "%s=%s\r\n"
MSG.CSHERR >CSTR "Pos %D:" MSG.CSHERR >CSTR "^\r\nLine #%D:"
FMT.DATE >CSTR "%A, %B %d %Y" FMT.DATE >CSTR "%A, %B %d %Y"
FMT.TIME >CSTR "%H:%M:%S (%I:%M:%S%p)" FMT.TIME >CSTR "%H:%M:%S (%I:%M:%S%p)"
*-------------------------------------- *--------------------------------------
@ -556,9 +531,10 @@ IO.hOut .BS 1
IO.hErr .BS 1 IO.hErr .BS 1
CSH.hBuf .BS 1 CSH.hBuf .BS 1
CSH.BufBase .BS 2
CSH.BufPtrSave .BS 2 CSH.BufPtrSave .BS 2
CSH.LineNum .BS 2
CSH.hSymbols .BS 1 CSH.hSymbols .BS 1
CSH.SymbolsPtr .BS 1 CSH.SymbolsPtr .BS 1
@ -568,7 +544,6 @@ CSH.DataPtr .BS 1
CSH.hStack .BS 1 CSH.hStack .BS 1
CSH.StackPtr .BS 1 CSH.StackPtr .BS 1
CSH.IdentLen .BS 1
CSH.CmdSave .BS 1 CSH.CmdSave .BS 1
CSH.ACCT .BS 1 CSH.ACCT .BS 1
CSH.ACC .BS 5 CSH.ACC .BS 5

View File

@ -14,16 +14,13 @@ AUTO 6
* Target buffer filled with a FLOAT (packed) * Target buffer filled with a FLOAT (packed)
*\-------------------------------------- *\--------------------------------------
K.StrToF jsr K.AToF K.StrToF jsr K.AToF
bcs .9
>PULLW ZPPtr3 >PULLW ZPPtr3
lda TXTPTR lda TXTPTR
sta (ZPPtr3) sta (ZPPtr3)
ldy #1 ldy #1
lda TXTPTR lda TXTPTR+1
sta (ZPPtr3),y sta (ZPPtr3),y
rts
.9 rts
*/-------------------------------------- */--------------------------------------
* # AToF * # AToF
* Convert String to 40 bits Float * Convert String to 40 bits Float
@ -71,10 +68,11 @@ K.StrToUL clc Unsigned
* clc * clc
K.StrToUL.Exit adc ZPPtr2 K.StrToUL.Exit adc ZPPtr2
sta ZPPtr3 sta (ZPPtr3)
lda #0 lda #0
adc ZPPtr2+1 adc ZPPtr2+1
sta ZPPtr3+1 ldy #1
sta (ZPPtr3),y
K.StrToUL.rts rts K.StrToUL.rts rts
*/-------------------------------------- */--------------------------------------