diff --git a/src/devices/cpu/ie15/ie15dasm.cpp b/src/devices/cpu/ie15/ie15dasm.cpp index 536497b9db0..d18fd3c81a6 100644 --- a/src/devices/cpu/ie15/ie15dasm.cpp +++ b/src/devices/cpu/ie15/ie15dasm.cpp @@ -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; +}