mirror of
https://github.com/holub/mame
synced 2025-06-01 18:41:47 +03:00
Merge pull request #1701 from npwoods/dasmstream_ie15
Changed the ie15 disassembler to use 'std::ostream &' internally
This commit is contained in:
commit
d14ddc6138
@ -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;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user