mirror of
https://github.com/holub/mame
synced 2025-06-03 11:26:56 +03:00
Changed the tlcs90 disassembler to use 'std::ostream &' internally
This commit is contained in:
parent
705dde329e
commit
90adb22c2f
@ -991,55 +991,55 @@ const char *tlcs90_device::internal_registers_names(uint16_t x)
|
||||
return ir_names[ir];
|
||||
return nullptr;
|
||||
}
|
||||
int tlcs90_device::sprint_arg(char *buffer, uint32_t pc, const char *pre, const e_mode mode, const uint16_t r, const uint16_t rb)
|
||||
bool tlcs90_device::stream_arg(std::ostream &stream, uint32_t pc, const char *pre, const e_mode mode, const uint16_t r, const uint16_t rb)
|
||||
{
|
||||
const char *reg_name;
|
||||
switch ( mode )
|
||||
{
|
||||
case MODE_NONE: return 0;
|
||||
case MODE_NONE: return false;
|
||||
|
||||
case MODE_BIT8: return sprintf( buffer, "%s%d", pre, r );
|
||||
case MODE_I8: return sprintf( buffer, "%s$%02X", pre, r );
|
||||
case MODE_D8: return sprintf( buffer, "%s$%04X", pre, (pc+2+(r&0x7f)-(r&0x80))&0xffff );
|
||||
case MODE_I16: return sprintf( buffer, "%s$%04X", pre, r );
|
||||
case MODE_D16: return sprintf( buffer, "%s$%04X", pre, (pc+2+(r&0x7fff)-(r&0x8000))&0xffff );
|
||||
case MODE_BIT8: util::stream_format(stream, "%s%d", pre, r ); return true;
|
||||
case MODE_I8: util::stream_format(stream, "%s$%02X", pre, r ); return true;
|
||||
case MODE_D8: util::stream_format(stream, "%s$%04X", pre, (pc+2+(r&0x7f)-(r&0x80))&0xffff ); return true;
|
||||
case MODE_I16: util::stream_format(stream, "%s$%04X", pre, r ); return true;
|
||||
case MODE_D16: util::stream_format(stream, "%s$%04X", pre, (pc+2+(r&0x7fff)-(r&0x8000))&0xffff ); return true;
|
||||
case MODE_MI16:
|
||||
reg_name = internal_registers_names(r);
|
||||
return (reg_name) ? sprintf( buffer, "%s(%s)", pre, reg_name ):
|
||||
sprintf( buffer, "%s($%04X)", pre, r );
|
||||
case MODE_R8: return sprintf( buffer, "%s%s", pre, r8_names[r] );
|
||||
case MODE_R16: return sprintf( buffer, "%s%s", pre, r16_names[r] );
|
||||
case MODE_MR16: return sprintf( buffer, "%s(%s)", pre, r16_names[r] );
|
||||
if (reg_name)
|
||||
util::stream_format(stream, "%s(%s)", pre, reg_name);
|
||||
else
|
||||
util::stream_format(stream, "%s($%04X)", pre, r );
|
||||
return true;
|
||||
case MODE_R8: util::stream_format(stream, "%s%s", pre, r8_names[r] ); return true;
|
||||
case MODE_R16: util::stream_format(stream, "%s%s", pre, r16_names[r] ); return true;
|
||||
case MODE_MR16: util::stream_format(stream, "%s(%s)", pre, r16_names[r] ); return true;
|
||||
|
||||
case MODE_MR16R8: return sprintf( buffer, "%s(%s+%s)", pre, r16_names[r], r8_names[rb] );
|
||||
case MODE_MR16D8: return sprintf( buffer, "%s(%s%c$%02X)", pre, r16_names[r], (rb&0x80)?'-':'+', (rb&0x80)?((rb^0xff)+1):rb );
|
||||
case MODE_MR16R8: util::stream_format(stream, "%s(%s+%s)", pre, r16_names[r], r8_names[rb] ); return true;
|
||||
case MODE_MR16D8: util::stream_format(stream, "%s(%s%c$%02X)", pre, r16_names[r], (rb&0x80)?'-':'+', (rb&0x80)?((rb^0xff)+1):rb ); return true;
|
||||
|
||||
case MODE_CC: return sprintf( buffer, "%s%s", pre, cc_names[r] );
|
||||
case MODE_CC: util::stream_format(stream, "%s%s", pre, cc_names[r] ); return true;
|
||||
|
||||
case MODE_R16R8: return sprintf( buffer, "%s%s+%s", pre, r16_names[r], r8_names[rb] );
|
||||
case MODE_R16D8: return sprintf( buffer, "%s%s%c$%02X", pre, r16_names[r], (rb&0x80)?'-':'+', (rb&0x80)?((rb^0xff)+1):rb );
|
||||
case MODE_R16R8: util::stream_format(stream, "%s%s+%s", pre, r16_names[r], r8_names[rb] ); return true;
|
||||
case MODE_R16D8: util::stream_format(stream, "%s%s%c$%02X", pre, r16_names[r], (rb&0x80)?'-':'+', (rb&0x80)?((rb^0xff)+1):rb ); return true;
|
||||
|
||||
default:
|
||||
fatalerror("%04x: unimplemented addr mode = %d\n",pc,mode);
|
||||
}
|
||||
|
||||
// never executed
|
||||
//return 0;
|
||||
return false;
|
||||
}
|
||||
|
||||
offs_t tlcs90_device::disasm_disassemble(char *buffer, offs_t pc, const uint8_t *oprom, const uint8_t *opram, uint32_t options)
|
||||
offs_t tlcs90_device::disasm_disassemble(std::ostream &stream, offs_t pc, const uint8_t *oprom, const uint8_t *opram, uint32_t options)
|
||||
{
|
||||
int len;
|
||||
|
||||
m_addr = pc;
|
||||
|
||||
decode();
|
||||
m_op &= ~OP_16;
|
||||
|
||||
buffer += sprintf ( buffer, "%-5s", op_names[ m_op ] ); // strlen("callr") == 5
|
||||
len = sprint_arg ( buffer, pc, " ", m_mode1, m_r1, m_r1b );
|
||||
buffer += len;
|
||||
buffer += sprint_arg ( buffer, pc, (len>1)?",":"", m_mode2, m_r2, m_r2b );
|
||||
util::stream_format (stream, "%-5s", op_names[ m_op ] ); // strlen("callr") == 5
|
||||
bool streamed = stream_arg (stream, pc, " ", m_mode1, m_r1, m_r1b );
|
||||
stream_arg (stream, pc, streamed ?",":"", m_mode2, m_r2, m_r2b );
|
||||
|
||||
return (m_addr - pc) | DASMFLAG_SUPPORTED;
|
||||
}
|
||||
|
@ -58,7 +58,14 @@ protected:
|
||||
// device_disasm_interface overrides
|
||||
virtual uint32_t disasm_min_opcode_bytes() const override { return 1; }
|
||||
virtual uint32_t disasm_max_opcode_bytes() const override { return 6; }
|
||||
virtual offs_t disasm_disassemble(char *buffer, offs_t pc, const uint8_t *oprom, const uint8_t *opram, uint32_t options) override;
|
||||
virtual offs_t disasm_disassemble(char *buffer, offs_t pc, const uint8_t *oprom, const uint8_t *opram, uint32_t options) override
|
||||
{
|
||||
std::ostringstream stream;
|
||||
offs_t result = disasm_disassemble(stream, pc, oprom, opram, options);
|
||||
std::string stream_str = stream.str();
|
||||
strcpy(buffer, stream_str.c_str());
|
||||
return result;
|
||||
}
|
||||
|
||||
private:
|
||||
enum e_mode {
|
||||
@ -114,7 +121,7 @@ private:
|
||||
inline uint16_t READ16();
|
||||
void decode();
|
||||
const char *internal_registers_names(uint16_t x);
|
||||
int sprint_arg(char *buffer, uint32_t pc, const char *pre, const e_mode mode, const uint16_t r, const uint16_t rb);
|
||||
bool stream_arg(std::ostream &stream, uint32_t pc, const char *pre, const e_mode mode, const uint16_t r, const uint16_t rb);
|
||||
inline uint16_t r8( const uint16_t r );
|
||||
inline void w8( const uint16_t r, uint16_t value );
|
||||
inline uint16_t r16( const uint16_t r );
|
||||
@ -140,6 +147,7 @@ private:
|
||||
void t90_stop_timer(int i);
|
||||
void t90_stop_timer4();
|
||||
void set_irq_line(int irq, int state);
|
||||
offs_t disasm_disassemble(std::ostream &stream, offs_t pc, const uint8_t *oprom, const uint8_t *opram, uint32_t options);
|
||||
};
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user