mirror of
https://github.com/A2osX/A2osX.git
synced 2025-04-07 09:37:34 +00:00
Work In Progress (ASM)
This commit is contained in:
parent
3537472fa1
commit
49ba85b7da
@ -16,8 +16,22 @@ AUTO 6
|
||||
EXP.Eval stz EXP.Operator
|
||||
|
||||
jsr SRC.GetCharNB
|
||||
beq .98
|
||||
cmp #'*'
|
||||
bne .13
|
||||
|
||||
lda #ERR.MISSING.EXP
|
||||
sec
|
||||
.14 rts
|
||||
|
||||
.13 cmp #'.' Local Label?
|
||||
bne .12
|
||||
|
||||
jsr EXP.GetLocal
|
||||
bcs .14
|
||||
|
||||
jmp EXP.EvalOperator
|
||||
|
||||
|
||||
.12 cmp #'*'
|
||||
bne .10
|
||||
|
||||
ldy #ASM.PC+3
|
||||
@ -30,7 +44,7 @@ EXP.Eval stz EXP.Operator
|
||||
bpl .11
|
||||
|
||||
jsr SRC.GetCharNB
|
||||
bne .97
|
||||
bne EXP.EvalExitSYN
|
||||
clc
|
||||
rts
|
||||
|
||||
@ -39,79 +53,154 @@ EXP.Eval stz EXP.Operator
|
||||
|
||||
dec SRC.BufPtr
|
||||
jsr SRC.GetDecimal
|
||||
bcs .97
|
||||
bra .8
|
||||
|
||||
bcs EXP.EvalExitSYN
|
||||
bra EXP.EvalOperator
|
||||
|
||||
.1 cmp #'$' Hex?
|
||||
bne .2
|
||||
jsr SRC.GetHex
|
||||
bcs .97
|
||||
bra .8
|
||||
|
||||
bcs EXP.EvalExitSYN
|
||||
bra EXP.EvalOperator
|
||||
|
||||
|
||||
.2 cmp #'%' binary?
|
||||
bne .3
|
||||
jsr SRC.GetBinary
|
||||
bcs .97
|
||||
|
||||
bra .8
|
||||
bcs EXP.EvalExitSYN
|
||||
bra EXP.EvalOperator
|
||||
|
||||
|
||||
.3 cmp #'&' octal?
|
||||
bne .4
|
||||
jsr SRC.GetOctal
|
||||
bcs .97
|
||||
|
||||
bra .8
|
||||
bcs EXP.EvalExitSYN
|
||||
bra EXP.EvalOperator
|
||||
|
||||
.4 jsr SRC.IsLetter Symbol ?
|
||||
bcs .97
|
||||
.4 cmp #'''
|
||||
bne .43
|
||||
jsr SRC.GetChar
|
||||
beq EXP.EvalExitSYN
|
||||
jsr EXP.SetAccA
|
||||
jsr SRC.GetChar
|
||||
beq EXP.EvalOperator
|
||||
cmp #'''
|
||||
bne EXP.EvalExitSYN
|
||||
bra EXP.EvalOperator
|
||||
|
||||
.43 cmp '"'
|
||||
bne .42
|
||||
jsr SRC.GetChar
|
||||
beq EXP.EvalExitSYN
|
||||
ora #$80
|
||||
jsr EXP.SetAccA
|
||||
jsr SRC.GetChar
|
||||
beq EXP.EvalOperator
|
||||
cmp #'"'
|
||||
bne EXP.EvalExitSYN
|
||||
bra EXP.EvalOperator
|
||||
|
||||
.42 jsr SRC.IsLetter Symbol ?
|
||||
bcs EXP.EvalExitSYN
|
||||
dec SRC.BufPtr
|
||||
>LDYA L.SRC.ELabel.Len
|
||||
jsr SRC.GetLabel
|
||||
bcs .97
|
||||
jsr SYM.FindGlobal
|
||||
bcc .41
|
||||
|
||||
ldy #ASM.PASS
|
||||
lda (pData),y pass#2?
|
||||
bne .96 yes, undefined symbol
|
||||
jsr EXP.GetSymbol
|
||||
bcs EXP.EvalExitRTS
|
||||
bra EXP.EvalOperator
|
||||
|
||||
|
||||
|
||||
bra *
|
||||
EXP.EvalExitOK dec SRC.BufPtr Back One Char
|
||||
EXP.EvalExitOK1 clc
|
||||
EXP.EvalExitRTS rts
|
||||
|
||||
|
||||
|
||||
|
||||
.41 ldx #3
|
||||
.5 lda SRC.FLabel.Value,x
|
||||
sta SRC.ACC,x
|
||||
dex
|
||||
bpl .5
|
||||
|
||||
.8 clc
|
||||
rts
|
||||
|
||||
.97 lda #ERR.SYNTAX.ERROR
|
||||
EXP.EvalExitSYN lda #ERR.SYNTAX.ERROR
|
||||
sec
|
||||
rts
|
||||
|
||||
.98 lda #ERR.MISSING.EXP
|
||||
sec
|
||||
.99 rts
|
||||
|
||||
.96 lda #ERR.UNDEF.SYMBOL
|
||||
EXP.EvalExitUND lda #ERR.UNDEF.SYMBOL
|
||||
sec
|
||||
rts
|
||||
|
||||
|
||||
EXP.EvalOperator lda EXP.Operator
|
||||
beq .7
|
||||
|
||||
jsr EXP.Compute
|
||||
bcs EXP.EvalExitRTS
|
||||
|
||||
.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
|
||||
|
||||
ldx #3
|
||||
.8 lda SRC.ACC,x
|
||||
sta SRC.ARG,x
|
||||
dex
|
||||
bpl .8
|
||||
|
||||
jmp EXP.Eval
|
||||
|
||||
clc
|
||||
rts
|
||||
*---------------------------------------
|
||||
stz SRC.ACC
|
||||
EXP.GetLocal jsr SRC.GetDecimal
|
||||
bcs EXP.EvalExitSYN
|
||||
lda SRC.ACC+1
|
||||
ora SRC.ACC+2
|
||||
ora SRC.ACC+3
|
||||
bne EXP.EvalExitSYN Max .255
|
||||
lda SRC.ACC
|
||||
beq EXP.EvalExitSYN .0 is not allowed
|
||||
jsr SYM.FindLocal
|
||||
bcs EXP.EvalExitUND
|
||||
rts
|
||||
*---------------------------------------
|
||||
EXP.SetAccA sta SRC.ACC
|
||||
stz SRC.ACC+1
|
||||
stz SRC.ACC+2
|
||||
stz SRC.ACC+3
|
||||
rts
|
||||
*---------------------------------------
|
||||
EXP.GetSymbol >LDYA L.SRC.ELabel.Len
|
||||
jsr SRC.GetLabel
|
||||
bcs EXP.EvalExitSYN
|
||||
jsr SYM.FindGlobal
|
||||
bcc .1
|
||||
|
||||
ldy #ASM.PASS
|
||||
lda (pData),y pass#2?
|
||||
bne EXP.EvalExitUND yes, undefined symbol
|
||||
|
||||
lda #$C0 Valid+Pending
|
||||
sta SRC.ELabel.Flags
|
||||
>LDYA L.SRC.ELabel.Flags
|
||||
jsr SYM.AddGToGBlockYA
|
||||
rts
|
||||
|
||||
*---------------------------------------
|
||||
.1 ldx #3
|
||||
.2 lda SRC.FLabel.Value,x
|
||||
sta SRC.ACC,x
|
||||
dex
|
||||
bpl .2
|
||||
clc
|
||||
rts
|
||||
*---------------------------------------
|
||||
EXP.Compute
|
||||
clc
|
||||
rts
|
||||
*---------------------------------------
|
||||
MAN
|
||||
SAVE BIN/ASM.S.EXP
|
||||
LOAD BIN/ASM.S
|
||||
|
@ -49,20 +49,32 @@ SRC.ParseLine ldx TmpBuffer256
|
||||
|
||||
|
||||
SRC.ParseLine.Ok lda SRC.GLabel.New
|
||||
bpl .1
|
||||
bpl .8
|
||||
|
||||
lda SRC.GLabel.Flags
|
||||
lsr .SE ?
|
||||
jsr SYM.FindGlobal
|
||||
bcs .1 if CS, not found, add
|
||||
|
||||
lda SRC.FLabel.Flags
|
||||
and SRC.GLabel.Flags
|
||||
lsr both are .SE ?
|
||||
bcs .1 yes, update during pass 1 & 2
|
||||
|
||||
ldy #ASM.PASS
|
||||
lda SRC.FLabel.Flags
|
||||
and #$40 found symbol pending ?
|
||||
bne .10
|
||||
|
||||
lda SRC.GLabel.Flags
|
||||
and #$40 new is pending ? (if yes, no need to update)
|
||||
bne .8
|
||||
|
||||
.10 ldy #ASM.PASS
|
||||
lda (pData),y pass#2?
|
||||
bne .8 yes, skip to avoid redefinition error
|
||||
|
||||
jsr SYM.FindGlobal
|
||||
bcs SRC.ParseLine.Redef
|
||||
bra SRC.ParseLine.Redef
|
||||
|
||||
.1 jsr SYM.AddGToGBlock
|
||||
.1 >LDYA L.SRC.GLabel.Flags
|
||||
jsr SYM.AddGToGBlockYA
|
||||
bcs SRC.ParseLine.Err
|
||||
|
||||
|
||||
@ -225,6 +237,19 @@ SRC.ParseLine.OpCode
|
||||
bne .1
|
||||
|
||||
jsr SRC.ParseLine.AM
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
bcs *
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
bcs .99
|
||||
|
||||
ldy #ASM.PC
|
||||
@ -278,6 +303,9 @@ SRC.ParseLine.AM stz SRC.AM.ID
|
||||
.2 jsr SRC.IsLetter Any register?
|
||||
bcs .70 no, try something else
|
||||
|
||||
lda SRC.BufPtr
|
||||
sta SRC.BufPtrSave
|
||||
|
||||
stz SRC.AM.tmpBuf
|
||||
sta SRC.AM.tmpBuf+1
|
||||
inc SRC.AM.tmpBuf
|
||||
@ -332,10 +360,13 @@ SRC.ParseLine.AM stz SRC.AM.ID
|
||||
tay
|
||||
bra .5
|
||||
|
||||
.71 lda SRC.BufPtrSave Does not match a register,restore Ptr
|
||||
sta SRC.BufPtr
|
||||
|
||||
.70 dec SRC.BufPtr back one char
|
||||
|
||||
|
||||
.71 jsr EXP.Eval
|
||||
|
||||
jsr EXP.Eval
|
||||
bcs *
|
||||
bcs .99
|
||||
.72 jmp .1
|
||||
clc
|
||||
@ -382,6 +413,10 @@ SRC.GetDecimal stz SRC.ACC+1
|
||||
beq .8
|
||||
cmp #' '
|
||||
beq .8
|
||||
jsr SRC.IsEXPReserved
|
||||
bcc .88
|
||||
jsr SRC.IsAMReserved
|
||||
bcc .88
|
||||
jsr SRC.IsDigit10
|
||||
bcs .99
|
||||
and #$0F
|
||||
@ -405,7 +440,8 @@ SRC.GetDecimal stz SRC.ACC+1
|
||||
.9 lda #ERR.VAL.TOO.BIG
|
||||
sec
|
||||
rts
|
||||
|
||||
|
||||
.88 dec SRC.BufPtr Back One Char
|
||||
.8 clc
|
||||
rts
|
||||
|
||||
@ -428,6 +464,10 @@ SRC.GetHex stz SRC.ACC+1
|
||||
beq .8
|
||||
cmp #' '
|
||||
beq .8
|
||||
jsr SRC.IsEXPReserved
|
||||
bcc .88
|
||||
jsr SRC.IsAMReserved
|
||||
bcc .88
|
||||
jsr SRC.IsDigit16
|
||||
bcs .99
|
||||
|
||||
@ -443,6 +483,7 @@ SRC.GetHex stz SRC.ACC+1
|
||||
sta SRC.ACC
|
||||
bra .1
|
||||
|
||||
.88 dec SRC.BufPtr Back One Char
|
||||
.8 clc
|
||||
rts
|
||||
|
||||
@ -469,6 +510,10 @@ SRC.GetOctal stz SRC.ACC+1
|
||||
beq .8
|
||||
cmp #' '
|
||||
beq .8
|
||||
jsr SRC.IsEXPReserved
|
||||
bcc .88
|
||||
jsr SRC.IsAMReserved
|
||||
bcc .88
|
||||
jsr SRC.IsDigit8
|
||||
bcs .99
|
||||
|
||||
@ -489,6 +534,7 @@ SRC.GetOctal stz SRC.ACC+1
|
||||
bne .2
|
||||
bra .1
|
||||
|
||||
.88 dec SRC.BufPtr Back One Char
|
||||
.8 clc
|
||||
rts
|
||||
|
||||
@ -515,6 +561,12 @@ SRC.GetBinary stz SRC.ACC+1
|
||||
|
||||
.1 jsr SRC.GetChar
|
||||
beq .8
|
||||
cmp #' '
|
||||
beq .8
|
||||
jsr SRC.IsEXPReserved
|
||||
bcc .88
|
||||
jsr SRC.IsAMReserved
|
||||
bcc .88
|
||||
cmp #'1'
|
||||
beq .11
|
||||
cmp #'0'
|
||||
@ -529,6 +581,7 @@ SRC.GetBinary stz SRC.ACC+1
|
||||
bcs .9
|
||||
bra .1
|
||||
|
||||
.88 dec SRC.BufPtr Back One Char
|
||||
.8 clc
|
||||
rts
|
||||
|
||||
@ -563,9 +616,12 @@ SRC.GetLabel >STYA ZPPtr1
|
||||
beq .2
|
||||
|
||||
jsr SRC.IsEXPReserved
|
||||
bcc .8
|
||||
bcc .88
|
||||
jsr SRC.IsAMReserved
|
||||
bcc .88
|
||||
jsr SRC.IsLetterOrDigit
|
||||
bcs .9
|
||||
bcs *
|
||||
* bcs .9
|
||||
|
||||
.2 iny
|
||||
sta (ZPPtr1),y
|
||||
@ -575,7 +631,8 @@ SRC.GetLabel >STYA ZPPtr1
|
||||
.9 lda #ERR.SYNTAX.ERROR
|
||||
sec
|
||||
rts
|
||||
|
||||
|
||||
.88 dec SRC.BufPtr Back One Char
|
||||
.8 tya
|
||||
sta (ZPPtr1)
|
||||
clc
|
||||
@ -621,35 +678,6 @@ SRC.GetKeyword >STYA ZPPtr1
|
||||
inc SRC.Keyword.ID
|
||||
bra .3
|
||||
|
||||
.9 sec
|
||||
rts
|
||||
*---------------------------------------
|
||||
SRC.GetExp.DELETE stz SRC.Exp
|
||||
jsr SRC.GetCharUC
|
||||
beq .9
|
||||
|
||||
ldy #0
|
||||
jsr SRC.IsAMReserved
|
||||
bcc .8
|
||||
|
||||
iny
|
||||
sta SRC.Exp+1
|
||||
|
||||
.1 jsr SRC.GetCharUC
|
||||
beq .89
|
||||
cmp #' '
|
||||
beq .89
|
||||
jsr SRC.IsAMReserved
|
||||
bcc .8
|
||||
iny
|
||||
sta SRC.Exp,y
|
||||
bra .1
|
||||
|
||||
.8 dec SRC.BufPtr
|
||||
.89 sty SRC.Exp
|
||||
clc
|
||||
rts
|
||||
|
||||
.9 sec
|
||||
rts
|
||||
*---------------------------------------
|
||||
|
@ -151,6 +151,12 @@ SYM.LookupMacro
|
||||
rts
|
||||
*---------------------------------------
|
||||
SYM.UpdateGlobal
|
||||
clc
|
||||
rts
|
||||
*---------------------------------------
|
||||
SYM.FindLocal
|
||||
clc
|
||||
rts
|
||||
*---------------------------------------
|
||||
SYM.FindGlobal jsr SYM.ResetGBlock
|
||||
|
||||
@ -205,7 +211,8 @@ SYM.AddLToGBlock jsr SYM.GetLastGBlock
|
||||
jmp SYM.AddByteGBlock
|
||||
.9 rts
|
||||
*---------------------------------------
|
||||
SYM.AddGToGBlock jsr SYM.GetLastGBlock
|
||||
SYM.AddGToGBlockYA >STYA ZPSymbolPtr
|
||||
jsr SYM.GetLastGBlock
|
||||
|
||||
ldy #SYM.hCurGBlock 1st Gblock to add?
|
||||
lda (pData),y
|
||||
@ -213,25 +220,29 @@ SYM.AddGToGBlock jsr SYM.GetLastGBlock
|
||||
ora (pData),y
|
||||
beq .10 yes, skip closing previous one
|
||||
|
||||
lda #0 Close Pending Global/Local
|
||||
lda #0 Close Pending Global/Local
|
||||
jsr SYM.AddByteGBlock
|
||||
bcs .9
|
||||
|
||||
.10 ldx #0
|
||||
.1 lda SRC.GLabel.Flags,x
|
||||
.10 ldy #0
|
||||
|
||||
.1 lda (ZPSymbolPtr),y
|
||||
jsr SYM.AddByteGBlock
|
||||
bcs .9
|
||||
inx
|
||||
cpx #6
|
||||
bne .1
|
||||
iny
|
||||
cpy #5
|
||||
bne .1 moved Flags & Value to GBlock....
|
||||
|
||||
ldx #0
|
||||
|
||||
.2 lda SRC.GLabel.Name,x
|
||||
lda (ZPSymbolPtr),y Get Len
|
||||
tax
|
||||
jsr SYM.AddByteGBlock
|
||||
bcs .9
|
||||
inx
|
||||
cpx SRC.GLabel.Len
|
||||
|
||||
.2 lda (ZPSymbolPtr),y
|
||||
jsr SYM.AddByteGBlock
|
||||
bcs .9
|
||||
iny
|
||||
dex
|
||||
bne .2
|
||||
|
||||
clc
|
||||
@ -282,7 +293,9 @@ SYM.GetGBlockA clc
|
||||
plx
|
||||
rts
|
||||
*---------------------------------------
|
||||
SYM.AddByteGBlock pha
|
||||
SYM.AddByteGBlock phx
|
||||
phy
|
||||
pha
|
||||
ldy #SYM.iCurGBlock
|
||||
lda (pData),y
|
||||
tay
|
||||
@ -292,15 +305,18 @@ SYM.AddByteGBlock pha
|
||||
|
||||
tya
|
||||
inc
|
||||
beq SYM.NewGBlock
|
||||
beq SYM.NewGBlock2
|
||||
|
||||
ldy #SYM.iCurGBlock
|
||||
sta (pData),y
|
||||
ply
|
||||
plx
|
||||
clc
|
||||
rts
|
||||
*---------------------------------------
|
||||
SYM.NewGBlock phx
|
||||
>PUSHWI 256
|
||||
phy
|
||||
SYM.NewGBlock2 >PUSHWI 256
|
||||
>PUSHBI S.MEM.F.INIT0
|
||||
>SYSCALL SYS.GetMem
|
||||
|
||||
@ -324,7 +340,8 @@ SYM.NewGBlock phx
|
||||
sta (pData),y
|
||||
|
||||
clc
|
||||
.9 plx
|
||||
.9 ply
|
||||
plx
|
||||
rts
|
||||
*---------------------------------------
|
||||
MAN
|
||||
|
@ -16,6 +16,7 @@ ZPPtr1 .EQ ZPBIN
|
||||
ZPPtr2 .EQ ZPBIN+2
|
||||
ZPPtr3 .EQ ZPBIN+4
|
||||
ZPBlockPtr .EQ ZPBIN+6
|
||||
ZPSymbolPtr .EQ ZPBIN+8
|
||||
*---------------------------------------
|
||||
ASM.T.AM .EQ 0
|
||||
ASM.T.R .EQ 2
|
||||
@ -83,7 +84,9 @@ L.MSG.SRC.FILE .DA MSG.SRC.FILE
|
||||
L.MSG.OBJ.FILE .DA MSG.OBJ.FILE
|
||||
L.MSG.T.FILE .DA MSG.T.FILE
|
||||
L.SRC.AM.StrBuf .DA SRC.AM.StrBuf
|
||||
L.SRC.GLabel.Flags .DA SRC.GLabel.Flags
|
||||
L.SRC.GLabel.Len .DA SRC.GLabel.Len
|
||||
L.SRC.ELabel.Flags .DA SRC.ELabel.Flags
|
||||
L.SRC.ELabel.Len .DA SRC.ELabel.Len
|
||||
L.SRC.BUFFER .DA SRC.BUFFER
|
||||
L.ASM.T.FILENAME .DA ASM.T.FILENAME
|
||||
@ -264,10 +267,10 @@ CS.RUN ldy #bCANCEL
|
||||
.99 sec
|
||||
rts
|
||||
|
||||
.2 jsr SRC.ParseLine
|
||||
bcs .9
|
||||
.2 jsr SRC.PrintLine with CC, conditional
|
||||
|
||||
jsr SRC.PrintLine with CC, conditional
|
||||
jsr SRC.ParseLine
|
||||
bcs .9
|
||||
|
||||
.8 clc
|
||||
rts
|
||||
@ -477,6 +480,7 @@ SRC.Directive.ID .BS 1
|
||||
SRC.Keyword.ID .BS 1
|
||||
SRC.ACC .BS 4
|
||||
SRC.ACCTMP .BS 4
|
||||
SRC.ARG .BS 4
|
||||
SRC.AM.ID .BS 1
|
||||
SRC.AM.StrBuf .BS 32
|
||||
SRC.AM.tmpBuf .BS 32
|
||||
|
Loading…
x
Reference in New Issue
Block a user