A2osX/BIN/CC.S.SYM.txt

904 lines
14 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
* CS : Reset Buffer
* CC : Reuse Buffer
2022-01-30 21:47:08 +00:00
* Output : Y,A = VarID
*--------------------------------------
SYM.New >STYA ZPPtr2 T/Q
2022-01-30 21:47:08 +00:00
stx ZPPtr3 SC
2022-06-22 06:26:44 +00:00
bit bPass2
bpl SYM.New.1
2022-06-22 06:26:44 +00:00
>PUSHB.G CC.hSyms
2022-06-22 06:26:44 +00:00
>PUSHW ZPLineBufPtr
jsr SCOPE.Push
2022-06-22 06:26:44 +00:00
>SYSCALL SListLookup
bcs 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.hSyms
2022-06-22 06:26:44 +00:00
>PUSHW.G CC.SymID
>PUSHW ZPSymBufPtr
>PUSHWI 65535 all
>PUSHWZ From Start
>SYSCALL SListGetData
bcc SYM.New.2
2022-06-22 06:26:44 +00:00
SYM.New.9 rts
2022-06-22 06:26:44 +00:00
*--------------------------------------
SYM.New.1 jsr SYM.BufInitYAXC set buf according C
>PUSHB.G CC.hSyms
>PUSHW ZPLineBufPtr
jsr SCOPE.Push
>SYSCALL SListNewKey
bcs SYM.New.9
2022-06-22 06:26:44 +00:00
>STYA.G CC.SymID Y,A = KeyID
jsr CC.SkipX X = KeyLen
.DO DBG_SYM=1
jsr SYM.DEBUG0
.FIN
*--------------------------------------
SYM.New.2 jsr CC.GetCharNB
bcs .98
2022-06-12 20:42:22 +00:00
cmp #';'
bne .1
2022-01-30 21:47:08 +00:00
lda ZPPtr3
cmp #SYM.SC.TYPEDEF
bne SYM.SetAddr
2022-01-30 21:47:08 +00:00
clc
rts
2022-01-30 21:47:08 +00:00
.1 cmp #'('
bne SYM.NewV
2022-01-30 21:47:08 +00:00
jmp F.Decl
.98 lda #E.CSYN
sec
.99 rts
2022-01-30 21:47:08 +00:00
*--------------------------------------
SYM.NewV cmp #'['
bne SYM.SetAddr
2022-01-30 21:47:08 +00:00
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
ldy #SYM.DefSize
lda #SYM.Def
2022-08-20 14:37:37 +00:00
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
jsr CORE.GetNCharNB Skip [
bcs .98
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 .98 [] only allowed for *
jsr SYM.Add0000 set as [0] (deref)
bcs .99
2022-01-30 21:47:08 +00:00
2022-08-20 14:37:37 +00:00
bra .3
.2 jsr EXP.IntConst
bcs .98
2022-08-20 14:37:37 +00:00
jsr SYM.AddWord
bcs .99
2022-01-30 21:47:08 +00:00
jsr CC.GetCharNB
bcs .98
2022-01-30 21:47:08 +00:00
cmp #']'
bne .98
2022-01-30 21:47:08 +00:00
.3 jsr CORE.GetNCharNB Skip ]
bcs SYM.SetAddr
2022-01-30 21:47:08 +00:00
2022-08-20 14:37:37 +00:00
cmp #'['
bne SYM.SetAddr
2022-08-20 14:37:37 +00:00
ldy #SYM.Q
lda (ZPSymBufPtr),y
and #SYM.Q.AAARRAY
cmp #SYM.Q.AAARRAY
bne .1 already [][][] ?
2022-01-30 21:47:08 +00:00
.98 lda #E.CSYN
2022-01-30 21:47:08 +00:00
sec
.99 rts
2022-01-30 21:47:08 +00:00
*--------------------------------------
SYM.SetAddr ldy #SYM.SizeOf
lda (ZPSymBufPtr),y
iny
ora (ZPSymBufPtr),y
bne .1
jsr SYM.GetSymSizeOfInAXC
jsr SYM.SetSizeOf
.1 ldy #SYM.Q
2022-01-30 21:47:08 +00:00
lda (ZPSymBufPtr),y
and #SYM.Q.FUNC
bne .9
ldy #SYM.SC
lda (ZPSymBufPtr),y
beq SYM.SetAddrG SYM.SC.STATIC
2022-01-30 21:47:08 +00:00
cmp #SYM.SC.AUTO
beq SYM.SetAddrL
2022-01-30 21:47:08 +00:00
.9 lda #E.TMISMATCH
sec
rts
*--------------------------------------
SYM.SetAddrG ldy #SYM.Addr
2022-01-30 21:47:08 +00:00
lda ZPCCData
sta (ZPSymBufPtr),y
iny
lda ZPCCData+1
sta (ZPSymBufPtr),y
ldy #SYM.SizeOf
lda (ZPSymBufPtr),y
2022-08-20 14:37:37 +00:00
clc
adc ZPCCData
sta ZPCCData
iny
lda (ZPSymBufPtr),y
2022-01-30 21:47:08 +00:00
adc ZPCCData+1
sta ZPCCData+1
clc
rts
*--------------------------------------
SYM.SetAddrL ldy #SYM.SizeOf+1
2022-01-30 21:47:08 +00:00
lda (ZPSymBufPtr),y
bne .9
dey SYM.SizeOf
lda (ZPSymBufPtr),y
clc
2022-01-30 21:47:08 +00:00
adc LocalPtr
sta LocalPtr
bcs .9
ldy #SYM.Addr
sta (ZPSymBufPtr),y
2022-06-12 20:42:22 +00:00
ldy #SYM.SizeOf
lda (ZPSymBufPtr),y
2022-01-30 21:47:08 +00:00
jsr CODE.nAddLocal
clc
rts
.9 lda #E.BUF
sec
rts
*--------------------------------------
SYM.BufInitYAXC pha
tya
sta (ZPSymBufPtr) #SYM.T
pla
ldy #SYM.Q
sta (ZPSymBufPtr),y
txa
iny #SYM.SC
sta (ZPSymBufPtr),y
bcc .8 DONT reset buffer
lda #0
.1 iny
sta (ZPSymBufPtr),y
cpy #SYM.DefSize-1
bne .1
iny #SYM.DefSize
lda #SYM.Def
sta (ZPSymBufPtr),y
.8 rts
*--------------------------------------
SYM.PushAddr ldy #SYM.SC
2022-08-20 14:37:37 +00:00
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
*--------------------------------------
SYM.GetAddr1 ldy #SYM.SC
2022-08-20 14:37:37 +00:00
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
2022-08-20 14:37:37 +00:00
.2 >LDYA L.PCC.GetUAddr1
jmp CODE.EmitPCC
.9 rts
*--------------------------------------
SYM.GetAddr2 ldy #SYM.SC
2022-08-20 14:37:37 +00:00
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
*--------------------------------------
SYM.NewKey >PUSHA
2022-01-30 21:47:08 +00:00
>PUSHW ZPLineBufPtr
2022-11-02 06:54:30 +00:00
>PUSHWI 0 ScopeID
2022-06-22 06:26:44 +00:00
>SYSCALL SListNewKey
rts Y,A = KeyID, X = KeyLen
2022-06-12 20:42:22 +00:00
*--------------------------------------
SYM.Add0000 >LDYAI 0
*--------------------------------------
SYM.AddWord phy
pha
2022-08-20 14:37:37 +00:00
ldy #SYM.DefSize
lda (ZPSymBufPtr),y
clc
adc #2
bcs .9
2022-08-20 14:37:37 +00:00
sta (ZPSymBufPtr),y
tay
2022-08-20 14:37:37 +00:00
dey
2022-08-20 14:37:37 +00:00
pla A
sta (ZPSymBufPtr),y
dey
pla Y
pha
2022-08-20 14:37:37 +00:00
sta (ZPSymBufPtr),y
iny
lda (ZPSymBufPtr),y get back A
ply get back Y
* clc
rts
.9 pla
pla
lda #E.BUF
sec
rts
*--------------------------------------
SYM.AddName jsr CC.GetCharNB
bcs .98
jsr CC.IsLetter
bcs .98
jsr CC.GetIDLen
tax
jsr SYM.AddByte
bcs .99
ldy #0
.1 lda (ZPLineBufPtr),y
phy
jsr SYM.AddByte
ply
bcs .99
iny
dex
bne .1
tya
jsr CC.SkipA
clc
rts
.98 lda #E.CSYN
sec
.99 rts
*--------------------------------------
SYM.AddByte pha
ldy #SYM.DefSize
lda (ZPSymBufPtr),y
inc
beq .9
sta (ZPSymBufPtr),y
dec
tay
2022-08-20 14:37:37 +00:00
pla
sta (ZPSymBufPtr),y
clc
rts
.9 pla
lda #E.BUF
sec
2022-08-20 14:37:37 +00:00
rts
*--------------------------------------
SYM.NewLabelA bit bPass2
2022-08-20 14:37:37 +00:00
bmi .8
>STA.G CC.Label+1 _A = "B"reak, "C"ontinue...
2022-08-20 14:37:37 +00:00
>PUSHB.G CC.hSyms
>PUSHEA.G CC.Label
jsr SCOPE.Push
2022-08-20 14:37:37 +00:00
>SYSCALL SListNewKey
bcs .99
2022-08-20 14:37:37 +00:00
>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
lda #0
.1 iny
sta (ZPSymBufPtr),y
cpy #SYM.DefSize-1
2022-08-20 14:37:37 +00:00
bne .1
iny #SYM.DefSize
lda #SYM.Def
2022-08-20 14:37:37 +00:00
sta (ZPSymBufPtr),y
>LDYA ZPCCCode
jsr SYM.SetAddrYA
.DO DBG_SYM=1
jsr SYM.DEBUG0
.FIN
jmp SYM.Store
2022-08-20 14:37:37 +00:00
.8 clc
.99 rts
*--------------------------------------
SYM.Update sec
.HS 90 BCC
*--------------------------------------
SYM.Store clc
2022-06-12 20:42:22 +00:00
bit bPass2
bmi .8
2022-08-20 14:37:37 +00:00
2022-01-30 21:47:08 +00:00
php
.DO DBG_SYM=1
bcc .10
2022-01-30 21:47:08 +00:00
jsr SYM.DEBUG1
bra .11
2022-01-30 21:47:08 +00:00
.10
jsr SYM.DEBUG2
2022-01-30 21:47:08 +00:00
.11 .FIN
>PUSHB.G CC.hSyms
2022-06-22 06:26:44 +00:00
>PUSHW.G CC.SymID
>PUSHW ZPSymBufPtr
>PUSHBI 0
ldy #SYM.Q
lda (ZPSymBufPtr),y
and #SYM.Q.FUNC
bne .1
2022-06-22 06:26:44 +00:00
ldy #SYM.DefSize
lda (ZPSymBufPtr),y
bra .2
2022-06-22 06:26:44 +00:00
.1 lda #SYM.F.MAX
2022-06-12 20:42:22 +00:00
.2 >PUSHA
2022-01-30 21:47:08 +00:00
plp
bcs .3
2022-01-30 21:47:08 +00:00
>SYSCALL SListAddData
2022-01-30 21:47:08 +00:00
rts
.3 >SYSCALL SListSetData
rts
2022-01-30 21:47:08 +00:00
.8 clc
2022-06-22 06:26:44 +00:00
rts
2022-01-30 21:47:08 +00:00
*--------------------------------------
SYM.Lookup >LDA.G CC.LookupIdx
2022-06-22 06:26:44 +00:00
cmp #CC.LookupIdx+LOOKUP.MAX
beq .99
>PUSHB.G CC.hSyms ...for SListGetData
2022-01-30 21:47:08 +00:00
lda ScopeIdx
.1 pha
>PUSHB.G CC.hSyms
>PUSHW ZPLineBufPtr
ply
phy
jsr SCOPE.PushY
>SYSCALL SListLookup
2022-01-30 21:47:08 +00:00
bcc .8
pla
cmp #CC.ScopeIDs
2022-06-12 20:42:22 +00:00
beq .9
2022-01-30 21:47:08 +00:00
dec
dec
2022-01-30 21:47:08 +00:00
bra .1
.99 lda #E.OOH
* sec
rts
.9 inc pStack discard CC.hSyms
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
.8 >PUSHA KeyID.HI
tya
>PUSHA KeyID.LO
pla discard ScopeIdx
jsr CC.SkipX
>PUSHWZ allocate
>PUSHWI 65535 all
>PUSHWZ From Start
>SYSCALL SListGetData
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
2022-01-30 21:47:08 +00:00
*--------------------------------------
SYM.LookupLabelA
bit bPass2
2022-08-20 14:37:37 +00:00
bmi .1
ldx #0
ldy #0
clc
rts
.1 >STA.G CC.Label+1 A = "B"reak, "C"ontinue...
2022-08-20 14:37:37 +00:00
>PUSHB.G CC.hSyms ...for SListGetData
lda ScopeIdx
.2 pha
>PUSHB.G CC.hSyms
>PUSHEA.G CC.Label
ply
phy
jsr SCOPE.PushY
2022-08-20 14:37:37 +00:00
>SYSCALL SListLookup
bcc .8
2022-08-20 14:37:37 +00:00
pla
cmp #CC.ScopeIDs
beq .9
dec
dec
bra .2
.9 inc pStack discard CC.hSyms
lda #E.NOKEY
sec
rts
.8 >PUSHA KeyID.HI
tya
>PUSHA KeyID.LO
2022-08-20 14:37:37 +00:00
>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
*--------------------------------------
SYM.LookupFree >LDA.G CC.LookupIdx
2022-06-22 06:26:44 +00:00
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
*--------------------------------------
* ZPPtr2 = expected T/Q
* ZPLookupSymPtr
*--------------------------------------
SYM.LookupCheckTQ
lda ZPPtr2 target T
bne .1
2022-06-22 06:26:44 +00:00
lda (ZPLookupSymPtr) SYM.T
sta ZPPtr2 T
ldy #SYM.Q
lda (ZPLookupSymPtr),y
and #$F8 ignore VOLATILE|FUNC|FASTCALL
sta ZPPtr2+1 Q
2022-06-22 06:26:44 +00:00
clc
2022-01-30 21:47:08 +00:00
rts
.1 cmp #SYM.T.VOID
beq .2
2022-01-30 21:47:08 +00:00
lda (ZPLookupSymPtr) SYM.T
cmp #SYM.T.VOID
beq .2
cmp ZPPtr2 T
2022-01-30 21:47:08 +00:00
bne .9
.2 lda ZPPtr2+1 Q
2022-08-20 14:37:37 +00:00
2022-01-30 21:47:08 +00:00
ldy #SYM.Q
eor (ZPLookupSymPtr),y
and #$F8 ignore VOLATILE|FUNC|FASTCALL
beq .8
and #SYM.Q.AAARRAY is mismatch about array ?
beq .9 no...
lda ZPPtr2+1 Q
and #SYM.Q.AAARRAY
2022-01-30 21:47:08 +00:00
bne .9
.8 clc
2022-01-30 21:47:08 +00:00
rts
.9 lda #E.TMISMATCH
2022-01-30 21:47:08 +00:00
sec
.99 rts
*--------------------------------------
* on RT stack : Addr,value
*--------------------------------------
SYM.PopValue jsr SYM.GetYASizeOfInAXC
tax
dex
bne .1
>LDYA L.PCC.PopValue1
jmp CODE.EmitPCC
.1 cpx #1
bne .2
>LDYA L.PCC.PopValue2
jmp CODE.EmitPCC
.2 jsr CODE.LDXI
bcs .9
>LDYA L.PCC.PopValueX
jmp CODE.EmitPCC
.9 rts
2022-01-30 21:47:08 +00:00
*--------------------------------------
* out : Y,A = T/Q
*--------------------------------------
SYM.GetTypeInYA ldy #SYM.Q
2022-01-30 21:47:08 +00:00
lda (ZPSymBufPtr),y
pha
lda (ZPSymBufPtr)
tay
pla
rts
*--------------------------------------
* out : A,X,C = size
*--------------------------------------
SYM.GetSymSizeOfInAXC
2022-01-30 21:47:08 +00:00
ldy #SYM.Q
lda (ZPSymBufPtr),y
pha
lda (ZPSymBufPtr) SYM.T
tay
pla
SYM.GetYASizeOfInAXC
2022-01-30 21:47:08 +00:00
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
*--------------------------------------
SYM.SetSizeOf ldy #SYM.SizeOf
2022-01-30 21:47:08 +00:00
sta (ZPSymBufPtr),y
pha
iny
txa
sta (ZPSymBufPtr),y
pla
rts
*--------------------------------------
SYM.SetAddrYA phy
2022-01-30 21:47:08 +00:00
ldy #SYM.Addr+1
sta (ZPSymBufPtr),y
pla
dey
sta (ZPSymBufPtr),y
rts
*--------------------------------------
.DO DBG_SYM=1
SYM.DEBUG0 >PUSHW L.MSG.DEBUG.SYM0
>PUSHW.G CC.SymID
jsr SCOPE.Push
lda (ZPSymBufPtr)
>PUSHA
ldy #1
lda (ZPSymBufPtr),y
>PUSHA
>PUSHBI 6
>SYSCALL Printf
rts
SYM.DEBUG1 >PUSHW L.MSG.DEBUG.SYM1
>PUSHW.G CC.SymID
>PUSHBI 2
>SYSCALL Printf
rts
SYM.DEBUG2 >PUSHW L.MSG.DEBUG.SYM2
>PUSHW.G CC.SymID
>PUSHBI 2
>SYSCALL Printf
rts
.FIN
2022-01-30 21:47:08 +00:00
*--------------------------------------
MAN
SAVE usr/src/bin/cc.s.sym
LOAD usr/src/bin/cc.s
ASM