summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/cpu/sh/sh7042.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/cpu/sh/sh7042.cpp')
-rw-r--r--src/devices/cpu/sh/sh7042.cpp70
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);
}