mirror of
https://github.com/A2osX/A2osX.git
synced 2025-01-11 10:29:46 +00:00
Kernel 0.93+
This commit is contained in:
parent
b5068a2b60
commit
5cd7a80c78
Binary file not shown.
@ -91,6 +91,7 @@ CSH.STYPES >PSTR "char"
|
||||
>PSTR "int"
|
||||
>PSTR "long"
|
||||
* .HS 00
|
||||
*--------------------------------------
|
||||
CSH.TYPESIZE .HS 0001020401020405 VOID,CHAR,INT,LONG,UCHAR,UINT,ULONG,FLOAT....
|
||||
*--------------------------------------
|
||||
* int printf ( const char * format, ... );
|
||||
|
@ -21,6 +21,22 @@ J.CSH.BOPS .DA CSH.BOPS.ADD
|
||||
.DA CSH.BOPS.EOR
|
||||
.DA CSH.BOPS.LAND
|
||||
.DA CSH.BOPS.LOR
|
||||
J.CSH.BOPS.ADDt .DA CSH.TMISSMATCH
|
||||
.DA CSH.BOPS.ADDi8
|
||||
.DA CSH.BOPS.ADDi16
|
||||
.DA CSH.BOPS.ADDi32
|
||||
.DA CSH.BOPS.ADDu8
|
||||
.DA CSH.BOPS.ADDu16
|
||||
.DA CSH.BOPS.ADDu32
|
||||
.DA CSH.BOPS.ADDf
|
||||
J.CSH.BOPS.SUBt .DA CSH.TMISSMATCH
|
||||
.DA CSH.BOPS.SUBi8
|
||||
.DA CSH.BOPS.SUBi16
|
||||
.DA CSH.BOPS.SUBi32
|
||||
.DA CSH.BOPS.SUBu8
|
||||
.DA CSH.BOPS.SUBu16
|
||||
.DA CSH.BOPS.SUBu32
|
||||
.DA CSH.BOPS.SUBf
|
||||
L.CSH.FN .DA CSH.FN
|
||||
L.CSH.KW .DA CSH.KW
|
||||
L.CSH.STYPES .DA CSH.STYPES
|
||||
@ -42,8 +58,8 @@ J.CSH.STYPES .DA CSH.CHAR
|
||||
J.CSH.UTYPES .DA CSH.UCHAR
|
||||
.DA CSH.UINT
|
||||
.DA CSH.ULONG
|
||||
J.CSH.KW.START .DA CSH.IF.START
|
||||
.DA CSH.WHILE.START
|
||||
*J.CSH.KW.START .DA CSH.IF.START
|
||||
* .DA CSH.WHILE.START
|
||||
J.CSH.KW.END .DA CSH.IF.END
|
||||
.DA CSH.WHILE.END
|
||||
*--------------------------------------
|
||||
|
@ -70,7 +70,11 @@ CSH.Run.1 cmp #'#'
|
||||
jsr CSH.CheckStack must be something on stack....
|
||||
bcs .9
|
||||
|
||||
jsr CSH.Pop was expected, get stacked Cmd...
|
||||
jsr CSH.GetNextCharNB Skip '}'
|
||||
|
||||
jsr CSH.Pop was expected....
|
||||
|
||||
jsr CSH.Pop get stacked Cmd...
|
||||
tax
|
||||
jmp (J.CSH.KW.END,x)
|
||||
|
||||
@ -141,9 +145,9 @@ CSH.Run.1 cmp #'#'
|
||||
* Built in Keywords
|
||||
*--------------------------------------
|
||||
CSH.KW.JMP txa
|
||||
>STA.G CSH.CmdSave
|
||||
>STA.G CSH.CmdSave
|
||||
jmp (J.CSH.KW,x)
|
||||
|
||||
*--------------------------------------
|
||||
CSH.WHILE
|
||||
CSH.IF jsr CSH.GetCharNB
|
||||
bcs .9
|
||||
@ -169,11 +173,22 @@ CSH.IF jsr CSH.GetCharNB
|
||||
|
||||
jsr CSH.GetNextCharNB Skip '{'
|
||||
bcs .99
|
||||
|
||||
|
||||
jsr CSH.IsValue0 X = var type from ExpEval
|
||||
bcc .6 Value=0, skip {{....}}
|
||||
|
||||
>LDA.G CSH.CmdSave
|
||||
beq .1 IF
|
||||
|
||||
pha
|
||||
>LDA.G CSH.BufPtrSave+1 WHILE : push loop address...
|
||||
jsr CSH.Push
|
||||
>LDA.G CSH.BufPtrSave
|
||||
jsr CSH.Push
|
||||
pla
|
||||
|
||||
.1 jsr CSH.Push
|
||||
bcs .99
|
||||
|
||||
lda #'}' Tell '}' is expected at the end of block
|
||||
jsr CSH.Push
|
||||
@ -181,29 +196,31 @@ CSH.IF jsr CSH.GetCharNB
|
||||
|
||||
rts
|
||||
|
||||
.6 jmp CSH.SkipBlock
|
||||
.6 jsr CSH.SkipBlock
|
||||
|
||||
bcc .99
|
||||
|
||||
|
||||
.9 lda #CSH.E.SYNTAX
|
||||
sec
|
||||
.99 rts
|
||||
*--------------------------------------
|
||||
CSH.Keyword.Start
|
||||
>LDA.G CSH.CmdSave get back Token ("IF" or "WHILE")
|
||||
tax
|
||||
jmp (J.CSH.KW.START,x)
|
||||
*CSH.Keyword.Start
|
||||
* >LDA.G CSH.CmdSave get back Token ("IF" or "WHILE")
|
||||
* tax
|
||||
* jmp (J.CSH.KW.START,x)
|
||||
*--------------------------------------
|
||||
CSH.IF.START jmp CSH.Push Push "IF" Token
|
||||
*CSH.IF.START jmp CSH.Push Push "IF" Token
|
||||
*--------------------------------------
|
||||
CSH.WHILE.START pha
|
||||
>LDA.G CSH.BufPtrSave+1 WHILE : push loop address...
|
||||
jsr CSH.Push
|
||||
>LDA.G CSH.BufPtrSave
|
||||
jsr CSH.Push
|
||||
pla
|
||||
jmp CSH.Push Push "WHILE" Token
|
||||
*CSH.WHILE.START pha
|
||||
* >LDA.G CSH.BufPtrSave+1 WHILE : push loop address...
|
||||
* jsr CSH.Push
|
||||
* >LDA.G CSH.BufPtrSave
|
||||
* jsr CSH.Push
|
||||
* pla
|
||||
* jmp CSH.Push Push "WHILE" Token
|
||||
*--------------------------------------
|
||||
CSH.IF.END jsr CSH.GetNextChar just skip ending '}'
|
||||
clc
|
||||
CSH.IF.END clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
CSH.WHILE.END jsr CSH.Pop
|
||||
@ -580,7 +597,7 @@ CSH.ExpEval ldx ZPPtr1
|
||||
* Old OP has precedence, compute ACC=ARG <BOP> ACC
|
||||
.6 lda ZPPtr2 Var Type
|
||||
ldx ZPPtr2+1 BOP
|
||||
jsr CSH.Compute
|
||||
jsr CSH.BOPExec
|
||||
bcs .99
|
||||
|
||||
jsr CSH.GetCharNB
|
||||
@ -591,7 +608,7 @@ CSH.ExpEval ldx ZPPtr1
|
||||
bmi .80
|
||||
|
||||
lda ZPPtr2 Var Type
|
||||
jsr CSH.Compute
|
||||
jsr CSH.BOPExec
|
||||
bcc .80
|
||||
bcs .99
|
||||
|
||||
@ -913,17 +930,18 @@ CSH.GetVarValueOnStack
|
||||
bne .2
|
||||
|
||||
clc X = Var Type
|
||||
rts
|
||||
|
||||
.99 lda #CSH.E.TMISMATCH
|
||||
sec
|
||||
.9 rts
|
||||
|
||||
.99
|
||||
*--------------------------------------
|
||||
CSH.TMISSMATCH lda #CSH.E.TMISMATCH
|
||||
sec
|
||||
rts
|
||||
*--------------------------------------
|
||||
* Input : Value on Stack, X = Var Type
|
||||
* Output : CC = true, CS = false
|
||||
*--------------------------------------
|
||||
CSH.IsValue0 >DEBUG
|
||||
cpx #CSH.T.FLOAT
|
||||
CSH.IsValue0 cpx #CSH.T.FLOAT
|
||||
bcc .1 char,int,long
|
||||
|
||||
ldy CSH.TYPESIZE,x
|
||||
@ -950,31 +968,85 @@ CSH.IsValue0 >DEBUG
|
||||
.9 sec
|
||||
rts
|
||||
*--------------------------------------
|
||||
CSH.Compute jmp (J.CSH.BOPS,x)
|
||||
* A = Type, X = OP
|
||||
*--------------------------------------
|
||||
CSH.BOPS.ADD cmp #CSH.T.FLOAT
|
||||
beq .8
|
||||
|
||||
CSH.BOPExec jmp (J.CSH.BOPS,x)
|
||||
*--------------------------------------
|
||||
CSH.BOPS.ADD asl
|
||||
tax
|
||||
jmp (J.CSH.BOPS.ADDt,x)
|
||||
|
||||
clc
|
||||
rts
|
||||
|
||||
.8 >FPU FADD
|
||||
clc
|
||||
rts
|
||||
|
||||
|
||||
CSH.BOPS.SUB cmp #CSH.T.FLOAT
|
||||
beq .8
|
||||
|
||||
|
||||
clc
|
||||
rts
|
||||
|
||||
.8 >FPU FSUB
|
||||
CSH.BOPS.ADDi8
|
||||
CSH.BOPS.ADDu8 clc
|
||||
>PULLA
|
||||
adc (pStack)
|
||||
sta (pStack)
|
||||
clc
|
||||
rts
|
||||
|
||||
|
||||
CSH.BOPS.ADDi16
|
||||
CSH.BOPS.ADDu16 clc
|
||||
ldy #1
|
||||
>PULLA
|
||||
adc (pStack),y
|
||||
sta (pStack),y
|
||||
>PULLA
|
||||
adc (pStack),y
|
||||
sta (pStack),y
|
||||
clc
|
||||
rts
|
||||
|
||||
CSH.BOPS.ADDi32
|
||||
CSH.BOPS.ADDu32 >FPU ADD32
|
||||
clc
|
||||
rts
|
||||
|
||||
CSH.BOPS.ADDf >FPU FADD
|
||||
clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
CSH.BOPS.SUB asl
|
||||
tax
|
||||
jmp (J.CSH.BOPS.SUBt,x)
|
||||
|
||||
CSH.BOPS.SUBi8
|
||||
CSH.BOPS.SUBu8 sec
|
||||
ldy #1
|
||||
lda (pStack),y
|
||||
sbc (pStack)
|
||||
sta (pStack),y
|
||||
inc pStack
|
||||
clc
|
||||
rts
|
||||
|
||||
|
||||
CSH.BOPS.SUBi16
|
||||
CSH.BOPS.SUBu16 sec
|
||||
ldy #2
|
||||
lda (pStack),y
|
||||
sbc (pStack)
|
||||
sta (pStack),y
|
||||
|
||||
iny
|
||||
lda (pStack),y
|
||||
ldy #1
|
||||
sbc (pStack),y
|
||||
inc pStack
|
||||
inc pStack
|
||||
sta (pStack),y
|
||||
clc
|
||||
rts
|
||||
|
||||
CSH.BOPS.SUBi32
|
||||
CSH.BOPS.SUBu32 >FPU SUB32
|
||||
clc
|
||||
rts
|
||||
|
||||
CSH.BOPS.SUBf >FPU FSUB
|
||||
clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
CSH.BOPS.MUL cmp #CSH.T.FLOAT
|
||||
beq .8
|
||||
|
||||
@ -986,6 +1058,7 @@ CSH.BOPS.MUL cmp #CSH.T.FLOAT
|
||||
clc
|
||||
rts
|
||||
|
||||
*--------------------------------------
|
||||
CSH.BOPS.DIV cmp #CSH.T.FLOAT
|
||||
beq .8
|
||||
|
||||
@ -996,6 +1069,7 @@ CSH.BOPS.DIV cmp #CSH.T.FLOAT
|
||||
.8 >FPU FDIV
|
||||
clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
CSH.BOPS.MOD
|
||||
CSH.BOPS.SHL
|
||||
CSH.BOPS.SHR
|
||||
@ -1089,22 +1163,43 @@ CSH.GetIDLen ldy #0
|
||||
.8 tya
|
||||
rts
|
||||
*--------------------------------------
|
||||
CSH.SkipBlock ldx #1 expecting 1 '}' for now....
|
||||
CSH.SkipStatement
|
||||
|
||||
clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
CSH.SkipBlock ldy #0 not in "", TOTO:skip comments
|
||||
|
||||
ldx #1 starting with 1 '{' for now....
|
||||
|
||||
.1 jsr CSH.GetNextCharNB
|
||||
bcs .9
|
||||
|
||||
cmp #'{'
|
||||
bne .2
|
||||
|
||||
tya
|
||||
bmi .1
|
||||
|
||||
inx
|
||||
bra .1
|
||||
|
||||
.2 cmp #'}'
|
||||
bne .1
|
||||
txa
|
||||
beq .9
|
||||
bne .3
|
||||
|
||||
tya
|
||||
bmi .1
|
||||
|
||||
dex
|
||||
bne .1
|
||||
|
||||
.3 cmp #'"'
|
||||
bne .1
|
||||
tya
|
||||
eor #$ff
|
||||
tay
|
||||
bra .1
|
||||
|
||||
jmp CSH.GetNextCharNB skip '}'
|
||||
|
||||
.9 rts
|
||||
|
124
BIN/CSH.S.txt
124
BIN/CSH.S.txt
@ -31,6 +31,8 @@ ZPVarID .BS 2
|
||||
ZPVarData .BS 6
|
||||
ZPVarType .BS 1
|
||||
|
||||
ArgIndex .BS 1
|
||||
|
||||
ZS.END .ED
|
||||
*--------------------------------------
|
||||
* File Header (16 Bytes)
|
||||
@ -56,7 +58,7 @@ CS.START cld
|
||||
L.MSG.GREETINGS .DA MSG.GREETINGS
|
||||
L.MSG.USAGE .DA MSG.USAGE
|
||||
L.MSG.ECHOCRLF .DA MSG.ECHOCRLF
|
||||
L.MSG.HEXWORD .DA MSG.HEXWORD
|
||||
L.MSG.DEBUG .DA MSG.DEBUG
|
||||
L.MSG.ERR .DA MSG.ERR
|
||||
.INB USR/SRC/BIN/CSH.R
|
||||
.DA 0
|
||||
@ -65,50 +67,36 @@ L.MSG.ERR .DA MSG.ERR
|
||||
* Put code for loading LIB here
|
||||
*--------------------------------------
|
||||
CS.INIT clc
|
||||
rts
|
||||
CS.INIT.RTS rts
|
||||
*--------------------------------------
|
||||
* Called until exit with CS
|
||||
* if RUN exits with CC, RN entered again
|
||||
*--------------------------------------
|
||||
CS.RUN lda #$ff
|
||||
>STA.G bTrace
|
||||
|
||||
>PUSHWI K.VER
|
||||
CS.RUN >PUSHWI K.VER
|
||||
>PUSHBI 2
|
||||
>LDYA L.MSG.GREETINGS
|
||||
>SYSCALL printf
|
||||
bcs .99
|
||||
bcs CS.INIT.RTS
|
||||
|
||||
jsr CS.RUN.ARGS
|
||||
bcs CS.INIT.RTS
|
||||
|
||||
jsr CSH.Init
|
||||
bcs .99
|
||||
|
||||
ldy #S.PS.ARGC
|
||||
lda (pPS),y
|
||||
beq .90 no arg, usage
|
||||
|
||||
>PUSHWZ Aux type
|
||||
>PUSHBI S.FI.T.TXT
|
||||
>PUSHBI O.RDONLY
|
||||
lda #1
|
||||
>SYSCALL ArgV
|
||||
>SYSCALL LoadTxtFile
|
||||
bcs .99
|
||||
|
||||
txa
|
||||
>STA.G hFileBuf
|
||||
>SYSCALL GetMemPtr
|
||||
>STYA ZPFileBuf
|
||||
>STYA ZPFileBufPtr
|
||||
bcs CS.INIT.RTS
|
||||
|
||||
.1 >SLEEP
|
||||
|
||||
>LDA.G bTrace
|
||||
>LDA.G bDebug
|
||||
bpl .2
|
||||
jsr PrintDebugMsg
|
||||
|
||||
.2 >LDA.G bTrace
|
||||
bpl .3
|
||||
|
||||
>LDYA ZPFileBufPtr
|
||||
jsr PrintTraceMsg
|
||||
|
||||
.2 jsr CSH.Run
|
||||
.3 jsr CSH.Run
|
||||
bcc .1
|
||||
|
||||
cmp #MLI.E.EOF
|
||||
@ -123,6 +111,56 @@ CS.RUN lda #$ff
|
||||
.8 lda #0 Exit Code = Success
|
||||
sec
|
||||
rts
|
||||
*--------------------------------------
|
||||
CS.RUN.ARGS inc ArgIndex
|
||||
|
||||
lda ArgIndex
|
||||
>SYSCALL ARGV
|
||||
bcs .7
|
||||
|
||||
>STYA ZPPtr1
|
||||
lda (ZPPtr1)
|
||||
cmp #'-'
|
||||
bne .4
|
||||
|
||||
ldy #1
|
||||
lda (ZPPtr1),y
|
||||
ldx #OptionVars-OptionList-1
|
||||
|
||||
.1 cmp OptionList,x
|
||||
beq .2
|
||||
dex
|
||||
bpl .1
|
||||
|
||||
bra .90
|
||||
|
||||
.2 ldy OptionVars,x
|
||||
lda #$ff
|
||||
sta (pData),y
|
||||
bra CS.RUN.ARGS
|
||||
|
||||
.4 >LDA.G hFileBuf
|
||||
bne .90
|
||||
|
||||
>PUSHWZ Aux type
|
||||
>PUSHBI S.FI.T.TXT
|
||||
>PUSHBI O.RDONLY
|
||||
>LDYA ZPPtr1
|
||||
>SYSCALL LoadTxtFile
|
||||
bcs .9
|
||||
|
||||
txa
|
||||
>STA.G hFileBuf
|
||||
>SYSCALL GetMemPtr
|
||||
>STYA ZPFileBuf
|
||||
>STYA ZPFileBufPtr
|
||||
bra CS.RUN.ARGS
|
||||
|
||||
.7 >LDA.G hFileBuf
|
||||
beq .90
|
||||
|
||||
clc
|
||||
rts
|
||||
|
||||
.90 >PUSHBI 0
|
||||
>LDYA L.MSG.USAGE
|
||||
@ -130,17 +168,12 @@ CS.RUN lda #$ff
|
||||
|
||||
lda #E.SYN
|
||||
sec QUIT Process
|
||||
.99 rts
|
||||
*--------------------------------------
|
||||
* Called if option S.PS.F.EVENT enabled in Header
|
||||
* Timer Event : every 10th seconds
|
||||
|
||||
.9 rts
|
||||
*--------------------------------------
|
||||
CS.DOEVENT sec
|
||||
rts
|
||||
*--------------------------------------
|
||||
* Called once, when RUN exited with CS
|
||||
* Put code for unloading LIB here
|
||||
*--------------------------------------
|
||||
CS.QUIT jsr CSH.Quit
|
||||
clc
|
||||
rts
|
||||
@ -207,14 +240,13 @@ PrintErrMsg >LDYA ZPFileBuf
|
||||
|
||||
rts
|
||||
*--------------------------------------
|
||||
PrintTraceMsg >STYA ZPPtr3
|
||||
|
||||
>PUSHW pStack
|
||||
PrintDebugMsg >PUSHW pStack
|
||||
>PUSHBI 2
|
||||
>PUSHW L.MSG.HEXWORD
|
||||
ldy #S.PS.hStdErr
|
||||
lda (pPS),y
|
||||
>SYSCALL fprintf
|
||||
>LDYA L.MSG.DEBUG
|
||||
>SYSCALL printf
|
||||
rts
|
||||
*--------------------------------------
|
||||
PrintTraceMsg >STYA ZPPtr3
|
||||
|
||||
PrintTraceMsg.3 >PUSHBI '>'
|
||||
ldy #S.PS.hStdErr
|
||||
@ -252,14 +284,14 @@ CS.END
|
||||
* Initialized DATA
|
||||
*--------------------------------------
|
||||
MSG.Greetings .AZ "\r\nCSH-Shell %d.%d\r\n\r\n"
|
||||
MSG.USAGE .AS "Usage : CSH file\r\n"
|
||||
MSG.USAGE .AS "Usage : CSH <option> file\r\n"
|
||||
.AS " -D : Debug Mode\r\n"
|
||||
.AS " -T : Trace On"
|
||||
MSG.ECHOCRLF .AZ "\r\n"
|
||||
MSG.HEXWORD .AZ "[%H]"
|
||||
MSG.ERR .AZ " ^\r\nLine #%D:"
|
||||
MSG.DEBUG .AZ "DEBUG:pStack=%H\r\n"
|
||||
MSG.ERR .AZ "^\r\nLine #%D:"
|
||||
*--------------------------------------
|
||||
OptionList >PSTR "DdTt"
|
||||
OptionList .AS "DdTt"
|
||||
OptionVars .DA #bDebug,#bDebug,#bTrace,#bTrace
|
||||
*--------------------------------------
|
||||
.INB USR/SRC/BIN/CSH.I
|
||||
|
Loading…
x
Reference in New Issue
Block a user