Kernel 0.9.1 : ASM rewrite....Local Symbols

This commit is contained in:
Rémy GIBERT 2018-03-23 15:57:35 +00:00
parent 1ae1532109
commit 6d248041ae
9 changed files with 215 additions and 198 deletions

Binary file not shown.

View File

@ -478,7 +478,7 @@ DIR.MA >LDA.G MAC.bAdd
jsr SRC.GetNextCharNB jsr SRC.GetNextCharNB
beq DIR.OP.SYNERR beq DIR.OP.SYNERR
jsr MAC.Clear jsr MAC.New
.8 lda #$ff .8 lda #$ff
>STA.G MAC.bAdd >STA.G MAC.bAdd

View File

@ -15,6 +15,10 @@ AUTO 4,1
* & = octal * & = octal
* * = PC * * = PC
*--------------------------------------- *---------------------------------------
EXP.Eval.Missing lda #ERR.MISSING.EXP
sec
rts
EXP.Eval >STZ.G EXP.Modifier EXP.Eval >STZ.G EXP.Modifier
>STZ.G EXP.Prefix >STZ.G EXP.Prefix
>STZ.G EXP.Operator >STZ.G EXP.Operator
@ -23,19 +27,15 @@ EXP.Eval >STZ.G EXP.Modifier
bcs EXP.Eval.Missing bcs EXP.Eval.Missing
jsr SRC.IsMODReserved jsr SRC.IsMODReserved
bcs EXP.Eval.Next1 bcs EXP.Eval.Next
txa txa
>STA.G EXP.Modifier >STA.G EXP.Modifier
lda #'#' lda #'#'
>STA.G EXP.Prefix >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 EXP.Eval.Next lda #2
sta SRC.ACC.SIZE Default To WORD (2 bytes) 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+2
stz SRC.ACC+3 stz SRC.ACC+3
jsr SRC.GetNextChar jsr SRC.GetChar
bcs EXP.Eval.Missing bcs EXP.Eval.Missing
EXP.Eval.Next1 cmp #'.' Local Label? cmp #'.' Local Label?
bne .12 bne .12
jsr EXP.GetLocal jsr EXP.GetLSymIDInAcc
bcs .14 bcs .14
jmp EXP.EvalOperator jmp EXP.EvalOperator
@ -133,7 +133,7 @@ EXP.Eval.Next1 cmp #'.' Local Label?
.42 jsr SRC.IsLetter Symbol ? .42 jsr SRC.IsLetter Symbol ?
bcs EXP.EvalExitSYN bcs EXP.EvalExitSYN
jsr EXP.GetSymbolValue jsr EXP.GetGSymValueInAcc
bcs EXP.EvalExitUND bcs EXP.EvalExitUND
bra EXP.EvalOperator bra EXP.EvalOperator
@ -173,16 +173,16 @@ EXP.EvalOperator >LDA.G EXP.Operator
txa txa
>STA.G EXP.Operator >STA.G EXP.Operator
ldx #3 ldx #4
.8 lda SRC.ACC,x .8 lda SRC.ACC.SIZE,x
sta SRC.ARG,x sta SRC.ARG.SIZE,x
dex dex
bpl .8 bpl .8
jmp EXP.Eval.Next jmp EXP.Eval.Next0
*--------------------------------------- *---------------------------------------
EXP.GetLocal jsr SRC.GetNextChar EXP.GetLSymIDInAcc jsr SRC.GetNextChar
bcs .9 bcs .9
jsr SRC.GetDecimal jsr SRC.GetDecimal
@ -201,16 +201,9 @@ EXP.GetLocal jsr SRC.GetNextChar
.9 lda #ERR.SYNTAX.ERROR .9 lda #ERR.SYNTAX.ERROR
sec sec
rts 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 bcs .2
ldy #SYM.Lookup+5 ldy #SYM.Lookup+5
@ -231,23 +224,37 @@ EXP.GetSymbolValue jsr SYM.LookupGlobal
.2 >LDA.G ASM.PASS pass#2? .2 >LDA.G ASM.PASS pass#2?
bne .99 yes, undefined symbol bne .99 yes, undefined symbol
lda #0 lda #0 Mark ACC as pending
sta SRC.ACC.SIZE Add Pending sta SRC.ACC.SIZE
jsr SYM.AddGlobal
.3 clc .3 jsr SRC.GetNextChar
bcs .8
jsr SRC.IsLetterOrDigit
bcc .3
cmp #'.'
beq .3
cmp #'_'
beq .3
.8 clc
rts rts
.99 lda #ERR.UNDEF.SYMBOL .99 lda #ERR.UNDEF.SYMBOL
sec sec
.9 rts .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 EXP.Compute asl
tax tax
>LDA.G ASM.PASS pass#2?
beq .8
jmp (J.EXP.OP-2,x) jmp (J.EXP.OP-2,x)
.8 clc
rts
*--------------------------------------- *---------------------------------------
EXP.MOD.8.3 lda SRC.ACC+2 EXP.MOD.8.3 lda SRC.ACC+2
bra EXP.MOD.8 bra EXP.MOD.8

View File

@ -55,7 +55,7 @@ FIO.LOAD.ASM.T >STYA ZPPtr2
.4 >PUSHW L.ASM.T.FILENAME .4 >PUSHW L.ASM.T.FILENAME
>LDYA L.MSG.T.FILE >LDYA L.MSG.T.FILE
>SYSCALL PrintF.YA jsr OUT.Print
>PUSHWI 0 Aux type >PUSHWI 0 Aux type
>PUSHBI 6 S.FI.T.BIN >PUSHBI 6 S.FI.T.BIN
@ -107,7 +107,7 @@ FIO.OpenFile >STYA ZPPtr1
>PUSHW ZPPtr1 >PUSHW ZPPtr1
>LDYA L.MSG.SRC.FILE >LDYA L.MSG.SRC.FILE
>SYSCALL PrintF.YA jsr OUT.Print
ldy #SRC.COUNT ldy #SRC.COUNT
lda (pData),y lda (pData),y

View File

@ -29,7 +29,7 @@ MAC.Quit >LDA.G MAC.hBuf
.8 clc .8 clc
rts rts
*--------------------------------------- *---------------------------------------
MAC.Clear lda #0 MAC.New lda #0
tay tay
.1 sta (ZPMacroBuf),y .1 sta (ZPMacroBuf),y
@ -38,7 +38,10 @@ MAC.Clear lda #0
rts rts
*--------------------------------------- *---------------------------------------
MAC.AddChar tax MAC.AddChar >LDA.G ASM.PASS If Pass#2, ignore
bne .8
tax
lda (ZPMacroBuf) lda (ZPMacroBuf)
* cmp #254 * cmp #254
* beq .9 CS if EQ * beq .9 CS if EQ
@ -55,7 +58,7 @@ MAC.AddChar tax
beq .1 beq .1
* >SYSCALL PutChar.A * >SYSCALL PutChar.A
clc .8 clc
rts rts
.1 .1
@ -68,7 +71,10 @@ MAC.AddChar tax
clc clc
.9 rts .9 rts
*--------------------------------------- *---------------------------------------
MAC.Store clc MAC.Store >LDA.G ASM.PASS If Pass#2, ignore
bne .8
.8 clc
rts rts
*--------------------------------------- *---------------------------------------

View File

@ -2,6 +2,10 @@ NEW
PREFIX /A2OSX.BUILD PREFIX /A2OSX.BUILD
AUTO 4,1 AUTO 4,1
*--------------------------------------- *---------------------------------------
OUT.Init lda #20
>STA.G OUT.LineCnt
rts
*---------------------------------------
OUT.Reset ldx #4 OUT.Reset ldx #4
ldy #ASM.PC ldy #ASM.PC
@ -24,6 +28,7 @@ OUT.Reset ldx #4
>STZ.G OUT.Buf >STZ.G OUT.Buf
>STA.G OUT.bEquate >STA.G OUT.bEquate
rts rts
*--------------------------------------- *---------------------------------------
OUT.PrintLineErr >STA.G DIR.Byte Save Error code OUT.PrintLineErr >STA.G DIR.Byte Save Error code
@ -70,7 +75,7 @@ OUT.PrintLine.1 jsr OUT.PrintLineOutBuf
>PUSHW ZPLineBuf >PUSHW ZPLineBuf
>PUSHW.G SRC.LINENUM >PUSHW.G SRC.LINENUM
>LDYA L.MSG.SRCLINE >LDYA L.MSG.SRCLINE
>SYSCALL PrintF.YA jmp OUT.Print
OUT.PrintLine.9 rts OUT.PrintLine.9 rts
*--------------------------------------- *---------------------------------------
OUT.PrintLineOn clc OUT.PrintLineOn clc
@ -134,7 +139,7 @@ OUT.PrintLineOutBuf >LDA.G OUT.bEquate
ldy L.MSG.OUT0,x ldy L.MSG.OUT0,x
lda L.MSG.OUT0+1,x lda L.MSG.OUT0+1,x
>SYSCALL PrintF.YA >SYSCALL PrintF.YA
rts rts
OUT.PrintLineAcc ldx SRC.ACC.SIZE OUT.PrintLineAcc ldx SRC.ACC.SIZE
beq .2 beq .2
@ -154,6 +159,24 @@ OUT.PrintLineAcc ldx SRC.ACC.SIZE
lda L.MSG.EQU0+1,x lda L.MSG.EQU0+1,x
>SYSCALL PrintF.YA >SYSCALL PrintF.YA
rts 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 OUT.EmitByte phy
phx phx
@ -170,10 +193,7 @@ OUT.EmitByte phy
bpl .1 bpl .1
jsr OUT.PrintLineOutBuf jsr OUT.PrintLineOutBuf
lda #13 jsr OUT.PrintCR
>SYSCALL PutChar.A
lda #10
>SYSCALL PutChar.A
.1 jsr OUT.Reset .1 jsr OUT.Reset

View File

@ -29,10 +29,7 @@ SRC.ParseLine jsr OUT.Reset
.8 clc .8 clc
rts rts
SRC.ParseLine.Macro >LDA.G ASM.PASS If Pass#2, ignore SRC.ParseLine.Macro lda (ZPLinePtr)
bne .8
lda (ZPLinePtr)
cmp #' ' No label, scan to DIR/OP if any cmp #' ' No label, scan to DIR/OP if any
bne .1 bne .1
@ -82,8 +79,7 @@ SRC.ParseLine.Macro >LDA.G ASM.PASS If Pass#2, ignore
.22 jsr MAC.Store .22 jsr MAC.Store
bcs SRC.ParseLine.RTS bcs SRC.ParseLine.RTS
lda #0 >STZ.G MAC.bAdd
>STA.G MAC.bAdd
.8 clc .8 clc
rts rts
@ -139,7 +135,7 @@ SRC.ParseLine.LABEL jsr SRC.GetChar
cmp #'.' local symbol? cmp #'.' local symbol?
bne .1 bne .1
>LDA.G SYM.bGlobal lda (ZPGlobalBuf)
beq SRC.ParseLine.InvLbl beq SRC.ParseLine.InvLbl
jsr SRC.GetNextChar jsr SRC.GetNextChar
@ -154,38 +150,24 @@ SRC.ParseLine.LABEL jsr SRC.GetChar
lda SRC.ACC lda SRC.ACC
beq SRC.ParseLine.InvLbl .0 is not allowed beq SRC.ParseLine.InvLbl .0 is not allowed
jsr SYM.AddLocalPC jsr SYM.AddLocal
bcs SRC.ParseLine.RTS bcs SRC.ParseLine.RTS
bra SRC.ParseLine.DirOp bra SRC.ParseLine.DirOp
.1 jsr SYMG.FlushGlobal .1 jsr SYMG.FlushGlobal
bcs SRC.ParseLine.Err bcs SRC.ParseLine.Err
lda #$ff
>STA.G SYM.bGlobal
>LDA.G ASM.PASS >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 jsr SYM.LookupGlobal already defined...get it
bcc SRC.ParseLine.Redef
>LDA.G SYM.Lookup+SYMG.F jsr SYM.NewGlobal Pass #1; try to add global...
bit #SYMG.F.RW
bne .2 R/W, always update...
bit #SYMG.F.RESOLVED
bne SRC.ParseLine.Redef
.2 jsr SYM.UpdateGlobalPC
bra SRC.ParseLine.DirOp bra SRC.ParseLine.DirOp
.3 jsr SYM.LookupGlobal Pass #2: should be already defined... .2 jsr SYM.GetGlobal Pass #2: should be already defined...
bcs SRC.ParseLine.Undef bcs SRC.ParseLine.Undef
jsr SYM.UpdateGlobalPC
*--------------------------------------- *---------------------------------------
SRC.ParseLine.DirOp jsr SRC.GetNextCharNB Scan for an Opcode... SRC.ParseLine.DirOp jsr SRC.GetNextCharNB Scan for an Opcode...
bcs SRC.ParseLine.Ok bcs SRC.ParseLine.Ok
@ -478,7 +460,7 @@ SRC.ParseLine.OPAMCheck
.2 lda (ZPOpDefPtr) .2 lda (ZPOpDefPtr)
bne .1 bne .1
lda #ERR.INV.AM.4.OC .99 lda #ERR.INV.AM.4.OC
sec sec
rts rts
@ -516,14 +498,24 @@ SRC.ParseLine.OPAMCheck
.5 bne .6 .5 bne .6
ldx SRC.ACCTMP ldx SRC.ACCTMP
lda SRC.ACC,x
inc SRC.ACCTMP inc SRC.ACCTMP
lda SRC.ACC,x
bra .50 bra .50
.6 cmp #'r .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 .8 clc
.9 rts .9 rts

View File

@ -2,21 +2,20 @@ NEW
PREFIX /A2OSX.BUILD PREFIX /A2OSX.BUILD
AUTO 4,1 AUTO 4,1
*--------------------------------------- *---------------------------------------
* Global Symbol Record: (8 bytes) * Global Symbol Record: (6+ bytes)
* 0 : Len (8) * 0 : Len
* 1 : Flags: * 1 : Flags:
* b7=0=pending,1=resolved * b7=0=pending,1=resolved
* b6=R/W (.SE) * b6=R/W (.SE)
* b2,b1,b0 : Size (in bytes) * b2,b1,b0 : Size (in bytes)
* 2-5 : 32 bits Value * 2-5 : 32 bits Value
* 6-7 : LSID (Local Symbols ID) * 6+ : Local Symbols.....
*--------------------------------------- *---------------------------------------
* Local Symbol Record: (7 bytes) * Local Symbol Record: (6 bytes)
* 0 : Len (8) * 0 : Local ID (1->255)
* 1 : Flags: * 1 : Flags:
* b7=0=pending,1=resolved * b7=0=pending,1=resolved
* 2-5 : 32 bits Value (PC) * 2-5 : 32 bits Value (PC)
* 6 : Local ID (1->255)
*--------------------------------------- *---------------------------------------
* Private Symbol Record: (9 bytes) * Private Symbol Record: (9 bytes)
* 0 : Len (8) * 0 : Len (8)
@ -31,36 +30,39 @@ SYM.Init >SYSCALL SListNew
>STA.G SYM.hGlobals >STA.G SYM.hGlobals
>LDYAI 256
>SYSCALL SListNew >SYSCALL GetMem.YA
bcs .9 bcs .9
>STA.G SYM.hLocals >STYA ZPGlobalBuf
txa
>STA.G SYM.hGlobalBuf
>LDYAI 256 >LDYAI 256
>SYSCALL GetMem.YA >SYSCALL GetMem.YA
bcs .9 bcs .9
>STYA ZPLocalBuf >STYA ZPLookupBuf
txa txa
>STA.G SYM.hLocalBuf >STA.G SYM.hLookupBuf
.9 rts .9 rts
*--------------------------------------- *---------------------------------------
SYM.Reset >STZ.G SYM.bGlobal SYM.Reset lda #0
>STA.G SYM.LocalIndex sta (ZPGlobalBuf)
rts 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 beq .2
>SYSCALL FreeMem.A >SYSCALL FreeMem.A
.2 >LDA.G SYM.hLocals .2 >LDA.G SYM.hGlobals
beq .3
>SYSCALL SListFree.A
.3 >LDA.G SYM.hGlobals
beq .8 beq .8
>SYSCALL SListFree.A >SYSCALL SListFree.A
@ -129,18 +131,44 @@ SYM.Dump stz ZPLinePtr
.8 clc .8 clc
rts rts
*--------------------------------------- *---------------------------------------
SYM.AddGlobalPC jsr SYM.PC2Global A=PC Size SYM.NewGlobal >LDYA ZPLinePtr
ora #SYMG.F.RESOLVED PC is always known >STYA SYM.GlobalPtr
*---------------------------------------
SYM.AddGlobal >STA.G SYM.Global+SYMG.F
lda #SYMG.SIZE-1 F+V+LSID jsr SYM.PC2Global A=PC Size
>STA.G SYM.Global+SYMG.LEN 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 >PUSHW ZPLinePtr
>PUSHEA.G SYM.Global >PUSHW ZPGlobalBuf
>SYSCALL SListAdd >SYSCALL SListAdd
bcs .9 bcs .9
@ -163,27 +191,20 @@ SYM.AddGlobal >STA.G SYM.Global+SYMG.F
*--------------------------------------- *---------------------------------------
SYM.LookupGlobal >PUSHB.G SYM.hGlobals SYM.LookupGlobal >PUSHB.G SYM.hGlobals
>PUSHW ZPLinePtr >PUSHW ZPLinePtr
>PUSHEA.G SYM.Lookup >PUSHW ZPLookupBuf
>SYSCALL SListLookup >SYSCALL SListLookup
bcs .9 bcs .9
adc ZPLinePtr adc ZPLinePtr
sta ZPLinePtr sta ZPLinePtr
bcc .1 bcc .8
inc ZPLinePtr+1 inc ZPLinePtr+1
clc clc
.1 tya .8
>STA.G SYM.GlobalID+1
txa
>STA.G SYM.GlobalID
.9 rts .9 rts
*--------------------------------------- *---------------------------------------
SYM.UpdateGlobalPC jsr SYM.PC2Global
bra SYM.UpdateGlobal
*---------------------------------------
SYM.UpdateGlobalAcc ldx #3 SYM.UpdateGlobalAcc ldx #3
ldy #SYM.Global+SYMG.V+3 ldy #SYM.Global+SYMG.V+3
@ -209,7 +230,7 @@ SYM.UpdateGlobal ora #SYMG.F.RESOLVED
>SYSCALL SListUpdateByID >SYSCALL SListUpdateByID
rts rts
*--------------------------------------- *---------------------------------------
SYMG.FlushGlobal clc SYMG.FlushGlobal clc
rts rts
*--------------------------------------- *---------------------------------------
SYM.PC2Global ldx #4 SYM.PC2Global ldx #4
@ -224,10 +245,10 @@ SYM.PC2Global ldx #4
ldx #4 ldx #4
ldy #SYM.Global+SYMG.V+3 ldy #SYMG.V+3
.2 pla .2 pla
sta (pData),y sta (ZPGlobalBuf),y
dey dey
dex dex
bne .2 bne .2
@ -235,30 +256,32 @@ SYM.PC2Global ldx #4
ldx #4 ldx #4
ldy #ASM.PC+3 ldy #ASM.PC+3
.3 lda (pData),y .3 lda (ZPGlobalBuf),y
bne .4 bne .4
dex dex
dey dey
bne .3 bne .3
.4 txa A=PC Size .4 txa
ora #SYMG.F.RESOLVED
ldy #SYMG.F
sta (ZPGlobalBuf),y
txa A=PC Size
rts rts
*--------------------------------------- *---------------------------------------
SYM.AddLocalPC tax Save ID SYM.AddLocal tax Save ID
>LDA.G SYM.LocalIndex lda (ZPGlobalBuf)
tay tay
clc clc
adc #6 adc #SYML.SIZE
bcs .9 bcs .9
txa Get Back ID txa Get Back ID
sta (ZPLocalBuf),y sta (ZPGlobalBuf),y
iny
lda #SYMG.F.RESOLVED
sta (ZPLocalBuf),y
iny iny
phy phy
@ -278,46 +301,15 @@ SYM.AddLocalPC tax Save ID
ply ply
.2 pla .2 pla
sta (ZPLocalBuf),y sta (ZPGlobalBuf),y
iny iny
dex dex
bne .2 bne .2
lda #0 lda #0
sta (ZPLocalBuf),y sta (ZPGlobalBuf),y
tya tya
>STA.G SYM.LocalIndex sta (ZPGlobalBuf)
* 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
* clc * clc
rts rts

View File

@ -14,29 +14,29 @@ ZPPtr2 .EQ ZPBIN+2
ZPPtr3 .EQ ZPBIN+4 ZPPtr3 .EQ ZPBIN+4
ZPLineBuf .EQ ZPBIN+6 ZPLineBuf .EQ ZPBIN+6
ZPLinePtr .EQ ZPBIN+8 ZPLinePtr .EQ ZPBIN+8
ZPLocalBuf .EQ ZPBIN+10 ZPGlobalBuf .EQ ZPBIN+10
ZPMacroBuf .EQ ZPBIN+12 ZPLookupBuf .EQ ZPBIN+12
ZPTmpBuf .EQ ZPBIN+14 ZPMacroBuf .EQ ZPBIN+14
ZPAMPtr .EQ ZPBIN+16 ZPTmpBuf .EQ ZPBIN+16
ZPRPtr .EQ ZPBIN+18 ZPAMPtr .EQ ZPBIN+18
ZPOpsPtr .EQ ZPBIN+20 ZPRPtr .EQ ZPBIN+20
ZPOpDefPtr .EQ ZPBIN+22 ZPOpsPtr .EQ ZPBIN+22
ZPOpDefPtr .EQ ZPBIN+24
*--------------------------------------- *---------------------------------------
SYMG.LEN .EQ 0 SYMG.LEN .EQ 0
SYMG.F .EQ 1 SYMG.F .EQ 1
SYMG.F.RESOLVED .EQ %10000000 SYMG.F.RESOLVED .EQ %10000000
SYMG.F.RW .EQ %01000000 SYMG.F.RW .EQ %01000000
SYMG.F.SIZE .EQ %00000111 SYMG.F.EQU .EQ %00100000
SYMG.F.SIZE .EQ %00000111
SYMG.V .EQ 2 SYMG.V .EQ 2
SYMG.LSID .EQ 6 *
SYMG.SIZE .EQ 8 SYMG.SIZE .EQ 6
*--------------------------------------- *---------------------------------------
SYML.LEN .EQ 0 SYML.ID .EQ 0
SYML.F .EQ 1 SYML.V .EQ 1
SYML.F.RESOLVED .EQ %10000000 *
SYML.V .EQ 2 SYML.SIZE .EQ 5
SYML.ID .EQ 6
SYML.SIZE .EQ 7
*--------------------------------------- *---------------------------------------
ASM.T.AM .EQ 0 ASM.T.AM .EQ 0
ASM.T.R .EQ 2 ASM.T.R .EQ 2
@ -80,7 +80,7 @@ CS.START cld
.DA CS.END-CS.START CS .DA CS.END-CS.START CS
.DA DS.END-DS.START DS .DA DS.END-DS.START DS
.DA #0 SS .DA #0 SS
.DA #24 ZP .DA #32 ZP
.DA 0 .DA 0
*-------------------------------------- *--------------------------------------
* Relocation Table * Relocation Table
@ -200,6 +200,8 @@ CS.INIT ldy #S.PS.ARGC
jsr MAC.Init jsr MAC.Init
bcs .9 bcs .9
jsr OUT.Init
>LDYAI 256 >LDYAI 256
>SYSCALL GetMem.YA >SYSCALL GetMem.YA
@ -231,7 +233,7 @@ CS.RUN >SYSCALL GetChar
bcs .11 no char bcs .11 no char
cmp #$03 Ctrl-C cmp #$03 Ctrl-C
beq .99 Abort.... beq .99 Abort....beq=CS
cmp #$13 Ctrl-S cmp #$13 Ctrl-S
bne .11 bne .11
@ -253,7 +255,7 @@ CS.RUN >SYSCALL GetChar
inc inc
>PUSHA >PUSHA
>LDYA L.MSG.PASS >LDYA L.MSG.PASS
>SYSCALL PrintF.YA jsr OUT.Print
ldy #SRC.hFILENAME ldy #SRC.hFILENAME
lda (pData),y lda (pData),y
@ -282,15 +284,15 @@ CS.RUN >SYSCALL GetChar
inc inc
sta (pData),y sta (pData),y
clc clc
rts .99 rts
.1 jsr SYM.Dump .1 jsr SYM.Dump
>PUSHW ZPLinePtr >PUSHW ZPLinePtr
>LDYA L.MSG.SUMMARY >LDYA L.MSG.SUMMARY
>SYSCALL PrintF.YA jsr OUT.Print
lda #0 End of assembly, exit with no error lda #0 End of assembly, exit with no error
.99 sec sec
rts rts
.2 jsr SRC.ParseLine .2 jsr SRC.ParseLine
@ -430,8 +432,9 @@ FIO.Stat .BS S.STAT
SRC.ACC.SIZE .BS 1 SRC.ACC.SIZE .BS 1
SRC.ACC .BS 4 SRC.ACC .BS 4
SRC.ACCTMP .BS 4 SRC.ARG.SIZE .BS 1
SRC.ARG .BS 4 SRC.ARG .BS 4
SRC.ACCTMP .BS 4
SRC.AM.StrBuf .BS 32 SRC.AM.StrBuf .BS 32
*-------------------------------------- *--------------------------------------
.DUMMY .DUMMY
@ -447,13 +450,13 @@ SRC.COUNT .BS 1
SRC.hFILES .BS SRC.IN.MAXDEPTH SRC.hFILES .BS SRC.IN.MAXDEPTH
SRC.hFILETYPES .BS SRC.IN.MAXDEPTH SRC.hFILETYPES .BS SRC.IN.MAXDEPTH
SRC.LINENUM .BS 2
SRC.AMID .BS 1
DST.hFILENAME .BS 1 DST.hFILENAME .BS 1
DST.hREFNUM .BS 1 DST.hREFNUM .BS 1
DST.hBUFFER .BS 1 DST.hBUFFER .BS 1
DST.hFILETYPE .BS 1 DST.hFILETYPE .BS 1
SRC.LINENUM .BS 2
ASM.T.hMem .BS 1
DIR.Word .BS 2 DIR.Word .BS 2
DIR.Byte .BS 1 DIR.Byte .BS 1
@ -463,6 +466,8 @@ EXP.Prefix .BS 1
EXP.Operator .BS 1 EXP.Operator .BS 1
ASM.T.hMem .BS 1
ASM.PASS .BS 1 ASM.PASS .BS 1
ASM.DO.StackPtr .BS 1 ASM.DO.StackPtr .BS 1
ASM.DO.Stack .BS SRC.DO.MAXDEPTH ASM.DO.Stack .BS SRC.DO.MAXDEPTH
@ -476,19 +481,14 @@ ASM.PC .BS 4
ASM.PC.PH .BS 4 ASM.PC.PH .BS 4
SYM.hGlobals .BS 1 SYM.hGlobals .BS 1
SYM.bGlobal .BS 1
SYM.GlobalPtr .BS 2
SYM.hGlobalBuf .BS 1
SYM.GlobalID .BS 2 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.LocalID .BS 2
SYM.Local .BS SYML.SIZE
SYM.Lookup .BS SYMG.SIZE
MAC.hMacros .BS 1 MAC.hMacros .BS 1
MAC.hBuf .BS 1 MAC.hBuf .BS 1
@ -497,8 +497,8 @@ MAC.bAdd .BS 1
OUT.PC .BS 4 OUT.PC .BS 4
OUT.Buf .BS 4 OUT.Buf .BS 4
OUT.bEquate .BS 1 OUT.bEquate .BS 1
OUT.LineCnt .BS 1
SRC.AMID .BS 1
DS.END .ED DS.END .ED
*--------------------------------------- *---------------------------------------
.DO DS.END-DS.START>$FF .DO DS.END-DS.START>$FF