Merge pull request #1719 from npwoods/dasmstream_pdp1
Changed the pdp1 disassembler to use 'std::ostream &' internally
This commit is contained in:
commit
676b63a879
@ -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;
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user