Enhanced disassembler to trace reported forth bug

This commit is contained in:
Jeremiah Orians 2017-06-16 14:52:23 -04:00
parent 2af3d78744
commit a03da9d8b1
No known key found for this signature in database
GPG Key ID: 7457821534D2ACCD
2 changed files with 48 additions and 10 deletions

View File

@ -19,6 +19,7 @@
Incorporated High level prototypes into makefile
Added logic to catch non-existent input files and report a useful error message
Added DP! to stage2 forth
Added string print and address to output of High level prototype disassembler
** Changed
Extended VPATH in makefile to shorten dependency names

View File

@ -85,6 +85,33 @@ Broken:
exit(EXIT_FAILURE);
}
void print_non_NULL(uint8_t c)
{
if(0 != c)
{
fprintf(stdout, "%c", c);
}
}
void string_values(struct Instruction *c)
{
print_non_NULL(c->raw0);
print_non_NULL(c->raw1);
print_non_NULL(c->raw2);
print_non_NULL(c->raw3);
if(0 != c->raw3)
{
read_instruction(c);
string_values(c);
address = address + 4;
}
else
{
fprintf(stdout, "\t #STRING\n");
}
}
void decode_Integer_4OP(struct Instruction* c)
{
/* Parse Raw Data */
@ -204,7 +231,8 @@ void decode_Integer_4OP(struct Instruction* c)
}
default: /* Unknown 4OP */
{
break;
string_values(c);
return;
}
}
fprintf(stdout, "%s reg%u reg%u reg%u reg%u\t", Name, c->reg0, c->reg1, c->reg2, c->reg3);
@ -527,7 +555,8 @@ void decode_Integer_3OP(struct Instruction* c)
}
default: /* Unknown 3OP*/
{
break;
string_values(c);
return;
}
}
@ -704,7 +733,8 @@ void decode_Integer_2OP(struct Instruction* c)
}
default: /* Unknown 2OP*/
{
break;
string_values(c);
return;
}
}
@ -771,7 +801,8 @@ void decode_1OP(struct Instruction* c)
}
default: /* Unknown 1OP*/
{
break;
string_values(c);
return;
}
}
@ -812,7 +843,8 @@ void decode_0OP(struct Instruction* c)
}
default: /* Unknown 1OP*/
{
break;
string_values(c);
return;
}
}
@ -1003,7 +1035,8 @@ void decode_Integer_2OPI(struct Instruction* c)
}
default: /* Unknown 2OPI*/
{
break;
string_values(c);
return;
}
}
@ -1247,7 +1280,8 @@ void decode_1OPI(struct Instruction* c)
}
default: /* Unknown 1OPI*/
{
break;
string_values(c);
return;
}
}
@ -1280,7 +1314,8 @@ void decode_0OPI(struct Instruction* c)
}
default: /* Unknown 1OPI*/
{
break;
string_values(c);
return;
}
}
@ -1335,7 +1370,8 @@ void decode_HALCODE(struct Instruction* c)
}
default: /* Unknown HALCODE*/
{
break;
string_values(c);
return;
}
}
@ -1398,7 +1434,8 @@ void eval_instruction(struct Instruction* c)
}
default: /* Not supported by this disassembler */
{
fprintf(stdout, "ILLEGAL INSTRUCTION\t# %s\n", c->operation);
string_values(c);
return;
}
}
}