(MESS) ibm5150: Keyboard WIP. (nw)

This commit is contained in:
Curt Coder 2013-06-21 21:33:10 +00:00
parent 3563690821
commit 59f29172c6
5 changed files with 93 additions and 10 deletions

View File

@ -87,6 +87,9 @@ enum
MACROS
***************************************************************************/
#define MCS48_LC_CLOCK(_L, _C) \
(1 / (2 * 3.14159265358979323846 * sqrt(_L * _C)))
#define MCS48_ALE_CLOCK(_clock) \
attotime::from_hz(_clock/(3*5))

View File

@ -8,6 +8,9 @@
#define CAP_U(cap) ((double)(cap) * 1e-6)
#define CAP_N(cap) ((double)(cap) * 1e-9)
#define CAP_P(cap) ((double)(cap) * 1e-12)
#define IND_U(ind) ((double)(ind) * 1e-6)
#define IND_N(ind) ((double)(ind) * 1e-9)
#define IND_P(ind) ((double)(ind) * 1e-12)
/* vin --/\r1/\-- out --/\r2/\-- gnd */
#define RES_VOLTAGE_DIVIDER(r1, r2) ((double)(r2) / ((double)(r1) + (double)(r2)))

View File

@ -1,6 +1,6 @@
/**********************************************************************
IBM PC/XT 5150/5160 83-key keyboard emulation
IBM Model F PC/XT 5150/5160 83-key keyboard emulation
Copyright MESS Team.
Visit http://mamedev.org for licensing and usage restrictions.
@ -33,6 +33,8 @@ const device_type PC_KBD_IBM_PC_XT_83 = &device_creator<ibm_pc_xt_83_keyboard_de
ROM_START( ibm_pc_xt_83_keyboard )
ROM_REGION( 0x400, I8048_TAG, 0 )
/*
Keyboard Part No. 1501105
MOI 74 01
PN 4584751
GX 344231
@ -61,6 +63,10 @@ const rom_entry *ibm_pc_xt_83_keyboard_device::device_rom_region() const
//-------------------------------------------------
static ADDRESS_MAP_START( ibm_pc_xt_83_keyboard_io, AS_IO, 8, ibm_pc_xt_83_keyboard_device )
AM_RANGE(MCS48_PORT_BUS, MCS48_PORT_BUS) AM_WRITE(bus_w)
AM_RANGE(MCS48_PORT_P1, MCS48_PORT_P1) AM_READ(p1_r) AM_WRITENOP
AM_RANGE(MCS48_PORT_P2, MCS48_PORT_P2) AM_WRITE(p2_w)
AM_RANGE(MCS48_PORT_T1, MCS48_PORT_T1) AM_READ(t1_r)
ADDRESS_MAP_END
@ -69,7 +75,7 @@ ADDRESS_MAP_END
//-------------------------------------------------
static MACHINE_CONFIG_FRAGMENT( ibm_pc_xt_83_keyboard )
MCFG_CPU_ADD(I8048_TAG, I8048, 4000000)
MCFG_CPU_ADD(I8048_TAG, I8048, MCS48_LC_CLOCK(IND_U(47), CAP_P(20)))
MCFG_CPU_IO_MAP(ibm_pc_xt_83_keyboard_io)
MACHINE_CONFIG_END
@ -126,6 +132,9 @@ ibm_pc_xt_83_keyboard_device::ibm_pc_xt_83_keyboard_device(const machine_config
void ibm_pc_xt_83_keyboard_device::device_start()
{
// state saving
save_item(NAME(m_cnt));
save_item(NAME(m_key_depressed));
}
@ -135,22 +144,81 @@ void ibm_pc_xt_83_keyboard_device::device_start()
void ibm_pc_xt_83_keyboard_device::device_reset()
{
m_maincpu->reset();
}
//-------------------------------------------------
// clock_write -
// bus_w -
//-------------------------------------------------
WRITE_LINE_MEMBER( ibm_pc_xt_83_keyboard_device::clock_write )
WRITE8_MEMBER( ibm_pc_xt_83_keyboard_device::bus_w )
{
m_cnt = data;
}
//-------------------------------------------------
// data_write -
// p1_r -
//-------------------------------------------------
WRITE_LINE_MEMBER( ibm_pc_xt_83_keyboard_device::data_write )
READ8_MEMBER( ibm_pc_xt_83_keyboard_device::p1_r )
{
/*
bit description
0 -REQ IN
1 DATA IN
2
3
4
5
6
7
*/
UINT8 data = 0;
data |= clock_signal();
data |= data_signal() << 1;
return data;
}
//-------------------------------------------------
// p2_w -
//-------------------------------------------------
WRITE8_MEMBER( ibm_pc_xt_83_keyboard_device::p2_w )
{
/*
bit description
0 -MATRIX STROBE
1 CLOCK OUT
2 DATA OUT
3
4
5
6
7
*/
m_pc_kbdc->clock_write_from_kb(BIT(data, 1));
m_pc_kbdc->data_write_from_kb(BIT(data, 2));
}
//-------------------------------------------------
// t1_r -
//-------------------------------------------------
READ8_MEMBER( ibm_pc_xt_83_keyboard_device::t1_r )
{
return m_key_depressed;
}

View File

@ -1,6 +1,6 @@
/**********************************************************************
IBM PC/XT 5150/5160 83-key keyboard emulation
IBM Model F PC/XT 5150/5160 83-key keyboard emulation
Copyright MESS Team.
Visit http://mamedev.org for licensing and usage restrictions.
@ -15,6 +15,7 @@
#include "emu.h"
#include "cpu/mcs48/mcs48.h"
#include "machine/pc_kbdc.h"
#include "machine/rescap.h"
@ -36,17 +37,25 @@ public:
virtual machine_config_constructor device_mconfig_additions() const;
virtual ioport_constructor device_input_ports() const;
DECLARE_WRITE8_MEMBER( bus_w );
DECLARE_READ8_MEMBER( p1_r );
DECLARE_WRITE8_MEMBER( p2_w );
DECLARE_READ8_MEMBER( t1_r );
protected:
// device-level overrides
virtual void device_start();
virtual void device_reset();
// device_pc_kbd_interface overrides
virtual DECLARE_WRITE_LINE_MEMBER( clock_write );
virtual DECLARE_WRITE_LINE_MEMBER( data_write );
virtual DECLARE_WRITE_LINE_MEMBER( clock_write ) { };
virtual DECLARE_WRITE_LINE_MEMBER( data_write ) { };
private:
required_device<cpu_device> m_maincpu;
UINT8 m_cnt;
int m_key_depressed;
};

View File

@ -10,7 +10,7 @@
// PC XT protocol keyboards
#define STR_KBD_KEYTRONIC_PC3270 "keytronc_pc3270"
#define STR_KBD_IBM_PC_XT_83 "pcxt83"
#define STR_KBD_IBM_PC_XT_83 "pcxt"
SLOT_INTERFACE_EXTERN(pc_xt_keyboards);