trunk/src/mess/machine/kb_pcxt83.c
| r23851 | r23852 | |
| 1 | 1 | /********************************************************************** |
| 2 | 2 | |
| 3 | | IBM PC/XT 5150/5160 83-key keyboard emulation |
| 3 | IBM Model F PC/XT 5150/5160 83-key keyboard emulation |
| 4 | 4 | |
| 5 | 5 | Copyright MESS Team. |
| 6 | 6 | Visit http://mamedev.org for licensing and usage restrictions. |
| r23851 | r23852 | |
| 33 | 33 | ROM_START( ibm_pc_xt_83_keyboard ) |
| 34 | 34 | ROM_REGION( 0x400, I8048_TAG, 0 ) |
| 35 | 35 | /* |
| 36 | Keyboard Part No. 1501105 |
| 37 | |
| 36 | 38 | MOI 74 01 |
| 37 | 39 | PN 4584751 |
| 38 | 40 | GX 344231 |
| r23851 | r23852 | |
| 61 | 63 | //------------------------------------------------- |
| 62 | 64 | |
| 63 | 65 | static ADDRESS_MAP_START( ibm_pc_xt_83_keyboard_io, AS_IO, 8, ibm_pc_xt_83_keyboard_device ) |
| 66 | AM_RANGE(MCS48_PORT_BUS, MCS48_PORT_BUS) AM_WRITE(bus_w) |
| 67 | AM_RANGE(MCS48_PORT_P1, MCS48_PORT_P1) AM_READ(p1_r) AM_WRITENOP |
| 68 | AM_RANGE(MCS48_PORT_P2, MCS48_PORT_P2) AM_WRITE(p2_w) |
| 69 | AM_RANGE(MCS48_PORT_T1, MCS48_PORT_T1) AM_READ(t1_r) |
| 64 | 70 | ADDRESS_MAP_END |
| 65 | 71 | |
| 66 | 72 | |
| r23851 | r23852 | |
| 69 | 75 | //------------------------------------------------- |
| 70 | 76 | |
| 71 | 77 | static MACHINE_CONFIG_FRAGMENT( ibm_pc_xt_83_keyboard ) |
| 72 | | MCFG_CPU_ADD(I8048_TAG, I8048, 4000000) |
| 78 | MCFG_CPU_ADD(I8048_TAG, I8048, MCS48_LC_CLOCK(IND_U(47), CAP_P(20))) |
| 73 | 79 | MCFG_CPU_IO_MAP(ibm_pc_xt_83_keyboard_io) |
| 74 | 80 | MACHINE_CONFIG_END |
| 75 | 81 | |
| r23851 | r23852 | |
| 126 | 132 | |
| 127 | 133 | void ibm_pc_xt_83_keyboard_device::device_start() |
| 128 | 134 | { |
| 135 | // state saving |
| 136 | save_item(NAME(m_cnt)); |
| 137 | save_item(NAME(m_key_depressed)); |
| 129 | 138 | } |
| 130 | 139 | |
| 131 | 140 | |
| r23851 | r23852 | |
| 135 | 144 | |
| 136 | 145 | void ibm_pc_xt_83_keyboard_device::device_reset() |
| 137 | 146 | { |
| 147 | m_maincpu->reset(); |
| 138 | 148 | } |
| 139 | 149 | |
| 140 | 150 | |
| 141 | 151 | //------------------------------------------------- |
| 142 | | // clock_write - |
| 152 | // bus_w - |
| 143 | 153 | //------------------------------------------------- |
| 144 | 154 | |
| 145 | | WRITE_LINE_MEMBER( ibm_pc_xt_83_keyboard_device::clock_write ) |
| 155 | WRITE8_MEMBER( ibm_pc_xt_83_keyboard_device::bus_w ) |
| 146 | 156 | { |
| 157 | m_cnt = data; |
| 147 | 158 | } |
| 148 | 159 | |
| 149 | 160 | |
| 150 | 161 | //------------------------------------------------- |
| 151 | | // data_write - |
| 162 | // p1_r - |
| 152 | 163 | //------------------------------------------------- |
| 153 | 164 | |
| 154 | | WRITE_LINE_MEMBER( ibm_pc_xt_83_keyboard_device::data_write ) |
| 165 | READ8_MEMBER( ibm_pc_xt_83_keyboard_device::p1_r ) |
| 155 | 166 | { |
| 167 | /* |
| 168 | |
| 169 | bit description |
| 170 | |
| 171 | 0 -REQ IN |
| 172 | 1 DATA IN |
| 173 | 2 |
| 174 | 3 |
| 175 | 4 |
| 176 | 5 |
| 177 | 6 |
| 178 | 7 |
| 179 | |
| 180 | */ |
| 181 | |
| 182 | UINT8 data = 0; |
| 183 | |
| 184 | data |= clock_signal(); |
| 185 | data |= data_signal() << 1; |
| 186 | |
| 187 | return data; |
| 156 | 188 | } |
| 189 | |
| 190 | |
| 191 | //------------------------------------------------- |
| 192 | // p2_w - |
| 193 | //------------------------------------------------- |
| 194 | |
| 195 | WRITE8_MEMBER( ibm_pc_xt_83_keyboard_device::p2_w ) |
| 196 | { |
| 197 | /* |
| 198 | |
| 199 | bit description |
| 200 | |
| 201 | 0 -MATRIX STROBE |
| 202 | 1 CLOCK OUT |
| 203 | 2 DATA OUT |
| 204 | 3 |
| 205 | 4 |
| 206 | 5 |
| 207 | 6 |
| 208 | 7 |
| 209 | |
| 210 | */ |
| 211 | |
| 212 | m_pc_kbdc->clock_write_from_kb(BIT(data, 1)); |
| 213 | m_pc_kbdc->data_write_from_kb(BIT(data, 2)); |
| 214 | } |
| 215 | |
| 216 | |
| 217 | //------------------------------------------------- |
| 218 | // t1_r - |
| 219 | //------------------------------------------------- |
| 220 | |
| 221 | READ8_MEMBER( ibm_pc_xt_83_keyboard_device::t1_r ) |
| 222 | { |
| 223 | return m_key_depressed; |
| 224 | } |
trunk/src/mess/machine/kb_pcxt83.h
| r23851 | r23852 | |
| 1 | 1 | /********************************************************************** |
| 2 | 2 | |
| 3 | | IBM PC/XT 5150/5160 83-key keyboard emulation |
| 3 | IBM Model F PC/XT 5150/5160 83-key keyboard emulation |
| 4 | 4 | |
| 5 | 5 | Copyright MESS Team. |
| 6 | 6 | Visit http://mamedev.org for licensing and usage restrictions. |
| r23851 | r23852 | |
| 15 | 15 | #include "emu.h" |
| 16 | 16 | #include "cpu/mcs48/mcs48.h" |
| 17 | 17 | #include "machine/pc_kbdc.h" |
| 18 | #include "machine/rescap.h" |
| 18 | 19 | |
| 19 | 20 | |
| 20 | 21 | |
| r23851 | r23852 | |
| 36 | 37 | virtual machine_config_constructor device_mconfig_additions() const; |
| 37 | 38 | virtual ioport_constructor device_input_ports() const; |
| 38 | 39 | |
| 40 | DECLARE_WRITE8_MEMBER( bus_w ); |
| 41 | DECLARE_READ8_MEMBER( p1_r ); |
| 42 | DECLARE_WRITE8_MEMBER( p2_w ); |
| 43 | DECLARE_READ8_MEMBER( t1_r ); |
| 44 | |
| 39 | 45 | protected: |
| 40 | 46 | // device-level overrides |
| 41 | 47 | virtual void device_start(); |
| 42 | 48 | virtual void device_reset(); |
| 43 | 49 | |
| 44 | 50 | // device_pc_kbd_interface overrides |
| 45 | | virtual DECLARE_WRITE_LINE_MEMBER( clock_write ); |
| 46 | | virtual DECLARE_WRITE_LINE_MEMBER( data_write ); |
| 51 | virtual DECLARE_WRITE_LINE_MEMBER( clock_write ) { }; |
| 52 | virtual DECLARE_WRITE_LINE_MEMBER( data_write ) { }; |
| 47 | 53 | |
| 48 | 54 | private: |
| 49 | 55 | required_device<cpu_device> m_maincpu; |
| 56 | |
| 57 | UINT8 m_cnt; |
| 58 | int m_key_depressed; |
| 50 | 59 | }; |
| 51 | 60 | |
| 52 | 61 | |