Kernel 0.93+

This commit is contained in:
Rémy GIBERT 2019-09-03 17:35:13 +02:00
parent e6abb0017d
commit 8f4ff3ee4f
3 changed files with 140 additions and 115 deletions

Binary file not shown.

View File

@ -98,6 +98,8 @@ CSH.Run.1 cmp #'#'
.6 jsr CSH.GetVar .6 jsr CSH.GetVar
bcs .7 bcs .7
>STYA ZPVarID
jsr CSH.GetCharNB jsr CSH.GetCharNB
bcs .9 bcs .9
cmp #'=' cmp #'='
@ -110,7 +112,7 @@ CSH.Run.1 cmp #'#'
jsr CSH.ExpEval jsr CSH.ExpEval
bcs .9 bcs .9
txa X = Exp Type >LDYA ZPVarID X = Exp Type
jsr CSH.SetVarValue jsr CSH.SetVarValue
bcs .9 bcs .9
@ -128,9 +130,11 @@ CSH.Run.1 cmp #'#'
bcs .9 bcs .9
cmp #C.CR cmp #C.CR
bne CSH.Run.1 beq .80
jmp CSH.GetNextChar Skip CR jmp CSH.Run.1
.80 jmp CSH.GetNextChar Skip CR
.99 lda #CSH.E.SYNTAX .99 lda #CSH.E.SYNTAX
sec sec
@ -312,18 +316,27 @@ CSH.TYPE stx ZPVarType
jsr CSH.IsLetter jsr CSH.IsLetter
bcs .9 bcs .9
txa VAR TYPE jsr CSH.AddVar add with no value...
jsr CSH.AddVar add with undefined value...
bcs .99 OOM or DUP bcs .99 OOM or DUP
>STYA ZPVarID >STYA ZPVarID
jsr CSH.GetCharNB jsr CSH.GetCharNB
bcs .9 bcs .9
cmp #';' cmp #';'
beq .8 end of declaration, no value... bne .2
ldx ZPVarType
jsr CSH.SIZEOF
cmp #'=' .1 dec pStack
dec
bne .1
ldx ZPVarType
bra .7
.2 cmp #'='
bne .9 bne .9
jsr CSH.GetNextCharNB Skip = jsr CSH.GetNextCharNB Skip =
@ -333,8 +346,8 @@ CSH.TYPE stx ZPVarType
jsr CSH.ExpEval jsr CSH.ExpEval
bcs .99 bcs .99
txa .7 >LDYA ZPVarID
jsr CSH.SetVarValue Update value to this var jsr CSH.AddVarValue X= Type, Add value to this var
bcs .99 bcs .99
jsr CSH.GetChar jsr CSH.GetChar
@ -519,11 +532,11 @@ CSH.ExpEval ldx ZPPtr1
.20 jsr CSH.IsLetter Fnc or Var ? .20 jsr CSH.IsLetter Fnc or Var ?
bcs .2 bcs .2
jsr CSH.GetVar jsr CSH.GetVar
bcs .1 bcs .1
ldx ZPPtr2 var type (could be 0=any) ldx ZPPtr2 var type (could be 0=any)
jsr CSH.GetVarValue Get value on stack jsr CSH.GetVarValue Y,A = VarID, Get value on stack
bcs .99 bcs .99
stx ZPPtr2 store real var type stx ZPPtr2 store real var type
@ -563,8 +576,6 @@ CSH.ExpEval ldx ZPPtr1
stx ZPPtr2+1 stx ZPPtr2+1
jsr CSH.PushValueOnStack
jsr CSH.GetCharNB jsr CSH.GetCharNB
bcc .20 go check for an ARG bcc .20 go check for an ARG
bra .90 bra .90
@ -587,7 +598,7 @@ CSH.ExpEval ldx ZPPtr1
jmp .10 jmp .10
* Old OP has precedence, compute ACC=ARG <BOP> ACC * Old OP has precedence, compute ACC=ARG <BOP> ACC
.6 lda ZPPtr2+1 .6 ldx ZPPtr2+1
jsr CSH.Compute jsr CSH.Compute
bcs .99 bcs .99
@ -595,7 +606,7 @@ CSH.ExpEval ldx ZPPtr1
bcs .90 bcs .90
jmp .10 jmp .10
.8 lda ZPPtr2+1 .8 ldx ZPPtr2+1
bmi .80 bmi .80
jsr CSH.Compute jsr CSH.Compute
@ -609,14 +620,14 @@ CSH.ExpEval ldx ZPPtr1
.80 clc .80 clc
ldx ZPPtr2 X = Var Type ldx ZPPtr2 X = Var Type
pla ply
sta ZPPtr2+1 sty ZPPtr2+1
pla ply
sta ZPPtr2 sty ZPPtr2
pla ply
sta ZPPtr1+1 sty ZPPtr1+1
pla ply
sta ZPPtr1 sty ZPPtr1
rts rts
*-------------------------------------- *--------------------------------------
@ -801,14 +812,12 @@ CSH.GetNumOnStack
* Input : ZPFileBufPtr, A = Var Type, Value on Stack * Input : ZPFileBufPtr, A = Var Type, Value on Stack
* Output : Y,A = ZPVarID * Output : Y,A = ZPVarID
*-------------------------------------- *--------------------------------------
CSH.AddVar sta ZPVarType CSH.AddVar >PUSHW ZPFileBufPtr
>PUSHW ZPFileBufPtr
>LDA.G CSH.hSymbols >LDA.G CSH.hSymbols
>SYSCALL SListNewKey >SYSCALL SListNewKey
bcs .9 bcs .9
>STYA ZPVarID pha
txa txa
* clc * clc
adc ZPFileBufPtr adc ZPFileBufPtr
@ -816,40 +825,62 @@ CSH.AddVar sta ZPVarType
bcc .1 bcc .1
inc ZPFileBufPtr+1 inc ZPFileBufPtr+1
clc
.1 ldy #2 .1 pla
lda ZPVarType
sta ZPVarData
and #CSH.Q.PPPOINTER
bne .2 Pointer, always 2 bytes
lda ZPVarType
and #$1f
tax
ldy CSH.TYPESIZE,x
.2 iny +1 for Type
lda #0
>PUSHYA DataLen
>PUSHWI ZPVarData
>PUSHW ZPVarID
>LDA.G CSH.hSymbols
>SYSCALL SListAddData
bcs .9
>LDYA ZPVarID
.9 rts .9 rts
*-------------------------------------- *--------------------------------------
* Y,A = VarID, X=Type
*--------------------------------------
CSH.AddVarValue sec
.HS 90 BCC
*--------------------------------------
* Y,A = VarID, X=Type
*--------------------------------------
CSH.SetVarValue clc
php
pha
phy
stx ZPVarData X = type
jsr CSH.SIZEOF
pha Size....
tax
ldy #1
.1 >PULLA
sta ZPVarData,y
iny
dex
bne .1
>PUSHBI 0 Datalen HI
pla
inc
>PUSHA Datalen LO
>PUSHWI ZPVarData DataPtr
ply
pla
>PUSHYA Y,A = VarID
>LDA.G CSH.hSymbols
plp
bcc .2
>SYSCALL SListAddData
rts
.2 >SYSCALL SListSetData
rts
*--------------------------------------
CSH.GetVar >PUSHW ZPFileBufPtr CSH.GetVar >PUSHW ZPFileBufPtr
>LDA.G CSH.hSymbols >LDA.G CSH.hSymbols
>SYSCALL SListLookup >SYSCALL SListLookup
bcs .9 bcs .9
>STYA ZPVarID pha
txa txa
* clc * clc
@ -859,24 +890,26 @@ CSH.GetVar >PUSHW ZPFileBufPtr
inc ZPFileBufPtr+1 inc ZPFileBufPtr+1
clc clc
.1
.9 .1 pla Y,A = VarID
CSH.GetVar.RTS rts .9 rts
*-------------------------------------- *--------------------------------------
* Input : ZPFileBufPtr, X = Var Type (or 0) * Input : Y,A = VarID, X = Var Type (or 0)
* Output : Value on Stack, X = Var Type * Output : Value on Stack, X = Var Type
*-------------------------------------- *--------------------------------------
CSH.GetVarValue stx ZPVarType CSH.GetVarValue stx ZPVarType
.1 >PUSHWI 0 pha
>PUSHWI 6 >PUSHWI 0 From Start
>PUSHWI 6 6 bytes
>PUSHWI ZPVarData >PUSHWI ZPVarData
>PUSHW ZPVarID pla
>PUSHYA KeyID
>LDA.G CSH.hSymbols >LDA.G CSH.hSymbols
>SYSCALL SListGetData >SYSCALL SListGetData
bcs CSH.GetVar.RTS bcs .9
CSH.PushValueOnStack
ldx ZPVarType ldx ZPVarType
beq .1 beq .1
@ -884,7 +917,10 @@ CSH.PushValueOnStack
bne .99 bne .99
.1 ldx ZPVarData .1 ldx ZPVarData
ldy CSH.TYPESIZE,x beq *
jsr CSH.SIZEOF
tay
.2 lda ZPVarData,y .2 lda ZPVarData,y
>PUSHA >PUSHA
@ -898,36 +934,6 @@ CSH.PushValueOnStack
sec sec
.9 rts .9 rts
*-------------------------------------- *--------------------------------------
CSH.SetVarValue cmp ZPVarType
bne .9
sta ZPVarData
tax
ldy CSH.TYPESIZE,x Byte count to transfer
ldx #1
.1 >PULLA
sta ZPVarData,x
inx
dey
bne .1
>PUSHBI 0
ldx ZPVarType
lda CSH.TYPESIZE,x
inc +1 including TYPE
>PUSHA
>PUSHWI ZPVarData
>PUSHW ZPVarID
>LDA.G CSH.hSymbols
>SYSCALL SListSetData
rts
.9 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
*-------------------------------------- *--------------------------------------
@ -960,46 +966,51 @@ CSH.IsValue0 cpx #CSH.T.FLOAT
.9 sec .9 sec
rts rts
*-------------------------------------- *--------------------------------------
CSH.Compute tax CSH.Compute jmp (J.CSH.BOPS,x)
jmp (J.CSH.BOPS,x)
*-------------------------------------- *--------------------------------------
CSH.BOPS.ADD CSH.BOPS.ADD lda ZPVarType
cmp #CSH.T.FLOAT
beq .8
clc clc
rts rts
.8 >FPU FADD
rts
CSH.BOPS.SUB lda ZPVarType CSH.BOPS.SUB lda ZPVarType
cmp #CSH.T.FLOAT cmp #CSH.T.FLOAT
beq .8 beq .8
clc clc
rts rts
.8 >FPU FSUB .8 >FPU FSUB
bcs .9 rts
CSH.BOPS.MUL lda ZPVarType
cmp #CSH.T.FLOAT
beq .8
.9 rts
CSH.BOPS.MUL
clc clc
rts rts
.8 >FPU FMULT
rts
CSH.BOPS.DIV lda ZPVarType CSH.BOPS.DIV lda ZPVarType
cmp #CSH.T.FLOAT cmp #CSH.T.FLOAT
beq .8 beq .8
clc clc
rts rts
.8 .8 >FPU FDIV
>FPU FDIV
clc
rts rts
CSH.BOPS.MOD CSH.BOPS.MOD
CSH.BOPS.SHL CSH.BOPS.SHL
@ -1176,14 +1187,18 @@ CSH.IsDigit10 cmp #'0'
.9 sec .9 sec
rts rts
*-------------------------------------- *--------------------------------------
* in : X = type, out : X = type, A = size
*--------------------------------------
CSH.SIZEOF txa CSH.SIZEOF txa
and #CSH.Q.PPPOINTER and #CSH.Q.PPPOINTER
bne .2 bne .2
txa txa
and #$f and #$f
tay phx
lda CSH.TYPESIZE,y tax
lda CSH.TYPESIZE,x
plx
rts rts
.2 lda #2 .2 lda #2
@ -1205,7 +1220,7 @@ EXEC.cos >FPU COS
*-------------------------------------- *--------------------------------------
EXEC.getchar >SYSCALL getchar EXEC.getchar >SYSCALL getchar
>PUSHA >PUSHA
>DEBUG >DEBUG
rts rts
*-------------------------------------- *--------------------------------------
MAN MAN

View File

@ -27,8 +27,9 @@ ZPPtr2 .BS 2
ZPPtr3 .BS 2 ZPPtr3 .BS 2
ZPVarID .BS 2 ZPVarID .BS 2
ZPVarType .BS 1
ZPVarData .BS 6 ZPVarData .BS 6
ZPVarType .BS 1
ZS.END .ED ZS.END .ED
*-------------------------------------- *--------------------------------------
@ -47,14 +48,15 @@ CS.START cld
.DA 0 .DA 0
*-------------------------------------- *--------------------------------------
* Relocation Table * Relocation Table
*-------------------------------------- *--------------------------------------
.1 .DA CS.INIT .1 .DA CS.INIT
.DA CS.RUN .DA CS.RUN
.DA CS.DOEVENT .DA CS.DOEVENT
.DA CS.QUIT .DA CS.QUIT
L.MSG.GREETINGS .DA MSG.GREETINGS L.MSG.GREETINGS .DA MSG.GREETINGS
L.MSG.ECHOCRLF .DA MSG.ECHOCRLF L.MSG.ECHOCRLF .DA MSG.ECHOCRLF
L.MSG.ERR .DA MSG.ERR L.MSG.HEXWORD .DA MSG.HEXWORD
L.MSG.ERR .DA MSG.ERR
.INB USR/SRC/BIN/CSH.R .INB USR/SRC/BIN/CSH.R
.DA 0 .DA 0
*-------------------------------------- *--------------------------------------
@ -201,6 +203,13 @@ PrintErrMsg >LDYA ZPFileBuf
rts rts
*-------------------------------------- *--------------------------------------
PrintTraceMsg >STYA ZPPtr3 PrintTraceMsg >STYA ZPPtr3
>PUSHW pStack
>PUSHBI 2
>PUSHW L.MSG.HEXWORD
ldy #S.PS.hStdErr
lda (pPS),y
>SYSCALL fprintf
PrintTraceMsg.3 >PUSHBI '>' PrintTraceMsg.3 >PUSHBI '>'
ldy #S.PS.hStdErr ldy #S.PS.hStdErr
@ -239,7 +248,8 @@ CS.END
*-------------------------------------- *--------------------------------------
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.ECHOCRLF .AZ "\r\n" MSG.ECHOCRLF .AZ "\r\n"
MSG.ERR .AZ "^\r\nLine #%D:" MSG.HEXWORD .AZ "[%H]"
MSG.ERR .AZ " ^\r\nLine #%D:"
*-------------------------------------- *--------------------------------------
.INB USR/SRC/BIN/CSH.I .INB USR/SRC/BIN/CSH.I
*-------------------------------------- *--------------------------------------