Merge pull request #1719 from npwoods/dasmstream_pdp1

Changed the pdp1 disassembler to use 'std::ostream &' internally
This commit is contained in:
Vas Crabb 2016-11-17 11:31:50 +11:00 committed by GitHub
commit 676b63a879

View File

@ -18,9 +18,9 @@ static inline void ea (void)
}*/ }*/
} }
#define IN if (ib) sprintf(buffer+strlen(buffer)," i") #define IN if (ib) util::stream_format(stream, " i")
CPU_DISASSEMBLE( pdp1 ) static offs_t internal_disasm_pdp1(cpu_device *device, std::ostream &stream, offs_t pc, const uint8_t *oprom, const uint8_t *opram, int options)
{ {
int md; int md;
//int etime = 0; //int etime = 0;
@ -33,156 +33,155 @@ CPU_DISASSEMBLE( pdp1 )
{ {
case AND: case AND:
ea (); ea ();
sprintf (buffer, "AND (0%06o)", y); util::stream_format(stream, "AND (0%06o)", y);
IN; IN;
//etime = 10; //etime = 10;
break; break;
case IOR: case IOR:
ea (); ea ();
sprintf (buffer, "IOR (0%06o)", y); util::stream_format(stream, "IOR (0%06o)", y);
IN; IN;
//etime = 10; //etime = 10;
break; break;
case XOR: case XOR:
ea (); ea ();
sprintf (buffer, "XOR (0%06o)", y); util::stream_format(stream, "XOR (0%06o)", y);
IN; IN;
//etime = 10; //etime = 10;
break; break;
case XCT: case XCT:
ea (); ea ();
sprintf (buffer, "XCT (0%06o)", y); util::stream_format(stream, "XCT (0%06o)", y);
IN; IN;
//etime = 5; //etime = 5;
break; break;
case CALJDA: case CALJDA:
{ {
if (ib == 1) if (ib == 1)
sprintf (buffer, "JDA 0%06o ", y); util::stream_format(stream, "JDA 0%06o ", y);
if (ib == 0) if (ib == 0)
sprintf (buffer, "CAL "); util::stream_format(stream, "CAL ");
//etime = 10; //etime = 10;
break; break;
} }
case LAC: case LAC:
ea (); ea ();
sprintf (buffer, "LAC (0%06o)", y); util::stream_format(stream, "LAC (0%06o)", y);
IN; IN;
//etime = 10; //etime = 10;
break; break;
case LIO: case LIO:
ea (); ea ();
sprintf (buffer, "LIO (0%06o)", y); util::stream_format(stream, "LIO (0%06o)", y);
IN; IN;
//etime = 10; //etime = 10;
break; break;
case DAC: case DAC:
ea (); ea ();
sprintf (buffer, "DAC 0%06o ", y); util::stream_format(stream, "DAC 0%06o ", y);
IN; IN;
//etime = 10; //etime = 10;
break; break;
case DAP: case DAP:
ea (); ea ();
sprintf (buffer, "DAP 0%06o ", y); util::stream_format(stream, "DAP 0%06o ", y);
IN; IN;
//etime = 10; //etime = 10;
break; break;
case DIP: case DIP:
ea (); ea ();
sprintf (buffer, "DIP 0%06o ", y); util::stream_format(stream, "DIP 0%06o ", y);
IN; IN;
//etime = 10; //etime = 10;
break; break;
case DIO: case DIO:
ea (); ea ();
sprintf (buffer, "DIO 0%06o ", y); util::stream_format(stream, "DIO 0%06o ", y);
IN; IN;
//etime = 10; //etime = 10;
break; break;
case DZM: case DZM:
ea (); ea ();
sprintf (buffer, "DZM 0%06o ", y); util::stream_format(stream, "DZM 0%06o ", y);
IN; IN;
//etime = 10; //etime = 10;
break; break;
case ADD: case ADD:
ea (); ea ();
sprintf (buffer, "ADD (0%06o)", y); util::stream_format(stream, "ADD (0%06o)", y);
IN; IN;
//etime = 10; //etime = 10;
break; break;
case SUB: case SUB:
ea (); ea ();
sprintf (buffer, "SUB (0%06o)", y); util::stream_format(stream, "SUB (0%06o)", y);
IN; IN;
//etime = 10; //etime = 10;
break; break;
case IDX: case IDX:
ea (); ea ();
sprintf (buffer, "IDX (0%06o)", y); util::stream_format(stream, "IDX (0%06o)", y);
IN; IN;
//etime = 10; //etime = 10;
break; break;
case ISP: case ISP:
ea (); ea ();
sprintf (buffer, "ISP (0%06o)", y); util::stream_format(stream, "ISP (0%06o)", y);
IN; IN;
//etime = 10; //etime = 10;
break; break;
case SAD: case SAD:
ea (); ea ();
sprintf (buffer, "SAD (0%06o)", y); util::stream_format(stream, "SAD (0%06o)", y);
IN; IN;
//etime = 10; //etime = 10;
break; break;
case SAS: case SAS:
ea (); ea ();
sprintf (buffer, "SAS (0%06o)", y); util::stream_format(stream, "SAS (0%06o)", y);
IN; IN;
//etime = 10; //etime = 10;
break; break;
case MUS_MUL: case MUS_MUL:
ea (); ea ();
sprintf (buffer, "MUS (0%06o)", y); util::stream_format(stream, "MUS (0%06o)", y);
IN; IN;
//etime = 10; //etime = 10;
break; break;
case DIS_DIV: case DIS_DIV:
ea (); ea ();
sprintf (buffer, "DIS (0%06o)", y); util::stream_format(stream, "DIS (0%06o)", y);
IN; IN;
//etime = 10; //etime = 10;
break; break;
case JMP: case JMP:
ea (); ea ();
sprintf (buffer, "JMP 0%06o ", y); util::stream_format(stream, "JMP 0%06o ", y);
IN; IN;
//etime = 5; //etime = 5;
break; break;
case JSP: case JSP:
ea (); ea ();
sprintf (buffer, "JSP 0%06o ", y); util::stream_format(stream, "JSP 0%06o ", y);
IN; IN;
//etime = 5; //etime = 5;
break; break;
case SKP: case SKP:
{ {
buffer[0] = 0;
if ((y & 0100) == 0100) if ((y & 0100) == 0100)
sprintf (buffer, "SZA "); util::stream_format(stream, "SZA ");
if ((y & 0200) == 0200) if ((y & 0200) == 0200)
sprintf (buffer + strlen (buffer), "SPA "); util::stream_format(stream, "SPA ");
if ((y & 0400) == 0400) if ((y & 0400) == 0400)
sprintf (buffer + strlen (buffer), "SMA "); util::stream_format(stream, "SMA ");
if ((y & 01000) == 01000) if ((y & 01000) == 01000)
sprintf (buffer + strlen (buffer), "SZO "); util::stream_format(stream, "SZO ");
if ((y & 02000) == 02000) if ((y & 02000) == 02000)
sprintf (buffer + strlen (buffer), "SPI "); util::stream_format(stream, "SPI ");
if (y & 070) if (y & 070)
sprintf (buffer + strlen (buffer), "SZS 0%01o ", (y & 070)); util::stream_format(stream, "SZS 0%01o ", (y & 070));
if (y & 7) if (y & 7)
sprintf (buffer + strlen (buffer), "SZF 0%01o ", (y & 7)); util::stream_format(stream, "SZF 0%01o ", (y & 7));
IN; IN;
//etime = 5; //etime = 5;
break; break;
@ -200,95 +199,104 @@ CPU_DISASSEMBLE( pdp1 )
switch ((md >> 9) & 017) switch ((md >> 9) & 017)
{ {
case 1: case 1:
sprintf (buffer, "RAL 0%02o", nshift); util::stream_format(stream, "RAL 0%02o", nshift);
//etime = 5; //etime = 5;
break; break;
case 2: case 2:
sprintf (buffer, "RIL 0%02o", nshift); util::stream_format(stream, "RIL 0%02o", nshift);
//etime = 5; //etime = 5;
break; break;
case 3: case 3:
sprintf (buffer, "RCL 0%02o", nshift); util::stream_format(stream, "RCL 0%02o", nshift);
//etime = 5; //etime = 5;
break; break;
case 5: case 5:
sprintf (buffer, "SAL 0%02o", nshift); util::stream_format(stream, "SAL 0%02o", nshift);
//etime = 5; //etime = 5;
break; break;
case 6: case 6:
sprintf (buffer, "SIL 0%02o", nshift); util::stream_format(stream, "SIL 0%02o", nshift);
//etime = 5; //etime = 5;
break; break;
case 7: case 7:
sprintf (buffer, "SCL 0%02o", nshift); util::stream_format(stream, "SCL 0%02o", nshift);
//etime = 5; //etime = 5;
break; break;
case 9: case 9:
sprintf (buffer, "RAR 0%02o", nshift); util::stream_format(stream, "RAR 0%02o", nshift);
//etime = 5; //etime = 5;
break; break;
case 10: case 10:
sprintf (buffer, "RIR 0%02o", nshift); util::stream_format(stream, "RIR 0%02o", nshift);
//etime = 5; //etime = 5;
break; break;
case 11: case 11:
sprintf (buffer, "RCR 0%02o", nshift); util::stream_format(stream, "RCR 0%02o", nshift);
//etime = 5; //etime = 5;
break; break;
case 13: case 13:
sprintf (buffer, "SAR 0%02o", nshift); util::stream_format(stream, "SAR 0%02o", nshift);
//etime = 5; //etime = 5;
break; break;
case 14: case 14:
sprintf (buffer, "SIR 0%02o", nshift); util::stream_format(stream, "SIR 0%02o", nshift);
//etime = 5; //etime = 5;
break; break;
case 15: case 15:
sprintf (buffer, "SCR 0%02o", nshift); util::stream_format(stream, "SCR 0%02o", nshift);
//etime = 5; //etime = 5;
break; break;
default: default:
sprintf (buffer, "SKP ???"); util::stream_format(stream, "SKP ???");
//etime = 5; //etime = 5;
break; break;
} }
break; break;
} }
case LAW: case LAW:
sprintf (buffer, "LAW 0%06o", y); util::stream_format(stream, "LAW 0%06o", y);
IN; IN;
//etime = 5; //etime = 5;
break; break;
case IOT: case IOT:
sprintf (buffer, "IOT 0%06o", md); util::stream_format(stream, "IOT 0%06o", md);
//etime = 10; //etime = 10;
break; break;
case OPR: case OPR:
{ {
buffer[0] = 0;
if ((y & 04000) == 04000) if ((y & 04000) == 04000)
sprintf (buffer + strlen (buffer), "CLI "); util::stream_format(stream, "CLI ");
if ((y & 02000) == 02000) if ((y & 02000) == 02000)
sprintf (buffer + strlen (buffer), "LAT "); util::stream_format(stream, "LAT ");
if ((y & 01000) == 01000) if ((y & 01000) == 01000)
sprintf (buffer + strlen (buffer), "CMA "); util::stream_format(stream, "CMA ");
if ((y & 0400) == 0400) if ((y & 0400) == 0400)
sprintf (buffer + strlen (buffer), "HLT "); util::stream_format(stream, "HLT ");
if ((y & 0100) == 0100) if ((y & 0100) == 0100)
sprintf (buffer + strlen (buffer), "LAP "); util::stream_format(stream, "LAP ");
if ((y & 010) && (y & 7)) if ((y & 010) && (y & 7))
sprintf (buffer + strlen (buffer), "STF 0%01o ", (y & 7)); util::stream_format(stream, "STF 0%01o ", (y & 7));
if ((!(y & 010)) && (y & 7)) if ((!(y & 010)) && (y & 7))
sprintf (buffer + strlen (buffer), "CLF 0%01o ", (y & 7)); util::stream_format(stream, "CLF 0%01o ", (y & 7));
if (!(y)) if (!(y))
sprintf (buffer + strlen (buffer), "NOP "); util::stream_format(stream, "NOP ");
//etime = 5; //etime = 5;
break; break;
} }
default: default:
sprintf (buffer, "ILLEGAL"); util::stream_format(stream, "ILLEGAL");
//etime = 5; //etime = 5;
break; break;
} }
return 4; return 4;
} }
CPU_DISASSEMBLE(pdp1)
{
std::ostringstream stream;
offs_t result = internal_disasm_pdp1(device, stream, pc, oprom, opram, options);
std::string stream_str = stream.str();
strcpy(buffer, stream_str.c_str());
return result;
}