]> Shamusworld >> Repos - rmac/blobdiff - debug.c
Added in DSP fixups to sect.c, misc. fixes for 6502 assembler.
[rmac] / debug.c
diff --git a/debug.c b/debug.c
index 6359cfbc2bddf5909807c3d65d20262d876fa9fe..1b9b651515202ec2da47006af0a0d259fce563e2 100644 (file)
--- a/debug.c
+++ b/debug.c
@@ -1,7 +1,7 @@
 //
-// RMAC - Reboot's Macro Assembler for the Atari Jaguar Console System
+// RMAC - Reboot's Macro Assembler for all Atari computers
 // DEBUG.C - Debugging Messages
-// Copyright (C) 199x Landon Dyer, 2011-2017 Reboot and Friends
+// Copyright (C) 199x Landon Dyer, 2011-2019 Reboot and Friends
 // RMAC derived from MADMAC v1.07 Written by Landon Dyer, 1986
 // Source utilised with the kind permission of Landon Dyer
 //
@@ -9,12 +9,14 @@
 #include "debug.h"
 #include "amode.h"
 #include "direct.h"
+#include "expr.h"
 #include "mark.h"
 #include "sect.h"
 #include "token.h"
 
 
 static int siztab[4] = { 3, 5, 9, 9 };
+static PTR tp;
 
 
 //
@@ -34,33 +36,35 @@ int visprt(char c)
 //
 // Print expression, return ptr to just past the ENDEXPR
 //
-TOKEN * printexpr(TOKEN * tp)
+TOKEN * printexpr(TOKEN * tokenptr)
 {
-       if (tp != NULL)
+       if (tokenptr != NULL)
        {
-               while (*tp != ENDEXPR)
+               while (*tokenptr != ENDEXPR)
                {
-                       switch ((int)*tp++)
+                       switch ((int)*tokenptr++)
                        {
                        case SYMBOL:
-                               printf("'%s' ", symbolPtr[*tp]->sname);
-                               tp++;
+                               printf("'%s' ", symbolPtr[*tokenptr]->sname);
+                               tokenptr++;
                                break;
                        case CONST:
-                               printf("$%X ", *tp++);
+                               tp.u32 = tokenptr;
+                               printf("$%lX ", *tp.u64++);
+                               tokenptr = tp.u32;
                                break;
                        case ACONST:
-                               printf("ACONST=($%X,$%X) ", *tp, tp[1]);
-                               tp += 2;
+                               printf("ACONST=($%X,$%X) ", *tokenptr, tokenptr[1]);
+                               tokenptr += 2;
                                break;
                        default:
-                               printf("%c ", (char)tp[-1]);
+                               printf("%c ", (char)tokenptr[-1]);
                                break;
                        }
                }
        }
 
-       return tp + 1;
+       return tokenptr + 1;
 }
 
 
@@ -83,46 +87,32 @@ int chdump(CHUNK * ch, int format)
 //
 // Dump fixup records in printable format
 //
-int fudump(CHUNK * ch)
+int fudump(FIXUP * fup)
 {
-       PTR p;
-
-       for(; ch!=NULL;)
+       for(; fup!=NULL;)
        {
-               p.cp = ch->chptr;
-               uint8_t * ep = ch->chptr + ch->ch_size;
-
-               while (p.cp < ep)
-               {
-                       uint16_t attr = *p.wp++;
-                       uint32_t loc = *p.lp++;
-                       uint16_t file = *p.wp++;
-                       uint16_t line = *p.wp++;
+               uint32_t attr = fup->attr;
+               uint32_t loc = fup->loc;
+               uint16_t file = fup->fileno;
+               uint16_t line = fup->lineno;
 
-                       printf("$%04X $%08X %d.%d: ", (int)attr, loc, (int)file, (int)line);
+               printf("$%08X $%08X %d.%d: ", attr, loc, (int)file, (int)line);
 
-                       if (attr & FU_EXPR)
-                       {
-                               uint16_t esiz = *p.wp++;
-                               printf("(%d long) ", (int)esiz);
-                               p.tk = printexpr(p.tk);
-                       }
-                       else
-                       {
-                               printf("`%s' ;", (*p.sy)->sname);
-                               p.sy++;
-                       }
+               if (attr & FU_EXPR)
+               {
+                       uint16_t esiz = ExpressionLength(fup->expr);
+                       printf("(%d long) ", (int)esiz);
+                       printexpr(fup->expr);
+               }
+               else
+                       printf("`%s' ;", fup->symbol->sname);
 
-                       if ((attr & 0x0F00) == FU_JR)
-                       {
-                               printf(" *=$%X", *p.lp);
-                               p.lp++;
-                       }
+               if ((attr & FUMASKRISC) == FU_JR)
+                       printf(" *=$%X", fup->orgaddr);
 
-                       printf("\n");
-               }
+               printf("\n");
 
-               ch = ch->chnext;
+               fup = fup->next;
        }
 
        return 0;
@@ -218,16 +208,16 @@ int mdump(char * start, LONG count, int flg, LONG base)
                switch (flg & 3)
                {
                case 0:
-                       printf("%02X ", start[i] & 0xff);
+                       printf("%02X ", start[i] & 0xFF);
                        i++;
                        break;
                case 1:
-                       printf("%02X%02X ", start[i] & 0xff, start[i+1] & 0xff);
+                       printf("%02X%02X ", start[i] & 0xFF, start[i+1] & 0xFF);
                        i += 2;
                        break;
                case 2:
-                       printf("%02X%02X%02X%02X ", start[i] & 0xff, start[i+1] & 0xff,
-                               start[i+2] & 0xff, start[i+3] & 0xff);
+                       printf("%02X%02X%02X%02X ", start[i] & 0xFF, start[i+1] & 0xFF,
+                               start[i+2] & 0xFF, start[i+3] & 0xFF);
                        i += 4;
                        break;
                case 3:
@@ -280,7 +270,9 @@ int dumptok(TOKEN * tk)
                switch ((int)*tk++)
                {
                case CONST:                                        // CONST <value>
-                       printf("CONST=%u", *tk++);
+                       tp.u32 = tk;
+                       printf("CONST=%lu", *tp.u64++);
+                       tk = tp.u32;
                        break;
                case STRING:                                       // STRING <address>
                        printf("STRING='%s'", string[*tk++]);
@@ -327,6 +319,99 @@ int dumptok(TOKEN * tk)
 }
 
 
+void DumpTokens(TOKEN * tokenBuffer)
+{
+//     printf("Tokens [%X]: ", sloc);
+
+       for(TOKEN * t=tokenBuffer; *t!=EOL; t++)
+       {
+               if (*t == COLON)
+                       printf("[COLON]");
+               else if (*t == CONST)
+               {
+                       tp.u32 = t + 1;
+                       printf("[CONST: $%lX]", *tp.u64);
+                       t += 2;
+               }
+               else if (*t == ACONST)
+               {
+                       printf("[ACONST: $%X, $%X]", (uint32_t)t[1], (uint32_t)t[2]);
+                       t += 2;
+               }
+               else if (*t == STRING)
+               {
+                       t++;
+                       printf("[STRING:\"%s\"]", string[*t]);
+               }
+               else if (*t == SYMBOL)
+               {
+                       t++;
+                       printf("[SYMBOL:\"%s\"]", string[*t]);
+               }
+               else if (*t == EOS)
+                       printf("[EOS]");
+               else if (*t == TKEOF)
+                       printf("[TKEOF]");
+               else if (*t == DEQUALS)
+                       printf("[DEQUALS]");
+               else if (*t == SET)
+                       printf("[SET]");
+               else if (*t == REG)
+                       printf("[REG]");
+               else if (*t == DCOLON)
+                       printf("[DCOLON]");
+               else if (*t == GE)
+                       printf("[GE]");
+               else if (*t == LE)
+                       printf("[LE]");
+               else if (*t == NE)
+                       printf("[NE]");
+               else if (*t == SHR)
+                       printf("[SHR]");
+               else if (*t == SHL)
+                       printf("[SHL]");
+               else if (*t == UNMINUS)
+                       printf("[UNMINUS]");
+               else if (*t == DOTB)
+                       printf("[DOTB]");
+               else if (*t == DOTW)
+                       printf("[DOTW]");
+               else if (*t == DOTL)
+                       printf("[DOTL]");
+               else if (*t == DOTI)
+                       printf("[DOTI]");
+               else if (*t == ENDEXPR)
+                       printf("[ENDEXPR]");
+               else if (*t == CR_ABSCOUNT)
+                       printf("[CR_ABSCOUNT]");
+               else if (*t == CR_DEFINED)
+                       printf("[CR_DEFINED]");
+               else if (*t == CR_REFERENCED)
+                       printf("[CR_REFERENCED]");
+               else if (*t == CR_STREQ)
+                       printf("[CR_STREQ]");
+               else if (*t == CR_MACDEF)
+                       printf("[CR_MACDEF]");
+               else if (*t == CR_TIME)
+                       printf("[CR_TIME]");
+               else if (*t == CR_DATE)
+                       printf("[CR_DATE]");
+               else if (*t >= 0x20 && *t <= 0x2F)
+                       printf("[%c]", (char)*t);
+               else if (*t >= 0x3A && *t <= 0x3F)
+                       printf("[%c]", (char)*t);
+               else if (*t >= 0x80 && *t <= 0x87)
+                       printf("[D%u]", ((uint32_t)*t) - 0x80);
+               else if (*t >= 0x88 && *t <= 0x8F)
+                       printf("[A%u]", ((uint32_t)*t) - 0x88);
+               else
+                       printf("[%X:%c]", (uint32_t)*t, (char)*t);
+       }
+
+       printf("[EOL]\n");
+}
+
+
 //
 // Dump everything
 //