1
0
mirror of https://github.com/brouhaha/dis6502.git synced 2024-06-02 10:41:30 +00:00

don't print equates for offsets like name+1.

This commit is contained in:
Eric Smith 2003-09-12 08:04:26 +00:00
parent 286e07ab31
commit 895706eae4

134
print.c
View File

@ -10,67 +10,22 @@
char *strcpy(); char *strcpy();
char *strcat(); char *strcat();
void dumpitout (void)
static int has_offset (int i)
{ {
int i; return ((i > 0) && (! (f [i] & NAMED)) &&
((f [i-1] & (NAMED | DREF)) == (NAMED | DREF)));
for(i = 0; i<0x10000;)
{
if (f[i] & LOADED)
{
if ((i == 0) || (! (f[i-1] & LOADED)))
printf ("\t.org\t$%04x\n", i);
if (f[i] & SREF && f[i] & ISOP)
printf("\n");
if (! asmout)
{
printf("%04x ",i);
print_bytes(i);
}
if (print_label(i))
printf (":");
printf ("\t");
if (f[i] & ISOP)
i += print_inst(i);
else
i += print_data(i);
printf("\n");
}
else
{
if (print_label (i))
{
if (i <= 0xff)
printf ("\t.equ\t$%02x\n", i);
else
printf ("\t.equ\t$%04x\n", i);
}
i++;
}
}
if (! asmout)
print_refs();
} }
int pchar (int c)
{
if (isascii(c) && isprint(c))
return(c);
return('.');
}
char *lname (int i) static char *lname (int i, int offset_ok)
{ {
static char buf[20]; static char buf[20];
char t; char t;
if (f[i] & NAMED) if (f[i] & NAMED)
return(get_name(i)); return(get_name(i));
if ((i > 0) && ((f[i-1] & (NAMED | DREF)) == (NAMED | DREF))) { if (offset_ok && has_offset (i)) {
(void)strcpy(buf, get_name(i-1)); (void)strcpy(buf, get_name(i-1));
(void)strcat(buf, "+1"); (void)strcat(buf, "+1");
return (buf); return (buf);
@ -97,17 +52,74 @@ char *lname (int i)
return (buf); return (buf);
} }
int print_label (int i)
static int print_label (int i)
{ {
if (f[i] & (NAMED | JREF | SREF | DREF)) if (f[i] & (NAMED | JREF | SREF | DREF))
{ {
printf("%s", lname(i)); printf("%s", lname(i, 0));
return (1); return (1);
} }
else else
return (0); return (0);
} }
void dumpitout (void)
{
int i;
for(i = 0; i<0x10000;)
{
if (f[i] & LOADED)
{
if ((i == 0) || (! (f[i-1] & LOADED)))
printf ("\t.org\t$%04x\n", i);
if (f[i] & SREF && f[i] & ISOP)
printf("\n");
if (! asmout)
{
printf("%04x ",i);
print_bytes(i);
}
if (! has_offset (i))
{
if (print_label(i))
printf (":");
}
printf ("\t");
if (f[i] & ISOP)
i += print_inst(i);
else
i += print_data(i);
printf("\n");
}
else
{
if ((! has_offset (i)) && print_label (i))
{
if (i <= 0xff)
printf ("\t.equ\t$%02x\n", i);
else
printf ("\t.equ\t$%04x\n", i);
}
i++;
}
}
if (! asmout)
print_refs();
}
int pchar (int c)
{
if (isascii(c) && isprint(c))
return(c);
return('.');
}
void print_bytes (int addr) void print_bytes (int addr)
{ {
register struct info *ip; register struct info *ip;
@ -173,24 +185,24 @@ int print_inst(int addr)
case REL: case REL:
case ABS: case ABS:
case ZPG: case ZPG:
printf("\t%s", lname(operand)); printf("\t%s", lname(operand, 1));
break; break;
case IND: case IND:
printf("\t(%s)", lname(operand)); printf("\t(%s)", lname(operand, 1));
break; break;
case ABX: case ABX:
case ZPX: case ZPX:
printf("\t%s,X", lname(operand)); printf("\t%s,X", lname(operand, 1));
break; break;
case ABY: case ABY:
case ZPY: case ZPY:
printf("\t%s,Y", lname(operand)); printf("\t%s,Y", lname(operand, 1));
break; break;
case INX: case INX:
printf("\t(%s,X)", lname(operand)); printf("\t(%s,X)", lname(operand, 1));
break; break;
case INY: case INY:
printf("\t(%s),Y", lname(operand)); printf("\t(%s),Y", lname(operand, 1));
break; break;
default: default:
break; break;
@ -256,14 +268,14 @@ void print_refs (void)
break; break;
} }
fprintf(fp, "%-8s %04x ", lname(i), i); fprintf(fp, "%-8s %04x ", lname(i, 1), i);
npline = 0; npline = 0;
while (rp) { while (rp) {
fprintf(fp, "%04x ", rp->who); fprintf(fp, "%04x ", rp->who);
npline++; npline++;
if (npline == 12) { if (npline == 12) {
fprintf(fp,"\n"); fprintf(fp,"\n");
fprintf(fp,"%-8s %04x ",lname(i),i); fprintf(fp,"%-8s %04x ",lname(i, 1),i);
npline = 0; npline = 0;
} }
rp = rp->next; rp = rp->next;