From 5b2af25a9ee79bec07d0b5d00bcf8468da381d32 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20GIBERT?= Date: Fri, 4 Dec 2015 17:33:33 +0100 Subject: [PATCH] Work In Progress (ASM) --- BIN/ASM.S.DIR.txt | 188 +++++++++++++++++++++++++++++++++++++++++++--- BIN/ASM.S.EXP.txt | 83 +++++++++++++++++--- BIN/ASM.S.FIO.txt | 34 ++++++++- BIN/ASM.S.SRC.txt | 35 ++++++--- BIN/ASM.S.SYM.txt | 132 ++++++++++++++++++++------------ BIN/ASM.S.txt | 108 +++++++++++--------------- 6 files changed, 434 insertions(+), 146 deletions(-) diff --git a/BIN/ASM.S.DIR.txt b/BIN/ASM.S.DIR.txt index f597c9fa..0d16d93b 100644 --- a/BIN/ASM.S.DIR.txt +++ b/BIN/ASM.S.DIR.txt @@ -5,6 +5,17 @@ INC 1 AUTO 6 .LIST OFF *--------------------------------------- +DIR.Init lda #$00 + ldy #ASM.LI.CON + sta (pData),y + ldy #ASM.LI.XON + sta (pData),y + + lda #$80 + ldy #ASM.LI.ON + sta (pData),y + rts +*--------------------------------------- DIR.AC clc rts *--------------------------------------- @@ -17,14 +28,105 @@ DIR.AT clc DIR.AZ clc rts *--------------------------------------- -DIR.BS clc +DIR.BS jsr EXP.Eval + bcs .9 + + lda SRC.ACC+3 + ora SRC.ACC+2 + bne .99 + lda SRC.ACC + sta DIR.Counter + lda SRC.ACC+1 + bmi .99 + sta DIR.Counter+1 + + stz DIR.Byte + + jsr SRC.GetChar + beq .1 + cmp #' ' + beq .1 + + cmp #',' + bne .98 + jsr EXP.Eval + bcs .9 + + lda SRC.ACC+3 + ora SRC.ACC+2 + ora SRC.ACC+1 + bne .99 + lda SRC.ACC + sta DIR.Byte + +.1 ldy #ASM.PC + lda (pData),y + clc + adc DIR.Counter + sta (pData),y + iny + lda (pData),y + adc DIR.Counter+1 + sta (pData),y + +.2 lda DIR.Counter + bne .3 + lda DIR.Counter+1 + beq .8 + dec DIR.Counter+1 + +.3 dec DIR.Counter + + lda DIR.Byte + jsr FIO.EmitByte + bcc .2 + rts + +.8 clc +.9 rts + +.99 lda #ERR.RANGE + sec + rts +.98 lda #ERR.SYNTAX.ERROR + sec rts *--------------------------------------- DIR.DA clc rts *--------------------------------------- -DIR.DO clc +DIR.DO ldy #ASM.DO.Count + lda (pData),y + inc + cmp #SRC.DO.MAXDEPTH + bcs .98 + + jsr EXP.Eval + bcs .99 + + ldy #ASM.DO.Count + lda (pData),y + inc + sta (pData),y +* clc ok from bcs .99 + adc #ASM.DOELSE.Flag-1 + tay + + lda SRC.ACC + ora SRC.ACC+1 + ora SRC.ACC+2 + ora SRC.ACC+3 if + + sta (pData),y + lda #$FF + ldy #ASM.DO.ON + sta (pData),y + clc rts + +.98 lda #ERR.TOO.MANY.DO + sec +.99 rts *--------------------------------------- DIR.DU clc rts @@ -42,7 +144,35 @@ DIR.EM lda #ERR.INVALID.MACRO.DEF DIR.EN clc rts *--------------------------------------- -DIR.EP clc +DIR.EP ldy #ASM.PH.ON + lda (pData),y + bpl .9 + + lda #0 + sta (pData),y + + ldy #ASM.PC.PH+3 + ldx #3 + +.1 lda (pData),y + pha + dey + dex + bpl .1 + + ldy #ASM.PC + ldx #3 + +.2 pla + sta (pData),y + iny + dex + bpl .2 + clc + rts + +.9 lda #ERR.INVALID.DIRECTIVE + sec rts *--------------------------------------- DIR.EQ jsr EXP.Eval @@ -57,7 +187,22 @@ DIR.EQ jsr EXP.Eval clc .9 rts *--------------------------------------- -DIR.FI clc +DIR.FI ldy #ASM.DO.Count + lda (pData),y + beq .99 + dec + sta (pData),y + bne .1 + + lda #$0 + ldy #ASM.DO.ON + sta (pData),y + +.1 clc + rts + +.99 lda #ERR.INVALID.DIRECTIVE + sec rts *--------------------------------------- DIR.HS clc @@ -117,9 +262,6 @@ DIR.LI.OFF ldy #ASM.LI.ON clc DIR.LI.APPLY lsr - - - lda #$80 sta (pData),y rts *--------------------------------------- @@ -190,7 +332,7 @@ DIR.OP jsr SRC.GetArg dex bne .1 - jmp LOAD.ASM.T + jmp FIO.LOAD.ASM.T .9 lda #ERR.SYNTAX.ERROR sec @@ -214,7 +356,35 @@ DIR.OR jsr EXP.Eval DIR.PG clc rts *--------------------------------------- -DIR.PH clc +DIR.PH ldy #ASM.PH.ON + lda (pData),y + bmi .9 + + lda #$80 + sta (pData),y + + ldy #ASM.PC+3 + ldx #3 + +.1 lda (pData),y + pha + dey + dex + bpl .1 + + ldy #ASM.PC.PH + ldx #3 + +.2 pla + sta (pData),y + iny + dex + bpl .2 + + jmp DIR.OR + +.9 lda #ERR.INVALID.DIRECTIVE + sec rts *--------------------------------------- DIR.SE clc diff --git a/BIN/ASM.S.EXP.txt b/BIN/ASM.S.EXP.txt index 3fe4ae5e..f48c1b35 100644 --- a/BIN/ASM.S.EXP.txt +++ b/BIN/ASM.S.EXP.txt @@ -15,7 +15,7 @@ AUTO 6 *--------------------------------------- EXP.Eval stz EXP.Operator - jsr SRC.GetCharNB +EXP.Eval.Next jsr SRC.GetCharNB bne .13 lda #ERR.MISSING.EXP @@ -43,10 +43,7 @@ EXP.Eval stz EXP.Operator dex bpl .11 - jsr SRC.GetCharNB - bne EXP.EvalExitSYN - clc - rts + bra EXP.EvalOperator .10 jsr SRC.IsDigit10 Decimal constant ? bcs .1 @@ -133,16 +130,17 @@ EXP.EvalOperator lda EXP.Operator .7 jsr SRC.GetChar beq EXP.EvalExitOK1 + cmp #' ' beq EXP.EvalExitOK1 + jsr SRC.IsAMReserved bcc EXP.EvalExitOK - + jsr SRC.IsEXPReserved - bcs * bcs EXP.EvalExitSYN - sta EXP.Operator + stx EXP.Operator ldx #3 .8 lda SRC.ACC,x @@ -150,7 +148,7 @@ EXP.EvalOperator lda EXP.Operator dex bpl .8 - jmp EXP.Eval + jmp EXP.Eval.Next clc rts @@ -163,7 +161,7 @@ EXP.GetLocal jsr SRC.GetDecimal bne EXP.EvalExitSYN Max .255 lda SRC.ACC beq EXP.EvalExitSYN .0 is not allowed - jsr SYM.FindLocal + jsr SYM.SearchLocal bcs EXP.EvalExitUND rts *--------------------------------------- @@ -176,7 +174,9 @@ EXP.SetAccA sta SRC.ACC EXP.GetSymbol >LDYA L.SRC.ELabel.Len jsr SRC.GetLabel bcs EXP.EvalExitSYN - jsr SYM.FindGlobal + + >LDYA L.SRC.ELabel.Flags + jsr SYM.SearchGlobal bcc .1 ldy #ASM.PASS @@ -197,7 +197,66 @@ EXP.GetSymbol >LDYA L.SRC.ELabel.Len clc rts *--------------------------------------- -EXP.Compute +EXP.Compute dec + asl + tax + jmp (J.EXP.OP,x) +*--------------------------------------- +EXP.Compute.EOR +*--------------------------------------- +EXP.Compute.ORA +*--------------------------------------- +EXP.Compute.AND +*--------------------------------------- +EXP.Compute.LOW +*--------------------------------------- +EXP.Compute.EQU +*--------------------------------------- +EXP.Compute.GRT + clc + rts +*--------------------------------------- +EXP.Compute.ADD ldx #0 ARG-ACC->ACC + ldy #4 + + clc + +.1 lda SRC.ARG,x + adc SRC.ACC,x + sta SRC.ACC,x + inx + dey + bne .1 + + bcc .8 + + lda #ERR.VAL.TOO.BIG +.8 rts +*--------------------------------------- +EXP.Compute.SUB ldx #0 ARG-ACC->ACC + ldy #4 + + sec + +.1 lda SRC.ARG,x + sbc SRC.ACC,x + sta SRC.ACC,x + inx + dey + bne .1 + + bcs .8 + + lda #ERR.VAL.TOO.BIG + sec + rts + +.8 clc + rts +*--------------------------------------- +EXP.Compute.MUL +*--------------------------------------- +EXP.Compute.DIV clc rts *--------------------------------------- diff --git a/BIN/ASM.S.FIO.txt b/BIN/ASM.S.FIO.txt index c0c1081f..2f3038eb 100644 --- a/BIN/ASM.S.FIO.txt +++ b/BIN/ASM.S.FIO.txt @@ -5,6 +5,35 @@ INC 1 AUTO 6 .LIST OFF *--------------------------------------- +FIO.Init ldy #S.PS.hCMD + lda (pPS),y + >SYSCALL SYS.GetMemPtrA + bcs .99 + >STYA ZPPtr1 + lda (ZPPtr1) + tay + adc #3 len of ".T." + sta ASM.T.FILENAMELEN + adc #4 len of "6502" + sta ASM.T.FILENAME + tax + +.2 lda (ZPPtr1),y + sta ASM.T.FILENAME,y + dey + bne .2 + + ldy #6 + +.3 lda ASM.T.DEFAULT,y + sta ASM.T.FILENAME,x + dex + dey + bpl .3 + + jmp FIO.LOAD.ASM.T +.99 rts +*--------------------------------------- FIO.OpenFileA sta FIO.hFileName >SYSCALL SYS.GetMemPtrA >STYA ZPPtr1 @@ -252,7 +281,7 @@ FIO.FileClose ldy #SRC.COUNT .8 clc rts *--------------------------------------- -LOAD.ASM.T ldy #ASM.T.hMem +FIO.LOAD.ASM.T ldy #ASM.T.hMem lda (pData),y beq .1 >SYSCALL SYS.FreeMemA @@ -274,6 +303,9 @@ LOAD.ASM.T ldy #ASM.T.hMem .9 rts *--------------------------------------- +FIO.EmitByte clc + rts +*--------------------------------------- MAN SAVE BIN/ASM.S.FIO LOAD BIN/ASM.S diff --git a/BIN/ASM.S.SRC.txt b/BIN/ASM.S.SRC.txt index d73b0b35..b9ef036b 100644 --- a/BIN/ASM.S.SRC.txt +++ b/BIN/ASM.S.SRC.txt @@ -6,12 +6,16 @@ AUTO 6 .LIST OFF *--------------------------------------- SRC.ParseLine ldx TmpBuffer256 - beq SRC.ParseLine.Skip + beq .1 cpx #'*' Comment? - beq SRC.ParseLine.Skip + beq .1 cpx #';' Comment? - beq SRC.ParseLine.Skip + beq .1 + + ldy #ASM.DO.ON + lda (pData),y + bne .1 stz SRC.GLabel.New @@ -23,6 +27,10 @@ SRC.ParseLine ldx TmpBuffer256 jsr SRC.ParseLine.SymL bra .3 +.1 clc + rts + + .2 jsr SRC.ParseLine.SymG .3 bcs SRC.ParseLine.Err @@ -51,7 +59,8 @@ SRC.ParseLine ldx TmpBuffer256 SRC.ParseLine.Ok lda SRC.GLabel.New bpl .8 - jsr SYM.FindGlobal + >LDYA L.SRC.GLabel.Flags + jsr SYM.SearchGlobal bcs .1 if CS, not found, add lda SRC.FLabel.Flags @@ -69,23 +78,24 @@ SRC.ParseLine.Ok lda SRC.GLabel.New .10 ldy #ASM.PASS lda (pData),y pass#2? - bne .8 yes, skip to avoid redefinition error + beq .1 yes, skip to avoid redefinition error - bra SRC.ParseLine.Redef + lda SRC.FLabel.Flags + and #$40 + beq SRC.ParseLine.Redef .1 >LDYA L.SRC.GLabel.Flags jsr SYM.AddGToGBlockYA bcs SRC.ParseLine.Err -.8 - -SRC.ParseLine.skip clc +.8 clc rts - + SRC.ParseLine.Err1 lda #ERR.INVALID.LABEL SRC.ParseLine.Err sec rts + SRC.ParseLine.Redef lda #ERR.SYMBOL.REDEFINE sec rts @@ -379,6 +389,7 @@ SRC.ParseLine.AM stz SRC.AM.ID .99 rts *--------------------------------------- SRC.PrintLine bcs .8 if CS, unconditional + ldy #ASM.MACRO.ON lda (pData),y bpl .1 @@ -394,6 +405,10 @@ SRC.PrintLine bcs .8 if CS, unconditional .8 >PUSHWI TmpBuffer256 >PUSHW SRC.LINENUM + ldy #ASM.PC+1 + >PUSHB (pData),y + dey + >PUSHB (pData),y >PUSHW L.MSG.SRCLINE >LIBCALL hLIBSTR,LIBSTR.PRINTF .9 rts diff --git a/BIN/ASM.S.SYM.txt b/BIN/ASM.S.SYM.txt index 45cdc55a..1d23d776 100644 --- a/BIN/ASM.S.SYM.txt +++ b/BIN/ASM.S.SYM.txt @@ -32,10 +32,10 @@ AUTO 6 * Macro Record: ( bytes) *--------------------------------------- SYM.Init lda #0 - ldy #SYM.iCurGBlock + ldy #SYM.iLastGBlock sta (pData),y dec - ldy #SYM.hCurGBlock + ldy #SYM.pLastGBlock sta (pData),y jsr SYM.NewGBlock @@ -44,7 +44,7 @@ SYM.Init lda #0 clc .9 rts *--------------------------------------- -SYM.Quit ldy #SYM.LastGBlock +SYM.Quit ldy #SYM.pLastGBlock lda (pData),y bmi .8 @@ -53,7 +53,7 @@ SYM.Quit ldy #SYM.LastGBlock tay lda (pData),y >SYSCALL SYS.FreeMemA - ldy #SYM.LastGBlock + ldy #SYM.pLastGBlock lda (pData),y dec sta (pData),y @@ -69,7 +69,7 @@ SYM.Dump >PUSHW L.MSG.SYMBOLS lda #20 sta (pData),y - jsr SYM.ResetGBlock + jsr SYM.ResetGBlockPtr .1 jsr SYM.GetByteGBlock Get Flags sta SRC.GLabel.Flags @@ -81,11 +81,8 @@ SYM.Dump >PUSHW L.MSG.SYMBOLS .2 jsr SYM.GetByteGBlock sta SRC.GLabel.Value,x inx - cpx #4 - bne .2 - - jsr SYM.GetByteGBlock - sta SRC.GLabel.Len + cpx #5 + bne .2 Get Value+Len ldx #0 .3 jsr SYM.GetByteGBlock @@ -107,6 +104,7 @@ SYM.Dump >PUSHW L.MSG.SYMBOLS >PUSHW L.MSG.GSYMBOL >LIBCALL hLIBSTR,LIBSTR.PRINTF + bcs .9 .4 jsr SYM.GetByteGBlock @@ -120,6 +118,7 @@ SYM.Dump >PUSHW L.MSG.SYMBOLS >PUSHW L.MSG.LSYMBOL >LIBCALL hLIBSTR,LIBSTR.PRINTF bcc .4 + rts .5 lda #13 >SYSCALL SYS.CoutA @@ -128,12 +127,39 @@ SYM.Dump >PUSHW L.MSG.SYMBOLS lda (pData),y dec bne .6 - >DEBUG + lda #20 .6 sta (pData),y jmp .1 .9 rts *--------------------------------------- +SYM.DumpGSymbol.DELETE >SYSCALL SYS.CoutA + lda ZPSymbolPtr + clc + adc #5 + tay + lda ZPSymbolPtr+1 + adc #0 + >PUSHYA + + ldy #2 + lda (ZPSymbolPtr),y + >PUSHA + dey + lda (ZPSymbolPtr),y + >PUSHA + ldy #4 + lda (ZPSymbolPtr),y + >PUSHA + dey + lda (ZPSymbolPtr),y + >PUSHA + + >PUSHW L.MSG.GSYMBOL + >LIBCALL hLIBSTR,LIBSTR.PRINTF + + rts +*--------------------------------------- SYM.AddPrivate clc rts @@ -154,11 +180,13 @@ SYM.UpdateGlobal clc rts *--------------------------------------- -SYM.FindLocal +SYM.SearchLocal clc rts *--------------------------------------- -SYM.FindGlobal jsr SYM.ResetGBlock +SYM.SearchGlobal >STYA ZPSymbolPtr + + jsr SYM.ResetGBlockPtr .1 jsr SYM.GetByteGBlock Get Flags beq .9 @@ -169,12 +197,9 @@ SYM.FindGlobal jsr SYM.ResetGBlock .2 jsr SYM.GetByteGBlock sta SRC.FLabel.Value,x inx - cpx #4 - bne .2 - - jsr SYM.GetByteGBlock - sta SRC.FLabel.Len - + cpx #5 + bne .2 Get Value+Len + ldx #0 .3 jsr SYM.GetByteGBlock sta SRC.FLabel.Name,x @@ -182,18 +207,24 @@ SYM.FindGlobal jsr SYM.ResetGBlock cpx SRC.FLabel.Len bne .3 - cpx SRC.ELabel.Len + txa + ldy #5 + cmp (ZPSymbolPtr),y bne .5 -.4 lda SRC.FLabel.Name-1,x - cmp SRC.ELabel.Name-1,x + ldx #0 +.4 inx + iny + lda SRC.FLabel.Name-1,x + cmp (ZPSymbolPtr),y bne .5 - dex + cpx SRC.FLabel.Len bne .4 + clc rts -.5 jsr SYM.GetByteGBlock +.5 jsr SYM.GetByteGBlock skip Locals beq .1 jsr SYM.GetByteGBlock bra .5 @@ -201,22 +232,13 @@ SYM.FindGlobal jsr SYM.ResetGBlock .9 sec rts *--------------------------------------- -SYM.AddLToGBlock jsr SYM.GetLastGBlock - - lda SRC.LLabel.ID - jsr SYM.AddByteGBlock - bcs .9 - - lda SRC.LLabel.Offset - jmp SYM.AddByteGBlock -.9 rts -*--------------------------------------- SYM.AddGToGBlockYA >STYA ZPSymbolPtr - jsr SYM.GetLastGBlock + + jsr SYM.SetGBlockPtr - ldy #SYM.hCurGBlock 1st Gblock to add? + ldy #SYM.pLastGBlock 1st Gblock to add? lda (pData),y - ldy #SYM.iCurGBlock + ldy #SYM.iLastGBlock ora (pData),y beq .10 yes, skip closing previous one @@ -238,22 +260,31 @@ SYM.AddGToGBlockYA >STYA ZPSymbolPtr jsr SYM.AddByteGBlock bcs .9 -.2 lda (ZPSymbolPtr),y +.2 iny + lda (ZPSymbolPtr),y jsr SYM.AddByteGBlock bcs .9 - iny dex bne .2 clc .9 rts *--------------------------------------- -SYM.ResetGBlock ldy #SYM.hGBlocks - lda (pData),y - >SYSCALL SYS.GetMemPtrA - >STYA ZPBlockPtr +SYM.AddLToGBlock jsr SYM.SetGBlockPtr + + lda SRC.LLabel.ID + jsr SYM.AddByteGBlock + bcs .9 + + lda SRC.LLabel.Offset + jmp SYM.AddByteGBlock +.9 rts +*--------------------------------------- +SYM.ResetGBlockPtr lda #0 + jsr SYM.GetGBlockA + lda #0 - ldy #SYM.hCurGBlock + ldy #SYM.pCurGBlock sta (pData),y ldy #SYM.iCurGBlock sta (pData),y @@ -271,7 +302,7 @@ SYM.GetByteGBlock ldy #SYM.iCurGBlock sta (pData),y bne .1 - ldy #SYM.hCurGBlock + ldy #SYM.pCurGBlock lda (pData),y inc sta (pData),y @@ -281,8 +312,9 @@ SYM.GetByteGBlock ldy #SYM.iCurGBlock clc rts *--------------------------------------- -SYM.GetLastGBlock ldy #SYM.LastGBlock +SYM.SetGBlockPtr ldy #SYM.pLastGBlock lda (pData),y + SYM.GetGBlockA clc adc #SYM.hGBlocks tay @@ -296,7 +328,7 @@ SYM.GetGBlockA clc SYM.AddByteGBlock phx phy pha - ldy #SYM.iCurGBlock + ldy #SYM.iLastGBlock lda (pData),y tay @@ -307,7 +339,7 @@ SYM.AddByteGBlock phx inc beq SYM.NewGBlock2 - ldy #SYM.iCurGBlock + ldy #SYM.iLastGBlock sta (pData),y ply plx @@ -323,7 +355,7 @@ SYM.NewGBlock2 >PUSHWI 256 bcs .9 >STYA ZPBlockPtr - ldy #SYM.LastGBlock + ldy #SYM.pLastGBlock lda (pData),y inc sta (pData),y @@ -336,7 +368,7 @@ SYM.NewGBlock2 >PUSHWI 256 sta (pData),y lda #0 - ldy #SYM.iCurGBlock + ldy #SYM.iLastGBlock sta (pData),y clc diff --git a/BIN/ASM.S.txt b/BIN/ASM.S.txt index f27b9577..796ac82c 100644 --- a/BIN/ASM.S.txt +++ b/BIN/ASM.S.txt @@ -22,6 +22,7 @@ ASM.T.AM .EQ 0 ASM.T.R .EQ 2 ASM.T.O .EQ 4 *--------------------------------------- +SRC.DO.MAXDEPTH .EQ 8 SRC.IN.MAXDEPTH .EQ 7 SRC.GLABEL.MAXLEN .EQ 32 *--------------------------------------- @@ -47,6 +48,7 @@ ERR.INVALID.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 @@ -74,7 +76,6 @@ L.MSG.HELP1 .DA MSG.HELP1 L.MSG.HELP2 .DA MSG.HELP2 L.MSG.SRCLINE .DA MSG.SRCLINE L.MSG.ERROR .DA MSG.ERROR -L.MSG.DEBUG .DA MSG.DEBUG L.MSG.SYMBOLS .DA MSG.SYMBOLS L.MSG.GSYMBOL .DA MSG.GSYMBOL L.MSG.LSYMBOL .DA MSG.LSYMBOL @@ -138,6 +139,17 @@ J.LI .DA DIR.LI.CON .DA DIR.LI.XOFF .DA DIR.LI.ON .DA DIR.LI.OFF +J.EXP.OP .DA EXP.Compute.EOR ^!|&<=>+-*/ + .DA EXP.Compute.ORA + .DA EXP.Compute.ORA + .DA EXP.Compute.AND + .DA EXP.Compute.LOW + .DA EXP.Compute.EQU + .DA EXP.Compute.GRT + .DA EXP.Compute.ADD + .DA EXP.Compute.SUB + .DA EXP.Compute.MUL + .DA EXP.Compute.DIV .DA 0 *--------------------------------------- CS.INIT >LDYA L.LIBSTR @@ -146,73 +158,35 @@ CS.INIT >LDYA L.LIBSTR ldy #S.PS.hARGS lda (pPs),y - bne .1 + beq .99 - >PUSHW L.MSG.HELP1 - >LIBCALL hLIBSTR,LIBSTR.PRINTF - >PUSHW L.MSG.HELP2 - >LIBCALL hLIBSTR,LIBSTR.PRINTF - lda #ERR.INV.ARGS - sec - rts - -.1 >SYSCALL SYS.PStrCpyA + >SYSCALL SYS.PStrCpyA ldy #SRC.hFILENAME - sta (pData),y Store filename + sta (pData),y - ldy #S.PS.hCMD - lda (pPS),y - >SYSCALL SYS.GetMemPtrA - bcs .99 - >STYA ZPPtr1 - lda (ZPPtr1) - tay - adc #3 len of ".T." - sta ASM.T.FILENAMELEN - adc #4 len of "6502" - sta ASM.T.FILENAME - tax - -.2 lda (ZPPtr1),y - sta ASM.T.FILENAME,y - dey - bne .2 - - ldy #6 -.3 lda ASM.T.DEFAULT,y - sta ASM.T.FILENAME,x - dex - dey - bpl .3 - - jsr LOAD.ASM.T - bcs .99 + jsr FIO.Init + bcs .9 jsr SYM.Init - bcs .99 + bcs .9 - lda #$80 - ldy #ASM.LI.ON - sta (pData),y - - lda #$00 - ldy #ASM.LI.CON - sta (pData),y - ldy #ASM.LI.XON - sta (pData),y + jsr DIR.Init lda (pPs) - ora #S.PS.F.EVENT Now accept events + ora #S.PS.F.EVENT sta (pPs) clc rts -.98 lda #ERR.INV.ARGS - +.99 >PUSHW L.MSG.HELP1 + >LIBCALL hLIBSTR,LIBSTR.PRINTF + >PUSHW L.MSG.HELP2 + >LIBCALL hLIBSTR,LIBSTR.PRINTF + lda #ERR.INV.ARGS sec -.99 rts +.9 rts *-------------------------------------- CS.RUN ldy #bCANCEL lda (pData),y @@ -455,9 +429,8 @@ MSG.PASS >CSTRING "Pass:#%d\n" MSG.SRC.FILE >CSTRING "Reading SRC File:%S\n" MSG.OBJ.FILE >CSTRING "Writing OBJ File:%S, Type=%02x\n" MSG.T.FILE >CSTRING "Loading CPU File:%S\n" -MSG.SRCLINE >CSTRING "%05D-%s\n" +MSG.SRCLINE >CSTRING "%H: %05D-%s\n" MSG.ERROR >CSTRING "%05D-Error:$%h\n" -MSG.DEBUG >CSTRING "DEBUG:%h:%S:%s\n" MSG.SYMBOLS >CSTRING "Symbol Table:\n" MSG.GSYMBOL >CSTRING "$%H%H:%S" MSG.LSYMBOL >CSTRING " .%d:+$%h" @@ -514,25 +487,26 @@ bCANCEL .BS 1 SRC.hFILENAME .BS 1 SRC.COUNT .BS 1 -SRC.hREFNUMS .BS SRC.IN.MAXDEPTH Store ref_num of opened files (Main, .INs & .INBs) -SRC.hBUFFERS .BS SRC.IN.MAXDEPTH Store hMem to allocated buffers -SRC.hFILETYPES .BS SRC.IN.MAXDEPTH Store file type of opened SRC files +SRC.hREFNUMS .BS SRC.IN.MAXDEPTH +SRC.hBUFFERS .BS SRC.IN.MAXDEPTH +SRC.hFILETYPES .BS SRC.IN.MAXDEPTH DST.hFILENAME .BS 1 DST.hREFNUM .BS 1 DST.hBUFFER .BS 1 DST.hFILETYPE .BS 1 -ASM.T.hMem .BS 1 handle to ASM.T.xxxxx +ASM.T.hMem .BS 1 SYM.hCurSBlock .BS 1 SYM.iCurSBlock .BS 1 SYM.LastSBlock .BS 1 SYM.hSBlocks .BS SYM.SBLOCK.MAX -SYM.hCurGBlock .BS 1 +SYM.pCurGBlock .BS 1 SYM.iCurGBlock .BS 1 -SYM.LastGBlock .BS 1 +SYM.pLastGBlock .BS 1 +SYM.iLastGBlock .BS 1 SYM.hGBlocks .BS SYM.GBLOCK.MAX SYM.hCurPBlock .BS 1 @@ -547,15 +521,21 @@ SYM.hMBlocks .BS SYM.MBLOCK.MAX SYM.DumpCount .BS 1 +DIR.Counter .BS 2 +DIR.Byte .BS 1 + ASM.PASS .BS 1 ASM.MACRO.ON .BS 1 +ASM.DO.Count .BS 1 +ASM.DOELSE.Flag .BS SRC.DO.MAXDEPTH +ASM.DO.ON .BS 1 ASM.PH.ON .BS 1 ASM.LI.ON .BS 1 ASM.LI.CON .BS 1 ASM.LI.XON .BS 1 -ASM.PC .BS 4 32Bits PC -ASM.PC.PH .BS 4 32Bits PC saved for PH directive -ASM.PC.GLABEL .BS 4 32Bits PC for last Label (for local labels) +ASM.PC .BS 4 +ASM.PC.PH .BS 4 +ASM.PC.GLABEL .BS 4 ASM.LOCAL.OFFSET .BS 1 Store local offset from last Global Symbol for local (.xx) ASM.LOCAL.INVALID .BS 1 If not in global or offset out of range this flag is set ASM.SYM.ID .BS 2 For reference when a local label is parsed