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