diff options
Diffstat (limited to 'src/devices/machine/1mb5.cpp')
-rw-r--r-- | src/devices/machine/1mb5.cpp | 84 |
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; } } |