(MESS) victor9k: Keyboard WIP. (nw)

This commit is contained in:
Curt Coder 2014-12-11 19:50:37 +02:00
parent af46cb98f9
commit e7ea0ac7a5
3 changed files with 75 additions and 80 deletions

View File

@ -94,7 +94,7 @@ public:
required_device<hc55516_device> m_cvsd;
required_device<mc6845_device> m_crtc;
required_device<ram_device> m_ram;
required_device<victor9k_keyboard_device> m_kb;
required_device<victor_9000_keyboard_t> m_kb;
required_device<victor_9000_fdc_t> m_fdc;
required_device<centronics_device> m_centronics;
required_device<rs232_port_device> m_rs232a;

View File

@ -345,7 +345,9 @@ Y11 104 103 102 101 100 99 98 97
// MACROS / CONSTANTS
//**************************************************************************
#define I8021_TAG "z3"
#define I8021_TAG "z3"
#define LOG 0
@ -353,7 +355,7 @@ Y11 104 103 102 101 100 99 98 97
// DEVICE DEFINITIONS
//**************************************************************************
const device_type VICTOR9K_KEYBOARD = &device_creator<victor9k_keyboard_device>;
const device_type VICTOR9K_KEYBOARD = &device_creator<victor_9000_keyboard_t>;
//-------------------------------------------------
@ -370,7 +372,7 @@ ROM_END
// rom_region - device-specific ROM region
//-------------------------------------------------
const rom_entry *victor9k_keyboard_device::device_rom_region() const
const rom_entry *victor_9000_keyboard_t::device_rom_region() const
{
return ROM_NAME( victor9k_keyboard );
}
@ -380,7 +382,7 @@ const rom_entry *victor9k_keyboard_device::device_rom_region() const
// ADDRESS_MAP( kb_io )
//-------------------------------------------------
static ADDRESS_MAP_START( victor9k_keyboard_io, AS_IO, 8, victor9k_keyboard_device )
static ADDRESS_MAP_START( victor9k_keyboard_io, AS_IO, 8, victor_9000_keyboard_t )
AM_RANGE(MCS48_PORT_P1, MCS48_PORT_P1) AM_READWRITE(kb_p1_r, kb_p1_w)
AM_RANGE(MCS48_PORT_P2, MCS48_PORT_P2) AM_WRITE(kb_p2_w)
AM_RANGE(MCS48_PORT_T1, MCS48_PORT_T1) AM_READ(kb_t1_r)
@ -402,7 +404,7 @@ MACHINE_CONFIG_END
// machine configurations
//-------------------------------------------------
machine_config_constructor victor9k_keyboard_device::device_mconfig_additions() const
machine_config_constructor victor_9000_keyboard_t::device_mconfig_additions() const
{
return MACHINE_CONFIG_NAME( victor9k_keyboard );
}
@ -474,14 +476,14 @@ INPUT_PORTS_START( victor9k_keyboard )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD )
PORT_START("Y6")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Q)
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_W)
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_E)
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_R)
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_T)
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Y)
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_U)
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_I)
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD )
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD )
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD )
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD )
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD )
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD )
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD )
PORT_START("Y7")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD )
@ -549,7 +551,7 @@ INPUT_PORTS_END
// input_ports - device-specific input ports
//-------------------------------------------------
ioport_constructor victor9k_keyboard_device::device_input_ports() const
ioport_constructor victor_9000_keyboard_t::device_input_ports() const
{
return INPUT_PORTS_NAME( victor9k_keyboard );
}
@ -561,10 +563,10 @@ ioport_constructor victor9k_keyboard_device::device_input_ports() const
//**************************************************************************
//-------------------------------------------------
// victor9k_keyboard_device - constructor
// victor_9000_keyboard_t - constructor
//-------------------------------------------------
victor9k_keyboard_device::victor9k_keyboard_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) :
victor_9000_keyboard_t::victor_9000_keyboard_t(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) :
device_t(mconfig, VICTOR9K_KEYBOARD, "Victor 9000 Keyboard", tag, owner, clock, "victor9kb", __FILE__),
m_maincpu(*this, I8021_TAG),
m_y0(*this, "Y0"),
@ -580,8 +582,8 @@ victor9k_keyboard_device::victor9k_keyboard_device(const machine_config &mconfig
m_ya(*this, "YA"),
m_yb(*this, "YB"),
m_yc(*this, "YC"),
m_kbrdy_handler(*this),
m_kbdata_handler(*this),
m_kbrdy_cb(*this),
m_kbdata_cb(*this),
m_y(0),
m_kbrdy(-1),
m_kbdata(-1),
@ -594,37 +596,32 @@ victor9k_keyboard_device::victor9k_keyboard_device(const machine_config &mconfig
// device_start - device-specific startup
//-------------------------------------------------
void victor9k_keyboard_device::device_start()
void victor_9000_keyboard_t::device_start()
{
// resolve callbacks
m_kbrdy_handler.resolve_safe();
m_kbdata_handler.resolve_safe();
m_kbrdy_cb.resolve_safe();
m_kbdata_cb.resolve_safe();
// state saving
save_item(NAME(m_p1));
save_item(NAME(m_y));
save_item(NAME(m_stb));
save_item(NAME(m_y12));
save_item(NAME(m_kbrdy));
save_item(NAME(m_kbdata));
save_item(NAME(m_kback));
}
//-------------------------------------------------
// device_reset - device-specific reset
//-------------------------------------------------
void victor9k_keyboard_device::device_reset()
{
}
//-------------------------------------------------
// kback_w -
//-------------------------------------------------
WRITE_LINE_MEMBER( victor9k_keyboard_device::kback_w )
WRITE_LINE_MEMBER( victor_9000_keyboard_t::kback_w )
{
//logerror("KBACK %u\n", state);
m_kback = state;
if (LOG) logerror("KBACK %u\n", state);
m_kback = !state;
}
@ -632,7 +629,7 @@ WRITE_LINE_MEMBER( victor9k_keyboard_device::kback_w )
// kb_p1_r -
//-------------------------------------------------
READ8_MEMBER( victor9k_keyboard_device::kb_p1_r )
READ8_MEMBER( victor_9000_keyboard_t::kb_p1_r )
{
UINT8 data = 0xff;
@ -650,7 +647,11 @@ READ8_MEMBER( victor9k_keyboard_device::kb_p1_r )
case 9: data &= m_y9->read(); break;
case 0xa: data &= m_ya->read(); break;
case 0xb: data &= m_yb->read(); break;
case 0xc: data &= m_yc->read(); break;
}
if (!m_y12)
{
data &= m_yc->read();
}
return data;
@ -661,14 +662,9 @@ READ8_MEMBER( victor9k_keyboard_device::kb_p1_r )
// kb_p1_w -
//-------------------------------------------------
WRITE8_MEMBER( victor9k_keyboard_device::kb_p1_w )
WRITE8_MEMBER( victor_9000_keyboard_t::kb_p1_w )
{
if ((data & 0xf0) == 0x20)
{
m_y = data & 0x0f;
}
//logerror("%s P1 %02x\n", machine().describe_context(), data);
m_p1 = data;
}
@ -676,36 +672,33 @@ WRITE8_MEMBER( victor9k_keyboard_device::kb_p1_w )
// kb_p2_w -
//-------------------------------------------------
WRITE8_MEMBER( victor9k_keyboard_device::kb_p2_w )
WRITE8_MEMBER( victor_9000_keyboard_t::kb_p2_w )
{
/*
bit description
P20 ?
P20 22-908 CLR, 22-950 STB
P21 KBRDY
P22 ?
P22 Y12
P23 KBDATA
*/
int kbrdy = BIT(data, 1);
if (m_kbrdy != kbrdy)
// keyboard rows 0-11
if (!BIT(data, 0))
{
m_kbrdy = kbrdy;
m_kbrdy_handler(m_kbrdy);
m_y = m_p1 & 0x0f;
}
int kbdata = BIT(data, 3);
// keyboard row 12
m_y12 = BIT(data, 2);
if (m_kbdata != kbdata)
{
m_kbdata = kbdata;
m_kbdata_handler(m_kbdata);
}
// keyboard ready
m_kbrdy_cb(BIT(data, 1));
//logerror("%s P2 %01x\n", machine().describe_context(), data&0x0f);
// keyboard data
m_kbdata_cb(BIT(data, 3));
}
@ -713,7 +706,7 @@ WRITE8_MEMBER( victor9k_keyboard_device::kb_p2_w )
// kb_t1_r -
//-------------------------------------------------
READ8_MEMBER( victor9k_keyboard_device::kb_t1_r )
READ8_MEMBER( victor_9000_keyboard_t::kb_t1_r )
{
return m_kback;
}

View File

@ -25,26 +25,26 @@
//**************************************************************************
#define MCFG_VICTOR9K_KBRDY_HANDLER(_devcb) \
devcb = &victor9k_keyboard_device::set_kbrdy_handler(*device, DEVCB_##_devcb);
devcb = &victor_9000_keyboard_t::set_kbrdy_cb(*device, DEVCB_##_devcb);
#define MCFG_VICTOR9K_KBDATA_HANDLER(_devcb) \
devcb = &victor9k_keyboard_device::set_kbdata_handler(*device, DEVCB_##_devcb);
devcb = &victor_9000_keyboard_t::set_kbdata_cb(*device, DEVCB_##_devcb);
//**************************************************************************
// TYPE DEFINITIONS
//**************************************************************************
// ======================> victor9k_keyboard_device
// ======================> victor_9000_keyboard_t
class victor9k_keyboard_device : public device_t
class victor_9000_keyboard_t : public device_t
{
public:
// construction/destruction
victor9k_keyboard_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
victor_9000_keyboard_t(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
template<class _Object> static devcb_base &set_kbrdy_handler(device_t &device, _Object object) { return downcast<victor9k_keyboard_device &>(device).m_kbrdy_handler.set_callback(object); }
template<class _Object> static devcb_base &set_kbdata_handler(device_t &device, _Object object) { return downcast<victor9k_keyboard_device &>(device).m_kbdata_handler.set_callback(object); }
template<class _Object> static devcb_base &set_kbrdy_cb(device_t &device, _Object object) { return downcast<victor_9000_keyboard_t &>(device).m_kbrdy_cb.set_callback(object); }
template<class _Object> static devcb_base &set_kbdata_cb(device_t &device, _Object object) { return downcast<victor_9000_keyboard_t &>(device).m_kbdata_cb.set_callback(object); }
// optional information overrides
virtual const rom_entry *device_rom_region() const;
@ -62,7 +62,6 @@ public:
protected:
// device-level overrides
virtual void device_start();
virtual void device_reset();
private:
required_device<cpu_device> m_maincpu;
@ -80,10 +79,13 @@ private:
required_ioport m_yb;
required_ioport m_yc;
devcb_write_line m_kbrdy_handler;
devcb_write_line m_kbdata_handler;
devcb_write_line m_kbrdy_cb;
devcb_write_line m_kbdata_cb;
UINT8 m_p1;
UINT8 m_y;
int m_stb;
int m_y12;
int m_kbrdy;
int m_kbdata;
int m_kback;