Merge pull request #1701 from npwoods/dasmstream_ie15

Changed the ie15 disassembler to use 'std::ostream &' internally
This commit is contained in:
Vas Crabb 2016-11-16 17:10:39 +11:00 committed by GitHub
commit d14ddc6138

View File

@ -5,7 +5,7 @@
#define OP(A) oprom[(A) - PC]
#define ARG(A) opram[(A) - PC]
CPU_DISASSEMBLE( ie15 )
static offs_t internal_disasm_ie15(cpu_device *device, std::ostream &stream, offs_t pc, const uint8_t *oprom, const uint8_t *opram, int options)
{
uint32_t flags = 0;
uint8_t op;
@ -15,112 +15,122 @@ CPU_DISASSEMBLE( ie15 )
switch (op & 0xf0)
{
case 0x00:
sprintf (buffer,"add r%d", op & 0x0f);
util::stream_format(stream, "add r%d", op & 0x0f);
break;
case 0x10:
sprintf (buffer,"jmp $%04x", (((op & 0x0f) << 8) | ARG(pc)) + 1);
util::stream_format(stream, "jmp $%04x", (((op & 0x0f) << 8) | ARG(pc)) + 1);
pc+=1;
break;
case 0x20:
sprintf (buffer,"ldc r%d, #$%02x", (op & 0x0f), ARG(pc));
util::stream_format(stream, "ldc r%d, #$%02x", (op & 0x0f), ARG(pc));
pc+=1;
break;
case 0x30: switch (op)
{
case 0x30:
sprintf (buffer,"lca #$%02x", ARG(pc));
util::stream_format(stream, "lca #$%02x", ARG(pc));
pc+=1;
break;
case 0x33:
sprintf (buffer,"ral");
util::stream_format(stream, "ral");
break;
case 0x35:
sprintf (buffer,"rar");
util::stream_format(stream, "rar");
break;
default:
sprintf (buffer,"illegal");
util::stream_format(stream, "illegal");
break;
};
break;
case 0x40:
sprintf (buffer,"dsr r%d", op & 0x0f);
util::stream_format(stream, "dsr r%d", op & 0x0f);
break;
case 0x50: switch (op)
{
case 0x50:
sprintf (buffer,"isn");
util::stream_format(stream, "isn");
break;
case 0x51:
sprintf (buffer,"inc");
util::stream_format(stream, "inc");
break;
case 0x52:
sprintf (buffer,"dsn");
util::stream_format(stream, "dsn");
break;
case 0x58:
sprintf (buffer,"ise");
util::stream_format(stream, "ise");
break;
case 0x5a:
sprintf (buffer,"dse");
util::stream_format(stream, "dse");
break;
case 0x5b:
sprintf (buffer,"dec");
util::stream_format(stream, "dec");
break;
case 0x5d:
sprintf (buffer,"com");
util::stream_format(stream, "com");
break;
case 0x5f:
sprintf (buffer,"clr");
util::stream_format(stream, "clr");
break;
default:
sprintf (buffer,"illegal");
util::stream_format(stream, "illegal");
break;
};
break;
case 0x60:
sprintf (buffer,"lla #$%02x", op & 0x0f);
util::stream_format(stream, "lla #$%02x", op & 0x0f);
break;
case 0x70:
sprintf (buffer,"jmi r%d", op & 0x0f);
util::stream_format(stream, "jmi r%d", op & 0x0f);
break;
case 0x80: switch (op)
{
case 0x80: case 0x81: case 0x82: case 0x83:
case 0x84: case 0x85: case 0x86:
sprintf (buffer,"sfc #%d", op & 0x07);
util::stream_format(stream, "sfc #%d", op & 0x07);
break;
case 0x87:
sprintf (buffer,"skp");
util::stream_format(stream, "skp");
break;
case 0x88: case 0x89: case 0x8a: case 0x8b:
case 0x8c: case 0x8d: case 0x8e:
sprintf (buffer,"sfs #%d", op & 0x07);
util::stream_format(stream, "sfs #%d", op & 0x07);
break;
case 0x8f:
sprintf (buffer,"nop");
util::stream_format(stream, "nop");
break;
};
break;
case 0x90:
sprintf (buffer,"and r%d", op & 0x0f);
util::stream_format(stream, "and r%d", op & 0x0f);
break;
case 0xa0:
sprintf (buffer,"xor r%d", op & 0x0f);
util::stream_format(stream, "xor r%d", op & 0x0f);
break;
case 0xb0:
sprintf (buffer,"cs r%d", op & 0x0f);
util::stream_format(stream, "cs r%d", op & 0x0f);
break;
case 0xc0:
sprintf (buffer,"%s #%d", BIT(op, 3) ? "sfl" : "cfl", op & 0x07);
util::stream_format(stream, "%s #%d", BIT(op, 3) ? "sfl" : "cfl", op & 0x07);
break;
case 0xd0:
sprintf (buffer,"lda r%d", op & 0x0f);
util::stream_format(stream, "lda r%d", op & 0x0f);
break;
case 0xe0:
sprintf (buffer,"sta r%d", op & 0x0f);
util::stream_format(stream, "sta r%d", op & 0x0f);
break;
case 0xf0:
sprintf (buffer,"ota #$%02x", op & 0x0f);
util::stream_format(stream, "ota #$%02x", op & 0x0f);
break;
}
return (pc - PC) | flags | DASMFLAG_SUPPORTED;
}
CPU_DISASSEMBLE(ie15)
{
std::ostringstream stream;
offs_t result = internal_disasm_ie15(device, stream, pc, oprom, opram, options);
std::string stream_str = stream.str();
strcpy(buffer, stream_str.c_str());
return result;
}