mirror of
https://github.com/holub/mame
synced 2025-07-01 16:19:38 +03:00
a2gameio: One fine point (nw)
This commit is contained in:
parent
5b1f9fd5ba
commit
88ae8ac335
@ -11,12 +11,15 @@
|
||||
input signals (0-150KΩ resistance) which are converted to
|
||||
digital pulses by a NE558 quad timer on the main board. The
|
||||
connector also provides several digital switch inputs and
|
||||
"annunciator" outputs, all LS/TTL compatible.
|
||||
"annunciator" outputs, all LS/TTL compatible. Apple joysticks
|
||||
provide active high switches (though at least one third-party
|
||||
product treats them as active low) and Apple main boards have no
|
||||
pullups on these inputs, which thus read 0 if disconnected.
|
||||
|
||||
While pins 9 and 16 are unconnected on the Apple II, they provide
|
||||
additional digital output and input pins respectively on the Sanyo
|
||||
MBC-550/555 (which uses 74LS123 monostables instead of a NE558).
|
||||
The Apple //gs also recognizes a switch input 3, though this is
|
||||
The Apple IIgs also recognizes a switch input 3, though this is
|
||||
placed on pin 9 of the internal connector rather than 16.
|
||||
|
||||
The Apple IIe, IIc and IIgs also have an external DE-9 connector
|
||||
@ -73,6 +76,12 @@ void apple2_gameio_device::device_config_complete()
|
||||
m_intf = dynamic_cast<device_a2gameio_interface *>(get_card_device());
|
||||
}
|
||||
|
||||
void apple2_gameio_device::device_resolve_objects()
|
||||
{
|
||||
if (m_intf != nullptr)
|
||||
m_intf->m_connector = this;
|
||||
}
|
||||
|
||||
void apple2_gameio_device::device_start()
|
||||
{
|
||||
}
|
||||
@ -119,7 +128,7 @@ READ_LINE_MEMBER(apple2_gameio_device::sw0_r)
|
||||
if (m_intf != nullptr)
|
||||
return m_intf->sw0_r();
|
||||
|
||||
return 0;
|
||||
return m_sw_pullups ? 1 : 0;
|
||||
}
|
||||
|
||||
READ_LINE_MEMBER(apple2_gameio_device::sw1_r)
|
||||
@ -127,7 +136,7 @@ READ_LINE_MEMBER(apple2_gameio_device::sw1_r)
|
||||
if (m_intf != nullptr)
|
||||
return m_intf->sw1_r();
|
||||
|
||||
return 0;
|
||||
return m_sw_pullups ? 1 : 0;
|
||||
}
|
||||
|
||||
READ_LINE_MEMBER(apple2_gameio_device::sw2_r)
|
||||
@ -135,7 +144,7 @@ READ_LINE_MEMBER(apple2_gameio_device::sw2_r)
|
||||
if (m_intf != nullptr)
|
||||
return m_intf->sw2_r();
|
||||
|
||||
return 0;
|
||||
return m_sw_pullups ? 1 : 0;
|
||||
}
|
||||
|
||||
READ_LINE_MEMBER(apple2_gameio_device::sw3_r)
|
||||
@ -143,7 +152,7 @@ READ_LINE_MEMBER(apple2_gameio_device::sw3_r)
|
||||
if (m_intf != nullptr)
|
||||
return m_intf->sw3_r();
|
||||
|
||||
return 0;
|
||||
return m_sw_pullups ? 1 : 0;
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(apple2_gameio_device::an0_w)
|
||||
@ -189,6 +198,7 @@ WRITE_LINE_MEMBER(apple2_gameio_device::strobe_w)
|
||||
|
||||
device_a2gameio_interface::device_a2gameio_interface(const machine_config &mconfig, device_t &device)
|
||||
: device_slot_card_interface(mconfig, device)
|
||||
, m_connector(nullptr)
|
||||
{
|
||||
}
|
||||
|
||||
|
@ -37,6 +37,10 @@ public:
|
||||
set_fixed(false);
|
||||
}
|
||||
|
||||
// configuration
|
||||
void set_sw_pullups(bool enabled) { m_sw_pullups = enabled; }
|
||||
bool has_sw_pullups() const { return m_sw_pullups; }
|
||||
|
||||
// standard options
|
||||
static void default_options(device_slot_interface &slot);
|
||||
|
||||
@ -65,11 +69,14 @@ public:
|
||||
protected:
|
||||
// device-level overrides
|
||||
virtual void device_config_complete() override;
|
||||
virtual void device_resolve_objects() override;
|
||||
virtual void device_start() override;
|
||||
|
||||
private:
|
||||
// selected device
|
||||
device_a2gameio_interface *m_intf;
|
||||
|
||||
bool m_sw_pullups;
|
||||
};
|
||||
|
||||
// ======================> device_a2gameio_interface
|
||||
@ -88,10 +95,10 @@ protected:
|
||||
virtual u8 pdl1_r() { return 0; }
|
||||
virtual u8 pdl2_r() { return 0; }
|
||||
virtual u8 pdl3_r() { return 0; }
|
||||
virtual DECLARE_READ_LINE_MEMBER(sw0_r) { return 0; }
|
||||
virtual DECLARE_READ_LINE_MEMBER(sw1_r) { return 0; }
|
||||
virtual DECLARE_READ_LINE_MEMBER(sw2_r) { return 0; }
|
||||
virtual DECLARE_READ_LINE_MEMBER(sw3_r) { return 0; }
|
||||
virtual DECLARE_READ_LINE_MEMBER(sw0_r) { return m_connector->has_sw_pullups() ? 1 : 0; }
|
||||
virtual DECLARE_READ_LINE_MEMBER(sw1_r) { return m_connector->has_sw_pullups() ? 1 : 0; }
|
||||
virtual DECLARE_READ_LINE_MEMBER(sw2_r) { return m_connector->has_sw_pullups() ? 1 : 0; }
|
||||
virtual DECLARE_READ_LINE_MEMBER(sw3_r) { return m_connector->has_sw_pullups() ? 1 : 0; }
|
||||
|
||||
// optional output overrides
|
||||
virtual DECLARE_WRITE_LINE_MEMBER(an0_w) { }
|
||||
@ -100,6 +107,9 @@ protected:
|
||||
virtual DECLARE_WRITE_LINE_MEMBER(an3_w) { }
|
||||
virtual DECLARE_WRITE_LINE_MEMBER(an4_w) { }
|
||||
virtual DECLARE_WRITE_LINE_MEMBER(strobe_w) { }
|
||||
|
||||
private:
|
||||
apple2_gameio_device *m_connector;
|
||||
};
|
||||
|
||||
// device type declaration
|
||||
|
@ -362,6 +362,7 @@ void mbc55x_state::mbc55x(machine_config &config)
|
||||
INPUT_MERGER_ANY_HIGH(config, "sioint").output_handler().set(m_pic, FUNC(pic8259_device::ir2_w));
|
||||
|
||||
APPLE2_GAMEIO(config, m_gameio, apple2_gameio_device::default_options, nullptr);
|
||||
m_gameio->set_sw_pullups(true); // 3300 ohm pullups to 5.0V on pins 2-4 and 16
|
||||
|
||||
CENTRONICS(config, m_printer, centronics_devices, nullptr);
|
||||
m_printer->busy_handler().set(FUNC(mbc55x_state::printer_busy_w)).invert(); // LS14 Schmitt trigger
|
||||
|
Loading…
Reference in New Issue
Block a user