Work In Progress (ASM)

This commit is contained in:
Rémy GIBERT 2015-11-27 17:26:11 +01:00
parent 3537472fa1
commit 49ba85b7da
4 changed files with 243 additions and 105 deletions

View File

@ -16,8 +16,22 @@ AUTO 6
EXP.Eval stz EXP.Operator EXP.Eval stz EXP.Operator
jsr SRC.GetCharNB jsr SRC.GetCharNB
beq .98 bne .13
cmp #'*'
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 bne .10
ldy #ASM.PC+3 ldy #ASM.PC+3
@ -30,7 +44,7 @@ EXP.Eval stz EXP.Operator
bpl .11 bpl .11
jsr SRC.GetCharNB jsr SRC.GetCharNB
bne .97 bne EXP.EvalExitSYN
clc clc
rts rts
@ -39,79 +53,154 @@ EXP.Eval stz EXP.Operator
dec SRC.BufPtr dec SRC.BufPtr
jsr SRC.GetDecimal jsr SRC.GetDecimal
bcs .97
bra .8 bcs EXP.EvalExitSYN
bra EXP.EvalOperator
.1 cmp #'$' Hex? .1 cmp #'$' Hex?
bne .2 bne .2
jsr SRC.GetHex jsr SRC.GetHex
bcs .97
bra .8 bcs EXP.EvalExitSYN
bra EXP.EvalOperator
.2 cmp #'%' binary? .2 cmp #'%' binary?
bne .3 bne .3
jsr SRC.GetBinary jsr SRC.GetBinary
bcs .97
bra .8 bcs EXP.EvalExitSYN
bra EXP.EvalOperator
.3 cmp #'&' octal? .3 cmp #'&' octal?
bne .4 bne .4
jsr SRC.GetOctal jsr SRC.GetOctal
bcs .97
bra .8 bcs EXP.EvalExitSYN
bra EXP.EvalOperator
.4 jsr SRC.IsLetter Symbol ? .4 cmp #'''
bcs .97 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 dec SRC.BufPtr
>LDYA L.SRC.ELabel.Len jsr EXP.GetSymbol
jsr SRC.GetLabel bcs EXP.EvalExitRTS
bcs .97 bra EXP.EvalOperator
jsr SYM.FindGlobal
bcc .41
ldy #ASM.PASS
lda (pData),y pass#2?
bne .96 yes, undefined symbol
bra * EXP.EvalExitOK dec SRC.BufPtr Back One Char
EXP.EvalExitOK1 clc
EXP.EvalExitRTS rts
EXP.EvalExitSYN lda #ERR.SYNTAX.ERROR
.41 ldx #3
.5 lda SRC.FLabel.Value,x
sta SRC.ACC,x
dex
bpl .5
.8 clc
rts
.97 lda #ERR.SYNTAX.ERROR
sec sec
rts rts
.98 lda #ERR.MISSING.EXP
sec
.99 rts
.96 lda #ERR.UNDEF.SYMBOL EXP.EvalExitUND lda #ERR.UNDEF.SYMBOL
sec 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 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+1
stz SRC.ACC+2 stz SRC.ACC+2
stz SRC.ACC+3 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 MAN
SAVE BIN/ASM.S.EXP SAVE BIN/ASM.S.EXP
LOAD BIN/ASM.S LOAD BIN/ASM.S

View File

@ -49,20 +49,32 @@ SRC.ParseLine ldx TmpBuffer256
SRC.ParseLine.Ok lda SRC.GLabel.New SRC.ParseLine.Ok lda SRC.GLabel.New
bpl .1 bpl .8
lda SRC.GLabel.Flags jsr SYM.FindGlobal
lsr .SE ? 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 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? lda (pData),y pass#2?
bne .8 yes, skip to avoid redefinition error bne .8 yes, skip to avoid redefinition error
jsr SYM.FindGlobal bra SRC.ParseLine.Redef
bcs SRC.ParseLine.Redef
.1 jsr SYM.AddGToGBlock .1 >LDYA L.SRC.GLabel.Flags
jsr SYM.AddGToGBlockYA
bcs SRC.ParseLine.Err bcs SRC.ParseLine.Err
@ -225,6 +237,19 @@ SRC.ParseLine.OpCode
bne .1 bne .1
jsr SRC.ParseLine.AM jsr SRC.ParseLine.AM
bcs *
bcs .99 bcs .99
ldy #ASM.PC ldy #ASM.PC
@ -278,6 +303,9 @@ SRC.ParseLine.AM stz SRC.AM.ID
.2 jsr SRC.IsLetter Any register? .2 jsr SRC.IsLetter Any register?
bcs .70 no, try something else bcs .70 no, try something else
lda SRC.BufPtr
sta SRC.BufPtrSave
stz SRC.AM.tmpBuf stz SRC.AM.tmpBuf
sta SRC.AM.tmpBuf+1 sta SRC.AM.tmpBuf+1
inc SRC.AM.tmpBuf inc SRC.AM.tmpBuf
@ -332,10 +360,13 @@ SRC.ParseLine.AM stz SRC.AM.ID
tay tay
bra .5 bra .5
.71 lda SRC.BufPtrSave Does not match a register,restore Ptr
sta SRC.BufPtr
.70 dec SRC.BufPtr back one char .70 dec SRC.BufPtr back one char
jsr EXP.Eval
.71 jsr EXP.Eval bcs *
bcs .99 bcs .99
.72 jmp .1 .72 jmp .1
clc clc
@ -382,6 +413,10 @@ SRC.GetDecimal stz SRC.ACC+1
beq .8 beq .8
cmp #' ' cmp #' '
beq .8 beq .8
jsr SRC.IsEXPReserved
bcc .88
jsr SRC.IsAMReserved
bcc .88
jsr SRC.IsDigit10 jsr SRC.IsDigit10
bcs .99 bcs .99
and #$0F and #$0F
@ -405,7 +440,8 @@ SRC.GetDecimal stz SRC.ACC+1
.9 lda #ERR.VAL.TOO.BIG .9 lda #ERR.VAL.TOO.BIG
sec sec
rts rts
.88 dec SRC.BufPtr Back One Char
.8 clc .8 clc
rts rts
@ -428,6 +464,10 @@ SRC.GetHex stz SRC.ACC+1
beq .8 beq .8
cmp #' ' cmp #' '
beq .8 beq .8
jsr SRC.IsEXPReserved
bcc .88
jsr SRC.IsAMReserved
bcc .88
jsr SRC.IsDigit16 jsr SRC.IsDigit16
bcs .99 bcs .99
@ -443,6 +483,7 @@ SRC.GetHex stz SRC.ACC+1
sta SRC.ACC sta SRC.ACC
bra .1 bra .1
.88 dec SRC.BufPtr Back One Char
.8 clc .8 clc
rts rts
@ -469,6 +510,10 @@ SRC.GetOctal stz SRC.ACC+1
beq .8 beq .8
cmp #' ' cmp #' '
beq .8 beq .8
jsr SRC.IsEXPReserved
bcc .88
jsr SRC.IsAMReserved
bcc .88
jsr SRC.IsDigit8 jsr SRC.IsDigit8
bcs .99 bcs .99
@ -489,6 +534,7 @@ SRC.GetOctal stz SRC.ACC+1
bne .2 bne .2
bra .1 bra .1
.88 dec SRC.BufPtr Back One Char
.8 clc .8 clc
rts rts
@ -515,6 +561,12 @@ SRC.GetBinary stz SRC.ACC+1
.1 jsr SRC.GetChar .1 jsr SRC.GetChar
beq .8 beq .8
cmp #' '
beq .8
jsr SRC.IsEXPReserved
bcc .88
jsr SRC.IsAMReserved
bcc .88
cmp #'1' cmp #'1'
beq .11 beq .11
cmp #'0' cmp #'0'
@ -529,6 +581,7 @@ SRC.GetBinary stz SRC.ACC+1
bcs .9 bcs .9
bra .1 bra .1
.88 dec SRC.BufPtr Back One Char
.8 clc .8 clc
rts rts
@ -563,9 +616,12 @@ SRC.GetLabel >STYA ZPPtr1
beq .2 beq .2
jsr SRC.IsEXPReserved jsr SRC.IsEXPReserved
bcc .8 bcc .88
jsr SRC.IsAMReserved
bcc .88
jsr SRC.IsLetterOrDigit jsr SRC.IsLetterOrDigit
bcs .9 bcs *
* bcs .9
.2 iny .2 iny
sta (ZPPtr1),y sta (ZPPtr1),y
@ -575,7 +631,8 @@ SRC.GetLabel >STYA ZPPtr1
.9 lda #ERR.SYNTAX.ERROR .9 lda #ERR.SYNTAX.ERROR
sec sec
rts rts
.88 dec SRC.BufPtr Back One Char
.8 tya .8 tya
sta (ZPPtr1) sta (ZPPtr1)
clc clc
@ -621,35 +678,6 @@ SRC.GetKeyword >STYA ZPPtr1
inc SRC.Keyword.ID inc SRC.Keyword.ID
bra .3 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 .9 sec
rts rts
*--------------------------------------- *---------------------------------------

View File

@ -151,6 +151,12 @@ SYM.LookupMacro
rts rts
*--------------------------------------- *---------------------------------------
SYM.UpdateGlobal SYM.UpdateGlobal
clc
rts
*---------------------------------------
SYM.FindLocal
clc
rts
*--------------------------------------- *---------------------------------------
SYM.FindGlobal jsr SYM.ResetGBlock SYM.FindGlobal jsr SYM.ResetGBlock
@ -205,7 +211,8 @@ SYM.AddLToGBlock jsr SYM.GetLastGBlock
jmp SYM.AddByteGBlock jmp SYM.AddByteGBlock
.9 rts .9 rts
*--------------------------------------- *---------------------------------------
SYM.AddGToGBlock jsr SYM.GetLastGBlock SYM.AddGToGBlockYA >STYA ZPSymbolPtr
jsr SYM.GetLastGBlock
ldy #SYM.hCurGBlock 1st Gblock to add? ldy #SYM.hCurGBlock 1st Gblock to add?
lda (pData),y lda (pData),y
@ -213,25 +220,29 @@ SYM.AddGToGBlock jsr SYM.GetLastGBlock
ora (pData),y ora (pData),y
beq .10 yes, skip closing previous one beq .10 yes, skip closing previous one
lda #0 Close Pending Global/Local lda #0 Close Pending Global/Local
jsr SYM.AddByteGBlock jsr SYM.AddByteGBlock
bcs .9 bcs .9
.10 ldx #0 .10 ldy #0
.1 lda SRC.GLabel.Flags,x
.1 lda (ZPSymbolPtr),y
jsr SYM.AddByteGBlock jsr SYM.AddByteGBlock
bcs .9 bcs .9
inx iny
cpx #6 cpy #5
bne .1 bne .1 moved Flags & Value to GBlock....
ldx #0 lda (ZPSymbolPtr),y Get Len
tax
.2 lda SRC.GLabel.Name,x
jsr SYM.AddByteGBlock jsr SYM.AddByteGBlock
bcs .9 bcs .9
inx
cpx SRC.GLabel.Len .2 lda (ZPSymbolPtr),y
jsr SYM.AddByteGBlock
bcs .9
iny
dex
bne .2 bne .2
clc clc
@ -282,7 +293,9 @@ SYM.GetGBlockA clc
plx plx
rts rts
*--------------------------------------- *---------------------------------------
SYM.AddByteGBlock pha SYM.AddByteGBlock phx
phy
pha
ldy #SYM.iCurGBlock ldy #SYM.iCurGBlock
lda (pData),y lda (pData),y
tay tay
@ -292,15 +305,18 @@ SYM.AddByteGBlock pha
tya tya
inc inc
beq SYM.NewGBlock beq SYM.NewGBlock2
ldy #SYM.iCurGBlock ldy #SYM.iCurGBlock
sta (pData),y sta (pData),y
ply
plx
clc clc
rts rts
*--------------------------------------- *---------------------------------------
SYM.NewGBlock phx SYM.NewGBlock phx
>PUSHWI 256 phy
SYM.NewGBlock2 >PUSHWI 256
>PUSHBI S.MEM.F.INIT0 >PUSHBI S.MEM.F.INIT0
>SYSCALL SYS.GetMem >SYSCALL SYS.GetMem
@ -324,7 +340,8 @@ SYM.NewGBlock phx
sta (pData),y sta (pData),y
clc clc
.9 plx .9 ply
plx
rts rts
*--------------------------------------- *---------------------------------------
MAN MAN

View File

@ -16,6 +16,7 @@ ZPPtr1 .EQ ZPBIN
ZPPtr2 .EQ ZPBIN+2 ZPPtr2 .EQ ZPBIN+2
ZPPtr3 .EQ ZPBIN+4 ZPPtr3 .EQ ZPBIN+4
ZPBlockPtr .EQ ZPBIN+6 ZPBlockPtr .EQ ZPBIN+6
ZPSymbolPtr .EQ ZPBIN+8
*--------------------------------------- *---------------------------------------
ASM.T.AM .EQ 0 ASM.T.AM .EQ 0
ASM.T.R .EQ 2 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.OBJ.FILE .DA MSG.OBJ.FILE
L.MSG.T.FILE .DA MSG.T.FILE L.MSG.T.FILE .DA MSG.T.FILE
L.SRC.AM.StrBuf .DA SRC.AM.StrBuf 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.GLabel.Len .DA SRC.GLabel.Len
L.SRC.ELabel.Flags .DA SRC.ELabel.Flags
L.SRC.ELabel.Len .DA SRC.ELabel.Len L.SRC.ELabel.Len .DA SRC.ELabel.Len
L.SRC.BUFFER .DA SRC.BUFFER L.SRC.BUFFER .DA SRC.BUFFER
L.ASM.T.FILENAME .DA ASM.T.FILENAME L.ASM.T.FILENAME .DA ASM.T.FILENAME
@ -264,10 +267,10 @@ CS.RUN ldy #bCANCEL
.99 sec .99 sec
rts rts
.2 jsr SRC.ParseLine .2 jsr SRC.PrintLine with CC, conditional
bcs .9
jsr SRC.PrintLine with CC, conditional jsr SRC.ParseLine
bcs .9
.8 clc .8 clc
rts rts
@ -477,6 +480,7 @@ SRC.Directive.ID .BS 1
SRC.Keyword.ID .BS 1 SRC.Keyword.ID .BS 1
SRC.ACC .BS 4 SRC.ACC .BS 4
SRC.ACCTMP .BS 4 SRC.ACCTMP .BS 4
SRC.ARG .BS 4
SRC.AM.ID .BS 1 SRC.AM.ID .BS 1
SRC.AM.StrBuf .BS 32 SRC.AM.StrBuf .BS 32
SRC.AM.tmpBuf .BS 32 SRC.AM.tmpBuf .BS 32