Added useful debug instruction output

Now the debug output will log all instructions written, their current
offset, and their arguments
This commit is contained in:
arookas 2016-02-05 08:34:29 -05:00
parent 2438e00383
commit ca7057bf02

View file

@ -1,4 +1,5 @@
using System; using System;
using System.Diagnostics;
using System.IO; using System.IO;
using System.Collections.Generic; using System.Collections.Generic;
using System.Text; using System.Text;
@ -75,159 +76,292 @@ namespace arookas {
case 0: WriteINT0(); return; case 0: WriteINT0(); return;
case 1: WriteINT1(); return; case 1: WriteINT1(); return;
} }
#if DEBUG
TraceInstruction("int {0} # ${0:X}", value);
#endif
mText.Writer.Write8(0x00); mText.Writer.Write8(0x00);
mText.Writer.WriteS32(value); mText.Writer.WriteS32(value);
} }
public void WriteFLT(float value) { public void WriteFLT(float value) {
#if DEBUG
TraceInstruction("flt {0}", value);
#endif
mText.Writer.Write8(0x01); mText.Writer.Write8(0x01);
mText.Writer.WriteF32(value); mText.Writer.WriteF32(value);
} }
public void WriteSTR(int index) { public void WriteSTR(int index) {
#if DEBUG
TraceInstruction("str {0}", index);
#endif
mText.Writer.Write8(0x02); mText.Writer.Write8(0x02);
mText.Writer.WriteS32(index); mText.Writer.WriteS32(index);
} }
public void WriteADR(uint value) { public void WriteADR(uint value) {
#if DEBUG
TraceInstruction("adr ${0:X8}", value);
#endif
mText.Writer.Write8(0x03); mText.Writer.Write8(0x03);
mText.Writer.Write32(value); mText.Writer.Write32(value);
} }
public void WriteVAR(int display, int index) { public void WriteVAR(int display, int index) {
#if DEBUG
TraceInstruction("var {0} {1}", display, index);
#endif
mText.Writer.Write8(0x04); mText.Writer.Write8(0x04);
mText.Writer.WriteS32(display); mText.Writer.WriteS32(display);
mText.Writer.WriteS32(index); mText.Writer.WriteS32(index);
} }
public void WriteNOP() { public void WriteNOP() {
#if DEBUG
TraceInstruction("nop");
#endif
mText.Writer.Write8(0x05); mText.Writer.Write8(0x05);
} }
public void WriteINC(int display, int index) { public void WriteINC(int display, int index) {
#if DEBUG
TraceInstruction("inc {0} {1}", display, index);
#endif
mText.Writer.Write8(0x06); mText.Writer.Write8(0x06);
mText.Writer.WriteS32(display); mText.Writer.WriteS32(display);
mText.Writer.WriteS32(index); mText.Writer.WriteS32(index);
} }
public void WriteDEC(int display, int index) { public void WriteDEC(int display, int index) {
#if DEBUG
TraceInstruction("dec {0} {1}", display, index);
#endif
mText.Writer.Write8(0x07); mText.Writer.Write8(0x07);
mText.Writer.WriteS32(display); mText.Writer.WriteS32(display);
mText.Writer.WriteS32(index); mText.Writer.WriteS32(index);
} }
public void WriteADD() { public void WriteADD() {
#if DEBUG
TraceInstruction("add");
#endif
mText.Writer.Write8(0x08); mText.Writer.Write8(0x08);
} }
public void WriteSUB() { public void WriteSUB() {
#if DEBUG
TraceInstruction("sub");
#endif
mText.Writer.Write8(0x09); mText.Writer.Write8(0x09);
} }
public void WriteMUL() { public void WriteMUL() {
#if DEBUG
TraceInstruction("mul");
#endif
mText.Writer.Write8(0x0A); mText.Writer.Write8(0x0A);
} }
public void WriteDIV() { public void WriteDIV() {
#if DEBUG
TraceInstruction("div");
#endif
mText.Writer.Write8(0x0B); mText.Writer.Write8(0x0B);
} }
public void WriteMOD() { public void WriteMOD() {
#if DEBUG
TraceInstruction("mod");
#endif
mText.Writer.Write8(0x0C); mText.Writer.Write8(0x0C);
} }
public void WriteASS(int display, int index) { public void WriteASS(int display, int index) {
#if DEBUG
TraceInstruction("ass {0} {1}", display, index);
#endif
mText.Writer.Write8(0x0D); mText.Writer.Write8(0x0D);
mText.Writer.Write8(0x04); // unused (skipped over by TSpcInterp) mText.Writer.Write8(0x04); // unused (skipped over by TSpcInterp)
mText.Writer.WriteS32(display); mText.Writer.WriteS32(display);
mText.Writer.WriteS32(index); mText.Writer.WriteS32(index);
} }
public void WriteEQ() { public void WriteEQ() {
#if DEBUG
TraceInstruction("eq");
#endif
mText.Writer.Write8(0x0E); mText.Writer.Write8(0x0E);
} }
public void WriteNE() { public void WriteNE() {
#if DEBUG
TraceInstruction("ne");
#endif
mText.Writer.Write8(0x0F); mText.Writer.Write8(0x0F);
} }
public void WriteGT() { public void WriteGT() {
#if DEBUG
TraceInstruction("gt");
#endif
mText.Writer.Write8(0x10); mText.Writer.Write8(0x10);
} }
public void WriteLT() { public void WriteLT() {
#if DEBUG
TraceInstruction("lt");
#endif
mText.Writer.Write8(0x11); mText.Writer.Write8(0x11);
} }
public void WriteGE() { public void WriteGE() {
#if DEBUG
TraceInstruction("ge");
#endif
mText.Writer.Write8(0x12); mText.Writer.Write8(0x12);
} }
public void WriteLE() { public void WriteLE() {
#if DEBUG
TraceInstruction("le");
#endif
mText.Writer.Write8(0x13); mText.Writer.Write8(0x13);
} }
public void WriteNEG() { public void WriteNEG() {
#if DEBUG
TraceInstruction("neg");
#endif
mText.Writer.Write8(0x14); mText.Writer.Write8(0x14);
} }
public void WriteNOT() { public void WriteNOT() {
#if DEBUG
TraceInstruction("not");
#endif
mText.Writer.Write8(0x15); mText.Writer.Write8(0x15);
} }
public void WriteAND() { public void WriteAND() {
#if DEBUG
TraceInstruction("and");
#endif
mText.Writer.Write8(0x16); mText.Writer.Write8(0x16);
} }
public void WriteOR() { public void WriteOR() {
#if DEBUG
TraceInstruction("or");
#endif
mText.Writer.Write8(0x17); mText.Writer.Write8(0x17);
} }
public void WriteBAND() { public void WriteBAND() {
#if DEBUG
TraceInstruction("band");
#endif
mText.Writer.Write8(0x18); mText.Writer.Write8(0x18);
} }
public void WriteBOR() { public void WriteBOR() {
#if DEBUG
TraceInstruction("bor");
#endif
mText.Writer.Write8(0x19); mText.Writer.Write8(0x19);
} }
public void WriteSHL() { public void WriteSHL() {
#if DEBUG
TraceInstruction("shl");
#endif
mText.Writer.Write8(0x1A); mText.Writer.Write8(0x1A);
} }
public void WriteSHR() { public void WriteSHR() {
#if DEBUG
TraceInstruction("shr");
#endif
mText.Writer.Write8(0x1B); mText.Writer.Write8(0x1B);
} }
public void WriteCALL(uint offset, int count) { public void WriteCALL(uint offset, int count) {
#if DEBUG
TraceInstruction("call ${0:X8} {1}", offset, count);
#endif
mText.Writer.Write8(0x1C); mText.Writer.Write8(0x1C);
mText.Writer.Write32(offset); mText.Writer.Write32(offset);
mText.Writer.WriteS32(count); mText.Writer.WriteS32(count);
} }
public void WriteFUNC(int index, int count) { public void WriteFUNC(int index, int count) {
#if DEBUG
TraceInstruction("func {0} {1}", index, count);
#endif
mText.Writer.Write8(0x1D); mText.Writer.Write8(0x1D);
mText.Writer.WriteS32(index); mText.Writer.WriteS32(index);
mText.Writer.WriteS32(count); mText.Writer.WriteS32(count);
} }
public void WriteMKFR(int count) { public void WriteMKFR(int count) {
#if DEBUG
TraceInstruction("mkfr {0}", count);
#endif
mText.Writer.Write8(0x1E); mText.Writer.Write8(0x1E);
mText.Writer.WriteS32(count); mText.Writer.WriteS32(count);
} }
public void WriteMKDS(int display) { public void WriteMKDS(int display) {
#if DEBUG
TraceInstruction("mkds {0}", display);
#endif
mText.Writer.Write8(0x1F); mText.Writer.Write8(0x1F);
mText.Writer.WriteS32(display); mText.Writer.WriteS32(display);
} }
public void WriteRET() { public void WriteRET() {
#if DEBUG
TraceInstruction("ret");
#endif
mText.Writer.Write8(0x20); mText.Writer.Write8(0x20);
} }
public void WriteRET0() { public void WriteRET0() {
#if DEBUG
TraceInstruction("ret0");
#endif
mText.Writer.Write8(0x21); mText.Writer.Write8(0x21);
} }
public sunPoint WriteJNE() { public sunPoint WriteJNE() {
#if DEBUG
TraceInstruction("jne # UNFINISHED");
#endif
mText.Writer.Write8(0x22); mText.Writer.Write8(0x22);
sunPoint point = OpenPoint(); sunPoint point = OpenPoint();
mText.Writer.Write32(0); // dummy mText.Writer.Write32(0); // dummy
return point; return point;
} }
public void WriteJNE(sunPoint point) { public void WriteJNE(sunPoint point) {
#if DEBUG
TraceInstruction("jne {0:X8}", point.Offset);
#endif
mText.Writer.Write8(0x22); mText.Writer.Write8(0x22);
mText.Writer.Write32(point.Offset); mText.Writer.Write32(point.Offset);
} }
public sunPoint WriteJMP() { public sunPoint WriteJMP() {
#if DEBUG
TraceInstruction("jmp # UNFINISHED");
#endif
mText.Writer.Write8(0x23); mText.Writer.Write8(0x23);
sunPoint point = OpenPoint(); sunPoint point = OpenPoint();
mText.Writer.Write32(0); // dummy mText.Writer.Write32(0); // dummy
return point; return point;
} }
public void WriteJMP(sunPoint point) { public void WriteJMP(sunPoint point) {
#if DEBUG
TraceInstruction("jmp {0:X8}", point.Offset);
#endif
mText.Writer.Write8(0x23); mText.Writer.Write8(0x23);
mText.Writer.Write32(point.Offset); mText.Writer.Write32(point.Offset);
} }
public void WritePOP() { public void WritePOP() {
#if DEBUG
TraceInstruction("pop");
#endif
mText.Writer.Write8(0x24); mText.Writer.Write8(0x24);
} }
public void WriteINT0() { public void WriteINT0() {
#if DEBUG
TraceInstruction("int0");
#endif
mText.Writer.Write8(0x25); mText.Writer.Write8(0x25);
} }
public void WriteINT1() { public void WriteINT1() {
#if DEBUG
TraceInstruction("int1");
#endif
mText.Writer.Write8(0x26); mText.Writer.Write8(0x26);
} }
public void WriteEND() { public void WriteEND() {
#if DEBUG
TraceInstruction("end");
#endif
mText.Writer.Write8(0x27); mText.Writer.Write8(0x27);
} }
#if DEBUG
void TraceInstruction(string format, params object[] args) {
var instruction = String.Format(format, args);
Debug.WriteLine("{0:X8} {1}", mText.Size, instruction);
}
#endif
// data // data
public void WriteData(string data) { public void WriteData(string data) {
if (data == null) { if (data == null) {