Skip to content

Commit

Permalink
bus/amiga/zorro: Improve reset handling
Browse files Browse the repository at this point in the history
  • Loading branch information
startaq committed Jan 3, 2025
1 parent 9f8e1b3 commit 8246684
Show file tree
Hide file tree
Showing 17 changed files with 52 additions and 71 deletions.
4 changes: 1 addition & 3 deletions src/devices/bus/amiga/zorro/a2232.h
Original file line number Diff line number Diff line change
Expand Up @@ -30,8 +30,6 @@ namespace bus::amiga::zorro {
// TYPE DEFINITIONS
//**************************************************************************

// ======================> a2232_device

class a2232_device : public device_t, public device_zorro2_card_interface, public amiga_autoconfig
{
public:
Expand Down Expand Up @@ -108,7 +106,7 @@ class a2232_device : public device_t, public device_zorro2_card_interface, publi

} // namespace bus::amiga::zorro

// device type definition
// device type declaration
DECLARE_DEVICE_TYPE_NS(ZORRO_A2232, bus::amiga::zorro, a2232_device)

#endif // MAME_BUS_AMIGA_ZORRO_A2232_H
18 changes: 0 additions & 18 deletions src/devices/bus/amiga/zorro/a590.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -269,14 +269,6 @@ void a2091_device::device_start()
m_dmac->set_rom(memregion("bootrom")->base());
}

//-------------------------------------------------
// device_reset - device-specific reset
//-------------------------------------------------

void dmac_hdc_device_base::device_reset()
{
}

void dmac_hdc_device_base::resize_ram(int config)
{
// allocate space for RAM
Expand All @@ -303,16 +295,6 @@ void dmac_hdc_device_base::resize_ram(int config)
m_dmac->set_ram(&m_ram[0]);
}

void a590_device::device_reset()
{
dmac_hdc_device_base::device_reset();
}

void a2091_device::device_reset()
{
dmac_hdc_device_base::device_reset();
}


//**************************************************************************
// IMPLEMENTATION
Expand Down
17 changes: 1 addition & 16 deletions src/devices/bus/amiga/zorro/a590.h
Original file line number Diff line number Diff line change
Expand Up @@ -24,17 +24,12 @@ namespace bus::amiga::zorro {
// TYPE DEFINITIONS
//**************************************************************************

// ======================> dmac_hdc_device_base

class dmac_hdc_device_base : public device_t
{
protected:
// construction/destruction
dmac_hdc_device_base(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);

// device-level overrides
virtual void device_start() override ATTR_COLD;
virtual void device_reset() override ATTR_COLD;

// optional information overrides
virtual void device_add_mconfig(machine_config &config) override ATTR_COLD;
Expand Down Expand Up @@ -69,18 +64,13 @@ class dmac_hdc_device_base : public device_t
void wd33c93(device_t *device);
};

// ======================> a590_device

class a590_device : public dmac_hdc_device_base, public device_exp_card_interface
{
public:
// construction/destruction
a590_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);

protected:
// device-level overrides
virtual void device_start() override ATTR_COLD;
virtual void device_reset() override ATTR_COLD;

// optional information overrides
virtual ioport_constructor device_input_ports() const override ATTR_COLD;
Expand All @@ -100,18 +90,13 @@ class a590_device : public dmac_hdc_device_base, public device_exp_card_interfac
required_ioport m_jp4;
};

// ======================> a2091_device

class a2091_device : public dmac_hdc_device_base, public device_zorro2_card_interface
{
public:
// construction/destruction
a2091_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);

protected:
// device-level overrides
virtual void device_start() override ATTR_COLD;
virtual void device_reset() override ATTR_COLD;

// optional information overrides
virtual ioport_constructor device_input_ports() const override ATTR_COLD;
Expand All @@ -134,7 +119,7 @@ class a2091_device : public dmac_hdc_device_base, public device_zorro2_card_inte

} // namespace bus::amiga::zorro

// device type definition
// device type declaration
DECLARE_DEVICE_TYPE_NS(ZORRO_A590, bus::amiga::zorro, a590_device)
DECLARE_DEVICE_TYPE_NS(ZORRO_A2091, bus::amiga::zorro, a2091_device)

Expand Down
11 changes: 7 additions & 4 deletions src/devices/bus/amiga/zorro/buddha.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -112,11 +112,14 @@ void buddha_device::device_start()
save_item(NAME(m_ide_1_interrupt));
}

void buddha_device::device_reset()
void buddha_device::busrst_w(int state)
{
m_ide_interrupts_enabled = false;
m_ide_0_interrupt = 0;
m_ide_1_interrupt = 0;
if (state == 0)
{
m_ide_interrupts_enabled = false;
m_ide_0_interrupt = 0;
m_ide_1_interrupt = 0;
}
}

uint8_t buddha_device::rom_r(offs_t offset)
Expand Down
2 changes: 1 addition & 1 deletion src/devices/bus/amiga/zorro/buddha.h
Original file line number Diff line number Diff line change
Expand Up @@ -35,10 +35,10 @@ class buddha_device : public device_t, public device_zorro2_card_interface, publ
virtual const tiny_rom_entry *device_rom_region() const override ATTR_COLD;

virtual void device_start() override ATTR_COLD;
virtual void device_reset() override ATTR_COLD;

// device_zorro2_card_interface overrides
virtual void cfgin_w(int state) override;
virtual void busrst_w(int state) override;

// amiga_autoconfig overrides
virtual void autoconfig_base_address(offs_t address) override;
Expand Down
5 changes: 3 additions & 2 deletions src/devices/bus/amiga/zorro/picasso2.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -88,9 +88,10 @@ void picasso2p_device::device_start()
{
}

void picasso2p_device::device_reset()
void picasso2p_device::busrst_w(int state)
{
m_autoconfig_memory_done = false;
if (state == 0)
m_autoconfig_memory_done = false;
}

device_memory_interface::space_config_vector picasso2p_device::memory_space_config() const
Expand Down
2 changes: 1 addition & 1 deletion src/devices/bus/amiga/zorro/picasso2.h
Original file line number Diff line number Diff line change
Expand Up @@ -29,13 +29,13 @@ class picasso2p_device : public device_t, public device_memory_interface, public
virtual void device_add_mconfig(machine_config &config) override ATTR_COLD;

virtual void device_start() override ATTR_COLD;
virtual void device_reset() override ATTR_COLD;

// device_memory_interface
virtual space_config_vector memory_space_config() const override;

// device_zorro2_card_interface overrides
virtual void cfgin_w(int state) override;
virtual void busrst_w(int state) override;

// amiga_autoconfig overrides
virtual void autoconfig_base_address(offs_t address) override;
Expand Down
5 changes: 3 additions & 2 deletions src/devices/bus/amiga/zorro/rainbow2.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -106,9 +106,10 @@ void rainbow2_device::device_start()

}

void rainbow2_device::device_reset()
void rainbow2_device::busrst_w(int state)
{
m_control = 0;
if (state == 0)
m_control = 0;
}

void rainbow2_device::control_w(offs_t offset, uint8_t data)
Expand Down
2 changes: 1 addition & 1 deletion src/devices/bus/amiga/zorro/rainbow2.h
Original file line number Diff line number Diff line change
Expand Up @@ -34,10 +34,10 @@ class rainbow2_device : public device_t, public device_zorro2_card_interface, pu
virtual void device_add_mconfig(machine_config &config) override ATTR_COLD;

virtual void device_start() override ATTR_COLD;
virtual void device_reset() override ATTR_COLD;

// device_zorro2_card_interface overrides
virtual void cfgin_w(int state) override;
virtual void busrst_w(int state) override;

// amiga_autoconfig overrides
virtual void autoconfig_base_address(offs_t address) override;
Expand Down
5 changes: 3 additions & 2 deletions src/devices/bus/amiga/zorro/ripple.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -99,9 +99,10 @@ void ripple_ide_device::device_start()
save_item(NAME(m_flash_bank));
}

void ripple_ide_device::device_reset()
void ripple_ide_device::busrst_w(int state)
{
m_flash_bank = 0;
if (state == 0)
m_flash_bank = 0;
}

void ripple_ide_device::bank_select_w(offs_t offset, uint16_t data, uint16_t mem_mask)
Expand Down
2 changes: 1 addition & 1 deletion src/devices/bus/amiga/zorro/ripple.h
Original file line number Diff line number Diff line change
Expand Up @@ -31,10 +31,10 @@ class ripple_ide_device : public device_t, public device_zorro2_card_interface,
virtual const tiny_rom_entry *device_rom_region() const override ATTR_COLD;

virtual void device_start() override ATTR_COLD;
virtual void device_reset() override ATTR_COLD;

// device_zorro2_card_interface overrides
virtual void cfgin_w(int state) override;
virtual void busrst_w(int state) override;

// amiga_autoconfig overrides
virtual void autoconfig_base_address(offs_t address) override;
Expand Down
4 changes: 0 additions & 4 deletions src/devices/bus/amiga/zorro/toccata.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -94,10 +94,6 @@ void toccata_device::device_start()
save_item(NAME(m_control));
}

void toccata_device::device_reset()
{
}

void toccata_device::update_interrupts()
{
if ((BIT(m_control, 7) && BIT(m_status, 3)) || (BIT(m_control, 6) && BIT(m_status, 2)))
Expand Down
1 change: 0 additions & 1 deletion src/devices/bus/amiga/zorro/toccata.h
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,6 @@ class toccata_device : public device_t, public device_zorro2_card_interface, pub
virtual void device_add_mconfig(machine_config &config) override ATTR_COLD;

virtual void device_start() override ATTR_COLD;
virtual void device_reset() override ATTR_COLD;

// device_zorro2_card_interface overrides
virtual void cfgin_w(int state) override;
Expand Down
31 changes: 20 additions & 11 deletions src/devices/bus/amiga/zorro/zorro.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -198,17 +198,6 @@ void zorro2_bus_device::device_reset()
{
// call base device
zorro_bus_device_base::device_reset();

// reset zorro cards
for (device_zorro2_card_interface &card : m_dev)
card.device().reset();

// initiate autoconfig
m_autoconfig_device = 0;

// if we have a device, start the autoconfig chain
if (m_dev.size() > m_autoconfig_device)
m_dev[m_autoconfig_device].get().cfgin_w(0);
}

//-------------------------------------------------
Expand Down Expand Up @@ -248,6 +237,22 @@ void zorro2_bus_device::fc_w(int code)
entry.fc_w(code);
}

void zorro2_bus_device::busrst_w(int state)
{
for (device_zorro2_card_interface &card : m_dev)
card.busrst_w(state);

if (state == 0)
{
// initiate autoconfig
m_autoconfig_device = 0;

// if we have a device, start the autoconfig chain
if (m_dev.size() > m_autoconfig_device)
m_dev[m_autoconfig_device].get().cfgin_w(0);
}
}


//**************************************************************************
// ZORRO INTERFACE
Expand Down Expand Up @@ -285,6 +290,10 @@ void device_zorro_card_interface::cfgin_w(int state)
{
}

void device_zorro_card_interface::busrst_w(int state)
{
}


//**************************************************************************
// EXPANSION CARD INTERFACE
Expand Down
4 changes: 3 additions & 1 deletion src/devices/bus/amiga/zorro/zorro.h
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@
88 Ground 87 Ground
90 Ground 89 Ground
92 7 MHz 91 Ground
94 /BURST 93 DOE
94 /BUSRST 93 DOE
96 /EINT1 95 /BG *5
98 N/C 97 N/C
100 Ground 99 Ground
Expand Down Expand Up @@ -295,6 +295,7 @@ class zorro2_bus_device : public zorro_bus_device_base

// interface (from host)
virtual void fc_w(int code) override;
void busrst_w(int state);

protected:
zorro2_bus_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
Expand Down Expand Up @@ -337,6 +338,7 @@ class device_zorro_card_interface : public device_interface
// interface (from host)
virtual void fc_w(int code);
virtual void cfgin_w(int state);
virtual void busrst_w(int state);

protected:
device_zorro_card_interface(const machine_config &mconfig, device_t &device);
Expand Down
3 changes: 2 additions & 1 deletion src/mame/amiga/amiga.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -837,7 +837,8 @@ void a2000_state::machine_reset()
amiga_state::machine_reset();

// reset zorro devices
m_zorro->reset();
m_zorro->busrst_w(0);
m_zorro->busrst_w(1);
}

void a2000_state::zorro2_int2_w(int state)
Expand Down
7 changes: 5 additions & 2 deletions src/mame/amiga/amiga_m.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -175,8 +175,11 @@ void amiga_state::machine_start()

void amiga_state::m68k_reset(int state)
{
logerror("%s: Executed RESET\n", machine().describe_context());
machine_reset();
if (state)
{
logerror("%s: Executed RESET\n", machine().describe_context());
machine_reset();
}
}

void amiga_state::machine_reset()
Expand Down

0 comments on commit 8246684

Please sign in to comment.