X-Git-Url: http://shamusworld.gotdns.org/cgi-bin/gitweb.cgi?p=rmac;a=blobdiff_plain;f=debug.c;h=28784bfe5b4cbae1d5fe36da3e0eb71207bd7061;hp=5062b8fb5dff35829fb7108a99928ef3405c91be;hb=eace4e1b294ccec54a5c476619f616f5da0bf8a9;hpb=062214e62031c26d372edc2e68473ebb64f6a506 diff --git a/debug.c b/debug.c index 5062b8f..28784bf 100644 --- a/debug.c +++ b/debug.c @@ -1,9 +1,9 @@ // -// 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-2012 Reboot and Friends +// Copyright (C) 199x Landon Dyer, 2011-2017 Reboot and Friends // RMAC derived from MADMAC v1.07 Written by Landon Dyer, 1986 -// Source Utilised with the Kind Permission of Landon Dyer +// Source utilised with the kind permission of Landon Dyer // #include "debug.h" @@ -15,10 +15,11 @@ static int siztab[4] = { 3, 5, 9, 9 }; +static PTR tp; // -// Print 'c' Visibly +// Print 'c' visibly // int visprt(char c) { @@ -34,35 +35,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' ", ((SYM *)*tp)->sname); - 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; } } } -// printf(";\n"); - return tp + 1; + return tokenptr + 1; } @@ -88,28 +89,24 @@ int chdump(CHUNK * ch, int format) int fudump(CHUNK * ch) { PTR p; - char * ep; - WORD attr, esiz; - WORD line, file; - LONG loc; for(; ch!=NULL;) { p.cp = ch->chptr; - ep = ch->chptr + ch->ch_size; + uint8_t * ep = ch->chptr + ch->ch_size; while (p.cp < ep) { - attr = *p.wp++; - loc = *p.lp++; - file = *p.wp++; - line = *p.wp++; + uint16_t attr = *p.wp++; + uint32_t loc = *p.lp++; + uint16_t file = *p.wp++; + uint16_t line = *p.wp++; printf("$%04X $%08X %d.%d: ", (int)attr, loc, (int)file, (int)line); if (attr & FU_EXPR) { - esiz = *p.wp++; + uint16_t esiz = *p.wp++; printf("(%d long) ", (int)esiz); p.tk = printexpr(p.tk); } @@ -155,7 +152,7 @@ int mudump(void) mch, (mch->mcptr.lw), mch->mcalloc, (mch->mcused)); p = mch->mcptr; - + for(;;) { w = *p.wp++; @@ -187,12 +184,14 @@ int mudump(void) // -// Dump memory from 'start' for 'count' bytes; `flg' is the following ORed together: +// Dump memory from 'start' for 'count' bytes; `flg' is the following ORed +// together: // 0 - bytes // 1 - words // 2 - longwords -// -// if `base' is not -1, then print it at the start of each line, incremented accordingly. +// +// if `base' is not -1, then print it at the start of each line, incremented +// accordingly. // int mdump(char * start, LONG count, int flg, LONG base) { @@ -207,7 +206,7 @@ int mdump(char * start, LONG count, int flg, LONG base) { printf(" "); - while(j < i) + while (j < i) visprt(start[j++]); putchar('\n'); @@ -222,16 +221,16 @@ int mdump(char * start, LONG count, int flg, LONG base) switch (flg & 3) { case 0: - printf("%02X ", start[i] & 0xff); - ++i; + 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: @@ -242,18 +241,18 @@ int mdump(char * start, LONG count, int flg, LONG base) base += 1 << (flg & 3); } - // Print remaining bit of ascii; the hairy expression computes the number of - // spaces to print to make the ascii line up nicely. + // Print remaining bit of ASCII; the hairy expression computes the number + // of spaces to print to make the ASCII line up nicely. if (j != i) { k = ((16 - (i - j)) / (1 << (flg & 3))) * siztab[flg & 3]; - while(k--) + while (k--) putchar(' '); printf(" "); - while(j < i) + while (j < i) visprt(start[j++]); putchar('\n'); @@ -284,39 +283,41 @@ 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++]); break; - case SYMBOL: // SYMBOL
+ case SYMBOL: // SYMBOL
printf("SYMBOL='%s'", string[*tk++]); break; - case EOL: // End of line + case EOL: // End of line printf("EOL"); break; case TKEOF: // End of file (or macro) printf("TKEOF"); break; - case DEQUALS: // == + case DEQUALS: // == printf("DEQUALS"); break; - case DCOLON: // :: + case DCOLON: // :: printf("DCOLON"); break; - case GE: // >= + case GE: // >= printf("GE"); break; - case LE: // <= + case LE: // <= printf("LE"); break; - case NE: // <> or != + case NE: // <> or != printf("NE"); break; - case SHR: // >> + case SHR: // >> printf("SHR"); break; - case SHL: // << + case SHL: // << printf("SHL"); break; default: @@ -331,14 +332,105 @@ 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 +// Dump everything // int dump_everything(void) { - int i; - - for(i=1; i