Kernel 0.93+

This commit is contained in:
Rémy GIBERT 2019-09-05 17:49:05 +02:00
parent b5068a2b60
commit 5cd7a80c78
5 changed files with 243 additions and 99 deletions

Binary file not shown.

View File

@ -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, ... );

View File

@ -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
*--------------------------------------

View File

@ -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

View File

@ -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