mirror of
https://github.com/A2osX/A2osX.git
synced 2024-11-22 16:31:07 +00:00
Kernel version 0.9 : 'C-Style' Script Engine...
This commit is contained in:
parent
4d814cf75c
commit
76ffedf6de
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -5,9 +5,32 @@ INC 1
|
||||
AUTO 6
|
||||
.LIST OFF
|
||||
*--------------------------------------
|
||||
CSH.Reset ldy #CSH.hStack
|
||||
lda (pData),y
|
||||
bne .1
|
||||
CSH.TYPE.CHAR .EQ 1
|
||||
CSH.TYPE.INT .EQ 2
|
||||
CSH.TYPE.LONG .EQ 3
|
||||
CSH.TYPE.FLOAT .EQ 4
|
||||
*--------------------------------------
|
||||
CSH.Init >LDYAI 256
|
||||
>SYSCALL GetMemYA
|
||||
bcs .9
|
||||
txa
|
||||
ldy #CSH.hSymbols
|
||||
sta (pData),y
|
||||
|
||||
lda #0
|
||||
ldy #CSH.SymbolsPtr
|
||||
sta (pData),y
|
||||
|
||||
>LDYAI 256
|
||||
>SYSCALL GetMemYA
|
||||
bcs .9
|
||||
txa
|
||||
ldy #CSH.hData
|
||||
sta (pData),y
|
||||
|
||||
lda #0
|
||||
ldy #CSH.DataPtr
|
||||
sta (pData),y
|
||||
|
||||
>LDYAI 256
|
||||
>SYSCALL GetMemYA
|
||||
@ -16,18 +39,16 @@ CSH.Reset ldy #CSH.hStack
|
||||
ldy #CSH.hStack
|
||||
sta (pData),y
|
||||
|
||||
.1 lda #0
|
||||
lda #0
|
||||
ldy #CSH.StackPtr
|
||||
sta (pData),y
|
||||
|
||||
* clc
|
||||
.9 rts
|
||||
*--------------------------------------
|
||||
CSH.Exec jsr CSH.GetBuffer
|
||||
CSH.Run jsr CSH.GetBuf
|
||||
|
||||
ldy #CSH.hStack
|
||||
lda (pData),y
|
||||
>SYSCALL GetMemPtrA
|
||||
>STYA ZPCSHStack
|
||||
jsr CSH.GetPtrs
|
||||
|
||||
ldy #0
|
||||
|
||||
@ -68,7 +89,7 @@ CSH.Exec jsr CSH.GetBuffer
|
||||
sta (pData)
|
||||
|
||||
jsr CSH.CheckKeyword
|
||||
bcs .5 not an internal SCRipt keyword....
|
||||
bcs .5 not an internal CSH keyword....
|
||||
|
||||
lda #0
|
||||
sta (pData) Reset Cmdline
|
||||
@ -95,6 +116,81 @@ CSH.Exec jsr CSH.GetBuffer
|
||||
.80 clc
|
||||
.9 rts
|
||||
*--------------------------------------
|
||||
CSH.Quit ldy #CSH.hBuf
|
||||
lda (pData),y
|
||||
beq .1
|
||||
>SYSCALL FreeMemA
|
||||
|
||||
.1 ldy #CSH.hStack
|
||||
|
||||
lda (pData),y
|
||||
beq .2
|
||||
>SYSCALL FreeMemA
|
||||
|
||||
.2 ldy #CSH.hData
|
||||
|
||||
lda (pData),y
|
||||
beq .3
|
||||
>SYSCALL FreeMemA
|
||||
|
||||
.3 ldy #CSH.hSymbols
|
||||
|
||||
lda (pData),y
|
||||
beq .8
|
||||
>SYSCALL FreeMemA
|
||||
|
||||
.8 rts
|
||||
*--------------------------------------
|
||||
CSH.GetBuf ldy #CSH.hBuf
|
||||
lda (pData),y
|
||||
>SYSCALL GetMemPtrA
|
||||
>STYA ZPBufBase
|
||||
|
||||
ldy #CSH.BufLen
|
||||
lda (pData),y
|
||||
clc
|
||||
adc ZPBufBase
|
||||
sta CSH.GetChar.LO+1
|
||||
|
||||
iny
|
||||
lda (pData),y
|
||||
adc ZPBufBase+1
|
||||
sta CSH.GetChar.HI+1
|
||||
|
||||
CSH.SetBufPtr ldy #CSH.BufPtr
|
||||
lda (pData),y
|
||||
clc
|
||||
adc ZPBufBase
|
||||
sta ZPBufPtr
|
||||
|
||||
iny
|
||||
lda (pData),y
|
||||
adc ZPBufBase+1
|
||||
sta ZPBufPtr+1
|
||||
rts
|
||||
*--------------------------------------
|
||||
CSH.GetPtrs ldy #CSH.hSymbols
|
||||
lda (pData),y
|
||||
>SYSCALL GetMemPtrA
|
||||
>STYA ZPCSHSymbols
|
||||
|
||||
ldy #CSH.hData
|
||||
lda (pData),y
|
||||
>SYSCALL GetMemPtrA
|
||||
>STYA ZPCSHData
|
||||
|
||||
ldy #CSH.hStack
|
||||
lda (pData),y
|
||||
>SYSCALL GetMemPtrA
|
||||
>STYA ZPCSHStack
|
||||
rts
|
||||
*--------------------------------------
|
||||
CSH.SavePtr ldx ZPBufPtr
|
||||
stx CSH.BufPtrSave
|
||||
ldx ZPBufPtr+1
|
||||
stx CSH.BufPtrSave+1
|
||||
rts
|
||||
*--------------------------------------
|
||||
CSH.CheckKeyword
|
||||
phy
|
||||
>LDYA L.CSHCMDS
|
||||
@ -142,40 +238,6 @@ CSH.CheckKeyword
|
||||
sec
|
||||
rts
|
||||
*--------------------------------------
|
||||
CSH.GetBuffer ldy #CSH.hBuf
|
||||
lda (pData),y
|
||||
>SYSCALL GetMemPtrA
|
||||
>STYA ZPBufBase
|
||||
|
||||
ldy #CSH.BufLen
|
||||
lda (pData),y
|
||||
clc
|
||||
adc ZPBufBase
|
||||
sta ZPBufEnd
|
||||
|
||||
iny
|
||||
lda (pData),y
|
||||
adc ZPBufBase+1
|
||||
sta ZPBufEnd+1
|
||||
|
||||
CSH.SetBufPtr ldy #CSH.BufPtr
|
||||
lda (pData),y
|
||||
clc
|
||||
adc ZPBufBase
|
||||
sta ZPBufPtr
|
||||
|
||||
iny
|
||||
lda (pData),y
|
||||
adc ZPBufBase+1
|
||||
sta ZPBufPtr+1
|
||||
rts
|
||||
*--------------------------------------
|
||||
CSH.SavePtr ldx ZPBufPtr
|
||||
stx CSH.BufPtrSave
|
||||
ldx ZPBufPtr+1
|
||||
stx CSH.BufPtrSave+1
|
||||
rts
|
||||
*--------------------------------------
|
||||
CSH.WHILE
|
||||
CSH.IF jsr CSH.GetCharNB
|
||||
bcs .9
|
||||
@ -271,18 +333,69 @@ CSH.CONTINUE
|
||||
sec
|
||||
rts
|
||||
*--------------------------------------
|
||||
CSH.ExpEval stz CSH.ACC
|
||||
stz CSH.ACC+1
|
||||
stz CSH.ACC+2
|
||||
stz CSH.ACC+3
|
||||
CSH.CHAR lda #CSH.TYPE.CHAR
|
||||
bra CSH.TYPE
|
||||
CSH.INT lda #CSH.TYPE.INT
|
||||
bra CSH.TYPE
|
||||
CSH.LONG lda #CSH.TYPE.LONG
|
||||
bra CSH.TYPE
|
||||
CSH.FLOAT lda #CSH.TYPE.FLOAT
|
||||
|
||||
CSH.TYPE sta CSH.ACCT
|
||||
|
||||
jsr CSH.GetChar
|
||||
bcs .9
|
||||
cmp #' '
|
||||
bne .9
|
||||
|
||||
jsr CSH.GetIdentInCMD
|
||||
bcs .9
|
||||
|
||||
jsr CSH.GetCharNB
|
||||
bcs .9
|
||||
cmp #';'
|
||||
beq .8 end of declaration, no value...
|
||||
|
||||
cmp #'='
|
||||
bne .9
|
||||
|
||||
jsr CSH.GetNextCharNB
|
||||
bcs .9
|
||||
|
||||
jsr CSH.ExpEval
|
||||
bcs .9
|
||||
|
||||
jsr CSH.GetChar
|
||||
bcs .9
|
||||
cmp #';'
|
||||
bne .9
|
||||
|
||||
.8 jsr CSH.AddVar
|
||||
bcs .99
|
||||
|
||||
jsr CSH.GetNextCharNB Skip ;
|
||||
clc
|
||||
rts
|
||||
|
||||
.9 lda #CSHERR.SYNTAX
|
||||
sec
|
||||
.99 rts
|
||||
*--------------------------------------
|
||||
|
||||
lda #CSHERR.SYNTAX
|
||||
sec
|
||||
rts
|
||||
*--------------------------------------
|
||||
CSH.ExpEval jsr CSH.ZeroACC
|
||||
|
||||
ldy #0
|
||||
|
||||
jsr CSH.GetCharNB
|
||||
>DEBUG
|
||||
bcs .9
|
||||
cmp #')'
|
||||
beq .8
|
||||
cmp #';'
|
||||
beq .8
|
||||
|
||||
jsr CSH.IsLetter Fnc or Var ?
|
||||
bcs .1
|
||||
@ -303,24 +416,46 @@ CSH.ExpEval stz CSH.ACC
|
||||
sec
|
||||
.99 rts
|
||||
*--------------------------------------
|
||||
CSH.GetIdentInCMD
|
||||
ldy #0
|
||||
|
||||
jsr CSH.GetNextCharNB
|
||||
bcs .9
|
||||
jsr CSH.IsLetter
|
||||
bcs .9
|
||||
|
||||
.1 iny
|
||||
sta CMD,y
|
||||
jsr CSH.GetNextChar
|
||||
bcs .8
|
||||
|
||||
jsr CSH.IsLetterOrDigit
|
||||
bcc .1
|
||||
|
||||
.8 sty CMD
|
||||
clc
|
||||
rts
|
||||
|
||||
.9 lda #CSHERR.SYNTAX
|
||||
sec
|
||||
rts
|
||||
*--------------------------------------
|
||||
CSH.GetNumInACC ldy #0
|
||||
|
||||
.1 iny
|
||||
cpy #10
|
||||
beq .9
|
||||
|
||||
sta (pData),y
|
||||
|
||||
jsr CSH.GetNextChar
|
||||
sta ARGS,y
|
||||
jsr CSH.GetNextChar
|
||||
bcs .8
|
||||
jsr CSH.IsDigit
|
||||
bcc .1
|
||||
|
||||
.8 tya
|
||||
sta (pData)
|
||||
.8 sty ARGS
|
||||
|
||||
>PUSHW pData
|
||||
>PUSHW L.CSH.ACC
|
||||
>PUSHW L.ARGS
|
||||
>SYSCALL AToI
|
||||
bcs .9
|
||||
rts
|
||||
@ -329,6 +464,156 @@ CSH.GetNumInACC ldy #0
|
||||
sec
|
||||
rts
|
||||
*--------------------------------------
|
||||
CSH.ZeroACC stz CSH.ACC
|
||||
stz CSH.ACC+1
|
||||
stz CSH.ACC+2
|
||||
stz CSH.ACC+3
|
||||
rts
|
||||
*--------------------------------------
|
||||
* Vars...
|
||||
*--------------------------------------
|
||||
CSH.AddVar jsr CSH.FindVar
|
||||
bcc .97
|
||||
|
||||
ldy #CSH.SymbolsPtr
|
||||
lda (pData),y
|
||||
|
||||
sec
|
||||
adc ARGS
|
||||
bcs .99
|
||||
|
||||
adc #2 TYPE + OFS
|
||||
bcs .99
|
||||
|
||||
ldy #CSH.DataPtr
|
||||
lda (pData),y
|
||||
pha
|
||||
|
||||
ldx CSH.ACCT
|
||||
* clc
|
||||
adc CSH.TSIZE,x
|
||||
bcs .98
|
||||
|
||||
ldx #$ff
|
||||
|
||||
ldy #CSH.SymbolsPtr
|
||||
lda (pData),y
|
||||
tay
|
||||
|
||||
.10 inx
|
||||
lda CMD,x
|
||||
sta (ZPCSHSymbols),y
|
||||
iny
|
||||
cpx CMD
|
||||
bne .10
|
||||
|
||||
lda CSH.ACCT
|
||||
sta (ZPCSHSymbols),y
|
||||
|
||||
iny
|
||||
pla Get Back Data OFS
|
||||
pha
|
||||
sta (ZPCSHSymbols),y
|
||||
iny
|
||||
|
||||
tya
|
||||
ldy #CSH.SymbolsPtr
|
||||
sta (pData),y
|
||||
|
||||
ply Get Back Data OFS again
|
||||
|
||||
ldx CSH.ACCT
|
||||
lda CSH.TSIZE,x
|
||||
|
||||
ldx #0
|
||||
|
||||
.1 pha
|
||||
lda CSH.ACC,x
|
||||
sta (ZPCSHData),y
|
||||
iny
|
||||
inx
|
||||
pla
|
||||
dec
|
||||
bne .1
|
||||
|
||||
tya
|
||||
ldy #CSH.DataPtr
|
||||
sta (pData),y
|
||||
|
||||
clc
|
||||
rts
|
||||
|
||||
.97 lda #CSHERR.DUP
|
||||
sec
|
||||
rts
|
||||
|
||||
.98 pla
|
||||
.99 lda #CSHERR.OOM
|
||||
sec
|
||||
rts
|
||||
*--------------------------------------
|
||||
CSH.SetVar
|
||||
|
||||
clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
CSH.GetVar
|
||||
|
||||
clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
CSH.FindVar >LDYA ZPCSHSymbols
|
||||
>STYA ZPPTR1
|
||||
|
||||
.1 ldy #0
|
||||
|
||||
lda (ZPPTR1),y
|
||||
beq .9
|
||||
|
||||
cmp CMD
|
||||
bne .4
|
||||
|
||||
pha Save Name len...
|
||||
|
||||
ldx #0
|
||||
|
||||
.2 iny
|
||||
inx
|
||||
lda (ZPPTR1),y
|
||||
cmp CMD,x
|
||||
bne .3
|
||||
|
||||
cpx CMD
|
||||
bne .2
|
||||
|
||||
pla
|
||||
sec
|
||||
adc ZPPTR1
|
||||
sta ZPPTR1
|
||||
bcc .8
|
||||
inc ZPPTR1+1
|
||||
|
||||
clc
|
||||
.8 rts
|
||||
|
||||
.3 pla
|
||||
.4 sec
|
||||
adc ZPPTR1
|
||||
bcc .5
|
||||
inc ZPPTR1+1
|
||||
clc
|
||||
|
||||
.5 adc #2 Skip Type+OFS
|
||||
sta ZPPTR1
|
||||
bcc .1
|
||||
inc ZPPTR1+1
|
||||
bra .1
|
||||
|
||||
.9 sec
|
||||
rts
|
||||
*--------------------------------------
|
||||
* Stack
|
||||
*--------------------------------------
|
||||
CSH.Push pha
|
||||
ldy #CSH.StackPtr
|
||||
lda (pData),y
|
||||
@ -383,6 +668,8 @@ CSH.CheckStack pha
|
||||
sec
|
||||
rts
|
||||
*--------------------------------------
|
||||
* CHAR related Subs.....
|
||||
*--------------------------------------
|
||||
CSH.GetCharNB jsr CSH.GetChar
|
||||
bcs CSH.GetNextCharNB.RTS
|
||||
jsr CSH.CheckCharNB
|
||||
@ -426,18 +713,18 @@ CSH.GetNextChar phy
|
||||
inc ZPBufPtr+1
|
||||
*--------------------------------------
|
||||
CSH.GetChar lda ZPBufPtr
|
||||
eor ZPBufEnd
|
||||
bne .1
|
||||
CSH.GetChar.LO eor #$ff Self Modified
|
||||
bne CSH.GetChar.8
|
||||
|
||||
lda ZPBufPtr+1
|
||||
eor ZPBufEnd+1
|
||||
bne .1
|
||||
CSH.GetChar.HI eor #$ff Self Modified
|
||||
bne CSH.GetChar.8
|
||||
|
||||
lda #MLI.ERR.EOF
|
||||
sec
|
||||
rts
|
||||
|
||||
.1 lda (ZPBufPtr)
|
||||
CSH.GetChar.8 lda (ZPBufPtr)
|
||||
clc
|
||||
rts
|
||||
*---------------------------------------
|
||||
|
@ -15,9 +15,10 @@ AUTO 6
|
||||
ZPPTR1 .EQ ZPBIN
|
||||
ZPPTR2 .EQ ZPBIN+2
|
||||
ZPPTR3 .EQ ZPBIN+4
|
||||
ZPBufBase .EQ ZPBIN+8
|
||||
ZPBufPtr .EQ ZPBIN+10
|
||||
ZPBufEnd .EQ ZPBIN+12
|
||||
ZPBufBase .EQ ZPBIN+6
|
||||
ZPBufPtr .EQ ZPBIN+8
|
||||
ZPCSHSymbols .EQ ZPBIN+10
|
||||
ZPCSHData .EQ ZPBIN+12
|
||||
ZPCSHStack .EQ ZPBIN+14
|
||||
*--------------------------------------
|
||||
CmdLine.MAX .EQ 127
|
||||
@ -26,6 +27,9 @@ CSH.Stack.MAX .EQ 15
|
||||
CSHERR.SYNTAX .EQ $7F
|
||||
CSHERR.SOVERFLW .EQ $7E
|
||||
CSHERR.NOVERFLW .EQ $7D
|
||||
CSHERR.OOM .EQ $7C
|
||||
CSHERR.DUP .EQ $7B
|
||||
CSHERR.UNDEF .EQ $7A
|
||||
*--------------------------------------
|
||||
* File Header (16 Bytes)
|
||||
*--------------------------------------
|
||||
@ -78,6 +82,10 @@ J.CSHCMDS .DA CSH.IF
|
||||
.DA CSH.WHILE
|
||||
.DA CSH.BREAK
|
||||
.DA CSH.CONTINUE
|
||||
.DA CSH.CHAR
|
||||
.DA CSH.INT
|
||||
.DA CSH.LONG
|
||||
.DA CSH.FLOAT
|
||||
J.CSHCMDS.END .DA CSH.IF.END
|
||||
.DA CSH.WHILE.END
|
||||
L.CSH.ACC .DA CSH.ACC
|
||||
@ -121,7 +129,7 @@ CS.INIT jsr SetPWD
|
||||
lda #$FF
|
||||
sta (pData),y
|
||||
|
||||
jmp CSH.Reset
|
||||
jmp CSH.Init
|
||||
|
||||
.1 jsr HIS.Init
|
||||
bcs .9
|
||||
@ -239,13 +247,16 @@ CS.RUN.READ lda #0
|
||||
plp
|
||||
rts
|
||||
*--------------------------------------
|
||||
CS.RUN.BATCH jsr CSH.Exec
|
||||
CS.RUN.BATCH jsr CSH.Run
|
||||
bcs .9
|
||||
|
||||
jsr Cmd.Normalize
|
||||
lda (pData)
|
||||
beq .8 Empty line....nothing to do....
|
||||
|
||||
jsr Cmd.Normalize
|
||||
lda (pData)
|
||||
beq .8
|
||||
|
||||
>LDYA pData
|
||||
jsr Cmd.ExecYA
|
||||
|
||||
@ -255,9 +266,12 @@ CS.RUN.BATCH jsr CSH.Exec
|
||||
rts
|
||||
|
||||
.9 cmp #MLI.ERR.EOF
|
||||
beq .98
|
||||
bne .7
|
||||
lda #0
|
||||
sec
|
||||
rts
|
||||
|
||||
pha
|
||||
.7 pha
|
||||
|
||||
ldy #CSH.BufPtr+1
|
||||
>PUSHB (pData),y
|
||||
@ -454,18 +468,9 @@ CS.CHARIN.CTRL cpx #13 CR
|
||||
*--------------------------------------
|
||||
CS.QUIT jsr HIS.Quit
|
||||
|
||||
ldy #CSH.hBuf
|
||||
lda (pData),y
|
||||
beq .1
|
||||
>SYSCALL FreeMemA
|
||||
jsr CSH.Quit
|
||||
|
||||
.1 ldy #CSH.hStack
|
||||
|
||||
lda (pData),y
|
||||
beq .8
|
||||
>SYSCALL FreeMemA
|
||||
|
||||
.8 clc
|
||||
clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
CheckSleep ldy #Sleep+3
|
||||
@ -541,6 +546,10 @@ CSHCMDS >PSTR "IF"
|
||||
>PSTR "WHILE"
|
||||
>PSTR "BREAK"
|
||||
>PSTR "CONTINUE"
|
||||
>PSTR "CHAR"
|
||||
>PSTR "INT"
|
||||
>PSTR "LONG"
|
||||
>PSTR "FLOAT"
|
||||
.HS 00
|
||||
*--------------------------------------
|
||||
MSG.GREETINGS >PSTR "\r\nA2osX-Shell\r\n\r\n"
|
||||
@ -561,8 +570,11 @@ ARGS .BS 256
|
||||
TIME .BS S.TIME
|
||||
STAT .BS S.STAT
|
||||
bStartProc .BS 1
|
||||
CSH.ACC .BS 4
|
||||
CSH.ARG .BS 4
|
||||
CSH.TSIZE .HS 0001020405 00,CHAR,INT,LONG,FLOAT....
|
||||
CSH.ACCT .BS 1
|
||||
CSH.ACC .BS 5
|
||||
CSH.ARGT .BS 1
|
||||
CSH.ARG .BS 5
|
||||
*--------------------------------------
|
||||
.DUMMY
|
||||
.OR 0
|
||||
@ -582,11 +594,14 @@ Sleep .BS 4
|
||||
CSH.hBuf .BS 1
|
||||
CSH.BufPtr .BS 2
|
||||
CSH.BufLen .BS 2
|
||||
CSH.CmdSave .BS 1
|
||||
CSH.SepSave .BS 1
|
||||
CSH.BufPtrSave .BS 2
|
||||
CSH.hSymbols .BS 1
|
||||
CSH.SymbolsPtr .BS 1
|
||||
CSH.hData .BS 1
|
||||
CSH.DataPtr .BS 1
|
||||
CSH.hStack .BS 1
|
||||
CSH.StackPtr .BS 1
|
||||
CSH.CmdSave .BS 1
|
||||
DS.END .ED
|
||||
*--------------------------------------
|
||||
MAN
|
||||
|
Loading…
Reference in New Issue
Block a user