diff --git a/.Docs/ASM.md b/.Docs/ASM.md index df558655..d0a2fcff 100644 --- a/.Docs/ASM.md +++ b/.Docs/ASM.md @@ -1,4 +1,4 @@ -# A2osX Macro Assembler (0.9.1) +# A2osX Macro Assembler (0.9.3) ## Description @@ -9,7 +9,7 @@ Multi-CPU macro assembler based on S-C MASM 3.0 dialect | Code | Description | Compatibility | Status | Syntax | Comment | |-|-|-|-|-|-| | .AC | Ascii Compressed string| S-C | NOT IMPL. | | As strings are supposed to be printed with A2osX API, Printf cannot handle 'AC' compressed strings | -| .AS | Ascii String | S-C,A2osX | Working | `.AS dTEXTd` where d is any delimiter `.AS -"TEXT"`produce ascii code with b7=1 | | +| .AS | Ascii String | S-C,A2osX | Working | `.AS dTEXTd` where d is any delimiter `.AS -"TEXT"`produce ascii code with b7=1 | | | .AT | Ascii string Terminated | S-C,A2osX | Working | (same as above) | | | .AZ | Ascii string Zero terminated (C String) | S-C,A2osX | Working | (same as above) | | | .BS | Block Storage | S-C,A2osX | Working | | | diff --git a/.Floppies/A2OSX.BUILD.po b/.Floppies/A2OSX.BUILD.po index 64c27a16..0a370cc9 100644 Binary files a/.Floppies/A2OSX.BUILD.po and b/.Floppies/A2OSX.BUILD.po differ diff --git a/.Tools/ASM.T.xlsm b/.Tools/ASM.T.xlsm index da3acadc..5fe0ec0b 100644 Binary files a/.Tools/ASM.T.xlsm and b/.Tools/ASM.T.xlsm differ diff --git a/BIN/ASM.S.DIR.txt b/BIN/ASM.S.DIR.txt index 761f082d..563bde69 100644 --- a/BIN/ASM.S.DIR.txt +++ b/BIN/ASM.S.DIR.txt @@ -60,7 +60,7 @@ DIR.AS clc .3 jsr OUT.EmitByte no, emit prev char bcc .2 -.9 lda #ERR.SYNTAX.ERROR +.9 lda #E.SYNTAX.ERROR sec rts @@ -132,11 +132,11 @@ DIR.BS jsr SRC.GetNextCharNB .8 clc .9 rts -.99 lda #ERR.RANGE +.99 lda #E.RANGE sec rts -.98 lda #ERR.SYNTAX.ERROR +.98 lda #E.SYNTAX.ERROR sec rts *--------------------------------------- @@ -171,7 +171,7 @@ DIR.DA jsr SRC.GetNextCharNB jsr SRC.GetNextChar bcc .1 -.98 lda #ERR.SYNTAX.ERROR +.98 lda #E.SYNTAX.ERROR clc .9 rts @@ -208,7 +208,7 @@ DIR.DO >LDA.G ASM.DO.StackPtr clc rts -.98 lda #ERR.TOO.MANY.DO +.98 lda #E.TOO.MANY.DO sec .99 rts *--------------------------------------- @@ -224,7 +224,7 @@ DIR.DU >LDA.G ASM.DU.ON clc rts -DIR.DU.ERR lda #ERR.INV.DIR +DIR.DU.ERR lda #E.INV.DIR sec rts *--------------------------------------- @@ -240,7 +240,7 @@ DIR.ED >LDA.G ASM.DU.ON clc rts -.9 lda #ERR.INV.DIR +.9 lda #E.INV.DIR sec rts *--------------------------------------- @@ -257,11 +257,11 @@ DIR.EL >LDA.G ASM.DO.StackPtr clc rts -.9 lda #ERR.ELSE.WITHOUT.DO +.9 lda #E.ELSE.WITHOUT.DO sec rts *--------------------------------------- -DIR.EM lda #ERR.MACRO.INV.DEF +DIR.EM lda #E.MACRO.INV.DEF sec rts *--------------------------------------- @@ -280,7 +280,7 @@ DIR.EP >LDA.G ASM.PH.ON clc rts -.9 lda #ERR.INV.DIR +.9 lda #E.INV.DIR sec rts *--------------------------------------- @@ -326,7 +326,7 @@ DIR.EQ clc clc rts -.99 lda #ERR.SYNTAX.ERROR +.99 lda #E.SYNTAX.ERROR sec .9 rts *--------------------------------------- @@ -344,7 +344,7 @@ DIR.FI ldy #ASM.DO.StackPtr .1 clc rts -.99 lda #ERR.INV.DIR +.99 lda #E.INV.DIR sec rts *--------------------------------------- @@ -409,7 +409,7 @@ DIR.HS jsr SRC.GetNextCharNB jsr SRC.IsDigit16 bcc .1 -.99 lda #ERR.SYNTAX.ERROR +.99 lda #E.SYNTAX.ERROR sec .9 rts @@ -436,7 +436,7 @@ DIR.IN jsr SRC.GetNextCharNB plp rts -.9 lda #ERR.SYNTAX.ERROR +.9 lda #E.SYNTAX.ERROR sec rts *--------------------------------------- @@ -457,7 +457,7 @@ DIR.LI jsr SRC.GetNextChar cmp #' ' beq .8 -.9 lda #ERR.SYNTAX.ERROR +.9 lda #E.SYNTAX.ERROR sec rts @@ -524,7 +524,7 @@ DIR.MA >LDA.G ASM.MA.ON clc rts -.9 lda #ERR.MACRO.INV.DEF +.9 lda #E.MACRO.INV.DEF sec .99 rts *--------------------------------------- @@ -534,7 +534,7 @@ DIR.OP jsr SRC.GetNextCharNB >LDYA ZPLinePtr jmp FIO.LOAD.ASM.T -DIR.OP.SYNERR lda #ERR.SYNTAX.ERROR +DIR.OP.SYNERR lda #E.SYNTAX.ERROR sec rts *--------------------------------------- @@ -570,7 +570,7 @@ DIR.PH >LDA.G ASM.PH.ON jmp DIR.OR -.9 lda #ERR.INV.DIR +.9 lda #E.INV.DIR sec rts *--------------------------------------- diff --git a/BIN/ASM.S.EXP.txt b/BIN/ASM.S.EXP.txt index bdef5a82..e579a6fe 100644 --- a/BIN/ASM.S.EXP.txt +++ b/BIN/ASM.S.EXP.txt @@ -16,7 +16,7 @@ AUTO 4,1 * * = PC *--------------------------------------- EXP.Eval.Missing - lda #ERR.MISSING.EXP + lda #E.MISSING.EXP sec rts @@ -148,11 +148,11 @@ EXP.EvalExitOK >LDA.G EXP.Modifier .8 clc EXP.EvalExitRTS rts -EXP.EvalExitSYN lda #ERR.SYNTAX.ERROR +EXP.EvalExitSYN lda #E.SYNTAX.ERROR sec rts -EXP.EvalExitUND lda #ERR.UNDEF.SYMBOL +EXP.EvalExitUND lda #E.UNDEF.SYMBOL sec rts *--------------------------------------- @@ -211,7 +211,7 @@ EXP.GetLocal jsr SRC.GetNextChar clc rts -.9 lda #ERR.SYNTAX.ERROR +.9 lda #E.SYNTAX.ERROR sec .8 rts *--------------------------------------- @@ -272,7 +272,7 @@ EXP.Compute ldx SRC.ACC.SIZE .1 >LDA.G ASM.PASS beq .8 - lda #ERR.UNDEF.SYMBOL + lda #E.UNDEF.SYMBOL sec rts @@ -361,7 +361,7 @@ EXP.OP.ADD ldx #0 ARG-ACC->ACC bcc .8 - lda #ERR.VAL.TOO.BIG + lda #E.VAL.TOO.BIG .8 rts *--------------------------------------- EXP.OP.SUB ldx #0 ARG-ACC->ACC @@ -378,7 +378,7 @@ EXP.OP.SUB ldx #0 ARG-ACC->ACC bcs .8 - lda #ERR.VAL.TOO.BIG + lda #E.VAL.TOO.BIG sec rts diff --git a/BIN/ASM.S.FIO.txt b/BIN/ASM.S.FIO.txt index 544404ee..69e5c323 100644 --- a/BIN/ASM.S.FIO.txt +++ b/BIN/ASM.S.FIO.txt @@ -116,7 +116,7 @@ FIO.OpenFile >STYA ZPPtr1 cmp #IN.MAXDEPTH bne .1 - lda #ERR.SRC.TOO.MANY.IN + lda #E.SRC.TOO.MANY.IN sec rts @@ -176,7 +176,7 @@ FIO.OpenFile >STYA ZPPtr1 clc rts -.98 lda #ERR.SRC.INV.TYPE +.98 lda #E.SRC.INV.TYPE sec .99 rts @@ -201,8 +201,14 @@ FIO.ReadLine >LDYA ZPLineBuf beq .13 dey - - lda #0 replace ending $0D with $00 + + lda (ZPLineBuf),y + eor #C.CR + beq .22 + + iny + +.22 lda #0 replace ending $0D with $00 .13 sta (ZPLineBuf),y >INC.G SRC.LINENUM @@ -295,7 +301,7 @@ FIO.ReadLine >LDYA ZPLineBuf .8 clc .9 rts -.99 lda #ERR.LINE.TOO.LONG +.99 lda #E.LINE.TOO.LONG sec rts *-------------------------------------- @@ -313,7 +319,7 @@ FIO.ReadFromFile tax $100 byte transfered ? beq .9 - lda #ERR.LINE.TOO.LONG + lda #E.LINE.TOO.LONG sec .9 rts *--------------------------------------- diff --git a/BIN/ASM.S.OUT.txt b/BIN/ASM.S.OUT.txt index 7bc0c9a6..b563f04f 100644 --- a/BIN/ASM.S.OUT.txt +++ b/BIN/ASM.S.OUT.txt @@ -2,7 +2,7 @@ NEW PREFIX AUTO 4,1 *--------------------------------------- -OUT.Init lda #20 +OUT.Init lda #PAGE.LEN >STA.G OUT.LineCnt rts *--------------------------------------- @@ -187,7 +187,7 @@ OUT.PrintCR lda #13 OUT.Print1 >DEC.G OUT.LineCnt bne .8 - lda #20 + lda #PAGE.LEN sta (pData),y lda #$80 diff --git a/BIN/ASM.S.SRC.txt b/BIN/ASM.S.SRC.txt index b47fa19b..6dc08141 100644 --- a/BIN/ASM.S.SRC.txt +++ b/BIN/ASM.S.SRC.txt @@ -182,12 +182,12 @@ SRC.ParseLine.Err rts SRC.ParseLine.InvLbl - lda #ERR.INV.LABEL + lda #E.INV.LABEL sec rts SRC.ParseLine.InvDir - lda #ERR.INV.DIR + lda #E.INV.DIR sec rts *--------------------------------------- @@ -224,17 +224,15 @@ SRC.ParseLine.ExecMacro clc rts -.90 lda #ERR.MACRO.INV +.90 lda #E.MACRO.INV sec rts -.91 lda #ERR.MACRO.INV +.91 lda #E.MACRO.INV sec rts *--------------------------------------- SRC.ParseLine.OpCode - stz SRC.AM.StrBuf - >LDYA ZPOpsPtr >STYA ZPOpDefPtr @@ -272,11 +270,11 @@ SRC.ParseLine.OpCode dex bne .2 - + lda (ZPLinePtr),y beq .8 End of Line, no AM - cmp #' ' A space after opcode ? + cmp #C.SPACE A space after opcode ? bne .7 tya @@ -301,18 +299,24 @@ SRC.ParseLine.OpCode sta ZPOpDefPtr+1 bra .1 -.8 jmp SRC.ParseLine.OPAMCheckFF +.8 lda #$ff + >STA.G SRC.AMID + jsr SRC.ParseLine.AMCheck4OP + bcs .99 + jmp SRC.ParseLine.Emit -.9 lda #ERR.INV.OPCODE +.9 lda #E.INV.OPCODE sec .99 rts *--------------------------------------- -SRC.ParseLine.AM +SRC.ParseLine.AM + stz SRC.AM.StrBuf + .1 jsr SRC.GetChar - bcs SRC.ParseLine.AMCheck + bcs .8 .10 cmp #' ' another space ? - beq SRC.ParseLine.AMCheck ignore end of line (comment) + beq .8 ignore end of line (comment) jsr SRC.IsAMReserved bcs .2 @@ -375,23 +379,49 @@ SRC.ParseLine.AM .7 jsr SRC.GetNextChar bcc .10 - jmp SRC.ParseLine.AMCheck - -.9 lda #ERR.INV.AM.SYN +.8 jsr SRC.ParseLine.AMCheck + bcs .9 + jsr SRC.ParseLine.AMCheck4OP + bcc .88 + +.80 jsr SRC.ExpandAddress + cpx #5 + bne .8 + +.9 lda #E.INV.AM sec .99 rts + +.88 jmp SRC.ParseLine.Emit *--------------------------------------- SRC.ParseLine.AMCheck - lda SRC.AM.StrBuf - beq SRC.ParseLine.OPAMCheckFF +* ldx #5 + +*.10 lda SRC.ACC.F,x +* >PUSHA +* dex +* bpl .10 + +* >PUSHBI 6 +* >LDYA L.MSG.ACC +* >SYSCALL printf - >LDYA ZPAMPtr +* >LDYA L.SRC.AM.StrBuf +* jsr DEBUG.PSTR + + >LDYA ZPAMPtr Check if AM is valid for CPU >STYA ZPPtr1 ldx #0 .1 inx - +* phx +* lda #'?' +* >SYSCALL putchar +* >LDYA ZPPtr1 +* jsr DEBUG.PSTR +* plx + lda (ZPPtr1) beq .9 @@ -408,7 +438,9 @@ SRC.ParseLine.AMCheck txa >STA.G SRC.AMID - bra SRC.ParseLine.OPAMCheck + + clc + rts .6 lda (ZPPtr1) .7 sec @@ -418,43 +450,55 @@ SRC.ParseLine.AMCheck inc ZPPtr1+1 bra .1 -.9 lda #ERR.INV.AM - sec +.9 sec rts *--------------------------------------- -SRC.ParseLine.OPAMCheckFF - lda #$ff Default to no AM - >STA.G SRC.AMID - -SRC.ParseLine.OPAMCheck - ldy #2 Skip nPtr+Len+OP - lda (ZPOpDefPtr),y LEN - sec LEN Byte - adc #2 nPtr - adc ZPOpDefPtr - sta ZPOpDefPtr - bcc .10 - inc ZPOpDefPtr+1 +SRC.ParseLine.AMCheck4OP + lda ZPOpDefPtr Skip nextLoHi,L,"ADC" + ldx ZPOpDefPtr+1 + clc + adc #2 Skip nextLoHi + bcc .11 + inx -.10 lda (ZPOpDefPtr) +.11 sec skip LEN Byte + ldy #2 LEN Byte + adc (ZPOpDefPtr),y + bcc .10 + inx +.10 sta ZPPtr1 + stx ZPPtr1+1 + + lda (ZPPtr1) AMID... .1 >CMP.G SRC.AMID - beq SRC.ParseLine.Emit + beq .8 - ldy #1 - lda (ZPOpDefPtr),y - inc - sec - adc ZPOpDefPtr - sta ZPOpDefPtr + lda ZPPtr1 Skip AMID,L,"39aa" + ldx ZPPtr1+1 + inc AMID.... + bne .12 + inx + +.12 sec LEN byte... + ldy #1 String... + adc (ZPPtr1),y bcc .2 - inc ZPOpDefPtr+1 -.2 lda (ZPOpDefPtr) - bne .1 + inx -.99 lda #ERR.INV.AM.4.OC +.2 sta ZPPtr1 + stx ZPPtr1+1 + lda (ZPPtr1) + bne .1 + + lda #E.INV.AM.4.OC sec rts + +.8 >LDYA ZPPtr1 + >STYA ZPOpDefPtr + clc + rts *--------------------------------------- SRC.ParseLine.Emit stz SRC.ACCTMP index in ACC @@ -532,11 +576,11 @@ SRC.ParseLine.Emit .8 clc .9 rts -.90 lda #ERR.INV.T.FILE +.90 lda #E.INV.T.FILE sec rts -.91 lda #ERR.RANGE +.91 lda #E.RANGE sec rts *--------------------------------------- @@ -545,6 +589,33 @@ SRC.AddToBuf inc SRC.AM.StrBuf sta SRC.AM.StrBuf,y rts *--------------------------------------- +SRC.ExpandAddress + ldy SRC.AM.StrBuf + +.1 lda SRC.AM.StrBuf,y + sta SRC.AM.StrBuf+1,y + + dey + + cmp #'a' + bne .1 + + ldx #2 "aa" + + tya + beq .8 + +.2 lda SRC.AM.StrBuf,y + cmp #'a' + bne .8 + + inx "aaa" +.3 dey + bne .2 + +.8 inc SRC.AM.StrBuf + rts +*--------------------------------------- SRC.ComputeRel8 jsr SRC.ComputeRel bcc .1 @@ -675,14 +746,14 @@ SRC.GetDecimal jsr SRC.GetChar inc SRC.ACC+3 bne .1 -.9 lda #ERR.VAL.TOO.BIG +.9 lda #E.VAL.TOO.BIG sec rts .8 clc rts -.99 lda #ERR.SYNTAX.ERROR +.99 lda #E.SYNTAX.ERROR sec rts *--------------------------------------- @@ -726,11 +797,11 @@ SRC.GetHex jsr SRC.GetNextChar skip '$' .8 clc rts -.9 lda #ERR.VAL.TOO.BIG +.9 lda #E.VAL.TOO.BIG sec rts -.99 lda #ERR.SYNTAX.ERROR +.99 lda #E.SYNTAX.ERROR sec rts *--------------------------------------- @@ -782,11 +853,11 @@ SRC.GetOctal jsr SRC.GetNextChar skip '&' .8 clc rts -.9 lda #ERR.VAL.TOO.BIG +.9 lda #E.VAL.TOO.BIG sec rts -.99 lda #ERR.SYNTAX.ERROR +.99 lda #E.SYNTAX.ERROR sec rts *--------------------------------------- @@ -836,11 +907,11 @@ SRC.GetBinary jsr SRC.GetNextChar skip '%' .8 clc rts -.9 lda #ERR.VAL.TOO.BIG +.9 lda #E.VAL.TOO.BIG sec rts -.99 lda #ERR.SYNTAX.ERROR +.99 lda #E.SYNTAX.ERROR sec rts *--------------------------------------- @@ -865,7 +936,7 @@ SRC.GetKeyword >STYA ZPPtr1 KeyWord table iny cmp (ZPPtr1),y - bne .6 + bne .7 dex bne .3 @@ -874,11 +945,11 @@ SRC.GetKeyword >STYA ZPPtr1 KeyWord table beq .4 End of Line ? jsr SRC.IsKeywordLetterUC - bcc .6 Additional letters... + bcc .7 Additional letters... -.4 lda ZPLinePtr +.4 lda ZPLinePtr found! clc - adc (ZPPtr1) + adc (ZPPtr1) skip KW in source line sta ZPLinePtr bcc .5 inc ZPLinePtr+1 @@ -887,15 +958,17 @@ SRC.GetKeyword >STYA ZPPtr1 KeyWord table clc rts -.6 lda (ZPPtr1) +.6 + +.7 lda (ZPPtr1) sec Add keyword Len+1 adc ZPPtr1 sta ZPPtr1 - bcc .7 + bcc .8 inc ZPPtr1+1 -.7 plx Keyword.ID +.8 plx Keyword.ID inx inx bra .1 @@ -962,8 +1035,6 @@ SRC.IsKeywordLetterUC .9 sec .99 rts -*--------------------------------------- - *--------------------------------------- SRC.IsLetterOrDigit jsr SRC.IsDigit10 @@ -1108,6 +1179,12 @@ SRC.ACC10 lda SRC.ACC ACC*2-> ACC & ACCTMP .9 rts *--------------------------------------- +DEBUG.PSTR >PUSHYA + >PUSHBI 2 + >LDYA L.MSG.PSTR + >SYSCALL printf + rts +*--------------------------------------- MAN SAVE USR/SRC/BIN/ASM.S.SRC LOAD USR/SRC/BIN/ASM.S diff --git a/BIN/ASM.S.SYM.txt b/BIN/ASM.S.SYM.txt index c3bbe615..a5593f78 100644 --- a/BIN/ASM.S.SYM.txt +++ b/BIN/ASM.S.SYM.txt @@ -24,14 +24,6 @@ SYM.Init >SYSCALL SListNew >SYSCALL getmem bcs .9 - >STYA ZPNameBuf - txa - >STA.G SYM.hNameBuf - - >LDYAI 256 - >SYSCALL getmem - bcs .9 - >STYA ZPGlobalBuf txa >STA.G SYM.hGlobalBuf @@ -41,12 +33,7 @@ SYM.Init >SYSCALL SListNew SYM.Reset >STZ.G SYM.bInGlobal rts *--------------------------------------- -SYM.Quit >LDA.G SYM.hNameBuf - beq .2 - - >SYSCALL FreeMem - -.2 >LDA.G SYM.hGlobalBuf +SYM.Quit >LDA.G SYM.hGlobalBuf beq .3 >SYSCALL FreeMem @@ -56,7 +43,13 @@ SYM.Quit >LDA.G SYM.hNameBuf >SYSCALL SListFree SYM.Quit.8 clc -SYM.Quit.RTS rts + rts +*--------------------------------------- +SYM.Dump.End >PUSHW ZPPtr2 + >PUSHBI 2 + >LDYA L.MSG.SUMMARY + jmp OUT.Print +SYM.Dump.RTS rts *--------------------------------------- SYM.Dump >LDA.G ASM.LI.ON bpl SYM.Quit.8 @@ -70,11 +63,11 @@ SYM.Dump >LDA.G ASM.LI.ON .1 >LDYA ZPPtr2 >STYA ZPPtr1 - >PUSHW ZPNameBuf + >PUSHW ZPTmpBuf >PUSHW ZPPtr1 >LDA.G SYM.hGlobalList >SYSCALL SListGetByID - bcs SYM.Quit.8 + bcs SYM.Dump.End >STYA ZPPtr2 Save Next ID @@ -85,7 +78,7 @@ SYM.Dump >LDA.G ASM.LI.ON >LDA.G SYM.hGlobalList >SYSCALL SListGetData - bcs SYM.Quit.RTS + bcs SYM.Dump.RTS ldy #SYMG.SIZE Get Symbol Size lda (ZPGlobalBuf),y @@ -112,7 +105,7 @@ SYM.Dump >LDA.G ASM.LI.ON >SYSCALL printf >PUSHBI 0 - >LDYA ZPNameBuf Label + >LDYA ZPTmpBuf Label >SYSCALL printf lda (ZPGlobalBuf) @@ -187,7 +180,7 @@ SYM.NewGlobal jsr SYM.StoreGlobal clc rts -.9 lda #ERR.SYMBOL.REDEF +.9 lda #E.SYMBOL.REDEF sec .99 rts *--------------------------------------- @@ -217,7 +210,7 @@ SYM.GetGlobal >PUSHW ZPLinePtr Pass #2: should be already defined... * clc rts -.9 lda #ERR.UNDEF.SYMBOL +.9 lda #E.UNDEF.SYMBOL sec .99 rts *--------------------------------------- @@ -262,7 +255,7 @@ SYM.LookupGlobal >SYSCALL SListGetData rts -.9 lda #ERR.UNDEF.SYMBOL +.9 lda #E.UNDEF.SYMBOL sec rts *--------------------------------------- @@ -331,9 +324,9 @@ SYM.Acc2Global ldy #SYMG-1 .2 lda SRC.ACC.F,y sta (ZPGlobalBuf),y - dey bpl .2 + rts *--------------------------------------- * Local Symbol Record: (5 bytes) @@ -347,7 +340,7 @@ SYM.NewOrGetLocalA bpl .91 >LDA.G ASM.PASS Pass #2: should be already defined... - bne SYM.GetLocalX + bne .8 jsr SYM.GetLocalX Pass #1; try to add bcc .9 Already Defined @@ -385,18 +378,22 @@ SYM.NewOrGetLocalA lda #0 sta (ZPGlobalBuf),y - clc + lda (ZPGlobalBuf) + ora #SYMG.F.LOCALS + sta (ZPGlobalBuf) + +.8 clc rts -.91 lda #ERR.INV.LABEL +.91 lda #E.INV.LABEL sec rts -.90 lda #ERR.TOO.MANY.LOCAL +.90 lda #E.TOO.MANY.LOCAL sec rts -.9 lda #ERR.SYMBOL.REDEF +.9 lda #E.SYMBOL.REDEF sec rts *--------------------------------------- @@ -404,7 +401,7 @@ SYM.GetLocalX lda (ZPGlobalBuf) and #SYMG.F.LOCALS beq .9 - ldy #SYML + ldy #SYMG .1 lda (ZPGlobalBuf),y beq .9 @@ -413,15 +410,18 @@ SYM.GetLocalX lda (ZPGlobalBuf) cmp (ZPGlobalBuf),y bne .3 - ldx #4 - stx SRC.ACC.SIZE + ldx #0 .2 iny lda (ZPGlobalBuf),y - sta SRC.ACC.SIZE,x - dex + sta SRC.ACC,x + inx + cpx #4 bne .2 + lda #2 + sta SRC.ACC.SIZE + clc rts @@ -431,7 +431,7 @@ SYM.GetLocalX lda (ZPGlobalBuf) tay bne .1 -.9 lda #ERR.UNDEF.SYMBOL +.9 lda #E.UNDEF.SYMBOL sec rts *--------------------------------------- diff --git a/BIN/ASM.S.txt b/BIN/ASM.S.txt index 2fd1ab8e..ab34552b 100644 --- a/BIN/ASM.S.txt +++ b/BIN/ASM.S.txt @@ -4,10 +4,13 @@ AUTO 4,1 .LIST OFF .OP 65C02 .OR $2000 - .TF BIN/DEV/ASM + .TF BIN/ASM +*--------------------------------------- +PAGE.LEN .EQ 23 *--------------------------------------- .INB INC/MACROS.I .INB INC/A2OSX.I + .INB INC/MLI.E.I *--------------------------------------- .DUMMY .OR ZPBIN @@ -15,9 +18,9 @@ ZS.START ZPPtr1 .BS 2 ZPPtr2 .BS 2 +ZPTmpBuf .BS 2 ZPLineBuf .BS 2 ZPLinePtr .BS 2 -ZPNameBuf .BS 2 ZPGlobalBuf .BS 2 ZPMacroBuf .BS 2 @@ -28,7 +31,6 @@ ZPRPtr .BS 2 ZPOpsPtr .BS 2 ZPOpDefPtr .BS 2 -ZPTmpBuf .BS 2 ZS.END .ED *--------------------------------------- * Symbols @@ -60,33 +62,34 @@ DO.MAXDEPTH .EQ 8 IN.MAXDEPTH .EQ 7 MA.MAXDEPTH .EQ 8 *--------------------------------------- -ERR.INV.ARGS .EQ $80 -ERR.INV.T.FILE .EQ $81 -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.INV.LABEL .EQ $A4 -ERR.INV.DIR .EQ $A5 -ERR.INV.OPCODE .EQ $A6 -ERR.INV.AM.SYN .EQ $A7 -ERR.INV.AM .EQ $A8 -ERR.INV.AM.4.OC .EQ $A9 -ERR.RANGE .EQ $AA -ERR.UNDEF.SYMBOL .EQ $AB -ERR.SYMBOL.REDEF .EQ $AC -ERR.TOO.MANY.DO .EQ $AD -ERR.ELSE.WITHOUT.DO .EQ $AE -ERR.TOO.MANY.LOCAL .EQ $AF -ERR.MISSING.EXP .EQ $B0 -ERR.EXP.SYN.ERROR .EQ $B1 -ERR.MACRO.INV.DEF .EQ $E0 -ERR.MACRO.TOO.BIG .EQ $E1 -ERR.MACRO.INV .EQ $E2 -ERR.MACRO.TOO.MANY .EQ $E3 +E.SYNTAX.ERROR .EQ $A0 +E.SYM.TOO.LONG .EQ $A1 +E.VAL.TOO.BIG .EQ $A2 +E.LINE.TOO.LONG .EQ $A3 +E.INV.LABEL .EQ $A4 +E.INV.DIR .EQ $A5 +E.INV.OPCODE .EQ $A6 +E.INV.AM.SYN .EQ $A7 +E.INV.AM .EQ $A8 +E.INV.AM.4.OC .EQ $A9 +E.RANGE .EQ $AA +E.UNDEF.SYMBOL .EQ $AB +E.SYMBOL.REDEF .EQ $AC +E.TOO.MANY.DO .EQ $AD +E.ELSE.WITHOUT.DO .EQ $AE +E.TOO.MANY.LOCAL .EQ $AF +E.MISSING.EXP .EQ $B0 +E.EXP.SYN.ERROR .EQ $B1 +E.MACRO.INV.DEF .EQ $B2 +E.MACRO.TOO.BIG .EQ $B3 +E.MACRO.INV .EQ $B4 +E.MACRO.TOO.MANY .EQ $B5 +* +E.INV.ARGS .EQ $BA +E.INV.T.FILE .EQ $BC +E.SRC.INV.TYPE .EQ $BD +E.SRC.TOO.MANY.IN .EQ $BE +E.SRC.UNEXP.EOF .EQ $BF *-------------------------------------- * File Header (16 Bytes) *-------------------------------------- @@ -118,13 +121,16 @@ L.MSG.EQU0 .DA MSG.EQU0 .DA MSG.EQU2 .DA MSG.EQU3 .DA MSG.EQU4 -L.MSG.LSYMBOL .DA MSG.LSYMBOL +L.MSG.PASS .DA MSG.PASS L.MSG.SRCLINE .DA MSG.SRCLINE L.MSG.ERROR .DA MSG.ERROR L.MSG.SYMBOLS .DA MSG.SYMBOLS -L.MSG.CRLF .DA MSG.CRLF +L.MSG.LSYMBOL .DA MSG.LSYMBOL L.MSG.SUMMARY .DA MSG.SUMMARY -L.MSG.PASS .DA MSG.PASS +L.MSG.END .DA MSG.END +L.MSG.PSTR .DA MSG.PSTR +L.MSG.CRLF .DA MSG.CRLF +L.MSG.ACC .DA MSG.ACC L.MSG.SRC.FILE .DA MSG.SRC.FILE L.MSG.OBJ.FILE .DA MSG.OBJ.FILE L.MSG.T.FILE .DA MSG.T.FILE @@ -244,7 +250,7 @@ CS.INIT ldy #S.PS.ARGC .99 >PUSHBI 0 >LDYA L.MSG.HELP >SYSCALL printf - lda #ERR.INV.ARGS + lda #E.INV.ARGS sec .9 rts *-------------------------------------- @@ -304,16 +310,18 @@ CS.RUN ldy #S.PS.hStdIn .10 jsr FIO.ReadLine bcc .2 - cmp #$4C End Of File? + cmp #MLI.E.EOF End Of File? bne .9 jsr FIO.FileClose - ldy #SRC.COUNT end of root file ? - lda (pData),y - bne .8 no continue back to previous file - - >LDA.G ASM.PASS End of pass #2 ?? + >LDA.G SRC.COUNT end of root file ? + bne .8 no continue back to previous file + + >DEBUG + jsr SYM.StoreGlobal Make sure last Global flushed + + >LDA.G ASM.PASS End of pass #2 ?? bne .1 inc sta (pData),y @@ -322,12 +330,10 @@ CS.RUN ldy #S.PS.hStdIn .1 jsr SYM.Dump - >PUSHW ZPLinePtr - >PUSHBI 2 - >LDYA L.MSG.SUMMARY - jsr OUT.Print + >LDYA L.MSG.END + >SYSCALL puts - lda #0 End of assembly, exit with no error + lda #0 End of assembly, exit with no error sec rts @@ -341,7 +347,8 @@ CS.RUN ldy #S.PS.hStdIn .9 pha jsr OUT.PrintLineErr - + >DEBUG + jsr SYM.StoreGlobal Make sure last Global flushed jsr SYM.Dump pla sec @@ -456,12 +463,15 @@ MSG.EQU1 .AZ " [ %h] " MSG.EQU2 .AZ " [ %h%h] " MSG.EQU3 .AZ " [ %h%h%h] " MSG.EQU4 .AZ " [%h%h%h%h] " -MSG.LSYMBOL .AZ " .%d=%h%h%h%h" MSG.SRCLINE .AZ " %05D %s\r\n" MSG.ERROR .AZ "**** Fatal Error $%h" MSG.SYMBOLS .AZ "Symbol Table:" -MSG.CRLF .AZ " \r\n" -MSG.SUMMARY .AZ "\r\nSymbol Table Size : %5D Bytes.\r\nEnd Of Assembly.\r\n" +MSG.LSYMBOL .AZ " .%d=%h%h%h%h" +MSG.SUMMARY .AZ "\r\nSymbol Table Size : %5D Bytes.\r\n" +MSG.END .AZ "End Of Assembly." +MSG.PSTR .AS "{%S}" +MSG.CRLF .AZ "\r\n" +MSG.ACC .AZ "%b,%d,%h%h%h%h\r\n" SRC.MOD.RESERVED >PSTR "#/^<>" SRC.EXP.RESERVED >PSTR "^!|&<=>+-*/" SRC.AM.RESERVED >PSTR "[]()," @@ -538,8 +548,6 @@ SYM.GlobalID .BS 2 SYM.hGlobalBuf .BS 1 SYM.GlobalPtr .BS 1 -SYM.hNameBuf .BS 1 - SYM.LookupID .BS 2 MAC.hMacroList .BS 1 diff --git a/BIN/ASM.T.65816.A.txt b/BIN/ASM.T.65816.A.txt index 90f1bb10..a21dff5f 100644 --- a/BIN/ASM.T.65816.A.txt +++ b/BIN/ASM.T.65816.A.txt @@ -1,5 +1,5 @@ NEW -PREFIX /A2OSX.BUILD + PREFIX AUTO 4,1 *--------------------------------------- T.ADDR.MODES .EQ * diff --git a/BIN/ASM.T.65816.O.txt b/BIN/ASM.T.65816.O.txt index 57d9898e..6e8f4f8f 100644 --- a/BIN/ASM.T.65816.O.txt +++ b/BIN/ASM.T.65816.O.txt @@ -1,5 +1,5 @@ NEW -PREFIX /A2OSX.BUILD + PREFIX AUTO 4,1 *--------------------------------------- T.OPCODES .EQ * diff --git a/BIN/ASM.T.65816.S.txt b/BIN/ASM.T.65816.S.txt index 03c3871a..42bb22e0 100644 --- a/BIN/ASM.T.65816.S.txt +++ b/BIN/ASM.T.65816.S.txt @@ -1,5 +1,5 @@ NEW -PREFIX /A2OSX.BUILD + PREFIX AUTO 4,1 .LIST OFF .OR $0 diff --git a/BIN/ASM.T.65C02.A.txt b/BIN/ASM.T.65C02.A.txt index 51257bd8..638ef6da 100644 --- a/BIN/ASM.T.65C02.A.txt +++ b/BIN/ASM.T.65C02.A.txt @@ -1,5 +1,5 @@ NEW -PREFIX /A2OSX.BUILD + PREFIX AUTO 4,1 *--------------------------------------- T.ADDR.MODES .EQ * diff --git a/BIN/ASM.T.65C02.O.txt b/BIN/ASM.T.65C02.O.txt index 2d3784f2..98f9b9bd 100644 --- a/BIN/ASM.T.65C02.O.txt +++ b/BIN/ASM.T.65C02.O.txt @@ -1,5 +1,5 @@ NEW -PREFIX /A2OSX.BUILD + PREFIX AUTO 4,1 *--------------------------------------- T.OPCODES .EQ * diff --git a/BIN/ASM.T.65C02.S.txt b/BIN/ASM.T.65C02.S.txt index 865eefb3..173560f7 100644 --- a/BIN/ASM.T.65C02.S.txt +++ b/BIN/ASM.T.65C02.S.txt @@ -1,5 +1,5 @@ NEW -PREFIX /A2OSX.BUILD + PREFIX AUTO 4,1 .LIST OFF .OR $0 diff --git a/BIN/ASM.T.65R02.A.txt b/BIN/ASM.T.65R02.A.txt index 48557415..7457bfcb 100644 --- a/BIN/ASM.T.65R02.A.txt +++ b/BIN/ASM.T.65R02.A.txt @@ -1,5 +1,5 @@ NEW -PREFIX /A2OSX.BUILD + PREFIX AUTO 4,1 *--------------------------------------- T.ADDR.MODES .EQ * diff --git a/BIN/ASM.T.65R02.O.txt b/BIN/ASM.T.65R02.O.txt index c817883b..38dc4c51 100644 --- a/BIN/ASM.T.65R02.O.txt +++ b/BIN/ASM.T.65R02.O.txt @@ -1,5 +1,5 @@ NEW -PREFIX /A2OSX.BUILD + PREFIX AUTO 4,1 *--------------------------------------- T.OPCODES .EQ * diff --git a/BIN/ASM.T.65R02.S.txt b/BIN/ASM.T.65R02.S.txt index 8ac63ba2..50a703ba 100644 --- a/BIN/ASM.T.65R02.S.txt +++ b/BIN/ASM.T.65R02.S.txt @@ -1,5 +1,5 @@ NEW -PREFIX /A2OSX.BUILD + PREFIX AUTO 4,1 .LIST OFF .OR $0 diff --git a/BIN/ASM.T.SW16.A.txt b/BIN/ASM.T.SW16.A.txt index 2fe915f3..4bf42bc3 100644 --- a/BIN/ASM.T.SW16.A.txt +++ b/BIN/ASM.T.SW16.A.txt @@ -1,5 +1,5 @@ NEW -PREFIX + PREFIX AUTO 4,1 *--------------------------------------- T.ADDR.MODES .EQ * @@ -58,6 +58,6 @@ T.REGISTERS .EQ * .HS 00 *--------------------------------------- MAN -SAVE /A2OSX.BUILD/BIN/DEV/ASM.T.SW16.A -LOAD /A2OSX.BUILD/BIN/DEV/ASM.T.SW16.S +SAVE USR/SRC/BIN/ASM.T.SW16.A +LOAD USR/SRC/BIN/ASM.T.SW16.S ASM diff --git a/BIN/ASM.T.SW16.O.txt b/BIN/ASM.T.SW16.O.txt index a8837db6..1a2934b6 100644 --- a/BIN/ASM.T.SW16.O.txt +++ b/BIN/ASM.T.SW16.O.txt @@ -1,5 +1,5 @@ NEW -PREFIX + PREFIX AUTO 4,1 *--------------------------------------- T.OPCODES .EQ * @@ -337,6 +337,6 @@ SUB.E .HS 00 .HS 0000 *--------------------------------------- MAN -SAVE /A2OSX.BUILD/BIN/DEV/ASM.T.SW16.O -LOAD /A2OSX.BUILD/BIN/DEV/ASM.T.SW16.S +SAVE USR/SRC/BIN/ASM.T.SW16.O +LOAD USR/SRC/BIN/ASM.T.SW16.S ASM diff --git a/BIN/ASM.T.SW16.S.txt b/BIN/ASM.T.SW16.S.txt index e1bcf4ac..cc33ef9c 100644 --- a/BIN/ASM.T.SW16.S.txt +++ b/BIN/ASM.T.SW16.S.txt @@ -1,5 +1,5 @@ NEW -PREFIX + PREFIX AUTO 4,1 .LIST OFF .OR $0 @@ -9,9 +9,9 @@ AUTO 4,1 .DA T.REGISTERS .DA T.OPCODES *--------------------------------------- - .INB BIN/DEV/ASM.T.SW16.O - .INB BIN/DEV/ASM.T.SW16.A + .INB USR/SRC/BIN/ASM.T.SW16.O + .INB USR/SRC/BIN/ASM.T.SW16.A *--------------------------------------- MAN -SAVE /A2OSX.BUILD/BIN/DEV/ASM.T.SW16.S +SAVE USR/SRC/BIN/ASM.T.SW16.S ASM diff --git a/BIN/ASM.T.Z80.A.txt b/BIN/ASM.T.Z80.A.txt index 4791725a..d292171b 100644 --- a/BIN/ASM.T.Z80.A.txt +++ b/BIN/ASM.T.Z80.A.txt @@ -1,5 +1,5 @@ NEW -PREFIX /A2OSX.BUILD + PREFIX AUTO 4,1 *--------------------------------------- T.ADDR.MODES .EQ * diff --git a/BIN/ASM.T.Z80.O.txt b/BIN/ASM.T.Z80.O.txt index 8dfea739..30077b37 100644 --- a/BIN/ASM.T.Z80.O.txt +++ b/BIN/ASM.T.Z80.O.txt @@ -1,5 +1,5 @@ NEW -PREFIX /A2OSX.BUILD + PREFIX AUTO 4,1 *--------------------------------------- T.OPCODES .EQ * diff --git a/BIN/ASM.T.Z80.S.txt b/BIN/ASM.T.Z80.S.txt index 0adb5fd9..e5579262 100644 --- a/BIN/ASM.T.Z80.S.txt +++ b/BIN/ASM.T.Z80.S.txt @@ -1,5 +1,5 @@ NEW -PREFIX /A2OSX.BUILD + PREFIX AUTO 4,1 .LIST OFF .OR $0 diff --git a/BIN/MEMDUMP.S.txt b/BIN/MEMDUMP.S.txt index ab13d5b2..0030f7f3 100644 --- a/BIN/MEMDUMP.S.txt +++ b/BIN/MEMDUMP.S.txt @@ -1,10 +1,10 @@ NEW -PREFIX + PREFIX AUTO 4,1 .LIST OFF .OP 65C02 .OR $2000 - .TF BIN/DEV/MEMDUMP + .TF BIN/MEMDUMP *-------------------------------------- .INB INC/MACROS.I .INB INC/A2OSX.I diff --git a/BIN/RPCDUMP.S.txt b/BIN/RPCDUMP.S.txt index 653a6e7c..613ceffe 100644 --- a/BIN/RPCDUMP.S.txt +++ b/BIN/RPCDUMP.S.txt @@ -1,10 +1,10 @@ NEW -PREFIX + PREFIX AUTO 4,1 .LIST OFF .OP 65C02 .OR $2000 - .TF BIN/DEV/RPCDUMP + .TF BIN/RPCDUMP *-------------------------------------- .INB INC/MACROS.I .INB INC/A2OSX.I