mirror of
https://github.com/holub/mame
synced 2025-04-26 02:07:14 +03:00
Changed the SPC700 disassembler to use 'std::ostream &' internally
This commit is contained in:
parent
0f5eda9c28
commit
fb4744dc54
@ -337,11 +337,10 @@ static inline unsigned int read_16_immediate(void)
|
||||
return result | (*rombase++ << 8);
|
||||
}
|
||||
|
||||
CPU_DISASSEMBLE( spc700 )
|
||||
static offs_t internal_disasm_spc700(cpu_device *device, std::ostream &stream, offs_t pc, const uint8_t *oprom, const uint8_t *opram, int options)
|
||||
{
|
||||
const spc700_opcode_struct* opcode;
|
||||
uint32_t flags = 0;
|
||||
char* ptr;
|
||||
int var;
|
||||
int i;
|
||||
|
||||
@ -349,8 +348,7 @@ CPU_DISASSEMBLE( spc700 )
|
||||
rombase = oprom;
|
||||
opcode = g_opcodes + read_8_immediate();
|
||||
|
||||
sprintf(buffer, "%s ", g_opnames[opcode->name]);
|
||||
ptr = buffer + strlen(buffer);
|
||||
stream << g_opnames[opcode->name] << " ";
|
||||
|
||||
if (opcode->name == CALL)
|
||||
flags = DASMFLAG_STEP_OVER;
|
||||
@ -361,77 +359,84 @@ CPU_DISASSEMBLE( spc700 )
|
||||
{
|
||||
int src = read_8_immediate();
|
||||
int dst = read_8_immediate();
|
||||
sprintf(ptr, "$%02x,%s$%02x", dst, (opcode->args[1] == IMM ? "#" : ""), src);
|
||||
ptr += strlen(ptr);
|
||||
util::stream_format(stream, "$%02x,%s$%02x", dst, (opcode->args[1] == IMM ? "#" : ""), src);
|
||||
}
|
||||
else for(i=0;i<2;i++)
|
||||
{
|
||||
if(i == 1 && opcode->args[0] != IMP && opcode->args[1] != IMP)
|
||||
{
|
||||
sprintf(ptr, ",");
|
||||
ptr += strlen(ptr);
|
||||
util::stream_format(stream, ",");
|
||||
}
|
||||
|
||||
switch(opcode->args[i])
|
||||
{
|
||||
case IMP: break;
|
||||
case A: sprintf(ptr, "A"); break;
|
||||
case X: sprintf(ptr, "X"); break;
|
||||
case Y: sprintf(ptr, "Y"); break;
|
||||
case YA: sprintf(ptr, "YA"); break;
|
||||
case SP: sprintf(ptr, "SP"); break;
|
||||
case PSW: sprintf(ptr, "PSW"); break;
|
||||
case C: sprintf(ptr, "C"); break;
|
||||
case REL: sprintf(ptr, "%04x", ((g_pc + (char)read_8_immediate())&0xffff)); break;
|
||||
case UPAG: sprintf(ptr, "$%02x", read_8_immediate()); break;
|
||||
case IMM: sprintf(ptr, "#$%02x", read_8_immediate()); break;
|
||||
case XI: sprintf(ptr, "(X)"); break;
|
||||
case XII: sprintf(ptr, "(X)+"); break;
|
||||
case YI: sprintf(ptr, "(Y)"); break;
|
||||
case DP: sprintf(ptr, "$%02x", read_8_immediate()); break;
|
||||
case DPX: sprintf(ptr, "$%02x+X", read_8_immediate()); break;
|
||||
case DPY: sprintf(ptr, "$%02x+Y", read_8_immediate()); break;
|
||||
case DPI: sprintf(ptr, "($%02x)", read_8_immediate()); break;
|
||||
case DXI: sprintf(ptr, "($%02x+X)", read_8_immediate()); break;
|
||||
case DIY: sprintf(ptr, "($%02x)+Y", read_8_immediate()); break;
|
||||
case ABS: sprintf(ptr, "$%04x", read_16_immediate()); break;
|
||||
case ABX: sprintf(ptr, "$%04x+X", read_16_immediate()); break;
|
||||
case ABY: sprintf(ptr, "$%04x+Y", read_16_immediate()); break;
|
||||
case AXI: sprintf(ptr, "($%04x+X)", read_16_immediate()); break;
|
||||
case N0: sprintf(ptr, "0"); break;
|
||||
case N1: sprintf(ptr, "1"); break;
|
||||
case N2: sprintf(ptr, "2"); break;
|
||||
case N3: sprintf(ptr, "3"); break;
|
||||
case N4: sprintf(ptr, "4"); break;
|
||||
case N5: sprintf(ptr, "5"); break;
|
||||
case N6: sprintf(ptr, "6"); break;
|
||||
case N7: sprintf(ptr, "7"); break;
|
||||
case N8: sprintf(ptr, "8"); break;
|
||||
case N9: sprintf(ptr, "9"); break;
|
||||
case N10: sprintf(ptr, "10"); break;
|
||||
case N11: sprintf(ptr, "11"); break;
|
||||
case N12: sprintf(ptr, "12"); break;
|
||||
case N13: sprintf(ptr, "13"); break;
|
||||
case N14: sprintf(ptr, "14"); break;
|
||||
case N15: sprintf(ptr, "15"); break;
|
||||
case DP0: sprintf(ptr, "$%02x.0", read_8_immediate()); break;
|
||||
case DP1: sprintf(ptr, "$%02x.1", read_8_immediate()); break;
|
||||
case DP2: sprintf(ptr, "$%02x.2", read_8_immediate()); break;
|
||||
case DP3: sprintf(ptr, "$%02x.3", read_8_immediate()); break;
|
||||
case DP4: sprintf(ptr, "$%02x.4", read_8_immediate()); break;
|
||||
case DP5: sprintf(ptr, "$%02x.5", read_8_immediate()); break;
|
||||
case DP6: sprintf(ptr, "$%02x.6", read_8_immediate()); break;
|
||||
case DP7: sprintf(ptr, "$%02x.7", read_8_immediate()); break;
|
||||
case A: util::stream_format(stream, "A"); break;
|
||||
case X: util::stream_format(stream, "X"); break;
|
||||
case Y: util::stream_format(stream, "Y"); break;
|
||||
case YA: util::stream_format(stream, "YA"); break;
|
||||
case SP: util::stream_format(stream, "SP"); break;
|
||||
case PSW: util::stream_format(stream, "PSW"); break;
|
||||
case C: util::stream_format(stream, "C"); break;
|
||||
case REL: util::stream_format(stream, "%04x", ((g_pc + (char)read_8_immediate())&0xffff)); break;
|
||||
case UPAG: util::stream_format(stream, "$%02x", read_8_immediate()); break;
|
||||
case IMM: util::stream_format(stream, "#$%02x", read_8_immediate()); break;
|
||||
case XI: util::stream_format(stream, "(X)"); break;
|
||||
case XII: util::stream_format(stream, "(X)+"); break;
|
||||
case YI: util::stream_format(stream, "(Y)"); break;
|
||||
case DP: util::stream_format(stream, "$%02x", read_8_immediate()); break;
|
||||
case DPX: util::stream_format(stream, "$%02x+X", read_8_immediate()); break;
|
||||
case DPY: util::stream_format(stream, "$%02x+Y", read_8_immediate()); break;
|
||||
case DPI: util::stream_format(stream, "($%02x)", read_8_immediate()); break;
|
||||
case DXI: util::stream_format(stream, "($%02x+X)", read_8_immediate()); break;
|
||||
case DIY: util::stream_format(stream, "($%02x)+Y", read_8_immediate()); break;
|
||||
case ABS: util::stream_format(stream, "$%04x", read_16_immediate()); break;
|
||||
case ABX: util::stream_format(stream, "$%04x+X", read_16_immediate()); break;
|
||||
case ABY: util::stream_format(stream, "$%04x+Y", read_16_immediate()); break;
|
||||
case AXI: util::stream_format(stream, "($%04x+X)", read_16_immediate()); break;
|
||||
case N0: util::stream_format(stream, "0"); break;
|
||||
case N1: util::stream_format(stream, "1"); break;
|
||||
case N2: util::stream_format(stream, "2"); break;
|
||||
case N3: util::stream_format(stream, "3"); break;
|
||||
case N4: util::stream_format(stream, "4"); break;
|
||||
case N5: util::stream_format(stream, "5"); break;
|
||||
case N6: util::stream_format(stream, "6"); break;
|
||||
case N7: util::stream_format(stream, "7"); break;
|
||||
case N8: util::stream_format(stream, "8"); break;
|
||||
case N9: util::stream_format(stream, "9"); break;
|
||||
case N10: util::stream_format(stream, "10"); break;
|
||||
case N11: util::stream_format(stream, "11"); break;
|
||||
case N12: util::stream_format(stream, "12"); break;
|
||||
case N13: util::stream_format(stream, "13"); break;
|
||||
case N14: util::stream_format(stream, "14"); break;
|
||||
case N15: util::stream_format(stream, "15"); break;
|
||||
case DP0: util::stream_format(stream, "$%02x.0", read_8_immediate()); break;
|
||||
case DP1: util::stream_format(stream, "$%02x.1", read_8_immediate()); break;
|
||||
case DP2: util::stream_format(stream, "$%02x.2", read_8_immediate()); break;
|
||||
case DP3: util::stream_format(stream, "$%02x.3", read_8_immediate()); break;
|
||||
case DP4: util::stream_format(stream, "$%02x.4", read_8_immediate()); break;
|
||||
case DP5: util::stream_format(stream, "$%02x.5", read_8_immediate()); break;
|
||||
case DP6: util::stream_format(stream, "$%02x.6", read_8_immediate()); break;
|
||||
case DP7: util::stream_format(stream, "$%02x.7", read_8_immediate()); break;
|
||||
case MEMN:
|
||||
var = read_16_immediate();
|
||||
sprintf(ptr, "%04x.%d", var&0x1fff, var>>13);
|
||||
util::stream_format(stream, "%04x.%d", var&0x1fff, var>>13);
|
||||
break;
|
||||
case MEMI:
|
||||
var = read_16_immediate();
|
||||
sprintf(ptr, "/%04x.%d", var&0x1fff, var>>13);
|
||||
util::stream_format(stream, "/%04x.%d", var&0x1fff, var>>13);
|
||||
break;
|
||||
}
|
||||
ptr += strlen(ptr);
|
||||
}
|
||||
return (g_pc - pc) | flags | DASMFLAG_SUPPORTED;
|
||||
}
|
||||
|
||||
|
||||
CPU_DISASSEMBLE(spc700)
|
||||
{
|
||||
std::ostringstream stream;
|
||||
offs_t result = internal_disasm_spc700(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