mirror of
https://github.com/A2osX/A2osX.git
synced 2025-02-16 18:30:26 +00:00
Work In Progress (ASM)
This commit is contained in:
parent
c72c202579
commit
5b2af25a9e
@ -5,6 +5,17 @@ INC 1
|
||||
AUTO 6
|
||||
.LIST OFF
|
||||
*---------------------------------------
|
||||
DIR.Init lda #$00
|
||||
ldy #ASM.LI.CON
|
||||
sta (pData),y
|
||||
ldy #ASM.LI.XON
|
||||
sta (pData),y
|
||||
|
||||
lda #$80
|
||||
ldy #ASM.LI.ON
|
||||
sta (pData),y
|
||||
rts
|
||||
*---------------------------------------
|
||||
DIR.AC clc
|
||||
rts
|
||||
*---------------------------------------
|
||||
@ -17,14 +28,105 @@ DIR.AT clc
|
||||
DIR.AZ clc
|
||||
rts
|
||||
*---------------------------------------
|
||||
DIR.BS clc
|
||||
DIR.BS jsr EXP.Eval
|
||||
bcs .9
|
||||
|
||||
lda SRC.ACC+3
|
||||
ora SRC.ACC+2
|
||||
bne .99
|
||||
lda SRC.ACC
|
||||
sta DIR.Counter
|
||||
lda SRC.ACC+1
|
||||
bmi .99
|
||||
sta DIR.Counter+1
|
||||
|
||||
stz DIR.Byte
|
||||
|
||||
jsr SRC.GetChar
|
||||
beq .1
|
||||
cmp #' '
|
||||
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 ldy #ASM.PC
|
||||
lda (pData),y
|
||||
clc
|
||||
adc DIR.Counter
|
||||
sta (pData),y
|
||||
iny
|
||||
lda (pData),y
|
||||
adc DIR.Counter+1
|
||||
sta (pData),y
|
||||
|
||||
.2 lda DIR.Counter
|
||||
bne .3
|
||||
lda DIR.Counter+1
|
||||
beq .8
|
||||
dec DIR.Counter+1
|
||||
|
||||
.3 dec DIR.Counter
|
||||
|
||||
lda DIR.Byte
|
||||
jsr FIO.EmitByte
|
||||
bcc .2
|
||||
rts
|
||||
|
||||
.8 clc
|
||||
.9 rts
|
||||
|
||||
.99 lda #ERR.RANGE
|
||||
sec
|
||||
rts
|
||||
.98 lda #ERR.SYNTAX.ERROR
|
||||
sec
|
||||
rts
|
||||
*---------------------------------------
|
||||
DIR.DA clc
|
||||
rts
|
||||
*---------------------------------------
|
||||
DIR.DO clc
|
||||
DIR.DO ldy #ASM.DO.Count
|
||||
lda (pData),y
|
||||
inc
|
||||
cmp #SRC.DO.MAXDEPTH
|
||||
bcs .98
|
||||
|
||||
jsr EXP.Eval
|
||||
bcs .99
|
||||
|
||||
ldy #ASM.DO.Count
|
||||
lda (pData),y
|
||||
inc
|
||||
sta (pData),y
|
||||
* clc ok from bcs .99
|
||||
adc #ASM.DOELSE.Flag-1
|
||||
tay
|
||||
|
||||
lda SRC.ACC
|
||||
ora SRC.ACC+1
|
||||
ora SRC.ACC+2
|
||||
ora SRC.ACC+3 if
|
||||
|
||||
sta (pData),y
|
||||
lda #$FF
|
||||
ldy #ASM.DO.ON
|
||||
sta (pData),y
|
||||
clc
|
||||
rts
|
||||
|
||||
.98 lda #ERR.TOO.MANY.DO
|
||||
sec
|
||||
.99 rts
|
||||
*---------------------------------------
|
||||
DIR.DU clc
|
||||
rts
|
||||
@ -42,7 +144,35 @@ DIR.EM lda #ERR.INVALID.MACRO.DEF
|
||||
DIR.EN clc
|
||||
rts
|
||||
*---------------------------------------
|
||||
DIR.EP clc
|
||||
DIR.EP ldy #ASM.PH.ON
|
||||
lda (pData),y
|
||||
bpl .9
|
||||
|
||||
lda #0
|
||||
sta (pData),y
|
||||
|
||||
ldy #ASM.PC.PH+3
|
||||
ldx #3
|
||||
|
||||
.1 lda (pData),y
|
||||
pha
|
||||
dey
|
||||
dex
|
||||
bpl .1
|
||||
|
||||
ldy #ASM.PC
|
||||
ldx #3
|
||||
|
||||
.2 pla
|
||||
sta (pData),y
|
||||
iny
|
||||
dex
|
||||
bpl .2
|
||||
clc
|
||||
rts
|
||||
|
||||
.9 lda #ERR.INVALID.DIRECTIVE
|
||||
sec
|
||||
rts
|
||||
*---------------------------------------
|
||||
DIR.EQ jsr EXP.Eval
|
||||
@ -57,7 +187,22 @@ DIR.EQ jsr EXP.Eval
|
||||
clc
|
||||
.9 rts
|
||||
*---------------------------------------
|
||||
DIR.FI clc
|
||||
DIR.FI ldy #ASM.DO.Count
|
||||
lda (pData),y
|
||||
beq .99
|
||||
dec
|
||||
sta (pData),y
|
||||
bne .1
|
||||
|
||||
lda #$0
|
||||
ldy #ASM.DO.ON
|
||||
sta (pData),y
|
||||
|
||||
.1 clc
|
||||
rts
|
||||
|
||||
.99 lda #ERR.INVALID.DIRECTIVE
|
||||
sec
|
||||
rts
|
||||
*---------------------------------------
|
||||
DIR.HS clc
|
||||
@ -117,9 +262,6 @@ DIR.LI.OFF ldy #ASM.LI.ON
|
||||
clc
|
||||
DIR.LI.APPLY lsr
|
||||
|
||||
|
||||
|
||||
lda #$80
|
||||
sta (pData),y
|
||||
rts
|
||||
*---------------------------------------
|
||||
@ -190,7 +332,7 @@ DIR.OP jsr SRC.GetArg
|
||||
dex
|
||||
bne .1
|
||||
|
||||
jmp LOAD.ASM.T
|
||||
jmp FIO.LOAD.ASM.T
|
||||
|
||||
.9 lda #ERR.SYNTAX.ERROR
|
||||
sec
|
||||
@ -214,7 +356,35 @@ DIR.OR jsr EXP.Eval
|
||||
DIR.PG clc
|
||||
rts
|
||||
*---------------------------------------
|
||||
DIR.PH clc
|
||||
DIR.PH ldy #ASM.PH.ON
|
||||
lda (pData),y
|
||||
bmi .9
|
||||
|
||||
lda #$80
|
||||
sta (pData),y
|
||||
|
||||
ldy #ASM.PC+3
|
||||
ldx #3
|
||||
|
||||
.1 lda (pData),y
|
||||
pha
|
||||
dey
|
||||
dex
|
||||
bpl .1
|
||||
|
||||
ldy #ASM.PC.PH
|
||||
ldx #3
|
||||
|
||||
.2 pla
|
||||
sta (pData),y
|
||||
iny
|
||||
dex
|
||||
bpl .2
|
||||
|
||||
jmp DIR.OR
|
||||
|
||||
.9 lda #ERR.INVALID.DIRECTIVE
|
||||
sec
|
||||
rts
|
||||
*---------------------------------------
|
||||
DIR.SE clc
|
||||
|
@ -15,7 +15,7 @@ AUTO 6
|
||||
*---------------------------------------
|
||||
EXP.Eval stz EXP.Operator
|
||||
|
||||
jsr SRC.GetCharNB
|
||||
EXP.Eval.Next jsr SRC.GetCharNB
|
||||
bne .13
|
||||
|
||||
lda #ERR.MISSING.EXP
|
||||
@ -43,10 +43,7 @@ EXP.Eval stz EXP.Operator
|
||||
dex
|
||||
bpl .11
|
||||
|
||||
jsr SRC.GetCharNB
|
||||
bne EXP.EvalExitSYN
|
||||
clc
|
||||
rts
|
||||
bra EXP.EvalOperator
|
||||
|
||||
.10 jsr SRC.IsDigit10 Decimal constant ?
|
||||
bcs .1
|
||||
@ -133,16 +130,17 @@ EXP.EvalOperator lda EXP.Operator
|
||||
|
||||
.7 jsr SRC.GetChar
|
||||
beq EXP.EvalExitOK1
|
||||
|
||||
cmp #' '
|
||||
beq EXP.EvalExitOK1
|
||||
|
||||
jsr SRC.IsAMReserved
|
||||
bcc EXP.EvalExitOK
|
||||
|
||||
|
||||
jsr SRC.IsEXPReserved
|
||||
bcs *
|
||||
bcs EXP.EvalExitSYN
|
||||
|
||||
sta EXP.Operator
|
||||
stx EXP.Operator
|
||||
|
||||
ldx #3
|
||||
.8 lda SRC.ACC,x
|
||||
@ -150,7 +148,7 @@ EXP.EvalOperator lda EXP.Operator
|
||||
dex
|
||||
bpl .8
|
||||
|
||||
jmp EXP.Eval
|
||||
jmp EXP.Eval.Next
|
||||
|
||||
clc
|
||||
rts
|
||||
@ -163,7 +161,7 @@ EXP.GetLocal jsr SRC.GetDecimal
|
||||
bne EXP.EvalExitSYN Max .255
|
||||
lda SRC.ACC
|
||||
beq EXP.EvalExitSYN .0 is not allowed
|
||||
jsr SYM.FindLocal
|
||||
jsr SYM.SearchLocal
|
||||
bcs EXP.EvalExitUND
|
||||
rts
|
||||
*---------------------------------------
|
||||
@ -176,7 +174,9 @@ EXP.SetAccA sta SRC.ACC
|
||||
EXP.GetSymbol >LDYA L.SRC.ELabel.Len
|
||||
jsr SRC.GetLabel
|
||||
bcs EXP.EvalExitSYN
|
||||
jsr SYM.FindGlobal
|
||||
|
||||
>LDYA L.SRC.ELabel.Flags
|
||||
jsr SYM.SearchGlobal
|
||||
bcc .1
|
||||
|
||||
ldy #ASM.PASS
|
||||
@ -197,7 +197,66 @@ EXP.GetSymbol >LDYA L.SRC.ELabel.Len
|
||||
clc
|
||||
rts
|
||||
*---------------------------------------
|
||||
EXP.Compute
|
||||
EXP.Compute dec
|
||||
asl
|
||||
tax
|
||||
jmp (J.EXP.OP,x)
|
||||
*---------------------------------------
|
||||
EXP.Compute.EOR
|
||||
*---------------------------------------
|
||||
EXP.Compute.ORA
|
||||
*---------------------------------------
|
||||
EXP.Compute.AND
|
||||
*---------------------------------------
|
||||
EXP.Compute.LOW
|
||||
*---------------------------------------
|
||||
EXP.Compute.EQU
|
||||
*---------------------------------------
|
||||
EXP.Compute.GRT
|
||||
clc
|
||||
rts
|
||||
*---------------------------------------
|
||||
EXP.Compute.ADD ldx #0 ARG-ACC->ACC
|
||||
ldy #4
|
||||
|
||||
clc
|
||||
|
||||
.1 lda SRC.ARG,x
|
||||
adc SRC.ACC,x
|
||||
sta SRC.ACC,x
|
||||
inx
|
||||
dey
|
||||
bne .1
|
||||
|
||||
bcc .8
|
||||
|
||||
lda #ERR.VAL.TOO.BIG
|
||||
.8 rts
|
||||
*---------------------------------------
|
||||
EXP.Compute.SUB ldx #0 ARG-ACC->ACC
|
||||
ldy #4
|
||||
|
||||
sec
|
||||
|
||||
.1 lda SRC.ARG,x
|
||||
sbc SRC.ACC,x
|
||||
sta SRC.ACC,x
|
||||
inx
|
||||
dey
|
||||
bne .1
|
||||
|
||||
bcs .8
|
||||
|
||||
lda #ERR.VAL.TOO.BIG
|
||||
sec
|
||||
rts
|
||||
|
||||
.8 clc
|
||||
rts
|
||||
*---------------------------------------
|
||||
EXP.Compute.MUL
|
||||
*---------------------------------------
|
||||
EXP.Compute.DIV
|
||||
clc
|
||||
rts
|
||||
*---------------------------------------
|
||||
|
@ -5,6 +5,35 @@ INC 1
|
||||
AUTO 6
|
||||
.LIST OFF
|
||||
*---------------------------------------
|
||||
FIO.Init ldy #S.PS.hCMD
|
||||
lda (pPS),y
|
||||
>SYSCALL SYS.GetMemPtrA
|
||||
bcs .99
|
||||
>STYA ZPPtr1
|
||||
lda (ZPPtr1)
|
||||
tay
|
||||
adc #3 len of ".T."
|
||||
sta ASM.T.FILENAMELEN
|
||||
adc #4 len of "6502"
|
||||
sta ASM.T.FILENAME
|
||||
tax
|
||||
|
||||
.2 lda (ZPPtr1),y
|
||||
sta ASM.T.FILENAME,y
|
||||
dey
|
||||
bne .2
|
||||
|
||||
ldy #6
|
||||
|
||||
.3 lda ASM.T.DEFAULT,y
|
||||
sta ASM.T.FILENAME,x
|
||||
dex
|
||||
dey
|
||||
bpl .3
|
||||
|
||||
jmp FIO.LOAD.ASM.T
|
||||
.99 rts
|
||||
*---------------------------------------
|
||||
FIO.OpenFileA sta FIO.hFileName
|
||||
>SYSCALL SYS.GetMemPtrA
|
||||
>STYA ZPPtr1
|
||||
@ -252,7 +281,7 @@ FIO.FileClose ldy #SRC.COUNT
|
||||
.8 clc
|
||||
rts
|
||||
*---------------------------------------
|
||||
LOAD.ASM.T ldy #ASM.T.hMem
|
||||
FIO.LOAD.ASM.T ldy #ASM.T.hMem
|
||||
lda (pData),y
|
||||
beq .1
|
||||
>SYSCALL SYS.FreeMemA
|
||||
@ -274,6 +303,9 @@ LOAD.ASM.T ldy #ASM.T.hMem
|
||||
|
||||
.9 rts
|
||||
*---------------------------------------
|
||||
FIO.EmitByte clc
|
||||
rts
|
||||
*---------------------------------------
|
||||
MAN
|
||||
SAVE BIN/ASM.S.FIO
|
||||
LOAD BIN/ASM.S
|
||||
|
@ -6,12 +6,16 @@ AUTO 6
|
||||
.LIST OFF
|
||||
*---------------------------------------
|
||||
SRC.ParseLine ldx TmpBuffer256
|
||||
beq SRC.ParseLine.Skip
|
||||
beq .1
|
||||
|
||||
cpx #'*' Comment?
|
||||
beq SRC.ParseLine.Skip
|
||||
beq .1
|
||||
cpx #';' Comment?
|
||||
beq SRC.ParseLine.Skip
|
||||
beq .1
|
||||
|
||||
ldy #ASM.DO.ON
|
||||
lda (pData),y
|
||||
bne .1
|
||||
|
||||
stz SRC.GLabel.New
|
||||
|
||||
@ -23,6 +27,10 @@ SRC.ParseLine ldx TmpBuffer256
|
||||
jsr SRC.ParseLine.SymL
|
||||
bra .3
|
||||
|
||||
.1 clc
|
||||
rts
|
||||
|
||||
|
||||
.2 jsr SRC.ParseLine.SymG
|
||||
.3 bcs SRC.ParseLine.Err
|
||||
|
||||
@ -51,7 +59,8 @@ SRC.ParseLine ldx TmpBuffer256
|
||||
SRC.ParseLine.Ok lda SRC.GLabel.New
|
||||
bpl .8
|
||||
|
||||
jsr SYM.FindGlobal
|
||||
>LDYA L.SRC.GLabel.Flags
|
||||
jsr SYM.SearchGlobal
|
||||
bcs .1 if CS, not found, add
|
||||
|
||||
lda SRC.FLabel.Flags
|
||||
@ -69,23 +78,24 @@ SRC.ParseLine.Ok lda SRC.GLabel.New
|
||||
|
||||
.10 ldy #ASM.PASS
|
||||
lda (pData),y pass#2?
|
||||
bne .8 yes, skip to avoid redefinition error
|
||||
beq .1 yes, skip to avoid redefinition error
|
||||
|
||||
bra SRC.ParseLine.Redef
|
||||
lda SRC.FLabel.Flags
|
||||
and #$40
|
||||
beq SRC.ParseLine.Redef
|
||||
|
||||
.1 >LDYA L.SRC.GLabel.Flags
|
||||
jsr SYM.AddGToGBlockYA
|
||||
bcs SRC.ParseLine.Err
|
||||
|
||||
|
||||
.8
|
||||
|
||||
SRC.ParseLine.skip clc
|
||||
.8 clc
|
||||
rts
|
||||
|
||||
|
||||
SRC.ParseLine.Err1 lda #ERR.INVALID.LABEL
|
||||
SRC.ParseLine.Err sec
|
||||
rts
|
||||
|
||||
SRC.ParseLine.Redef lda #ERR.SYMBOL.REDEFINE
|
||||
sec
|
||||
rts
|
||||
@ -379,6 +389,7 @@ SRC.ParseLine.AM stz SRC.AM.ID
|
||||
.99 rts
|
||||
*---------------------------------------
|
||||
SRC.PrintLine bcs .8 if CS, unconditional
|
||||
|
||||
ldy #ASM.MACRO.ON
|
||||
lda (pData),y
|
||||
bpl .1
|
||||
@ -394,6 +405,10 @@ SRC.PrintLine bcs .8 if CS, unconditional
|
||||
|
||||
.8 >PUSHWI TmpBuffer256
|
||||
>PUSHW SRC.LINENUM
|
||||
ldy #ASM.PC+1
|
||||
>PUSHB (pData),y
|
||||
dey
|
||||
>PUSHB (pData),y
|
||||
>PUSHW L.MSG.SRCLINE
|
||||
>LIBCALL hLIBSTR,LIBSTR.PRINTF
|
||||
.9 rts
|
||||
|
@ -32,10 +32,10 @@ AUTO 6
|
||||
* Macro Record: ( bytes)
|
||||
*---------------------------------------
|
||||
SYM.Init lda #0
|
||||
ldy #SYM.iCurGBlock
|
||||
ldy #SYM.iLastGBlock
|
||||
sta (pData),y
|
||||
dec
|
||||
ldy #SYM.hCurGBlock
|
||||
ldy #SYM.pLastGBlock
|
||||
sta (pData),y
|
||||
|
||||
jsr SYM.NewGBlock
|
||||
@ -44,7 +44,7 @@ SYM.Init lda #0
|
||||
clc
|
||||
.9 rts
|
||||
*---------------------------------------
|
||||
SYM.Quit ldy #SYM.LastGBlock
|
||||
SYM.Quit ldy #SYM.pLastGBlock
|
||||
lda (pData),y
|
||||
bmi .8
|
||||
|
||||
@ -53,7 +53,7 @@ SYM.Quit ldy #SYM.LastGBlock
|
||||
tay
|
||||
lda (pData),y
|
||||
>SYSCALL SYS.FreeMemA
|
||||
ldy #SYM.LastGBlock
|
||||
ldy #SYM.pLastGBlock
|
||||
lda (pData),y
|
||||
dec
|
||||
sta (pData),y
|
||||
@ -69,7 +69,7 @@ SYM.Dump >PUSHW L.MSG.SYMBOLS
|
||||
lda #20
|
||||
sta (pData),y
|
||||
|
||||
jsr SYM.ResetGBlock
|
||||
jsr SYM.ResetGBlockPtr
|
||||
|
||||
.1 jsr SYM.GetByteGBlock Get Flags
|
||||
sta SRC.GLabel.Flags
|
||||
@ -81,11 +81,8 @@ SYM.Dump >PUSHW L.MSG.SYMBOLS
|
||||
.2 jsr SYM.GetByteGBlock
|
||||
sta SRC.GLabel.Value,x
|
||||
inx
|
||||
cpx #4
|
||||
bne .2
|
||||
|
||||
jsr SYM.GetByteGBlock
|
||||
sta SRC.GLabel.Len
|
||||
cpx #5
|
||||
bne .2 Get Value+Len
|
||||
|
||||
ldx #0
|
||||
.3 jsr SYM.GetByteGBlock
|
||||
@ -107,6 +104,7 @@ SYM.Dump >PUSHW L.MSG.SYMBOLS
|
||||
|
||||
>PUSHW L.MSG.GSYMBOL
|
||||
>LIBCALL hLIBSTR,LIBSTR.PRINTF
|
||||
|
||||
bcs .9
|
||||
|
||||
.4 jsr SYM.GetByteGBlock
|
||||
@ -120,6 +118,7 @@ SYM.Dump >PUSHW L.MSG.SYMBOLS
|
||||
>PUSHW L.MSG.LSYMBOL
|
||||
>LIBCALL hLIBSTR,LIBSTR.PRINTF
|
||||
bcc .4
|
||||
rts
|
||||
|
||||
.5 lda #13
|
||||
>SYSCALL SYS.CoutA
|
||||
@ -128,12 +127,39 @@ SYM.Dump >PUSHW L.MSG.SYMBOLS
|
||||
lda (pData),y
|
||||
dec
|
||||
bne .6
|
||||
>DEBUG
|
||||
|
||||
lda #20
|
||||
.6 sta (pData),y
|
||||
jmp .1
|
||||
.9 rts
|
||||
*---------------------------------------
|
||||
SYM.DumpGSymbol.DELETE >SYSCALL SYS.CoutA
|
||||
lda ZPSymbolPtr
|
||||
clc
|
||||
adc #5
|
||||
tay
|
||||
lda ZPSymbolPtr+1
|
||||
adc #0
|
||||
>PUSHYA
|
||||
|
||||
ldy #2
|
||||
lda (ZPSymbolPtr),y
|
||||
>PUSHA
|
||||
dey
|
||||
lda (ZPSymbolPtr),y
|
||||
>PUSHA
|
||||
ldy #4
|
||||
lda (ZPSymbolPtr),y
|
||||
>PUSHA
|
||||
dey
|
||||
lda (ZPSymbolPtr),y
|
||||
>PUSHA
|
||||
|
||||
>PUSHW L.MSG.GSYMBOL
|
||||
>LIBCALL hLIBSTR,LIBSTR.PRINTF
|
||||
|
||||
rts
|
||||
*---------------------------------------
|
||||
SYM.AddPrivate
|
||||
clc
|
||||
rts
|
||||
@ -154,11 +180,13 @@ SYM.UpdateGlobal
|
||||
clc
|
||||
rts
|
||||
*---------------------------------------
|
||||
SYM.FindLocal
|
||||
SYM.SearchLocal
|
||||
clc
|
||||
rts
|
||||
*---------------------------------------
|
||||
SYM.FindGlobal jsr SYM.ResetGBlock
|
||||
SYM.SearchGlobal >STYA ZPSymbolPtr
|
||||
|
||||
jsr SYM.ResetGBlockPtr
|
||||
|
||||
.1 jsr SYM.GetByteGBlock Get Flags
|
||||
beq .9
|
||||
@ -169,12 +197,9 @@ SYM.FindGlobal jsr SYM.ResetGBlock
|
||||
.2 jsr SYM.GetByteGBlock
|
||||
sta SRC.FLabel.Value,x
|
||||
inx
|
||||
cpx #4
|
||||
bne .2
|
||||
|
||||
jsr SYM.GetByteGBlock
|
||||
sta SRC.FLabel.Len
|
||||
|
||||
cpx #5
|
||||
bne .2 Get Value+Len
|
||||
|
||||
ldx #0
|
||||
.3 jsr SYM.GetByteGBlock
|
||||
sta SRC.FLabel.Name,x
|
||||
@ -182,18 +207,24 @@ SYM.FindGlobal jsr SYM.ResetGBlock
|
||||
cpx SRC.FLabel.Len
|
||||
bne .3
|
||||
|
||||
cpx SRC.ELabel.Len
|
||||
txa
|
||||
ldy #5
|
||||
cmp (ZPSymbolPtr),y
|
||||
bne .5
|
||||
|
||||
.4 lda SRC.FLabel.Name-1,x
|
||||
cmp SRC.ELabel.Name-1,x
|
||||
ldx #0
|
||||
.4 inx
|
||||
iny
|
||||
lda SRC.FLabel.Name-1,x
|
||||
cmp (ZPSymbolPtr),y
|
||||
bne .5
|
||||
dex
|
||||
cpx SRC.FLabel.Len
|
||||
bne .4
|
||||
|
||||
clc
|
||||
rts
|
||||
|
||||
.5 jsr SYM.GetByteGBlock
|
||||
.5 jsr SYM.GetByteGBlock skip Locals
|
||||
beq .1
|
||||
jsr SYM.GetByteGBlock
|
||||
bra .5
|
||||
@ -201,22 +232,13 @@ SYM.FindGlobal jsr SYM.ResetGBlock
|
||||
.9 sec
|
||||
rts
|
||||
*---------------------------------------
|
||||
SYM.AddLToGBlock jsr SYM.GetLastGBlock
|
||||
|
||||
lda SRC.LLabel.ID
|
||||
jsr SYM.AddByteGBlock
|
||||
bcs .9
|
||||
|
||||
lda SRC.LLabel.Offset
|
||||
jmp SYM.AddByteGBlock
|
||||
.9 rts
|
||||
*---------------------------------------
|
||||
SYM.AddGToGBlockYA >STYA ZPSymbolPtr
|
||||
jsr SYM.GetLastGBlock
|
||||
|
||||
jsr SYM.SetGBlockPtr
|
||||
|
||||
ldy #SYM.hCurGBlock 1st Gblock to add?
|
||||
ldy #SYM.pLastGBlock 1st Gblock to add?
|
||||
lda (pData),y
|
||||
ldy #SYM.iCurGBlock
|
||||
ldy #SYM.iLastGBlock
|
||||
ora (pData),y
|
||||
beq .10 yes, skip closing previous one
|
||||
|
||||
@ -238,22 +260,31 @@ SYM.AddGToGBlockYA >STYA ZPSymbolPtr
|
||||
jsr SYM.AddByteGBlock
|
||||
bcs .9
|
||||
|
||||
.2 lda (ZPSymbolPtr),y
|
||||
.2 iny
|
||||
lda (ZPSymbolPtr),y
|
||||
jsr SYM.AddByteGBlock
|
||||
bcs .9
|
||||
iny
|
||||
dex
|
||||
bne .2
|
||||
|
||||
clc
|
||||
.9 rts
|
||||
*---------------------------------------
|
||||
SYM.ResetGBlock ldy #SYM.hGBlocks
|
||||
lda (pData),y
|
||||
>SYSCALL SYS.GetMemPtrA
|
||||
>STYA ZPBlockPtr
|
||||
SYM.AddLToGBlock jsr SYM.SetGBlockPtr
|
||||
|
||||
lda SRC.LLabel.ID
|
||||
jsr SYM.AddByteGBlock
|
||||
bcs .9
|
||||
|
||||
lda SRC.LLabel.Offset
|
||||
jmp SYM.AddByteGBlock
|
||||
.9 rts
|
||||
*---------------------------------------
|
||||
SYM.ResetGBlockPtr lda #0
|
||||
jsr SYM.GetGBlockA
|
||||
|
||||
lda #0
|
||||
ldy #SYM.hCurGBlock
|
||||
ldy #SYM.pCurGBlock
|
||||
sta (pData),y
|
||||
ldy #SYM.iCurGBlock
|
||||
sta (pData),y
|
||||
@ -271,7 +302,7 @@ SYM.GetByteGBlock ldy #SYM.iCurGBlock
|
||||
sta (pData),y
|
||||
bne .1
|
||||
|
||||
ldy #SYM.hCurGBlock
|
||||
ldy #SYM.pCurGBlock
|
||||
lda (pData),y
|
||||
inc
|
||||
sta (pData),y
|
||||
@ -281,8 +312,9 @@ SYM.GetByteGBlock ldy #SYM.iCurGBlock
|
||||
clc
|
||||
rts
|
||||
*---------------------------------------
|
||||
SYM.GetLastGBlock ldy #SYM.LastGBlock
|
||||
SYM.SetGBlockPtr ldy #SYM.pLastGBlock
|
||||
lda (pData),y
|
||||
|
||||
SYM.GetGBlockA clc
|
||||
adc #SYM.hGBlocks
|
||||
tay
|
||||
@ -296,7 +328,7 @@ SYM.GetGBlockA clc
|
||||
SYM.AddByteGBlock phx
|
||||
phy
|
||||
pha
|
||||
ldy #SYM.iCurGBlock
|
||||
ldy #SYM.iLastGBlock
|
||||
lda (pData),y
|
||||
tay
|
||||
|
||||
@ -307,7 +339,7 @@ SYM.AddByteGBlock phx
|
||||
inc
|
||||
beq SYM.NewGBlock2
|
||||
|
||||
ldy #SYM.iCurGBlock
|
||||
ldy #SYM.iLastGBlock
|
||||
sta (pData),y
|
||||
ply
|
||||
plx
|
||||
@ -323,7 +355,7 @@ SYM.NewGBlock2 >PUSHWI 256
|
||||
bcs .9
|
||||
>STYA ZPBlockPtr
|
||||
|
||||
ldy #SYM.LastGBlock
|
||||
ldy #SYM.pLastGBlock
|
||||
lda (pData),y
|
||||
inc
|
||||
sta (pData),y
|
||||
@ -336,7 +368,7 @@ SYM.NewGBlock2 >PUSHWI 256
|
||||
sta (pData),y
|
||||
|
||||
lda #0
|
||||
ldy #SYM.iCurGBlock
|
||||
ldy #SYM.iLastGBlock
|
||||
sta (pData),y
|
||||
|
||||
clc
|
||||
|
108
BIN/ASM.S.txt
108
BIN/ASM.S.txt
@ -22,6 +22,7 @@ ASM.T.AM .EQ 0
|
||||
ASM.T.R .EQ 2
|
||||
ASM.T.O .EQ 4
|
||||
*---------------------------------------
|
||||
SRC.DO.MAXDEPTH .EQ 8
|
||||
SRC.IN.MAXDEPTH .EQ 7
|
||||
SRC.GLABEL.MAXLEN .EQ 32
|
||||
*---------------------------------------
|
||||
@ -47,6 +48,7 @@ ERR.INVALID.AM.4.OC .EQ $A8
|
||||
ERR.RANGE .EQ $A9
|
||||
ERR.UNDEF.SYMBOL .EQ $AA
|
||||
ERR.SYMBOL.REDEFINE .EQ $AB
|
||||
ERR.TOO.MANY.DO .EQ $AC
|
||||
ERR.MISSING.EXP .EQ $B0
|
||||
ERR.EXP.SYN.ERROR .EQ $B1
|
||||
ERR.INVALID.MACRO.DEF .EQ $E0
|
||||
@ -74,7 +76,6 @@ L.MSG.HELP1 .DA MSG.HELP1
|
||||
L.MSG.HELP2 .DA MSG.HELP2
|
||||
L.MSG.SRCLINE .DA MSG.SRCLINE
|
||||
L.MSG.ERROR .DA MSG.ERROR
|
||||
L.MSG.DEBUG .DA MSG.DEBUG
|
||||
L.MSG.SYMBOLS .DA MSG.SYMBOLS
|
||||
L.MSG.GSYMBOL .DA MSG.GSYMBOL
|
||||
L.MSG.LSYMBOL .DA MSG.LSYMBOL
|
||||
@ -138,6 +139,17 @@ J.LI .DA DIR.LI.CON
|
||||
.DA DIR.LI.XOFF
|
||||
.DA DIR.LI.ON
|
||||
.DA DIR.LI.OFF
|
||||
J.EXP.OP .DA EXP.Compute.EOR ^!|&<=>+-*/
|
||||
.DA EXP.Compute.ORA
|
||||
.DA EXP.Compute.ORA
|
||||
.DA EXP.Compute.AND
|
||||
.DA EXP.Compute.LOW
|
||||
.DA EXP.Compute.EQU
|
||||
.DA EXP.Compute.GRT
|
||||
.DA EXP.Compute.ADD
|
||||
.DA EXP.Compute.SUB
|
||||
.DA EXP.Compute.MUL
|
||||
.DA EXP.Compute.DIV
|
||||
.DA 0
|
||||
*---------------------------------------
|
||||
CS.INIT >LDYA L.LIBSTR
|
||||
@ -146,73 +158,35 @@ CS.INIT >LDYA L.LIBSTR
|
||||
|
||||
ldy #S.PS.hARGS
|
||||
lda (pPs),y
|
||||
bne .1
|
||||
beq .99
|
||||
|
||||
>PUSHW L.MSG.HELP1
|
||||
>LIBCALL hLIBSTR,LIBSTR.PRINTF
|
||||
>PUSHW L.MSG.HELP2
|
||||
>LIBCALL hLIBSTR,LIBSTR.PRINTF
|
||||
lda #ERR.INV.ARGS
|
||||
sec
|
||||
rts
|
||||
|
||||
.1 >SYSCALL SYS.PStrCpyA
|
||||
>SYSCALL SYS.PStrCpyA
|
||||
ldy #SRC.hFILENAME
|
||||
sta (pData),y Store filename
|
||||
sta (pData),y
|
||||
|
||||
ldy #S.PS.hCMD
|
||||
lda (pPS),y
|
||||
>SYSCALL SYS.GetMemPtrA
|
||||
bcs .99
|
||||
>STYA ZPPtr1
|
||||
lda (ZPPtr1)
|
||||
tay
|
||||
adc #3 len of ".T."
|
||||
sta ASM.T.FILENAMELEN
|
||||
adc #4 len of "6502"
|
||||
sta ASM.T.FILENAME
|
||||
tax
|
||||
|
||||
.2 lda (ZPPtr1),y
|
||||
sta ASM.T.FILENAME,y
|
||||
dey
|
||||
bne .2
|
||||
|
||||
ldy #6
|
||||
|
||||
.3 lda ASM.T.DEFAULT,y
|
||||
sta ASM.T.FILENAME,x
|
||||
dex
|
||||
dey
|
||||
bpl .3
|
||||
|
||||
jsr LOAD.ASM.T
|
||||
bcs .99
|
||||
jsr FIO.Init
|
||||
bcs .9
|
||||
|
||||
jsr SYM.Init
|
||||
bcs .99
|
||||
bcs .9
|
||||
|
||||
lda #$80
|
||||
ldy #ASM.LI.ON
|
||||
sta (pData),y
|
||||
|
||||
lda #$00
|
||||
ldy #ASM.LI.CON
|
||||
sta (pData),y
|
||||
ldy #ASM.LI.XON
|
||||
sta (pData),y
|
||||
jsr DIR.Init
|
||||
|
||||
lda (pPs)
|
||||
ora #S.PS.F.EVENT Now accept events
|
||||
ora #S.PS.F.EVENT
|
||||
sta (pPs)
|
||||
|
||||
clc
|
||||
rts
|
||||
|
||||
.98 lda #ERR.INV.ARGS
|
||||
|
||||
.99 >PUSHW L.MSG.HELP1
|
||||
>LIBCALL hLIBSTR,LIBSTR.PRINTF
|
||||
>PUSHW L.MSG.HELP2
|
||||
>LIBCALL hLIBSTR,LIBSTR.PRINTF
|
||||
lda #ERR.INV.ARGS
|
||||
sec
|
||||
.99 rts
|
||||
.9 rts
|
||||
*--------------------------------------
|
||||
CS.RUN ldy #bCANCEL
|
||||
lda (pData),y
|
||||
@ -455,9 +429,8 @@ MSG.PASS >CSTRING "Pass:#%d\n"
|
||||
MSG.SRC.FILE >CSTRING "Reading SRC File:%S\n"
|
||||
MSG.OBJ.FILE >CSTRING "Writing OBJ File:%S, Type=%02x\n"
|
||||
MSG.T.FILE >CSTRING "Loading CPU File:%S\n"
|
||||
MSG.SRCLINE >CSTRING "%05D-%s\n"
|
||||
MSG.SRCLINE >CSTRING "%H: %05D-%s\n"
|
||||
MSG.ERROR >CSTRING "%05D-Error:$%h\n"
|
||||
MSG.DEBUG >CSTRING "DEBUG:%h:%S:%s\n"
|
||||
MSG.SYMBOLS >CSTRING "Symbol Table:\n"
|
||||
MSG.GSYMBOL >CSTRING "$%H%H:%S"
|
||||
MSG.LSYMBOL >CSTRING " .%d:+$%h"
|
||||
@ -514,25 +487,26 @@ bCANCEL .BS 1
|
||||
SRC.hFILENAME .BS 1
|
||||
|
||||
SRC.COUNT .BS 1
|
||||
SRC.hREFNUMS .BS SRC.IN.MAXDEPTH Store ref_num of opened files (Main, .INs & .INBs)
|
||||
SRC.hBUFFERS .BS SRC.IN.MAXDEPTH Store hMem to allocated buffers
|
||||
SRC.hFILETYPES .BS SRC.IN.MAXDEPTH Store file type of opened SRC files
|
||||
SRC.hREFNUMS .BS SRC.IN.MAXDEPTH
|
||||
SRC.hBUFFERS .BS SRC.IN.MAXDEPTH
|
||||
SRC.hFILETYPES .BS SRC.IN.MAXDEPTH
|
||||
|
||||
DST.hFILENAME .BS 1
|
||||
DST.hREFNUM .BS 1
|
||||
DST.hBUFFER .BS 1
|
||||
DST.hFILETYPE .BS 1
|
||||
|
||||
ASM.T.hMem .BS 1 handle to ASM.T.xxxxx
|
||||
ASM.T.hMem .BS 1
|
||||
|
||||
SYM.hCurSBlock .BS 1
|
||||
SYM.iCurSBlock .BS 1
|
||||
SYM.LastSBlock .BS 1
|
||||
SYM.hSBlocks .BS SYM.SBLOCK.MAX
|
||||
|
||||
SYM.hCurGBlock .BS 1
|
||||
SYM.pCurGBlock .BS 1
|
||||
SYM.iCurGBlock .BS 1
|
||||
SYM.LastGBlock .BS 1
|
||||
SYM.pLastGBlock .BS 1
|
||||
SYM.iLastGBlock .BS 1
|
||||
SYM.hGBlocks .BS SYM.GBLOCK.MAX
|
||||
|
||||
SYM.hCurPBlock .BS 1
|
||||
@ -547,15 +521,21 @@ SYM.hMBlocks .BS SYM.MBLOCK.MAX
|
||||
|
||||
SYM.DumpCount .BS 1
|
||||
|
||||
DIR.Counter .BS 2
|
||||
DIR.Byte .BS 1
|
||||
|
||||
ASM.PASS .BS 1
|
||||
ASM.MACRO.ON .BS 1
|
||||
ASM.DO.Count .BS 1
|
||||
ASM.DOELSE.Flag .BS SRC.DO.MAXDEPTH
|
||||
ASM.DO.ON .BS 1
|
||||
ASM.PH.ON .BS 1
|
||||
ASM.LI.ON .BS 1
|
||||
ASM.LI.CON .BS 1
|
||||
ASM.LI.XON .BS 1
|
||||
ASM.PC .BS 4 32Bits PC
|
||||
ASM.PC.PH .BS 4 32Bits PC saved for PH directive
|
||||
ASM.PC.GLABEL .BS 4 32Bits PC for last Label (for local labels)
|
||||
ASM.PC .BS 4
|
||||
ASM.PC.PH .BS 4
|
||||
ASM.PC.GLABEL .BS 4
|
||||
ASM.LOCAL.OFFSET .BS 1 Store local offset from last Global Symbol for local (.xx)
|
||||
ASM.LOCAL.INVALID .BS 1 If not in global or offset out of range this flag is set
|
||||
ASM.SYM.ID .BS 2 For reference when a local label is parsed
|
||||
|
Loading…
x
Reference in New Issue
Block a user