mirror of
https://github.com/A2osX/A2osX.git
synced 2024-09-30 15:57:29 +00:00
Kernel 0.94
This commit is contained in:
parent
a32778bff2
commit
30bf312f81
Binary file not shown.
@ -78,43 +78,56 @@ DIR.BS jsr SRC.GetNextCharNB
|
||||
|
||||
jsr EXP.Eval
|
||||
bcs .9
|
||||
|
||||
lda SRC.ACC+3
|
||||
ora SRC.ACC+2
|
||||
bne .99
|
||||
|
||||
lda SRC.ACC
|
||||
eor #$ff
|
||||
sta DIR.Word
|
||||
|
||||
lda SRC.ACC+1
|
||||
eor #$ff
|
||||
sta DIR.Word+1
|
||||
|
||||
stz DIR.Byte
|
||||
jsr SRC.GetNextChar
|
||||
bcs .1
|
||||
cmp #' '
|
||||
|
||||
cmp #C.SPACE
|
||||
beq .1
|
||||
|
||||
cmp #','
|
||||
bne .98
|
||||
|
||||
jsr EXP.Eval
|
||||
bcs .9
|
||||
lda SRC.ACC+3
|
||||
ora SRC.ACC+2
|
||||
ora SRC.ACC+1
|
||||
bne .99
|
||||
|
||||
lda SRC.ACC
|
||||
sta DIR.Byte
|
||||
|
||||
.1 inc DIR.Word
|
||||
bne .2
|
||||
inc DIR.Word+1
|
||||
beq .8
|
||||
|
||||
.2 lda DIR.Byte
|
||||
jsr OUT.EmitByte
|
||||
bcc .1
|
||||
rts
|
||||
|
||||
.8 clc
|
||||
.9 rts
|
||||
|
||||
.99 lda #E.RANGE
|
||||
sec
|
||||
rts
|
||||
|
||||
.98 lda #E.SYNTAX.ERROR
|
||||
sec
|
||||
rts
|
||||
@ -252,37 +265,59 @@ DIR.EQ clc
|
||||
|
||||
>LDA.G SYM.bInGlobal
|
||||
bpl .99
|
||||
|
||||
jsr SRC.GetNextCharNB
|
||||
bcs .99
|
||||
|
||||
lda #$ff
|
||||
>STA.G OUT.bEquate
|
||||
>LDA.G ASM.PASS
|
||||
bne .2
|
||||
|
||||
jsr EXP.Eval PASS#1
|
||||
bcs .9
|
||||
|
||||
jsr SYM.Acc2Global
|
||||
jmp SYM.StoreGlobal
|
||||
|
||||
.2 lda (ZPSymbolBuf) PASS#2
|
||||
and #SYMG.F.FWREF
|
||||
beq .3
|
||||
|
||||
jsr EXP.Eval
|
||||
bcs .9
|
||||
jmp SYM.UpdateGlobal
|
||||
.3 ldy #SYMG-1 copy back value for OUT.Print
|
||||
|
||||
.4 lda (ZPSymbolBuf),y
|
||||
sta SRC.ACC.F,y
|
||||
>LDA.G ASM.PASS
|
||||
bne .2
|
||||
|
||||
>LDA.G SYM.GlobalPtr PASS#1
|
||||
|
||||
cmp #SYMG
|
||||
beq .12
|
||||
|
||||
tay
|
||||
ldx #3 we are in local/private
|
||||
|
||||
.11 lda SRC.ACC,x update value
|
||||
dey
|
||||
bpl .4
|
||||
sta (ZPSymbolBuf),y
|
||||
dex
|
||||
bpl .11
|
||||
|
||||
clc
|
||||
rts
|
||||
|
||||
.12 jsr SYM.Acc2Global global, update and close
|
||||
jmp SYM.StoreGlobal
|
||||
*---------------------------------------
|
||||
.2 >LDA.G SYM.GlobalPtr PASS#2
|
||||
|
||||
cmp #SYMG
|
||||
beq .22
|
||||
|
||||
tay
|
||||
ldx #3 we are in local/private
|
||||
|
||||
.21 lda SRC.ACC,x update value
|
||||
dey
|
||||
sta (ZPSymbolBuf),y
|
||||
dex
|
||||
bpl .21
|
||||
|
||||
clc
|
||||
rts
|
||||
|
||||
.22 jsr SYM.Acc2Global global, update and close
|
||||
jmp SYM.UpdateGlobal
|
||||
|
||||
.99 lda #E.SYNTAX.ERROR
|
||||
sec
|
||||
.9 rts
|
||||
@ -384,15 +419,19 @@ DIR.LI jsr SRC.GetNextChar
|
||||
|
||||
.8 clc
|
||||
rts
|
||||
|
||||
DIR.LI.ON ldy #ASM.LI.ON
|
||||
sec
|
||||
bra DIR.LI.APPLY
|
||||
|
||||
DIR.LI.OFF ldy #ASM.LI.ON
|
||||
clc
|
||||
bra DIR.LI.APPLY
|
||||
|
||||
DIR.LI.CON ldy #ASM.LI.CON
|
||||
sec
|
||||
bra DIR.LI.APPLY
|
||||
|
||||
DIR.LI.COFF ldy #ASM.LI.CON
|
||||
clc
|
||||
bra DIR.LI.APPLY
|
||||
@ -400,12 +439,15 @@ DIR.LI.COFF ldy #ASM.LI.CON
|
||||
DIR.LI.MON ldy #ASM.LI.MON
|
||||
sec
|
||||
bra DIR.LI.APPLY
|
||||
|
||||
DIR.LI.MOFF ldy #ASM.LI.MON
|
||||
clc
|
||||
bra DIR.LI.APPLY
|
||||
|
||||
DIR.LI.XON ldy #ASM.LI.XON
|
||||
sec
|
||||
bra DIR.LI.APPLY
|
||||
|
||||
DIR.LI.XOFF ldy #ASM.LI.XON
|
||||
clc
|
||||
DIR.LI.APPLY lda #0
|
||||
@ -451,16 +493,20 @@ DIR.OP.SYNERR lda #E.SYNTAX.ERROR
|
||||
*---------------------------------------
|
||||
DIR.OR jsr SRC.GetNextCharNB
|
||||
bcs DIR.OP.SYNERR
|
||||
|
||||
jsr EXP.Eval
|
||||
bcs .9
|
||||
|
||||
ldy #ASM.PC
|
||||
ldx #0
|
||||
|
||||
.1 lda SRC.ACC,x
|
||||
sta (pData),y
|
||||
inx
|
||||
iny
|
||||
cpx #4
|
||||
bne .1
|
||||
|
||||
clc
|
||||
.9 rts
|
||||
*---------------------------------------
|
||||
@ -484,8 +530,38 @@ DIR.PH >LDA.G ASM.PH.ON
|
||||
DIR.TA clc
|
||||
rts
|
||||
*---------------------------------------
|
||||
DIR.TF clc
|
||||
rts
|
||||
DIR.TF >LDA.G ASM.PASS If Pass#1, ignore
|
||||
beq .8
|
||||
|
||||
>LDA.G ArgDstFile
|
||||
beq .1
|
||||
|
||||
>SYSCALL ArgV
|
||||
bra .2
|
||||
|
||||
.1 jsr SRC.GetNextCharNB
|
||||
bcs DIR.OP.SYNERR
|
||||
|
||||
>LDYA ZPLinePtr
|
||||
|
||||
.2 >PUSHYA
|
||||
>PUSHWI 0 Allocate
|
||||
>SYSCALL RealPath
|
||||
bcs .9
|
||||
txa
|
||||
>STA.G DST.hFILENAME
|
||||
>SYSCALL getmemptr
|
||||
>PUSHYA
|
||||
>PUSHBI O.WRONLY+O.CREATE
|
||||
>PUSHBI S.FI.T.BIN
|
||||
>PUSHWZ
|
||||
>SYSCALL FOpen
|
||||
bcs .9
|
||||
|
||||
>STA.G DST.hREFNUM
|
||||
|
||||
.8 clc
|
||||
.9 rts
|
||||
*---------------------------------------
|
||||
DIR.TI clc
|
||||
rts
|
||||
|
@ -25,28 +25,39 @@ OUT.Reset ldx #4
|
||||
rts
|
||||
*---------------------------------------
|
||||
OUT.PrintLineOn
|
||||
clc
|
||||
rts
|
||||
>LDA.G bListAll
|
||||
bmi .8
|
||||
|
||||
>LDA.G ASM.LI.ON
|
||||
bpl .9
|
||||
|
||||
>LDA.G ASM.MA.ON MACRO Mode ?
|
||||
bpl .1
|
||||
|
||||
>LDA.G ASM.LI.MON
|
||||
bpl .9
|
||||
bmi .8
|
||||
clc
|
||||
rts
|
||||
|
||||
.1 >LDA.G ASM.DO.StackPtr within a DO/ELSE ?
|
||||
beq .2
|
||||
|
||||
clc
|
||||
adc #ASM.DO.Stack-1
|
||||
tay
|
||||
lda (pData),y TRUE ?
|
||||
bne .8 yes, print always
|
||||
|
||||
>LDA.G ASM.LI.CON FALSE, check CON flag...
|
||||
bpl .9
|
||||
bmi .8
|
||||
clc
|
||||
rts
|
||||
|
||||
.2
|
||||
|
||||
.8 clc
|
||||
rts
|
||||
|
||||
.9 sec
|
||||
rts
|
||||
*---------------------------------------
|
||||
@ -77,6 +88,15 @@ OUT.PrintLineErr
|
||||
>SYSCALL PutChar
|
||||
bcs .9
|
||||
|
||||
jsr OUT.PrintCR
|
||||
|
||||
>PUSHW L.MSG.PASS
|
||||
>LDA.G ASM.PASS
|
||||
inc
|
||||
>PUSHA
|
||||
>PUSHBI 1
|
||||
jsr OUT.Print
|
||||
|
||||
jmp OUT.PrintCR
|
||||
|
||||
.9 rts
|
||||
@ -208,16 +228,31 @@ OUT.EmitByte phy
|
||||
phx
|
||||
pha
|
||||
|
||||
>LDA.G OUT.Buf
|
||||
>LDA.G ASM.PASS
|
||||
beq .10
|
||||
|
||||
pla
|
||||
pha
|
||||
>PUSHA
|
||||
>LDA.G DST.hREFNUM
|
||||
>SYSCALL fputc
|
||||
plx
|
||||
bcs .99
|
||||
phx
|
||||
|
||||
.10 >LDA.G OUT.Buf
|
||||
cmp #3
|
||||
bne .2
|
||||
|
||||
jsr OUT.PrintLineOn
|
||||
bcs .1
|
||||
|
||||
>LDA.G ASM.LI.XON
|
||||
bpl .1
|
||||
|
||||
jsr OUT.PrintLineOutBuf
|
||||
jsr OUT.PrintCR
|
||||
|
||||
.1 jsr OUT.Reset
|
||||
lda #0
|
||||
ldy #OUT.Buf
|
||||
@ -228,6 +263,7 @@ OUT.EmitByte phy
|
||||
tay
|
||||
pla
|
||||
sta (pData),y
|
||||
|
||||
.8 >INC.G ASM.PC
|
||||
bne .80
|
||||
>INC.G ASM.PC+1
|
||||
@ -235,9 +271,10 @@ OUT.EmitByte phy
|
||||
>INC.G ASM.PC+2
|
||||
bne .80
|
||||
>INC.G ASM.PC+3
|
||||
.80 plx
|
||||
|
||||
.80 clc
|
||||
.99 plx
|
||||
ply
|
||||
clc
|
||||
rts
|
||||
*---------------------------------------
|
||||
OUT.PrintCR >PUSHW L.MSG.CRLF
|
||||
|
@ -31,29 +31,329 @@ SYM.Reset >STZ.G SYM.bInGlobal
|
||||
rts
|
||||
*---------------------------------------
|
||||
SYM.Quit >LDA.G SYM.hGlobalBuf
|
||||
beq .3
|
||||
beq .1
|
||||
|
||||
>SYSCALL FreeMem
|
||||
|
||||
.3 >LDA.G SYM.hList
|
||||
beq SYM.Quit.8
|
||||
.1 >LDA.G SYM.hList
|
||||
beq .8
|
||||
|
||||
>PUSHA
|
||||
>SYSCALL SListFree
|
||||
|
||||
SYM.Quit.8 clc
|
||||
.8 rts
|
||||
*---------------------------------------
|
||||
SYM.NewOrGetGlobal
|
||||
>LDA.G ASM.PASS
|
||||
bne SYM.GetGlobal
|
||||
|
||||
SYM.NewGlobal jsr SYM.StoreGlobal
|
||||
bcs .99
|
||||
|
||||
>PUSHB.G SYM.hList
|
||||
>PUSHW ZPLinePtr Pass #1: try to add global...
|
||||
>SYSCALL SListNewKey
|
||||
bcs .9 Already Defined
|
||||
|
||||
>STYA.G SYM.GlobalID
|
||||
txa
|
||||
adc ZPLinePtr
|
||||
sta ZPLinePtr
|
||||
bcc .1
|
||||
inc ZPLinePtr+1
|
||||
|
||||
.1 jsr SYM.PC2Acc
|
||||
jsr SYM.Acc2Global
|
||||
|
||||
lda #SYMG
|
||||
>STA.G SYM.GlobalPtr
|
||||
tay
|
||||
lda #0
|
||||
sta (ZPSymbolBuf),y
|
||||
|
||||
lda #$ff
|
||||
>STA.G SYM.bInGlobal
|
||||
|
||||
clc
|
||||
rts
|
||||
|
||||
.9 lda #E.SYMBOL.REDEF
|
||||
sec
|
||||
.99 rts
|
||||
*---------------------------------------
|
||||
SYM.GetGlobal >PUSHB.G SYM.hList
|
||||
>PUSHW ZPLinePtr Pass #2: should be already defined...
|
||||
>SYSCALL SListLookup
|
||||
bcs .9
|
||||
>STYA.G SYM.GlobalID
|
||||
|
||||
txa
|
||||
adc ZPLinePtr
|
||||
sta ZPLinePtr
|
||||
bcc .1
|
||||
inc ZPLinePtr+1
|
||||
|
||||
.1 >PUSHB.G SYM.hList
|
||||
>PUSHW.G SYM.GlobalID
|
||||
>PUSHW ZPSymbolBuf
|
||||
>PUSHWI $ffff all
|
||||
>PUSHWZ from Start
|
||||
>SYSCALL SListGetData
|
||||
bcs .99
|
||||
|
||||
lda #$ff
|
||||
>STA.G SYM.bInGlobal
|
||||
* clc
|
||||
rts
|
||||
|
||||
.9 lda #E.UNDEF.SYMBOL
|
||||
sec
|
||||
.99 rts
|
||||
*---------------------------------------
|
||||
SYM.LookupGlobal
|
||||
>PUSHB.G SYM.hList
|
||||
>PUSHW ZPLinePtr
|
||||
>SYSCALL SListLookup
|
||||
bcs .9
|
||||
|
||||
>STYA ZPPtr1
|
||||
txa
|
||||
adc ZPLinePtr
|
||||
sta ZPLinePtr
|
||||
bcc .1
|
||||
inc ZPLinePtr+1
|
||||
|
||||
.1 >LDA.G SYM.GlobalID
|
||||
cmp ZPPtr1
|
||||
bne .3
|
||||
|
||||
iny SYM.GlobalID+1
|
||||
lda (pData),y
|
||||
cmp ZPPtr1+1
|
||||
bne .3
|
||||
|
||||
ldy #SYMG-1
|
||||
.2 lda (ZPSymbolBuf),y
|
||||
sta SRC.ACC.F,y
|
||||
dey
|
||||
bpl .2
|
||||
|
||||
clc
|
||||
rts
|
||||
|
||||
.3 >PUSHB.G SYM.hList
|
||||
>PUSHW ZPPtr1
|
||||
>PUSHW L.SRC.ACC.F
|
||||
>PUSHWI SYMG Get only Global value
|
||||
>PUSHWZ Start
|
||||
>SYSCALL SListGetData
|
||||
rts
|
||||
|
||||
.9 lda #E.UNDEF.SYMBOL
|
||||
sec
|
||||
rts
|
||||
*---------------------------------------
|
||||
SYM.StoreGlobal >LDA.G ASM.PASS
|
||||
bne .8
|
||||
|
||||
>LDA.G SYM.bInGlobal
|
||||
bpl .8
|
||||
|
||||
>PUSHB.G SYM.hList
|
||||
>PUSHW.G SYM.GlobalID
|
||||
>PUSHW ZPSymbolBuf
|
||||
|
||||
>LDA.G SYM.GlobalPtr
|
||||
tay
|
||||
lda #0
|
||||
cpy #SYMG
|
||||
beq .1
|
||||
|
||||
iny Add 1 for \0 after locals/privates
|
||||
bne .1
|
||||
inc
|
||||
|
||||
.1 >PUSHYA
|
||||
|
||||
>SYSCALL SListAddData
|
||||
bcs .9
|
||||
|
||||
>STZ.G SYM.bInGlobal
|
||||
>STA.G MAC.CtxID
|
||||
|
||||
.8 clc
|
||||
.9 rts
|
||||
*---------------------------------------
|
||||
SYM.UpdateGlobal
|
||||
>PUSHB.G SYM.hList
|
||||
>PUSHW.G SYM.GlobalID
|
||||
>PUSHW ZPSymbolBuf
|
||||
|
||||
>LDA.G SYM.GlobalPtr
|
||||
tay
|
||||
lda #0
|
||||
cpy #SYMG
|
||||
beq .1
|
||||
|
||||
iny Add 1 for \0 after locals/privates
|
||||
bne .1
|
||||
inc
|
||||
|
||||
.1 >PUSHYA
|
||||
|
||||
>SYSCALL SListSetData
|
||||
rts
|
||||
*---------------------------------------
|
||||
SYM.PC2Acc ldy #ASM.PC+3
|
||||
ldx #3
|
||||
|
||||
.1 lda (pData),y
|
||||
sta SRC.ACC,x
|
||||
dey
|
||||
dex
|
||||
bpl .1
|
||||
|
||||
lda #2
|
||||
sta SRC.ACC.SIZE
|
||||
stz SRC.ACC.F
|
||||
rts
|
||||
*---------------------------------------
|
||||
SYM.Acc2Global ldy #SYMG-1
|
||||
|
||||
.2 lda SRC.ACC.F,y
|
||||
sta (ZPSymbolBuf),y
|
||||
dey
|
||||
bpl .2
|
||||
|
||||
rts
|
||||
*---------------------------------------
|
||||
SYM.NewLocalA tax Save Local ID
|
||||
|
||||
>LDA.G SYM.bInGlobal not in a global label
|
||||
bpl .91
|
||||
|
||||
>LDA.G ASM.PASS Pass #2: should be already defined...
|
||||
bne .8
|
||||
|
||||
jsr SYM.GetLocalX Pass #1; try to add
|
||||
bcc .9 Already Defined
|
||||
|
||||
>LDA.G SYM.GlobalPtr
|
||||
cmp #252 6*42
|
||||
beq .90
|
||||
|
||||
ldy #ASM.PC+4
|
||||
|
||||
.1 dey
|
||||
lda (pData),y
|
||||
pha
|
||||
cpy #ASM.PC
|
||||
bne .1
|
||||
|
||||
>LDA.G MAC.CtxID Get Macro Context ID
|
||||
|
||||
pha
|
||||
|
||||
>LDA.G SYM.GlobalPtr
|
||||
tay
|
||||
txa Get Back ID
|
||||
sta (ZPSymbolBuf),y
|
||||
|
||||
ldx #5 MAC ID + PC (4)
|
||||
|
||||
.2 pla
|
||||
iny
|
||||
sta (ZPSymbolBuf),y
|
||||
dex
|
||||
bne .2
|
||||
|
||||
iny
|
||||
lda #0
|
||||
sta (ZPSymbolBuf),y ending \0
|
||||
tya
|
||||
|
||||
>STA.G SYM.GlobalPtr
|
||||
|
||||
lda (ZPSymbolBuf)
|
||||
ora #SYMG.F.LOCALS
|
||||
sta (ZPSymbolBuf)
|
||||
|
||||
.8 clc
|
||||
rts
|
||||
|
||||
.91 lda #E.INV.LABEL
|
||||
sec
|
||||
rts
|
||||
|
||||
.90 lda #E.TOO.MANY.LOCAL
|
||||
sec
|
||||
rts
|
||||
|
||||
.9 lda #E.SYMBOL.REDEF
|
||||
sec
|
||||
rts
|
||||
*---------------------------------------
|
||||
SYM.GetLocalX lda (ZPSymbolBuf)
|
||||
and #SYMG.F.LOCALS
|
||||
beq .9
|
||||
|
||||
ldy #SYMG
|
||||
|
||||
.1 lda (ZPSymbolBuf),y
|
||||
beq .9
|
||||
|
||||
txa
|
||||
cmp (ZPSymbolBuf),y
|
||||
bne .4
|
||||
|
||||
phy
|
||||
>LDA.G MAC.CtxID
|
||||
ply
|
||||
iny
|
||||
cmp (ZPSymbolBuf),y
|
||||
bne .3
|
||||
|
||||
ldx #0
|
||||
|
||||
.2 iny
|
||||
lda (ZPSymbolBuf),y
|
||||
sta SRC.ACC,x
|
||||
inx
|
||||
cpx #4
|
||||
|
||||
bne .2
|
||||
|
||||
lda #2
|
||||
sta SRC.ACC.SIZE
|
||||
clc
|
||||
rts
|
||||
|
||||
.3 dey
|
||||
.4 tya
|
||||
clc
|
||||
adc #SYML
|
||||
tay
|
||||
bra .1
|
||||
|
||||
.9 lda #E.UNDEF.SYMBOL
|
||||
sec
|
||||
rts
|
||||
*---------------------------------------
|
||||
SYM.Dump.End >PUSHW L.MSG.SUMMARY
|
||||
>PUSHW ZPPtr2
|
||||
>PUSHBI 2
|
||||
jmp OUT.Print
|
||||
|
||||
SYM.Dump.8 clc
|
||||
rts
|
||||
*---------------------------------------
|
||||
SYM.Dump >LDA.G ASM.LI.ON
|
||||
bpl SYM.Quit.8
|
||||
SYM.Dump >LDA.G bListAll
|
||||
bmi .10
|
||||
|
||||
>LDYA L.MSG.SYMBOLS
|
||||
>LDA.G ASM.LI.ON
|
||||
bpl SYM.Dump.8
|
||||
|
||||
.10 >LDYA L.MSG.SYMBOLS
|
||||
>SYSCALL puts
|
||||
|
||||
stz ZPPtr2
|
||||
@ -184,296 +484,6 @@ SYM.Dump.PushValueY
|
||||
|
||||
rts
|
||||
*---------------------------------------
|
||||
SYM.NewOrGetGlobal
|
||||
>LDA.G ASM.PASS
|
||||
bne SYM.GetGlobal
|
||||
|
||||
SYM.NewGlobal jsr SYM.StoreGlobal
|
||||
bcs .99
|
||||
|
||||
>PUSHB.G SYM.hList
|
||||
>PUSHW ZPLinePtr Pass #1: try to add global...
|
||||
>SYSCALL SListNewKey
|
||||
bcs .9 Already Defined
|
||||
|
||||
>STYA.G SYM.GlobalID
|
||||
txa
|
||||
adc ZPLinePtr
|
||||
sta ZPLinePtr
|
||||
bcc .1
|
||||
inc ZPLinePtr+1
|
||||
|
||||
.1 jsr SYM.PC2Acc
|
||||
jsr SYM.Acc2Global
|
||||
|
||||
lda #SYMG
|
||||
>STA.G SYM.GlobalPtr
|
||||
tay
|
||||
lda #0
|
||||
sta (ZPSymbolBuf),y
|
||||
|
||||
lda #$ff
|
||||
>STA.G SYM.bInGlobal
|
||||
|
||||
clc
|
||||
rts
|
||||
|
||||
.9 lda #E.SYMBOL.REDEF
|
||||
sec
|
||||
.99 rts
|
||||
*---------------------------------------
|
||||
SYM.GetGlobal >PUSHB.G SYM.hList
|
||||
>PUSHW ZPLinePtr Pass #2: should be already defined...
|
||||
>SYSCALL SListLookup
|
||||
bcs .9
|
||||
>STYA.G SYM.GlobalID
|
||||
|
||||
txa
|
||||
adc ZPLinePtr
|
||||
sta ZPLinePtr
|
||||
bcc .1
|
||||
inc ZPLinePtr+1
|
||||
|
||||
.1 >PUSHB.G SYM.hList
|
||||
>PUSHW.G SYM.GlobalID
|
||||
>PUSHW ZPSymbolBuf
|
||||
>PUSHWI $ffff all
|
||||
>PUSHWZ from Start
|
||||
>SYSCALL SListGetData
|
||||
bcs .99
|
||||
|
||||
lda #$ff
|
||||
>STA.G SYM.bInGlobal
|
||||
* clc
|
||||
rts
|
||||
|
||||
.9 lda #E.UNDEF.SYMBOL
|
||||
sec
|
||||
.99 rts
|
||||
*---------------------------------------
|
||||
SYM.LookupGlobal
|
||||
>PUSHB.G SYM.hList
|
||||
>PUSHW ZPLinePtr
|
||||
>SYSCALL SListLookup
|
||||
bcs .9
|
||||
|
||||
>STYA ZPPtr1
|
||||
txa
|
||||
adc ZPLinePtr
|
||||
sta ZPLinePtr
|
||||
bcc .1
|
||||
inc ZPLinePtr+1
|
||||
|
||||
.1 >LDA.G SYM.GlobalID
|
||||
cmp ZPPtr1
|
||||
bne .3
|
||||
|
||||
iny SYM.GlobalID+1
|
||||
lda (pData),y
|
||||
cmp ZPPtr1+1
|
||||
bne .3
|
||||
|
||||
ldy #SYMG-1
|
||||
.2 lda (ZPSymbolBuf),y
|
||||
sta SRC.ACC.F,y
|
||||
dey
|
||||
bpl .2
|
||||
|
||||
clc
|
||||
rts
|
||||
|
||||
.3 >PUSHB.G SYM.hList
|
||||
>PUSHW ZPPtr1
|
||||
>PUSHW L.SRC.ACC.F
|
||||
>PUSHWI SYMG Get only Global value
|
||||
>PUSHWZ Start
|
||||
>SYSCALL SListGetData
|
||||
rts
|
||||
|
||||
.9 lda #E.UNDEF.SYMBOL
|
||||
sec
|
||||
rts
|
||||
*---------------------------------------
|
||||
SYM.StoreGlobal >LDA.G ASM.PASS
|
||||
bne .8
|
||||
|
||||
>LDA.G SYM.bInGlobal
|
||||
bpl .8
|
||||
|
||||
>PUSHB.G SYM.hList
|
||||
>PUSHW.G SYM.GlobalID
|
||||
>PUSHW ZPSymbolBuf
|
||||
|
||||
>LDA.G SYM.GlobalPtr
|
||||
tay
|
||||
lda #0
|
||||
cpy #SYMG
|
||||
beq .1
|
||||
|
||||
lda (ZPSymbolBuf)
|
||||
ora #SYMG.F.LOCALS
|
||||
sta (ZPSymbolBuf)
|
||||
|
||||
lda #0
|
||||
sta (ZPSymbolBuf),y
|
||||
iny
|
||||
bne .1
|
||||
inc
|
||||
|
||||
.1 >PUSHYA
|
||||
|
||||
>SYSCALL SListAddData
|
||||
bcs .9
|
||||
|
||||
>STZ.G SYM.bInGlobal
|
||||
>STA.G MAC.CtxID
|
||||
|
||||
.8 clc
|
||||
.9 rts
|
||||
*---------------------------------------
|
||||
SYM.UpdateGlobal
|
||||
>PUSHB.G SYM.hList
|
||||
>PUSHW.G SYM.GlobalID
|
||||
>PUSHW L.SRC.ACC.F
|
||||
>PUSHWI SYMG
|
||||
>SYSCALL SListSetData
|
||||
rts
|
||||
*---------------------------------------
|
||||
SYM.PC2Acc ldy #ASM.PC+3
|
||||
ldx #3
|
||||
|
||||
.1 lda (pData),y
|
||||
sta SRC.ACC,x
|
||||
dey
|
||||
dex
|
||||
bpl .1
|
||||
|
||||
lda #2
|
||||
sta SRC.ACC.SIZE
|
||||
stz SRC.ACC.F
|
||||
rts
|
||||
*---------------------------------------
|
||||
SYM.Acc2Global ldy #SYMG-1
|
||||
|
||||
.2 lda SRC.ACC.F,y
|
||||
sta (ZPSymbolBuf),y
|
||||
dey
|
||||
bpl .2
|
||||
|
||||
rts
|
||||
*---------------------------------------
|
||||
SYM.NewLocalA tax Save Local ID
|
||||
|
||||
>LDA.G SYM.bInGlobal not in a global label
|
||||
bpl .91
|
||||
|
||||
>LDA.G ASM.PASS Pass #2: should be already defined...
|
||||
bne .8
|
||||
|
||||
jsr SYM.GetLocalX Pass #1; try to add
|
||||
bcc .9 Already Defined
|
||||
|
||||
>LDA.G SYM.GlobalPtr
|
||||
cmp #252 6*42
|
||||
beq .90
|
||||
|
||||
ldy #ASM.PC+4
|
||||
|
||||
.1 dey
|
||||
lda (pData),y
|
||||
pha
|
||||
cpy #ASM.PC
|
||||
bne .1
|
||||
|
||||
>LDA.G MAC.CtxID Get Macro Context ID
|
||||
|
||||
.11 pha
|
||||
|
||||
>LDA.G SYM.GlobalPtr
|
||||
tay
|
||||
txa Get Back ID
|
||||
sta (ZPSymbolBuf),y
|
||||
|
||||
ldx #5 MAC ID + PC (4)
|
||||
|
||||
.2 pla
|
||||
iny
|
||||
sta (ZPSymbolBuf),y
|
||||
dex
|
||||
bne .2
|
||||
|
||||
iny
|
||||
lda #0
|
||||
sta (ZPSymbolBuf),y
|
||||
tya
|
||||
|
||||
>STA.G SYM.GlobalPtr
|
||||
|
||||
lda (ZPSymbolBuf)
|
||||
ora #SYMG.F.LOCALS
|
||||
sta (ZPSymbolBuf)
|
||||
|
||||
.8 clc
|
||||
rts
|
||||
|
||||
.91 lda #E.INV.LABEL
|
||||
sec
|
||||
rts
|
||||
|
||||
.90 lda #E.TOO.MANY.LOCAL
|
||||
sec
|
||||
rts
|
||||
|
||||
.9 lda #E.SYMBOL.REDEF
|
||||
sec
|
||||
rts
|
||||
*---------------------------------------
|
||||
SYM.GetLocalX lda (ZPSymbolBuf)
|
||||
and #SYMG.F.LOCALS
|
||||
beq .9
|
||||
|
||||
ldy #SYMG
|
||||
|
||||
.1 lda (ZPSymbolBuf),y
|
||||
beq .9
|
||||
|
||||
txa
|
||||
cmp (ZPSymbolBuf),y
|
||||
bne .4
|
||||
|
||||
phy
|
||||
>LDA.G MAC.CtxID
|
||||
ply
|
||||
iny
|
||||
cmp (ZPSymbolBuf),y
|
||||
bne .3
|
||||
|
||||
ldx #0
|
||||
|
||||
.2 iny
|
||||
lda (ZPSymbolBuf),y
|
||||
sta SRC.ACC,x
|
||||
inx
|
||||
cpx #4
|
||||
|
||||
bne .2
|
||||
|
||||
lda #2
|
||||
sta SRC.ACC.SIZE
|
||||
clc
|
||||
rts
|
||||
|
||||
.3 dey
|
||||
.4 tya
|
||||
clc
|
||||
adc #SYML
|
||||
tay
|
||||
bra .1
|
||||
|
||||
.9 lda #E.UNDEF.SYMBOL
|
||||
sec
|
||||
rts
|
||||
*---------------------------------------
|
||||
MAN
|
||||
SAVE USR/SRC/BIN/ASM.S.SYM
|
||||
LOAD USR/SRC/BIN/ASM.S
|
||||
|
@ -45,12 +45,12 @@ SYMG.F.FWREF .EQ %10000000
|
||||
SYMG.F.RW .EQ %01000000
|
||||
SYMG.F.LOCALS .EQ %00100000
|
||||
SYMG.SIZE .EQ 1 1,2,3,4
|
||||
SYMG.V .EQ 2
|
||||
SYMG.V .EQ 2 DWORD
|
||||
*
|
||||
SYMG .EQ 6 DWORD
|
||||
SYMG .EQ 6
|
||||
*---------------------------------------
|
||||
SYML.ID .EQ 0 1..255
|
||||
SYML.MacroID .EQ 1
|
||||
SYML.CtxID .EQ 1 0 if local, !0 if private
|
||||
SYML.V .EQ 2 DWORD
|
||||
*
|
||||
SYML .EQ 6
|
||||
@ -209,11 +209,7 @@ J.EXP.OP .DA EXP.OP.EOR ^!|&<=>+-*/
|
||||
.DA EXP.OP.DIV
|
||||
.DA 0
|
||||
*---------------------------------------
|
||||
CS.INIT ldy #S.PS.ARGC
|
||||
lda (pPs),y
|
||||
beq .99
|
||||
|
||||
jsr CS.RUN.ARGS
|
||||
CS.INIT jsr CS.RUN.ARGS
|
||||
bcs .99
|
||||
|
||||
jsr FIO.Init
|
||||
@ -230,25 +226,67 @@ CS.INIT ldy #S.PS.ARGC
|
||||
* clc
|
||||
rts
|
||||
|
||||
.99 >PUSHW L.MSG.HELP
|
||||
.99 pha
|
||||
>PUSHW L.MSG.HELP
|
||||
>PUSHBI 0
|
||||
>SYSCALL printf
|
||||
lda #E.INV.ARGS
|
||||
pla
|
||||
sec
|
||||
.9 rts
|
||||
*--------------------------------------
|
||||
CS.RUN.ARGS
|
||||
CS.RUN.ARGS ldy #S.PS.ARGC
|
||||
lda (pPs),y
|
||||
beq .90
|
||||
|
||||
lda #1
|
||||
.1 inc ZPPtr1
|
||||
|
||||
lda ZPPtr1
|
||||
>SYSCALL ArgV
|
||||
>PUSHYA
|
||||
bcs .8
|
||||
>STYA ZPPtr2
|
||||
|
||||
lda (ZPPtr2)
|
||||
cmp #'-'
|
||||
beq .2
|
||||
|
||||
>PUSHW ZPPtr2
|
||||
>PUSHWI 0 Allocate
|
||||
>SYSCALL RealPath
|
||||
bcs .99
|
||||
txa
|
||||
>STA.G SRC.hFILENAME
|
||||
bra .1
|
||||
|
||||
.8 clc
|
||||
.9 rts
|
||||
.2 ldy #1
|
||||
lda (ZPPtr2),y
|
||||
cmp #'L'
|
||||
bne .3
|
||||
|
||||
lda #$ff
|
||||
>STA.G bListAll
|
||||
bra .1
|
||||
|
||||
.3 cmp #'T'
|
||||
bne .90
|
||||
|
||||
inc ZPPtr1
|
||||
lda ZPPtr1
|
||||
>SYSCALL ArgV
|
||||
bcs .90
|
||||
|
||||
lda ZPPtr1
|
||||
>STA.G ArgDstFile
|
||||
bra .1
|
||||
|
||||
.8 >LDA.G SRC.hFILENAME
|
||||
beq .90
|
||||
|
||||
clc
|
||||
rts
|
||||
|
||||
.90 lda #E.INV.ARGS
|
||||
sec
|
||||
.99 rts
|
||||
*--------------------------------------
|
||||
CS.RUN ldy #S.PS.hStdIn
|
||||
lda (pPS),y
|
||||
@ -328,11 +366,13 @@ CS.RUN ldy #S.PS.hStdIn
|
||||
bne .8 no continue back to previous file
|
||||
|
||||
jsr SYM.StoreGlobal Make sure last Global flushed
|
||||
bcs .9
|
||||
|
||||
>LDA.G ASM.PASS End of pass #2 ??
|
||||
bne .1
|
||||
inc
|
||||
sta (pData),y
|
||||
|
||||
clc
|
||||
rts
|
||||
|
||||
@ -354,7 +394,8 @@ CS.RUN ldy #S.PS.hStdIn
|
||||
|
||||
.9 pha
|
||||
jsr OUT.PrintLineErr
|
||||
jsr SYM.Dump
|
||||
|
||||
* jsr SYM.Dump
|
||||
pla
|
||||
sec
|
||||
rts
|
||||
@ -365,7 +406,12 @@ CS.DOEVENT sec
|
||||
CS.QUIT jsr FIO.FileClose
|
||||
bne CS.QUIT
|
||||
|
||||
jsr MAC.Quit
|
||||
>LDA.G DST.hREFNUM
|
||||
beq .1
|
||||
|
||||
>SYSCALL fclose
|
||||
|
||||
.1 jsr MAC.Quit
|
||||
|
||||
jsr SYM.Quit
|
||||
|
||||
@ -375,6 +421,9 @@ CS.QUIT jsr FIO.FileClose
|
||||
ldy #SRC.hFILENAME
|
||||
jsr .7
|
||||
|
||||
ldy #DST.hFILENAME
|
||||
jsr .7
|
||||
|
||||
ldy #SRC.hLineBuf
|
||||
jsr .7
|
||||
|
||||
@ -500,6 +549,8 @@ SRC.AM.StrBuf .BS 32
|
||||
.OR 0
|
||||
DS.START
|
||||
bPause .BS 1
|
||||
bListAll .BS 1
|
||||
ArgDstFile .BS 1
|
||||
|
||||
SRC.hFILENAME .BS 1
|
||||
SRC.hLineBuf .BS 1
|
||||
@ -514,7 +565,6 @@ SRC.AMID .BS 1
|
||||
|
||||
DST.hFILENAME .BS 1
|
||||
DST.hREFNUM .BS 1
|
||||
DST.hBUFFER .BS 1
|
||||
DST.hFILETYPE .BS 1
|
||||
|
||||
DIR.Word .BS 2
|
||||
|
@ -102,6 +102,7 @@ CMD.CD.YA >PUSHYA
|
||||
|
||||
cmp #S.FI.T.DIR
|
||||
beq .11
|
||||
|
||||
lda #MLI.E.INVPATH
|
||||
.19 pha
|
||||
lda ZPTmpW
|
||||
@ -112,37 +113,17 @@ CMD.CD.YA >PUSHYA
|
||||
|
||||
.11 jsr GetPtr1LenY
|
||||
dey
|
||||
lda (ZPPtr1),y
|
||||
cmp #'/'
|
||||
bne .14
|
||||
|
||||
lda ZPTmpW
|
||||
bra CMD.SetCWDA already ends with a /
|
||||
|
||||
.14 iny back to /
|
||||
iny at \0
|
||||
iny add+1 for adding \0 after adding '/'
|
||||
lda #0
|
||||
>SYSCALL getmem
|
||||
bcs .19
|
||||
>STYA ZPPtr2
|
||||
|
||||
ldy #$ff
|
||||
.1 iny
|
||||
lda (ZPPtr1),y
|
||||
sta (ZPPtr2),y
|
||||
bne .1
|
||||
|
||||
lda #'/'
|
||||
sta (ZPPtr2),y
|
||||
cmp (ZPPtr1),y
|
||||
beq .14
|
||||
|
||||
iny
|
||||
sta (ZPPtr1),y
|
||||
iny
|
||||
lda #0
|
||||
sta (ZPPtr2),y
|
||||
phx
|
||||
lda ZPTmpW
|
||||
>SYSCALL freemem
|
||||
pla
|
||||
sta (ZPPtr1),y
|
||||
|
||||
.14 lda ZPTmpW
|
||||
*--------------------------------------
|
||||
CMD.SetCWDA pha
|
||||
ldy #S.PS.hCWD
|
||||
|
Loading…
Reference in New Issue
Block a user