mirror of
https://github.com/holub/mame
synced 2025-06-06 21:03:47 +03:00
Merge pull request #1720 from npwoods/dasmstream_pdp8
Changed the pdp8 disassembler to use 'std::ostream &' internally
This commit is contained in:
commit
2432bf4212
@ -8,9 +8,7 @@
|
||||
|
||||
#include "emu.h"
|
||||
|
||||
static char *output;
|
||||
|
||||
offs_t pdp8_dasm_one(char *buffer, offs_t pc, uint16_t op)
|
||||
static offs_t pdp8_dasm_one(std::ostream &stream, offs_t pc, uint16_t op)
|
||||
{
|
||||
uint8_t opcode = (op >> 011) & 07;
|
||||
uint16_t current_page = pc & 07600;
|
||||
@ -19,30 +17,28 @@ offs_t pdp8_dasm_one(char *buffer, offs_t pc, uint16_t op)
|
||||
bool indirect = (op & 0400) ? true : false;
|
||||
bool zero_page = (op & 0200) ? false : true;
|
||||
|
||||
output = buffer;
|
||||
|
||||
switch (opcode)
|
||||
{
|
||||
case 0:
|
||||
output += sprintf(buffer, "AND %c %05o", indirect ? 'I' : ' ', zero_page ? zero_addr : current_addr);
|
||||
util::stream_format(stream, "AND %c %05o", indirect ? 'I' : ' ', zero_page ? zero_addr : current_addr);
|
||||
break;
|
||||
case 1:
|
||||
output += sprintf(buffer, "TAD %c %05o", indirect ? 'I' : ' ', zero_page ? zero_addr : current_addr);
|
||||
util::stream_format(stream, "TAD %c %05o", indirect ? 'I' : ' ', zero_page ? zero_addr : current_addr);
|
||||
break;
|
||||
case 2:
|
||||
output += sprintf(buffer, "ISZ %c %05o", indirect ? 'I' : ' ', zero_page ? zero_addr : current_addr);
|
||||
util::stream_format(stream, "ISZ %c %05o", indirect ? 'I' : ' ', zero_page ? zero_addr : current_addr);
|
||||
break;
|
||||
case 3:
|
||||
output += sprintf(buffer, "DCA %c %05o", indirect ? 'I' : ' ', zero_page ? zero_addr : current_addr);
|
||||
util::stream_format(stream, "DCA %c %05o", indirect ? 'I' : ' ', zero_page ? zero_addr : current_addr);
|
||||
break;
|
||||
case 4:
|
||||
output += sprintf(buffer, "JMS %c %05o", indirect ? 'I' : ' ', zero_page ? zero_addr : current_addr);
|
||||
util::stream_format(stream, "JMS %c %05o", indirect ? 'I' : ' ', zero_page ? zero_addr : current_addr);
|
||||
break;
|
||||
case 5:
|
||||
output += sprintf(buffer, "JMP %c %05o", indirect ? 'I' : ' ', zero_page ? zero_addr : current_addr);
|
||||
util::stream_format(stream, "JMP %c %05o", indirect ? 'I' : ' ', zero_page ? zero_addr : current_addr);
|
||||
break;
|
||||
case 6:
|
||||
output += sprintf(buffer, "IOT %03o %01o", (op >> 03) & 077, op & 07);
|
||||
util::stream_format(stream, "IOT %03o %01o", (op >> 03) & 077, op & 07);
|
||||
break;
|
||||
case 7:
|
||||
{
|
||||
@ -51,50 +47,50 @@ offs_t pdp8_dasm_one(char *buffer, offs_t pc, uint16_t op)
|
||||
{
|
||||
if (!(op & 0377))
|
||||
{
|
||||
output += sprintf(buffer, "NOP ");
|
||||
util::stream_format(stream, "NOP ");
|
||||
}
|
||||
else
|
||||
{
|
||||
if (op & 0200)
|
||||
{
|
||||
output += sprintf(buffer, "CLA ");
|
||||
util::stream_format(stream, "CLA ");
|
||||
}
|
||||
if (op & 0100)
|
||||
{
|
||||
output += sprintf(buffer, "CLL ");
|
||||
util::stream_format(stream, "CLL ");
|
||||
}
|
||||
if (op & 040)
|
||||
{
|
||||
output += sprintf(buffer, "CMA ");
|
||||
util::stream_format(stream, "CMA ");
|
||||
}
|
||||
if (op & 020)
|
||||
{
|
||||
output += sprintf(buffer, "CML ");
|
||||
util::stream_format(stream, "CML ");
|
||||
}
|
||||
if (op & 01)
|
||||
{
|
||||
output += sprintf(buffer, "IAC ");
|
||||
util::stream_format(stream, "IAC ");
|
||||
}
|
||||
if (op & 010)
|
||||
{
|
||||
if (op & 02)
|
||||
{
|
||||
output += sprintf(buffer, "RTR ");
|
||||
util::stream_format(stream, "RTR ");
|
||||
}
|
||||
else
|
||||
{
|
||||
output += sprintf(buffer, "RAR ");
|
||||
util::stream_format(stream, "RAR ");
|
||||
}
|
||||
}
|
||||
if (op & 04)
|
||||
{
|
||||
if (op & 02)
|
||||
{
|
||||
output += sprintf(buffer, "RTL ");
|
||||
util::stream_format(stream, "RTL ");
|
||||
}
|
||||
else
|
||||
{
|
||||
output += sprintf(buffer, "RAL ");
|
||||
util::stream_format(stream, "RAL ");
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -103,7 +99,7 @@ offs_t pdp8_dasm_one(char *buffer, offs_t pc, uint16_t op)
|
||||
{
|
||||
if (!(op & 0377))
|
||||
{
|
||||
output += sprintf(buffer, "NOP ");
|
||||
util::stream_format(stream, "NOP ");
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -111,21 +107,21 @@ offs_t pdp8_dasm_one(char *buffer, offs_t pc, uint16_t op)
|
||||
{
|
||||
if (!(op & 0160))
|
||||
{
|
||||
output += sprintf(buffer, "SKP ");
|
||||
util::stream_format(stream, "SKP ");
|
||||
}
|
||||
else
|
||||
{
|
||||
if (op & 0100)
|
||||
{
|
||||
output += sprintf(buffer, "SPA ");
|
||||
util::stream_format(stream, "SPA ");
|
||||
}
|
||||
if (op & 040)
|
||||
{
|
||||
output += sprintf(buffer, "SNA ");
|
||||
util::stream_format(stream, "SNA ");
|
||||
}
|
||||
if (op & 020)
|
||||
{
|
||||
output += sprintf(buffer, "SZL ");
|
||||
util::stream_format(stream, "SZL ");
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -133,28 +129,28 @@ offs_t pdp8_dasm_one(char *buffer, offs_t pc, uint16_t op)
|
||||
{
|
||||
if (op & 0100)
|
||||
{
|
||||
output += sprintf(buffer, "SMA ");
|
||||
util::stream_format(stream, "SMA ");
|
||||
}
|
||||
if (op & 040)
|
||||
{
|
||||
output += sprintf(buffer, "SZA ");
|
||||
util::stream_format(stream, "SZA ");
|
||||
}
|
||||
if (op & 020)
|
||||
{
|
||||
output += sprintf(buffer, "SNL ");
|
||||
util::stream_format(stream, "SNL ");
|
||||
}
|
||||
}
|
||||
if (op & 0200)
|
||||
{
|
||||
output += sprintf(buffer, "CLA ");
|
||||
util::stream_format(stream, "CLA ");
|
||||
}
|
||||
if (op & 04)
|
||||
{
|
||||
output += sprintf(buffer, "OSR ");
|
||||
util::stream_format(stream, "OSR ");
|
||||
}
|
||||
if (op & 02)
|
||||
{
|
||||
output += sprintf(buffer, "HLT ");
|
||||
util::stream_format(stream, "HLT ");
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -164,6 +160,15 @@ offs_t pdp8_dasm_one(char *buffer, offs_t pc, uint16_t op)
|
||||
return 2 | DASMFLAG_SUPPORTED;
|
||||
}
|
||||
|
||||
static offs_t pdp8_dasm_one(char *buffer, offs_t pc, uint16_t op)
|
||||
{
|
||||
std::ostringstream stream;
|
||||
offs_t result = pdp8_dasm_one(stream, pc, op);
|
||||
std::string stream_str = stream.str();
|
||||
strcpy(buffer, stream_str.c_str());
|
||||
return result;
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
|
||||
CPU_DISASSEMBLE( pdp8 )
|
||||
|
@ -151,6 +151,7 @@ CPU_DISASSEMBLE( n8x300 );
|
||||
CPU_DISASSEMBLE( nec );
|
||||
CPU_DISASSEMBLE( nsc8105 );
|
||||
CPU_DISASSEMBLE( pdp1 );
|
||||
CPU_DISASSEMBLE( pdp8 );
|
||||
CPU_DISASSEMBLE( pic16c5x );
|
||||
CPU_DISASSEMBLE( pic16c62x );
|
||||
CPU_DISASSEMBLE( powerpc );
|
||||
@ -320,6 +321,7 @@ static const dasm_table_entry dasm_table[] =
|
||||
{ "nec", _8bit, 0, CPU_DISASSEMBLE_NAME(nec) },
|
||||
{ "nsc8105", _8bit, 0, CPU_DISASSEMBLE_NAME(nsc8105) },
|
||||
{ "pdp1", _32be, 0, CPU_DISASSEMBLE_NAME(pdp1) },
|
||||
{ "pdp8", _16be, 0, CPU_DISASSEMBLE_NAME(pdp8) },
|
||||
{ "pic16c5x", _16le, -1, CPU_DISASSEMBLE_NAME(pic16c5x) },
|
||||
{ "pic16c62x", _16le, -1, CPU_DISASSEMBLE_NAME(pic16c62x) },
|
||||
{ "powerpc", _32be, 0, CPU_DISASSEMBLE_NAME(powerpc) },
|
||||
|
Loading…
Reference in New Issue
Block a user