diff options
Diffstat (limited to 'src/devices/cpu/sh/sh7042.cpp')
| -rw-r--r-- | src/devices/cpu/sh/sh7042.cpp | 70 |
1 files changed, 61 insertions, 9 deletions
diff --git a/src/devices/cpu/sh/sh7042.cpp b/src/devices/cpu/sh/sh7042.cpp index 4c195e787a2..1ae31e7077c 100644 --- a/src/devices/cpu/sh/sh7042.cpp +++ b/src/devices/cpu/sh/sh7042.cpp @@ -6,12 +6,23 @@ #include "emu.h" #include "sh7042.h" -DEFINE_DEVICE_TYPE(SH7042, sh7042_device, "sh7042", "Hitachi SH-2 (SH7042)") +DEFINE_DEVICE_TYPE(SH7042, sh7042_device, "sh7042", "Hitachi SH-2 (SH7042)") +DEFINE_DEVICE_TYPE(SH7043, sh7043_device, "sh7043", "Hitachi SH-2 (SH7043)") sh7042_device::sh7042_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : - sh2_device(mconfig, SH7042, tag, owner, clock, CPU_TYPE_SH2, address_map_constructor(FUNC(sh7042_device::map), this), 32, 0xffffffff), - m_adc(*this, "adc"), - m_read_adc(*this, 0) + sh7042_device(mconfig, SH7042, tag, owner, clock) +{ +} + +sh7043_device::sh7043_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : + sh7042_device(mconfig, SH7043, tag, owner, clock) +{ +} + +sh7042_device::sh7042_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock) : + sh2_device(mconfig, type, tag, owner, clock, CPU_TYPE_SH2, address_map_constructor(FUNC(sh7042_device::map), this), 32, 0xffffffff), + m_read_adc(*this, 0), + m_sci_tx(*this) { for(unsigned int i=0; i != m_read_adc.size(); i++) m_read_adc[i].bind().set([this, i]() { return adc_default(i); }); @@ -26,23 +37,64 @@ u16 sh7042_device::adc_default(int adc) void sh7042_device::device_start() { sh2_device::device_start(); + + save_item(NAME(m_addr)); + save_item(NAME(m_adcsr)); + save_item(NAME(m_adcr)); } void sh7042_device::device_reset() { sh2_device::device_reset(); + + memset(m_addr, 0, sizeof(m_addr)); + m_adcsr = m_adcr = 0; } void sh7042_device::map(address_map &map) { - map(0xffff83e0, 0xffff83e0).rw(m_adc, FUNC(sh_adc_device::adcsr_r), FUNC(sh_adc_device::adcsr_w)); - map(0xffff83e1, 0xffff83e1).rw(m_adc, FUNC(sh_adc_device::adcr_r), FUNC(sh_adc_device::adcr_w)); - map(0xffff83f0, 0xffff83ff).r(m_adc, FUNC(sh_adc_device::addr_r)); + map(0xffff83e0, 0xffff83e0).rw(FUNC(sh7042_device::adcsr_r), FUNC(sh7042_device::adcsr_w)); + map(0xffff83e1, 0xffff83e1).rw(FUNC(sh7042_device::adcr_r), FUNC(sh7042_device::adcr_w)); + map(0xffff83f0, 0xffff83ff).r(FUNC(sh7042_device::addr_r)); map(0xfffff000, 0xffffffff).ram(); } -void sh7042_device::device_add_mconfig(machine_config &config) + +// ADC section + +u16 sh7042_device::addr_r(offs_t offset) +{ + logerror("addr16_r %d %03x\n", offset, m_addr[offset]); + return m_addr[offset]; +} + +u8 sh7042_device::adcsr_r() +{ + logerror("adcsr_r %02x\n", m_adcsr); + return m_adcsr; +} + +u8 sh7042_device::adcr_r() +{ + logerror("adcr_r %02x\n", m_adcr); + return m_adcr; +} + +void sh7042_device::adcsr_w(u8 data) +{ + logerror("adcsr_w %02x\n", data); + // u8 prev = m_adcsr; + m_adcsr = (data & 0x7f) | (m_adcsr & data & CSR_ADF); +} + +void sh7042_device::adcr_w(u8 data) +{ + logerror("adcr_w %02x\n", data); + m_adcr = data; +} + +void sh7042_device::do_sci_w(int sci, int state) { - SH_ADC(config, m_adc, *this); + logerror("sci %d %d\n", sci, state); } |
