X-Git-Url: http://shamusworld.gotdns.org/cgi-bin/gitweb.cgi?p=rmac;a=blobdiff_plain;f=debug.c;h=1b9b651515202ec2da47006af0a0d259fce563e2;hp=6359cfbc2bddf5909807c3d65d20262d876fa9fe;hb=bdbf34766f4d074a5933eb1326fe4ce03d249e10;hpb=60f204cb9e3905100da0d89f14bb40db764acd9e diff --git a/debug.c b/debug.c index 6359cfb..1b9b651 100644 --- 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 - printf("CONST=%u", *tk++); + tp.u32 = tk; + printf("CONST=%lu", *tp.u64++); + tk = tp.u32; break; case STRING: // STRING
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 //