mirror of
https://github.com/A2osX/A2osX.git
synced 2025-03-12 23:29:48 +00:00
Kernel 0.9.1 : ASM rewrite....Local Symbols
This commit is contained in:
parent
1ae1532109
commit
6d248041ae
Binary file not shown.
@ -478,7 +478,7 @@ DIR.MA >LDA.G MAC.bAdd
|
||||
jsr SRC.GetNextCharNB
|
||||
beq DIR.OP.SYNERR
|
||||
|
||||
jsr MAC.Clear
|
||||
jsr MAC.New
|
||||
|
||||
.8 lda #$ff
|
||||
>STA.G MAC.bAdd
|
||||
|
@ -15,6 +15,10 @@ AUTO 4,1
|
||||
* & = octal
|
||||
* * = PC
|
||||
*---------------------------------------
|
||||
EXP.Eval.Missing lda #ERR.MISSING.EXP
|
||||
sec
|
||||
rts
|
||||
|
||||
EXP.Eval >STZ.G EXP.Modifier
|
||||
>STZ.G EXP.Prefix
|
||||
>STZ.G EXP.Operator
|
||||
@ -23,19 +27,15 @@ EXP.Eval >STZ.G EXP.Modifier
|
||||
bcs EXP.Eval.Missing
|
||||
|
||||
jsr SRC.IsMODReserved
|
||||
bcs EXP.Eval.Next1
|
||||
bcs EXP.Eval.Next
|
||||
|
||||
txa
|
||||
>STA.G EXP.Modifier
|
||||
lda #'#'
|
||||
>STA.G EXP.Prefix
|
||||
|
||||
bra EXP.Eval.Next
|
||||
EXP.Eval.Next0 jsr SRC.GetNextChar
|
||||
|
||||
EXP.Eval.Missing lda #ERR.MISSING.EXP
|
||||
sec
|
||||
rts
|
||||
|
||||
EXP.Eval.Next lda #2
|
||||
sta SRC.ACC.SIZE Default To WORD (2 bytes)
|
||||
|
||||
@ -44,13 +44,13 @@ EXP.Eval.Next lda #2
|
||||
stz SRC.ACC+2
|
||||
stz SRC.ACC+3
|
||||
|
||||
jsr SRC.GetNextChar
|
||||
jsr SRC.GetChar
|
||||
bcs EXP.Eval.Missing
|
||||
|
||||
EXP.Eval.Next1 cmp #'.' Local Label?
|
||||
cmp #'.' Local Label?
|
||||
bne .12
|
||||
|
||||
jsr EXP.GetLocal
|
||||
jsr EXP.GetLSymIDInAcc
|
||||
bcs .14
|
||||
|
||||
jmp EXP.EvalOperator
|
||||
@ -133,7 +133,7 @@ EXP.Eval.Next1 cmp #'.' Local Label?
|
||||
.42 jsr SRC.IsLetter Symbol ?
|
||||
bcs EXP.EvalExitSYN
|
||||
|
||||
jsr EXP.GetSymbolValue
|
||||
jsr EXP.GetGSymValueInAcc
|
||||
bcs EXP.EvalExitUND
|
||||
bra EXP.EvalOperator
|
||||
|
||||
@ -173,16 +173,16 @@ EXP.EvalOperator >LDA.G EXP.Operator
|
||||
txa
|
||||
>STA.G EXP.Operator
|
||||
|
||||
ldx #3
|
||||
ldx #4
|
||||
|
||||
.8 lda SRC.ACC,x
|
||||
sta SRC.ARG,x
|
||||
.8 lda SRC.ACC.SIZE,x
|
||||
sta SRC.ARG.SIZE,x
|
||||
dex
|
||||
bpl .8
|
||||
|
||||
jmp EXP.Eval.Next
|
||||
jmp EXP.Eval.Next0
|
||||
*---------------------------------------
|
||||
EXP.GetLocal jsr SRC.GetNextChar
|
||||
EXP.GetLSymIDInAcc jsr SRC.GetNextChar
|
||||
bcs .9
|
||||
|
||||
jsr SRC.GetDecimal
|
||||
@ -201,16 +201,9 @@ EXP.GetLocal jsr SRC.GetNextChar
|
||||
.9 lda #ERR.SYNTAX.ERROR
|
||||
sec
|
||||
rts
|
||||
*---------------------------------------
|
||||
EXP.SetAccA sta SRC.ACC
|
||||
stz SRC.ACC+1
|
||||
stz SRC.ACC+2
|
||||
stz SRC.ACC+3
|
||||
lda #1
|
||||
sta SRC.ACC.SIZE
|
||||
rts
|
||||
*---------------------------------------
|
||||
EXP.GetSymbolValue jsr SYM.LookupGlobal
|
||||
EXP.GetGSymValueInAcc
|
||||
jsr SYM.LookupGlobal
|
||||
bcs .2
|
||||
|
||||
ldy #SYM.Lookup+5
|
||||
@ -231,23 +224,37 @@ EXP.GetSymbolValue jsr SYM.LookupGlobal
|
||||
.2 >LDA.G ASM.PASS pass#2?
|
||||
bne .99 yes, undefined symbol
|
||||
|
||||
lda #0
|
||||
sta SRC.ACC.SIZE Add Pending
|
||||
jsr SYM.AddGlobal
|
||||
.3 clc
|
||||
lda #0 Mark ACC as pending
|
||||
sta SRC.ACC.SIZE
|
||||
|
||||
.3 jsr SRC.GetNextChar
|
||||
bcs .8
|
||||
|
||||
jsr SRC.IsLetterOrDigit
|
||||
bcc .3
|
||||
cmp #'.'
|
||||
beq .3
|
||||
cmp #'_'
|
||||
beq .3
|
||||
|
||||
.8 clc
|
||||
rts
|
||||
|
||||
.99 lda #ERR.UNDEF.SYMBOL
|
||||
sec
|
||||
.9 rts
|
||||
*---------------------------------------
|
||||
EXP.SetAccA sta SRC.ACC
|
||||
stz SRC.ACC+1
|
||||
stz SRC.ACC+2
|
||||
stz SRC.ACC+3
|
||||
lda #1
|
||||
sta SRC.ACC.SIZE
|
||||
rts
|
||||
*---------------------------------------
|
||||
EXP.Compute asl
|
||||
tax
|
||||
>LDA.G ASM.PASS pass#2?
|
||||
beq .8
|
||||
jmp (J.EXP.OP-2,x)
|
||||
.8 clc
|
||||
rts
|
||||
*---------------------------------------
|
||||
EXP.MOD.8.3 lda SRC.ACC+2
|
||||
bra EXP.MOD.8
|
||||
|
@ -55,7 +55,7 @@ FIO.LOAD.ASM.T >STYA ZPPtr2
|
||||
|
||||
.4 >PUSHW L.ASM.T.FILENAME
|
||||
>LDYA L.MSG.T.FILE
|
||||
>SYSCALL PrintF.YA
|
||||
jsr OUT.Print
|
||||
|
||||
>PUSHWI 0 Aux type
|
||||
>PUSHBI 6 S.FI.T.BIN
|
||||
@ -107,7 +107,7 @@ FIO.OpenFile >STYA ZPPtr1
|
||||
|
||||
>PUSHW ZPPtr1
|
||||
>LDYA L.MSG.SRC.FILE
|
||||
>SYSCALL PrintF.YA
|
||||
jsr OUT.Print
|
||||
|
||||
ldy #SRC.COUNT
|
||||
lda (pData),y
|
||||
|
@ -29,7 +29,7 @@ MAC.Quit >LDA.G MAC.hBuf
|
||||
.8 clc
|
||||
rts
|
||||
*---------------------------------------
|
||||
MAC.Clear lda #0
|
||||
MAC.New lda #0
|
||||
tay
|
||||
|
||||
.1 sta (ZPMacroBuf),y
|
||||
@ -38,7 +38,10 @@ MAC.Clear lda #0
|
||||
|
||||
rts
|
||||
*---------------------------------------
|
||||
MAC.AddChar tax
|
||||
MAC.AddChar >LDA.G ASM.PASS If Pass#2, ignore
|
||||
bne .8
|
||||
|
||||
tax
|
||||
lda (ZPMacroBuf)
|
||||
* cmp #254
|
||||
* beq .9 CS if EQ
|
||||
@ -55,7 +58,7 @@ MAC.AddChar tax
|
||||
beq .1
|
||||
|
||||
* >SYSCALL PutChar.A
|
||||
clc
|
||||
.8 clc
|
||||
rts
|
||||
|
||||
.1
|
||||
@ -68,7 +71,10 @@ MAC.AddChar tax
|
||||
clc
|
||||
.9 rts
|
||||
*---------------------------------------
|
||||
MAC.Store clc
|
||||
MAC.Store >LDA.G ASM.PASS If Pass#2, ignore
|
||||
bne .8
|
||||
|
||||
.8 clc
|
||||
rts
|
||||
*---------------------------------------
|
||||
|
||||
|
@ -2,6 +2,10 @@ NEW
|
||||
PREFIX /A2OSX.BUILD
|
||||
AUTO 4,1
|
||||
*---------------------------------------
|
||||
OUT.Init lda #20
|
||||
>STA.G OUT.LineCnt
|
||||
rts
|
||||
*---------------------------------------
|
||||
OUT.Reset ldx #4
|
||||
|
||||
ldy #ASM.PC
|
||||
@ -24,6 +28,7 @@ OUT.Reset ldx #4
|
||||
|
||||
>STZ.G OUT.Buf
|
||||
>STA.G OUT.bEquate
|
||||
|
||||
rts
|
||||
*---------------------------------------
|
||||
OUT.PrintLineErr >STA.G DIR.Byte Save Error code
|
||||
@ -70,7 +75,7 @@ OUT.PrintLine.1 jsr OUT.PrintLineOutBuf
|
||||
>PUSHW ZPLineBuf
|
||||
>PUSHW.G SRC.LINENUM
|
||||
>LDYA L.MSG.SRCLINE
|
||||
>SYSCALL PrintF.YA
|
||||
jmp OUT.Print
|
||||
OUT.PrintLine.9 rts
|
||||
*---------------------------------------
|
||||
OUT.PrintLineOn clc
|
||||
@ -134,7 +139,7 @@ OUT.PrintLineOutBuf >LDA.G OUT.bEquate
|
||||
ldy L.MSG.OUT0,x
|
||||
lda L.MSG.OUT0+1,x
|
||||
>SYSCALL PrintF.YA
|
||||
rts
|
||||
rts
|
||||
|
||||
OUT.PrintLineAcc ldx SRC.ACC.SIZE
|
||||
beq .2
|
||||
@ -154,6 +159,24 @@ OUT.PrintLineAcc ldx SRC.ACC.SIZE
|
||||
lda L.MSG.EQU0+1,x
|
||||
>SYSCALL PrintF.YA
|
||||
rts
|
||||
*---------------------------------------
|
||||
OUT.Print >SYSCALL PrintF.YA
|
||||
bra OUT.Print1
|
||||
|
||||
OUT.PrintCR lda #13
|
||||
>SYSCALL PutChar.A
|
||||
lda #10
|
||||
>SYSCALL PutChar.A
|
||||
|
||||
OUT.Print1 >DEC.G OUT.LineCnt
|
||||
bne .8
|
||||
|
||||
lda #20
|
||||
sta (pData),y
|
||||
|
||||
>DEBUG
|
||||
|
||||
.8 rts
|
||||
*---------------------------------------
|
||||
OUT.EmitByte phy
|
||||
phx
|
||||
@ -170,10 +193,7 @@ OUT.EmitByte phy
|
||||
bpl .1
|
||||
|
||||
jsr OUT.PrintLineOutBuf
|
||||
lda #13
|
||||
>SYSCALL PutChar.A
|
||||
lda #10
|
||||
>SYSCALL PutChar.A
|
||||
jsr OUT.PrintCR
|
||||
|
||||
.1 jsr OUT.Reset
|
||||
|
||||
|
@ -29,10 +29,7 @@ SRC.ParseLine jsr OUT.Reset
|
||||
.8 clc
|
||||
rts
|
||||
|
||||
SRC.ParseLine.Macro >LDA.G ASM.PASS If Pass#2, ignore
|
||||
bne .8
|
||||
|
||||
lda (ZPLinePtr)
|
||||
SRC.ParseLine.Macro lda (ZPLinePtr)
|
||||
cmp #' ' No label, scan to DIR/OP if any
|
||||
bne .1
|
||||
|
||||
@ -82,8 +79,7 @@ SRC.ParseLine.Macro >LDA.G ASM.PASS If Pass#2, ignore
|
||||
.22 jsr MAC.Store
|
||||
bcs SRC.ParseLine.RTS
|
||||
|
||||
lda #0
|
||||
>STA.G MAC.bAdd
|
||||
>STZ.G MAC.bAdd
|
||||
|
||||
.8 clc
|
||||
rts
|
||||
@ -139,7 +135,7 @@ SRC.ParseLine.LABEL jsr SRC.GetChar
|
||||
cmp #'.' local symbol?
|
||||
bne .1
|
||||
|
||||
>LDA.G SYM.bGlobal
|
||||
lda (ZPGlobalBuf)
|
||||
beq SRC.ParseLine.InvLbl
|
||||
|
||||
jsr SRC.GetNextChar
|
||||
@ -154,38 +150,24 @@ SRC.ParseLine.LABEL jsr SRC.GetChar
|
||||
lda SRC.ACC
|
||||
beq SRC.ParseLine.InvLbl .0 is not allowed
|
||||
|
||||
jsr SYM.AddLocalPC
|
||||
jsr SYM.AddLocal
|
||||
bcs SRC.ParseLine.RTS
|
||||
bra SRC.ParseLine.DirOp
|
||||
|
||||
.1 jsr SYMG.FlushGlobal
|
||||
bcs SRC.ParseLine.Err
|
||||
|
||||
lda #$ff
|
||||
>STA.G SYM.bGlobal
|
||||
|
||||
>LDA.G ASM.PASS
|
||||
bne .3
|
||||
bne .2
|
||||
|
||||
jsr SYM.AddGlobalPC Pass #1; try to add global...
|
||||
bcc SRC.ParseLine.DirOp yes!!! go scan dir/op
|
||||
|
||||
jsr SYM.LookupGlobal already defined...get it
|
||||
bcc SRC.ParseLine.Redef
|
||||
|
||||
>LDA.G SYM.Lookup+SYMG.F
|
||||
bit #SYMG.F.RW
|
||||
bne .2 R/W, always update...
|
||||
|
||||
bit #SYMG.F.RESOLVED
|
||||
bne SRC.ParseLine.Redef
|
||||
|
||||
.2 jsr SYM.UpdateGlobalPC
|
||||
jsr SYM.NewGlobal Pass #1; try to add global...
|
||||
bra SRC.ParseLine.DirOp
|
||||
|
||||
.3 jsr SYM.LookupGlobal Pass #2: should be already defined...
|
||||
bcs SRC.ParseLine.Undef
|
||||
|
||||
jsr SYM.UpdateGlobalPC
|
||||
.2 jsr SYM.GetGlobal Pass #2: should be already defined...
|
||||
bcs SRC.ParseLine.Undef
|
||||
*---------------------------------------
|
||||
SRC.ParseLine.DirOp jsr SRC.GetNextCharNB Scan for an Opcode...
|
||||
bcs SRC.ParseLine.Ok
|
||||
@ -478,7 +460,7 @@ SRC.ParseLine.OPAMCheck
|
||||
.2 lda (ZPOpDefPtr)
|
||||
bne .1
|
||||
|
||||
lda #ERR.INV.AM.4.OC
|
||||
.99 lda #ERR.INV.AM.4.OC
|
||||
sec
|
||||
rts
|
||||
|
||||
@ -516,14 +498,24 @@ SRC.ParseLine.OPAMCheck
|
||||
.5 bne .6
|
||||
|
||||
ldx SRC.ACCTMP
|
||||
lda SRC.ACC,x
|
||||
inc SRC.ACCTMP
|
||||
lda SRC.ACC,x
|
||||
bra .50
|
||||
|
||||
.6 cmp #'r
|
||||
>DEBUG
|
||||
|
||||
bne .99
|
||||
|
||||
ldx SRC.ACCTMP
|
||||
inc SRC.ACCTMP
|
||||
lda ASM.PC,x
|
||||
sec
|
||||
sbc SRC.ACC,x
|
||||
pha
|
||||
|
||||
|
||||
|
||||
pla
|
||||
bra .50
|
||||
|
||||
.8 clc
|
||||
.9 rts
|
||||
|
@ -2,21 +2,20 @@ NEW
|
||||
PREFIX /A2OSX.BUILD
|
||||
AUTO 4,1
|
||||
*---------------------------------------
|
||||
* Global Symbol Record: (8 bytes)
|
||||
* 0 : Len (8)
|
||||
* Global Symbol Record: (6+ bytes)
|
||||
* 0 : Len
|
||||
* 1 : Flags:
|
||||
* b7=0=pending,1=resolved
|
||||
* b6=R/W (.SE)
|
||||
* b2,b1,b0 : Size (in bytes)
|
||||
* 2-5 : 32 bits Value
|
||||
* 6-7 : LSID (Local Symbols ID)
|
||||
* 6+ : Local Symbols.....
|
||||
*---------------------------------------
|
||||
* Local Symbol Record: (7 bytes)
|
||||
* 0 : Len (8)
|
||||
* Local Symbol Record: (6 bytes)
|
||||
* 0 : Local ID (1->255)
|
||||
* 1 : Flags:
|
||||
* b7=0=pending,1=resolved
|
||||
* 2-5 : 32 bits Value (PC)
|
||||
* 6 : Local ID (1->255)
|
||||
*---------------------------------------
|
||||
* Private Symbol Record: (9 bytes)
|
||||
* 0 : Len (8)
|
||||
@ -31,36 +30,39 @@ SYM.Init >SYSCALL SListNew
|
||||
|
||||
>STA.G SYM.hGlobals
|
||||
|
||||
|
||||
>SYSCALL SListNew
|
||||
>LDYAI 256
|
||||
>SYSCALL GetMem.YA
|
||||
bcs .9
|
||||
|
||||
>STA.G SYM.hLocals
|
||||
|
||||
>STYA ZPGlobalBuf
|
||||
txa
|
||||
>STA.G SYM.hGlobalBuf
|
||||
|
||||
>LDYAI 256
|
||||
>SYSCALL GetMem.YA
|
||||
bcs .9
|
||||
|
||||
>STYA ZPLocalBuf
|
||||
>STYA ZPLookupBuf
|
||||
txa
|
||||
>STA.G SYM.hLocalBuf
|
||||
>STA.G SYM.hLookupBuf
|
||||
|
||||
.9 rts
|
||||
*---------------------------------------
|
||||
SYM.Reset >STZ.G SYM.bGlobal
|
||||
>STA.G SYM.LocalIndex
|
||||
SYM.Reset lda #0
|
||||
sta (ZPGlobalBuf)
|
||||
rts
|
||||
*---------------------------------------
|
||||
SYM.Quit >LDA.G SYM.hLocalBuf
|
||||
SYM.Quit >LDA.G SYM.hLookpBuf
|
||||
beq .1
|
||||
|
||||
>SYSCALL FreeMem.A
|
||||
|
||||
.1 >LDA.G SYM.hGlobalBuf
|
||||
beq .2
|
||||
|
||||
>SYSCALL FreeMem.A
|
||||
|
||||
.2 >LDA.G SYM.hLocals
|
||||
beq .3
|
||||
>SYSCALL SListFree.A
|
||||
|
||||
.3 >LDA.G SYM.hGlobals
|
||||
.2 >LDA.G SYM.hGlobals
|
||||
beq .8
|
||||
>SYSCALL SListFree.A
|
||||
|
||||
@ -129,18 +131,44 @@ SYM.Dump stz ZPLinePtr
|
||||
.8 clc
|
||||
rts
|
||||
*---------------------------------------
|
||||
SYM.AddGlobalPC jsr SYM.PC2Global A=PC Size
|
||||
ora #SYMG.F.RESOLVED PC is always known
|
||||
*---------------------------------------
|
||||
SYM.AddGlobal >STA.G SYM.Global+SYMG.F
|
||||
SYM.NewGlobal >LDYA ZPLinePtr
|
||||
>STYA SYM.GlobalPtr
|
||||
|
||||
lda #SYMG.SIZE-1 F+V+LSID
|
||||
>STA.G SYM.Global+SYMG.LEN
|
||||
jsr SYM.PC2Global A=PC Size
|
||||
ora #SYMG.F.RESOLVED PC is always known
|
||||
ldy #SYMG.F
|
||||
sta (ZPGlobalBuf),y
|
||||
|
||||
lda #SYMG.SIZE-1
|
||||
* ldy #SYMG.LEN
|
||||
sta (ZPGlobalBuf)
|
||||
clc
|
||||
rts
|
||||
*---------------------------------------
|
||||
SYM.GetGlobal >PUSHB.G SYM.hGlobals
|
||||
>PUSHW ZPLinePtr
|
||||
>PUSHW ZPGlobalBuf
|
||||
>SYSCALL SListLookup
|
||||
bcs .9
|
||||
|
||||
>PUSHB.G SYM.hGlobals
|
||||
adc ZPLinePtr
|
||||
sta ZPLinePtr
|
||||
bcc .1
|
||||
|
||||
inc ZPLinePtr+1
|
||||
clc
|
||||
|
||||
.1 tya
|
||||
>STA.G SYM.GlobalID+1
|
||||
txa
|
||||
>STA.G SYM.GlobalID
|
||||
|
||||
.9 rts
|
||||
*---------------------------------------
|
||||
SYM.AddGlobal >PUSHB.G SYM.hGlobals
|
||||
>PUSHW ZPLinePtr
|
||||
|
||||
>PUSHEA.G SYM.Global
|
||||
>PUSHW ZPGlobalBuf
|
||||
|
||||
>SYSCALL SListAdd
|
||||
bcs .9
|
||||
@ -163,27 +191,20 @@ SYM.AddGlobal >STA.G SYM.Global+SYMG.F
|
||||
*---------------------------------------
|
||||
SYM.LookupGlobal >PUSHB.G SYM.hGlobals
|
||||
>PUSHW ZPLinePtr
|
||||
>PUSHEA.G SYM.Lookup
|
||||
>PUSHW ZPLookupBuf
|
||||
>SYSCALL SListLookup
|
||||
bcs .9
|
||||
|
||||
adc ZPLinePtr
|
||||
sta ZPLinePtr
|
||||
bcc .1
|
||||
bcc .8
|
||||
|
||||
inc ZPLinePtr+1
|
||||
clc
|
||||
|
||||
.1 tya
|
||||
>STA.G SYM.GlobalID+1
|
||||
txa
|
||||
>STA.G SYM.GlobalID
|
||||
|
||||
.8
|
||||
.9 rts
|
||||
*---------------------------------------
|
||||
SYM.UpdateGlobalPC jsr SYM.PC2Global
|
||||
bra SYM.UpdateGlobal
|
||||
*---------------------------------------
|
||||
SYM.UpdateGlobalAcc ldx #3
|
||||
|
||||
ldy #SYM.Global+SYMG.V+3
|
||||
@ -209,7 +230,7 @@ SYM.UpdateGlobal ora #SYMG.F.RESOLVED
|
||||
>SYSCALL SListUpdateByID
|
||||
rts
|
||||
*---------------------------------------
|
||||
SYMG.FlushGlobal clc
|
||||
SYMG.FlushGlobal clc
|
||||
rts
|
||||
*---------------------------------------
|
||||
SYM.PC2Global ldx #4
|
||||
@ -224,10 +245,10 @@ SYM.PC2Global ldx #4
|
||||
|
||||
ldx #4
|
||||
|
||||
ldy #SYM.Global+SYMG.V+3
|
||||
ldy #SYMG.V+3
|
||||
|
||||
.2 pla
|
||||
sta (pData),y
|
||||
sta (ZPGlobalBuf),y
|
||||
dey
|
||||
dex
|
||||
bne .2
|
||||
@ -235,30 +256,32 @@ SYM.PC2Global ldx #4
|
||||
ldx #4
|
||||
ldy #ASM.PC+3
|
||||
|
||||
.3 lda (pData),y
|
||||
.3 lda (ZPGlobalBuf),y
|
||||
bne .4
|
||||
dex
|
||||
dey
|
||||
bne .3
|
||||
|
||||
.4 txa A=PC Size
|
||||
.4 txa
|
||||
|
||||
ora #SYMG.F.RESOLVED
|
||||
ldy #SYMG.F
|
||||
sta (ZPGlobalBuf),y
|
||||
|
||||
txa A=PC Size
|
||||
|
||||
rts
|
||||
*---------------------------------------
|
||||
SYM.AddLocalPC tax Save ID
|
||||
SYM.AddLocal tax Save ID
|
||||
|
||||
>LDA.G SYM.LocalIndex
|
||||
lda (ZPGlobalBuf)
|
||||
tay
|
||||
clc
|
||||
adc #6
|
||||
adc #SYML.SIZE
|
||||
bcs .9
|
||||
|
||||
txa Get Back ID
|
||||
sta (ZPLocalBuf),y
|
||||
|
||||
iny
|
||||
lda #SYMG.F.RESOLVED
|
||||
sta (ZPLocalBuf),y
|
||||
sta (ZPGlobalBuf),y
|
||||
|
||||
iny
|
||||
phy
|
||||
@ -278,46 +301,15 @@ SYM.AddLocalPC tax Save ID
|
||||
ply
|
||||
|
||||
.2 pla
|
||||
sta (ZPLocalBuf),y
|
||||
sta (ZPGlobalBuf),y
|
||||
iny
|
||||
dex
|
||||
bne .2
|
||||
|
||||
lda #0
|
||||
sta (ZPLocalBuf),y
|
||||
sta (ZPGlobalBuf),y
|
||||
tya
|
||||
>STA.G SYM.LocalIndex
|
||||
|
||||
* clc
|
||||
rts
|
||||
|
||||
.9 lda #ERR.TOO.MANY.LOCAL
|
||||
* sec
|
||||
rts
|
||||
*---------------------------------------
|
||||
SYM.AddLocalPending tax Save ID
|
||||
|
||||
>LDA.G SYM.LocalIndex
|
||||
tay
|
||||
clc
|
||||
adc #6
|
||||
bcs .9
|
||||
|
||||
txa Get Back ID
|
||||
sta (ZPLocalBuf),y
|
||||
|
||||
ldx #6 F+DWORD+Ending 0
|
||||
|
||||
lda #0
|
||||
|
||||
.1 iny
|
||||
sta (ZPLocalBuf),y
|
||||
|
||||
iny
|
||||
dex
|
||||
bne .1
|
||||
|
||||
>STA.G SYM.LocalIndex
|
||||
sta (ZPGlobalBuf)
|
||||
|
||||
* clc
|
||||
rts
|
||||
|
@ -14,29 +14,29 @@ ZPPtr2 .EQ ZPBIN+2
|
||||
ZPPtr3 .EQ ZPBIN+4
|
||||
ZPLineBuf .EQ ZPBIN+6
|
||||
ZPLinePtr .EQ ZPBIN+8
|
||||
ZPLocalBuf .EQ ZPBIN+10
|
||||
ZPMacroBuf .EQ ZPBIN+12
|
||||
ZPTmpBuf .EQ ZPBIN+14
|
||||
ZPAMPtr .EQ ZPBIN+16
|
||||
ZPRPtr .EQ ZPBIN+18
|
||||
ZPOpsPtr .EQ ZPBIN+20
|
||||
ZPOpDefPtr .EQ ZPBIN+22
|
||||
ZPGlobalBuf .EQ ZPBIN+10
|
||||
ZPLookupBuf .EQ ZPBIN+12
|
||||
ZPMacroBuf .EQ ZPBIN+14
|
||||
ZPTmpBuf .EQ ZPBIN+16
|
||||
ZPAMPtr .EQ ZPBIN+18
|
||||
ZPRPtr .EQ ZPBIN+20
|
||||
ZPOpsPtr .EQ ZPBIN+22
|
||||
ZPOpDefPtr .EQ ZPBIN+24
|
||||
*---------------------------------------
|
||||
SYMG.LEN .EQ 0
|
||||
SYMG.F .EQ 1
|
||||
SYMG.F.RESOLVED .EQ %10000000
|
||||
SYMG.F.RW .EQ %01000000
|
||||
SYMG.F.SIZE .EQ %00000111
|
||||
SYMG.F.RESOLVED .EQ %10000000
|
||||
SYMG.F.RW .EQ %01000000
|
||||
SYMG.F.EQU .EQ %00100000
|
||||
SYMG.F.SIZE .EQ %00000111
|
||||
SYMG.V .EQ 2
|
||||
SYMG.LSID .EQ 6
|
||||
SYMG.SIZE .EQ 8
|
||||
*
|
||||
SYMG.SIZE .EQ 6
|
||||
*---------------------------------------
|
||||
SYML.LEN .EQ 0
|
||||
SYML.F .EQ 1
|
||||
SYML.F.RESOLVED .EQ %10000000
|
||||
SYML.V .EQ 2
|
||||
SYML.ID .EQ 6
|
||||
SYML.SIZE .EQ 7
|
||||
SYML.ID .EQ 0
|
||||
SYML.V .EQ 1
|
||||
*
|
||||
SYML.SIZE .EQ 5
|
||||
*---------------------------------------
|
||||
ASM.T.AM .EQ 0
|
||||
ASM.T.R .EQ 2
|
||||
@ -80,7 +80,7 @@ CS.START cld
|
||||
.DA CS.END-CS.START CS
|
||||
.DA DS.END-DS.START DS
|
||||
.DA #0 SS
|
||||
.DA #24 ZP
|
||||
.DA #32 ZP
|
||||
.DA 0
|
||||
*--------------------------------------
|
||||
* Relocation Table
|
||||
@ -200,6 +200,8 @@ CS.INIT ldy #S.PS.ARGC
|
||||
|
||||
jsr MAC.Init
|
||||
bcs .9
|
||||
|
||||
jsr OUT.Init
|
||||
|
||||
>LDYAI 256
|
||||
>SYSCALL GetMem.YA
|
||||
@ -231,7 +233,7 @@ CS.RUN >SYSCALL GetChar
|
||||
bcs .11 no char
|
||||
|
||||
cmp #$03 Ctrl-C
|
||||
beq .99 Abort....
|
||||
beq .99 Abort....beq=CS
|
||||
|
||||
cmp #$13 Ctrl-S
|
||||
bne .11
|
||||
@ -253,7 +255,7 @@ CS.RUN >SYSCALL GetChar
|
||||
inc
|
||||
>PUSHA
|
||||
>LDYA L.MSG.PASS
|
||||
>SYSCALL PrintF.YA
|
||||
jsr OUT.Print
|
||||
|
||||
ldy #SRC.hFILENAME
|
||||
lda (pData),y
|
||||
@ -282,15 +284,15 @@ CS.RUN >SYSCALL GetChar
|
||||
inc
|
||||
sta (pData),y
|
||||
clc
|
||||
rts
|
||||
.99 rts
|
||||
|
||||
.1 jsr SYM.Dump
|
||||
>PUSHW ZPLinePtr
|
||||
>LDYA L.MSG.SUMMARY
|
||||
>SYSCALL PrintF.YA
|
||||
jsr OUT.Print
|
||||
|
||||
lda #0 End of assembly, exit with no error
|
||||
.99 sec
|
||||
sec
|
||||
rts
|
||||
|
||||
.2 jsr SRC.ParseLine
|
||||
@ -430,8 +432,9 @@ FIO.Stat .BS S.STAT
|
||||
|
||||
SRC.ACC.SIZE .BS 1
|
||||
SRC.ACC .BS 4
|
||||
SRC.ACCTMP .BS 4
|
||||
SRC.ARG.SIZE .BS 1
|
||||
SRC.ARG .BS 4
|
||||
SRC.ACCTMP .BS 4
|
||||
SRC.AM.StrBuf .BS 32
|
||||
*--------------------------------------
|
||||
.DUMMY
|
||||
@ -447,13 +450,13 @@ SRC.COUNT .BS 1
|
||||
SRC.hFILES .BS SRC.IN.MAXDEPTH
|
||||
SRC.hFILETYPES .BS SRC.IN.MAXDEPTH
|
||||
|
||||
SRC.LINENUM .BS 2
|
||||
SRC.AMID .BS 1
|
||||
|
||||
DST.hFILENAME .BS 1
|
||||
DST.hREFNUM .BS 1
|
||||
DST.hBUFFER .BS 1
|
||||
DST.hFILETYPE .BS 1
|
||||
SRC.LINENUM .BS 2
|
||||
|
||||
ASM.T.hMem .BS 1
|
||||
|
||||
DIR.Word .BS 2
|
||||
DIR.Byte .BS 1
|
||||
@ -463,6 +466,8 @@ EXP.Prefix .BS 1
|
||||
EXP.Operator .BS 1
|
||||
|
||||
|
||||
ASM.T.hMem .BS 1
|
||||
|
||||
ASM.PASS .BS 1
|
||||
ASM.DO.StackPtr .BS 1
|
||||
ASM.DO.Stack .BS SRC.DO.MAXDEPTH
|
||||
@ -476,19 +481,14 @@ ASM.PC .BS 4
|
||||
ASM.PC.PH .BS 4
|
||||
|
||||
SYM.hGlobals .BS 1
|
||||
SYM.bGlobal .BS 1
|
||||
|
||||
SYM.GlobalPtr .BS 2
|
||||
SYM.hGlobalBuf .BS 1
|
||||
SYM.GlobalID .BS 2
|
||||
SYM.Global .BS SYMG.SIZE
|
||||
|
||||
SYM.hLocals .BS 1
|
||||
SYM.hLookupBuf .BS 1
|
||||
|
||||
SYM.hLocalBuf .BS 1
|
||||
SYM.LocalIndex .BS 1
|
||||
SYM.LocalID .BS 2
|
||||
SYM.Local .BS SYML.SIZE
|
||||
|
||||
SYM.Lookup .BS SYMG.SIZE
|
||||
|
||||
MAC.hMacros .BS 1
|
||||
MAC.hBuf .BS 1
|
||||
@ -497,8 +497,8 @@ MAC.bAdd .BS 1
|
||||
OUT.PC .BS 4
|
||||
OUT.Buf .BS 4
|
||||
OUT.bEquate .BS 1
|
||||
OUT.LineCnt .BS 1
|
||||
|
||||
SRC.AMID .BS 1
|
||||
DS.END .ED
|
||||
*---------------------------------------
|
||||
.DO DS.END-DS.START>$FF
|
||||
|
Loading…
x
Reference in New Issue
Block a user