Kernel 0.94

This commit is contained in:
Rémy GIBERT 2020-03-02 17:49:47 +01:00
parent f8dd42b0d6
commit 95fb344b30
10 changed files with 190 additions and 131 deletions

Binary file not shown.

View File

@ -137,7 +137,7 @@ DIR.DA jsr SRC.GetNextCharNB
ldx SRC.ACC.SIZE
bne .10
>DEBUG
ldx #2
.10 ldy #0
@ -265,10 +265,21 @@ DIR.SE sec
*---------------------------------------
DIR.EQ clc
>LDA.G SYM.bInGlobal
bpl .99
>LDA.G SYM.BufPtr
beq .99
jsr SRC.GetNextCharNB
eor #SYMG
beq .1
bcs .99 .SE not allowed in local/private
bcc .10 in local, skip F update
.1 ror A = 0 : SYMG.F.RW
ora (ZPSymbolBuf)
sta (ZPSymbolBuf)
.10 jsr SRC.GetNextCharNB
bcs .99
lda #$ff
@ -280,7 +291,7 @@ DIR.EQ clc
>LDA.G ASM.PASS
bne .2
*---------------------------------------
>LDA.G SYM.GlobalPtr PASS#1
>LDA.G SYM.BufPtr PASS#1
cmp #SYMG
beq .12
@ -293,14 +304,14 @@ DIR.EQ clc
sta (ZPSymbolBuf),y
dex
bpl .11
clc
rts
.12 jsr SYM.Acc2Global global, update and close
jmp SYM.StoreGlobal
*---------------------------------------
.2 >LDA.G SYM.GlobalPtr PASS#2
.2 >LDA.G SYM.BufPtr PASS#2
cmp #SYMG
beq .22
@ -314,6 +325,12 @@ DIR.EQ clc
dex
bpl .21
lda #'e'
* jsr OUT.DEBUG
>DEBUG
clc
rts

View File

@ -22,15 +22,20 @@ EXP.Eval.Missing
EXP.Eval >STZ.G EXP.Modifier
>STZ.G EXP.Prefix
>STZ.G EXP.Operator
jsr SRC.GetChar
bcs EXP.Eval.Missing
jsr SRC.IsMODReserved
bcs EXP.Eval.Next
txa
>STA.G EXP.Modifier
lda #'#'
>STA.G EXP.Prefix
EXP.Eval.Next0 jsr SRC.GetNextChar
EXP.Eval.Next stz SRC.ACC.F
lda #2
sta SRC.ACC.SIZE Default To WORD (2 bytes)
@ -57,23 +62,23 @@ EXP.Eval.Next stz SRC.ACC.F
beq .9 illegal OUTSIDE macro
.13 jsr EXP.GetLocal
bcs .19
bcs .99
* jsr OUT.DEBUG
jmp EXP.EvalOperator
.19 rts
.14 cmp #'*'
bne .10
jsr SYM.PC2Acc
lda #"*"
* jsr OUT.DEBUG
jsr SRC.GetNextChar
jmp EXP.EvalOperator
.9 lda #E.INV.LABEL
sec
rts
.99 rts
*---------------------------------------
.10 jsr SRC.IsDigit10 Decimal constant ?
bcs .1
@ -168,19 +173,14 @@ EXP.EvalOperator
>LDA.G EXP.Operator
beq .7
* pha
* phx
* phy
* tax
* lda SRC.EXP.RESERVED,x
* >SYSCALL putchar
* jsr OUT.DEBUG
* ply
* plx
* pla
jsr EXP.Compute
bcc .7
tax
>LDA.G ASM.PASS
beq .7 Ignore error ...
txa
bcs EXP.EvalExitRTS
.7 jsr SRC.GetChar
@ -220,8 +220,6 @@ EXP.GetLocal jsr SRC.GetNextChar
>LDA.G ASM.PASS pass#2?
bne EXP.EvalExitUND
stz SRC.ACC.SIZE Mark ACC as undefined
clc
rts
@ -251,26 +249,9 @@ EXP.MOD.32 lda #4
clc
rts
*---------------------------------------
EXP.Compute ldx SRC.ACC.SIZE
beq .1
ldx SRC.ARG.SIZE
beq .1
asl
EXP.Compute asl
tax
jmp (J.EXP.OP-2,x)
.1 >LDA.G ASM.PASS
beq .8
lda #E.UNDEF.SYMBOL
sec
rts
.8 stz SRC.ACC.SIZE Mark ACC as undefined
clc
rts
*---------------------------------------
EXP.OP.EOR ldx #3

View File

@ -31,9 +31,6 @@ MAC.Init >SYSCALL SListNew
.9 rts
*---------------------------------------
MAC.Reset >STZ.G MAC.StkPtr
rts
*---------------------------------------
MAC.Quit >LDA.G MAC.StkPtr
beq .10
@ -280,7 +277,7 @@ MAC.ReadLine >LDA.G MAC.hBuf
inc ZPMacroBuf+1
.21 cmp #'#'
bne .20
bne .22
lda ZPMacroArgCnt
ora #$30
@ -289,7 +286,7 @@ MAC.ReadLine >LDA.G MAC.hBuf
bra .1
.20 cmp #'1'
.22 cmp #'1'
bcc .9
cmp #'9'+1
@ -304,6 +301,17 @@ MAC.ReadLine >LDA.G MAC.hBuf
jsr MAC.GetArgX
bcs .1 no arg ]n, append nothing
lda (ZPPtr1)
cmp #'"'
bne .3
inc ZPPtr1
bne .23
inc ZPPtr1+1
.23 dex
dex
.3 lda (ZPPtr1)
sta (ZPLineBuf),y
iny

View File

@ -297,7 +297,7 @@ OUT.PrintCR1 >DEC.G OUT.LineCnt
*---------------------------------------
OUT.DEBUG phy
phx
>SYSCALL putchar
>PUSHW L.MSG.DEBUG
ldy #ASM.PC+4

View File

@ -55,8 +55,8 @@ SRC.ParseLine.LABEL
>LDA.G MAC.StkPtr
beq SRC.ParseLine.InvLbl illegal OUTSIDE macro
.2 >LDA.G SYM.bInGlobal Not relative to Global label...
bpl SRC.ParseLine.InvLbl
.2 >LDA.G SYM.BufPtr Not relative to Global label...
beq SRC.ParseLine.InvLbl
jsr SRC.GetNextChar
bcs SRC.ParseLine.InvLbl
@ -188,54 +188,73 @@ SRC.ParseLine.AM
.1 jsr SRC.IsAMReserved
bcs .2
jsr SRC.AddToBuf
bra .7
.2 jsr SRC.IsLetter Any register?
bcs .6 no, try something else
>LDYA ZPRPtr Check in register table
jsr SRC.GetKeyword
bcs .6
lda (ZPPtr1) get register len
tax
.4 inc ZPPtr1
bne .5
inc ZPPtr1+1
.5 lda (ZPPtr1)
jsr SRC.AddToBuf
dex
bne .4
bra .74
.6 jsr EXP.Eval
bcs .99
>LDA.G EXP.Prefix
beq .75
jsr SRC.AddToBuf
.75 ldx SRC.ACC.SIZE
bne .73
>DEBUG
ldx #2 FWREF ...assume 2 bytes...
.73 lda SRC.ACC-1,x
bne .72
dex
bne .73
inx
.72 lda #'a'
.71 jsr SRC.AddToBuf
dex
bne .71
.74 jsr SRC.GetChar
bcs .8
cmp #C.SPACE
bne .1
bra .8
.7 jsr SRC.GetNextChar
bcs .8
cmp #C.SPACE
bne .1
.8 jsr SRC.ParseLine.AMCheck
bcs .9
jsr SRC.ParseLine.AMCheck4OP
bcc .88
@ -369,29 +388,37 @@ SRC.ParseLine.Emit
.6 cmp #'r
bne .7
lda SRC.ACC.SIZE
jsr SRC.ComputeRel8
bcs .61
lda SRC.ACC
bra .50
.61 >LDA.G ASM.PASS
beq .50 Emit 00 if pending symbol (pass #1)
jsr SRC.ComputeRel8
bcs .91
bra .50
bra .91
.7 cmp #'l
bne .90
lda SRC.ACC.SIZE
bne .71
jsr OUT.EmitByte Emit 00 00 if pending symbol (pass #1)
bcs .9
lda #0
bra .50
.71 jsr SRC.ComputeRel16
bcs .91
jsr SRC.ComputeRel16
bcs .71
lda SRC.ACC
jsr OUT.EmitByte
bcs .9
lda SRC.ACC+1
bra .50
.71 >LDA.G ASM.PASS
bne .91
lda #0
jsr OUT.EmitByte
bcs .9
lda #0
bra .50 Emit 00 00 if pending symbol (pass #1)
.8 clc
.9 rts
@ -399,6 +426,7 @@ SRC.ParseLine.Emit
.90 lda #E.INV.T.FILE
sec
rts
.91 lda #E.RANGE
sec
rts
@ -485,7 +513,8 @@ SRC.ComputeRel16
*---------------------------------------
SRC.ComputeRel phy
jsr OUT.DEBUG
lda #'r'
* jsr OUT.DEBUG
ldy #ASM.PC
clc
@ -506,7 +535,8 @@ SRC.ComputeRel phy
sta SRC.ACC+3
php
jsr OUT.DEBUG
lda #'R'
* jsr OUT.DEBUG
plp
ply
rts

View File

@ -24,10 +24,10 @@ SYM.Init >SYSCALL SListNew
bcs .9
>STYA ZPSymbolBuf
txa
>STA.G SYM.hGlobalBuf
>STA.G SYM.hBuf
.9 rts
*---------------------------------------
SYM.Quit >LDA.G SYM.hGlobalBuf
SYM.Quit >LDA.G SYM.hBuf
beq .1
>SYSCALL FreeMem
@ -54,7 +54,7 @@ SYM.NewGlobal >LDA.G ASM.PASS
>SYSCALL SListNewKey
bcs .9 Already Defined
>STYA.G SYM.GlobalID
>STYA.G SYM.ID
txa
* clc
@ -64,17 +64,19 @@ SYM.NewGlobal >LDA.G ASM.PASS
inc ZPLinePtr+1
.1 jsr SYM.PC2Acc
lda #2
sta SRC.ACC.SIZE
stz SRC.ACC.F
jsr SYM.Acc2Global
lda #SYMG
>STA.G SYM.GlobalPtr
>STA.G SYM.BufPtr
tay
lda #0
sta (ZPSymbolBuf),y
lda #$ff
>STA.G SYM.bInGlobal
clc
rts
@ -87,7 +89,7 @@ SYM.NewGlobal2 >PUSHB.G SYM.hList Pass #2: should be already defined...
>SYSCALL SListLookup
bcs .9
>STYA.G SYM.GlobalID
>STYA.G SYM.ID
txa
* clc
@ -97,15 +99,15 @@ SYM.NewGlobal2 >PUSHB.G SYM.hList Pass #2: should be already defined...
inc ZPLinePtr+1
.1 >PUSHB.G SYM.hList Pass #2: Retore full context
>PUSHW.G SYM.GlobalID
>PUSHW.G SYM.ID
>PUSHW ZPSymbolBuf
>PUSHWI $ffff all
>PUSHWZ from Start
>SYSCALL SListGetData
bcs .99
lda #$ff
>STA.G SYM.bInGlobal
lda #SYMG
>STA.G SYM.BufPtr
>STZ.G MAC.CtxID
>STA.G MAC.CtxNextID
@ -132,19 +134,41 @@ SYM.LookupGlobal
bcc .1
inc ZPLinePtr+1
.1 >PUSHB.G SYM.hList
.1 >LDA.G SYM.ID
cmp ZPPtr1
bne .3
iny
lda (pData),y
cmp ZPPtr1+1
bne .3
ldy #SYMG-1
.2 lda (ZPSymbolBuf),y
sta SRC.ACC.F,y
dey
bpl .2
clc
rts
.3 >PUSHB.G SYM.hList
>PUSHW ZPPtr1
>PUSHW L.SRC.ACC.F
>PUSHWI SYMG Get only Global value
>PUSHWZ Start
>SYSCALL SListGetData
php
pha
lda #'G'
* jsr OUT.DEBUG
pla
plp
rts
.4 >LDA.G ASM.PASS pass#2?
bne .9 yes, undefined symbol
stz SRC.ACC.SIZE Mark ACC as undefined
.5 jsr SRC.GetNextChar
bcs .8
@ -167,14 +191,14 @@ SYM.LookupGlobal
SYM.StoreGlobal >LDA.G ASM.PASS
bne .8
>LDA.G SYM.bInGlobal
bpl .8
>LDA.G SYM.BufPtr
beq .8
>PUSHB.G SYM.hList
>PUSHW.G SYM.GlobalID
>PUSHW.G SYM.ID
>PUSHW ZPSymbolBuf
>LDA.G SYM.GlobalPtr
>LDA.G SYM.BufPtr
tay
lda #0
cpy #SYMG
@ -189,17 +213,17 @@ SYM.StoreGlobal >LDA.G ASM.PASS
>SYSCALL SListAddData
bcs .9
>STZ.G SYM.bInGlobal
>STZ.G SYM.BufPtr
.8 clc
.9 rts
*---------------------------------------
SYM.UpdateGlobal
>PUSHB.G SYM.hList
>PUSHW.G SYM.GlobalID
>PUSHW.G SYM.ID
>PUSHW ZPSymbolBuf
>LDA.G SYM.GlobalPtr
>LDA.G SYM.BufPtr
tay
lda #0
cpy #SYMG
@ -223,9 +247,6 @@ SYM.PC2Acc ldy #ASM.PC+3
dex
bpl .1
lda #2
sta SRC.ACC.SIZE
stz SRC.ACC.F
rts
*---------------------------------------
SYM.Acc2Global ldy #SYMG-1
@ -239,8 +260,8 @@ SYM.Acc2Global ldy #SYMG-1
*---------------------------------------
SYM.NewLocalA tax Save Local ID
>LDA.G SYM.bInGlobal not in a global label
bpl .91
>LDA.G SYM.BufPtr not in a global label
beq .91
>LDA.G ASM.PASS
bne .20
@ -248,7 +269,7 @@ SYM.NewLocalA tax Save Local ID
jsr SYM.LookupLocalX Pass #1: try to add
bcc .9 Already Defined
>LDA.G SYM.GlobalPtr
>LDA.G SYM.BufPtr
cmp #252 6*42
beq .90
@ -264,7 +285,7 @@ SYM.NewLocalA tax Save Local ID
pha
>LDA.G SYM.GlobalPtr
>LDA.G SYM.BufPtr
tay
txa Get Back ID
sta (ZPSymbolBuf),y
@ -282,7 +303,7 @@ SYM.NewLocalA tax Save Local ID
sta (ZPSymbolBuf),y ending \0
tya
>STA.G SYM.GlobalPtr
>STA.G SYM.BufPtr
lda (ZPSymbolBuf)
ora #SYMG.F.LOCALS
@ -303,10 +324,11 @@ SYM.NewLocalA tax Save Local ID
sec
rts
*---------------------------------------
.20 jsr SYM.LookupLocalX Pass #2: check if defined
bcs .9
.20 >LDA.G SYM.BufPtr Pass #2: setup SYM.BufPtr in case of .EQ
clc
adc #SYML
sta (pData),y
>STA.G SYM.GlobalPtr
rts
*---------------------------------------
SYM.LookupLocalX
@ -343,14 +365,8 @@ SYM.LookupLocalX
bne .2
lda #2
sta SRC.ACC.SIZE
pla
iny point to 0 after local
tya
clc
rts
@ -406,8 +422,21 @@ SYM.Dump.1 >LDYA L.MSG.SYMBOLS
>PUSHWZ from Start
>SYSCALL SListGetData
bcs .9
jsr SYM.Dump.GLP
bcc .1
.9 rts
*---------------------------------------
SYM.Dump.DBG >PUSHW L.MSG.WORD
jsr SYM.Dump.G
>PUSHW ZPPtr2
>PUSHBI 2
>SYSCALL printf
rts
*---------------------------------------
SYM.Dump.GLP jsr SYM.Dump.G
bcs .9
ldx #5
@ -422,17 +451,10 @@ SYM.Dump.1 >LDYA L.MSG.SYMBOLS
.2 cpx #5 already CR printed ?
beq .8
jsr OUT.PrintCR
.8 jmp .1
.9 rts
*---------------------------------------
SYM.Dump.DBG >PUSHW L.MSG.WORD
>PUSHW ZPPtr2
>PUSHBI 2
>SYSCALL printf
rts
jmp OUT.PrintCR
.8 clc
.9 rts
*---------------------------------------
SYM.Dump.G ldy #SYMG.SIZE Get Symbol Size
lda (ZPSymbolBuf),y

View File

@ -337,9 +337,9 @@ CS.RUN ldy #S.PS.hStdIn
bcs .99
jsr DIR.Reset
jsr MAC.Reset
>STZ.G SYM.bInGlobal
>STZ.G MAC.StkPtr
>STZ.G SYM.BufPtr
.10 >LDYA ZPLineBuf
>STYA ZPLinePtr
@ -395,7 +395,8 @@ CS.RUN ldy #S.PS.hStdIn
.9 pha
jsr OUT.PrintLineErr
jsr SYM.Dump.GLP
jsr SYM.StoreGlobal Make sure last Global flushed
* jsr SYM.Dump.1
pla
@ -597,18 +598,18 @@ ASM.PC.PH .BS 4
ASM.PC.DU .BS 4
SYM.hList .BS 1
SYM.bInGlobal .BS 1
SYM.GlobalID .BS 2
SYM.hGlobalBuf .BS 1
SYM.GlobalPtr .BS 1
SYM.hBuf .BS 1
SYM.BufPtr .BS 1
SYM.ID .BS 2
MAC.hList .BS 1
MAC.hBuf .BS 1
MAC.BufPtr .BS 1
MAC.ID .BS 2
MAC.hStk .BS 1
MAC.StkPtr .BS 1
MAC.hArgBuf .BS 1
MAC.ID .BS 2
MAC.CtxID .BS 1
MAC.CtxNextID .BS 1
MAC.CtxStackPtr .BS 1

View File

@ -14,7 +14,7 @@ NEW
.OR ZPBIN
ZS.START
ArgIndex .BS 1
ZPPTR1 .BS 2
ZPPtr1 .BS 2
bPause .BS 1
bAll .BS 1
@ -143,7 +143,7 @@ CS.RUN
*--------------------------------------
CS.RUN.LOOP ldy #S.PS.hStdIn
lda (pPS),y
>SYSCALL feof
>SYSCALL FEOF
bcs .9 IO error
tay
bne .1 no char
@ -211,7 +211,7 @@ CS.RUN.OPEN >PUSHW ZPPtr1
rts
*--------------------------------------
CS.RUN.SEEK >LDYA ZPPtr1
>SYSCALL atol
>SYSCALL AToL
bcs .9
>PULLL SeekOfs
@ -221,12 +221,12 @@ CS.RUN.SEEK >LDYA ZPPtr1
>PUSHL SeekOfs
lda hFile1
>SYSCALL fseek
>SYSCALL FSeek
bcs .9
.1 >PUSHBI SEEK.SET
>PUSHL SeekOfs
lda hFile2
>SYSCALL fseek
>SYSCALL FSeek
.9 rts
*--------------------------------------

View File

@ -16,7 +16,7 @@ CSH.T.ULONG .EQ 6
CSH.T.FLOAT .EQ 7
CSH.T.VARIADIC .EQ $1F
*--------------------------------------
CSH.OPChars .AS "!~+-*/%=&|^&<>"
CSH.OPChars .AS "!~+-*/%=&|^<>"
CSH.OPChars.Cnt .EQ *-CSH.OPChars
*--------------------------------------
* Pre Operators: + - ! ~ ++ --