From 45474d544cf40dc7dccb5059f6da86b6305397bf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20GIBERT?= Date: Thu, 11 Jan 2018 16:34:09 +0000 Subject: [PATCH] Kernel 0.9.1 : ASM rewrite.... --- .Floppies/A2OSX.BUILD.po | Bin 819200 -> 819200 bytes BIN/ASM.S.DIR.txt | 72 ++++---- BIN/ASM.S.EXP.txt | 28 ++-- BIN/ASM.S.FIO.txt | 147 ++++++++++------- BIN/ASM.S.SRC.txt | 347 ++++++++++++++++++++++----------------- BIN/ASM.S.txt | 216 +++++++++++------------- TEST.S.txt | 10 +- 7 files changed, 430 insertions(+), 390 deletions(-) diff --git a/.Floppies/A2OSX.BUILD.po b/.Floppies/A2OSX.BUILD.po index b648799f0051e25729a78ea0d461193f5706ceeb..a3af18ea00ef465fde9faf9789632a14ff56a8a3 100644 GIT binary patch delta 28434 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 delta 28329 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 Od%*T~^S$kXVgCoY^d|xU 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