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

View File

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

View File

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

View File

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