diff --git a/.Floppies/A2OSX.BUILD.po b/.Floppies/A2OSX.BUILD.po index b648799f..a3af18ea 100644 Binary files a/.Floppies/A2OSX.BUILD.po and b/.Floppies/A2OSX.BUILD.po differ diff --git a/BIN/ASM.S.DIR.txt b/BIN/ASM.S.DIR.txt index 27d919f4..7ff4c8bc 100644 --- a/BIN/ASM.S.DIR.txt +++ b/BIN/ASM.S.DIR.txt @@ -39,7 +39,7 @@ DIR.BS jsr EXP.Eval stz DIR.Byte - jsr SRC.GetChar + jsr SRC.GetNextChar beq .1 cmp #' ' beq .1 @@ -134,7 +134,7 @@ DIR.ED clc DIR.EL clc rts *--------------------------------------- -DIR.EM lda #ERR.INVALID.MACRO.DEF +DIR.EM lda #ERR.INV.MACRO.DEF sec rts *--------------------------------------- @@ -168,7 +168,7 @@ DIR.EP ldy #ASM.PH.ON clc rts -.9 lda #ERR.INVALID.DIRECTIVE +.9 lda #ERR.INV.DIRECTIVE sec rts *--------------------------------------- @@ -198,22 +198,22 @@ DIR.FI ldy #ASM.DO.Count .1 clc rts -.99 lda #ERR.INVALID.DIRECTIVE +.99 lda #ERR.INV.DIRECTIVE sec rts *--------------------------------------- DIR.HS clc rts *--------------------------------------- -DIR.IN jsr SRC.GetArg +DIR.IN jsr SRC.CheckBlank bcs .9 - >LDYA L.SRC.BUFFER - >SYSCALL NewStr.YA + >LDYA ZPLinePtr + >SYSCALL RealPath.YA phx - jsr FIO.OpenFileA + jsr FIO.OpenFile plx php pha @@ -230,15 +230,14 @@ DIR.IN jsr SRC.GetArg sec rts *--------------------------------------- -DIR.LI >LDYA L.T.LI +DIR.LI jsr SRC.GetNextCharNB + beq DIR.LI.9 + + >LDYA L.T.LI jsr SRC.GetKeyword - bcc .1 + bcs DIR.LI.9 - lda #ERR.SYNTAX.ERROR - sec - rts - -.1 jmp (J.LI,x) + jmp (J.LI,x) DIR.LI.CON ldy #ASM.LI.CON sec @@ -261,14 +260,18 @@ DIR.LI.APPLY lsr sta (pData),y rts + +DIR.LI.9 lda #ERR.SYNTAX.ERROR + sec + rts *--------------------------------------- -DIR.MA jsr SRC.GetArg +DIR.MA jsr SRC.CheckBlank Get Macro Name bcs .9 .1 jsr FIO.ReadLine bcs .99 - lda UsrBuf256 + lda (ZPLineBuf) beq .1 cmp #'*' Comment? @@ -279,21 +282,21 @@ DIR.MA jsr SRC.GetArg cmp #' ' no label...go scan dir/opcode beq .3 -.2 jsr SRC.GetChar skip label +.2 jsr SRC.GetNextChar skip label beq .8 cmp #' ' bne .2 -.3 jsr SRC.GetCharNB Scan for an Opcode... +.3 jsr SRC.GetNextCharNB Scan for an Opcode... beq .8 cmp #'.' bne .8 - jsr SRC.GetChar + jsr SRC.GetNextChar beq .8 cmp #'E' bne .8 - jsr SRC.GetChar + jsr SRC.GetNextChar beq .8 cmp #'M' bne .8 @@ -310,32 +313,25 @@ DIR.MA jsr SRC.GetArg clc rts -.9 lda #ERR.INVALID.MACRO.DEF +.9 lda #ERR.INV.MACRO.DEF sec .99 rts *--------------------------------------- -DIR.OP jsr SRC.GetArg - bcs .9 +DIR.OP jsr SRC.GetNextCharNB + beq DIR.OP.SYNERR - ldx SRC.Buffer - lda ASM.T.FILENAMELEN - adc SRC.Buffer - sta ASM.T.FILENAME - tay - -.1 lda SRC.Buffer,x - sta ASM.T.FILENAME,y - dey - dex - bne .1 + >LDYA ZPLinePtr jmp FIO.LOAD.ASM.T -.9 lda #ERR.SYNTAX.ERROR +DIR.OP.SYNERR lda #ERR.SYNTAX.ERROR sec rts *--------------------------------------- -DIR.OR jsr EXP.Eval +DIR.OR jsr SRC.GetNextCharNB + beq DIR.OP.SYNERR + + jsr EXP.Eval bcs .9 ldy #ASM.PC @@ -380,7 +376,7 @@ DIR.PH ldy #ASM.PH.ON jmp DIR.OR -.9 lda #ERR.INVALID.DIRECTIVE +.9 lda #ERR.INV.DIRECTIVE sec rts *--------------------------------------- diff --git a/BIN/ASM.S.EXP.txt b/BIN/ASM.S.EXP.txt index cd848860..989f71d0 100644 --- a/BIN/ASM.S.EXP.txt +++ b/BIN/ASM.S.EXP.txt @@ -14,7 +14,7 @@ EXP.Eval stz EXP.Operator stz EXP.Modifier - jsr SRC.GetCharNB + lda (ZPLinePtr) beq EXP.Eval.Missing jsr SRC.IsMODReserved @@ -27,7 +27,7 @@ EXP.Eval.Missing lda #ERR.MISSING.EXP sec rts -EXP.Eval.Next jsr SRC.GetCharUC +EXP.Eval.Next jsr SRC.GetNextCharUC beq EXP.Eval.Missing EXP.Eval.Next1 cmp #'.' Local Label? @@ -56,7 +56,6 @@ EXP.Eval.Next1 cmp #'.' Local Label? .10 jsr SRC.IsDigit10 Decimal constant ? bcs .1 - dec SRC.BufPtr jsr SRC.GetDecimal bcs EXP.EvalExitSYN @@ -64,6 +63,10 @@ EXP.Eval.Next1 cmp #'.' Local Label? .1 cmp #'$' Hex? bne .2 + >DEBUG + + jsr SRC.GetNextChar + beq EXP.EvalExitSYN jsr SRC.GetHex bcs EXP.EvalExitSYN @@ -87,10 +90,10 @@ EXP.Eval.Next1 cmp #'.' Local Label? .4 cmp #''' bne .43 - jsr SRC.GetChar + jsr SRC.GetNextChar beq EXP.EvalExitSYN jsr EXP.SetAccA - jsr SRC.GetChar + jsr SRC.GetNextChar beq EXP.EvalOperator cmp #''' bne EXP.EvalExitSYN @@ -98,11 +101,11 @@ EXP.Eval.Next1 cmp #'.' Local Label? .43 cmp '"' bne .42 - jsr SRC.GetChar + jsr SRC.GetNextChar beq EXP.EvalExitSYN ora #$80 jsr EXP.SetAccA - jsr SRC.GetChar + jsr SRC.GetNextChar beq EXP.EvalOperator cmp #'"' bne EXP.EvalExitSYN @@ -110,15 +113,12 @@ EXP.Eval.Next1 cmp #'.' Local Label? .42 jsr SRC.IsLetter Symbol ? bcs EXP.EvalExitSYN - dec SRC.BufPtr + jsr EXP.GetSymbol bcs EXP.EvalExitRTS bra EXP.EvalOperator - - -EXP.EvalExitOK dec SRC.BufPtr Back One Char -EXP.EvalExitOK1 clc +EXP.EvalExitOK clc EXP.EvalExitRTS rts EXP.EvalExitSYN lda #ERR.SYNTAX.ERROR @@ -136,8 +136,8 @@ EXP.EvalOperator lda EXP.Operator jsr EXP.Compute bcs EXP.EvalExitRTS -.7 jsr SRC.GetChar - beq EXP.EvalExitOK1 +.7 jsr SRC.GetNextChar + beq EXP.EvalExitOK cmp #' ' beq EXP.EvalExitOK diff --git a/BIN/ASM.S.FIO.txt b/BIN/ASM.S.FIO.txt index 947af4f5..e946fb21 100644 --- a/BIN/ASM.S.FIO.txt +++ b/BIN/ASM.S.FIO.txt @@ -2,37 +2,55 @@ NEW PREFIX /A2OSX.BUILD AUTO 4,1 *--------------------------------------- -FIO.Init ldy #S.PS.hARGS +FIO.Init >LDYA L.ASM.6502 +FIO.LOAD.ASM.T >STYA ZPPtr2 + + ldy #S.PS.hARGS lda (pPS),y >SYSCALL GetMemPtr.A >STYA ZPPtr1 ldy #$ff + ldx #$ff -.2 iny - lda (ZPPtr1),y - sta ASM.T.FILENAME,y - bne .2 - - ldx #0 - -.3 lda ASM.T.DEFAULT,x - sta ASM.T.FILENAME,y - beq FIO.LOAD.ASM.T +.1 iny inx - iny - bra .3 -*--------------------------------------- -FIO.LOAD.ASM.T ldy #ASM.T.hMem + lda (ZPPtr1),y + sta ASM.T.FILENAME,x + bne .1 + + lda #'.' + sta ASM.T.FILENAME,x + + inx + + lda #'T' + sta ASM.T.FILENAME,x + + inx + + lda #'.' + sta ASM.T.FILENAME,x + + ldy #$ff + +.3 iny + inx + lda (ZPPtr2),y + sta ASM.T.FILENAME,x + bne .3 + + ldy #ASM.T.hMem lda (pData),y - beq .1 + beq .4 + >SYSCALL FreeMem.A ldy #ASM.T.hMem lda #0 sta (pData),y -.1 >PUSHW L.ASM.T.FILENAME +.4 >PUSHW L.ASM.T.FILENAME >LDYA L.MSG.T.FILE >SYSCALL PrintF.YA @@ -49,8 +67,7 @@ FIO.LOAD.ASM.T ldy #ASM.T.hMem .9 rts *--------------------------------------- -FIO.OpenFileA >SYSCALL GetMemPtr.A - >STYA ZPPtr1 +FIO.OpenFile >STYA ZPPtr1 >PUSHW ZPPtr1 >LDYA L.MSG.SRC.FILE @@ -121,7 +138,8 @@ FIO.OpenFileA >SYSCALL GetMemPtr.A sec .99 rts *--------------------------------------- -FIO.ReadLine stz SRC.BufPtr +FIO.ReadLine >LDYA ZPLineBuf + >STYA ZPLinePtr ldy #SRC.COUNT lda (pData),y @@ -131,81 +149,94 @@ FIO.ReadLine stz SRC.BufPtr lda (pData),y bmi .10 + >PUSHW ZPLineBuf >PUSHWI 256 - >PUSHWI UsrBuf256 jsr FIO.ReadFromFile bcs .19 lda #0 replace ending $0D with $00 - sta UsrBuf256,y + sta (ZPLineBuf),y .19 rts - -.10 >PUSHWI 3 - >PUSHW L.SRC.Buffer +*--------------------------------------- +.10 >PUSHW ZPTmpBuf + >PUSHWI 3 jsr FIO.ReadFromFile - bcs .9 + bcs .19 - lda SRC.Buffer+1 + ldy #1 + lda (ZPTmpBuf),y sta SRC.LINENUM - lda SRC.Buffer+2 + iny + lda (ZPTmpBuf),y sta SRC.LINENUM+1 - lda SRC.Buffer LEN + lda (ZPTmpBuf) LEN sec sbc #3 bcc .9 LEN should be at least 3 tay + >PUSHW ZPTmpBuf lda #0 >PUSHYA - >PUSHW L.SRC.BUFFER jsr FIO.ReadFromFile + bcs .9 + + >LDYA ZPTmpBuf + >STYA ZPPtr1 ldy #0 - ldx #0 -.1 lda SRC.Buffer,y +.1 lda (ZPPtr1) + inc ZPPtr1 + bne .11 + inc ZPPtr1+1 + +.11 tax bmi .2 - sta UsrBuf256,x + sta (ZPLineBuf),y beq .8 Ending 00 - inx - beq .99 + iny bne .1 bra .99 .2 cmp #$C0 REPEAT char? bne .5 - iny - beq .99 - lda SRC.Buffer,y - iny - beq .99 -.3 pha - lda SRC.Buffer,y - sta UsrBuf256,x - pla - inx - beq .99 - dec + + lda (ZPPtr1) Get Repeat Count + inc ZPPtr1 bne .3 + inc ZPPtr1+1 + +.3 tax + + lda (ZPPtr1) Get Repeat Char + inc ZPPtr1 + bne .3 + inc ZPPtr1+1 + +.4 sta (ZPLineBuf),y + iny - bne .1 + beq .99 + dex + bne .4 + bra .99 .5 and #$3F Compute blank count -.6 pha + tax lda #$20 - sta UsrBuf256,x - pla - inx - beq .99 - dec - bne .6 + +.6 sta (ZPLineBuf),y iny - bne .1 - bra .99 + beq .99 + + dex + bne .6 + bra .1 .8 clc .9 rts @@ -223,8 +254,10 @@ FIO.ReadFromFile ldy #SRC.COUNT >PUSHA >SYSCALL FRead bcs .9 + tax $100 byte transfered ? beq .9 + lda #ERR.LINE.TOO.LONG sec .9 rts diff --git a/BIN/ASM.S.SRC.txt b/BIN/ASM.S.SRC.txt index aac3c67e..5de2f78e 100644 --- a/BIN/ASM.S.SRC.txt +++ b/BIN/ASM.S.SRC.txt @@ -2,20 +2,17 @@ NEW PREFIX /A2OSX.BUILD AUTO 4,1 *--------------------------------------- -SRC.PrintLine ldy #ASM.MACRO.ON - lda (pData),y +SRC.PrintLine >LDA.G ASM.MACRO.ON bpl .1 - ldy #ASM.LI.CON - lda (pData),y + >LDA.G ASM.LI.CON bpl .9 bmi .8 -.1 ldy #ASM.LI.ON - lda (pData),y - bpl .9 +.1 >LDA.G ASM.LI.ON +* bpl .9 -.8 >PUSHWI UsrBuf256 +.8 >PUSHW ZPLineBuf >PUSHW SRC.LINENUM ldy #ASM.PC+1 >PUSHB (pData),y @@ -25,49 +22,52 @@ SRC.PrintLine ldy #ASM.MACRO.ON >SYSCALL PrintF.YA .9 rts *--------------------------------------- -SRC.PrintLineErr ldx #0 -.1 lda UsrBuf256,x - beq .2 - phx +SRC.PrintLineErr >LDYA ZPLineBuf + >SYSCALL PrintF.YA + bcs .9 + + lda #13 >SYSCALL PutChar.A - plx - inx - bcc .1 - rts - -.2 lda #13 + bcs .9 + + lda #10 >SYSCALL PutChar.A bcs .9 - ldx #0 -.3 lda UsrBuf256,x - beq .5 - inx - cpx SRC.BufPtr + lda ZPLinePtr + sec + sbc ZPLineBuf + tax beq .4 - phx + +.3 phx lda #'-' >SYSCALL PutChar.A plx bcs .9 - bra .3 + dex + bne .3 .4 lda #'^' - phx + phy >SYSCALL PutChar.A - plx + ply bcs .9 .5 lda #13 >SYSCALL PutChar.A + lda #10 + >SYSCALL PutChar.A + .9 rts *--------------------------------------- -SRC.ParseLine ldx UsrBuf256 +SRC.ParseLine lda (ZPLineBuf) + tax beq .1 - cpx #'*' Comment? + cmp #'*' Comment? beq .1 - cpx #';' Comment? + cmp #';' Comment? beq .1 ldy #ASM.DO.ON @@ -91,12 +91,14 @@ SRC.ParseLine ldx UsrBuf256 .2 jsr SRC.ParseLine.SymG .3 bcs SRC.ParseLine.Err -.4 jsr SRC.GetCharNB Scan for an Opcode... +.4 jsr SRC.GetNextCharNB Scan for an Opcode... beq SRC.ParseLine.Ok cmp #'.' bne .5 + jsr SRC.GetNextChar Skip . + jsr SRC.ParseLine.Dir bcs SRC.ParseLine.Err bra SRC.ParseLine.Ok @@ -108,11 +110,9 @@ SRC.ParseLine ldx UsrBuf256 bcs SRC.ParseLine.Err bra SRC.ParseLine.Ok -.6 dec SRC.BufPtr Back one char... - jsr SRC.ParseLine.OpCode +.6 jsr SRC.ParseLine.OpCode bcs SRC.ParseLine.Err - SRC.ParseLine.Ok lda SRC.GLabel.New bpl .8 @@ -146,7 +146,7 @@ SRC.ParseLine.Ok lda SRC.GLabel.New .8 clc rts -SRC.ParseLine.Inv lda #ERR.INVALID.LABEL +SRC.ParseLine.Inv lda #ERR.INV.LABEL SRC.ParseLine.Err sec rts @@ -154,13 +154,13 @@ SRC.ParseLine.Redef lda #ERR.SYMBOL.REDEFINE sec rts *--------------------------------------- -SRC.ParseLine.SymP jsr SRC.GetChar +SRC.ParseLine.SymP jsr SRC.GetNextChar beq SRC.ParseLine.SymE jsr SRC.GetDecimal bcs SRC.ParseLine.SymE jmp SYM.AddPrivate *--------------------------------------- -SRC.ParseLine.SymL jsr SRC.GetChar +SRC.ParseLine.SymL jsr SRC.GetNextChar beq SRC.ParseLine.SymE jsr SRC.GetDecimal bcs SRC.ParseLine.SymE @@ -199,7 +199,7 @@ SRC.ParseLine.SymL jsr SRC.GetChar bcc SRC.ParseLine.SymR jmp SYM.AddLToGBlock *--------------------------------------- -SRC.ParseLine.SymE lda #ERR.INVALID.LABEL +SRC.ParseLine.SymE lda #ERR.INV.LABEL sec rts @@ -238,11 +238,12 @@ SRC.ParseLine.SymG >LDYA L.SRC.GLabel.Len *--------------------------------------- SRC.ParseLine.Dir >LDYA L.T.DIRECTIVES jsr SRC.GetKeyword + bcs .9 jmp (J.DIRECTIVES,x) -.9 lda #ERR.INVALID.DIRECTIVE +.9 lda #ERR.INV.DIRECTIVE sec rts *--------------------------------------- @@ -255,7 +256,7 @@ SRC.ParseLine.Add.Macro rts *--------------------------------------- SRC.ParseLine.OpCode - jsr SRC.GetArg + jsr SRC.CheckBlank bcc .11 rts @@ -264,7 +265,7 @@ SRC.ParseLine.OpCode >SYSCALL GetMemPtr.A >STYA ZPPtr1 - ldy #ASM.T.O setup Ptr to Opcodes + ldy #ASM.T.O setup Ptr2 to Opcodes lda (ZPPtr1),y clc adc ZPPtr1 @@ -274,7 +275,7 @@ SRC.ParseLine.OpCode adc ZPPtr1+1 sta ZPPtr2+1 - ldy #ASM.T.R setup Ptr to Registers + ldy #ASM.T.R setup Ptr3 to Registers lda (ZPPtr1),y clc adc ZPPtr1 @@ -285,20 +286,20 @@ SRC.ParseLine.OpCode sta ZPPtr3+1 -.10 lda (ZPPtr2) - ldy #1 - ora (ZPPtr2),y +.10 lda (ZPPtr2) End Of OpCode List beq .9 - ldx #$FF + lda (ZPPtr2) Opcode Len + tax -.1 inx - lda SRC.Buffer,x + ldy #0 + +.1 lda (ZPLinePtr),y iny cmp (ZPPtr2),y bne .7 - cpx SRC.Buffer + dex bne .1 jsr SRC.ParseLine.AM @@ -355,14 +356,14 @@ SRC.ParseLine.OpCode sta ZPPtr2+1 bra .10 -.9 lda #ERR.INVALID.OPCODE +.9 lda #ERR.INV.OPCODE sec .99 rts *--------------------------------------- SRC.ParseLine.AM stz SRC.AM.ID stz SRC.AM.StrBuf -.1 jsr SRC.GetCharUC any arg immediately after ' '? +.1 jsr SRC.GetNextCharUC any arg immediately after ' '? beq .8 no, AM.ID=0 (implied) cmp #' ' another space ? @@ -390,25 +391,25 @@ SRC.ParseLine.AM stz SRC.AM.ID .21 jsr SRC.IsLetter Any register? bcs .70 no, try something else - ldx SRC.BufPtr - stx SRC.BufPtrSave + ldx ZPLinePtr + stx SRC.LinePtrSave + ldx ZPLinePtr+1 + stx SRC.LinePtrSave+1 stz SRC.AM.tmpBuf sta SRC.AM.tmpBuf+1 inc SRC.AM.tmpBuf -.3 jsr SRC.GetCharUC - beq .41 +.3 jsr SRC.GetNextCharUC + beq .4 jsr SRC.IsLetterOrDigit bcs .4 inc SRC.AM.tmpBuf ldx SRC.AM.tmpBuf sta SRC.AM.tmpBuf,x bra .3 - -.4 dec SRC.BufPtr back one char -.41 ldy #0 +.4 ldy #0 .5 lda (ZPPtr3),y beq .71 last register ? @@ -447,12 +448,13 @@ SRC.ParseLine.AM stz SRC.AM.ID tay bra .5 -.71 lda SRC.BufPtrSave Does not match a register,restore Ptr - sta SRC.BufPtr - -.70 dec SRC.BufPtr back one char - - jsr EXP.Eval +.71 ldx SRC.LinePtrSave Does not match a register,restore Ptr + stx ZPLinePtr + stx SRC.LinePtrSave+1 + stx ZPLinePtr+1 + + +.70 jsr EXP.Eval bcs .99 @@ -475,7 +477,7 @@ SRC.ParseLine.AM stz SRC.AM.ID -.9 lda #ERR.INVALID.AM.SYN +.9 lda #ERR.INV.AM.SYN sec .99 rts *--------------------------------------- @@ -483,23 +485,30 @@ SRC.GetDecimal stz SRC.ACC+1 stz SRC.ACC+2 stz SRC.ACC+3 - jsr SRC.GetChar + lda (ZPLinePtr) beq .99 + jsr SRC.IsDigit10 bcs .99 + and #$0F sta SRC.ACC -.1 jsr SRC.GetChar +.1 jsr SRC.GetNextChar beq .8 + cmp #' ' - beq .88 + beq .8 + jsr SRC.IsEXPReserved - bcc .88 + bcc .8 + jsr SRC.IsAMReserved - bcc .88 + bcc .8 + jsr SRC.IsDigit10 - bcs .99 + bcs .9 + and #$0F pha @@ -522,7 +531,6 @@ SRC.GetDecimal stz SRC.ACC+1 sec rts -.88 dec SRC.BufPtr Back One Char .8 clc rts @@ -534,21 +542,21 @@ SRC.GetHex stz SRC.ACC+1 stz SRC.ACC+2 stz SRC.ACC+3 - jsr SRC.GetChar + lda (ZPLinePtr) beq .99 jsr SRC.IsDigit16 bcs .99 sta SRC.ACC -.1 jsr SRC.GetChar +.1 jsr SRC.GetNextChar beq .8 cmp #' ' - beq .88 + beq .8 jsr SRC.IsEXPReserved - bcc .88 + bcc .8 jsr SRC.IsAMReserved - bcc .88 + bcc .8 jsr SRC.IsDigit16 bcs .99 @@ -564,7 +572,6 @@ SRC.GetHex stz SRC.ACC+1 sta SRC.ACC bra .1 -.88 dec SRC.BufPtr Back One Char .8 clc rts @@ -580,23 +587,29 @@ SRC.GetOctal stz SRC.ACC+1 stz SRC.ACC+2 stz SRC.ACC+3 - jsr SRC.GetChar + lda (ZPLinePtr) beq .99 + jsr SRC.IsDigit8 bcs .99 + and #$0F sta SRC.ACC -.1 jsr SRC.GetChar +.1 jsr SRC.GetNextChar beq .8 + cmp #' ' - beq .88 + beq .8 + jsr SRC.IsEXPReserved - bcc .88 + bcc .8 + jsr SRC.IsAMReserved - bcc .88 + bcc .8 + jsr SRC.IsDigit8 - bcs .99 + bcs .9 asl asl @@ -615,7 +628,6 @@ SRC.GetOctal stz SRC.ACC+1 bne .2 bra .1 -.88 dec SRC.BufPtr Back One Char .8 clc rts @@ -631,25 +643,33 @@ SRC.GetBinary stz SRC.ACC+1 stz SRC.ACC+2 stz SRC.ACC+3 - jsr SRC.GetChar + lda (ZPLinePtr) beq .99 + cmp #'1' beq .10 + cmp #'0' bne .99 + .10 and #$01 sta SRC.ACC -.1 jsr SRC.GetChar +.1 jsr SRC.GetNextChar beq .8 + cmp #' ' - beq .88 + beq .8 + jsr SRC.IsEXPReserved - bcc .88 + bcc .8 + jsr SRC.IsAMReserved - bcc .88 + bcc .8 + cmp #'1' beq .11 + cmp #'0' bne .8 @@ -662,7 +682,6 @@ SRC.GetBinary stz SRC.ACC+1 bcs .9 bra .1 -.88 dec SRC.BufPtr Back One Char .8 clc rts @@ -676,7 +695,7 @@ SRC.GetBinary stz SRC.ACC+1 *--------------------------------------- SRC.GetLabel >STYA ZPPtr1 - jsr SRC.GetCharUC + lda (ZPLinePtr) beq .9 jsr SRC.IsLetter @@ -685,7 +704,7 @@ SRC.GetLabel >STYA ZPPtr1 ldy #1 sta (ZPPtr1),y -.1 jsr SRC.GetCharUC +.1 jsr SRC.GetNextCharUC beq .8 jsr SRC.IsLetterOrDigit @@ -697,12 +716,12 @@ SRC.GetLabel >STYA ZPPtr1 beq .2 cmp #' ' - beq .88 + beq .8 jsr SRC.IsEXPReserved - bcc .88 + bcc .8 jsr SRC.IsAMReserved - bcc .88 - + bcc .8 + .9 lda #ERR.SYNTAX.ERROR sec rts @@ -711,73 +730,62 @@ SRC.GetLabel >STYA ZPPtr1 sta (ZPPtr1),y cpy #SRC.GLABEL.MAXLEN bcc .1 if equ Carry is set - -.88 dec SRC.BufPtr Back One Char + .8 tya sta (ZPPtr1) clc rts *--------------------------------------- -SRC.GetKeyword >STYA ZPPtr1 +SRC.GetKeyword >STYA ZPPtr1 KeyWord table - jsr SRC.GetArg - bcs .9 - stz SRC.Keyword.ID - ldy #0 +.1 lda (ZPPtr1) + beq .9 End Of table -.3 lda (ZPPtr1),y - beq .9 - cmp SRC.Buffer - bne .6 - phy + tax KW len - ldx #0 -.4 iny - inx - lda (ZPPtr1),y - cmp SRC.Buffer,x - bne .5 - cpx SRC.Buffer - bne .4 +.2 ldy #0 - ply +.3 lda (ZPLinePtr),y + beq .5 + jsr SRC.IsLetter + bcs .5 - ldx SRC.Keyword.ID - clc - rts - -.5 ply - -.6 tya - sec Add keyword Len+1 - adc (ZPPtr1),y - tay - inc SRC.Keyword.ID - inc SRC.Keyword.ID - bra .3 - -.9 sec - rts -*--------------------------------------- -SRC.GetArg jsr SRC.GetCharUC - beq .9 - - sta SRC.Buffer+1 - ldy #1 - -.1 jsr SRC.GetCharUC - beq .2 - cmp #' ' - beq .2 iny - sta SRC.Buffer,y - bra .1 + cmp (ZPPtr1),y + bne .5 -.2 sty SRC.Buffer + dex + bne .3 + + lda (ZPLinePtr),y All chars match... + beq .4 End of Line ? + + jsr SRC.IsLetter + bcc .5 Additional letters... + +.4 lda ZPLinePtr + clc + adc (ZPPtr1) + sta ZPLinePtr + bcc .41 + inc ZPLinePtr+1 +.41 ldx SRC.Keyword.ID clc rts + +.5 lda (ZPPtr1) + sec Add keyword Len+1 + adc ZPPtr1 + sta ZPPtr1 + bcc .6 + + inc ZPPtr1+1 + +.6 inc SRC.Keyword.ID + inc SRC.Keyword.ID + bra .1 .9 sec rts @@ -860,13 +868,29 @@ SRC.IsDigit8 cmp #'0' .9 sec rts *--------------------------------------- -SRC.GetCharNB jsr SRC.GetCharUC +SRC.CheckBlank lda (ZPLinePtr) beq .9 cmp #' ' - beq SRC.GetCharNB + bne .9 + +.1 jsr SRC.GetNextChar + beq .9 + + cmp #' ' + beq .1 + clc + rts + +.9 sec + rts +*--------------------------------------- +SRC.GetNextCharNB jsr SRC.GetNextCharUC + beq .9 + cmp #' ' + beq SRC.GetNextCharNB .9 rts *--------------------------------------- -SRC.GetCharUC jsr SRC.GetChar +SRC.GetNextCharUC jsr SRC.GetNextChar beq .9 cmp #'a' bcc .9 @@ -875,10 +899,24 @@ SRC.GetCharUC jsr SRC.GetChar eor #$20 to Uppercase .9 rts *--------------------------------------- -SRC.GetChar ldx SRC.BufPtr - lda UsrBuf256,x +SRC.GetCharUC lda (ZPLinePtr) beq .9 - inc SRC.BufPtr if 255, will make Z + cmp #'a' + bcc .9 + cmp #'z'+1 + bcs .9 + eor #$20 to Uppercase +.9 rts +*--------------------------------------- +SRC.GetNextChar lda (ZPLinePtr) + beq .9 + + inc ZPLinePtr + bne .1 + + inc ZPLinePtr+1 + +.1 lda (ZPLinePtr) .9 rts *--------------------------------------- SRC.ACC10 lda SRC.ACC ACC*2-> ACC & ACCTMP @@ -922,7 +960,6 @@ SRC.ACC10 lda SRC.ACC ACC*2-> ACC & ACCTMP sta SRC.ACC+3 CS if overflow .9 rts - *--------------------------------------- MAN SAVE /A2OSX.BUILD/BIN/DEV/ASM.S.SRC diff --git a/BIN/ASM.S.txt b/BIN/ASM.S.txt index 0a6eb5ed..b8734aba 100644 --- a/BIN/ASM.S.txt +++ b/BIN/ASM.S.txt @@ -12,8 +12,11 @@ AUTO 4,1 ZPPtr1 .EQ ZPBIN ZPPtr2 .EQ ZPBIN+2 ZPPtr3 .EQ ZPBIN+4 -ZPBlockPtr .EQ ZPBIN+6 -ZPSymbolPtr .EQ ZPBIN+8 +ZPLineBuf .EQ ZPBIN+6 +ZPLinePtr .EQ ZPBIN+8 +ZPBlockPtr .EQ ZPBIN+10 +ZPSymbolPtr .EQ ZPBIN+12 +ZPTmpBuf .EQ ZPBIN+14 *--------------------------------------- ASM.T.AM .EQ 0 ASM.T.R .EQ 2 @@ -37,18 +40,18 @@ 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.INVALID.OPCODE .EQ $A6 -ERR.INVALID.AM.SYN .EQ $A7 -ERR.INVALID.AM.4.OC .EQ $A8 +ERR.INV.LABEL .EQ $A4 +ERR.INV.DIRECTIVE .EQ $A5 +ERR.INV.OPCODE .EQ $A6 +ERR.INV.AM.SYN .EQ $A7 +ERR.INV.AM.4.OC .EQ $A8 ERR.RANGE .EQ $A9 ERR.UNDEF.SYMBOL .EQ $AA ERR.SYMBOL.REDEFINE .EQ $AB ERR.TOO.MANY.DO .EQ $AC ERR.MISSING.EXP .EQ $B0 ERR.EXP.SYN.ERROR .EQ $B1 -ERR.INVALID.MACRO.DEF .EQ $E0 +ERR.INV.MACRO.DEF .EQ $E0 *-------------------------------------- * File Header (16 Bytes) *-------------------------------------- @@ -59,8 +62,8 @@ CS.START cld .DA 0 .DA CS.END-CS.START CS .DA DS.END-DS.START DS - .DA #128 SS - .DA #10 ZP + .DA #0 SS + .DA #16 ZP .DA 0 *-------------------------------------- * Relocation Table @@ -85,7 +88,7 @@ L.SRC.GLabel.Flags .DA SRC.GLabel.Flags 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.BUFFER .DA SRC.BUFFER +L.ASM.6502 .DA ASM.6502 L.ASM.T.FILENAME .DA ASM.T.FILENAME L.FIO.Stat .DA FIO.Stat L.T.DIRECTIVES .DA T.DIRECTIVES @@ -161,7 +164,6 @@ CS.INIT ldy #S.PS.ARGC ldy #SRC.hFILENAME sta (pData),y - jsr FIO.Init bcs .9 @@ -170,6 +172,20 @@ CS.INIT ldy #S.PS.ARGC jsr DIR.Init + >LDYAI 256 + >SYSCALL GetMem.YA + bcs .9 + >STYA ZPLineBuf + txa + >STA.G SRC.hLineBuf + + >LDYAI 256 + >SYSCALL GetMem.YA + bcs .9 + >STYA ZPTmpBuf + txa + >STA.G SRC.hTmpBuf + * lda (pPs) * ora #S.PS.F.EVENT * sta (pPs) @@ -211,12 +227,12 @@ CS.RUN >SYSCALL GetChar ldy #SRC.hFILENAME lda (pData),y - jsr FIO.OpenFileA + >SYSCALL GetMemPtr.A + + jsr FIO.OpenFile bcs .99 -.10 stz UsrBuf256 - >DEBUG - jsr FIO.ReadLine +.10 jsr FIO.ReadLine bcc .2 cmp #$4C End Of File? bne .9 @@ -273,13 +289,22 @@ CS.QUIT jsr FIO.FileClose jsr SYM.Quit - ldy #ASM.T.hMem - lda (pData),y + >LDA.G ASM.T.hMem beq .1 + >SYSCALL FreeMem.A -.1 ldy #SRC.hFILENAME - lda (pData),y +.1 >LDA.G SRC.hFILENAME + beq .2 + + >SYSCALL FreeMem.A + +.2 >LDA.G SRC.hLineBuf + beq .3 + + >SYSCALL FreeMem.A + +.3 >LDA.G SRC.hTmpBuf beq .8 >SYSCALL FreeMem.A @@ -294,101 +319,54 @@ CS.QUIT jsr FIO.FileClose .INB /A2OSX.BUILD/BIN/DEV/ASM.S.SYM *--------------------------------------- CS.END -SRC.DIR.MAXLEN .EQ 5 -T.DIRECTIVES .HS 02 - .AS "AC" - .HS 02 - .AS "AS" - .HS 02 - .AS "AT" - .HS 02 - .AS "AZ" - .HS 02 - .AS "BS" - .HS 02 - .AS "DA" - .HS 02 - .AS "DO" - .HS 02 - .AS "DU" - .HS 05 - .AS "DUMMY" - .HS 02 - .AS "ED" - .HS 04 - .AS "ELSE" - .HS 02 - .AS "EM" - .HS 02 - .AS "EN" - .HS 02 - .AS "EP" - .HS 02 - .AS "EQ" - .HS 03 - .AS "FIN" - .HS 02 - .AS "HS" - .HS 02 - .AS "IN" - .HS 03 - .AS "INB" - .HS 04 - .AS "INB1" - .HS 04 - .AS "INB2" - .HS 04 - .AS "INB3" - .HS 04 - .AS "INB4" - .HS 04 - .AS "INB5" - .HS 04 - .AS "INB6" - .HS 04 - .AS "INB7" - .HS 04 - .AS "INB8" - .HS 04 - .AS "INB9" - .HS 02 - .AS "LI" - .HS 04 - .AS "LIST" - .HS 02 - .AS "MA" - .HS 02 - .AS "OP" - .HS 02 - .AS "OR" - .HS 02 - .AS "PG" - .HS 02 - .AS "PH" - .HS 02 - .AS "SE" - .HS 02 - .AS "TA" - .HS 02 - .AS "TF" - .HS 02 - .AS "TI" - .HS 02 - .AS "US" +T.DIRECTIVES >PSTR "AC" + >PSTR "AS" + >PSTR "AT" + >PSTR "AZ" + >PSTR "BS" + >PSTR "DA" + >PSTR "DO" + >PSTR "DU" + >PSTR "DUMMY" + >PSTR "ED" + >PSTR "ELSE" + >PSTR "EM" + >PSTR "EN" + >PSTR "EP" + >PSTR "EQ" + >PSTR "FIN" + >PSTR "HS" + >PSTR "IN" + >PSTR "INB" + >PSTR "INB1" + >PSTR "INB2" + >PSTR "INB3" + >PSTR "INB4" + >PSTR "INB5" + >PSTR "INB6" + >PSTR "INB7" + >PSTR "INB8" + >PSTR "INB9" + >PSTR "LI" + >PSTR "LIST" + >PSTR "MA" + >PSTR "OP" + >PSTR "OR" + >PSTR "PG" + >PSTR "PH" + >PSTR "SE" + >PSTR "TA" + >PSTR "TF" + >PSTR "TI" + >PSTR "US" .HS 00 *--------------------------------------- -T.LI .HS 03 - .AS "CON" - .HS 04 - .AS "COFF" - .HS 03 - .AS "XON" - .HS 04 - .AS "XOFF" - .HS 02 - .AS "ON" - .HS 03 - .AS "OFF" +T.LI >PSTR "CON" + >PSTR "COFF" + >PSTR "XON" + >PSTR "XOFF" + >PSTR "ON" + >PSTR "OFF" .HS 00 *--------------------------------------- MSG.HELP >CSTR "A2osX-Macro Assembler (S-C MASM 3.0 Based)\r\nUsage : ASM [type TXT ($04) or S-C/BAS ($FA)]\r\n" @@ -405,8 +383,8 @@ MSG.SUMMARY >CSTR "\r\nEnd Of Assembly.\r\n" SRC.AM.RESERVED >PSTR "[]()," SRC.MOD.RESERVED >PSTR "#/<>" SRC.EXP.RESERVED >PSTR "^!|&<=>+-*/" -ASM.T.DEFAULT >CSTR ".T.6502" -ASM.T.FILENAMELEN .BS 1 +ASM.6502 >CSTR "6502" +*--------------------------------------- ASM.T.FILENAME .BS 65 FIO.Stat .BS S.STAT @@ -418,6 +396,7 @@ SYM.iCurGBlock.Save .BS 1 SYM.pCurGBlock.Save .BS 1 SRC.LINENUM .BS 2 +SRC.LinePtrSave .BS 2 SRC.Directive.ID .BS 1 SRC.Keyword.ID .BS 1 SRC.ACC .BS 4 @@ -426,10 +405,6 @@ SRC.ARG .BS 4 SRC.AM.ID .BS 1 SRC.AM.StrBuf .BS 32 SRC.AM.tmpBuf .BS 32 -SRC.Exp .BS 128 -SRC.BufPtr .BS 1 -SRC.BufPtrSave .BS 1 -SRC.Buffer .BS 256 SRC.GLabel.New .BS 1 SRC.GLabel.Flags .BS 1 SRC.GLabel.Value .BS 4 @@ -445,7 +420,6 @@ SRC.FLabel.Flags .BS 1 SRC.FLabel.Value .BS 4 SRC.FLabel.Len .BS 1 SRC.FLabel.Name .BS SRC.GLABEL.MAXLEN -UsrBuf256 .BS 256 *-------------------------------------- .DUMMY .OR 0 @@ -453,6 +427,8 @@ DS.START bPause .BS 1 SRC.hFILENAME .BS 1 +SRC.hLineBuf .BS 1 +SRC.hTmpBuf .BS 1 SRC.COUNT .BS 1 SRC.hFILES .BS SRC.IN.MAXDEPTH diff --git a/TEST.S.txt b/TEST.S.txt index 8f682fb5..783d3501 100644 --- a/TEST.S.txt +++ b/TEST.S.txt @@ -1,12 +1,10 @@ -PR#3 -PREFIX /A2OSX.BUILD NEW -INC 1 -AUTO 6 +PREFIX /A2OSX.BUILD +AUTO 4,1 .LIST OFF .OP 65C02 .OR $2000 - .TF /A2OSX.BUILD/TEST + .TF /A2OSX.BUILD/ROOT/TEST *-------------------------------------- .INB /A2OSX.BUILD/INC/MACROS.I .INB /A2OSX.BUILD/INC/A2OSX.I @@ -139,5 +137,5 @@ DS.END .ED *-------------------------------------- MAN -SAVE /A2OSX.BUILD/TEST.S +SAVE /A2OSX.BUILD/ROOT/TEST.S ASM