A2osX/BIN/CC.S.SYM.txt

778 lines
12 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
2022-06-22 06:26:44 +00:00
bit bPass2
bpl CC.SYM.New1
bit bLocalScope
bmi CC.SYM.New1
>PUSHB.G CC.hScopes Global Scope
>PUSHW ZPLineBufPtr
>SYSCALL SListLookup
2022-08-20 14:37:37 +00:00
bcs CC.SYM.New.9
2022-01-30 21:47:08 +00:00
2022-06-12 20:42:22 +00:00
>STYA.G CC.SymID Y,A = KeyID
2022-01-30 21:47:08 +00:00
2022-06-22 06:26:44 +00:00
jsr CC.SkipX X = KeyLen
>PUSHB.G CC.hScopes
>PUSHW.G CC.SymID
>PUSHW ZPSymBufPtr
>PUSHWI 65535 all
>PUSHWZ From Start
>SYSCALL SListGetData
2022-08-20 14:37:37 +00:00
bcc CC.SYM.New2
2022-06-22 06:26:44 +00:00
2022-08-20 14:37:37 +00:00
CC.SYM.New.9 rts Y,A = SymSize
2022-06-22 06:26:44 +00:00
*--------------------------------------
CC.SYM.New1 ldy ScopeIdx
lda (pData),y
jsr CC.SYM.NewKey
2022-08-20 14:37:37 +00:00
bcs CC.SYM.New.9
2022-06-22 06:26:44 +00:00
>STYA.G CC.SymID Y,A = KeyID
jsr CC.SkipX X = KeyLen
2022-06-12 20:42:22 +00:00
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
2022-01-30 21:47:08 +00:00
2022-06-22 06:26:44 +00:00
tya
ldy #SYM.DefSize
sta (ZPSymBufPtr),y
2022-08-20 14:37:37 +00:00
*--------------------------------------
CC.SYM.New2 jsr CC.GetCharNB
2022-01-30 21:47:08 +00:00
bcs CC.SYM.SetAddr
cmp #'('
bne CC.SYM.NewV
2022-06-22 06:26:44 +00:00
ldy #SYM.Q
lda #SYM.Q.FUNC
ora (ZPSymBufPtr),y
sta (ZPSymBufPtr),y
2022-06-12 20:42:22 +00:00
jmp CC.F.Decl
2022-01-30 21:47:08 +00:00
*--------------------------------------
CC.SYM.NewV cmp #'['
bne CC.SYM.SetAddr
2022-08-20 14:37:37 +00:00
ldy #SYM.Q
2022-01-30 21:47:08 +00:00
lda (ZPSymBufPtr),y
2022-08-20 14:37:37 +00:00
and #%11001111
sta (ZPSymBufPtr),y
2022-01-30 21:47:08 +00:00
2022-08-20 14:37:37 +00:00
lda #SYM.Def
ldy #SYM.DefSize
sta (ZPSymBufPtr),y
2022-01-30 21:47:08 +00:00
2022-08-20 14:37:37 +00:00
ldy #SYM.Q
.1 lda (ZPSymBufPtr),y
clc
2022-01-30 21:47:08 +00:00
adc #SYM.Q.ARRAY
sta (ZPSymBufPtr),y
2022-08-20 14:37:37 +00:00
jsr CC.GetNextCharNB Skip [
bcs .99
2022-01-30 21:47:08 +00:00
2022-08-20 14:37:37 +00:00
cmp #']'
bne .2
2022-01-30 21:47:08 +00:00
2022-08-20 14:37:37 +00:00
ldy #SYM.Q
lda (ZPSymBufPtr),y
and #SYM.Q.PPPOINTER
beq .99 [] only allowed for *
2022-01-30 21:47:08 +00:00
2022-08-20 14:37:37 +00:00
>LDYAI 0 set as [0] (deref)
jsr CC.SYM.AddWord
bra .3
.2 jsr CC.EXP.IntConst
bcs .99
jsr CC.SYM.AddWord
2022-01-30 21:47:08 +00:00
jsr CC.GetCharNB
bcs .99
cmp #']'
bne .99
2022-08-20 14:37:37 +00:00
.3 jsr CC.GetNextCharNB Skip ]
2022-01-30 21:47:08 +00:00
bcs CC.SYM.SetAddr
2022-08-20 14:37:37 +00:00
cmp #'['
bne CC.SYM.SetAddr
ldy #SYM.Q
lda (ZPSymBufPtr),y
and #SYM.Q.AAARRAY
cmp #SYM.Q.AAARRAY
beq .99 already [][][]
2022-01-30 21:47:08 +00:00
2022-08-20 14:37:37 +00:00
bra .1
2022-01-30 21:47:08 +00:00
.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
2022-08-20 14:37:37 +00:00
pha
2022-01-30 21:47:08 +00:00
ldy #SYM.Addr
lda ZPCCData
sta (ZPSymBufPtr),y
iny
lda ZPCCData+1
sta (ZPSymBufPtr),y
2022-08-20 14:37:37 +00:00
pla
clc
adc ZPCCData
sta ZPCCData
2022-01-30 21:47:08 +00:00
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
*--------------------------------------
2022-08-20 14:37:37 +00:00
CC.SYM.PushAddr ldy #SYM.SC
lda (ZPSymBufPtr),y
beq .1 SYM.SC.STATIC
* LOCAL
>LDYA L.PCC.PushLAddrH
jsr CODE.EmitPCC
bcs .9
ldy #SYM.Addr
lda (ZPSymBufPtr),y
eor #$FF
inc
jsr CODE.LDAI
bcs .9
>LDYA L.PCC.PushLAddrL
jmp CODE.EmitPCC
* GLOBAL
.1 ldy #SYM.Addr+1
lda (ZPSymBufPtr),y
tax
dey
lda (ZPSymBufPtr),y
jsr CODE.LDAXI
bcs .9
ldy #SYM.Q
lda (ZPSymBufPtr),y
and #SYM.Q.CONST
beq .2
>LDYA L.PCC.PushIAddr
jmp CODE.EmitPCC
.2 >LDYA L.PCC.PushUAddr
jmp CODE.EmitPCC
.9 rts
*--------------------------------------
CC.SYM.GetAddr1 ldy #SYM.SC
lda (ZPSymBufPtr),y
beq .1 SYM.SC.STATIC
* LOCAL
ldy #SYM.Addr
lda (ZPSymBufPtr),y
eor #$FF
inc
jsr CODE.LDAI
bcs .9
>LDYA L.PCC.GetLAddr1
jmp CODE.EmitPCC
* GLOBAL
.1 ldy #SYM.Addr+1
lda (ZPSymBufPtr),y
tax
dey
lda (ZPSymBufPtr),y
jsr CODE.LDAXI
bcs .9
ldy #SYM.Q
lda (ZPSymBufPtr),y
and #SYM.Q.CONST
beq .2
>LDYA L.PCC.GetIAddr1
jmp CODE.EmitPCC
.2 >LDYA L.PCC.GetUAddr1
jmp CODE.EmitPCC
.9 rts
*--------------------------------------
CC.SYM.GetAddr2 ldy #SYM.SC
lda (ZPSymBufPtr),y
beq .1 SYM.SC.STATIC
* LOCAL
ldy #SYM.Addr
lda (ZPSymBufPtr),y
eor #$FF
inc
jsr CODE.LDAI
bcs .9
>LDYA L.PCC.GetLAddr2
jmp CODE.EmitPCC
* GLOBAL
.1 ldy #SYM.Addr+1
lda (ZPSymBufPtr),y
tax
dey
lda (ZPSymBufPtr),y
jsr CODE.LDAXI
bcs .9
ldy #SYM.Q
lda (ZPSymBufPtr),y
and #SYM.Q.CONST
beq .2
>LDYA L.PCC.GetIAddr2
jmp CODE.EmitPCC
.2 >LDYA L.PCC.GetUAddr2
jmp CODE.EmitPCC
.9 rts
*--------------------------------------
2022-01-30 21:47:08 +00:00
CC.SYM.NewKey >PUSHA
>PUSHW ZPLineBufPtr
2022-06-22 06:26:44 +00:00
>SYSCALL SListNewKey
bcs .9
2022-01-30 21:47:08 +00:00
2022-06-22 06:26:44 +00:00
.9 rts Y,A = KeyID, X = KeyLen
2022-06-12 20:42:22 +00:00
*--------------------------------------
2022-08-20 14:37:37 +00:00
CC.SYM.AddWord pha
phy
ldy #SYM.DefSize
lda (ZPSymBufPtr),y
pha
inc
inc
sta (ZPSymBufPtr),y
ply
pla
sta (ZPSymBufPtr),y
iny
pla
sta (ZPSymBufPtr),y
CC.SYM.AddWord.RTS
rts
*--------------------------------------
CC.SYM.NewCPSID >LDYA.G CC.CPSID
>STYA.G CC.CPSPFX+2
>LDA.G CC.CPSID+1
inc
cmp #'Z'+1
bne .1
dey CC.CPSID
lda (pData),y
inc
cmp #'Z'+1
beq .9
sta (pData),y
lda #'A'
iny CC.CPSID+1
.1 sta (pData),y
clc
rts
.9 lda #E.OOH
* sec
rts
*--------------------------------------
CC.SYM.NewA bit bPass2
bmi .8
>STA.G CC.CPSPFX A = "B"reak, "C"ontinue...
>PUSHB.G CC.hScopes Global Scope
>PUSHEA.G CC.CPSPFX
>SYSCALL SListNewKey
bcs CC.SYM.AddWord.RTS
>STYA.G CC.SymID Y,A = KeyID
lda #SYM.T.VOID
sta (ZPSymBufPtr) #SYM.T
lda #SYM.Q.POINTER
ldy #SYM.Q
sta (ZPSymBufPtr),y
lda #SYM.SC.STATIC
iny #SYM.SC
sta (ZPSymBufPtr),y
iny
lda #0
.1 sta (ZPSymBufPtr),y
iny
cpy #SYM.Def
bne .1
tya
ldy #SYM.DefSize
sta (ZPSymBufPtr),y
>LDYA ZPCCCode
jsr CC.SYM.SetAddrYA
>LDA.G CC.hScopes Global Scope
jmp CC.SYM.Store.1
.8 clc
.99 rts
*--------------------------------------
2022-06-22 06:26:44 +00:00
CC.SYM.StoreF >LDA.G CC.hScopes
2022-01-30 21:47:08 +00:00
2022-06-12 20:42:22 +00:00
bit bPass2
2022-06-22 06:26:44 +00:00
bpl CC.SYM.Store.1
2022-08-20 14:37:37 +00:00
2022-06-22 06:26:44 +00:00
clc
rts
*--------------------------------------
CC.SYM.Store bit bPass2
bpl CC.SYM.StoreL Store Global & Local at Pass 1
2022-01-30 21:47:08 +00:00
2022-06-22 06:26:44 +00:00
bit bLocalScope Store Local at Pass 2
bmi CC.SYM.StoreL
2022-01-30 21:47:08 +00:00
2022-06-22 06:26:44 +00:00
clc
2022-01-30 21:47:08 +00:00
rts
2022-06-22 06:26:44 +00:00
CC.SYM.StoreL ldy ScopeIdx
lda (pData),y
2022-01-30 21:47:08 +00:00
2022-06-22 06:26:44 +00:00
CC.SYM.Store.1 >PUSHA
>PUSHW.G CC.SymID
>PUSHW ZPSymBufPtr
>PUSHBI 0
ldy #SYM.DefSize
lda (ZPSymBufPtr),y
>PUSHA
>SYSCALL SListAddData
2022-06-12 20:42:22 +00:00
2022-01-30 21:47:08 +00:00
rts
*--------------------------------------
2022-06-22 06:26:44 +00:00
CC.SYM.NewScope ldy ScopeIdx
cpy #CC.hScopes+SCOPE.MAX
2022-01-30 21:47:08 +00:00
bcs .9
>SYSCALL SListNew
bcs .99
2022-06-22 06:26:44 +00:00
inc ScopeIdx
ldy ScopeIdx
2022-01-30 21:47:08 +00:00
sta (pData),y
2022-06-22 06:26:44 +00:00
dec bLocalScope
2022-01-30 21:47:08 +00:00
clc
rts
.9 lda #E.OOH
sec
.99 rts
*--------------------------------------
CC.SYM.FreeScope
2022-06-22 06:26:44 +00:00
ldy ScopeIdx
cpy #CC.hScopes
2022-01-30 21:47:08 +00:00
beq *
lda (pData),y
>SYSCALL SListFree
2022-06-22 06:26:44 +00:00
dec ScopeIdx
inc bLocalScope
2022-01-30 21:47:08 +00:00
2022-06-22 06:26:44 +00:00
rts
2022-01-30 21:47:08 +00:00
*--------------------------------------
2022-06-22 06:26:44 +00:00
CC.SYM.Lookup >LDA.G CC.LookupIdx
cmp #CC.LookupIdx+LOOKUP.MAX
beq .99
>PUSHB ScopeIdx
2022-01-30 21:47:08 +00:00
.1 tay
lda (pData),y
jsr CC.SListLookup
bcc .8
lda (pstack)
2022-06-22 06:26:44 +00:00
cmp #CC.hScopes
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
2022-06-22 06:26:44 +00:00
>STYA.G CC.LookupSymSize
>INC.G CC.LookupIdx
tay
txa
sta (pdata),y
>SYSCALL GetMemPtr
2022-06-12 20:42:22 +00:00
>STYA ZPLookupSymPtr
2022-01-30 21:47:08 +00:00
2022-06-22 06:26:44 +00:00
* clc
rts
.99 lda #E.OOH
* sec
rts
2022-01-30 21:47:08 +00:00
*--------------------------------------
2022-08-20 14:37:37 +00:00
CC.SYM.LookupA bit bPass2
bmi .1
ldx #0
ldy #0
clc
rts
.1 >STA.G CC.CPSPFX A = "B"reak, "C"ontinue...
>PUSHB.G CC.hScopes Global Scope
>PUSHEA.G CC.CPSPFX
>SYSCALL SListLookup
bcs .99
>STYA.G CC.SymID Y,A = KeyID
>PUSHB.G CC.hScopes
>PUSHW.G CC.SymID
>PUSHW ZPSymBufPtr
>PUSHWI 65535 all
>PUSHWZ From Start
>SYSCALL SListGetData
bcs .99
ldy #SYM.Addr
lda (ZPSymBufPtr),y
tax
iny
lda (ZPSymBufPtr),y
tay
* clc
.99 rts
*--------------------------------------
2022-06-12 20:42:22 +00:00
CC.SYM.LookupFree
2022-06-22 06:26:44 +00:00
>LDA.G CC.LookupIdx
cmp #CC.LookupIdx
beq .9
tay
lda (pdata),y
2022-01-30 21:47:08 +00:00
>SYSCALL FreeMem
2022-06-12 20:42:22 +00:00
bcs .99
2022-06-22 06:26:44 +00:00
>DEC.G CC.LookupIdx
cmp #CC.LookupIdx
beq .8
tay
lda (pdata),y
>SYSCALL GetMemPtr
>STYA ZPLookupSymPtr
.8 clc
rts
.9 lda E.INVH
* sec
.99 rts
*--------------------------------------
CC.SYM.LookupFreeAll
.1 jsr CC.SYM.LookupFree
bcc .1
clc
2022-01-30 21:47:08 +00:00
rts
*--------------------------------------
2022-08-20 14:37:37 +00:00
* on RT stack : Addr,value
2022-01-30 21:47:08 +00:00
*--------------------------------------
2022-08-20 14:37:37 +00:00
CC.SYM.SetValue jsr CC.SYM.GetSymSizeOfInAXC
tay
dey
jsr CODE.LDYI
2022-01-30 21:47:08 +00:00
bcs .9
2022-08-20 14:37:37 +00:00
>LDYA L.PCC.SetValue
jmp CODE.EmitPCC
2022-01-30 21:47:08 +00:00
.9 rts
*--------------------------------------
* in : Y,A = T/Q
* out : CC
* CS, A = E.TMISMATCH
*--------------------------------------
2022-08-20 14:37:37 +00:00
CC.SYM.CheckTypeYA.OLD
2022-01-30 21:47:08 +00:00
pha
tya
cmp (ZPSymBufPtr)
bne .9
pla
2022-08-20 14:37:37 +00:00
2022-01-30 21:47:08 +00:00
ldy #SYM.Q
2022-08-20 14:37:37 +00:00
eor (ZPSymBufPtr),y
and #$FC ignore SYM.Q.FUNC+SYM.Q.FASTCALL
2022-01-30 21:47:08 +00:00
bne .9
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
*--------------------------------------
2022-08-20 14:37:37 +00:00
CC.SYM.SetTypeYA.OLD
2022-01-30 21:47:08 +00:00
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
2022-08-20 14:37:37 +00:00
beq .1
lda #2 pointer
ldx #0
sec +1 for hMem Storage
rts
.1 bit #SYM.Q.AAARRAY
bne .2
2022-01-30 21:47:08 +00:00
lda CC.TYPESIZE-1,y
ldx #0
clc
rts
2022-08-20 14:37:37 +00:00
.2 ldx CC.TYPESIZE-1,y
2022-01-30 21:47:08 +00:00
2022-08-20 14:37:37 +00:00
ldy #SYM.Def
lda (ZPSymBufPtr),y
>PUSHA
iny
lda (ZPSymBufPtr),y
>PUSHA
ldy #1
.3 dex
beq .5
.4 lda (pStack),y
clc
adc (pStack),y
sta (pStack),y
lda (pStack)
adc (pStack)
sta (pStack)
dex
bne .4
.5 >PULLA
tax
>PULLA
clc
2022-01-30 21:47:08 +00:00
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.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