Kernel 0.94

This commit is contained in:
Rémy GIBERT 2020-02-19 17:42:05 +01:00
parent 14be0c5225
commit 27169807fe
5 changed files with 216 additions and 154 deletions

Binary file not shown.

View File

@ -5,22 +5,21 @@ NEW
hFileBuf .BS 1
CSH.BufPtrSave .BS 2
CSH.CmdSave .BS 1
CSH.LookupOpt .BS 1
CSH.hDefines .BS 1
CSH.hSymbols .BS 1
CSH.hConst .BS 1
CSH.ConstPtr .BS 1
CSH.ConstPtr .BS 2
CSH.hData .BS 1
CSH.DataPtr .BS 1
CSH.DataBase .BS 2
CSH.DataPtr .BS 2
CSH.hStack .BS 1
CSH.StackPtr .BS 1
CSH.CmdSave .BS 1
CSH.LookupOpt .BS 1
*--------------------------------------
MAN
SAVE USR/SRC/BIN/CSH.D

View File

@ -24,6 +24,14 @@ CSH.Init >SYSCALL SListNew
>SYSCALL GetMem
bcs .9
>STYA ZPCSHData
txa
>STA.G CSH.hData
>LDYAI 256
>SYSCALL GetMem
bcs .9
>STYA ZPCSHStack
txa
>STA.G CSH.hStack
@ -57,6 +65,9 @@ CSH.Quit >LDA.G CSH.hSymbols
>LDA.G CSH.hStack
jsr .7
>LDA.G CSH.hData
jsr .7
>LDA.G CSH.hConst
.7 beq CSH.Quit.RTS
@ -79,7 +90,7 @@ CSH.Run.1 cmp #C.CR empty line....
.3 cmp #'#' directive ?
bne .4
jmp CSH.DIRECTIVES
jmp CSH.DIR
.4 cmp #'}' End of block ?
bne .40
@ -125,8 +136,7 @@ CSH.Run.1 cmp #C.CR empty line....
jsr CSH.ExpEval
bcs .9
>LDYA ZPVarID X = Exp Type
jsr CSH.SetVarValueFromStack
jsr CSH.SetVarValueFromStack X = Exp Type
bcs .9
jsr CSH.GetChar
@ -138,7 +148,6 @@ CSH.Run.1 cmp #C.CR empty line....
.9 rts
.7 lda #0 no return value type check required
jsr CSH.fCall
bcs .9
@ -167,7 +176,7 @@ CSH.COMMENTS jsr CSH.GetNextChar
sec
rts
*--------------------------------------
CSH.DIRECTIVES jsr CSH.GetNextCharNB
CSH.DIR jsr CSH.GetNextCharNB
bcs .99
cmp #'!' #!/bin/csh
@ -393,46 +402,34 @@ CSH.TYPE stx ZPVarType
.10 jsr CSH.IsLetter
bcs .9
jsr CSH.AddVar add with no value...
jsr CSH.AddVar add with undef value...
bcs .99 OOM or DUP
>STYA ZPVarID
jsr CSH.GetCharNB
bcs .9
cmp #';'
bne .2
beq .8
ldx ZPVarType
jsr CSH.SIZEOF
.1 dec pStack
dec
bne .1
ldx ZPVarType
bra .7
.2 cmp #'='
bne .9
jsr CSH.GetNextCharNB Skip =
bcs .9
lda ZPVarType
jsr CSH.ExpEval
bcs .99
.7 >LDYA ZPVarID
jsr CSH.AddVarValueFromStack X= Type, Add value to this var
.7 jsr CSH.SetVarValueFromStack X= Type, Set value to this var
bcs .99
jsr CSH.GetChar
bcs .9
cmp #';'
bne .9
.8 clc
rts
.90 lda #CSH.E.DUP
sec
.8 clc
rts
.9 lda #CSH.E.SYNTAX
@ -622,7 +619,8 @@ CSH.ExpEval ldx ZPPtr1
jsr CSH.GetVar
bcs .1
ldx ZPPtr2 expected var type (could be 0=any)
ldx ZPPtr2 YA=VarID, X=expected var type (or 0=any)
jsr CSH.GetVarValueOnStack Y,A = VarID, Get value on stack
bcs .29
@ -720,6 +718,7 @@ CSH.ExpEval ldx ZPPtr1
*--------------------------------------
CSH.AddContCharP
ldy #0
.1 jsr CSH.GetNextChar
bcs .9
cmp #C.CR
@ -729,6 +728,7 @@ CSH.AddContCharP
sta (ZPCSHConst),y
iny
bra .1
.2 lda #0
sta (ZPCSHConst),y
>PUSHW ZPCSHConst Push PTR on stack
@ -888,16 +888,57 @@ CSH.GetNumOnStack
* Output : Y,A = ZPVarID
*--------------------------------------
CSH.AddDefine >LDA.G CSH.hDefines
bra CSH.Add
jsr CSH.NewKey
bcs .9
.9 rts
CSH.AddVar >LDA.G CSH.hSymbols
jsr CSH.NewKey
bcs .9
CSH.Add >PUSHA
ldx ZPVarType
jsr CSH.SizeOf
sta ZPVarSizeOf
lda ZPCSHData
sta ZPVarDataPtr
clc
adc ZPVarSizeOf
sta ZPCSHData
lda ZPCSHData+1
sta ZPVarDataPtr+1
adc ZPVarSizeOf+1
sta ZPCSHData+1
>LDA.G CSH.DataPtr
clc
adc ZPVarSizeOf
sta (pData),y
bcs .99
>PUSHB.G CSH.hSymbols
>PUSHW ZPVarID
>PUSHWI ZPVarDef
>PUSHWI 6
>SYSCALL SListAddData
.9 rts
.99
CSH.TMISMATCH lda #CSH.E.TMISMATCH
sec
rts
*--------------------------------------
CSH.NewKey >PUSHA
>PUSHW ZPFileBufPtr
>SYSCALL SListNewKey
bcs .9
pha
>STYA ZPVarID
txa
* clc
adc ZPFileBufPtr
@ -905,53 +946,45 @@ CSH.Add >PUSHA
bcc .1
inc ZPFileBufPtr+1
clc
.1 pla
.1 clc
.9 rts
*--------------------------------------
* Y,A = VarID, X=Type
*--------------------------------------
CSH.AddVarValueFromStack
sec
.HS 90 BCC
* X=Type
*--------------------------------------
CSH.SetVarValueFromStack
clc
php
pha
phy
stx ZPVarData X = type
cpx ZPVarType X = type
bne .99
jsr CSH.SIZEOF
pha Size....
tax
ldy #1
.1 >PULLA
sta ZPVarData,y
ldy #0
.1 lda (pStack)
sta (ZPVarDataPtr),y
inc pStack
iny
dex
cpy ZPVarSizeOf
bne .1
>PUSHB.G CSH.hSymbols
plx
ply
pla
>PUSHYA Y,A = VarID
>PUSHWI ZPVarData DataPtr
txa
inc
>PUSHA Datalen LO
>PUSHBI 0 Datalen HI
plp
bcc .2
>SYSCALL SListAddData
lda #'>'
>SYSCALL putchar
>PUSHW L.MSG.DBGPL
>PUSHW ZPVarDataPtr
ldy #3
.2 >PUSHB (ZPVarDataPtr),y
dey
bpl .2
>PUSHBI 6
>SYSCALL printf
>DEBUG
clc
rts
.2 >SYSCALL SListSetData
.99 lda #CSH.E.TMISMATCH
sec
rts
*--------------------------------------
CSH.GetDefine >PUSHB.G CSH.hDefines
@ -1003,54 +1036,74 @@ CSH.Get >PUSHW ZPFileBufPtr
.1 pla Y,A = VarID
.9 rts
*--------------------------------------
* Input : Y,A = VarID, X = Var Type (or 0)
* Output : Value on Stack, X = Var Type
* Input :
* X=Var Type (or 0)
* YA=VarID
* Output : Stack, X = Var Type
*--------------------------------------
CSH.GetVarValueOnStack
stx ZPVarType
pha
phx
phy
pha
>PUSHB.G CSH.hSymbols
ply
pla
>PUSHYA KeyID
>PUSHA
pla
>PUSHA KeyID
>PUSHWI ZPVarData
>PUSHWI ZPVarDef
>PUSHWI 6 6 bytes
>PUSHWI 0 From Start
>SYSCALL SListGetData
plx
bcs .9
ldx ZPVarType
txa
beq .1 any type
cpx ZPVarData
cmp ZPVarType
beq .2
txa
and #CSH.Q.PPPOINTER
beq .99 not pointer....mismatch
eor ZPVarData
eor ZPVarType
and #CSH.Q.PPPOINTER
bne .99 compare only pointer depth
.1 ldx ZPVarData
.1 ldx ZPVarType
beq *
.2 jsr CSH.SIZEOF
tay
.3 lda ZPVarData,y
.3 dey
lda (ZPVarDataPtr),y
>PUSHA
dey
tya
bne .3
lda #'<'
>SYSCALL putchar
>PUSHW L.MSG.DBGPL
>PUSHW ZPVarDataPtr
ldy #3
.20 >PUSHB (ZPVarDataPtr),y
dey
bpl .20
>PUSHBI 6
>SYSCALL printf
>DEBUG
ldx ZPVarType
clc X = Var Type
.9 rts
.99
CSH.TMISMATCH lda #CSH.E.TMISMATCH
.99 lda #CSH.E.TMISMATCH
sec
rts
*--------------------------------------
@ -1059,11 +1112,14 @@ CSH.TMISMATCH lda #CSH.E.TMISMATCH
*--------------------------------------
CSH.IsValue0 cpx #CSH.T.FLOAT
bcc .1 char,int,long
ldy CSH.TYPESIZE,x
lda ZPVarData,y
lda (ZPVarDataPtr),y
bne .9
.8 clc
rts
.1 jsr CSH.SIZEOF
tax
@ -1073,8 +1129,10 @@ CSH.IsValue0 cpx #CSH.T.FLOAT
inc pStack
dex
bne .2
tax
beq .8
.9 sec
rts
*--------------------------------------

View File

@ -22,21 +22,24 @@ ZPFileBufPtr .BS 2
ZPFileBufPtrBak .BS 2
ZPCSHConst .BS 2
ZPCSHData .BS 2
ZPCSHStack .BS 2
ZPPtr1 .BS 2
ZPPtr2 .BS 2
ZPPtr3 .BS 2
ZPVarID .BS 2
ZPVarData .BS 6
ZPVarType .BS 1
ZPVarDef .EQ *
ZPVarType .BS 2
ZPVarSizeOf .BS 2
ZPVarDataPtr .BS 2
ZPhMacro .BS 1
ArgIndex .BS 1
ZPPtr1 .BS 2
ZPPtr2 .BS 2
ZPPtr3 .BS 2
ZS.END .ED
*--------------------------------------
* File Header (16 Bytes)
@ -64,6 +67,7 @@ L.MSG.USAGE .DA MSG.USAGE
L.MSG.ECHOCRLF .DA MSG.ECHOCRLF
L.MSG.DEBUG .DA MSG.DEBUG
L.MSG.ERR .DA MSG.ERR
L.MSG.DBGPL .DA MSG.DBGPL
.INB USR/SRC/BIN/CSH.R
.DA 0
*--------------------------------------
@ -299,6 +303,7 @@ MSG.USAGE .AS "Usage : CSH <option> file\r\n"
MSG.ECHOCRLF .AZ "\r\n"
MSG.DEBUG .AZ "pStack=%H"
MSG.ERR .AZ "^\r\nLine #%D:"
MSG.DBGPL .AZ "P=%H, V=%L\r\n"
*--------------------------------------
OptionList .AS "DdTt"
OptionVars .DA #bDebug,#bDebug,#bTrace,#bTrace

View File

@ -98,7 +98,7 @@ K.SPrintf stz PrintF.hFILE
sec Format & buffer
jsr STDIO.GetFormat
*--------------------------------------
K.PrintF.1 sty PrintF.Exit.Cnt+1 Total bytes to POP
K.PrintF.1 sty STDIO.Exit.Cnt+1 Total bytes to POP
stz PrintF.Cnt
stz PrintF.Cnt+1
@ -182,7 +182,7 @@ K.PrintF.1 sty PrintF.Exit.Cnt+1 Total bytes to POP
.20 jsr PrintF.COut
bcc .11
*--------------------------------------
.99 bra PrintF.Exit
.99 jmp STDIO.Exit
*--------------------------------------
.8 ldx PrintF.hFILE
beq .80 Writing to buffer, append \0
@ -197,22 +197,13 @@ K.PrintF.1 sty PrintF.Exit.Cnt+1 Total bytes to POP
bne .99
>RET 4 0=BLOCKING
.80 ldy PrintF.Cnt A=0, Writing to buffer, append \0
sta (pIOBuf),y
.81 >LDYA PrintF.Cnt
* clc
*--------------------------------------
PrintF.Exit php
pha
lda pStack
sec +Bytecount byte
PrintF.Exit.Cnt adc #$ff SELF MODIFIED
sta pStack
pla
plp
PrintF.Exit.RTS
rts
jmp STDIO.Exit
*--------------------------------------
PrintFTBL1 .AS "bdDuefhHiILsS"
PrintFTBL1.Cnt .EQ *-PrintFTBL1
@ -230,7 +221,7 @@ PrintF.ESC jmp (.1,x)
.DA PrintF.I,PrintF.II,PrintF.L
.DA PrintF.S,PrintF.SS
*--------------------------------------
PrintF.B jsr PrintF.LocalGetByte
PrintF.B jsr STDIO.GetStackByte
bcs PrintF.B.RTS
ldy #8
@ -270,7 +261,7 @@ PrintF.U clc unsigned long (DWORD)
PrintF.NUM ror ACC32.Sign
jsr MATH.ACC32ZERO
.1 jsr PrintF.LocalGetByte
.1 jsr STDIO.GetStackByte
bcs PrintF.B.RTS
sta ACC32-1,y
@ -326,10 +317,10 @@ PrintF.SS ldy #$00 PSTR
sty .1+1
jsr PrintF.LocalGetByte
jsr STDIO.GetStackByte
bcs .9
sta ZPPtr1+1
jsr PrintF.LocalGetByte
jsr STDIO.GetStackByte
bcs .9
sta ZPPtr1
@ -367,10 +358,10 @@ PrintF.SS ldy #$00 PSTR
* clc
.9 rts
*--------------------------------------
PrintF.HH jsr PrintF.LocalGetByte
PrintF.HH jsr STDIO.GetStackByte
bcs PrintF.COut.RTS
pha LO byte
jsr PrintF.LocalGetByte
jsr STDIO.GetStackByte
plx
bcs PrintF.COut.RTS
pha
@ -381,7 +372,7 @@ PrintF.HH jsr PrintF.LocalGetByte
txa
bra PrintF.H.1
*--------------------------------------
PrintF.H jsr PrintF.LocalGetByte
PrintF.H jsr STDIO.GetStackByte
bcs PrintF.COut.RTS
PrintF.H.1 jsr MATH.AToHexAX
jsr PrintF.COut
@ -473,7 +464,7 @@ K.SScanF stz PrintF.hFILE
sec Format & buffer
jsr STDIO.GetFormat
*--------------------------------------
K.SScanF.1 sty PrintF.Exit.Cnt+1 Total bytes to POP
K.SScanF.1 sty STDIO.Exit.Cnt+1 Total bytes to POP
.1 jsr SHARED.GetCharPtr2 End Of format?
beq .8
@ -514,12 +505,15 @@ K.SScanF.1 sty PrintF.Exit.Cnt+1 Total bytes to POP
.9 lda #MLI.E.EOF
sec
jmp PrintF.Exit
jmp STDIO.Exit
.4 jsr PrintF.LocalGetPtr
.4 jsr STDIO.GetStackByte
bcs .9
sta ZPPtr3
jsr STDIO.GetStackByte
bcs .9
sty ZPPtr3
sta ZPPtr3+1
jsr .5
bcs .9 out of Ptr on stack
@ -528,7 +522,7 @@ K.SScanF.1 sty PrintF.Exit.Cnt+1 Total bytes to POP
.8 lda #$ff SELF MODIFIED Arg processed
clc
jmp PrintF.Exit
jmp STDIO.Exit
*--------------------------------------
.5 jmp (K.SScanFJMP,x)
*--------------------------------------
@ -589,12 +583,34 @@ K.SScanF.S ldy #$ff
K.SScanF.Fwd jmp SHARED.AddYToPtr1 Y=char count parsed
*--------------------------------------
PrintF.LocalGetPtr
jsr PrintF.LocalGetByte
bcs PrintF.LocalGetByte.RTS
STDIO.GetFormat lda (pStack) Bytecount
inc
tay
lda (pStack),y format LO
sta ZPPtr2
iny
lda (pStack),y format HI
sta ZPPtr2+1
bcc .1
iny
lda (pStack),y str LO
sta pIOBuf
iny
lda (pStack),y str HI
sta pIOBuf+1
rts
.1 lda #K.IOBuf
sta pIOBuf
lda /K.IOBuf
sta pIOBuf+1
rts
*--------------------------------------
PrintF.LocalGetByte
STDIO.GetStackByte
lda (pStack)
beq .9
@ -612,34 +628,18 @@ PrintF.LocalGetByte
.9 lda #E.STACK
sec
PrintF.LocalGetByte.RTS
STDIO.GetStackByte.RTS
rts
*--------------------------------------
STDIO.GetFormat bcs .1
>LDYAI K.IOBuf
>STYA pIOBuf
.1 lda (pStack) Bytecount
inc
tay
lda (pStack),y format LO
sta ZPPtr2
iny
lda (pStack),y format HI
sta ZPPtr2+1
bcc .8
iny
lda (pStack),y str LO
sta pIOBuf
iny
lda (pStack),y str HI
sta pIOBuf+1
.8 rts
STDIO.Exit php
pha
lda pStack
sec +Bytecount byte
STDIO.Exit.Cnt adc #$ff SELF MODIFIED
sta pStack
pla
plp
rts
*--------------------------------------
MAN
SAVE USR/SRC/SYS/KERNEL.S.STDIO2