mirror of https://github.com/A2osX/A2osX.git
778 lines
12 KiB
Plaintext
778 lines
12 KiB
Plaintext
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
|
||
|
||
bit bPass2
|
||
bpl CC.SYM.New1
|
||
|
||
bit bLocalScope
|
||
bmi CC.SYM.New1
|
||
|
||
>PUSHB.G CC.hScopes Global Scope
|
||
>PUSHW ZPLineBufPtr
|
||
|
||
>SYSCALL SListLookup
|
||
bcs CC.SYM.New.9
|
||
|
||
>STYA.G CC.SymID Y,A = KeyID
|
||
|
||
jsr CC.SkipX X = KeyLen
|
||
|
||
>PUSHB.G CC.hScopes
|
||
>PUSHW.G CC.SymID
|
||
>PUSHW ZPSymBufPtr
|
||
>PUSHWI 65535 all
|
||
>PUSHWZ From Start
|
||
>SYSCALL SListGetData
|
||
bcc CC.SYM.New2
|
||
|
||
CC.SYM.New.9 rts Y,A = SymSize
|
||
*--------------------------------------
|
||
CC.SYM.New1 ldy ScopeIdx
|
||
lda (pData),y
|
||
jsr CC.SYM.NewKey
|
||
bcs CC.SYM.New.9
|
||
|
||
>STYA.G CC.SymID Y,A = KeyID
|
||
|
||
jsr CC.SkipX X = KeyLen
|
||
|
||
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
|
||
|
||
tya
|
||
ldy #SYM.DefSize
|
||
sta (ZPSymBufPtr),y
|
||
*--------------------------------------
|
||
CC.SYM.New2 jsr CC.GetCharNB
|
||
bcs CC.SYM.SetAddr
|
||
|
||
cmp #'('
|
||
bne CC.SYM.NewV
|
||
|
||
ldy #SYM.Q
|
||
lda #SYM.Q.FUNC
|
||
ora (ZPSymBufPtr),y
|
||
sta (ZPSymBufPtr),y
|
||
|
||
jmp CC.F.Decl
|
||
*--------------------------------------
|
||
CC.SYM.NewV cmp #'['
|
||
bne CC.SYM.SetAddr
|
||
|
||
ldy #SYM.Q
|
||
lda (ZPSymBufPtr),y
|
||
and #%11001111
|
||
sta (ZPSymBufPtr),y
|
||
|
||
lda #SYM.Def
|
||
ldy #SYM.DefSize
|
||
sta (ZPSymBufPtr),y
|
||
|
||
ldy #SYM.Q
|
||
|
||
.1 lda (ZPSymBufPtr),y
|
||
clc
|
||
adc #SYM.Q.ARRAY
|
||
sta (ZPSymBufPtr),y
|
||
|
||
jsr CC.GetNextCharNB Skip [
|
||
bcs .99
|
||
|
||
cmp #']'
|
||
bne .2
|
||
|
||
ldy #SYM.Q
|
||
lda (ZPSymBufPtr),y
|
||
and #SYM.Q.PPPOINTER
|
||
beq .99 [] only allowed for *
|
||
|
||
>LDYAI 0 set as [0] (deref)
|
||
jsr CC.SYM.AddWord
|
||
bra .3
|
||
|
||
.2 jsr CC.EXP.IntConst
|
||
bcs .99
|
||
|
||
jsr CC.SYM.AddWord
|
||
|
||
jsr CC.GetCharNB
|
||
bcs .99
|
||
|
||
cmp #']'
|
||
bne .99
|
||
|
||
.3 jsr CC.GetNextCharNB Skip ]
|
||
bcs CC.SYM.SetAddr
|
||
|
||
cmp #'['
|
||
bne CC.SYM.SetAddr
|
||
|
||
ldy #SYM.Q
|
||
lda (ZPSymBufPtr),y
|
||
and #SYM.Q.AAARRAY
|
||
cmp #SYM.Q.AAARRAY
|
||
beq .99 already [][][]
|
||
|
||
bra .1
|
||
|
||
.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
|
||
|
||
pha
|
||
|
||
ldy #SYM.Addr
|
||
|
||
lda ZPCCData
|
||
sta (ZPSymBufPtr),y
|
||
|
||
iny
|
||
|
||
lda ZPCCData+1
|
||
sta (ZPSymBufPtr),y
|
||
|
||
pla
|
||
clc
|
||
adc ZPCCData
|
||
sta ZPCCData
|
||
|
||
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.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
|
||
*--------------------------------------
|
||
CC.SYM.NewKey >PUSHA
|
||
>PUSHW ZPLineBufPtr
|
||
>SYSCALL SListNewKey
|
||
bcs .9
|
||
|
||
|
||
|
||
.9 rts Y,A = KeyID, X = KeyLen
|
||
*--------------------------------------
|
||
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
|
||
*--------------------------------------
|
||
CC.SYM.StoreF >LDA.G CC.hScopes
|
||
|
||
bit bPass2
|
||
bpl CC.SYM.Store.1
|
||
|
||
clc
|
||
rts
|
||
*--------------------------------------
|
||
CC.SYM.Store bit bPass2
|
||
bpl CC.SYM.StoreL Store Global & Local at Pass 1
|
||
|
||
bit bLocalScope Store Local at Pass 2
|
||
bmi CC.SYM.StoreL
|
||
|
||
clc
|
||
rts
|
||
|
||
CC.SYM.StoreL ldy ScopeIdx
|
||
lda (pData),y
|
||
|
||
CC.SYM.Store.1 >PUSHA
|
||
>PUSHW.G CC.SymID
|
||
>PUSHW ZPSymBufPtr
|
||
>PUSHBI 0
|
||
ldy #SYM.DefSize
|
||
lda (ZPSymBufPtr),y
|
||
>PUSHA
|
||
|
||
>SYSCALL SListAddData
|
||
|
||
rts
|
||
*--------------------------------------
|
||
CC.SYM.NewScope ldy ScopeIdx
|
||
cpy #CC.hScopes+SCOPE.MAX
|
||
bcs .9
|
||
|
||
>SYSCALL SListNew
|
||
bcs .99
|
||
|
||
inc ScopeIdx
|
||
ldy ScopeIdx
|
||
sta (pData),y
|
||
|
||
dec bLocalScope
|
||
clc
|
||
rts
|
||
|
||
.9 lda #E.OOH
|
||
sec
|
||
.99 rts
|
||
*--------------------------------------
|
||
CC.SYM.FreeScope
|
||
ldy ScopeIdx
|
||
cpy #CC.hScopes
|
||
beq *
|
||
|
||
lda (pData),y
|
||
>SYSCALL SListFree
|
||
|
||
dec ScopeIdx
|
||
inc bLocalScope
|
||
|
||
rts
|
||
*--------------------------------------
|
||
CC.SYM.Lookup >LDA.G CC.LookupIdx
|
||
cmp #CC.LookupIdx+LOOKUP.MAX
|
||
beq .99
|
||
|
||
>PUSHB ScopeIdx
|
||
|
||
.1 tay
|
||
lda (pData),y
|
||
jsr CC.SListLookup
|
||
bcc .8
|
||
|
||
lda (pstack)
|
||
cmp #CC.hScopes
|
||
beq .9
|
||
|
||
dec
|
||
sta (pstack)
|
||
bra .1
|
||
|
||
.9 inc pStack
|
||
|
||
lda #E.NOKEY
|
||
sec
|
||
rts
|
||
|
||
.8 inc pStack
|
||
|
||
>STYA.G CC.LookupSymSize
|
||
|
||
>INC.G CC.LookupIdx
|
||
tay
|
||
|
||
txa
|
||
sta (pdata),y
|
||
|
||
>SYSCALL GetMemPtr
|
||
>STYA ZPLookupSymPtr
|
||
|
||
* clc
|
||
rts
|
||
|
||
.99 lda #E.OOH
|
||
* sec
|
||
rts
|
||
*--------------------------------------
|
||
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
|
||
*--------------------------------------
|
||
CC.SYM.LookupFree
|
||
>LDA.G CC.LookupIdx
|
||
cmp #CC.LookupIdx
|
||
beq .9
|
||
|
||
tay
|
||
lda (pdata),y
|
||
>SYSCALL FreeMem
|
||
bcs .99
|
||
|
||
>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
|
||
rts
|
||
*--------------------------------------
|
||
* on RT stack : Addr,value
|
||
*--------------------------------------
|
||
CC.SYM.SetValue jsr CC.SYM.GetSymSizeOfInAXC
|
||
tay
|
||
dey
|
||
jsr CODE.LDYI
|
||
bcs .9
|
||
|
||
>LDYA L.PCC.SetValue
|
||
jmp CODE.EmitPCC
|
||
|
||
.9 rts
|
||
*--------------------------------------
|
||
* in : Y,A = T/Q
|
||
* out : CC
|
||
* CS, A = E.TMISMATCH
|
||
*--------------------------------------
|
||
CC.SYM.CheckTypeYA.OLD
|
||
pha
|
||
tya
|
||
cmp (ZPSymBufPtr)
|
||
bne .9
|
||
|
||
pla
|
||
|
||
ldy #SYM.Q
|
||
eor (ZPSymBufPtr),y
|
||
and #$FC ignore SYM.Q.FUNC+SYM.Q.FASTCALL
|
||
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
|
||
*--------------------------------------
|
||
CC.SYM.SetTypeYA.OLD
|
||
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
|
||
beq .1
|
||
|
||
lda #2 pointer
|
||
ldx #0
|
||
|
||
sec +1 for hMem Storage
|
||
rts
|
||
|
||
.1 bit #SYM.Q.AAARRAY
|
||
bne .2
|
||
|
||
lda CC.TYPESIZE-1,y
|
||
ldx #0
|
||
|
||
clc
|
||
rts
|
||
|
||
.2 ldx CC.TYPESIZE-1,y
|
||
|
||
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
|
||
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
|