A2osX/BIN/ASM.S.SYM.txt
2019-03-21 07:07:38 +00:00

448 lines
7.4 KiB
Plaintext
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

NEW
PREFIX
AUTO 4,1
*---------------------------------------
* Global Symbol Record: (6+ bytes)
* 0 : Len
* 1 : Flags:
* b7=0=pending,1=resolved
* b6=R/W (.SE)
* b2,b1,b0 : Size (in bytes)
* 2-5 : 32 bits Value
* 6+ : Local Symbols.....
*---------------------------------------
* Local Symbol Record: (5 bytes)
* 0 : Local ID (1->255)
* 1-4 : 32 bits Value (PC)
*---------------------------------------
SYM.Init >SYSCALL SListNew
bcs .9
>STA.G SYM.hGlobalList
>LDYAI 256
>SYSCALL getmem
bcs .9
>STYA ZPNameBuf
txa
>STA.G SYM.hNameBuf
>LDYAI 256
>SYSCALL getmem
bcs .9
>STYA ZPGlobalBuf
txa
>STA.G SYM.hGlobalBuf
>LDYAI 256
>SYSCALL getmem
bcs .9
>STYA ZPLookupBuf
txa
>STA.G SYM.hLookupBuf
.9 rts
*---------------------------------------
SYM.Reset >STZ.G SYM.bNewGlobal
rts
*---------------------------------------
SYM.Quit >LDA.G SYM.hLookupBuf
beq .1
>SYSCALL FreeMem
.1 >LDA.G SYM.hNameBuf
beq .2
>SYSCALL FreeMem
.2 >LDA.G SYM.hGlobalBuf
beq .3
>SYSCALL FreeMem
.3 >LDA.G SYM.hGlobalList
beq SYM.Quit.8
>SYSCALL SListFree
SYM.Quit.8 clc
SYM.Quit.RTS rts
*---------------------------------------
SYM.Dump >LDA.G ASM.LI.ON
bpl SYM.Quit.8
>LDYA L.MSG.SYMBOLS
>SYSCALL puts
stz ZPPtr2
stz ZPPtr2+1
.1 >LDYA ZPPtr2
>STYA ZPPtr1
>PUSHW ZPNameBuf
>PUSHW ZPPtr1
>LDA.G SYM.hGlobalList
>SYSCALL SListGetByID
bcs SYM.Quit.8
>STYA ZPPtr2 Save Next ID
>PUSHWI 0 Start
>PUSHWI $ffff End
>PUSHW ZPGlobalBuf
>PUSHW ZPPtr1 KeyID
>LDA.G SYM.hGlobalList
>SYSCALL SListGetData
bcs SYM.Quit.RTS
ldy #SYMG.SIZE Get Symbol Size
lda (ZPGlobalBuf),y
tax
beq .3
phx
.2 iny
lda (ZPGlobalBuf),y
>PUSHA
dex
bne .2
pla Byte Count
asl
tax
.3 >PUSHA
ldy L.MSG.EQU0,x
lda L.MSG.EQU0+1,x
>SYSCALL printf
>PUSHW ZPNameBuf Label
>PUSHBI 2
>LDYA L.MSG.LABEL
>SYSCALL printf
lda (ZPGlobalBuf)
bit #SYMG.F.LOCALS
beq .7
ldy #SYMG
.4 lda (ZPGlobalBuf),y
beq .7 End Local Symbol
iny
lda (ZPGlobalBuf),y Get ID
pha
ldx #4
.5 iny
lda (ZPGlobalBuf),y
>PUSHA
dex
bne .5
pla
>PUSHA
phy
>PUSHBI 6
>LDYA L.MSG.LSYMBOL
>SYSCALL printf
ply
bne .4
.7 >PUSHBI 0
>LDYA L.MSG.CRLF
>SYSCALL printf
jmp .1
*---------------------------------------
SYM.NewOrGetGlobal
>LDA.G ASM.PASS
bne SYM.GetGlobal
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
>STYA.G SYM.GlobalID
txa
adc ZPLinePtr
sta ZPLinePtr
bcc .1
inc ZPLinePtr+1
.1 jsr SYM.PC2Acc
jsr SYM.Acc2Global
lda #SYMG
>STA.G SYM.GlobalPtr
lda #$ff
>STA.G SYM.bNewGlobal
clc
rts
.9 lda #ERR.SYMBOL.REDEF
sec
.99 rts
*---------------------------------------
SYM.GetGlobal >PUSHW ZPLinePtr Pass #2: should be already defined...
>LDA.G SYM.hGlobalList
>SYSCALL SListLookup
bcs .9
>STYA.G SYM.GlobalID
txa
adc ZPLinePtr
sta ZPLinePtr
bcc .1
inc ZPLinePtr+1
.1 >PUSHWI 0 Start
>PUSHWI $ffff End
>PUSHWI ZPGlobalBuf
>PUSHW SYM.GlobalID
>LDA.G SYM.hGlobalList
>SYSCALL SListGetData
rts
.9 lda #ERR.UNDEF.SYMBOL
sec
rts
*---------------------------------------
SYM.LookupGlobal
>PUSHW ZPLinePtr
>LDA.G SYM.hGlobalList
>SYSCALL SListLookup
bcs .9
phy
pha
txa
adc ZPLinePtr
sta ZPLinePtr
bcc .1
inc ZPLinePtr+1
.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
>LDA.G SYM.bNewGlobal
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
.8 clc
.9 rts
*---------------------------------------
SYM.PC2Acc ldy #ASM.PC+3
.1 lda (pData),y
sta SRC.ACC,x
dey
bpl .1
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
.1 lda (ZPLookupBuf),y
sta SRC.ACC.SIZE,x
dey
dex
bne .1
lda (ZPLookupBuf),y
* and #SYMG.F.SIZE
sta SRC.ACC.SIZE
clc
rts
*---------------------------------------
* Local Symbol Record: (5 bytes)
* 0 : Local ID (1->255)
* 1-4 : 32 bits Value (PC)
*---------------------------------------
SYM.NewOrGetLocalA
tax Save ID
>DEBUG
>LDA.G SYM.bNewGlobal not in a global label
bpl .91
>LDA.G ASM.PASS
bne SYM.GetLocalX
jsr SYM.GetLocalX Pass #1; try to add
bcc .9 Already Defined
>LDA.G SYM.GlobalPtr
tay
inc
beq .90
ldy #ASM.PC+4
.1 dey
lda (pData),y
pha
cpy #ASM.PC
bne .1
lda (ZPGlobalBuf)
tay
iny
txa Get Back ID
sta (ZPGlobalBuf),y
ldx #4
.2 pla
iny
sta (ZPGlobalBuf),y
dex
bne .2
tya
>STA.G SYM.GlobalPtr
clc
rts
.91 lda #ERR.INV.LABEL
sec
rts
.90 lda #ERR.TOO.MANY.LOCAL
sec
rts
.9 lda #ERR.SYMBOL.REDEF
sec
rts
*---------------------------------------
SYM.GetLocalX >LDA.G SYM.GlobalPtr Pass #2: should be already defined...
beq .9
tay
.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)
* 1 : Flags:
* b7=0=pending,1=resolved
* 2-5 : 32 bits Value (PC)
* 6,7 : MCID (Macro Context ID)
* 8 : Private ID (0->255)
*---------------------------------------
SYM.AddPrivate
clc
rts
*---------------------------------------
SYM.LookupPrivate
clc
rts
*---------------------------------------
MAN
SAVE USR/SRC/BIN/ASM.S.SYM
LOAD USR/SRC/BIN/ASM.S
ASM