mirror of
https://github.com/holub/mame
synced 2025-07-05 18:08:04 +03:00
i86: don't clear physical irq pins state at reset
This commit is contained in:
parent
780490d9ac
commit
27fa7dec6e
@ -384,21 +384,16 @@ void i80286_cpu_device::execute_set_input(int inptnum, int state)
|
||||
{
|
||||
if(inptnum == INPUT_LINE_NMI)
|
||||
{
|
||||
if(m_nmi_state == state)
|
||||
{
|
||||
return;
|
||||
}
|
||||
m_nmi_state = state;
|
||||
if(state != CLEAR_LINE)
|
||||
if(!m_nmi_state && state)
|
||||
{
|
||||
m_pending_irq |= NMI_IRQ;
|
||||
}
|
||||
m_nmi_state = state;
|
||||
}
|
||||
else if(inptnum == INPUT_LINE_A20)
|
||||
m_amask = m_a20_callback(state);
|
||||
else
|
||||
{
|
||||
m_irq_state = state;
|
||||
if(state == CLEAR_LINE)
|
||||
{
|
||||
m_pending_irq &= ~INT_IRQ;
|
||||
@ -760,7 +755,7 @@ void i80286_cpu_device::code_descriptor(uint16_t selector, uint16_t offset, int
|
||||
throw TRAP(FAULT_GP, IDXTBL(selector));
|
||||
|
||||
if(!PRES(r))
|
||||
throw TRAP(FAULT_NP, IDXTBL(selector)); // this order is important
|
||||
throw TRAP(FAULT_NP, IDXTBL(selector)); // this order is important
|
||||
|
||||
if(offset > LIMIT(desc))
|
||||
throw TRAP(FAULT_GP, 0);
|
||||
@ -774,7 +769,8 @@ void i80286_cpu_device::code_descriptor(uint16_t selector, uint16_t offset, int
|
||||
m_prev_ip = m_ip = offset;
|
||||
}
|
||||
else
|
||||
{ // systemdescriptor
|
||||
{
|
||||
// systemdescriptor
|
||||
uint16_t gatesel = GATESEL(desc);
|
||||
|
||||
if(!gate)
|
||||
|
@ -367,7 +367,6 @@ i8086_common_cpu_device::i8086_common_cpu_device(const machine_config &mconfig,
|
||||
, m_int_vector(0)
|
||||
, m_pending_irq(0)
|
||||
, m_nmi_state(0)
|
||||
, m_irq_state(0)
|
||||
, m_test_state(1)
|
||||
, m_pc(0)
|
||||
, m_lock(false)
|
||||
@ -489,7 +488,6 @@ void i8086_common_cpu_device::device_start()
|
||||
save_item(NAME(m_int_vector));
|
||||
save_item(NAME(m_pending_irq));
|
||||
save_item(NAME(m_nmi_state));
|
||||
save_item(NAME(m_irq_state));
|
||||
save_item(NAME(m_AuxVal));
|
||||
save_item(NAME(m_OverVal));
|
||||
save_item(NAME(m_ZeroVal));
|
||||
@ -555,9 +553,7 @@ void i8086_common_cpu_device::device_reset()
|
||||
m_NT = 1; // 8086 NT always 1
|
||||
m_MF = 1; // 8086 MF always 1, 80286 always 0
|
||||
m_int_vector = 0;
|
||||
m_pending_irq = 0;
|
||||
m_nmi_state = 0;
|
||||
m_irq_state = 0;
|
||||
m_pending_irq &= INT_IRQ;
|
||||
m_no_interrupt = 0;
|
||||
m_fire_trap = 0;
|
||||
m_prefix_seg = 0;
|
||||
@ -577,7 +573,7 @@ void i8086_common_cpu_device::device_reset()
|
||||
|
||||
void i8086_common_cpu_device::interrupt(int int_num, int trap)
|
||||
{
|
||||
PUSH( CompressFlags() );
|
||||
PUSH(CompressFlags());
|
||||
m_TF = m_IF = 0;
|
||||
|
||||
if (int_num == -1)
|
||||
@ -599,15 +595,11 @@ void i8086_common_cpu_device::execute_set_input( int inptnum, int state )
|
||||
{
|
||||
if (inptnum == INPUT_LINE_NMI)
|
||||
{
|
||||
if ( m_nmi_state == state )
|
||||
{
|
||||
return;
|
||||
}
|
||||
m_nmi_state = state;
|
||||
if (state != CLEAR_LINE)
|
||||
if (!m_nmi_state && state)
|
||||
{
|
||||
m_pending_irq |= NMI_IRQ;
|
||||
}
|
||||
m_nmi_state = state;
|
||||
}
|
||||
else if (inptnum == INPUT_LINE_TEST)
|
||||
{
|
||||
@ -615,7 +607,6 @@ void i8086_common_cpu_device::execute_set_input( int inptnum, int state )
|
||||
}
|
||||
else
|
||||
{
|
||||
m_irq_state = state;
|
||||
if (state == CLEAR_LINE)
|
||||
{
|
||||
m_pending_irq &= ~INT_IRQ;
|
||||
|
@ -290,7 +290,6 @@ protected:
|
||||
uint32_t m_int_vector;
|
||||
uint32_t m_pending_irq;
|
||||
uint32_t m_nmi_state;
|
||||
uint32_t m_irq_state;
|
||||
uint8_t m_no_interrupt;
|
||||
uint8_t m_fire_trap;
|
||||
uint8_t m_test_state;
|
||||
|
@ -18,17 +18,18 @@
|
||||
class atarig1_state : public atarigen_state
|
||||
{
|
||||
public:
|
||||
atarig1_state(const machine_config &mconfig, device_type type, const char *tag)
|
||||
: atarigen_state(mconfig, type, tag),
|
||||
m_slapstic(*this, "slapstic"),
|
||||
m_slapstic_bank(*this, "slapstic_bank"),
|
||||
m_jsa(*this, "jsa"),
|
||||
m_playfield_tilemap(*this, "playfield"),
|
||||
m_alpha_tilemap(*this, "alpha"),
|
||||
m_rle(*this, "rle"),
|
||||
m_adc(*this, "adc"),
|
||||
m_in1(*this, "IN1"),
|
||||
m_mo_command(*this, "mo_command") { }
|
||||
atarig1_state(const machine_config &mconfig, device_type type, const char *tag) :
|
||||
atarigen_state(mconfig, type, tag),
|
||||
m_slapstic(*this, "slapstic"),
|
||||
m_slapstic_bank(*this, "slapstic_bank"),
|
||||
m_jsa(*this, "jsa"),
|
||||
m_playfield_tilemap(*this, "playfield"),
|
||||
m_alpha_tilemap(*this, "alpha"),
|
||||
m_rle(*this, "rle"),
|
||||
m_adc(*this, "adc"),
|
||||
m_in1(*this, "IN1"),
|
||||
m_mo_command(*this, "mo_command")
|
||||
{ }
|
||||
|
||||
void atarig1(machine_config &config);
|
||||
void pfslap111(machine_config &config);
|
||||
@ -64,11 +65,11 @@ private:
|
||||
|
||||
bool m_bslapstic_primed = false;
|
||||
|
||||
uint8_t m_pfscroll_xoffset = 0;
|
||||
uint16_t m_current_control = 0;
|
||||
uint8_t m_playfield_tile_bank = 0;
|
||||
uint16_t m_playfield_xscroll = 0;
|
||||
uint16_t m_playfield_yscroll = 0;
|
||||
uint8_t m_pfscroll_xoffset = 0;
|
||||
uint16_t m_current_control = 0;
|
||||
uint8_t m_playfield_tile_bank = 0;
|
||||
uint16_t m_playfield_xscroll = 0;
|
||||
uint16_t m_playfield_yscroll = 0;
|
||||
|
||||
void video_int_ack_w(uint16_t data = 0);
|
||||
TIMER_DEVICE_CALLBACK_MEMBER(scanline_update);
|
||||
|
Loading…
Reference in New Issue
Block a user