trunk/src/mess/machine/kb_pcxt83.c
| r23911 | r23912 | |
| 86 | 86 | //------------------------------------------------- |
| 87 | 87 | |
| 88 | 88 | static MACHINE_CONFIG_FRAGMENT( ibm_pc_xt_83_keyboard ) |
| 89 | | MCFG_CPU_ADD(I8048_TAG, I8048, 5247000) |
| 89 | MCFG_CPU_ADD(I8048_TAG, I8048, MCS48_LC_CLOCK(IND_U(47), CAP_P(20.7))) |
| 90 | 90 | MCFG_CPU_IO_MAP(ibm_pc_xt_83_keyboard_io) |
| 91 | 91 | MACHINE_CONFIG_END |
| 92 | 92 | |
| r23911 | r23912 | |
| 107 | 107 | //------------------------------------------------- |
| 108 | 108 | |
| 109 | 109 | INPUT_PORTS_START( ibm_pc_xt_83_keyboard ) |
| 110 | | PORT_START("P10") |
| 110 | PORT_START("MD00") |
| 111 | 111 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 112 | 112 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 113 | 113 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| r23911 | r23912 | |
| 117 | 117 | PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 118 | 118 | PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 119 | 119 | |
| 120 | | PORT_START("P11") |
| 120 | PORT_START("MD01") |
| 121 | 121 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 122 | 122 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 123 | 123 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| r23911 | r23912 | |
| 127 | 127 | PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 128 | 128 | PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 129 | 129 | |
| 130 | | PORT_START("P12") |
| 130 | PORT_START("MD02") |
| 131 | 131 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 132 | 132 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 133 | 133 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| r23911 | r23912 | |
| 137 | 137 | PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 138 | 138 | PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 139 | 139 | |
| 140 | | PORT_START("P13") |
| 140 | PORT_START("MD03") |
| 141 | 141 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 142 | 142 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 143 | 143 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| r23911 | r23912 | |
| 147 | 147 | PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 148 | 148 | PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 149 | 149 | |
| 150 | | PORT_START("P14") |
| 150 | PORT_START("MD04") |
| 151 | 151 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 152 | 152 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 153 | 153 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| r23911 | r23912 | |
| 157 | 157 | PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 158 | 158 | PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 159 | 159 | |
| 160 | | PORT_START("P15") |
| 160 | PORT_START("MD05") |
| 161 | 161 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 162 | 162 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 163 | 163 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| r23911 | r23912 | |
| 167 | 167 | PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 168 | 168 | PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 169 | 169 | |
| 170 | | PORT_START("P16") |
| 170 | PORT_START("MD06") |
| 171 | 171 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 172 | 172 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 173 | 173 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| r23911 | r23912 | |
| 177 | 177 | PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 178 | 178 | PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 179 | 179 | |
| 180 | | PORT_START("P17") |
| 180 | PORT_START("MD07") |
| 181 | 181 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 182 | 182 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 183 | 183 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| r23911 | r23912 | |
| 187 | 187 | PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 188 | 188 | PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 189 | 189 | |
| 190 | | PORT_START("P23") |
| 190 | PORT_START("MD08") |
| 191 | 191 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 192 | 192 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 193 | 193 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| r23911 | r23912 | |
| 197 | 197 | PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 198 | 198 | PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 199 | 199 | |
| 200 | | PORT_START("P24") |
| 200 | PORT_START("MD09") |
| 201 | 201 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 202 | 202 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 203 | 203 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| r23911 | r23912 | |
| 207 | 207 | PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 208 | 208 | PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 209 | 209 | |
| 210 | | PORT_START("P25") |
| 210 | PORT_START("MD10") |
| 211 | 211 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 212 | 212 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 213 | 213 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| r23911 | r23912 | |
| 217 | 217 | PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 218 | 218 | PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 219 | 219 | |
| 220 | | PORT_START("P26") |
| 220 | PORT_START("MD11") |
| 221 | 221 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 222 | 222 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 223 | 223 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| r23911 | r23912 | |
| 226 | 226 | PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 227 | 227 | PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 228 | 228 | PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 229 | | |
| 230 | | PORT_START("P27") |
| 231 | | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 232 | | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 233 | | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 234 | | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 235 | | PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 236 | | PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 237 | | PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 238 | | PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) |
| 239 | 229 | INPUT_PORTS_END |
| 240 | 230 | |
| 241 | 231 | |
| r23911 | r23912 | |
| 262 | 252 | : device_t(mconfig, PC_KBD_IBM_PC_XT_83, "IBM PC/XT Keyboard", tag, owner, clock, "kb_pcxt83", __FILE__), |
| 263 | 253 | device_pc_kbd_interface(mconfig, *this), |
| 264 | 254 | m_maincpu(*this, I8048_TAG), |
| 265 | | m_p10(*this, "P10"), |
| 266 | | m_p11(*this, "P11"), |
| 267 | | m_p12(*this, "P12"), |
| 268 | | m_p13(*this, "P13"), |
| 269 | | m_p14(*this, "P14"), |
| 270 | | m_p15(*this, "P15"), |
| 271 | | m_p16(*this, "P16"), |
| 272 | | m_p17(*this, "P17"), |
| 273 | | m_p23(*this, "P23"), |
| 274 | | m_p24(*this, "P24"), |
| 275 | | m_p25(*this, "P25"), |
| 276 | | m_p26(*this, "P26"), |
| 277 | | m_p27(*this, "P27"), |
| 255 | m_md00(*this, "MD00"), |
| 256 | m_md01(*this, "MD01"), |
| 257 | m_md02(*this, "MD02"), |
| 258 | m_md03(*this, "MD03"), |
| 259 | m_md04(*this, "MD04"), |
| 260 | m_md05(*this, "MD05"), |
| 261 | m_md06(*this, "MD06"), |
| 262 | m_md07(*this, "MD07"), |
| 263 | m_md08(*this, "MD08"), |
| 264 | m_md09(*this, "MD09"), |
| 265 | m_md10(*this, "MD10"), |
| 266 | m_md11(*this, "MD11"), |
| 278 | 267 | m_p1(0), |
| 279 | | m_p2(0), |
| 280 | | m_sense(0) |
| 268 | m_p2(0) |
| 281 | 269 | { |
| 282 | 270 | } |
| 283 | 271 | |
| r23911 | r23912 | |
| 293 | 281 | // state saving |
| 294 | 282 | save_item(NAME(m_p1)); |
| 295 | 283 | save_item(NAME(m_p2)); |
| 296 | | save_item(NAME(m_sense)); |
| 297 | 284 | } |
| 298 | 285 | |
| 299 | 286 | |
| r23911 | r23912 | |
| 308 | 295 | |
| 309 | 296 | |
| 310 | 297 | //------------------------------------------------- |
| 298 | // clock_write - |
| 299 | //------------------------------------------------- |
| 300 | |
| 301 | WRITE_LINE_MEMBER( ibm_pc_xt_83_keyboard_device::clock_write ) |
| 302 | { |
| 303 | } |
| 304 | |
| 305 | |
| 306 | //------------------------------------------------- |
| 307 | // data_write - |
| 308 | //------------------------------------------------- |
| 309 | |
| 310 | WRITE_LINE_MEMBER( ibm_pc_xt_83_keyboard_device::data_write ) |
| 311 | { |
| 312 | m_maincpu->set_input_line(MCS48_INPUT_IRQ, state ? CLEAR_LINE : ASSERT_LINE); |
| 313 | } |
| 314 | |
| 315 | |
| 316 | //------------------------------------------------- |
| 311 | 317 | // bus_w - |
| 312 | 318 | //------------------------------------------------- |
| 313 | 319 | |
| r23911 | r23912 | |
| 322 | 328 | 2 |
| 323 | 329 | 3 |
| 324 | 330 | 4 |
| 325 | | 5 CLOCK |
| 326 | | 6 DATA |
| 327 | | 7 IC4 G |
| 331 | 5 DATAOUT |
| 332 | 6 -REQOUT |
| 333 | 7 RESET |
| 328 | 334 | |
| 329 | 335 | */ |
| 330 | 336 | |
| 331 | | m_pc_kbdc->data_write_from_kb(BIT(data, 6)); |
| 332 | | m_pc_kbdc->clock_write_from_kb(BIT(data, 5)); |
| 333 | | |
| 334 | | if (BIT(data, 7)) |
| 335 | | { |
| 336 | | m_sense = m_p2 & 0x07; |
| 337 | | } |
| 337 | m_pc_kbdc->data_write_from_kb(BIT(data, 5)); |
| 338 | m_pc_kbdc->clock_write_from_kb(BIT(data, 6)); |
| 338 | 339 | } |
| 339 | 340 | |
| 340 | 341 | |
| r23911 | r23912 | |
| 348 | 349 | |
| 349 | 350 | bit description |
| 350 | 351 | |
| 351 | | 0 |
| 352 | | 1 |
| 353 | | 2 |
| 354 | | 3 |
| 355 | | 4 |
| 356 | | 5 |
| 357 | | 6 |
| 358 | | 7 |
| 352 | 0 MD00 |
| 353 | 1 MD01 |
| 354 | 2 MD02 |
| 355 | 3 MD03 |
| 356 | 4 MD04 |
| 357 | 5 MD05 |
| 358 | 6 MD06 |
| 359 | 7 MD07 |
| 359 | 360 | |
| 360 | 361 | */ |
| 361 | 362 | |
| r23911 | r23912 | |
| 373 | 374 | |
| 374 | 375 | bit description |
| 375 | 376 | |
| 376 | | 0 SENSE 0 |
| 377 | | 1 SENSE 1 |
| 378 | | 2 SENSE 2 |
| 379 | | 3 |
| 380 | | 4 |
| 381 | | 5 |
| 382 | | 6 |
| 383 | | 7 |
| 377 | 0 SELECT 2 |
| 378 | 1 SELECT 1 |
| 379 | 2 SELECT 0 |
| 380 | 3 SA CLOSED, T1 |
| 381 | 4 MD08 |
| 382 | 5 MD09 |
| 383 | 6 MD10 |
| 384 | 7 MD11 |
| 384 | 385 | |
| 385 | 386 | */ |
| 386 | 387 | |
| r23911 | r23912 | |
| 394 | 395 | |
| 395 | 396 | READ8_MEMBER( ibm_pc_xt_83_keyboard_device::t0_r ) |
| 396 | 397 | { |
| 397 | | return data_signal(); |
| 398 | return clock_signal(); |
| 398 | 399 | } |
| 399 | 400 | |
| 400 | 401 | |
| r23911 | r23912 | |
| 404 | 405 | |
| 405 | 406 | READ8_MEMBER( ibm_pc_xt_83_keyboard_device::t1_r ) |
| 406 | 407 | { |
| 408 | return sa_closed(); |
| 409 | } |
| 410 | |
| 411 | |
| 412 | //------------------------------------------------- |
| 413 | // sa_closed - |
| 414 | //------------------------------------------------- |
| 415 | |
| 416 | int ibm_pc_xt_83_keyboard_device::sa_closed() |
| 417 | { |
| 407 | 418 | UINT8 data = 0xff; |
| 408 | 419 | |
| 409 | | if (BIT(m_p1, 0)) data &= m_p10->read(); |
| 410 | | if (BIT(m_p1, 1)) data &= m_p11->read(); |
| 411 | | if (BIT(m_p1, 2)) data &= m_p12->read(); |
| 412 | | if (BIT(m_p1, 3)) data &= m_p13->read(); |
| 413 | | if (BIT(m_p1, 4)) data &= m_p14->read(); |
| 414 | | if (BIT(m_p1, 5)) data &= m_p15->read(); |
| 415 | | if (BIT(m_p1, 6)) data &= m_p16->read(); |
| 416 | | if (BIT(m_p1, 7)) data &= m_p17->read(); |
| 417 | | if (BIT(m_p2, 3)) data &= m_p23->read(); |
| 418 | | if (BIT(m_p2, 4)) data &= m_p24->read(); |
| 419 | | if (BIT(m_p2, 5)) data &= m_p25->read(); |
| 420 | | if (BIT(m_p2, 6)) data &= m_p26->read(); |
| 421 | | if (BIT(m_p2, 7)) data &= m_p27->read(); |
| 420 | logerror("md %03x sense %01x\n", m_p2 << 4 | m_p1, m_p2&0x07); |
| 422 | 421 | |
| 423 | | return BIT(data, m_sense); |
| 422 | if (BIT(m_p1, 0)) data &= m_md00->read(); |
| 423 | if (BIT(m_p1, 1)) data &= m_md01->read(); |
| 424 | if (BIT(m_p1, 2)) data &= m_md02->read(); |
| 425 | if (BIT(m_p1, 3)) data &= m_md03->read(); |
| 426 | if (BIT(m_p1, 4)) data &= m_md04->read(); |
| 427 | if (BIT(m_p1, 5)) data &= m_md05->read(); |
| 428 | if (BIT(m_p1, 6)) data &= m_md06->read(); |
| 429 | if (BIT(m_p1, 7)) data &= m_md07->read(); |
| 430 | if (BIT(m_p2, 4)) data &= m_md08->read(); |
| 431 | if (BIT(m_p2, 5)) data &= m_md09->read(); |
| 432 | if (BIT(m_p2, 6)) data &= m_md10->read(); |
| 433 | if (BIT(m_p2, 7)) data &= m_md11->read(); |
| 434 | |
| 435 | return BIT(m_p2, 3) && BIT(data, m_p2 & 0x07); |
| 424 | 436 | } |