mirror of
https://github.com/holub/mame
synced 2025-10-05 08:41:31 +03:00
midwayic: Added auxillary output callback. (nw)
This commit is contained in:
parent
7fb7a30171
commit
fce11d6708
@ -645,6 +645,7 @@ DEFINE_DEVICE_TYPE(MIDWAY_IOASIC, midway_ioasic_device, "midway_ioasic", "Midway
|
||||
midway_ioasic_device::midway_ioasic_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
|
||||
midway_serial_pic2_device(mconfig, MIDWAY_IOASIC, tag, owner, clock),
|
||||
m_serial_tx_cb(*this),
|
||||
m_aux_output_cb(*this),
|
||||
m_has_dcs(0),
|
||||
m_has_cage(0),
|
||||
m_dcs_cpu(nullptr),
|
||||
@ -710,6 +711,7 @@ void midway_ioasic_device::device_start()
|
||||
// resolve callbacks
|
||||
m_irq_callback.resolve_safe();
|
||||
m_serial_tx_cb.resolve_safe();
|
||||
m_aux_output_cb.resolve();
|
||||
|
||||
/* initialize the PIC */
|
||||
midway_serial_pic2_device::device_start();
|
||||
@ -933,13 +935,18 @@ void midway_ioasic_device::fifo_full_w(uint16_t data)
|
||||
/* need to check if device callback is required instead of hardcode here */
|
||||
void midway_ioasic_device::output_w(uint32_t data)
|
||||
{
|
||||
/* two writes in pairs. flag off first, on second. arg remains the same. */
|
||||
uint8_t flag = (data >> 8) & 0x8;
|
||||
uint8_t op = (data >> 8) & 0x7;
|
||||
uint8_t arg = data & 0xFF;
|
||||
if (!m_aux_output_cb.isnull()) {
|
||||
// This is P15 on vegas boards
|
||||
m_aux_output_cb(data);
|
||||
}
|
||||
else {
|
||||
/* two writes in pairs. flag off first, on second. arg remains the same. */
|
||||
uint8_t flag = (data >> 8) & 0x8;
|
||||
uint8_t op = (data >> 8) & 0x7;
|
||||
uint8_t arg = data & 0xFF;
|
||||
|
||||
switch (op)
|
||||
{
|
||||
switch (op)
|
||||
{
|
||||
default:
|
||||
logerror("Unknown output (%02X) = %02X\n", flag | op, arg);
|
||||
break;
|
||||
@ -966,6 +973,7 @@ void midway_ioasic_device::output_w(uint32_t data)
|
||||
machine().output().set_lamp_value(8 + bit, (arg >> bit) & 0x1);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -1165,6 +1173,8 @@ WRITE32_MEMBER( midway_ioasic_device::write )
|
||||
break;
|
||||
|
||||
case IOASIC_SOUNDCTL:
|
||||
if (LOG_IOASIC)
|
||||
logerror("%08X write IOASIC_SOUNDCTL=%04x\n", machine().device("maincpu")->safe_pc(), data);
|
||||
/* sound reset? */
|
||||
if (m_has_dcs)
|
||||
{
|
||||
|
@ -160,6 +160,7 @@ public:
|
||||
static void static_set_auto_ack(device_t &device, uint8_t auto_ack) { downcast<midway_ioasic_device &>(device).m_auto_ack = auto_ack; }
|
||||
template<class _Object> static devcb_base &set_irqhandler_callback(device_t &device, _Object object) { return downcast<midway_ioasic_device &>(device).m_irq_callback.set_callback(object); }
|
||||
template<class _Object> static devcb_base &set_serial_tx_callback(device_t &device, _Object object) { return downcast<midway_ioasic_device &>(device).m_serial_tx_cb.set_callback(object); }
|
||||
template<class _Object> static devcb_base &set_aux_output_callback(device_t &device, _Object object) { return downcast<midway_ioasic_device &>(device).m_aux_output_cb.set_callback(object); }
|
||||
|
||||
void set_shuffle_state(int state);
|
||||
void fifo_w(uint16_t data);
|
||||
@ -193,6 +194,7 @@ private:
|
||||
void update_ioasic_irq();
|
||||
|
||||
devcb_write8 m_serial_tx_cb;
|
||||
devcb_write32 m_aux_output_cb;
|
||||
|
||||
uint32_t m_reg[16];
|
||||
uint8_t m_has_dcs;
|
||||
@ -241,6 +243,9 @@ DECLARE_DEVICE_TYPE(MIDWAY_IOASIC, midway_ioasic_device)
|
||||
#define MCFG_MIDWAY_IOASIC_OUT_TX_CB(_devcb) \
|
||||
devcb = &midway_ioasic_device::set_serial_tx_callback(*device, DEVCB_##_devcb);
|
||||
|
||||
#define MCFG_MIDWAY_IOASIC_AUX_OUT_CB(_devcb) \
|
||||
devcb = &midway_ioasic_device::set_aux_output_callback(*device, DEVCB_##_devcb);
|
||||
|
||||
|
||||
enum
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user