Kernel 0.93

This commit is contained in:
Rémy GIBERT 2019-03-20 16:55:26 +00:00
parent 4d8432082a
commit 34c7de8bea
6 changed files with 196 additions and 139 deletions

Binary file not shown.

View File

@ -293,7 +293,11 @@ DIR.EQ >LDA.G SYM.bNewGlobal
jsr SRC.GetNextCharNB
bcs .99
jmp EXP.Eval
jsr EXP.Eval
bcs .9
jsr SYM.Acc2Global
jmp SYM.StoreGlobal
.99 lda #ERR.SYNTAX.ERROR
sec

View File

@ -194,16 +194,19 @@ EXP.GetSymL jsr SRC.GetNextChar
ora SRC.ACC+2
ora SRC.ACC+3
bne EXP.EvalExitSYN Max .255
lda SRC.ACC
ldx SRC.ACC
beq EXP.EvalExitSYN .0 is not allowed
jsr SYM.LookupLocal
jsr SYM.GetLocalX
bcc .8
>LDA.G ASM.PASS pass#2?
bne EXP.EvalExitUND
lda #0 Mark ACC as pending
sta SRC.ACC.SIZE
lda #SYMG.F.FWREF Mark ACC as pending
sta SRC.ACC.F
stz SRC.ACC.SIZE
clc
rts
@ -214,7 +217,7 @@ EXP.GetSymL jsr SRC.GetNextChar
EXP.GetSymG jsr SYM.LookupGlobal
bcs .2
jsr SYM.Lookup2Acc
* jsr SYM.Lookup2Acc
clc
rts

View File

@ -361,7 +361,7 @@ SRC.ParseLine.AM
.74 lda SRC.ACC.SIZE
beq .72 Pending...assume 2 bytes...
tax
.73 lda SRC.ACC-1,x
@ -391,9 +391,8 @@ SRC.ParseLine.AM
*---------------------------------------
SRC.ParseLine.AMCheck
* jsr OUT.PrintLine.1
* >PUSHW L.SRC.AM.StrBuf
* >LDYA L.MSG.PSTRCRLF
* >SYSCALL printf
* >LDYA L.SRC.AM.StrBuf
* >SYSCALL puts
* >DEBUG
lda SRC.AM.StrBuf
beq SRC.ParseLine.OPAMCheckFF

View File

@ -63,79 +63,80 @@ SYM.Quit >LDA.G SYM.hLookupBuf
beq .3
>SYSCALL FreeMem
.3 >LDA.G SYM.hGlobalList
beq .8
beq SYM.Quit.8
>SYSCALL SListFree
.8 clc
rts
SYM.Quit.8 clc
SYM.Quit.RTS rts
*---------------------------------------
SYM.Dump stz ZPPtr2
stz ZPPtr2+1
>LDA.G ASM.LI.ON
bpl .1
SYM.Dump >LDA.G ASM.LI.ON
bpl SYM.Quit.8
>LDYA L.MSG.SYMBOLS
>SYSCALL puts
.1 >PUSHW ZPNameBuf
stz ZPPtr2
stz ZPPtr2+1
.1 >LDYA ZPPtr2
>STYA ZPPtr1
>PUSHW ZPNameBuf
>PUSHW ZPPtr1
>LDA.G SYM.hGlobalList
>SYSCALL SListGetByID
bcc .10
bcs SYM.Quit.8
clc
rts
.10 >STYA ZPPtr2 Save Next ID
>STYA ZPPtr2 Save Next ID
>PUSHW ZPNameBuf Label (PString)
>PUSHBI 2
>LDYA L.MSG.PSTR
>SYSCALL printf
bcs .9
.9 bcs SYM.Quit.RTS
>PUSHWI 0 Start
>PUSHWI $ffff End
>PUSHWI 0 Allocate
>PUSHW ZPPtr1
>PUSHW ZPGlobalBuf
>PUSHW ZPPtr1 KeyID
>LDA.G SYM.hGlobalList
>SYSCALL SListGetData
bcs .9
txa
>STA.G hBuf
ldy #SYMG.F Get Symbol Size
ldy #SYMG.SIZE Get Symbol Size
lda (ZPGlobalBuf),y
* and #SYMG.F.SIZE
>PUSHA Byte Count
tax
beq .3
asl
pha
phx
.2 iny
lda (ZPGlobalBuf),y
>PUSHA
dex
bne .2
plx
.3 ldy L.MSG.EQU0,x
pla Byte Count
asl
tax
.3 >PUSHA
ldy L.MSG.EQU0,x
lda L.MSG.EQU0+1,x
>SYSCALL printf
ldy #SYMG.SIZE
.4 tya
lda (ZPGlobalBuf)
bit #SYMG.F.LOCALS
beq .7
cmp (ZPGlobalBuf)
beq .7 No Local Symbol
ldy #SYMG
.4 lda (ZPGlobalBuf),y
beq .7 End Local Symbol
iny
lda (ZPGlobalBuf),y Get ID
@ -162,16 +163,15 @@ SYM.Dump stz ZPPtr2
>LDYA L.MSG.CRLF
>SYSCALL printf
jmp .1
rts
.8 clc
.9 rts
*---------------------------------------
SYM.NewOrGetGlobal
>LDA.G ASM.PASS
bne SYM.GetGlobal
SYM.NewGlobal >PUSHW ZPLinePtr Pass #1; try to add global...
SYM.NewGlobal jsr SYM.StoreGlobal
bcs .99
>PUSHW ZPLinePtr Pass #1; try to add global...
>LDA.G SYM.hGlobalList
>SYSCALL SListNewKey
bcs .9 Already Defined
@ -184,10 +184,19 @@ SYM.NewGlobal >PUSHW ZPLinePtr Pass #1; try to add global...
inc ZPLinePtr+1
.1 lda #$ff
.1 jsr SYM.PC2Acc
jsr SYM.Acc2Global
lda #SYMG
>STA.G SYM.GlobalPtr
lda #$ff
>STA.G SYM.bNewGlobal
jmp SYM.PC2Acc
clc
rts
.9 lda #ERR.SYMBOL.REDEF
sec
@ -206,8 +215,12 @@ SYM.GetGlobal >PUSHW ZPLinePtr Pass #2: should be already defined...
inc ZPLinePtr+1
.1
clc
.1 >PUSHWI 0 Start
>PUSHWI $ffff End
>PUSHWI ZPGlobalBuf
>PUSHW SYM.GlobalID
>LDA.G SYM.hGlobalList
>SYSCALL SListGetData
rts
.9 lda #ERR.UNDEF.SYMBOL
@ -219,27 +232,62 @@ SYM.LookupGlobal
>LDA.G SYM.hGlobalList
>SYSCALL SListLookup
bcs .9
>STYA.G SYM.GlobalID
phy
pha
txa
adc ZPLinePtr
sta ZPLinePtr
bcc .8
bcc .1
inc ZPLinePtr+1
clc
.8
.9 rts
.1 >PUSHWI 0 Start
>PUSHWI SYMG
>PUSHW L.SRC.ACC.F
pla
ply
>PUSHYA
>LDA.G SYM.hGlobalList
>SYSCALL SListGetData
rts
.9 lda #ERR.UNDEF.SYMBOL
sec
rts
*---------------------------------------
SYM.StoreGlobal >LDA.G ASM.PASS
bne .8
>PUSHWI 5
>PUSHW L.SRC.ACC.SIZE
>LDA.G SYM.StoreGlobal
bpl .8
>LDA.G SYM.GlobalPtr
tay
lda #0
cpy #SYMG
beq .1
lda #SYMG.F.LOCALS
tsb SRC.ACC.F
lda #0
sta (ZPGlobalBuf),y
iny
bne .1
inc
.1 >PUSHYA
.2 >PUSHW ZPGlobalBuf
>PUSHW.G SYM.GlobalID
>LDA.G SYM.hGlobalList
>SYSCALL SListAddData
bcs .9
lda #0
>STA.G SYM.bNewGlobal
rts
@ -253,10 +301,20 @@ SYM.PC2Acc ldy #ASM.PC+3
dey
bpl .1
lda #4
lda #2
sta SRC.ACC.SIZE
rts
*---------------------------------------
SYM.Acc2Global ldy #0
.2 lda SRC.ACC.F,y
sta (ZPGlobalBuf),y
iny
cpy #SYMG
bne .2
rts
*---------------------------------------
SYM.Lookup2Acc ldy #SYMG.F+4
ldx #4
@ -281,23 +339,18 @@ SYM.NewOrGetLocalA
tax Save ID
>LDA.G SYM.bNewGlobal not in a global label
bmi .1
bpl .91
lda #ERR.INV.LABEL
clc
rts
.1 >LDA.G ASM.PASS
bne SYM.LookupLocal.1 Pass #2: should be already defined...
>LDA.G ASM.PASS
bne SYM.GetLocalX
SYM.NewLocal jsr SYM.LookupLocal.1 Pass #1; try to add
jsr SYM.GetLocalX Pass #1; try to add
bcc .9 Already Defined
lda (ZPGlobalBuf)
>LDA.G SYM.GlobalPtr
tay
clc
adc #SYML.SIZE
bcs .90
inc
beq .90
ldy #ASM.PC+4
@ -312,9 +365,8 @@ SYM.NewLocal jsr SYM.LookupLocal.1 Pass #1; try to add
iny
txa Get Back ID
sta (ZPGlobalBuf),y
ldx #4
.2 pla
@ -324,55 +376,55 @@ SYM.NewLocal jsr SYM.LookupLocal.1 Pass #1; try to add
bne .2
tya
sta (ZPGlobalBuf)
>STA.G SYM.GlobalPtr
clc
rts
.91 lda #ERR.INV.LABEL
sec
rts
.90 lda #ERR.TOO.MANY.LOCAL
* sec
sec
rts
.9 lda #ERR.SYMBOL.REDEF
sec
rts
*---------------------------------------
SYM.LookupLocal tax
SYM.LookupLocal.1
ldy #SYMG.SIZE
SYM.GetLocalX >LDA.G SYM.GlobalPtr Pass #2: should be already defined...
beq .9
tya
.1 cmp (ZPGlobalBuf)
beq .9 CS if =
txa
iny
cmp (ZPGlobalBuf),y
beq .2
tya
clc
adc #SYML.SIZE-1
tay
bcc .1
.9 lda #ERR.UNDEF.SYMBOL
* sec
rts
.2 ldx #0
.3 iny
lda (ZPGlobalBuf),y
sta SRC.ACC,x
inx
cpx #4
.1 txa
cmp (ZPGlobalBuf),y
bne .3
ldx #4
stx SRC.ACC.SIZE
.2 iny
lda (ZPGlobalBuf),y
sta SRC.ACC.SIZE,x
dex
bne .2
clc
rts
.3 tya
clc
adc #SYML
tay
inc
bne .1
.9 lda #ERR.UNDEF.SYMBOL
sec
rts
*---------------------------------------
* Private Symbol Record: (9 bytes)
* 0 : Len (8)

View File

@ -12,43 +12,42 @@ AUTO 4,1
.DUMMY
.OR ZPBIN
ZS.START
ZPPtr1 .EQ ZPBIN
ZPPtr2 .EQ ZPBIN+2
ZPPtr1 .BS 2
ZPPtr2 .BS 2
ZPLineBuf .EQ ZPBIN+4
ZPLinePtr .EQ ZPBIN+6
ZPNameBuf .EQ ZPBIN+8
ZPGlobalBuf .EQ ZPBIN+10
ZPLookupBuf .EQ ZPBIN+12
ZPLineBuf .BS 2
ZPLinePtr .BS 2
ZPNameBuf .BS 2
ZPGlobalBuf .BS 2
ZPMacroBuf .EQ ZPBIN+14
ZPCtxBuf .EQ ZPBIN+16
ZPLookupBuf .BS 2
ZPAMPtr .EQ ZPBIN+18
ZPRPtr .EQ ZPBIN+20
ZPOpsPtr .EQ ZPBIN+22
ZPOpDefPtr .EQ ZPBIN+24
ZPMacroBuf .BS 2
ZPCtxBuf .BS 2
ZPTmpBuf .EQ ZPBIN+26
ZPAMPtr .BS 2
ZPRPtr .BS 2
ZPOpsPtr .BS 2
ZPOpDefPtr .BS 2
ZPTmpBuf .BS 2
ZS.END .ED
*---------------------------------------
* Symbols
*---------------------------------------
SYM.F.PENDING .EQ %10000000
SYM.F.RW .EQ %01000000
*---------------------------------------
SYMG.TYPE .EQ 0 1,2,3,4
SYMG.TYPE.S .EQ $ff String
SYMG.F .EQ 1
SYMG.F .EQ 0
SYMG.F.FWREF .EQ %10000000
SYMG.F.RW .EQ %01000000
SYMG.F.LOCALS .EQ %00100000
SYMG.SIZE .EQ 1 1,2,3,4
SYMG.V .EQ 2
*
SYMG.SIZE .EQ 6 DWORD
SYMG .EQ 6 DWORD
*---------------------------------------
SYML.ID .EQ 0 1..255
SYML.F .EQ 1
SYML.V .EQ 2 DWORD
SYML.V .EQ 1 DWORD
*
SYML.SIZE .EQ 6
SYML .EQ 5
*---------------------------------------
MCTX.LEN .EQ 0
MCTX.PTR .EQ 1
@ -137,7 +136,7 @@ L.SRC.AM.StrBuf .DA SRC.AM.StrBuf
L.ASM.6502 .DA ASM.6502
L.ASM.T.FILENAME .DA ASM.T.FILENAME
L.FIO.Stat .DA FIO.Stat
L.SRC.ACC.SIZE .DA SRC.ACC.SIZE
L.SRC.ACC.F .DA SRC.ACC.F
L.T.DIRECTIVES .DA T.DIRECTIVES
J.DIRECTIVES .DA DIR.AC
.DA DIR.AS
@ -476,6 +475,7 @@ ASM.T.FILENAME .BS 65
FIO.Stat .BS S.STAT
SRC.ACC.F .BS 1
SRC.ACC.SIZE .BS 1
SRC.ACC .BS 4
@ -538,15 +538,14 @@ ASM.PC.PH .BS 4
ASM.PC.DU .BS 4
SYM.hGlobalList .BS 1
SYM.hNameBuf .BS 1
SYM.hGlobalBuf .BS 1
SYM.GlobalID .BS 2
SYM.bNewGlobal .BS 1
SYM.GlobalID .BS 2
SYM.hGlobalBuf .BS 1
SYM.GlobalPtr .BS 1
SYM.hNameBuf .BS 1
SYM.hLookupBuf .BS 1
SYM.hBuf .BS 1
SYM.LocalID .BS 2
MAC.hMacroList .BS 1
MAC.hMacroBuf .BS 1