lpci/i82371sb.cpp: add boot_state_hook devcb to receive writes to debug port 0x80 (nw)

This commit is contained in:
yz70s 2017-06-25 14:57:18 +02:00
parent 608fbf58f0
commit 0c3f8a22b5
2 changed files with 14 additions and 0 deletions

View File

@ -30,6 +30,7 @@ DEFINE_DEVICE_TYPE(I82371SB, i82371sb_device, "i82371sb", "Intel 82371SB")
i82371sb_device::i82371sb_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
: southbridge_device(mconfig, I82371SB, tag, owner, clock)
, pci_device_interface( mconfig, *this )
, m_boot_state_hook(*this)
{
}
@ -147,6 +148,7 @@ void i82371sb_device::pci_write(pci_bus_device *pcibus, int function, int offset
void i82371sb_device::device_start()
{
southbridge_device::device_start();
m_boot_state_hook.resolve_safe();
/* setup save states */
save_item(NAME(m_regs));
}
@ -179,3 +181,8 @@ void i82371sb_device::device_reset()
m_regs[2][0x08] = 0x0c030000;
m_regs[2][0x0c] = 0x00000000;
}
void i82371sb_device::port80_debug_write(uint8_t value)
{
m_boot_state_hook((offs_t)0, value);
}

View File

@ -24,6 +24,8 @@ public:
// construction/destruction
i82371sb_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
template <class Object> static devcb_base &set_boot_state_hook(device_t &device, Object &&cb) { return downcast<i82371sb_device &>(device).m_boot_state_hook.set_callback(std::forward<Object>(cb)); }
virtual uint32_t pci_read(pci_bus_device *pcibus, int function, int offset, uint32_t mem_mask) override;
virtual void pci_write(pci_bus_device *pcibus, int function, int offset, uint32_t data, uint32_t mem_mask) override;
@ -31,6 +33,7 @@ protected:
// device-level overrides
virtual void device_start() override;
virtual void device_reset() override;
virtual void port80_debug_write(uint8_t value) override;
uint32_t pci_isa_r(device_t *busdevice, int offset, uint32_t mem_mask);
void pci_isa_w(device_t *busdevice, int offset, uint32_t data, uint32_t mem_mask);
@ -42,10 +45,14 @@ protected:
void pci_usb_w(device_t *busdevice, int offset, uint32_t data, uint32_t mem_mask);
private:
uint32_t m_regs[3][0x400/4];
devcb_write8 m_boot_state_hook;
};
// device type definition
extern const device_type I82371SB;
DECLARE_DEVICE_TYPE(I82371SB, i82371sb_device)
#define MCFG_I82371SB_BOOT_STATE_HOOK(_devcb) \
devcb = &i82371sb_device::set_boot_state_hook(*device, DEVCB_##_devcb);
#endif // MAME_BUS_LPCI_I82371SB_H