mirror of
https://github.com/holub/mame
synced 2025-06-30 07:58:56 +03:00
i8214: Back out previous changes to device emulation in e383606922
except as a system-specific hack
This commit is contained in:
parent
8ffa5ef1d9
commit
b76ff4cf64
@ -8,10 +8,8 @@
|
|||||||
|
|
||||||
#include "emu.h"
|
#include "emu.h"
|
||||||
#include "i8214.h"
|
#include "i8214.h"
|
||||||
#include <iostream>
|
|
||||||
|
|
||||||
//#define VERBOSE 1
|
//#define VERBOSE 1
|
||||||
//#define LOG_OUTPUT_STREAM std::cout
|
|
||||||
#include "logmacro.h"
|
#include "logmacro.h"
|
||||||
|
|
||||||
|
|
||||||
@ -42,8 +40,8 @@ void i8214_device::trigger_interrupt(int level)
|
|||||||
|
|
||||||
// set interrupt line
|
// set interrupt line
|
||||||
m_write_int(ASSERT_LINE);
|
m_write_int(ASSERT_LINE);
|
||||||
|
if (!m_int_dis_hack)
|
||||||
//m_write_int(CLEAR_LINE);
|
m_write_int(CLEAR_LINE); // TODO: wait one clock cycle to clear
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -56,7 +54,7 @@ void i8214_device::check_interrupt()
|
|||||||
if (m_int_dis)
|
if (m_int_dis)
|
||||||
{
|
{
|
||||||
LOG("not checking interrupts because m_int_dis (%02x)\n", m_r);
|
LOG("not checking interrupts because m_int_dis (%02x)\n", m_r);
|
||||||
if (m_r == 0xff)
|
if (m_int_dis_hack && m_r == 0xff)
|
||||||
{
|
{
|
||||||
m_int_dis = 0;
|
m_int_dis = 0;
|
||||||
m_write_int(CLEAR_LINE);
|
m_write_int(CLEAR_LINE);
|
||||||
@ -98,8 +96,11 @@ void i8214_device::check_interrupt()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
m_int_dis = 0;
|
if (m_int_dis_hack)
|
||||||
m_write_int(CLEAR_LINE);
|
{
|
||||||
|
m_int_dis = 0;
|
||||||
|
m_write_int(CLEAR_LINE);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -116,6 +117,7 @@ i8214_device::i8214_device(const machine_config &mconfig, const char *tag, devic
|
|||||||
: device_t(mconfig, I8214, tag, owner, clock)
|
: device_t(mconfig, I8214, tag, owner, clock)
|
||||||
, m_write_int(*this)
|
, m_write_int(*this)
|
||||||
, m_write_enlg(*this)
|
, m_write_enlg(*this)
|
||||||
|
, m_int_dis_hack(false)
|
||||||
, m_inte(0)
|
, m_inte(0)
|
||||||
, m_int_dis(0)
|
, m_int_dis(0)
|
||||||
, m_a(0)
|
, m_a(0)
|
||||||
|
@ -32,6 +32,8 @@ public:
|
|||||||
// construction/destruction
|
// construction/destruction
|
||||||
i8214_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
|
i8214_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
|
||||||
|
|
||||||
|
void set_int_dis_hack(bool hack) { m_int_dis_hack = hack; }
|
||||||
|
|
||||||
auto int_wr_callback() { return m_write_int.bind(); }
|
auto int_wr_callback() { return m_write_int.bind(); }
|
||||||
auto enlg_wr_callback() { return m_write_enlg.bind(); }
|
auto enlg_wr_callback() { return m_write_enlg.bind(); }
|
||||||
|
|
||||||
@ -58,6 +60,8 @@ private:
|
|||||||
devcb_write_line m_write_int;
|
devcb_write_line m_write_int;
|
||||||
devcb_write_line m_write_enlg;
|
devcb_write_line m_write_enlg;
|
||||||
|
|
||||||
|
bool m_int_dis_hack;
|
||||||
|
|
||||||
int m_inte; // interrupt enable
|
int m_inte; // interrupt enable
|
||||||
int m_int_dis; // interrupt (latch) disable flip-flop
|
int m_int_dis; // interrupt (latch) disable flip-flop
|
||||||
int m_a; // request level
|
int m_a; // request level
|
||||||
|
@ -1710,7 +1710,6 @@ void pc8801_state::pc8801(machine_config &config)
|
|||||||
Z80(config, m_maincpu, MASTER_CLOCK); // ~4 MHz, selectable to ~8 MHz on late models
|
Z80(config, m_maincpu, MASTER_CLOCK); // ~4 MHz, selectable to ~8 MHz on late models
|
||||||
m_maincpu->set_addrmap(AS_PROGRAM, &pc8801_state::main_map);
|
m_maincpu->set_addrmap(AS_PROGRAM, &pc8801_state::main_map);
|
||||||
m_maincpu->set_addrmap(AS_IO, &pc8801_state::main_io);
|
m_maincpu->set_addrmap(AS_IO, &pc8801_state::main_io);
|
||||||
// m_maincpu->set_vblank_int("screen", FUNC(pc8801_state::vrtc_irq_w));
|
|
||||||
m_maincpu->set_irq_acknowledge_callback(FUNC(pc8801_state::int_ack_cb));
|
m_maincpu->set_irq_acknowledge_callback(FUNC(pc8801_state::int_ack_cb));
|
||||||
|
|
||||||
PC80S31(config, m_pc80s31, MASTER_CLOCK);
|
PC80S31(config, m_pc80s31, MASTER_CLOCK);
|
||||||
@ -1721,6 +1720,7 @@ void pc8801_state::pc8801(machine_config &config)
|
|||||||
|
|
||||||
I8214(config, m_pic, MASTER_CLOCK);
|
I8214(config, m_pic, MASTER_CLOCK);
|
||||||
m_pic->int_wr_callback().set(FUNC(pc8801_state::irq_w));
|
m_pic->int_wr_callback().set(FUNC(pc8801_state::irq_w));
|
||||||
|
m_pic->set_int_dis_hack(true);
|
||||||
|
|
||||||
UPD1990A(config, m_rtc);
|
UPD1990A(config, m_rtc);
|
||||||
//CENTRONICS(config, "centronics", centronics_devices, "printer");
|
//CENTRONICS(config, "centronics", centronics_devices, "printer");
|
||||||
|
Loading…
Reference in New Issue
Block a user