A2osX/BIN/CC.S.SYM.txt

497 lines
7.7 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
AUTO 3,1
*--------------------------------------
* Input : ZPLineBufPtr, Y,A = T/Q, X = SC
* Output : Y,A = VarID
*--------------------------------------
CC.SYM.New >STYA ZPPtr2 T/Q
stx ZPPtr3 SC
ldy ScopePtr
lda (pData),y
jsr CC.SYM.NewKey
bcs .9
>STYA.G CC.SymID Y,A = KeyID
stx ZPPtr3+1 X = KeyLen
>LDYAI 256
>SYSCALL GetMem
bcs .9
>STYA ZPSymBufPtr
txa
>STA.G CC.hSymBuf
lda ZPPtr2
sta (ZPSymBufPtr) #SYM.T
lda ZPPtr2+1
ldy #SYM.Q
sta (ZPSymBufPtr),y
lda ZPPtr3
iny #SYM.SC
sta (ZPSymBufPtr),y
iny
lda #0
.1 sta (ZPSymBufPtr),y
iny
cpy #SYM.Def
bne .1
sty ZPSymSize
stz ZPSymSize+1
ldx ZPPtr3+1 Key Len
jsr CC.SkipX
jsr CC.GetCharNB
bcs CC.SYM.SetAddr
cmp #'('
bne CC.SYM.NewV
jmp CC.F.Decl
.9 rts
*--------------------------------------
CC.SYM.NewV cmp #'['
bne CC.SYM.SetAddr
jsr CC.GetNextCharNB Skip [
bcs .99
cmp #']'
bne .3
.2 ldy #SYM.Q
lda (ZPSymBufPtr),y
bit #SYM.Q.PPPOINTER
beq .99
and #SYM.Q.AAARRAY
cmp #SYM.Q.AAARRAY
bcs .99
* ldy #SYM.Q
lda (ZPSymBufPtr),y
* clc
adc #SYM.Q.ARRAY
sta (ZPSymBufPtr),y
jsr CC.GetNextCharNB Skip ]
bcs CC.SYM.SetAddr
cmp #'['
beq .2
bra CC.SYM.SetAddr
*--------------------------------------
.3 jsr CC.EXP.IntConst
bcs .9
jsr CC.SYM.SetSizeOf
jsr CC.GetCharNB
bcs .99
cmp #']'
bne .99
jsr CC.GetNextCharNB Skip ]
bcs CC.SYM.SetAddr
* cmp #'['
* bne CC.SYM.SetAddr
bra CC.SYM.SetAddr
.99 lda #E.CSYN
sec
.9 rts
*--------------------------------------
CC.SYM.SetAddr ldy #SYM.Q
lda (ZPSymBufPtr),y
and #SYM.Q.FUNC
bne .9
ldy #SYM.SC
lda (ZPSymBufPtr),y
beq CC.SYM.SetAddrG SYM.SC.STATIC
cmp #SYM.SC.AUTO
beq CC.SYM.SetAddrL
.9 lda #E.TMISMATCH
sec
rts
*--------------------------------------
CC.SYM.SetAddrG jsr CC.SYM.GetSymSizeOfInAXC
jsr CC.SYM.SetSizeOf
* clc / sec A,X=Size, CS if pointer
ldy #SYM.Addr
lda ZPCCData
sta (ZPSymBufPtr),y
adc ZPCCData
sta ZPCCData
iny
lda ZPCCData+1
sta (ZPSymBufPtr),y
txa
adc ZPCCData+1
sta ZPCCData+1
clc
rts
*--------------------------------------
CC.SYM.SetAddrL jsr CC.SYM.GetSymSizeOfInAXC
jsr CC.SYM.SetSizeOf
ldy #SYM.SizeOf+1
lda (ZPSymBufPtr),y
bne .9
dey SYM.SizeOf
lda (ZPSymBufPtr),y
* clc / sec A,X=Size, CS if pointer
clc
adc LocalPtr
sta LocalPtr
bcs .9
ldy #SYM.Addr
sta (ZPSymBufPtr),y
jsr CC.SYM.GetSymSizeOfInAXC
jsr CODE.nAddLocal
clc
rts
.9 lda #E.BUF
sec
rts
*--------------------------------------
CC.SYM.NewKey >PUSHA
>PUSHW ZPLineBufPtr
bit bPass2
bpl .1
txa
bne .1
>SYSCALL SListLookup
* clc
rts
.1 >SYSCALL SListNewKey
rts Y,A = KeyID, X = KeyLen
*--------------------------------------
CC.SYM.Store ldy ScopePtr
lda (pData),y
>PUSHA
>PUSHW.G CC.SymID
>PUSHW ZPSymBufPtr
>PUSHW ZPSymSize
bit bPass2
bpl .1
bit ScopenCnt
bmi .1
>SYSCALL SListSetData
rts
.1 >SYSCALL SListAddData
rts
*--------------------------------------
CC.SYM.Free >LDA.G CC.hSymBuf
>SYSCALL FreeMem
bcs .99
>STZ.G CC.hSymBuf
rts
.99 >DEBUG
rts
*--------------------------------------
CC.SYM.NewScope ldy ScopePtr
cpy #CC.hSymbols+SCOPE.MAX
bcs .9
>SYSCALL SListNew
bcs .99
inc ScopePtr
ldy ScopePtr
sta (pData),y
dec ScopenCnt
clc
rts
.9 lda #E.OOH
sec
.99 rts
*--------------------------------------
CC.SYM.FreeScope
ldy ScopePtr
cpy #CC.hSymbols
beq *
lda (pData),y
>SYSCALL SListFree
dec ScopePtr
inc ScopenCnt
rts
*--------------------------------------
CC.SYM.Lookup >PUSHB ScopePtr
.1 tay
lda (pData),y
jsr CC.SListLookup
bcc .8
lda (pstack)
cmp #CC.hSymbols
beq .9
dec
sta (pstack)
bra .1
.9 inc pStack
lda #E.NOKEY
sec
rts
.8 inc pStack
>STYA ZPLookupSymPtr
.99 rts
*--------------------------------------
CC.SYM.LookupFree
>LDA.G CC.hLookupSymBuf
>SYSCALL FreeMem
bcs .99
>STZ.G CC.hLookupSymBuf
rts
.99 >DEBUG
rts
*--------------------------------------
* Y,A = value T/Q
*--------------------------------------
CC.SYM.PushValue
jsr CC.SYM.CheckTypeYA
bcs .9
jsr CC.SYM.GetSymSizeOfInAXC
tax
jsr CODE.LDXI
jsr CC.SYM.GetAddrInYA
beq .1
jsr CODE.LDYAI
jsr CODE.PushXFromYA
clc
rts
.1 jsr CODE.GetLocal Y = local address
jsr CODE.PushXFromYA
clc
.9 rts
*--------------------------------------
CC.SYM.PopValue jsr CC.SYM.CheckTypeYA
bcs .9
jsr CC.SYM.GetSymSizeOfInAXC
tax
jsr CODE.LDXI
jsr CC.SYM.GetAddrInYA
beq .1
jsr CODE.LDYAI
jsr CODE.PopXToYA
clc
rts
.1 jsr CODE.GetLocal Y = local address
jsr CODE.PopXToYA
clc
.9 rts
*--------------------------------------
CC.SYM.SetValue jsr CC.SYM.CheckTypeYA
bcs .9
jsr CC.SYM.GetSymSizeOfInAXC
tax
jsr CODE.LDXI
jsr CC.SYM.GetAddrInYA
beq .1
jsr CODE.LDYAI
jsr CODE.SetXToYA
clc
rts
.1 jsr CODE.GetLocal Y = local address
jsr CODE.SetXToYA
clc
.9 rts
*--------------------------------------
* in : Y,A = T/Q
* out : CC
* CS, A = E.TMISMATCH
*--------------------------------------
CC.SYM.CheckTypeYA
pha
tya
cmp (ZPSymBufPtr)
bne .9
pla
phy
ldy #SYM.Q
cmp (ZPSymBufPtr),y
bne .9
ply
clc
rts
.9 pla
lda #E.TMISMATCH
sec
rts
*--------------------------------------
* out : Y,A = T/Q
*--------------------------------------
CC.SYM.GetTypeInYA
ldy #SYM.Q
lda (ZPSymBufPtr),y
pha
lda (ZPSymBufPtr)
tay
pla
rts
*--------------------------------------
* in : Y,A = T/Q
*--------------------------------------
CC.SYM.SetTypeYA
phy
ldy #SYM.Q
sta (ZPSymBufPtr),y
pla
sta (ZPSymBufPtr)
rts
*--------------------------------------
* out : A,X,C = size
*--------------------------------------
CC.SYM.GetSymSizeOfInAXC
ldy #SYM.Q
lda (ZPSymBufPtr),y
pha
lda (ZPSymBufPtr) SYM.T
tay
pla
CC.SYM.GetYASizeOfInAXC
bit #SYM.Q.PPPOINTER
bne .1
lda CC.TYPESIZE-1,y
ldx #0
clc
rts
.1 lda #2 pointer
ldx #0
sec +1 for hMem Storage
rts
*--------------------------------------
* in/out : A,X,C = size
*--------------------------------------
CC.SYM.SetSizeOf
ldy #SYM.SizeOf
sta (ZPSymBufPtr),y
pha
iny
txa
sta (ZPSymBufPtr),y
pla
rts
*--------------------------------------
CC.SYM.GetAddrInYA
ldy #SYM.Addr+1
lda (ZPSymBufPtr),y
pha
dey
lda (ZPSymBufPtr),y
tay
pla Z if Local
rts
*--------------------------------------
CC.SYM.SetAddrYA
phy
ldy #SYM.Addr+1
sta (ZPSymBufPtr),y
pla
dey
sta (ZPSymBufPtr),y
rts
*--------------------------------------
MAN
SAVE usr/src/bin/cc.s.sym
LOAD usr/src/bin/cc.s
ASM