mirror of
https://github.com/holub/mame
synced 2025-10-06 17:08:28 +03:00
added support to display dividers in the debugger state view
i8089: improved debugger view
This commit is contained in:
parent
2f8875a792
commit
273fe7960e
@ -37,10 +37,10 @@ i8089_device::i8089_device(const machine_config &mconfig, const char *tag, devic
|
|||||||
m_ch2(*this, "2"),
|
m_ch2(*this, "2"),
|
||||||
m_write_sintr1(*this),
|
m_write_sintr1(*this),
|
||||||
m_write_sintr2(*this),
|
m_write_sintr2(*this),
|
||||||
m_16bit_system(false),
|
m_sysbus(0),
|
||||||
m_16bit_remote(false),
|
m_scb(0),
|
||||||
|
m_soc(0),
|
||||||
m_master(false),
|
m_master(false),
|
||||||
m_request_grant(false),
|
|
||||||
m_current_tp(0),
|
m_current_tp(0),
|
||||||
m_ca(0),
|
m_ca(0),
|
||||||
m_sel(0)
|
m_sel(0)
|
||||||
@ -61,37 +61,40 @@ void i8089_device::device_start()
|
|||||||
m_write_sintr2.resolve_safe();
|
m_write_sintr2.resolve_safe();
|
||||||
|
|
||||||
// register debugger states
|
// register debugger states
|
||||||
state_add(i8089_channel::GA, "CH1 GA", m_ch1->m_r[i8089_channel::GA].w).mask(0xfffff);
|
state_add(SYSBUS, "SYSBUS", m_sysbus).mask(0x01).formatstr("%1s");
|
||||||
state_add(i8089_channel::GB, "CH1 GB", m_ch1->m_r[i8089_channel::GB].w).mask(0xfffff);
|
state_add(SCB, "SCB", m_scb).mask(0xfffff);
|
||||||
state_add(i8089_channel::GC, "CH1 GC", m_ch1->m_r[i8089_channel::GC].w).mask(0xfffff);
|
state_add(SOC, "SOC", m_soc).mask(0x03).formatstr("%2s");
|
||||||
state_add(i8089_channel::TP, "CH1 TP", m_ch1->m_r[i8089_channel::TP].w).mask(0xfffff);
|
state_add_divider(DIVIDER1);
|
||||||
state_add(i8089_channel::BC, "CH1 BC", m_ch1->m_r[i8089_channel::BC].w).mask(0xffff);
|
state_add(CH1_GA, "CH1 GA", m_ch1->m_r[i8089_channel::GA].w).mask(0xfffff).formatstr("%8s");
|
||||||
state_add(i8089_channel::IX, "CH1 IX", m_ch1->m_r[i8089_channel::IX].w).mask(0xffff);
|
state_add(CH1_GB, "CH1 GB", m_ch1->m_r[i8089_channel::GB].w).mask(0xfffff).formatstr("%8s");
|
||||||
state_add(i8089_channel::CC, "CH1 CC", m_ch1->m_r[i8089_channel::CC].w).mask(0xffff);
|
state_add(CH1_GC, "CH1 GC", m_ch1->m_r[i8089_channel::GC].w).mask(0xfffff).formatstr("%8s");
|
||||||
state_add(i8089_channel::MC, "CH1 MC", m_ch1->m_r[i8089_channel::MC].w).mask(0xffff);
|
state_add(CH1_TP, "CH1 TP", m_ch1->m_r[i8089_channel::TP].w).mask(0xfffff).formatstr("%8s");
|
||||||
state_add(i8089_channel::CP, "CH1 CP", m_ch1->m_r[i8089_channel::CP].w).mask(0xfffff);
|
state_add(CH1_BC, "CH1 BC", m_ch1->m_r[i8089_channel::BC].w).mask(0xffff);
|
||||||
state_add(i8089_channel::PP, "CH1 PP", m_ch1->m_r[i8089_channel::PP].w).mask(0xfffff);
|
state_add(CH1_IX, "CH1 IX", m_ch1->m_r[i8089_channel::IX].w).mask(0xffff);
|
||||||
state_add(i8089_channel::PSW, "CH1 PSW", m_ch1->m_r[i8089_channel::PSW].w).callimport().callexport().formatstr("%12s");
|
state_add(CH1_CC, "CH1 CC", m_ch1->m_r[i8089_channel::CC].w).mask(0xffff);
|
||||||
|
state_add(CH1_MC, "CH1 MC", m_ch1->m_r[i8089_channel::MC].w).mask(0xffff);
|
||||||
state_add(i8089_channel::GA + i8089_channel::NUM_REGS, "CH2 GA", m_ch2->m_r[i8089_channel::GA].w).mask(0xfffff);
|
state_add(CH1_CP, "CH1 CP", m_ch1->m_r[i8089_channel::CP].w).mask(0xfffff);
|
||||||
state_add(i8089_channel::GB + i8089_channel::NUM_REGS, "CH2 GB", m_ch2->m_r[i8089_channel::GB].w).mask(0xfffff);
|
state_add(CH1_PP, "CH1 PP", m_ch1->m_r[i8089_channel::PP].w).mask(0xfffff);
|
||||||
state_add(i8089_channel::GC + i8089_channel::NUM_REGS, "CH2 GC", m_ch2->m_r[i8089_channel::GC].w).mask(0xfffff);
|
state_add(CH1_PSW, "CH1 PSW", m_ch1->m_r[i8089_channel::PSW].w).callimport().callexport().formatstr("%12s");
|
||||||
state_add(i8089_channel::TP + i8089_channel::NUM_REGS, "CH2 TP", m_ch2->m_r[i8089_channel::TP].w).mask(0xfffff);
|
state_add_divider(DIVIDER2);
|
||||||
state_add(i8089_channel::BC + i8089_channel::NUM_REGS, "CH2 BC", m_ch2->m_r[i8089_channel::BC].w).mask(0xffff);
|
state_add(CH2_GA, "CH2 GA", m_ch2->m_r[i8089_channel::GA].w).mask(0xfffff).formatstr("%8s");
|
||||||
state_add(i8089_channel::IX + i8089_channel::NUM_REGS, "CH2 IX", m_ch2->m_r[i8089_channel::IX].w).mask(0xffff);
|
state_add(CH2_GB, "CH2 GB", m_ch2->m_r[i8089_channel::GB].w).mask(0xfffff).formatstr("%8s");
|
||||||
state_add(i8089_channel::CC + i8089_channel::NUM_REGS, "CH2 CC", m_ch2->m_r[i8089_channel::CC].w).mask(0xffff);
|
state_add(CH2_GC, "CH2 GC", m_ch2->m_r[i8089_channel::GC].w).mask(0xfffff).formatstr("%8s");
|
||||||
state_add(i8089_channel::MC + i8089_channel::NUM_REGS, "CH2 MC", m_ch2->m_r[i8089_channel::MC].w).mask(0xffff);
|
state_add(CH2_TP, "CH2 TP", m_ch2->m_r[i8089_channel::TP].w).mask(0xfffff).formatstr("%8s");
|
||||||
state_add(i8089_channel::CP + i8089_channel::NUM_REGS, "CH2 CP", m_ch2->m_r[i8089_channel::CP].w).mask(0xfffff);
|
state_add(CH2_BC, "CH2 BC", m_ch2->m_r[i8089_channel::BC].w).mask(0xffff);
|
||||||
state_add(i8089_channel::PP + i8089_channel::NUM_REGS, "CH2 PP", m_ch2->m_r[i8089_channel::PP].w).mask(0xfffff);
|
state_add(CH2_IX, "CH2 IX", m_ch2->m_r[i8089_channel::IX].w).mask(0xffff);
|
||||||
state_add(i8089_channel::PSW + i8089_channel::NUM_REGS, "CH2 PSW", m_ch2->m_r[i8089_channel::PSW].w).callimport().callexport().formatstr("%12s");
|
state_add(CH2_CC, "CH2 CC", m_ch2->m_r[i8089_channel::CC].w).mask(0xffff);
|
||||||
|
state_add(CH2_MC, "CH2 MC", m_ch2->m_r[i8089_channel::MC].w).mask(0xffff);
|
||||||
|
state_add(CH2_CP, "CH2 CP", m_ch2->m_r[i8089_channel::CP].w).mask(0xfffff);
|
||||||
|
state_add(CH2_PP, "CH2 PP", m_ch2->m_r[i8089_channel::PP].w).mask(0xfffff);
|
||||||
|
state_add(CH2_PSW, "CH2 PSW", m_ch2->m_r[i8089_channel::PSW].w).callimport().callexport().formatstr("%12s");
|
||||||
state_add(STATE_GENPC, "GENPC", m_current_tp).mask(0xfffff).noshow();
|
state_add(STATE_GENPC, "GENPC", m_current_tp).mask(0xfffff).noshow();
|
||||||
|
|
||||||
// register for save states
|
// register for save states
|
||||||
save_item(NAME(m_16bit_system));
|
save_item(NAME(m_sysbus));
|
||||||
save_item(NAME(m_16bit_remote));
|
save_item(NAME(m_scb));
|
||||||
|
save_item(NAME(m_soc));
|
||||||
save_item(NAME(m_master));
|
save_item(NAME(m_master));
|
||||||
save_item(NAME(m_request_grant));
|
|
||||||
save_item(NAME(m_ca));
|
save_item(NAME(m_ca));
|
||||||
save_item(NAME(m_sel));
|
save_item(NAME(m_sel));
|
||||||
|
|
||||||
@ -153,31 +156,47 @@ offs_t i8089_device::disasm_disassemble(char *buffer, offs_t pc, const UINT8 *op
|
|||||||
|
|
||||||
void i8089_device::state_string_export(const device_state_entry &entry, astring &string)
|
void i8089_device::state_string_export(const device_state_entry &entry, astring &string)
|
||||||
{
|
{
|
||||||
|
i8089_channel *ch = m_ch1;
|
||||||
|
|
||||||
|
if (entry.index() >= CH2_GA && entry.index() <= CH2_PSW)
|
||||||
|
ch = m_ch2;
|
||||||
|
|
||||||
switch (entry.index())
|
switch (entry.index())
|
||||||
{
|
{
|
||||||
case i8089_channel::PSW:
|
case SYSBUS:
|
||||||
string.printf("%c%s%c%s%s%s%c%c",
|
string.printf("%c", sysbus_width() ? 'W' : '.');
|
||||||
BIT(m_ch1->m_r[i8089_channel::PSW].w, 7) ? 'P':'.',
|
break;
|
||||||
BIT(m_ch1->m_r[i8089_channel::PSW].w, 6) ? "XF":"..",
|
case SOC:
|
||||||
BIT(m_ch1->m_r[i8089_channel::PSW].w, 5) ? 'B':'.',
|
string.printf("%c%c", remotebus_width() ? 'I' : '.', request_grant() ? 'R' : '.');
|
||||||
BIT(m_ch1->m_r[i8089_channel::PSW].w, 4) ? "IS":"..",
|
break;
|
||||||
BIT(m_ch1->m_r[i8089_channel::PSW].w, 3) ? "IC":"..",
|
case CH1_GA:
|
||||||
BIT(m_ch1->m_r[i8089_channel::PSW].w, 2) ? "TB":"..",
|
case CH2_GA:
|
||||||
BIT(m_ch1->m_r[i8089_channel::PSW].w, 1) ? 'S':'.',
|
string.printf("%d %05X", ch->m_r[i8089_channel::GA].t & 1, ch->m_r[i8089_channel::GA].w);
|
||||||
BIT(m_ch1->m_r[i8089_channel::PSW].w, 0) ? 'D':'.');
|
break;
|
||||||
break;
|
case CH1_GB:
|
||||||
|
case CH2_GB:
|
||||||
case i8089_channel::PSW + i8089_channel::NUM_REGS:
|
string.printf("%d %05X", ch->m_r[i8089_channel::GB].t & 1, ch->m_r[i8089_channel::GB].w);
|
||||||
string.printf("%c%s%c%s%s%s%c%c",
|
break;
|
||||||
BIT(m_ch2->m_r[i8089_channel::PSW].w, 7) ? 'P':'.',
|
case CH1_GC:
|
||||||
BIT(m_ch2->m_r[i8089_channel::PSW].w, 6) ? "XF":"..",
|
case CH2_GC:
|
||||||
BIT(m_ch2->m_r[i8089_channel::PSW].w, 5) ? 'B':'.',
|
string.printf("%d %05X", ch->m_r[i8089_channel::GC].t & 1, ch->m_r[i8089_channel::GC].w);
|
||||||
BIT(m_ch2->m_r[i8089_channel::PSW].w, 4) ? "IS":"..",
|
break;
|
||||||
BIT(m_ch2->m_r[i8089_channel::PSW].w, 3) ? "IC":"..",
|
case CH1_TP:
|
||||||
BIT(m_ch2->m_r[i8089_channel::PSW].w, 2) ? "TB":"..",
|
case CH2_TP:
|
||||||
BIT(m_ch2->m_r[i8089_channel::PSW].w, 1) ? 'S':'.',
|
string.printf("%d %05X", ch->m_r[i8089_channel::TP].t & 1, ch->m_r[i8089_channel::TP].w);
|
||||||
BIT(m_ch2->m_r[i8089_channel::PSW].w, 0) ? 'D':'.');
|
break;
|
||||||
break;
|
case CH1_PSW:
|
||||||
|
case CH2_PSW:
|
||||||
|
string.printf("%c%s%c%s%s%s%c%c",
|
||||||
|
BIT(ch->m_r[i8089_channel::PSW].w, 7) ? 'P':'.',
|
||||||
|
BIT(ch->m_r[i8089_channel::PSW].w, 6) ? "XF":"..",
|
||||||
|
BIT(ch->m_r[i8089_channel::PSW].w, 5) ? 'B':'.',
|
||||||
|
BIT(ch->m_r[i8089_channel::PSW].w, 4) ? "IS":"..",
|
||||||
|
BIT(ch->m_r[i8089_channel::PSW].w, 3) ? "IC":"..",
|
||||||
|
BIT(ch->m_r[i8089_channel::PSW].w, 2) ? "TB":"..",
|
||||||
|
BIT(ch->m_r[i8089_channel::PSW].w, 1) ? 'S':'.',
|
||||||
|
BIT(ch->m_r[i8089_channel::PSW].w, 0) ? 'D':'.');
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -216,23 +235,20 @@ void i8089_device::initialize()
|
|||||||
assert(!m_initialized);
|
assert(!m_initialized);
|
||||||
|
|
||||||
// get system bus width
|
// get system bus width
|
||||||
UINT8 sys_bus = m_mem->read_byte(0xffff6);
|
m_sysbus = m_mem->read_byte(0xffff6);
|
||||||
m_16bit_system = BIT(sys_bus, 0);
|
|
||||||
|
|
||||||
// get system configuration block address
|
// get system configuration block address
|
||||||
UINT16 scb_offset = read_word(0xffff8);
|
UINT16 scb_offset = read_word(0xffff8);
|
||||||
UINT16 scb_segment = read_word(0xffffa);
|
UINT16 scb_segment = read_word(0xffffa);
|
||||||
offs_t scb_address = ((scb_segment << 4) + scb_offset) & 0x0fffff;
|
m_scb = ((scb_segment << 4) + scb_offset) & 0x0fffff;
|
||||||
|
|
||||||
// get system operation command
|
// get system operation command
|
||||||
UINT16 soc = read_word(scb_address);
|
m_soc = read_byte(m_scb);
|
||||||
m_16bit_remote = BIT(soc, 0);
|
|
||||||
m_request_grant = BIT(soc, 1);
|
|
||||||
m_master = !m_sel;
|
m_master = !m_sel;
|
||||||
|
|
||||||
// get control block address
|
// get control block address
|
||||||
UINT16 cb_offset = read_word(scb_address + 2);
|
UINT16 cb_offset = read_word(m_scb + 2);
|
||||||
UINT16 cb_segment = read_word(scb_address + 4);
|
UINT16 cb_segment = read_word(m_scb + 4);
|
||||||
offs_t cb_address = ((cb_segment << 4) + cb_offset) & 0x0fffff;
|
offs_t cb_address = ((cb_segment << 4) + cb_offset) & 0x0fffff;
|
||||||
|
|
||||||
// initialize channels
|
// initialize channels
|
||||||
@ -250,10 +266,10 @@ void i8089_device::initialize()
|
|||||||
if (VERBOSE)
|
if (VERBOSE)
|
||||||
{
|
{
|
||||||
logerror("%s('%s'): ---- initializing ----\n", shortname(), basetag());
|
logerror("%s('%s'): ---- initializing ----\n", shortname(), basetag());
|
||||||
logerror("%s('%s'): %s system bus\n", shortname(), basetag(), m_16bit_system ? "16-bit" : "8-bit");
|
logerror("%s('%s'): %s system bus\n", shortname(), basetag(), sysbus_width() ? "16-bit" : "8-bit");
|
||||||
logerror("%s('%s'): system configuration block location: %06x\n", shortname(), basetag(), scb_address);
|
logerror("%s('%s'): system configuration block location: %06x\n", shortname(), basetag(), m_scb);
|
||||||
logerror("%s('%s'): %s remote bus\n", shortname(), basetag(), m_16bit_remote ? "16-bit" : "8-bit");
|
logerror("%s('%s'): %s remote bus\n", shortname(), basetag(), remotebus_width() ? "16-bit" : "8-bit");
|
||||||
logerror("%s('%s'): request/grant: %d\n", shortname(), basetag(), m_request_grant);
|
logerror("%s('%s'): request/grant: %d\n", shortname(), basetag(), request_grant());
|
||||||
logerror("%s('%s'): is %s\n", shortname(), basetag(), m_master ? "master" : "slave");
|
logerror("%s('%s'): is %s\n", shortname(), basetag(), m_master ? "master" : "slave");
|
||||||
logerror("%s('%s'): channel control block location: %06x\n", shortname(), basetag(), cb_address);
|
logerror("%s('%s'): channel control block location: %06x\n", shortname(), basetag(), cb_address);
|
||||||
}
|
}
|
||||||
@ -271,7 +287,7 @@ UINT16 i8089_device::read_word(offs_t address)
|
|||||||
|
|
||||||
UINT16 data = 0xffff;
|
UINT16 data = 0xffff;
|
||||||
|
|
||||||
if (m_16bit_system && !(address & 1))
|
if (sysbus_width() && !(address & 1))
|
||||||
{
|
{
|
||||||
data = m_mem->read_word(address);
|
data = m_mem->read_word(address);
|
||||||
}
|
}
|
||||||
@ -294,7 +310,7 @@ void i8089_device::write_word(offs_t address, UINT16 data)
|
|||||||
{
|
{
|
||||||
assert(m_initialized);
|
assert(m_initialized);
|
||||||
|
|
||||||
if (m_16bit_system && !(address & 1))
|
if (sysbus_width() && !(address & 1))
|
||||||
{
|
{
|
||||||
m_mem->write_word(address, data);
|
m_mem->write_word(address, data);
|
||||||
}
|
}
|
||||||
|
@ -91,6 +91,10 @@ protected:
|
|||||||
virtual machine_config_constructor device_mconfig_additions() const;
|
virtual machine_config_constructor device_mconfig_additions() const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
bool sysbus_width() { return BIT(m_sysbus, 0); }
|
||||||
|
bool remotebus_width() { return BIT(m_soc, 0); }
|
||||||
|
bool request_grant() { return BIT(m_soc, 1); }
|
||||||
|
|
||||||
UINT8 read_byte(offs_t address);
|
UINT8 read_byte(offs_t address);
|
||||||
UINT16 read_word(offs_t address);
|
UINT16 read_word(offs_t address);
|
||||||
void write_byte(offs_t address, UINT8 data);
|
void write_byte(offs_t address, UINT8 data);
|
||||||
@ -108,12 +112,31 @@ private:
|
|||||||
address_space *m_mem;
|
address_space *m_mem;
|
||||||
address_space *m_io;
|
address_space *m_io;
|
||||||
|
|
||||||
|
// register indexes for the debugger state
|
||||||
|
enum
|
||||||
|
{
|
||||||
|
SYSBUS,
|
||||||
|
SCB,
|
||||||
|
SOC,
|
||||||
|
DIVIDER1,
|
||||||
|
CH1_GA, CH1_GB, CH1_GC,
|
||||||
|
CH1_TP, CH1_BC, CH1_IX,
|
||||||
|
CH1_CC, CH1_MC, CH1_CP,
|
||||||
|
CH1_PP, CH1_PSW,
|
||||||
|
DIVIDER2,
|
||||||
|
CH2_GA, CH2_GB, CH2_GC,
|
||||||
|
CH2_TP, CH2_BC, CH2_IX,
|
||||||
|
CH2_CC, CH2_MC, CH2_CP,
|
||||||
|
CH2_PP, CH2_PSW
|
||||||
|
};
|
||||||
|
|
||||||
// system configuration
|
// system configuration
|
||||||
|
UINT8 m_sysbus;
|
||||||
|
offs_t m_scb;
|
||||||
|
UINT8 m_soc;
|
||||||
|
|
||||||
bool m_initialized;
|
bool m_initialized;
|
||||||
bool m_16bit_system;
|
|
||||||
bool m_16bit_remote;
|
|
||||||
bool m_master;
|
bool m_master;
|
||||||
bool m_request_grant;
|
|
||||||
|
|
||||||
// task pointer for the currently executing channel
|
// task pointer for the currently executing channel
|
||||||
offs_t m_current_tp;
|
offs_t m_current_tp;
|
||||||
|
@ -171,7 +171,12 @@ void debug_view_state::recompute()
|
|||||||
|
|
||||||
// add all registers into it
|
// add all registers into it
|
||||||
for (const device_state_entry *entry = source.m_stateintf->state_first(); entry != NULL; entry = entry->next())
|
for (const device_state_entry *entry = source.m_stateintf->state_first(); entry != NULL; entry = entry->next())
|
||||||
if (entry->visible())
|
if (entry->divider())
|
||||||
|
{
|
||||||
|
*tailptr = auto_alloc(machine(), state_item(REG_DIVIDER, "", 0));
|
||||||
|
tailptr = &(*tailptr)->m_next;
|
||||||
|
}
|
||||||
|
else if (entry->visible())
|
||||||
{
|
{
|
||||||
*tailptr = auto_alloc(machine(), state_item(entry->index(), entry->symbol(), source.m_stateintf->state_string_max_length(entry->index())));
|
*tailptr = auto_alloc(machine(), state_item(entry->index(), entry->symbol(), source.m_stateintf->state_string_max_length(entry->index())));
|
||||||
tailptr = &(*tailptr)->m_next;
|
tailptr = &(*tailptr)->m_next;
|
||||||
|
@ -115,6 +115,19 @@ device_state_entry::device_state_entry(int index, const char *symbol, void *data
|
|||||||
m_symbol.cpy("CURFLAGS");
|
m_symbol.cpy("CURFLAGS");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
device_state_entry::device_state_entry(int index)
|
||||||
|
: m_next(NULL),
|
||||||
|
m_index(index),
|
||||||
|
m_dataptr(NULL),
|
||||||
|
m_datamask(0),
|
||||||
|
m_datasize(0),
|
||||||
|
m_flags(DSF_DIVIDER),
|
||||||
|
m_symbol(),
|
||||||
|
m_default_format(true),
|
||||||
|
m_sizemask(0)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
// formatstr - specify a format string
|
// formatstr - specify a format string
|
||||||
@ -526,6 +539,21 @@ device_state_entry &device_state_interface::state_add(int index, const char *sym
|
|||||||
return *entry;
|
return *entry;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// state_add_divider - add a simple divider
|
||||||
|
// entry
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
device_state_entry &device_state_interface::state_add_divider(int index)
|
||||||
|
{
|
||||||
|
// allocate new entry
|
||||||
|
device_state_entry *entry = global_alloc(device_state_entry(index));
|
||||||
|
|
||||||
|
// append to the end of the list
|
||||||
|
m_state_list.append(*entry);
|
||||||
|
|
||||||
|
return *entry;
|
||||||
|
}
|
||||||
|
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
// state_import - called after new state is
|
// state_import - called after new state is
|
||||||
|
@ -78,6 +78,7 @@ class device_state_entry
|
|||||||
private:
|
private:
|
||||||
// construction/destruction
|
// construction/destruction
|
||||||
device_state_entry(int index, const char *symbol, void *dataptr, UINT8 size);
|
device_state_entry(int index, const char *symbol, void *dataptr, UINT8 size);
|
||||||
|
device_state_entry(int index);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
// post-construction modifiers
|
// post-construction modifiers
|
||||||
@ -96,6 +97,7 @@ public:
|
|||||||
void *dataptr() const { return m_dataptr.v; }
|
void *dataptr() const { return m_dataptr.v; }
|
||||||
const char *symbol() const { return m_symbol; }
|
const char *symbol() const { return m_symbol; }
|
||||||
bool visible() const { return ((m_flags & DSF_NOSHOW) == 0); }
|
bool visible() const { return ((m_flags & DSF_NOSHOW) == 0); }
|
||||||
|
bool divider() const { return m_flags & DSF_DIVIDER; }
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
// device state flags
|
// device state flags
|
||||||
@ -104,6 +106,7 @@ protected:
|
|||||||
static const UINT8 DSF_IMPORT_SEXT = 0x04; // sign-extend the data when writing new data
|
static const UINT8 DSF_IMPORT_SEXT = 0x04; // sign-extend the data when writing new data
|
||||||
static const UINT8 DSF_EXPORT = 0x08; // call the export function prior to fetching the data
|
static const UINT8 DSF_EXPORT = 0x08; // call the export function prior to fetching the data
|
||||||
static const UINT8 DSF_CUSTOM_STRING = 0x10; // set if the format has a custom string
|
static const UINT8 DSF_CUSTOM_STRING = 0x10; // set if the format has a custom string
|
||||||
|
static const UINT8 DSF_DIVIDER = 0x20; // set if this is a divider entry
|
||||||
|
|
||||||
// helpers
|
// helpers
|
||||||
bool needs_custom_string() const { return ((m_flags & DSF_CUSTOM_STRING) != 0); }
|
bool needs_custom_string() const { return ((m_flags & DSF_CUSTOM_STRING) != 0); }
|
||||||
@ -179,6 +182,9 @@ public: // protected eventually
|
|||||||
}
|
}
|
||||||
device_state_entry &state_add(int index, const char *symbol, void *data, UINT8 size);
|
device_state_entry &state_add(int index, const char *symbol, void *data, UINT8 size);
|
||||||
|
|
||||||
|
// add a new divider entry
|
||||||
|
device_state_entry &state_add_divider(int index);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
// derived class overrides
|
// derived class overrides
|
||||||
virtual void state_import(const device_state_entry &entry);
|
virtual void state_import(const device_state_entry &entry);
|
||||||
|
Loading…
Reference in New Issue
Block a user