trunk/src/emu/bus/msx_slot/disk.h
r32650 | r32651 | |
19 | 19 | extern const device_type MSX_SLOT_DISK4; |
20 | 20 | /* WD FDC accessed through i/o ports 0xd0-0xd4 */ |
21 | 21 | extern const device_type MSX_SLOT_DISK5; |
| 22 | /* WD FDC accessed through 7ff0-7ff? (used in Toshiba HX34) */ |
| 23 | extern const device_type MSX_SLOT_DISK6; |
22 | 24 | |
23 | 25 | |
24 | 26 | #define MCFG_MSX_SLOT_DISK1_ADD(_tag, _startpage, _numpages, _region, _offset, _fdc_tag, _floppy0_tag, _floppy1_tag) \ |
r32650 | r32651 | |
58 | 60 | msx_slot_disk_device::set_floppy2_tag(*device, _floppy2_tag); \ |
59 | 61 | msx_slot_disk_device::set_floppy3_tag(*device, _floppy3_tag); |
60 | 62 | |
| 63 | #define MCFG_MSX_SLOT_DISK6_ADD(_tag, _startpage, _numpages, _region, _offset, _fdc_tag, _floppy0_tag, _floppy1_tag) \ |
| 64 | MCFG_MSX_INTERNAL_SLOT_ADD(_tag, MSX_SLOT_DISK6, _startpage, _numpages) \ |
| 65 | msx_slot_rom_device::set_rom_start(*device, _region, _offset); \ |
| 66 | msx_slot_disk_device::set_fdc_tag(*device, _fdc_tag); \ |
| 67 | msx_slot_disk_device::set_floppy0_tag(*device, _floppy0_tag); \ |
| 68 | msx_slot_disk_device::set_floppy1_tag(*device, _floppy1_tag); |
61 | 69 | |
| 70 | |
62 | 71 | class msx_slot_disk_device : public msx_slot_rom_device |
63 | 72 | { |
64 | 73 | public: |
r32650 | r32651 | |
194 | 203 | }; |
195 | 204 | |
196 | 205 | |
| 206 | class msx_slot_disk6_device : public msx_slot_wd_disk_device |
| 207 | { |
| 208 | public: |
| 209 | msx_slot_disk6_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); |
| 210 | |
| 211 | virtual void device_start(); |
| 212 | virtual void device_reset(); |
| 213 | |
| 214 | virtual DECLARE_READ8_MEMBER(read); |
| 215 | virtual DECLARE_WRITE8_MEMBER(write); |
| 216 | |
| 217 | void post_load(); |
| 218 | |
| 219 | private: |
| 220 | UINT8 m_side_motor; |
| 221 | UINT8 m_drive_select0; |
| 222 | UINT8 m_drive_select1; |
| 223 | |
| 224 | void set_side_motor(); |
| 225 | void select_drive(); |
| 226 | }; |
| 227 | |
| 228 | |
197 | 229 | #endif |
trunk/src/emu/bus/msx_slot/disk.c
r32650 | r32651 | |
38 | 38 | const device_type MSX_SLOT_DISK3 = &device_creator<msx_slot_disk3_device>; |
39 | 39 | const device_type MSX_SLOT_DISK4 = &device_creator<msx_slot_disk4_device>; |
40 | 40 | const device_type MSX_SLOT_DISK5 = &device_creator<msx_slot_disk5_device>; |
| 41 | const device_type MSX_SLOT_DISK6 = &device_creator<msx_slot_disk6_device>; |
41 | 42 | |
42 | 43 | |
43 | 44 | msx_slot_disk_device::msx_slot_disk_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source) |
r32650 | r32651 | |
638 | 639 | break; |
639 | 640 | } |
640 | 641 | } |
| 642 | |
| 643 | |
| 644 | |
| 645 | msx_slot_disk6_device::msx_slot_disk6_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) |
| 646 | : msx_slot_wd_disk_device(mconfig, MSX_SLOT_DISK6, "MSX Internal floppy type 6", tag, owner, clock, "msx_slot_disk6", __FILE__) |
| 647 | , m_side_motor(0) |
| 648 | , m_drive_select0(0) |
| 649 | , m_drive_select1(0) |
| 650 | { |
| 651 | } |
| 652 | |
| 653 | |
| 654 | void msx_slot_disk6_device::device_start() |
| 655 | { |
| 656 | msx_slot_wd_disk_device::device_start(); |
| 657 | |
| 658 | save_item(NAME(m_side_motor)); |
| 659 | save_item(NAME(m_drive_select0)); |
| 660 | save_item(NAME(m_drive_select1)); |
| 661 | |
| 662 | machine().save().register_postload(save_prepost_delegate(FUNC(msx_slot_disk6_device::post_load), this)); |
| 663 | } |
| 664 | |
| 665 | |
| 666 | void msx_slot_disk6_device::device_reset() |
| 667 | { |
| 668 | m_fdc->dden_w(false); |
| 669 | } |
| 670 | |
| 671 | |
| 672 | void msx_slot_disk6_device::post_load() |
| 673 | { |
| 674 | select_drive(); |
| 675 | } |
| 676 | |
| 677 | |
| 678 | void msx_slot_disk6_device::select_drive() |
| 679 | { |
| 680 | if (m_drive_select1) |
| 681 | { |
| 682 | m_floppy = m_floppy1 ? m_floppy1->get_device() : NULL; |
| 683 | if (!m_floppy) |
| 684 | { |
| 685 | m_drive_select1 = 0; |
| 686 | } |
| 687 | } |
| 688 | |
| 689 | if (m_drive_select0) |
| 690 | { |
| 691 | m_floppy = m_floppy0 ? m_floppy0->get_device() : NULL; |
| 692 | if (!m_floppy) |
| 693 | { |
| 694 | m_drive_select0 = 0; |
| 695 | } |
| 696 | } |
| 697 | |
| 698 | m_fdc->set_floppy(m_floppy); |
| 699 | |
| 700 | set_side_motor(); |
| 701 | } |
| 702 | |
| 703 | |
| 704 | void msx_slot_disk6_device::set_side_motor() |
| 705 | { |
| 706 | if (m_floppy) |
| 707 | { |
| 708 | m_floppy->mon_w((m_side_motor & 0x02) ? 0 : 1); |
| 709 | m_floppy->ss_w(m_side_motor & 0x01); |
| 710 | } |
| 711 | } |
| 712 | |
| 713 | |
| 714 | READ8_MEMBER(msx_slot_disk6_device::read) |
| 715 | { |
| 716 | switch (offset) |
| 717 | { |
| 718 | case 0x7ff0: // status? |
| 719 | case 0x7ff8: |
| 720 | return m_fdc->status_r(); |
| 721 | |
| 722 | case 0x7ff1: // track? |
| 723 | case 0x7ff9: |
| 724 | return m_fdc->track_r(); |
| 725 | |
| 726 | case 0x7ff2: // sector? |
| 727 | case 0x7ffa: |
| 728 | return m_fdc->sector_r(); |
| 729 | |
| 730 | case 0x7ff3: // data? |
| 731 | case 0x7ffb: |
| 732 | return m_fdc->data_r(); |
| 733 | |
| 734 | case 0x7ff4: |
| 735 | case 0x7ffc: |
| 736 | // bit 0 = side control |
| 737 | // bit 1 = motor control |
| 738 | return 0xfc | m_side_motor; |
| 739 | break; |
| 740 | |
| 741 | // This reads back a 1 in bit 0 if drive0 is present and selected |
| 742 | case 0x7ff5: |
| 743 | case 0x7ffd: |
| 744 | return 0xfe | m_drive_select0; |
| 745 | |
| 746 | // This reads back a 1 in bit 0 if drive1 is present and selected |
| 747 | case 0x7ff6: |
| 748 | case 0x7ffe: |
| 749 | return 0xfe | m_drive_select1; |
| 750 | |
| 751 | case 0x7ff7: |
| 752 | case 0x7fff: |
| 753 | return 0x3f | (m_fdc->intrq_r() ? 0 : 0x40) | (m_fdc->drq_r() ? 0 : 0x80); |
| 754 | } |
| 755 | |
| 756 | return msx_slot_rom_device::read(space, offset); |
| 757 | } |
| 758 | |
| 759 | |
| 760 | WRITE8_MEMBER(msx_slot_disk6_device::write) |
| 761 | { |
| 762 | switch (offset) |
| 763 | { |
| 764 | case 0x7ff0: // cmd? |
| 765 | case 0x7ff8: |
| 766 | m_fdc->cmd_w(data); |
| 767 | break; |
| 768 | |
| 769 | case 0x7ff1: // track? |
| 770 | case 0x7ff9: |
| 771 | m_fdc->track_w(data); |
| 772 | break; |
| 773 | |
| 774 | case 0x7ff2: // sector? |
| 775 | case 0x7ffa: |
| 776 | m_fdc->sector_w(data); |
| 777 | break; |
| 778 | |
| 779 | case 0x7ff3: // data? |
| 780 | case 0x7ffb: |
| 781 | m_fdc->data_w(data); |
| 782 | break; |
| 783 | |
| 784 | // Side and motort control |
| 785 | // bit 0 = side select |
| 786 | // bit 1 = motor on/off |
| 787 | case 0x7ff4: |
| 788 | case 0x7ffc: |
| 789 | m_side_motor = data; |
| 790 | set_side_motor(); |
| 791 | break; |
| 792 | |
| 793 | // bit 0 - select drive 0 |
| 794 | case 0x7ff5: |
| 795 | case 0x7ffd: |
| 796 | m_drive_select0 = data; |
| 797 | select_drive(); |
| 798 | break; |
| 799 | |
| 800 | // bit 1 - select drive 1 |
| 801 | case 0x7ff6: |
| 802 | case 0x7ffe: |
| 803 | m_drive_select1 = data; |
| 804 | select_drive(); |
| 805 | break; |
| 806 | |
| 807 | default: |
| 808 | logerror("msx_slot_disk6_device::write: Unmapped write writing %02x to %04x\n", data, offset); |
| 809 | break; |
| 810 | } |
| 811 | } |
| 812 | |
trunk/src/mess/drivers/msx.c
r32650 | r32651 | |
69 | 69 | ** - phc77: printer not emulated |
70 | 70 | ** - hx21, hx22: Hook up kanji rom |
71 | 71 | ** - hx21, hx22: Does not start firmware |
72 | | ** - hx34, hx34i: Floppy support broken |
73 | 72 | ** - victhc90/95/95a: Turbo/2nd cpu not supported. |
74 | 73 | ** - victhc90/95/95a: Firmware not working. |
75 | 74 | ** - y503iiir/e: Fix keyboard support |
r32650 | r32651 | |
7034 | 7033 | ROM_REGION (0x18000, "maincpu", 0) |
7035 | 7034 | ROM_LOAD ("hx34bios.rom", 0x0000, 0x8000, CRC(3891e0f7) SHA1(7dfb18262d48e559fffb4199acbe29d9b4bee9db)) |
7036 | 7035 | ROM_LOAD ("hx34ext.rom", 0x8000, 0x4000, CRC(4a48779c) SHA1(b8e30d604d319d511cbfbc61e5d8c38fbb9c5a33)) |
7037 | | ROM_LOAD ("hx34disk.rom", 0xc000, 0x4000, CRC(b6203bc8) SHA1(d31236e8b2491bca678d905546b365e9d365b072)) |
| 7036 | // hx34disk.rom has contents of floppy registers at offset 3ff0-3ff7 and mirrored at 3ff8-3fff |
| 7037 | ROM_LOAD ("hx34disk.rom", 0xc000, 0x4000, BAD_DUMP CRC(b6203bc8) SHA1(d31236e8b2491bca678d905546b365e9d365b072)) |
7038 | 7038 | ROM_LOAD ("hx34firm.rom", 0x10000, 0x8000, CRC(d05b5ca6) SHA1(7eea205044af48cfde9b7fff277d961704c4d45c)) |
7039 | 7039 | |
7040 | 7040 | ROM_REGION (0x20000, "kanji", 0) |
r32650 | r32651 | |
7053 | 7053 | MCFG_MSX_LAYOUT_CARTRIDGE("cartslot2", 2, 0) |
7054 | 7054 | MCFG_MSX_LAYOUT_RAM_MM("ram_mm", 3, 0, 0x10000) // 64KB Mapper RAM |
7055 | 7055 | MCFG_MSX_LAYOUT_ROM("ext", 3, 1, 0, 1, "maincpu", 0x8000) |
7056 | | MCFG_MSX_LAYOUT_DISK1("disk", 3, 2, 1, 1, "maincpu", 0xc000) |
| 7056 | MCFG_MSX_LAYOUT_DISK6("disk", 3, 2, 1, 1, "maincpu", 0xc000) |
7057 | 7057 | MCFG_MSX_LAYOUT_ROM("firm", 3, 3, 1, 2, "maincpu", 0x10000) |
7058 | 7058 | |
7059 | 7059 | MCFG_MSX_S1985_ADD("s1985") |
7060 | 7060 | |
7061 | | MCFG_FRAGMENT_ADD( msx_wd2793_force_ready ) |
| 7061 | MCFG_FRAGMENT_ADD( msx_wd2793 ) |
7062 | 7062 | MCFG_FRAGMENT_ADD( msx_1_35_dd_drive ) |
7063 | 7063 | MCFG_FRAGMENT_ADD( msx2_floplist ) |
7064 | 7064 | |
r32650 | r32651 | |
7071 | 7071 | ROM_REGION (0x18000, "maincpu", 0) |
7072 | 7072 | ROM_LOAD ("hx34ibios.rom", 0x0000, 0x8000, CRC(6cdaf3a5) SHA1(6103b39f1e38d1aa2d84b1c3219c44f1abb5436e)) |
7073 | 7073 | ROM_LOAD ("hx34iext.rom", 0x8000, 0x4000, CRC(06e4f5e6) SHA1(f5eb0a396097572589f2a6efeed045044e9425e4)) |
7074 | | ROM_LOAD ("hx34idisk.rom", 0xc000, 0x4000, CRC(b6203bc8) SHA1(d31236e8b2491bca678d905546b365e9d365b072)) |
| 7074 | // hx34idisk.rom has contents of floppy registers at offset 3ff0-3ff7 and mirrored at 3ff8-3fff |
| 7075 | ROM_LOAD ("hx34idisk.rom", 0xc000, 0x4000, BAD_DUMP CRC(b6203bc8) SHA1(d31236e8b2491bca678d905546b365e9d365b072)) |
7075 | 7076 | ROM_LOAD ("hx34ifirm.rom", 0x10000, 0x8000, CRC(f9e29c66) SHA1(3289336b2c12161fd926a7e5ce865770ae7038af)) |
7076 | 7077 | ROM_END |
7077 | 7078 | |
r32650 | r32651 | |
7087 | 7088 | MCFG_MSX_LAYOUT_CARTRIDGE("cartslot2", 2, 0) |
7088 | 7089 | MCFG_MSX_LAYOUT_RAM_MM("ram_mm", 3, 0, 0x10000) // 64KB Mapper RAM |
7089 | 7090 | MCFG_MSX_LAYOUT_ROM("ext", 3, 1, 0, 1, "maincpu", 0x8000) |
7090 | | MCFG_MSX_LAYOUT_DISK1("disk", 3, 2, 1, 1, "maincpu", 0xc000) |
7091 | | MCFG_MSX_LAYOUT_ROM("firm", 3, 2, 1, 2, "maincpu", 0x10000) |
| 7091 | MCFG_MSX_LAYOUT_DISK6("disk", 3, 2, 1, 1, "maincpu", 0xc000) |
| 7092 | MCFG_MSX_LAYOUT_ROM("firm", 3, 3, 1, 2, "maincpu", 0x10000) |
7092 | 7093 | |
7093 | 7094 | MCFG_MSX_S1985_ADD("s1985") |
7094 | 7095 | |
7095 | | MCFG_FRAGMENT_ADD( msx_wd2793_force_ready ) |
| 7096 | MCFG_FRAGMENT_ADD( msx_wd2793 ) |
7096 | 7097 | MCFG_FRAGMENT_ADD( msx_1_35_dd_drive ) |
7097 | 7098 | MCFG_FRAGMENT_ADD( msx2_floplist ) |
7098 | 7099 | |
r32650 | r32651 | |
8404 | 8405 | COMP(1986, hx23f, hx23i, 0, hx23f, msx2, msx_state, msx, "Toshiba", "HX-23F (MSX2)", 0) |
8405 | 8406 | COMP(190?, hx23i, 0, 0, hx23i, msx2, msx_state, msx, "Toshiba", "HX-23I (MSX2)", 0) |
8406 | 8407 | COMP(198?, hx33, 0, 0, hx33, msx2jp, msx_state, msx, "Toshiba", "HX-33 (MSX2)", 0) |
8407 | | COMP(198?, hx34, hx34i, 0, hx34, msx2jp, msx_state, msx, "Toshiba", "HX-34 (MSX2)", GAME_NOT_WORKING) // Floppy support broken |
8408 | | COMP(198?, hx34i, 0, 0, hx34i, msx, msx_state, msx, "Toshiba", "HX-34I (MSX2)", GAME_NOT_WORKING) // Floppy support broken |
| 8408 | COMP(198?, hx34, hx34i, 0, hx34, msx2jp, msx_state, msx, "Toshiba", "HX-34 (MSX2)", 0) |
| 8409 | COMP(198?, hx34i, 0, 0, hx34i, msx, msx_state, msx, "Toshiba", "HX-34I (MSX2)", 0) |
8409 | 8410 | COMP(1985, fstm1, 0, 0, fstm1, msx, msx_state, msx, "Toshiba", "FS-TM1 (MSX2)", 0) |
8410 | 8411 | COMP(198?, victhc90, victhc95, 0, victhc90, msxjp, msx_state, msx, "Victor", "HC-90 (MSX2)", GAME_NOT_WORKING) // 2nd cpu/turbo not emulated, firmware won't start |
8411 | 8412 | COMP(198?, victhc95, 0, 0, victhc95, msxjp, msx_state, msx, "Victor", "HC-95 (MSX2)", GAME_NOT_WORKING) // 2nd cpu/turbo not emulated, firmware won't start |
trunk/src/mess/includes/msx.h
r32650 | r32651 | |
86 | 86 | MCFG_MSX_SLOT_DISK5_ADD(_tag, _page, _numpages, _region, _offset, "fdc", "fdc:0", "fdc:1", "fdc:2", "fdc:3") \ |
87 | 87 | msx_state::install_slot_pages(*owner, _prim, _sec, _page, _numpages, device); |
88 | 88 | |
| 89 | #define MCFG_MSX_LAYOUT_DISK6(_tag, _prim, _sec, _page, _numpages, _region, _offset) \ |
| 90 | MCFG_MSX_SLOT_DISK6_ADD(_tag, _page, _numpages, _region, _offset, "fdc", "fdc:0", "fdc:1") \ |
| 91 | msx_state::install_slot_pages(*owner, _prim, _sec, _page, _numpages, device); |
| 92 | |
89 | 93 | #define MCFG_MSX_LAYOUT_MUSIC(_tag, _prim, _sec, _page, _numpages, _region, _offset) \ |
90 | 94 | MCFG_MSX_SLOT_MUSIC_ADD(_tag, _page, _numpages, _region, _offset, "ym2413" ) \ |
91 | 95 | msx_state::install_slot_pages(*owner, _prim, _sec, _page, _numpages, device); |