mirror of
https://github.com/holub/mame
synced 2025-06-27 06:39:03 +03:00
(MESS) abc80x, abc1600: Added Luxor ABC keyboard port slot interface. [Curt Coder]
This commit is contained in:
parent
48736e0700
commit
86b2a50fe3
2
.gitattributes
vendored
2
.gitattributes
vendored
@ -6911,6 +6911,8 @@ src/mess/machine/abc_xebec.c svneol=native#text/plain
|
||||
src/mess/machine/abc_xebec.h svneol=native#text/plain
|
||||
src/mess/machine/abcbus.c svneol=native#text/plain
|
||||
src/mess/machine/abcbus.h svneol=native#text/plain
|
||||
src/mess/machine/abckb.c svneol=native#text/plain
|
||||
src/mess/machine/abckb.h svneol=native#text/plain
|
||||
src/mess/machine/ac1.c svneol=native#text/plain
|
||||
src/mess/machine/acb4070.c svneol=native#text/plain
|
||||
src/mess/machine/acb4070.h svneol=native#text/plain
|
||||
|
@ -1531,8 +1531,8 @@ static Z80DART_INTERFACE( dart_intf )
|
||||
DEVCB_NULL,
|
||||
DEVCB_NULL,
|
||||
|
||||
DEVCB_DEVICE_LINE_MEMBER(ABC99_TAG, abc99_device, txd_r),
|
||||
DEVCB_DEVICE_LINE_MEMBER(ABC99_TAG, abc99_device, rxd_w),
|
||||
DEVCB_DEVICE_LINE_MEMBER(ABC_KEYBOARD_PORT_TAG, abc_keyboard_port_device, rxd_r),
|
||||
DEVCB_DEVICE_LINE_MEMBER(ABC_KEYBOARD_PORT_TAG, abc_keyboard_port_device, txd_w),
|
||||
DEVCB_NULL,
|
||||
DEVCB_NULL,
|
||||
DEVCB_NULL,
|
||||
@ -1730,17 +1730,6 @@ void abc1600_state::fdc_drq_w(bool state)
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// ABC99_INTERFACE( abc99_intf )
|
||||
//-------------------------------------------------
|
||||
|
||||
static ABC99_INTERFACE( abc99_intf )
|
||||
{
|
||||
DEVCB_DEVICE_LINE_MEMBER(Z8470AB1_TAG, z80dart_device, rxtxcb_w),
|
||||
DEVCB_DEVICE_LINE_MEMBER(Z8470AB1_TAG, z80dart_device, dcdb_w)
|
||||
};
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// ABC1600BUS_INTERFACE( abcbus_intf )
|
||||
//-------------------------------------------------
|
||||
@ -1955,7 +1944,7 @@ static MACHINE_CONFIG_START( abc1600, abc1600_state )
|
||||
MCFG_FLOPPY_DRIVE_ADD(SAB1797_02P_TAG":2", abc1600_floppies, "525qd", floppy_image_device::default_floppy_formats)
|
||||
MCFG_RS232_PORT_ADD(RS232_A_TAG, rs232a_intf, default_rs232_devices, NULL)
|
||||
MCFG_RS232_PORT_ADD(RS232_B_TAG, rs232b_intf, default_rs232_devices, NULL)
|
||||
MCFG_ABC99_ADD(abc99_intf)
|
||||
MCFG_ABC_KEYBOARD_PORT_ADD("abc99", DEVWRITELINE(Z8470AB1_TAG, z80dart_device, rxtxcb_w), DEVWRITELINE(Z8470AB1_TAG, z80dart_device, dcdb_w))
|
||||
|
||||
MCFG_ABC1600BUS_SLOT_ADD("bus0i", bus0i_intf, abc1600bus_cards, NULL)
|
||||
MCFG_ABC1600BUS_SLOT_ADD("bus0x", bus0x_intf, abc1600bus_cards, NULL)
|
||||
|
@ -433,11 +433,6 @@ WRITE_LINE_MEMBER( abc80_state::keydown_w )
|
||||
m_pio->port_a_write(m_key_strobe << 7);
|
||||
}
|
||||
|
||||
static ABC80_KEYBOARD_INTERFACE( kb_intf )
|
||||
{
|
||||
DEVCB_DRIVER_LINE_MEMBER(abc80_state, keydown_w)
|
||||
};
|
||||
|
||||
WRITE8_MEMBER( abc80_state::kbd_w )
|
||||
{
|
||||
m_key_data = data;
|
||||
@ -587,7 +582,7 @@ static MACHINE_CONFIG_START( abc80, abc80_state )
|
||||
// devices
|
||||
MCFG_Z80PIO_ADD(Z80PIO_TAG, XTAL_11_9808MHz/2/2, pio_intf)
|
||||
MCFG_CASSETTE_ADD("cassette", abc80_cassette_interface)
|
||||
MCFG_ABC80_KEYBOARD_ADD(kb_intf)
|
||||
MCFG_ABC80_KEYBOARD_ADD(WRITELINE(abc80_state, keydown_w))
|
||||
MCFG_ABCBUS_SLOT_ADD(ABCBUS_TAG, abcbus_intf, abcbus_cards, "slow")
|
||||
MCFG_DEVICE_CARD_DEVICE_INPUT_DEFAULTS("slow", abc830_slow)
|
||||
MCFG_RS232_PORT_ADD(RS232_TAG, rs232_intf, default_rs232_devices, NULL)
|
||||
|
@ -773,8 +773,8 @@ static Z80DART_INTERFACE( abc800_dart_intf )
|
||||
DEVCB_NULL,
|
||||
DEVCB_NULL,
|
||||
|
||||
DEVCB_DEVICE_LINE_MEMBER(ABC800_KEYBOARD_TAG, abc800_keyboard_device, txd_r),
|
||||
DEVCB_DEVICE_LINE_MEMBER(ABC800_KEYBOARD_TAG, abc800_keyboard_device, rxd_w),
|
||||
DEVCB_DEVICE_LINE_MEMBER(ABC_KEYBOARD_PORT_TAG, abc_keyboard_port_device, rxd_r),
|
||||
DEVCB_DEVICE_LINE_MEMBER(ABC_KEYBOARD_PORT_TAG, abc_keyboard_port_device, txd_w),
|
||||
DEVCB_NULL,
|
||||
DEVCB_NULL,
|
||||
DEVCB_NULL,
|
||||
@ -811,8 +811,8 @@ static Z80DART_INTERFACE( abc802_dart_intf )
|
||||
DEVCB_NULL,
|
||||
DEVCB_NULL,
|
||||
|
||||
DEVCB_DEVICE_LINE_MEMBER(ABC77_TAG, abc77_device, txd_r),
|
||||
DEVCB_DEVICE_LINE_MEMBER(ABC77_TAG, abc77_device, rxd_w),
|
||||
DEVCB_DEVICE_LINE_MEMBER(ABC_KEYBOARD_PORT_TAG, abc_keyboard_port_device, rxd_r),
|
||||
DEVCB_DEVICE_LINE_MEMBER(ABC_KEYBOARD_PORT_TAG, abc_keyboard_port_device, txd_w),
|
||||
DEVCB_DRIVER_LINE_MEMBER(abc802_state, lrs_w),
|
||||
DEVCB_DRIVER_LINE_MEMBER(abc802_state, mux80_40_w),
|
||||
DEVCB_NULL,
|
||||
@ -844,8 +844,8 @@ static Z80DART_INTERFACE( abc806_dart_intf )
|
||||
DEVCB_NULL,
|
||||
DEVCB_NULL,
|
||||
|
||||
DEVCB_DEVICE_LINE_MEMBER(ABC77_TAG, abc77_device, txd_r),
|
||||
DEVCB_DEVICE_LINE_MEMBER(ABC77_TAG, abc77_device, rxd_w),
|
||||
DEVCB_DEVICE_LINE_MEMBER(ABC_KEYBOARD_PORT_TAG, abc_keyboard_port_device, rxd_r),
|
||||
DEVCB_DEVICE_LINE_MEMBER(ABC_KEYBOARD_PORT_TAG, abc_keyboard_port_device, txd_w),
|
||||
DEVCB_DRIVER_LINE_MEMBER(abc806_state, keydtr_w),
|
||||
DEVCB_NULL,
|
||||
DEVCB_NULL,
|
||||
@ -855,28 +855,6 @@ static Z80DART_INTERFACE( abc806_dart_intf )
|
||||
};
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// ABC800_KEYBOARD_INTERFACE( abc800_kb_intf )
|
||||
//-------------------------------------------------
|
||||
|
||||
static ABC800_KEYBOARD_INTERFACE( abc800_kb_intf )
|
||||
{
|
||||
DEVCB_DEVICE_LINE_MEMBER(Z80DART_TAG, z80dart_device, rxtxcb_w),
|
||||
DEVCB_DEVICE_LINE_MEMBER(Z80DART_TAG, z80dart_device, dcdb_w)
|
||||
};
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// ABC77_INTERFACE( kb_intf )
|
||||
//-------------------------------------------------
|
||||
|
||||
static ABC77_INTERFACE( kb_intf )
|
||||
{
|
||||
DEVCB_DEVICE_LINE_MEMBER(Z80DART_TAG, z80dart_device, rxtxcb_w),
|
||||
DEVCB_DEVICE_LINE_MEMBER(Z80DART_TAG, z80dart_device, dcdb_w)
|
||||
};
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// z80_daisy_config abc800_daisy_chain
|
||||
//-------------------------------------------------
|
||||
@ -1211,7 +1189,7 @@ static MACHINE_CONFIG_START( abc800c, abc800c_state )
|
||||
MCFG_CASSETTE_ADD("cassette", cass_intf)
|
||||
MCFG_RS232_PORT_ADD(RS232_A_TAG, rs232a_intf, default_rs232_devices, NULL)
|
||||
MCFG_RS232_PORT_ADD(RS232_B_TAG, rs232b_intf, default_rs232_devices, NULL)
|
||||
MCFG_ABC800_KEYBOARD_ADD(abc800_kb_intf)
|
||||
MCFG_ABC_KEYBOARD_PORT_ADD("abc800", DEVWRITELINE(Z80DART_TAG, z80dart_device, rxtxcb_w), DEVWRITELINE(Z80DART_TAG, z80dart_device, dcdb_w))
|
||||
|
||||
// ABC bus
|
||||
MCFG_ABCBUS_SLOT_ADD(ABCBUS_TAG, abcbus_intf, abcbus_cards, "fast")
|
||||
@ -1254,7 +1232,7 @@ static MACHINE_CONFIG_START( abc800m, abc800m_state )
|
||||
MCFG_CASSETTE_ADD("cassette", cass_intf)
|
||||
MCFG_RS232_PORT_ADD(RS232_A_TAG, rs232a_intf, default_rs232_devices, NULL)
|
||||
MCFG_RS232_PORT_ADD(RS232_B_TAG, rs232b_intf, default_rs232_devices, NULL)
|
||||
MCFG_ABC800_KEYBOARD_ADD(abc800_kb_intf)
|
||||
MCFG_ABC_KEYBOARD_PORT_ADD("abc800", DEVWRITELINE(Z80DART_TAG, z80dart_device, rxtxcb_w), DEVWRITELINE(Z80DART_TAG, z80dart_device, dcdb_w))
|
||||
|
||||
// ABC bus
|
||||
MCFG_ABCBUS_SLOT_ADD(ABCBUS_TAG, abcbus_intf, abcbus_cards, "fast")
|
||||
@ -1297,7 +1275,7 @@ static MACHINE_CONFIG_START( abc802, abc802_state )
|
||||
MCFG_CASSETTE_ADD("cassette", cass_intf)
|
||||
MCFG_RS232_PORT_ADD(RS232_A_TAG, rs232a_intf, default_rs232_devices, NULL)
|
||||
MCFG_RS232_PORT_ADD(RS232_B_TAG, rs232b_intf, default_rs232_devices, NULL)
|
||||
MCFG_ABC55_ADD(kb_intf)
|
||||
MCFG_ABC_KEYBOARD_PORT_ADD("abc55", DEVWRITELINE(Z80DART_TAG, z80dart_device, rxtxcb_w), DEVWRITELINE(Z80DART_TAG, z80dart_device, dcdb_w))
|
||||
|
||||
// ABC bus
|
||||
MCFG_ABCBUS_SLOT_ADD(ABCBUS_TAG, abcbus_intf, abcbus_cards, "fast")
|
||||
@ -1330,7 +1308,7 @@ static MACHINE_CONFIG_START( abc806, abc806_state )
|
||||
MCFG_Z80DART_ADD(Z80DART_TAG, ABC800_X01/2/2, abc806_dart_intf)
|
||||
MCFG_RS232_PORT_ADD(RS232_A_TAG, rs232a_intf, default_rs232_devices, NULL)
|
||||
MCFG_RS232_PORT_ADD(RS232_B_TAG, rs232b_intf, default_rs232_devices, NULL)
|
||||
MCFG_ABC77_ADD(kb_intf)
|
||||
MCFG_ABC_KEYBOARD_PORT_ADD("abc77", DEVWRITELINE(Z80DART_TAG, z80dart_device, rxtxcb_w), DEVWRITELINE(Z80DART_TAG, z80dart_device, dcdb_w))
|
||||
|
||||
// ABC bus
|
||||
MCFG_ABCBUS_SLOT_ADD(ABCBUS_TAG, abcbus_intf, abcbus_cards, "fast")
|
||||
@ -1338,8 +1316,8 @@ static MACHINE_CONFIG_START( abc806, abc806_state )
|
||||
|
||||
// internal ram
|
||||
MCFG_RAM_ADD(RAM_TAG)
|
||||
MCFG_RAM_DEFAULT_SIZE("160K") // 32KB + 128KB
|
||||
MCFG_RAM_EXTRA_OPTIONS("544K") // 32KB + 512KB
|
||||
MCFG_RAM_DEFAULT_SIZE("128K")
|
||||
MCFG_RAM_EXTRA_OPTIONS("512K")
|
||||
|
||||
// software list
|
||||
MCFG_SOFTWARE_LIST_ADD("flop_list", "abc806")
|
||||
|
@ -5,13 +5,13 @@
|
||||
|
||||
#include "emu.h"
|
||||
#include "cpu/m68000/m68000.h"
|
||||
#include "machine/ram.h"
|
||||
#include "machine/8530scc.h"
|
||||
#include "machine/abc99.h"
|
||||
#include "machine/abckb.h"
|
||||
#include "machine/abc1600_bus.h"
|
||||
#include "machine/e0516.h"
|
||||
#include "machine/lux4105.h"
|
||||
#include "machine/nmc9306.h"
|
||||
#include "machine/ram.h"
|
||||
#include "machine/serial.h"
|
||||
#include "machine/wd_fdc.h"
|
||||
#include "machine/z80dart.h"
|
||||
@ -42,8 +42,8 @@
|
||||
#define BUS0X_TAG "bus0x"
|
||||
#define BUS1_TAG "bus1"
|
||||
#define BUS2_TAG "bus2"
|
||||
#define RS232_A_TAG "rs232a"
|
||||
#define RS232_B_TAG "rs232b"
|
||||
#define RS232_A_TAG "rs232a"
|
||||
#define RS232_B_TAG "rs232b"
|
||||
|
||||
|
||||
|
||||
|
@ -11,7 +11,7 @@
|
||||
#include "cpu/z80/z80daisy.h"
|
||||
#include "cpu/mcs48/mcs48.h"
|
||||
#include "imagedev/cassette.h"
|
||||
#include "machine/abc77.h"
|
||||
#include "machine/abckb.h"
|
||||
#include "machine/abc800kb.h"
|
||||
#include "machine/abc830.h"
|
||||
#include "machine/abcbus.h"
|
||||
@ -219,13 +219,11 @@ public:
|
||||
abc802_state(const machine_config &mconfig, device_type type, const char *tag)
|
||||
: abc800_state(mconfig, type, tag),
|
||||
m_crtc(*this, MC6845_TAG),
|
||||
m_abc77(*this, ABC77_TAG),
|
||||
m_char_rom(*this, MC6845_TAG),
|
||||
m_config(*this, "CONFIG")
|
||||
{ }
|
||||
|
||||
required_device<mc6845_device> m_crtc;
|
||||
optional_device<abc77_device> m_abc77;
|
||||
required_memory_region m_char_rom;
|
||||
required_ioport m_config;
|
||||
|
||||
@ -263,7 +261,6 @@ public:
|
||||
: abc800_state(mconfig, type, tag),
|
||||
m_crtc(*this, MC6845_TAG),
|
||||
m_rtc(*this, E0516_TAG),
|
||||
m_abc77(*this, ABC77_TAG),
|
||||
m_rad_prom(*this, "rad"),
|
||||
m_hru2_prom(*this, "hru"),
|
||||
m_char_rom(*this, MC6845_TAG)
|
||||
@ -271,7 +268,6 @@ public:
|
||||
|
||||
required_device<mc6845_device> m_crtc;
|
||||
required_device<e0516_device> m_rtc;
|
||||
optional_device<abc77_device> m_abc77;
|
||||
required_memory_region m_rad_prom;
|
||||
required_memory_region m_hru2_prom;
|
||||
required_memory_region m_char_rom;
|
||||
|
@ -63,28 +63,6 @@ const device_type ABC77 = &device_creator<abc77_device>;
|
||||
const device_type ABC55 = &device_creator<abc55_device>;
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// device_config_complete - perform any
|
||||
// operations now that the configuration is
|
||||
// complete
|
||||
//-------------------------------------------------
|
||||
|
||||
void abc77_device::device_config_complete()
|
||||
{
|
||||
// inherit a copy of the static data
|
||||
const abc77_interface *intf = reinterpret_cast<const abc77_interface *>(static_config());
|
||||
if (intf != NULL)
|
||||
*static_cast<abc77_interface *>(this) = *intf;
|
||||
|
||||
// or initialize to defaults if none provided
|
||||
else
|
||||
{
|
||||
memset(&m_out_clock_cb, 0, sizeof(m_out_clock_cb));
|
||||
memset(&m_out_keydown_cb, 0, sizeof(m_out_keydown_cb));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// ROM( abc77 )
|
||||
//-------------------------------------------------
|
||||
@ -415,7 +393,7 @@ inline void abc77_device::serial_clock()
|
||||
{
|
||||
m_clock = !m_clock;
|
||||
|
||||
m_out_clock_func(!m_clock);
|
||||
m_slot->trxc_w(!m_clock);
|
||||
}
|
||||
|
||||
|
||||
@ -427,7 +405,7 @@ inline void abc77_device::key_down(int state)
|
||||
{
|
||||
if (m_keydown != state)
|
||||
{
|
||||
m_out_keydown_func(state);
|
||||
m_slot->keydown_w(state);
|
||||
m_keydown = state;
|
||||
}
|
||||
}
|
||||
@ -444,6 +422,7 @@ inline void abc77_device::key_down(int state)
|
||||
|
||||
abc77_device::abc77_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
|
||||
: device_t(mconfig, ABC77, "Luxor ABC 77", tag, owner, clock, "abc77", __FILE__),
|
||||
abc_keyboard_interface(mconfig, *this),
|
||||
m_maincpu(*this, I8035_TAG),
|
||||
m_discrete(*this, DISCRETE_TAG),
|
||||
m_x0(*this, "X0"),
|
||||
@ -468,6 +447,7 @@ abc77_device::abc77_device(const machine_config &mconfig, const char *tag, devic
|
||||
|
||||
abc77_device::abc77_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source)
|
||||
: device_t(mconfig, type, name, tag, owner, clock, shortname, source),
|
||||
abc_keyboard_interface(mconfig, *this),
|
||||
m_maincpu(*this, I8035_TAG),
|
||||
m_discrete(*this, DISCRETE_TAG),
|
||||
m_x0(*this, "X0"),
|
||||
@ -505,10 +485,6 @@ void abc77_device::device_start()
|
||||
m_serial_timer->adjust(attotime::from_hz(19200), 0, attotime::from_hz(19200)); // ALE/32
|
||||
|
||||
m_reset_timer = timer_alloc(TIMER_RESET);
|
||||
|
||||
// resolve callbacks
|
||||
m_out_clock_func.resolve(m_out_clock_cb, *this);
|
||||
m_out_keydown_func.resolve(m_out_keydown_cb, *this);
|
||||
}
|
||||
|
||||
|
||||
@ -548,6 +524,26 @@ void abc77_device::device_timer(emu_timer &timer, device_timer_id id, int param,
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// rxd_r -
|
||||
//-------------------------------------------------
|
||||
|
||||
int abc77_device::rxd_r()
|
||||
{
|
||||
return m_txd;
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// txd_w -
|
||||
//-------------------------------------------------
|
||||
|
||||
void abc77_device::txd_w(int state)
|
||||
{
|
||||
m_maincpu->set_input_line(MCS48_INPUT_IRQ, state ? CLEAR_LINE : ASSERT_LINE);
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// p1_r -
|
||||
//-------------------------------------------------
|
||||
@ -667,38 +663,3 @@ WRITE8_MEMBER( abc77_device::j3_w )
|
||||
{
|
||||
m_j3 = data;
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// rxd_w -
|
||||
//-------------------------------------------------
|
||||
|
||||
WRITE_LINE_MEMBER( abc77_device::rxd_w )
|
||||
{
|
||||
m_maincpu->set_input_line(MCS48_INPUT_IRQ, state ? CLEAR_LINE : ASSERT_LINE);
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// txd_r -
|
||||
//-------------------------------------------------
|
||||
|
||||
READ_LINE_MEMBER( abc77_device::txd_r )
|
||||
{
|
||||
return m_txd;
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// reset_w -
|
||||
//-------------------------------------------------
|
||||
|
||||
WRITE_LINE_MEMBER( abc77_device::reset_w )
|
||||
{
|
||||
if (m_reset && !state)
|
||||
{
|
||||
device_reset();
|
||||
}
|
||||
|
||||
m_reset = state;
|
||||
}
|
||||
|
@ -12,58 +12,22 @@
|
||||
#ifndef __ABC77__
|
||||
#define __ABC77__
|
||||
|
||||
|
||||
#include "emu.h"
|
||||
#include "cpu/mcs48/mcs48.h"
|
||||
#include "machine/abckb.h"
|
||||
#include "sound/discrete.h"
|
||||
#include "sound/speaker.h"
|
||||
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// MACROS / CONSTANTS
|
||||
//**************************************************************************
|
||||
|
||||
#define ABC77_TAG "abc77"
|
||||
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// INTERFACE CONFIGURATION MACROS
|
||||
//**************************************************************************
|
||||
|
||||
#define MCFG_ABC55_ADD(_config) \
|
||||
MCFG_DEVICE_ADD(ABC77_TAG, ABC55, 0) \
|
||||
MCFG_DEVICE_CONFIG(_config)
|
||||
|
||||
|
||||
#define MCFG_ABC77_ADD(_config) \
|
||||
MCFG_DEVICE_ADD(ABC77_TAG, ABC77, 0) \
|
||||
MCFG_DEVICE_CONFIG(_config)
|
||||
|
||||
|
||||
#define ABC77_INTERFACE(_name) \
|
||||
const abc77_interface (_name) =
|
||||
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// TYPE DEFINITIONS
|
||||
//**************************************************************************
|
||||
|
||||
// ======================> abc77_interface
|
||||
|
||||
struct abc77_interface
|
||||
{
|
||||
devcb_write_line m_out_clock_cb;
|
||||
devcb_write_line m_out_keydown_cb;
|
||||
};
|
||||
|
||||
|
||||
// ======================> abc77_device
|
||||
|
||||
class abc77_device : public device_t,
|
||||
public abc77_interface
|
||||
public abc_keyboard_interface
|
||||
{
|
||||
public:
|
||||
// construction/destruction
|
||||
@ -75,6 +39,10 @@ public:
|
||||
virtual machine_config_constructor device_mconfig_additions() const;
|
||||
virtual ioport_constructor device_input_ports() const;
|
||||
|
||||
// abc_keyboard_interface overrides
|
||||
virtual int rxd_r();
|
||||
virtual void txd_w(int state);
|
||||
|
||||
DECLARE_INPUT_CHANGED_MEMBER( keyboard_reset );
|
||||
|
||||
DECLARE_READ8_MEMBER( p1_r );
|
||||
@ -83,19 +51,17 @@ public:
|
||||
DECLARE_WRITE8_MEMBER( prog_w );
|
||||
DECLARE_WRITE8_MEMBER( j3_w );
|
||||
|
||||
DECLARE_WRITE_LINE_MEMBER( rxd_w );
|
||||
DECLARE_READ_LINE_MEMBER( txd_r );
|
||||
DECLARE_WRITE_LINE_MEMBER( reset_w );
|
||||
|
||||
protected:
|
||||
// device-level overrides
|
||||
virtual void device_start();
|
||||
virtual void device_reset();
|
||||
virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr);
|
||||
virtual void device_config_complete();
|
||||
|
||||
static const device_timer_id TIMER_SERIAL = 0;
|
||||
static const device_timer_id TIMER_RESET = 1;
|
||||
enum
|
||||
{
|
||||
TIMER_SERIAL,
|
||||
TIMER_RESET
|
||||
};
|
||||
|
||||
inline void serial_output(int state);
|
||||
inline void serial_clock();
|
||||
|
@ -88,28 +88,6 @@ XR22-050-3B Pinout
|
||||
const device_type ABC800_KEYBOARD = &device_creator<abc800_keyboard_device>;
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// device_config_complete - perform any
|
||||
// operations now that the configuration is
|
||||
// complete
|
||||
//-------------------------------------------------
|
||||
|
||||
void abc800_keyboard_device::device_config_complete()
|
||||
{
|
||||
// inherit a copy of the static data
|
||||
const abc800_keyboard_interface *intf = reinterpret_cast<const abc800_keyboard_interface *>(static_config());
|
||||
if (intf != NULL)
|
||||
*static_cast<abc800_keyboard_interface *>(this) = *intf;
|
||||
|
||||
// or initialize to defaults if none provided
|
||||
else
|
||||
{
|
||||
memset(&m_out_clock_cb, 0, sizeof(m_out_clock_cb));
|
||||
memset(&m_out_keydown_cb, 0, sizeof(m_out_keydown_cb));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// ROM( abc800_keyboard )
|
||||
//-------------------------------------------------
|
||||
@ -325,7 +303,7 @@ inline void abc800_keyboard_device::serial_clock()
|
||||
{
|
||||
m_clk = !m_clk;
|
||||
|
||||
m_out_clock_func(!m_clk);
|
||||
m_slot->trxc_w(!m_clk);
|
||||
}
|
||||
|
||||
|
||||
@ -339,7 +317,7 @@ inline void abc800_keyboard_device::key_down(int state)
|
||||
{
|
||||
m_keydown = state;
|
||||
|
||||
m_out_keydown_func(state);
|
||||
m_slot->keydown_w(state);
|
||||
}
|
||||
}
|
||||
|
||||
@ -355,6 +333,7 @@ inline void abc800_keyboard_device::key_down(int state)
|
||||
|
||||
abc800_keyboard_device::abc800_keyboard_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
|
||||
: device_t(mconfig, ABC800_KEYBOARD, "ABC-800 Keyboard", tag, owner, clock, "abc800kb", __FILE__),
|
||||
abc_keyboard_interface(mconfig, *this),
|
||||
m_maincpu(*this, I8048_TAG),
|
||||
m_x0(*this, "X0"),
|
||||
m_x1(*this, "X1"),
|
||||
@ -387,10 +366,6 @@ void abc800_keyboard_device::device_start()
|
||||
m_serial_timer = timer_alloc();
|
||||
m_serial_timer->adjust(attotime::from_hz(XTAL_5_9904MHz/(3*5)/20), 0, attotime::from_hz(XTAL_5_9904MHz/(3*5)/20)); // ???
|
||||
|
||||
// resolve callbacks
|
||||
m_out_clock_func.resolve(m_out_clock_cb, *this);
|
||||
m_out_keydown_func.resolve(m_out_keydown_cb, *this);
|
||||
|
||||
// state saving
|
||||
save_item(NAME(m_row));
|
||||
save_item(NAME(m_clk));
|
||||
@ -420,22 +395,22 @@ void abc800_keyboard_device::device_timer(emu_timer &timer, device_timer_id id,
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// rxd_w - keyboard receive data write
|
||||
// rxd_r -
|
||||
//-------------------------------------------------
|
||||
|
||||
WRITE_LINE_MEMBER( abc800_keyboard_device::rxd_w )
|
||||
int abc800_keyboard_device::rxd_r()
|
||||
{
|
||||
m_maincpu->set_input_line(MCS48_INPUT_IRQ, state ? CLEAR_LINE : ASSERT_LINE);
|
||||
return m_txd;
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// txd_r - keyboard transmit data read
|
||||
// txd_w -
|
||||
//-------------------------------------------------
|
||||
|
||||
READ_LINE_MEMBER( abc800_keyboard_device::txd_r )
|
||||
void abc800_keyboard_device::txd_w(int state)
|
||||
{
|
||||
return m_txd;
|
||||
m_maincpu->set_input_line(MCS48_INPUT_IRQ, state ? CLEAR_LINE : ASSERT_LINE);
|
||||
}
|
||||
|
||||
|
||||
|
@ -15,49 +15,19 @@
|
||||
|
||||
#include "emu.h"
|
||||
#include "cpu/mcs48/mcs48.h"
|
||||
#include "machine/abckb.h"
|
||||
#include "sound/discrete.h"
|
||||
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// MACROS / CONSTANTS
|
||||
//**************************************************************************
|
||||
|
||||
#define ABC800_KEYBOARD_TAG "abc800kb"
|
||||
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// INTERFACE CONFIGURATION MACROS
|
||||
//**************************************************************************
|
||||
|
||||
#define MCFG_ABC800_KEYBOARD_ADD(_config) \
|
||||
MCFG_DEVICE_ADD(ABC800_KEYBOARD_TAG, ABC800_KEYBOARD, 0) \
|
||||
MCFG_DEVICE_CONFIG(_config)
|
||||
|
||||
|
||||
#define ABC800_KEYBOARD_INTERFACE(_name) \
|
||||
const abc800_keyboard_interface (_name) =
|
||||
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// TYPE DEFINITIONS
|
||||
//**************************************************************************
|
||||
|
||||
// ======================> abc800_keyboard_interface
|
||||
|
||||
struct abc800_keyboard_interface
|
||||
{
|
||||
devcb_write_line m_out_clock_cb;
|
||||
devcb_write_line m_out_keydown_cb;
|
||||
};
|
||||
|
||||
|
||||
// ======================> abc800_keyboard_device
|
||||
|
||||
class abc800_keyboard_device : public device_t,
|
||||
public abc800_keyboard_interface
|
||||
public abc_keyboard_interface
|
||||
{
|
||||
public:
|
||||
// construction/destruction
|
||||
@ -68,8 +38,9 @@ public:
|
||||
virtual machine_config_constructor device_mconfig_additions() const;
|
||||
virtual ioport_constructor device_input_ports() const;
|
||||
|
||||
DECLARE_WRITE_LINE_MEMBER( rxd_w );
|
||||
DECLARE_READ_LINE_MEMBER( txd_r );
|
||||
// abc_keyboard_interface overrides
|
||||
virtual int rxd_r();
|
||||
virtual void txd_w(int state);
|
||||
|
||||
// not really public
|
||||
DECLARE_READ8_MEMBER( kb_p1_r );
|
||||
@ -79,7 +50,6 @@ public:
|
||||
|
||||
protected:
|
||||
// device-level overrides
|
||||
virtual void device_config_complete();
|
||||
virtual void device_start();
|
||||
virtual void device_reset();
|
||||
virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr);
|
||||
|
@ -91,27 +91,6 @@ Notes:
|
||||
const device_type ABC80_KEYBOARD = &device_creator<abc80_keyboard_device>;
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// device_config_complete - perform any
|
||||
// operations now that the configuration is
|
||||
// complete
|
||||
//-------------------------------------------------
|
||||
|
||||
void abc80_keyboard_device::device_config_complete()
|
||||
{
|
||||
// inherit a copy of the static data
|
||||
const abc80_keyboard_interface *intf = reinterpret_cast<const abc80_keyboard_interface *>(static_config());
|
||||
if (intf != NULL)
|
||||
*static_cast<abc80_keyboard_interface *>(this) = *intf;
|
||||
|
||||
// or initialize to defaults if none provided
|
||||
else
|
||||
{
|
||||
memset(&m_out_keydown_cb, 0, sizeof(m_out_keydown_cb));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// ROM( abc80_keyboard )
|
||||
//-------------------------------------------------
|
||||
@ -191,6 +170,7 @@ ioport_constructor abc80_keyboard_device::device_input_ports() const
|
||||
|
||||
abc80_keyboard_device::abc80_keyboard_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
|
||||
: device_t(mconfig, ABC80_KEYBOARD, "ABC-80 Keyboard", tag, owner, clock, "abc80kb", __FILE__),
|
||||
m_write_keydown(*this),
|
||||
m_maincpu(*this, I8048_TAG)
|
||||
{
|
||||
}
|
||||
@ -203,7 +183,7 @@ abc80_keyboard_device::abc80_keyboard_device(const machine_config &mconfig, cons
|
||||
void abc80_keyboard_device::device_start()
|
||||
{
|
||||
// resolve callbacks
|
||||
m_out_keydown_func.resolve(m_out_keydown_cb, *this);
|
||||
m_write_keydown.resolve_safe();
|
||||
}
|
||||
|
||||
|
||||
|
@ -12,7 +12,6 @@
|
||||
#ifndef __ABC80_KEYBOARD__
|
||||
#define __ABC80_KEYBOARD__
|
||||
|
||||
|
||||
#include "emu.h"
|
||||
#include "cpu/mcs48/mcs48.h"
|
||||
|
||||
@ -30,13 +29,9 @@
|
||||
// INTERFACE CONFIGURATION MACROS
|
||||
//**************************************************************************
|
||||
|
||||
#define MCFG_ABC80_KEYBOARD_ADD(_config) \
|
||||
#define MCFG_ABC80_KEYBOARD_ADD(_keydown) \
|
||||
MCFG_DEVICE_ADD(ABC80_KEYBOARD_TAG, ABC80_KEYBOARD, 0) \
|
||||
MCFG_DEVICE_CONFIG(_config)
|
||||
|
||||
|
||||
#define ABC80_KEYBOARD_INTERFACE(_name) \
|
||||
const abc80_keyboard_interface (_name) =
|
||||
downcast<abc80_keyboard_device *>(device)->set_callback(DEVCB2_##_keydown);
|
||||
|
||||
|
||||
|
||||
@ -44,23 +39,16 @@
|
||||
// TYPE DEFINITIONS
|
||||
//**************************************************************************
|
||||
|
||||
// ======================> abc80_keyboard_interface
|
||||
|
||||
struct abc80_keyboard_interface
|
||||
{
|
||||
devcb_write_line m_out_keydown_cb;
|
||||
};
|
||||
|
||||
|
||||
// ======================> abc80_keyboard_device
|
||||
|
||||
class abc80_keyboard_device : public device_t,
|
||||
public abc80_keyboard_interface
|
||||
class abc80_keyboard_device : public device_t
|
||||
{
|
||||
public:
|
||||
// construction/destruction
|
||||
abc80_keyboard_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
|
||||
|
||||
template<class _keydown> void set_callback(_keydown keydown) { m_write_keydown.set_callback(keydown); }
|
||||
|
||||
// optional information overrides
|
||||
virtual const rom_entry *device_rom_region() const;
|
||||
virtual machine_config_constructor device_mconfig_additions() const;
|
||||
@ -70,12 +58,11 @@ public:
|
||||
|
||||
protected:
|
||||
// device-level overrides
|
||||
virtual void device_config_complete();
|
||||
virtual void device_start();
|
||||
virtual void device_reset();
|
||||
|
||||
private:
|
||||
devcb_resolved_write_line m_out_keydown_func;
|
||||
devcb2_write_line m_write_keydown;
|
||||
|
||||
required_device<cpu_device> m_maincpu;
|
||||
};
|
||||
|
@ -74,28 +74,6 @@ Notes:
|
||||
const device_type ABC99 = &device_creator<abc99_device>;
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// device_config_complete - perform any
|
||||
// operations now that the configuration is
|
||||
// complete
|
||||
//-------------------------------------------------
|
||||
|
||||
void abc99_device::device_config_complete()
|
||||
{
|
||||
// inherit a copy of the static data
|
||||
const abc99_interface *intf = reinterpret_cast<const abc99_interface *>(static_config());
|
||||
if (intf != NULL)
|
||||
*static_cast<abc99_interface *>(this) = *intf;
|
||||
|
||||
// or initialize to defaults if none provided
|
||||
else
|
||||
{
|
||||
memset(&m_out_clock_cb, 0, sizeof(m_out_clock_cb));
|
||||
memset(&m_out_keydown_cb, 0, sizeof(m_out_keydown_cb));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// ROM( abc99 )
|
||||
//-------------------------------------------------
|
||||
@ -456,8 +434,8 @@ inline void abc99_device::serial_input()
|
||||
|
||||
inline void abc99_device::serial_clock()
|
||||
{
|
||||
m_out_clock_func(1);
|
||||
m_out_clock_func(0);
|
||||
m_slot->trxc_w(1);
|
||||
m_slot->trxc_w(0);
|
||||
}
|
||||
|
||||
|
||||
@ -469,7 +447,7 @@ inline void abc99_device::key_down(int state)
|
||||
{
|
||||
if (m_keydown != state)
|
||||
{
|
||||
m_out_keydown_func(state);
|
||||
m_slot->keydown_w(state);
|
||||
m_keydown = state;
|
||||
}
|
||||
}
|
||||
@ -495,6 +473,7 @@ inline void abc99_device::scan_mouse()
|
||||
|
||||
abc99_device::abc99_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
|
||||
: device_t(mconfig, ABC99, "Luxor ABC 99", tag, owner, clock, "abc99", __FILE__),
|
||||
abc_keyboard_interface(mconfig, *this),
|
||||
m_maincpu(*this, I8035_Z2_TAG),
|
||||
m_mousecpu(*this, I8035_Z5_TAG),
|
||||
m_speaker(*this, "speaker"),
|
||||
@ -525,10 +504,6 @@ void abc99_device::device_start()
|
||||
|
||||
m_mouse_timer = timer_alloc(TIMER_MOUSE);
|
||||
|
||||
// resolve callbacks
|
||||
m_out_clock_func.resolve(m_out_clock_cb, *this);
|
||||
m_out_keydown_func.resolve(m_out_keydown_cb, *this);
|
||||
|
||||
// state saving
|
||||
save_item(NAME(m_si));
|
||||
save_item(NAME(m_si_en));
|
||||
@ -573,6 +548,30 @@ void abc99_device::device_timer(emu_timer &timer, device_timer_id id, int param,
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// rxd_r -
|
||||
//-------------------------------------------------
|
||||
|
||||
int abc99_device::rxd_r()
|
||||
{
|
||||
return m_so_z2 && m_so_z5;
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// txd_w -
|
||||
//-------------------------------------------------
|
||||
|
||||
void abc99_device::txd_w(int state)
|
||||
{
|
||||
if (m_si != state)
|
||||
{
|
||||
m_si = state;
|
||||
serial_input();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// z2_bus_w -
|
||||
//-------------------------------------------------
|
||||
@ -771,27 +770,3 @@ READ8_MEMBER( abc99_device::z5_t1_r )
|
||||
{
|
||||
return m_t1_z5;
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// rxd_w -
|
||||
//-------------------------------------------------
|
||||
|
||||
WRITE_LINE_MEMBER( abc99_device::rxd_w )
|
||||
{
|
||||
if (m_si != state)
|
||||
{
|
||||
m_si = state;
|
||||
serial_input();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// txd_r -
|
||||
//-------------------------------------------------
|
||||
|
||||
READ_LINE_MEMBER( abc99_device::txd_r )
|
||||
{
|
||||
return m_so_z2 && m_so_z5;
|
||||
}
|
||||
|
@ -14,48 +14,19 @@
|
||||
|
||||
#include "emu.h"
|
||||
#include "cpu/mcs48/mcs48.h"
|
||||
#include "machine/abckb.h"
|
||||
#include "sound/speaker.h"
|
||||
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// MACROS / CONSTANTS
|
||||
//**************************************************************************
|
||||
|
||||
#define ABC99_TAG "abc99"
|
||||
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// INTERFACE CONFIGURATION MACROS
|
||||
//**************************************************************************
|
||||
|
||||
#define MCFG_ABC99_ADD(_config) \
|
||||
MCFG_DEVICE_ADD(ABC99_TAG, ABC99, 0) \
|
||||
MCFG_DEVICE_CONFIG(_config)
|
||||
|
||||
|
||||
#define ABC99_INTERFACE(_name) \
|
||||
const abc99_interface (_name) =
|
||||
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// TYPE DEFINITIONS
|
||||
//**************************************************************************
|
||||
|
||||
// ======================> abc99_interface
|
||||
|
||||
struct abc99_interface
|
||||
{
|
||||
devcb_write_line m_out_clock_cb;
|
||||
devcb_write_line m_out_keydown_cb;
|
||||
};
|
||||
|
||||
// ======================> abc99_device
|
||||
|
||||
class abc99_device : public device_t,
|
||||
public abc99_interface
|
||||
public abc_keyboard_interface
|
||||
{
|
||||
public:
|
||||
// construction/destruction
|
||||
@ -66,6 +37,10 @@ public:
|
||||
virtual machine_config_constructor device_mconfig_additions() const;
|
||||
virtual ioport_constructor device_input_ports() const;
|
||||
|
||||
// abc_keyboard_interface overrides
|
||||
virtual int rxd_r();
|
||||
virtual void txd_w(int state);
|
||||
|
||||
DECLARE_INPUT_CHANGED_MEMBER( keyboard_reset );
|
||||
|
||||
DECLARE_WRITE8_MEMBER( z2_led_w );
|
||||
@ -77,15 +52,11 @@ public:
|
||||
DECLARE_WRITE8_MEMBER( z5_p2_w );
|
||||
DECLARE_READ8_MEMBER( z5_t1_r );
|
||||
|
||||
DECLARE_WRITE_LINE_MEMBER( rxd_w );
|
||||
DECLARE_READ_LINE_MEMBER( txd_r );
|
||||
|
||||
protected:
|
||||
// device-level overrides
|
||||
virtual void device_start();
|
||||
virtual void device_reset();
|
||||
virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr);
|
||||
virtual void device_config_complete();
|
||||
|
||||
private:
|
||||
enum
|
||||
|
140
src/mess/machine/abckb.c
Normal file
140
src/mess/machine/abckb.c
Normal file
@ -0,0 +1,140 @@
|
||||
/**********************************************************************
|
||||
|
||||
Luxor ABC 800/802/806/1600 keyboard port emulation
|
||||
|
||||
Copyright MESS Team.
|
||||
Visit http://mamedev.org for licensing and usage restrictions.
|
||||
|
||||
**********************************************************************/
|
||||
|
||||
#include "abckb.h"
|
||||
|
||||
// supported devices
|
||||
#include "machine/abc800kb.h"
|
||||
#include "machine/abc77.h"
|
||||
#include "machine/abc99.h"
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// DEVICE DEFINITIONS
|
||||
//**************************************************************************
|
||||
|
||||
// device type definition
|
||||
const device_type ABC_KEYBOARD_PORT = &device_creator<abc_keyboard_port_device>;
|
||||
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// CARD INTERFACE
|
||||
//**************************************************************************
|
||||
|
||||
//-------------------------------------------------
|
||||
// abc_keyboard_interface - constructor
|
||||
//-------------------------------------------------
|
||||
|
||||
abc_keyboard_interface::abc_keyboard_interface(const machine_config &mconfig, device_t &device)
|
||||
: device_slot_card_interface(mconfig,device)
|
||||
{
|
||||
m_slot = dynamic_cast<abc_keyboard_port_device *>(device.owner());
|
||||
}
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// LIVE DEVICE
|
||||
//**************************************************************************
|
||||
|
||||
//-------------------------------------------------
|
||||
// abc_keyboard_port_device - constructor
|
||||
//-------------------------------------------------
|
||||
|
||||
abc_keyboard_port_device::abc_keyboard_port_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) :
|
||||
device_t(mconfig, ABC_KEYBOARD_PORT, "Luxor ABC keyboard port", tag, owner, clock),
|
||||
device_slot_interface(mconfig, *this),
|
||||
m_write_trxc(*this),
|
||||
m_write_keydown(*this)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// device_start - device-specific startup
|
||||
//-------------------------------------------------
|
||||
|
||||
void abc_keyboard_port_device::device_start()
|
||||
{
|
||||
m_card = dynamic_cast<abc_keyboard_interface *>(get_card_device());
|
||||
|
||||
// resolve callbacks
|
||||
m_write_trxc.resolve_safe();
|
||||
m_write_keydown.resolve_safe();
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// device_reset - device-specific reset
|
||||
//-------------------------------------------------
|
||||
|
||||
void abc_keyboard_port_device::device_reset()
|
||||
{
|
||||
if (m_card != NULL)
|
||||
get_card_device()->reset();
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// rxd_r -
|
||||
//-------------------------------------------------
|
||||
|
||||
READ_LINE_MEMBER( abc_keyboard_port_device::rxd_r )
|
||||
{
|
||||
int state = 1;
|
||||
|
||||
if (m_card != NULL)
|
||||
state = m_card->rxd_r();
|
||||
|
||||
return state;
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// txd_w -
|
||||
//-------------------------------------------------
|
||||
|
||||
WRITE_LINE_MEMBER( abc_keyboard_port_device::txd_w )
|
||||
{
|
||||
if (m_card != NULL)
|
||||
m_card->txd_w(state);
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// trxc_w -
|
||||
//-------------------------------------------------
|
||||
|
||||
WRITE_LINE_MEMBER( abc_keyboard_port_device::trxc_w )
|
||||
{
|
||||
m_write_trxc(state);
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// keydown_w -
|
||||
//-------------------------------------------------
|
||||
|
||||
WRITE_LINE_MEMBER( abc_keyboard_port_device::keydown_w )
|
||||
{
|
||||
m_write_keydown(state);
|
||||
}
|
||||
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// SLOT INTERFACE
|
||||
//**************************************************************************
|
||||
|
||||
SLOT_INTERFACE_START( abc_keyboard_devices )
|
||||
SLOT_INTERFACE("abc800", ABC800_KEYBOARD)
|
||||
SLOT_INTERFACE("abc55", ABC55)
|
||||
SLOT_INTERFACE("abc77", ABC77)
|
||||
SLOT_INTERFACE("abc99", ABC99)
|
||||
SLOT_INTERFACE_END
|
99
src/mess/machine/abckb.h
Normal file
99
src/mess/machine/abckb.h
Normal file
@ -0,0 +1,99 @@
|
||||
/**********************************************************************
|
||||
|
||||
Luxor ABC 800/802/806/1600 keyboard port emulation
|
||||
|
||||
Copyright MESS Team.
|
||||
Visit http://mamedev.org for licensing and usage restrictions.
|
||||
|
||||
**********************************************************************/
|
||||
|
||||
#pragma once
|
||||
|
||||
#ifndef __ABC_KEYBOARD_PORT__
|
||||
#define __ABC_KEYBOARD_PORT__
|
||||
|
||||
#include "emu.h"
|
||||
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// MACROS / CONSTANTS
|
||||
//**************************************************************************
|
||||
|
||||
#define ABC_KEYBOARD_PORT_TAG "kb"
|
||||
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// INTERFACE CONFIGURATION MACROS
|
||||
//**************************************************************************
|
||||
|
||||
#define MCFG_ABC_KEYBOARD_PORT_ADD(_def_slot, _trxc, _keydown) \
|
||||
MCFG_DEVICE_ADD(ABC_KEYBOARD_PORT_TAG, ABC_KEYBOARD_PORT, 0) \
|
||||
MCFG_DEVICE_SLOT_INTERFACE(abc_keyboard_devices, _def_slot, false) \
|
||||
downcast<abc_keyboard_port_device *>(device)->set_callbacks(DEVCB2_##_trxc, DEVCB2_##_keydown);
|
||||
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// TYPE DEFINITIONS
|
||||
//**************************************************************************
|
||||
|
||||
class abc_keyboard_interface;
|
||||
|
||||
class abc_keyboard_port_device : public device_t,
|
||||
public device_slot_interface
|
||||
{
|
||||
public:
|
||||
// construction/destruction
|
||||
abc_keyboard_port_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
|
||||
|
||||
template<class _trxc, class _keydown> void set_callbacks(_trxc trxc, _keydown keydown) {
|
||||
m_write_trxc.set_callback(trxc);
|
||||
m_write_keydown.set_callback(keydown);
|
||||
}
|
||||
|
||||
// computer interface
|
||||
DECLARE_READ_LINE_MEMBER( rxd_r );
|
||||
DECLARE_WRITE_LINE_MEMBER( txd_w );
|
||||
|
||||
// peripheral interface
|
||||
DECLARE_WRITE_LINE_MEMBER( trxc_w );
|
||||
DECLARE_WRITE_LINE_MEMBER( keydown_w );
|
||||
|
||||
protected:
|
||||
// device-level overrides
|
||||
virtual void device_start();
|
||||
virtual void device_reset();
|
||||
|
||||
devcb2_write_line m_write_trxc;
|
||||
devcb2_write_line m_write_keydown;
|
||||
|
||||
abc_keyboard_interface *m_card;
|
||||
};
|
||||
|
||||
|
||||
class abc_keyboard_interface : public device_slot_card_interface
|
||||
{
|
||||
public:
|
||||
// construction/destruction
|
||||
abc_keyboard_interface(const machine_config &mconfig, device_t &device);
|
||||
|
||||
virtual int rxd_r() { return 1; };
|
||||
virtual void txd_w(int state) { };
|
||||
|
||||
protected:
|
||||
abc_keyboard_port_device *m_slot;
|
||||
};
|
||||
|
||||
|
||||
// device type definition
|
||||
extern const device_type ABC_KEYBOARD_PORT;
|
||||
|
||||
|
||||
// supported devices
|
||||
SLOT_INTERFACE_EXTERN( abc_keyboard_devices );
|
||||
|
||||
|
||||
|
||||
#endif
|
@ -1293,6 +1293,7 @@ $(MESSOBJ)/luxor.a: \
|
||||
$(MESS_MACHINE)/abc_slutprov.o \
|
||||
$(MESS_MACHINE)/abc_turbo.o \
|
||||
$(MESS_MACHINE)/abc_xebec.o \
|
||||
$(MESS_MACHINE)/abckb.o \
|
||||
$(MESS_MACHINE)/abc77.o \
|
||||
$(MESS_MACHINE)/abc99.o \
|
||||
$(MESS_MACHINE)/lux10828.o \
|
||||
|
Loading…
Reference in New Issue
Block a user