summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/machine/1mb5.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/machine/1mb5.cpp')
-rw-r--r--src/devices/machine/1mb5.cpp84
1 files changed, 26 insertions, 58 deletions
diff --git a/src/devices/machine/1mb5.cpp b/src/devices/machine/1mb5.cpp
index 50a3ea59365..f3dacdbe7ba 100644
--- a/src/devices/machine/1mb5.cpp
+++ b/src/devices/machine/1mb5.cpp
@@ -57,7 +57,7 @@ hp_1mb5_device::hp_1mb5_device(const machine_config &mconfig, const char *tag, d
{
}
-READ8_MEMBER(hp_1mb5_device::cpu_r)
+uint8_t hp_1mb5_device::cpu_r(offs_t offset)
{
uint8_t res = 0;
@@ -76,26 +76,27 @@ READ8_MEMBER(hp_1mb5_device::cpu_r)
case 1:
// Read IB
res = m_ib;
- m_ibf = false;
- update_halt();
+ if (m_ibf) {
+ m_ibf = false;
+ update_halt();
+ }
break;
}
- //LOG("RD %u=%02x\n" , offset , res);
+ LOG("RD %u=%02x\n" , offset , res);
return res;
}
-WRITE8_MEMBER(hp_1mb5_device::cpu_w)
+void hp_1mb5_device::cpu_w(offs_t offset, uint8_t data)
{
- //LOG("WR %u=%02x\n" , offset , data);
- bool need_resched = false;
+ LOG("WR %u=%02x\n" , offset , data);
switch (offset) {
case 0:
// Write CR
m_cr = data;
- need_resched |= set_reset(BIT(m_cr , 7));
- need_resched |= set_int(!BIT(m_cr , 0));
+ set_reset(BIT(m_cr , 7));
+ set_int(!BIT(m_cr , 0));
break;
case 1:
@@ -105,16 +106,11 @@ WRITE8_MEMBER(hp_1mb5_device::cpu_w)
update_halt();
break;
}
- if (need_resched) {
- LOG("resched %s\n" , space.device().tag());
- space.device().execute().yield();
- }
}
-READ8_MEMBER(hp_1mb5_device::uc_r)
+uint8_t hp_1mb5_device::uc_r(offs_t offset)
{
uint8_t res = 0;
- bool need_resched = false;
switch (offset) {
case 0:
@@ -132,65 +128,54 @@ READ8_MEMBER(hp_1mb5_device::uc_r)
// Read OB
res = m_ob;
m_obf = false;
- need_resched |= update_halt();
+ update_halt();
break;
}
- if (need_resched) {
- LOG("resched %s\n" , space.device().tag());
- space.device().execute().spin();
- }
//LOG("RDU %u=%02x\n" , offset , res);
return res;
}
-WRITE8_MEMBER(hp_1mb5_device::uc_w)
+void hp_1mb5_device::uc_w(offs_t offset, uint8_t data)
{
//LOG("WRU %u=%02x SR=%02x\n" , offset , data , m_sr);
- bool need_resched = false;
switch (offset) {
case 0:
// Write SR
if (!BIT(m_sr , 0) && BIT(data , 0)) {
- need_resched |= set_service(true);
+ set_service(true);
}
m_sr = data;
m_hlten = BIT(m_sr , 7);
- if (update_halt() && !m_halt) {
- need_resched = true;
- }
+ update_halt();
break;
case 1:
// Write IB
m_ib = data;
m_ibf = true;
- need_resched |= update_halt();
+ update_halt();
break;
}
- if (need_resched) {
- LOG("resched %s\n" , space.device().tag());
- space.device().execute().spin();
- }
}
-READ_LINE_MEMBER(hp_1mb5_device::irl_r)
+int hp_1mb5_device::irl_r()
{
return m_service;
}
-READ_LINE_MEMBER(hp_1mb5_device::halt_r)
+int hp_1mb5_device::halt_r()
{
return m_halt;
}
-READ_LINE_MEMBER(hp_1mb5_device::reset_r)
+int hp_1mb5_device::reset_r()
{
return m_reset;
}
-READ_LINE_MEMBER(hp_1mb5_device::int_r)
+int hp_1mb5_device::int_r()
{
return m_cint;
}
@@ -208,11 +193,6 @@ void hp_1mb5_device::clear_service()
void hp_1mb5_device::device_start()
{
- m_irl_handler.resolve_safe();
- m_halt_handler.resolve_safe();
- m_reset_handler.resolve_safe();
- m_int_handler.resolve_safe();
-
save_item(NAME(m_sr));
save_item(NAME(m_cr));
save_item(NAME(m_ib));
@@ -246,50 +226,38 @@ void hp_1mb5_device::device_reset()
m_int_handler(true);
}
-bool hp_1mb5_device::set_service(bool new_service)
+void hp_1mb5_device::set_service(bool new_service)
{
if (new_service != m_service) {
m_service = new_service;
- //LOG("irl=%d\n" , m_service);
+ LOG("irl=%d\n" , m_service);
m_irl_handler(m_service);
- return true;
- } else {
- return false;
}
}
-bool hp_1mb5_device::update_halt()
+void hp_1mb5_device::update_halt()
{
bool new_halt = m_hlten && m_obf && !m_ibf;
if (new_halt != m_halt) {
- //LOG("HALT=%d\n" , new_halt);
+ LOG("HALT=%d\n" , new_halt);
m_halt = new_halt;
m_halt_handler(m_halt);
- return true;
- } else {
- return false;
}
}
-bool hp_1mb5_device::set_reset(bool new_reset)
+void hp_1mb5_device::set_reset(bool new_reset)
{
if (new_reset != m_reset) {
m_reset = new_reset;
m_reset_handler(m_reset);
- return true;
- } else {
- return false;
}
}
-bool hp_1mb5_device::set_int(bool new_int)
+void hp_1mb5_device::set_int(bool new_int)
{
if (new_int != m_cint) {
m_cint = new_int;
LOG("cint=%d\n" , m_cint);
m_int_handler(m_cint);
- return true;
- } else {
- return false;
}
}