diff --git a/BIN/ASM.S.EXP.txt b/BIN/ASM.S.EXP.txt new file mode 100644 index 00000000..00d262dc --- /dev/null +++ b/BIN/ASM.S.EXP.txt @@ -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 \ No newline at end of file diff --git a/BIN/ASM.S.SRC.txt b/BIN/ASM.S.SRC.txt index 123593d7..3ff54a53 100644 --- a/BIN/ASM.S.SRC.txt +++ b/BIN/ASM.S.SRC.txt @@ -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 diff --git a/BIN/ASM.S.SYM.txt b/BIN/ASM.S.SYM.txt index 56dfe1f1..2b84bdd8 100644 --- a/BIN/ASM.S.SYM.txt +++ b/BIN/ASM.S.SYM.txt @@ -6,6 +6,10 @@ AUTO 6 .LIST OFF .OP 65C02 *--------------------------------------- +SYM.Add + clc + rts +*--------------------------------------- SYM.ClearPrivate clc rts diff --git a/BIN/ASM.S.txt b/BIN/ASM.S.txt index cde5d1e9..a5df38ed 100644 --- a/BIN/ASM.S.txt +++ b/BIN/ASM.S.txt @@ -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 [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 diff --git a/BIN/ASM.T.6502.S.txt b/BIN/ASM.T.6502.S.txt index 80271541..0a42d38f 100644 --- a/BIN/ASM.T.6502.S.txt +++ b/BIN/ASM.T.6502.S.txt @@ -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