Work In Progress (ASM)

This commit is contained in:
Rémy GIBERT 2015-10-09 17:53:30 +02:00
parent b94da4b027
commit a9b7399902
5 changed files with 168 additions and 53 deletions

57
BIN/ASM.S.EXP.txt Normal file
View File

@ -0,0 +1,57 @@
PR#3
PREFIX /A2OSX.SRC
NEW
INC 1
AUTO 6
.LIST OFF
.OP 65C02
*---------------------------------------
* Addressing Mode reserved : #(),XY
* U-Operators :
* B-Operators :
* Num Format : 0-9 -> decimal
* $ = Hexa
* % = binary
* & = octal
*---------------------------------------
EXP.Get jsr SRC.GetCharNB
beq .9
jsr SRC.IsDigit10 Decimal constant ?
bne .
cmp #'$' Hex?
bne .
cmp #''' literal?
bne .
jsr SRC.IsLetter Symbol ?
bne .
cmp #'#'
.9 lda #ERR.MISSING.EXP
sec
.99 rts
*---------------------------------------
stz SRC.ACC
stz SRC.ACC+1
stz SRC.ACC+2
stz SRC.ACC+3
*---------------------------------------
EXP.Operators .AS "^!|&<=>+-*/"
*---------------------------------------
MAN
SAVE BIN/ASM.S.DIR
LOAD BIN/ASM.S
ASM

View File

@ -242,38 +242,89 @@ SRC.FileClose ldy #SRC.COUNT
*--------------------------------------- *---------------------------------------
SRC.ParseLine stz SRC.Label.Flags SRC.ParseLine stz SRC.Label.Flags
stz SRC.BufPtr stz SRC.BufPtr
lda TmpBuffer256
beq SRC.ParseLine.Ok
cmp #'*' Comment?
beq SRC.ParseLine.Ok
cmp #';' Comment?
beq SRC.ParseLine.Ok
tax ldx TmpBuffer256
ldy #ASM.MA.ON beq SRC.ParseLine.Skip
cpx #'*' Comment?
beq SRC.ParseLine.Skip
cpx #';' Comment?
beq SRC.ParseLine.Skip
cpx #' ' no label...go scan dir/opcode
beq .4
ldy #ASM.MA.ON Macro learning mode ?
lda (pData),y lda (pData),y
bpl .1 bpl .1 go Label check
jmp SRC.ParseLine.Macro .10 jsr SRC.GetChar skip label
beq SRC.ParseLine.skip
.1 txa
cmp #' ' cmp #' '
beq SRC.ParseLine.OpCde bne .10
bra .4
SRC.ParseLine.Sym cmp #'.' Local Label? .1 cpx #'.' local symbol?
bne SRC.ParseLine.SymG bne .2
jsr SRC.ParseLine.SymL
bra .3
jsr SRC.GetChar .2 jsr SRC.ParseLine.SymG
beq SRC.ParseLine.Err1 .3 bcs SRC.ParseLine.Err
jsr SRC.GetDecimal
bcs SRC.ParseLine.Err1 .4 jsr SRC.GetCharNB Scan for an Opcode...
jsr SYM.AddLocal beq SRC.ParseLine.Ok
bcc SRC.ParseLine.OpCde
cmp #'.'
bne .5
jsr SRC.ParseLine.Dir
bcs SRC.ParseLine.Err
bra SRC.ParseLine.Ok
.5 jsr SRC.ParseLine.OpCode
bcs SRC.ParseLine.Err
SRC.ParseLine.Ok lda SRC.Label.Flags
beq .1
jsr SYM.Add
.1 ldy #ASM.MA.ON Macro learning mode ?
lda (pData),y
bpl .2
ldy #ASM.PASS If Pass#2, ignore
lda (pData),y
bne SRC.ParseLine.skip
jsr SRC.ParseLine.Macro
.2
SRC.ParseLine.skip clc
rts rts
SRC.ParseLine.Err1 lda #ERR.INVALID.LABEL
SRC.ParseLine.Err sec
rts
*---------------------------------------
SRC.ParseLine.SymP jsr SRC.GetChar
beq SRC.ParseLine.SymE
jsr SRC.GetDecimal
bcs SRC.ParseLine.SymR
jmp SYM.AddPrivate
*---------------------------------------
SRC.ParseLine.SymL jsr SRC.GetChar
beq SRC.ParseLine.SymE
jsr SRC.GetDecimal
bcs SRC.ParseLine.SymR
jmp SYM.AddLocal
*---------------------------------------
SRC.ParseLine.SymG jsr SYM.ClearLocal SRC.ParseLine.SymG jsr SYM.ClearLocal
jsr SRC.GetLabel jsr SRC.GetLabel
bcs SRC.ParseLine.Err1 bcs SRC.ParseLine.SymE
inc SRC.Label.Flags Remember to Add Label inc SRC.Label.Flags Remember to Add Label
@ -284,30 +335,12 @@ SRC.ParseLine.SymG jsr SYM.ClearLocal
dey dey
dex dex
bpl .1 bpl .1
clc
SRC.ParseLine.OpCde jsr SRC.GetCharNB
beq SRC.ParseLine.Ok
cmp #'.'
beq SRC.ParseLine.Dir
bra SRC.ParseLine.Ok
SRC.ParseLine.Ok lda SRC.Label.Flags
beq .8
jsr SYM.AddLocal
.8 clc
rts rts
SRC.ParseLine.Err1 lda #ERR.INVALID.LABEL SRC.ParseLine.SymE lda #ERR.INVALID.LABEL
SRC.ParseLine.Err sec sec
rts SRC.ParseLine.SymR rts
*--------------------------------------- *---------------------------------------
SRC.ParseLine.Dir >LDYA L.T.DIRECTIVES SRC.ParseLine.Dir >LDYA L.T.DIRECTIVES
jsr SRC.GetKeyword jsr SRC.GetKeyword
@ -319,11 +352,15 @@ SRC.ParseLine.Dir >LDYA L.T.DIRECTIVES
sec sec
rts rts
*--------------------------------------- *---------------------------------------
SRC.ParseLine.OpCode
clc
rts
*---------------------------------------
SRC.ParseLine.Macro SRC.ParseLine.Macro
clc clc
rts rts
*--------------------------------------- *---------------------------------------
SRC.PrintLine bcs .1 if CS, unconditional SRC.PrintLine bcs .8 if CS, unconditional
ldy #ASM.MA.ON ldy #ASM.MA.ON
lda (pData),y lda (pData),y
bpl .1 bpl .1
@ -511,7 +548,7 @@ SRC.IsDigit10 cmp #'0'
.9 sec .9 sec
rts rts
*--------------------------------------- *---------------------------------------
SRC.GetCharNB jsr SRC.GetChar SRC.GetCharNB jsr SRC.GetCharUC
beq .9 beq .9
cmp #' ' cmp #' '
beq SRC.GetCharNB beq SRC.GetCharNB

View File

@ -6,6 +6,10 @@ AUTO 6
.LIST OFF .LIST OFF
.OP 65C02 .OP 65C02
*--------------------------------------- *---------------------------------------
SYM.Add
clc
rts
*---------------------------------------
SYM.ClearPrivate SYM.ClearPrivate
clc clc
rts rts

View File

@ -24,12 +24,15 @@ SRC.LABEL.MAXLEN .EQ 32
ERR.INV.ARGS .EQ $80 ERR.INV.ARGS .EQ $80
ERR.SRC.INV.TYPE .EQ $90 ERR.SRC.INV.TYPE .EQ $90
ERR.SRC.TOO.MANY.IN .EQ $91 ERR.SRC.TOO.MANY.IN .EQ $91
ERR.SRC.UNEXP.EOF .EQ $92
ERR.SYNTAX.ERROR .EQ $A0 ERR.SYNTAX.ERROR .EQ $A0
ERR.SYM.TOO.LONG .EQ $A1 ERR.SYM.TOO.LONG .EQ $A1
ERR.VAL.TOO.BIG .EQ $A2 ERR.VAL.TOO.BIG .EQ $A2
ERR.LINE.TOO.LONG .EQ $A3 ERR.LINE.TOO.LONG .EQ $A3
ERR.INVALID.LABEL .EQ $A4 ERR.INVALID.LABEL .EQ $A4
ERR.INVALID.DIRECTIVE .EQ $A5 ERR.INVALID.DIRECTIVE .EQ $A5
ERR.MISSING.EXP .EQ $B0
ERR.EXP.SYN.ERROR .EQ $B1
ERR.INVALID.MACRO.DEF .EQ $E0 ERR.INVALID.MACRO.DEF .EQ $E0
*-------------------------------------- *--------------------------------------
* File Header (16 Bytes) * File Header (16 Bytes)
@ -132,6 +135,8 @@ CS.INIT >LDYA L.LIBSTR
lda #$80 lda #$80
ldy #ASM.LI.ON ldy #ASM.LI.ON
sta (pData),y sta (pData),y
lda #$00
ldy #ASM.LI.CON ldy #ASM.LI.CON
sta (pData),y sta (pData),y
ldy #ASM.LI.XON ldy #ASM.LI.XON
@ -163,6 +168,7 @@ CS.RUN ldy #bCANCEL
ldy #ASM.PASS ldy #ASM.PASS
lda (pData),y lda (pData),y
inc
>PUSHA >PUSHA
>PUSHW L.MSG.PASS >PUSHW L.MSG.PASS
>LIBCALL hLIBSTR,LIBSTR.PRINTF >LIBCALL hLIBSTR,LIBSTR.PRINTF
@ -180,7 +186,15 @@ CS.RUN ldy #bCANCEL
jsr SRC.FileClose jsr SRC.FileClose
ldy #SRC.COUNT end of root file ? ldy #ASM.MA.ON Macro learning mode ?
lda (pData),y
bpl .22
lda #ERR.SRC.UNEXP.EOF
sec
rts
.22 ldy #SRC.COUNT end of root file ?
lda (pData),y lda (pData),y
bne .8 no continue back to previous file bne .8 no continue back to previous file
@ -201,6 +215,9 @@ CS.RUN ldy #bCANCEL
jsr SRC.PrintLine with CC, conditional jsr SRC.PrintLine with CC, conditional
ldy #ASM.MA.ON Macro learning mode ?
lda (pData),y
bmi .10
.8 clc .8 clc
rts rts
@ -377,8 +394,8 @@ LIBSTR >PSTRING "libstr.o"
MSG.HELP1 >CSTRING "A2osX-Macro Assembler (S-C MASM 3.0 Based)\n" MSG.HELP1 >CSTRING "A2osX-Macro Assembler (S-C MASM 3.0 Based)\n"
MSG.HELP2 >CSTRING "Usage : ASM <src file> [type TXT ($04) or S-C/BAS ($FA)]\n" MSG.HELP2 >CSTRING "Usage : ASM <src file> [type TXT ($04) or S-C/BAS ($FA)]\n"
MSG.PASS >CSTRING "Pass:#%d\n" MSG.PASS >CSTRING "Pass:#%d\n"
MSG.SRC.FILE >CSTRING "Source File:#%S\n" MSG.SRC.FILE >CSTRING "Source File:%S\n"
MSG.OBJ.FILE >CSTRING "Object File:#%S, Type=%02x\n" MSG.OBJ.FILE >CSTRING "Object File:%S, Type=%02x\n"
MSG.SRCLINE >CSTRING "%05D-%s\n" MSG.SRCLINE >CSTRING "%05D-%s\n"
MSG.ERROR >CSTRING "%05D-Error:$%h\n" MSG.ERROR >CSTRING "%05D-Error:$%h\n"
hLIBSTR .BS 1 hLIBSTR .BS 1

View File

@ -19,8 +19,8 @@ AUTO 6
.DA T.ADDR.MODES.SYNTAX .DA T.ADDR.MODES.SYNTAX
.DA T.OPCODES .DA T.OPCODES
*--------------------------------------- *---------------------------------------
T.ADDR.MODES.SYNTAX >AMS 1 Implicit T.ADDR.MODES.SYNTAX .AS "1 Implicit
>AMS 2,"#$1",$1","" Imm8 >AMS 2,"#?1",$1","" Imm8
>AMS 3,"$2","$1=$2-@+1","-127,128" rel8 >AMS 3,"$2","$1=$2-@+1","-127,128" rel8
>AMS 4,"$1","$1","" abs8 >AMS 4,"$1","$1","" abs8
>AMS 5,"$1,X","$1","" abs8,x >AMS 5,"$1,X","$1","" abs8,x