trunk/src/mess/drivers/mz3500.c
| r32217 | r32218 | |
| 50 | 50 | m_fdc(*this, "upd765a"), |
| 51 | 51 | m_video_ram(*this, "video_ram"), |
| 52 | 52 | m_beeper(*this, "beeper"), |
| 53 | | m_palette(*this, "palette") |
| 53 | m_palette(*this, "palette"), |
| 54 | m_system_dsw(*this, "SYSTEM_DSW"), |
| 55 | m_fd_dsw(*this, "FD_DSW") |
| 54 | 56 | { } |
| 55 | 57 | |
| 56 | 58 | // devices |
| r32217 | r32218 | |
| 106 | 108 | virtual void machine_reset(); |
| 107 | 109 | |
| 108 | 110 | virtual void video_start(); |
| 111 | |
| 112 | private: |
| 113 | required_ioport m_system_dsw; |
| 114 | required_ioport m_fd_dsw; |
| 115 | floppy_connector *m_floppy_connector[4]; |
| 109 | 116 | }; |
| 110 | 117 | |
| 111 | 118 | void mz3500_state::video_start() |
| r32217 | r32218 | |
| 473 | 480 | switch(offset) |
| 474 | 481 | { |
| 475 | 482 | case 2: |
| 476 | | return ((ioport("SYSTEM_DSW")->read() & 0x0f) << 1) | ((ioport("FD_DSW")->read() & 0x8) >> 3); |
| 483 | return ((m_system_dsw->read() & 0x0f) << 1) | ((m_fd_dsw->read() & 0x8) >> 3); |
| 477 | 484 | case 3: |
| 478 | | return ((ioport("FD_DSW")->read() & 0x7)<<5) | (m_srdy << 4); |
| 485 | return ((m_fd_dsw->read() & 0x7)<<5) | (m_srdy << 4); |
| 479 | 486 | } |
| 480 | 487 | |
| 481 | 488 | return 0; |
| r32217 | r32218 | |
| 534 | 541 | |
| 535 | 542 | READ8_MEMBER(mz3500_state::mz3500_fdc_r) |
| 536 | 543 | { |
| 537 | | static const char *const m_fddnames[4] = { "upd765a:0", "upd765a:1", "upd765a:2", "upd765a:3"}; |
| 538 | | |
| 539 | 544 | /* |
| 540 | 545 | ---- -x-- Motor |
| 541 | 546 | ---- --x- Index |
| 542 | 547 | ---- ---x Drq |
| 543 | 548 | */ |
| 544 | | floppy_image_device *floppy; |
| 545 | | floppy = machine().device<floppy_connector>(m_fddnames[m_fdd_sel])->get_device(); |
| 546 | 549 | |
| 550 | floppy_image_device *floppy = m_floppy_connector[m_fdd_sel]->get_device(); |
| 551 | |
| 547 | 552 | return (floppy->mon_r() << 2) | (floppy->idx_r() << 1) | (m_fdc->get_drq() & 1); |
| 548 | 553 | } |
| 549 | 554 | |
| r32217 | r32218 | |
| 556 | 561 | ---x ---- motor on signal |
| 557 | 562 | ---- xxxx Select FDD 0-3 (bit-wise) |
| 558 | 563 | */ |
| 559 | | static const char *const m_fddnames[4] = { "upd765a:0", "upd765a:1", "upd765a:2", "upd765a:3"}; |
| 560 | 564 | |
| 561 | 565 | if(data & 0x40) |
| 562 | 566 | { |
| r32217 | r32218 | |
| 570 | 574 | } |
| 571 | 575 | } |
| 572 | 576 | |
| 573 | | machine().device<floppy_connector>(m_fddnames[m_fdd_sel])->get_device()->mon_w(data & 0x10 ? CLEAR_LINE : ASSERT_LINE); |
| 577 | m_floppy_connector[m_fdd_sel]->get_device()->mon_w(data & 0x10 ? CLEAR_LINE : ASSERT_LINE); |
| 574 | 578 | |
| 575 | 579 | } |
| 576 | 580 | |
| r32217 | r32218 | |
| 740 | 744 | m_char_rom = memregion("gfx1")->base(); |
| 741 | 745 | m_work_ram = auto_alloc_array_clear(machine(), UINT8, 0x40000); |
| 742 | 746 | m_shared_ram = auto_alloc_array_clear(machine(), UINT8, 0x800); |
| 747 | |
| 748 | static const char *const m_fddnames[4] = { "upd765a:0", "upd765a:1", "upd765a:2", "upd765a:3"}; |
| 749 | |
| 750 | for (int i = 0; i < 4; i++) |
| 751 | { |
| 752 | m_floppy_connector[i] = machine().device<floppy_connector>(m_fddnames[i]); |
| 753 | } |
| 743 | 754 | } |
| 744 | 755 | |
| 745 | 756 | void mz3500_state::machine_reset() |
| r32217 | r32218 | |
| 760 | 771 | { |
| 761 | 772 | m_fdd_sel = 0; |
| 762 | 773 | { |
| 763 | | static const char *const m_fddnames[4] = { "upd765a:0", "upd765a:1", "upd765a:2", "upd765a:3"}; |
| 764 | | |
| 765 | 774 | for(int i=0;i<4;i++) |
| 766 | 775 | { |
| 767 | | machine().device<floppy_connector>(m_fddnames[i])->get_device()->mon_w(ASSERT_LINE); |
| 768 | | machine().device<floppy_connector>(m_fddnames[i])->get_device()->set_rpm(300); |
| 776 | m_floppy_connector[i]->get_device()->mon_w(ASSERT_LINE); |
| 777 | m_floppy_connector[i]->get_device()->set_rpm(300); |
| 769 | 778 | } |
| 770 | 779 | |
| 771 | 780 | machine().device<upd765a_device>("upd765a")->set_rate(250000); |