Kernel 0.9.1 : ASM & SLIST API

This commit is contained in:
Rémy GIBERT 2018-01-22 07:34:59 +00:00
parent db753146f6
commit 47bd2c8ed7
9 changed files with 114 additions and 86 deletions

Binary file not shown.

Binary file not shown.

View File

@ -183,10 +183,8 @@ DIR.EQ jsr SRC.GetNextCharNB
ldx #3 ldx #3
.1 lda SRC.ACC,x jsr SYM.UpdateGlobal
sta SRC.GLabel.Value,x bcs .9
dex
bpl .1
clc clc
rts rts

View File

@ -163,7 +163,7 @@ EXP.GetLocal jsr SRC.GetDecimal
bne EXP.EvalExitSYN Max .255 bne EXP.EvalExitSYN Max .255
lda SRC.ACC lda SRC.ACC
beq EXP.EvalExitSYN .0 is not allowed beq EXP.EvalExitSYN .0 is not allowed
jsr SYM.SearchLocal jsr SYM.GetLocal
bcs EXP.EvalExitUND bcs EXP.EvalExitUND
rts rts
*--------------------------------------- *---------------------------------------
@ -175,7 +175,7 @@ EXP.SetAccA sta SRC.ACC
*--------------------------------------- *---------------------------------------
EXP.GetSymbol >PUSHB.G SYM.hGlobals EXP.GetSymbol >PUSHB.G SYM.hGlobals
>PUSHW ZPLinePtr >PUSHW ZPLinePtr
>PUSHEA.G SYM.Value >PUSHEA.G SYM.Global
>SYSCALL SListLookup >SYSCALL SListLookup
bcs .2 bcs .2
@ -195,13 +195,13 @@ EXP.GetSymbol >PUSHB.G SYM.hGlobals
>PUSHB.G SYM.hGlobals >PUSHB.G SYM.hGlobals
>PUSHW ZPLinePtr >PUSHW ZPLinePtr
>PUSHEA.G SYM.Value >PUSHEA.G SYM.Global
lda #6 lda #6
>STA.G SYM.Value+SYM.LEN >STA.G SYM.Global+SYM.LEN
lda #0 lda #0
>STA.G SYM.Value+SYM.F >STA.G SYM.Global+SYM.F
>SYSCALL SListAdd >SYSCALL SListAdd
bcs .9 bcs .9

View File

@ -69,21 +69,24 @@ SRC.ParseLine lda (ZPLineBuf)
lda (pData),y lda (pData),y
bne .1 bne .1
stz SRC.GLabel.New lda #0
>STA.G SYM.bGlobalUpdate
cpx #' ' no label...go scan dir/opcode cpx #' ' no label...go scan dir/opcode
beq .4 beq .4
cpx #'.' local symbol? cpx #'.' local symbol?
bne .2 bne .2
jsr SRC.ParseLine.SymL jsr SYM.AddLocal
bra .3 bra .3
.1 clc .1 clc
rts rts
.2 jsr SRC.ParseLine.SymG .2 jsr SYM.AddGlobalPC
.3 bcs SRC.ParseLine.Err .3 bcs SRC.ParseLine.Err
.4 jsr SRC.GetNextCharNB Scan for an Opcode... .4 jsr SRC.GetNextCharNB Scan for an Opcode...
@ -108,7 +111,7 @@ SRC.ParseLine lda (ZPLineBuf)
.6 jsr SRC.ParseLine.OpCode .6 jsr SRC.ParseLine.OpCode
bcs SRC.ParseLine.Err bcs SRC.ParseLine.Err
SRC.ParseLine.Ok lda SRC.GLabel.New SRC.ParseLine.Ok >LDA.G SYM.bGlobalUpdate
bpl .8 bpl .8
ldy #ASM.PASS ldy #ASM.PASS
@ -116,28 +119,20 @@ SRC.ParseLine.Ok lda SRC.GLabel.New
bne .8 yes, nothing to do bne .8 yes, nothing to do
* --- Pass #1 * --- Pass #1
>LDYA L.SRC.GLabel.Flags jsr SYM.UpdateGlobal
jsr SYM.SearchGlobal
bcs .1 if CS, not found, add
lda SRC.FLabel.Flags
bit #$40 found symbol pending ?
bne .2 yes, update
bit #$1 found is .SE ? bcs SRC.ParseLine.Inv if CS, not found ???
>LDA.G SYM.Global+SYM.F
bit #SYM.F.RESOLVED found symbol pending ?
bne .2 yes, update
bit #SYM.F.RW found is .SE ?
beq SRC.ParseLine.Redef no, redefine error beq SRC.ParseLine.Redef no, redefine error
.2 ldx #0 update current symbol with .2 jsr SYM.UpdateGlobal
.3 lda SRC.GLabel.Flags flags & value
jsr SYM.AddByteGBlock
inx
cpx #5
bne .3
bra .8 bra .8
.1 >LDYA L.SRC.GLabel.Flags
jsr SYM.AddGToGBlockYA
bcs SRC.ParseLine.Err
.8 clc .8 clc
rts rts
@ -178,24 +173,6 @@ SRC.ParseLine.SymR lda #ERR.RANGE
sec sec
rts rts
*--------------------------------------- *---------------------------------------
SRC.ParseLine.SymG >PUSHB.G SYM.hGlobals
>PUSHW ZPLinePtr
>PUSHEA.G SYM.Value
>SYSCALL SListAdd
bcs SRC.ParseLine.SymE
adc ZPLinePtr
sta ZPLinePtr
bcc .1
inc ZPLinePtr+1
.1
clc
rts
*---------------------------------------
SRC.ParseLine.Dir >LDYA L.T.DIRECTIVES SRC.ParseLine.Dir >LDYA L.T.DIRECTIVES
jsr SRC.GetKeyword jsr SRC.GetKeyword

View File

@ -42,7 +42,69 @@ SYM.Dump >LDYA L.MSG.SYMBOLS
clc clc
rts rts
*--------------------------------------- *---------------------------------------
SYM.AddPending SYM.AddGlobalPC ldx #4
ldy #ASM.PC
.1 lda (pData),y
pha
iny
dex
bne .1
ldx #4
ldy #SYM.Global+SYM.V+3
.2 pla
sta (pData),y
dey
dex
bne .2
>DEBUG
*---------------------------------------
SYM.AddGlobal lda #SYM.F.RESOLVED
>STA.G SYM.Global+SYM.F
lda #6 LEN+F+DWORD
>STA.G SYM.Global+SYM.LEN
>PUSHB.G SYM.hGlobals
>PUSHW ZPLinePtr
>PUSHEA.G SYM.Global
>SYSCALL SListAdd
bcs .9
adc ZPLinePtr
sta ZPLinePtr
bcc .1
inc ZPLinePtr+1
clc
.1 tya
>STA.G ASM.SYM.ID+1
dey
txa
sta (pData),y
.9 rts
*---------------------------------------
SYM.UpdateGlobal >PUSHB.G SYM.hGlobals
>PUSHW.G ASM.SYM.ID
>PUSHEA.G SYM.Global
>SYSCALL SListUpdateByID
rts
*---------------------------------------
SYM.AddLocal
clc
rts
*---------------------------------------
SYM.GetLocal
clc
rts
*--------------------------------------- *---------------------------------------
SYM.AddPrivate SYM.AddPrivate
clc clc
@ -60,17 +122,6 @@ SYM.LookupMacro
clc clc
rts rts
*--------------------------------------- *---------------------------------------
SYM.UpdateGlobal
clc
rts
*---------------------------------------
SYM.SearchLocal
clc
rts
*---------------------------------------
SYM.SearchGlobal clc
rts
*---------------------------------------
MAN MAN
SAVE /A2OSX.BUILD/BIN/DEV/ASM.S.SYM SAVE /A2OSX.BUILD/BIN/DEV/ASM.S.SYM
LOAD /A2OSX.BUILD/BIN/DEV/ASM.S LOAD /A2OSX.BUILD/BIN/DEV/ASM.S

View File

@ -444,7 +444,9 @@ ASM.LOCAL.INVALID .BS 1
ASM.SYM.ID .BS 2 ASM.SYM.ID .BS 2
SYM.hGlobals .BS 1 SYM.hGlobals .BS 1
SYM.Value .BS 6 SYM.bGlobalUpdate .BS 1
SYM.Global .BS 6
SYM.ID .BS 1
DS.END .ED DS.END .ED
*--------------------------------------- *---------------------------------------
.DO DS.END-DS.START>$FF .DO DS.END-DS.START>$FF

View File

@ -561,6 +561,12 @@ MEM.GetKeyCharY sta CLRREADAUX
sta SETREADAUX sta SETREADAUX
beq .9 beq .9
cmp #'.'
beq .8
cmp #'_'
beq .8
cmp #'0' cmp #'0'
bcc .9 bcc .9
cmp #'9'+1 cmp #'9'+1
@ -574,13 +580,7 @@ MEM.GetKeyCharY sta CLRREADAUX
cmp #'a' cmp #'a'
bcc .9 bcc .9
cmp #'z'+1 cmp #'z'+1
bcc .8 bcs .9
cmp #'.'
bne .9
cmp #'_'
bne .9
.8 clc .8 clc
rts rts

View File

@ -2,7 +2,7 @@ NEW
PREFIX /A2OSX.BUILD PREFIX /A2OSX.BUILD
AUTO 4,1 AUTO 4,1
*-------------------------------------- *--------------------------------------
X.SLIST jmp (.1-SLIST.New,x) X.SLIST jmp (.1-SYS.SListAdd,x)
.1 .DA SLIST.Add .1 .DA SLIST.Add
.DA SLIST.Lookup .DA SLIST.Lookup
.DA SLIST.GetByID .DA SLIST.GetByID
@ -10,22 +10,6 @@ X.SLIST jmp (.1-SLIST.New,x)
.DA SLIST.New .DA SLIST.New
.DA SLIST.Free.A .DA SLIST.Free.A
*-------------------------------------- *--------------------------------------
SLIST.New >LDYAI 160 40k Max before out of memory!!!
jsr K.GetMem0.YA
bcs .9
>STYA ZPSListIndex
stx .8+1
>LDYAI 256
jsr K.GetMem0.YA
bcs .9
txa
sta (ZPSListIndex)
.8 lda #$ff SELF MODIFIED
.9 rts
*--------------------------------------
SLIST.Add jsr SLIST.Search SLIST.Add jsr SLIST.Search
bcc .9 Lookup succeeded...DUP bcc .9 Lookup succeeded...DUP
@ -157,7 +141,23 @@ SLIST.UpdateByID
clc clc
.9 rts .9 rts
*-------------------------------------- *--------------------------------------
SLIST.Free.A sta .8 SLIST.New >LDYAI 160 40k Max before out of memory!!!
jsr K.GetMem0.YA
bcs .9
>STYA ZPSListIndex
stx .8+1
>LDYAI 256
jsr K.GetMem0.YA
bcs .9
txa
sta (ZPSListIndex)
.8 lda #$ff SELF MODIFIED
.9 rts
*--------------------------------------
SLIST.Free.A sta .8+1
jsr K.GetMemPtr.A jsr K.GetMemPtr.A
>STYA .1+1 >STYA .1+1