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 "int"
>PSTR "long" >PSTR "long"
* .HS 00 * .HS 00
*--------------------------------------
CSH.TYPESIZE .HS 0001020401020405 VOID,CHAR,INT,LONG,UCHAR,UINT,ULONG,FLOAT.... CSH.TYPESIZE .HS 0001020401020405 VOID,CHAR,INT,LONG,UCHAR,UINT,ULONG,FLOAT....
*-------------------------------------- *--------------------------------------
* int printf ( const char * format, ... ); * 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.EOR
.DA CSH.BOPS.LAND .DA CSH.BOPS.LAND
.DA CSH.BOPS.LOR .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.FN .DA CSH.FN
L.CSH.KW .DA CSH.KW L.CSH.KW .DA CSH.KW
L.CSH.STYPES .DA CSH.STYPES L.CSH.STYPES .DA CSH.STYPES
@ -42,8 +58,8 @@ J.CSH.STYPES .DA CSH.CHAR
J.CSH.UTYPES .DA CSH.UCHAR J.CSH.UTYPES .DA CSH.UCHAR
.DA CSH.UINT .DA CSH.UINT
.DA CSH.ULONG .DA CSH.ULONG
J.CSH.KW.START .DA CSH.IF.START *J.CSH.KW.START .DA CSH.IF.START
.DA CSH.WHILE.START * .DA CSH.WHILE.START
J.CSH.KW.END .DA CSH.IF.END J.CSH.KW.END .DA CSH.IF.END
.DA CSH.WHILE.END .DA CSH.WHILE.END
*-------------------------------------- *--------------------------------------

View File

@ -70,7 +70,11 @@ CSH.Run.1 cmp #'#'
jsr CSH.CheckStack must be something on stack.... jsr CSH.CheckStack must be something on stack....
bcs .9 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 tax
jmp (J.CSH.KW.END,x) jmp (J.CSH.KW.END,x)
@ -141,9 +145,9 @@ CSH.Run.1 cmp #'#'
* Built in Keywords * Built in Keywords
*-------------------------------------- *--------------------------------------
CSH.KW.JMP txa CSH.KW.JMP txa
>STA.G CSH.CmdSave >STA.G CSH.CmdSave
jmp (J.CSH.KW,x) jmp (J.CSH.KW,x)
*--------------------------------------
CSH.WHILE CSH.WHILE
CSH.IF jsr CSH.GetCharNB CSH.IF jsr CSH.GetCharNB
bcs .9 bcs .9
@ -169,11 +173,22 @@ CSH.IF jsr CSH.GetCharNB
jsr CSH.GetNextCharNB Skip '{' jsr CSH.GetNextCharNB Skip '{'
bcs .99 bcs .99
jsr CSH.IsValue0 X = var type from ExpEval jsr CSH.IsValue0 X = var type from ExpEval
bcc .6 Value=0, skip {{....}} 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 lda #'}' Tell '}' is expected at the end of block
jsr CSH.Push jsr CSH.Push
@ -181,29 +196,31 @@ CSH.IF jsr CSH.GetCharNB
rts rts
.6 jmp CSH.SkipBlock .6 jsr CSH.SkipBlock
bcc .99
.9 lda #CSH.E.SYNTAX .9 lda #CSH.E.SYNTAX
sec sec
.99 rts .99 rts
*-------------------------------------- *--------------------------------------
CSH.Keyword.Start *CSH.Keyword.Start
>LDA.G CSH.CmdSave get back Token ("IF" or "WHILE") * >LDA.G CSH.CmdSave get back Token ("IF" or "WHILE")
tax * tax
jmp (J.CSH.KW.START,x) * 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 *CSH.WHILE.START pha
>LDA.G CSH.BufPtrSave+1 WHILE : push loop address... * >LDA.G CSH.BufPtrSave+1 WHILE : push loop address...
jsr CSH.Push * jsr CSH.Push
>LDA.G CSH.BufPtrSave * >LDA.G CSH.BufPtrSave
jsr CSH.Push * jsr CSH.Push
pla * pla
jmp CSH.Push Push "WHILE" Token * jmp CSH.Push Push "WHILE" Token
*-------------------------------------- *--------------------------------------
CSH.IF.END jsr CSH.GetNextChar just skip ending '}' CSH.IF.END clc
clc
rts rts
*-------------------------------------- *--------------------------------------
CSH.WHILE.END jsr CSH.Pop CSH.WHILE.END jsr CSH.Pop
@ -580,7 +597,7 @@ CSH.ExpEval ldx ZPPtr1
* Old OP has precedence, compute ACC=ARG <BOP> ACC * Old OP has precedence, compute ACC=ARG <BOP> ACC
.6 lda ZPPtr2 Var Type .6 lda ZPPtr2 Var Type
ldx ZPPtr2+1 BOP ldx ZPPtr2+1 BOP
jsr CSH.Compute jsr CSH.BOPExec
bcs .99 bcs .99
jsr CSH.GetCharNB jsr CSH.GetCharNB
@ -591,7 +608,7 @@ CSH.ExpEval ldx ZPPtr1
bmi .80 bmi .80
lda ZPPtr2 Var Type lda ZPPtr2 Var Type
jsr CSH.Compute jsr CSH.BOPExec
bcc .80 bcc .80
bcs .99 bcs .99
@ -913,17 +930,18 @@ CSH.GetVarValueOnStack
bne .2 bne .2
clc X = Var Type clc X = Var Type
rts
.99 lda #CSH.E.TMISMATCH
sec
.9 rts .9 rts
.99
*--------------------------------------
CSH.TMISSMATCH lda #CSH.E.TMISMATCH
sec
rts
*-------------------------------------- *--------------------------------------
* Input : Value on Stack, X = Var Type * Input : Value on Stack, X = Var Type
* Output : CC = true, CS = false * Output : CC = true, CS = false
*-------------------------------------- *--------------------------------------
CSH.IsValue0 >DEBUG CSH.IsValue0 cpx #CSH.T.FLOAT
cpx #CSH.T.FLOAT
bcc .1 char,int,long bcc .1 char,int,long
ldy CSH.TYPESIZE,x ldy CSH.TYPESIZE,x
@ -950,31 +968,85 @@ CSH.IsValue0 >DEBUG
.9 sec .9 sec
rts rts
*-------------------------------------- *--------------------------------------
CSH.Compute jmp (J.CSH.BOPS,x) * A = Type, X = OP
*-------------------------------------- *--------------------------------------
CSH.BOPS.ADD cmp #CSH.T.FLOAT CSH.BOPExec jmp (J.CSH.BOPS,x)
beq .8 *--------------------------------------
CSH.BOPS.ADD asl
tax
jmp (J.CSH.BOPS.ADDt,x)
clc CSH.BOPS.ADDi8
rts CSH.BOPS.ADDu8 clc
>PULLA
.8 >FPU FADD adc (pStack)
clc sta (pStack)
rts
CSH.BOPS.SUB cmp #CSH.T.FLOAT
beq .8
clc
rts
.8 >FPU FSUB
clc clc
rts 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 CSH.BOPS.MUL cmp #CSH.T.FLOAT
beq .8 beq .8
@ -986,6 +1058,7 @@ CSH.BOPS.MUL cmp #CSH.T.FLOAT
clc clc
rts rts
*--------------------------------------
CSH.BOPS.DIV cmp #CSH.T.FLOAT CSH.BOPS.DIV cmp #CSH.T.FLOAT
beq .8 beq .8
@ -996,6 +1069,7 @@ CSH.BOPS.DIV cmp #CSH.T.FLOAT
.8 >FPU FDIV .8 >FPU FDIV
clc clc
rts rts
*--------------------------------------
CSH.BOPS.MOD CSH.BOPS.MOD
CSH.BOPS.SHL CSH.BOPS.SHL
CSH.BOPS.SHR CSH.BOPS.SHR
@ -1089,22 +1163,43 @@ CSH.GetIDLen ldy #0
.8 tya .8 tya
rts 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 .1 jsr CSH.GetNextCharNB
bcs .9 bcs .9
cmp #'{' cmp #'{'
bne .2 bne .2
tya
bmi .1
inx inx
bra .1 bra .1
.2 cmp #'}' .2 cmp #'}'
bne .1 bne .3
txa
beq .9 tya
bmi .1
dex dex
bne .1 bne .1
.3 cmp #'"'
bne .1
tya
eor #$ff
tay
bra .1
jmp CSH.GetNextCharNB skip '}' jmp CSH.GetNextCharNB skip '}'
.9 rts .9 rts

View File

@ -31,6 +31,8 @@ ZPVarID .BS 2
ZPVarData .BS 6 ZPVarData .BS 6
ZPVarType .BS 1 ZPVarType .BS 1
ArgIndex .BS 1
ZS.END .ED ZS.END .ED
*-------------------------------------- *--------------------------------------
* File Header (16 Bytes) * File Header (16 Bytes)
@ -56,7 +58,7 @@ CS.START cld
L.MSG.GREETINGS .DA MSG.GREETINGS L.MSG.GREETINGS .DA MSG.GREETINGS
L.MSG.USAGE .DA MSG.USAGE L.MSG.USAGE .DA MSG.USAGE
L.MSG.ECHOCRLF .DA MSG.ECHOCRLF L.MSG.ECHOCRLF .DA MSG.ECHOCRLF
L.MSG.HEXWORD .DA MSG.HEXWORD L.MSG.DEBUG .DA MSG.DEBUG
L.MSG.ERR .DA MSG.ERR L.MSG.ERR .DA MSG.ERR
.INB USR/SRC/BIN/CSH.R .INB USR/SRC/BIN/CSH.R
.DA 0 .DA 0
@ -65,50 +67,36 @@ L.MSG.ERR .DA MSG.ERR
* Put code for loading LIB here * Put code for loading LIB here
*-------------------------------------- *--------------------------------------
CS.INIT clc CS.INIT clc
rts CS.INIT.RTS rts
*-------------------------------------- *--------------------------------------
* Called until exit with CS * Called until exit with CS
* if RUN exits with CC, RN entered again * if RUN exits with CC, RN entered again
*-------------------------------------- *--------------------------------------
CS.RUN lda #$ff CS.RUN >PUSHWI K.VER
>STA.G bTrace
>PUSHWI K.VER
>PUSHBI 2 >PUSHBI 2
>LDYA L.MSG.GREETINGS >LDYA L.MSG.GREETINGS
>SYSCALL printf >SYSCALL printf
bcs .99 bcs CS.INIT.RTS
jsr CS.RUN.ARGS
bcs CS.INIT.RTS
jsr CSH.Init jsr CSH.Init
bcs .99 bcs CS.INIT.RTS
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
.1 >SLEEP .1 >SLEEP
>LDA.G bTrace >LDA.G bDebug
bpl .2 bpl .2
jsr PrintDebugMsg
.2 >LDA.G bTrace
bpl .3
>LDYA ZPFileBufPtr >LDYA ZPFileBufPtr
jsr PrintTraceMsg jsr PrintTraceMsg
.2 jsr CSH.Run .3 jsr CSH.Run
bcc .1 bcc .1
cmp #MLI.E.EOF cmp #MLI.E.EOF
@ -123,6 +111,56 @@ CS.RUN lda #$ff
.8 lda #0 Exit Code = Success .8 lda #0 Exit Code = Success
sec sec
rts 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 .90 >PUSHBI 0
>LDYA L.MSG.USAGE >LDYA L.MSG.USAGE
@ -130,17 +168,12 @@ CS.RUN lda #$ff
lda #E.SYN lda #E.SYN
sec QUIT Process sec QUIT Process
.99 rts
*-------------------------------------- .9 rts
* Called if option S.PS.F.EVENT enabled in Header
* Timer Event : every 10th seconds
*-------------------------------------- *--------------------------------------
CS.DOEVENT sec CS.DOEVENT sec
rts rts
*-------------------------------------- *--------------------------------------
* Called once, when RUN exited with CS
* Put code for unloading LIB here
*--------------------------------------
CS.QUIT jsr CSH.Quit CS.QUIT jsr CSH.Quit
clc clc
rts rts
@ -207,14 +240,13 @@ PrintErrMsg >LDYA ZPFileBuf
rts rts
*-------------------------------------- *--------------------------------------
PrintTraceMsg >STYA ZPPtr3 PrintDebugMsg >PUSHW pStack
>PUSHW pStack
>PUSHBI 2 >PUSHBI 2
>PUSHW L.MSG.HEXWORD >LDYA L.MSG.DEBUG
ldy #S.PS.hStdErr >SYSCALL printf
lda (pPS),y rts
>SYSCALL fprintf *--------------------------------------
PrintTraceMsg >STYA ZPPtr3
PrintTraceMsg.3 >PUSHBI '>' PrintTraceMsg.3 >PUSHBI '>'
ldy #S.PS.hStdErr ldy #S.PS.hStdErr
@ -252,14 +284,14 @@ CS.END
* Initialized DATA * Initialized DATA
*-------------------------------------- *--------------------------------------
MSG.Greetings .AZ "\r\nCSH-Shell %d.%d\r\n\r\n" 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 " -D : Debug Mode\r\n"
.AS " -T : Trace On" .AS " -T : Trace On"
MSG.ECHOCRLF .AZ "\r\n" MSG.ECHOCRLF .AZ "\r\n"
MSG.HEXWORD .AZ "[%H]" MSG.DEBUG .AZ "DEBUG:pStack=%H\r\n"
MSG.ERR .AZ " ^\r\nLine #%D:" MSG.ERR .AZ "^\r\nLine #%D:"
*-------------------------------------- *--------------------------------------
OptionList >PSTR "DdTt" OptionList .AS "DdTt"
OptionVars .DA #bDebug,#bDebug,#bTrace,#bTrace OptionVars .DA #bDebug,#bDebug,#bTrace,#bTrace
*-------------------------------------- *--------------------------------------
.INB USR/SRC/BIN/CSH.I .INB USR/SRC/BIN/CSH.I