trunk/src/mess/drivers/attache.c
| r23552 | r23553 | |
| 64 | 64 | #include "video/tms9927.h" |
| 65 | 65 | #include "machine/ram.h" |
| 66 | 66 | #include "machine/nvram.h" |
| 67 | #include "debugger.h" |
| 67 | 68 | |
| 68 | 69 | class attache_state : public driver_device |
| 69 | 70 | { |
| r23552 | r23553 | |
| 434 | 435 | m_kb_clock = state; |
| 435 | 436 | } |
| 436 | 437 | |
| 438 | // TODO: Figure out exactly how the HLD, RD, WR and CS lines are hooked up |
| 437 | 439 | READ8_MEMBER(attache_state::pio_portA_r) |
| 438 | 440 | { |
| 439 | 441 | UINT8 ret = 0xff; |
| r23552 | r23553 | |
| 446 | 448 | logerror("PSG: data read %02x\n",ret); |
| 447 | 449 | break; |
| 448 | 450 | case PIO_SEL_5832_WRITE: |
| 451 | m_rtc->cs_w(1); |
| 452 | m_rtc->write_w(0); |
| 453 | m_rtc->read_w(1); |
| 449 | 454 | m_rtc->address_w((porta & 0xf0) >> 4); |
| 450 | 455 | ret = m_rtc->data_r(space,0); |
| 451 | | logerror("RTC: read %02x (write)\n",ret); |
| 456 | logerror("RTC: read %02x from %02x (write)\n",ret,(porta & 0xf0) >> 4); |
| 452 | 457 | break; |
| 453 | 458 | case PIO_SEL_5832_READ: |
| 459 | m_rtc->cs_w(1); |
| 460 | m_rtc->write_w(0); |
| 461 | m_rtc->read_w(1); |
| 454 | 462 | m_rtc->address_w((porta & 0xf0) >> 4); |
| 455 | 463 | ret = m_rtc->data_r(space,0); |
| 456 | | logerror("RTC: read %02x\n",ret); |
| 464 | logerror("RTC: read %02x from %02x\n",ret,(porta & 0xf0) >> 4); |
| 457 | 465 | break; |
| 458 | 466 | case PIO_SEL_5101_WRITE: |
| 459 | 467 | m_cmos_select = (m_cmos_select & 0xf0) | ((porta & 0xf0) >> 4); |
| r23552 | r23553 | |
| 491 | 499 | { |
| 492 | 500 | case PIO_SEL_8910_ADDR: |
| 493 | 501 | m_psg->address_w(space,0,data); |
| 494 | | logerror("PSG: address write %02x\n",data); |
| 495 | 502 | break; |
| 496 | 503 | case PIO_SEL_8910_DATA: |
| 497 | 504 | m_psg->data_w(space,0,data); |
| 498 | | logerror("PSG: data write %02x\n",data); |
| 499 | 505 | break; |
| 500 | 506 | case PIO_SEL_5832_WRITE: |
| 507 | m_rtc->cs_w(1); |
| 508 | m_rtc->write_w(0); |
| 509 | m_rtc->read_w(1); |
| 501 | 510 | m_rtc->address_w((data & 0xf0) >> 4); |
| 502 | 511 | m_rtc->data_w(space,0,data & 0x0f); |
| 503 | 512 | logerror("RTC: write %01x to %01x\n",data & 0x0f,(data & 0xf0) >> 4); |
| 504 | 513 | break; |
| 505 | 514 | case PIO_SEL_5832_READ: |
| 515 | m_rtc->cs_w(1); |
| 516 | m_rtc->write_w(0); |
| 517 | m_rtc->read_w(1); |
| 506 | 518 | m_rtc->address_w((data & 0xf0) >> 4); |
| 507 | 519 | logerror("RTC: write %01x to %01x (read)\n",data & 0x0f,(data & 0xf0) >> 4); |
| 508 | 520 | break; |
| r23552 | r23553 | |
| 561 | 573 | //B5 = /'138 OPERATION STROBE |
| 562 | 574 | //B6 = /KEYBOARD DATA IN |
| 563 | 575 | //B7 = /KEYBOARD CLOCK OUT |
| 576 | m_pio_select = (data & 0x1c) >> 2; |
| 577 | m_cmos_select = ((data & 0x03) << 4) | (m_cmos_select & 0x0f); |
| 564 | 578 | if((data & 0x20) && !(m_pio_portb & 0x20)) |
| 565 | 579 | operation_strobe(space,m_pio_porta); |
| 566 | | m_pio_select = (data & 0x1c) >> 2; |
| 567 | | m_cmos_select = ((data & 0x03) << 4) | (m_cmos_select & 0x0f); |
| 568 | 580 | m_pio_portb = data; |
| 569 | 581 | keyboard_clock_w(data & 0x80); |
| 570 | 582 | } |
| r23552 | r23553 | |
| 1012 | 1024 | MCFG_SOUND_CONFIG(ay8912_interface) |
| 1013 | 1025 | MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25) |
| 1014 | 1026 | |
| 1015 | | MCFG_MSM5832_ADD("rtc",XTAL_8MHz / 4) |
| 1027 | MCFG_MSM5832_ADD("rtc",XTAL_32_768kHz) |
| 1016 | 1028 | |
| 1017 | 1029 | MCFG_Z80PIO_ADD("pio",XTAL_8MHz / 26, pio_interface) |
| 1018 | 1030 | MCFG_Z80SIO0_ADD("sio",XTAL_8MHz / 26, sio_interface) |