A2osX/BIN/CC.S.SYM.txt

500 lines
7.8 KiB
Plaintext
Raw Normal View History

2022-01-30 21:47:08 +00:00
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
2022-06-12 20:42:22 +00:00
>STYA.G CC.SymID Y,A = KeyID
2022-02-04 14:57:17 +00:00
stx ZPPtr3+1 X = KeyLen
2022-01-30 21:47:08 +00:00
>LDYAI 256
>SYSCALL GetMem
bcs .9
>STYA ZPSymBufPtr
2022-06-12 20:42:22 +00:00
txa
>STA.G CC.hSymBuf
lda ZPPtr2
sta (ZPSymBufPtr) #SYM.T
2022-01-30 21:47:08 +00:00
2022-06-12 20:42:22 +00:00
lda ZPPtr2+1
ldy #SYM.Q
sta (ZPSymBufPtr),y
2022-01-30 21:47:08 +00:00
lda ZPPtr3
2022-06-12 20:42:22 +00:00
iny #SYM.SC
2022-01-30 21:47:08 +00:00
sta (ZPSymBufPtr),y
2022-06-12 20:42:22 +00:00
iny
lda #0
.1 sta (ZPSymBufPtr),y
iny
cpy #SYM.Def
bne .1
sty ZPSymSize
2022-01-30 21:47:08 +00:00
stz ZPSymSize+1
2022-02-04 14:57:17 +00:00
ldx ZPPtr3+1 Key Len
jsr CC.SkipX
2022-01-30 21:47:08 +00:00
jsr CC.GetCharNB
bcs CC.SYM.SetAddr
cmp #'('
bne CC.SYM.NewV
2022-06-12 20:42:22 +00:00
jmp CC.F.Decl
2022-01-30 21:47:08 +00:00
.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
2022-06-12 20:42:22 +00:00
2022-01-30 21:47:08 +00:00
jsr CC.SYM.GetSymSizeOfInAXC
jsr CODE.nAddLocal
clc
rts
.9 lda #E.BUF
sec
rts
*--------------------------------------
CC.SYM.NewKey >PUSHA
>PUSHW ZPLineBufPtr
2022-06-12 20:42:22 +00:00
bit bPass2
bpl .1
2022-01-30 21:47:08 +00:00
2022-06-12 20:42:22 +00:00
txa
bne .1
2022-01-30 21:47:08 +00:00
2022-06-12 20:42:22 +00:00
>SYSCALL SListLookup
2022-01-30 21:47:08 +00:00
2022-06-12 20:42:22 +00:00
* clc
2022-01-30 21:47:08 +00:00
2022-06-12 20:42:22 +00:00
rts
2022-01-30 21:47:08 +00:00
2022-06-12 20:42:22 +00:00
.1 >SYSCALL SListNewKey
2022-01-30 21:47:08 +00:00
2022-06-12 20:42:22 +00:00
rts Y,A = KeyID, X = KeyLen
*--------------------------------------
CC.SYM.Store ldy ScopePtr
lda (pData),y
>PUSHA
>PUSHW.G CC.SymID
>PUSHW ZPSymBufPtr
>PUSHW ZPSymSize
2022-01-30 21:47:08 +00:00
2022-06-12 20:42:22 +00:00
bit bPass2
bpl .1
2022-01-30 21:47:08 +00:00
2022-06-12 20:42:22 +00:00
bit ScopenCnt
bmi .1
2022-01-30 21:47:08 +00:00
2022-06-12 20:42:22 +00:00
>SYSCALL SListSetData
2022-01-30 21:47:08 +00:00
rts
2022-06-12 20:42:22 +00:00
.1 >SYSCALL SListAddData
2022-01-30 21:47:08 +00:00
rts
*--------------------------------------
2022-06-12 20:42:22 +00:00
CC.SYM.Free >LDA.G CC.hSymBuf
beq .8
2022-06-12 20:42:22 +00:00
>SYSCALL FreeMem
bcs .99
>STZ.G CC.hSymBuf
.99 rts
.8 clc
2022-01-30 21:47:08 +00:00
rts
*--------------------------------------
CC.SYM.NewScope ldy ScopePtr
2022-06-12 20:42:22 +00:00
cpy #CC.hSymbols+SCOPE.MAX
2022-01-30 21:47:08 +00:00
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
2022-06-12 20:42:22 +00:00
rts
2022-01-30 21:47:08 +00:00
*--------------------------------------
2022-06-12 20:42:22 +00:00
CC.SYM.Lookup >PUSHB ScopePtr
2022-01-30 21:47:08 +00:00
.1 tay
lda (pData),y
jsr CC.SListLookup
bcc .8
lda (pstack)
cmp #CC.hSymbols
2022-06-12 20:42:22 +00:00
beq .9
2022-01-30 21:47:08 +00:00
dec
sta (pstack)
bra .1
2022-06-12 20:42:22 +00:00
.9 inc pStack
2022-01-30 21:47:08 +00:00
lda #E.NOKEY
2022-06-12 20:42:22 +00:00
sec
2022-01-30 21:47:08 +00:00
rts
2022-06-12 20:42:22 +00:00
.8 inc pStack
>STYA ZPLookupSymPtr
2022-01-30 21:47:08 +00:00
.99 rts
*--------------------------------------
2022-06-12 20:42:22 +00:00
CC.SYM.LookupFree
>LDA.G CC.hLookupSymBuf
2022-01-30 21:47:08 +00:00
>SYSCALL FreeMem
2022-06-12 20:42:22 +00:00
bcs .99
>STZ.G CC.hLookupSymBuf
2022-01-30 21:47:08 +00:00
rts
2022-06-12 20:42:22 +00:00
.99 >DEBUG
rts
2022-01-30 21:47:08 +00:00
*--------------------------------------
* 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
2022-06-12 20:42:22 +00:00
dey
2022-01-30 21:47:08 +00:00
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