diff --git a/hash/c64_cart.xml b/hash/c64_cart.xml index 760b82c5432..cff9f94ae9b 100644 --- a/hash/c64_cart.xml +++ b/hash/c64_cart.xml @@ -21,10 +21,12 @@ RAM expansions: - CMD RAMLink - CMD RAMDrive + - CMD REU 1750XL - Commodore REU 1700/1750/1764 - Rex RAM-Floppy 256K - Rex Goliath 1MB - RAM-Cart + - Silicon Disk System Hard disks: - Lt. Kernal diff --git a/src/emu/machine/wd_fdc.c b/src/emu/machine/wd_fdc.c index 26a2d29e658..a19008aeb9e 100644 --- a/src/emu/machine/wd_fdc.c +++ b/src/emu/machine/wd_fdc.c @@ -94,7 +94,7 @@ void wd_fdc_t::device_reset() sub_state = IDLE; cur_live.state = IDLE; track = 0x00; - sector = 0x00; + sector = 0x01; status = 0x00; data = 0x00; cmd_buffer = track_buffer = sector_buffer = -1; @@ -106,6 +106,9 @@ void wd_fdc_t::device_reset() hld = false; intrq_cond = 0; live_abort(); + + // restore + cmd_w(0x03); } void wd_fdc_t::set_floppy(floppy_image_device *_floppy) diff --git a/src/mess/drivers/bullet.c b/src/mess/drivers/bullet.c index 25812ce45e7..faeec2f28b3 100644 --- a/src/mess/drivers/bullet.c +++ b/src/mess/drivers/bullet.c @@ -48,10 +48,8 @@ Notes: TODO: - - revision F boot ROM dump - - wmb_org.imd does not load + - floppy broken - z80dart wait/ready - - floppy type dips - Winchester hard disk - revision E model @@ -201,24 +199,32 @@ WRITE8_MEMBER( bullet_state::exdsk_w ) */ - // drive select - m_floppy = NULL; - - switch (data & 0x07) + if (BIT(data, 2)) { - // 5.25" - case 0: m_floppy = m_floppy0->get_device(); break; - case 1: m_floppy = m_floppy1->get_device(); break; - case 2: m_floppy = m_floppy2->get_device(); break; - case 3: m_floppy = m_floppy3->get_device(); break; - // 8" - case 4: m_floppy = m_floppy4->get_device(); break; - case 5: m_floppy = m_floppy5->get_device(); break; - case 6: m_floppy = m_floppy6->get_device(); break; - case 7: m_floppy = m_floppy7->get_device(); break; + m_exdsk_sw = true; } - m_fdc->set_floppy(m_floppy); + if (m_exdsk_sw) + { + // drive select + m_floppy = NULL; + + switch (data & 0x07) + { + // 5.25" + case 0: m_floppy = m_floppy0->get_device(); break; + case 1: m_floppy = m_floppy1->get_device(); break; + case 2: m_floppy = m_floppy2->get_device(); break; + case 3: m_floppy = m_floppy3->get_device(); break; + // 8" + case 4: m_floppy = m_floppy4->get_device(); break; + case 5: m_floppy = m_floppy5->get_device(); break; + case 6: m_floppy = m_floppy6->get_device(); break; + case 7: m_floppy = m_floppy7->get_device(); break; + } + + m_fdc->set_floppy(m_floppy); + } if (m_floppy) { @@ -281,11 +287,19 @@ WRITE8_MEMBER( bullet_state::hdcon_w ) */ - // FDC clock - m_fdc->set_unscaled_clock(BIT(data, 2) ? XTAL_16MHz/16 : XTAL_16MHz/8); + if (BIT(data, 4)) + { + m_hdcon_sw = true; + } - // density select - m_fdc->dden_w(BIT(data, 3)); + if (m_hdcon_sw) + { + // FDC clock + m_fdc->set_unscaled_clock(BIT(data, 2) ? XTAL_16MHz/8 : XTAL_16MHz/16); + + // density select + m_fdc->dden_w(BIT(data, 3)); + } } @@ -317,7 +331,7 @@ READ8_MEMBER( bullet_state::info_r ) // floppy data |= m_fdc->hld_r() << 4; - data |= m_floppy ? m_floppy->dskchg_r() : 1; + data |= (m_floppy ? m_floppy->dskchg_r() : 1) << 5; data |= m_fdc->intrq_r() << 6; data |= m_fdc->drq_r() << 7; @@ -667,7 +681,7 @@ INPUT_PORTS_START( bullet ) PORT_DIPNAME( 0xf0, 0x50, "Floppy Type" ) PORT_DIPLOCATION("SW1:5,6,7,8") PORT_DIPSETTING( 0xf0, "5.25\" SD" ) PORT_DIPSETTING( 0x50, "5.25\" DD" ) - PORT_DIPSETTING( 0x60, "8\" SD" ) + PORT_DIPSETTING( 0x90, "8\" SD" ) PORT_DIPSETTING( 0x00, "8\" DD" ) INPUT_PORTS_END @@ -1029,6 +1043,7 @@ SLOT_INTERFACE_END static SLOT_INTERFACE_START( bullet_35_floppies ) SLOT_INTERFACE( "35dd", FLOPPY_35_DD ) SLOT_INTERFACE_END + void bullet_state::fdc_intrq_w(bool state) { z80dart_dcda_w(m_dart, state); @@ -1095,8 +1110,8 @@ static const z80_daisy_config daisy_chain[] = void bullet_state::machine_start() { // floppy callbacks - m_fdc->setup_intrq_cb(mb8877_t::line_cb(FUNC(bullet_state::fdc_intrq_w), this)); - m_fdc->setup_drq_cb(mb8877_t::line_cb(FUNC(bullet_state::fdc_drq_w), this)); + m_fdc->setup_intrq_cb(wd_fdc_t::line_cb(FUNC(bullet_state::fdc_intrq_w), this)); + m_fdc->setup_drq_cb(wd_fdc_t::line_cb(FUNC(bullet_state::fdc_drq_w), this)); // state saving save_item(NAME(m_segst)); @@ -1119,8 +1134,8 @@ void bullet_state::machine_start() void bulletf_state::machine_start() { // floppy callbacks - m_fdc->setup_intrq_cb(mb8877_t::line_cb(FUNC(bulletf_state::fdc_intrq_w), this)); - m_fdc->setup_drq_cb(mb8877_t::line_cb(FUNC(bulletf_state::fdc_drq_w), this)); + m_fdc->setup_intrq_cb(wd_fdc_t::line_cb(FUNC(bulletf_state::fdc_intrq_w), this)); + m_fdc->setup_drq_cb(wd_fdc_t::line_cb(FUNC(bulletf_state::fdc_drq_w), this)); // state saving save_item(NAME(m_fdrdy)); @@ -1146,6 +1161,32 @@ void bullet_state::machine_reset() m_exdma = 0; m_buf = 0; update_dma_rdy(); + + // disable software control + m_exdsk_sw = false; + m_hdcon_sw = false; + + UINT8 sw1 = m_sw1->read(); + int mini = BIT(sw1, 6); + m_fdc->set_unscaled_clock(mini ? XTAL_16MHz/16 : XTAL_16MHz/8); + m_fdc->dden_w(BIT(sw1, 7)); + + if (mini) + { + m_floppy = m_floppy0->get_device(); + } + else + { + m_floppy = m_floppy4->get_device(); + } + + m_fdc->set_floppy(m_floppy); + + if (m_floppy) + { + m_floppy->ss_w(0); + m_floppy->mon_w(0); + } } @@ -1167,6 +1208,7 @@ void bulletf_state::machine_reset() } + //************************************************************************** // MACHINE CONFIGURATION //************************************************************************** @@ -1188,7 +1230,7 @@ static MACHINE_CONFIG_START( bullet, bullet_state ) MCFG_Z80DART_ADD(Z80DART_TAG, XTAL_16MHz/4, dart_intf) MCFG_Z80DMA_ADD(Z80DMA_TAG, XTAL_16MHz/4, dma_intf) MCFG_Z80PIO_ADD(Z80PIO_TAG, XTAL_16MHz/4, pio_intf) - MCFG_MB8877x_ADD(MB8877_TAG, XTAL_16MHz/8) + MCFG_MB8877x_ADD(MB8877_TAG, XTAL_16MHz/16) MCFG_FLOPPY_DRIVE_ADD(MB8877_TAG":0", bullet_525_floppies, "525qd", NULL, floppy_image_device::default_floppy_formats) MCFG_FLOPPY_DRIVE_ADD(MB8877_TAG":1", bullet_525_floppies, NULL, NULL, floppy_image_device::default_floppy_formats) MCFG_FLOPPY_DRIVE_ADD(MB8877_TAG":2", bullet_525_floppies, NULL, NULL, floppy_image_device::default_floppy_formats) @@ -1198,7 +1240,7 @@ static MACHINE_CONFIG_START( bullet, bullet_state ) MCFG_FLOPPY_DRIVE_ADD(MB8877_TAG":6", bullet_8_floppies, NULL, NULL, floppy_image_device::default_floppy_formats) MCFG_FLOPPY_DRIVE_ADD(MB8877_TAG":7", bullet_8_floppies, NULL, NULL, floppy_image_device::default_floppy_formats) MCFG_CENTRONICS_PRINTER_ADD(CENTRONICS_TAG, standard_centronics) - MCFG_SERIAL_TERMINAL_ADD(TERMINAL_TAG, terminal_intf, 4800) + MCFG_SERIAL_TERMINAL_ADD(TERMINAL_TAG, terminal_intf, 9600) // software lists MCFG_SOFTWARE_LIST_ADD("flop_list", "wmbullet") @@ -1226,7 +1268,7 @@ static MACHINE_CONFIG_START( bulletf, bulletf_state ) MCFG_Z80DART_ADD(Z80DART_TAG, XTAL_16MHz/4, dart_intf) MCFG_Z80DMA_ADD(Z80DMA_TAG, XTAL_16MHz/4, dma_intf) MCFG_Z80PIO_ADD(Z80PIO_TAG, XTAL_16MHz/4, bulletf_pio_intf) - MCFG_MB8877x_ADD(MB8877_TAG, XTAL_16MHz/8) + MCFG_MB8877x_ADD(MB8877_TAG, XTAL_16MHz/16) MCFG_FLOPPY_DRIVE_ADD(MB8877_TAG":0", bullet_525_floppies, "525qd", NULL, floppy_image_device::default_floppy_formats) MCFG_FLOPPY_DRIVE_ADD(MB8877_TAG":1", bullet_525_floppies, NULL, NULL, floppy_image_device::default_floppy_formats) MCFG_FLOPPY_DRIVE_ADD(MB8877_TAG":2", bullet_525_floppies, NULL, NULL, floppy_image_device::default_floppy_formats) @@ -1238,7 +1280,7 @@ static MACHINE_CONFIG_START( bulletf, bulletf_state ) MCFG_FLOPPY_DRIVE_ADD(MB8877_TAG":8", bullet_35_floppies, NULL, NULL, floppy_image_device::default_floppy_formats) MCFG_FLOPPY_DRIVE_ADD(MB8877_TAG":9", bullet_35_floppies, NULL, NULL, floppy_image_device::default_floppy_formats) MCFG_CENTRONICS_PRINTER_ADD(CENTRONICS_TAG, standard_centronics) - MCFG_SERIAL_TERMINAL_ADD(TERMINAL_TAG, terminal_intf, 4800) + MCFG_SERIAL_TERMINAL_ADD(TERMINAL_TAG, terminal_intf, 9600) MCFG_SCSIBUS_ADD(SCSIBUS_TAG) MCFG_SCSIDEV_ADD(SCSIBUS_TAG ":harddisk0", SCSIHD, SCSI_ID_0) diff --git a/src/mess/drivers/trs80m2.c b/src/mess/drivers/trs80m2.c index c23ace86f4c..d1a18811d0d 100644 --- a/src/mess/drivers/trs80m2.c +++ b/src/mess/drivers/trs80m2.c @@ -10,6 +10,7 @@ TODO: + - floppy broken - keyboard CPU ROM - graphics board - Tandy 6000 HD @@ -230,11 +231,17 @@ WRITE8_MEMBER( trs80m2_state::drvslt_w ) m_fdc->set_floppy(m_floppy); - // side select - if (m_floppy) m_floppy->ss_w(!BIT(data, 6)); + if (m_floppy) + { + // side select + m_floppy->ss_w(!BIT(data, 6)); + + // motor + m_floppy->mon_w(0); + } // FM/MFM - m_fdc->dden_w(BIT(data, 7)); + m_fdc->dden_w(!BIT(data, 7)); } READ8_MEMBER( trs80m2_state::keyboard_r ) @@ -1003,7 +1010,7 @@ static MACHINE_CONFIG_START( trs80m2, trs80m2_state ) MCFG_MC6845_ADD(MC6845_TAG, MC6845, XTAL_12_48MHz/8, mc6845_intf) // devices - MCFG_FD1791x_ADD(FD1791_TAG, XTAL_8MHz/8) + MCFG_FD1791x_ADD(FD1791_TAG, XTAL_8MHz/4) MCFG_Z80CTC_ADD(Z80CTC_TAG, XTAL_8MHz/2, ctc_intf) MCFG_TIMER_DRIVER_ADD_PERIODIC("ctc", trs80m2_state, ctc_tick, attotime::from_hz(XTAL_8MHz/2/2)) MCFG_Z80DMA_ADD(Z80DMA_TAG, XTAL_8MHz/2, dma_intf) @@ -1054,7 +1061,7 @@ static MACHINE_CONFIG_START( trs80m16, trs80m16_state ) MCFG_MC6845_ADD(MC6845_TAG, MC6845, XTAL_12_48MHz/8, mc6845_intf) // devices - MCFG_FD1791x_ADD(FD1791_TAG, XTAL_8MHz/8) + MCFG_FD1791x_ADD(FD1791_TAG, XTAL_8MHz/4) MCFG_Z80CTC_ADD(Z80CTC_TAG, XTAL_8MHz/2, ctc_intf) MCFG_TIMER_DRIVER_ADD_PERIODIC("ctc", trs80m2_state, ctc_tick, attotime::from_hz(XTAL_8MHz/2/2)) MCFG_Z80DMA_ADD(Z80DMA_TAG, XTAL_8MHz/2, dma_intf) @@ -1156,7 +1163,7 @@ ROM_END //************************************************************************** // YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY FULLNAME FLAGS -COMP( 1979, trs80m2, 0, 0, trs80m2, trs80m2, driver_device, 0, "Tandy Radio Shack", "TRS-80 Model II", GAME_NO_SOUND_HW | GAME_IMPERFECT_KEYBOARD ) +COMP( 1979, trs80m2, 0, 0, trs80m2, trs80m2, driver_device, 0, "Tandy Radio Shack", "TRS-80 Model II", GAME_NO_SOUND_HW | GAME_NOT_WORKING | GAME_IMPERFECT_KEYBOARD ) COMP( 1982, trs80m16, trs80m2, 0, trs80m16, trs80m2, driver_device, 0, "Tandy Radio Shack", "TRS-80 Model 16", GAME_NO_SOUND_HW | GAME_NOT_WORKING | GAME_IMPERFECT_KEYBOARD ) //COMP( 1983, trs80m12, trs80m2, 0, trs80m16, trs80m2, driver_device, 0, "Tandy Radio Shack", "TRS-80 Model 12", GAME_NO_SOUND_HW | GAME_NOT_WORKING | GAME_IMPERFECT_KEYBOARD ) //COMP( 1984, trs80m16b,trs80m2, 0, trs80m16, trs80m2, driver_device, 0, "Tandy Radio Shack", "TRS-80 Model 16B", GAME_NO_SOUND_HW | GAME_NOT_WORKING | GAME_IMPERFECT_KEYBOARD ) diff --git a/src/mess/drivers/v1050.c b/src/mess/drivers/v1050.c index 4cb648eb840..3786db54d1d 100644 --- a/src/mess/drivers/v1050.c +++ b/src/mess/drivers/v1050.c @@ -95,6 +95,7 @@ Notes: TODO: + - floppy broken - write to banked RAM at 0x0000-0x1fff when ROM is active - real keyboard w/i8049 - keyboard beeper (NE555 wired in strange mix of astable/monostable modes) @@ -1131,4 +1132,4 @@ ROM_END // System Drivers // YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY FULLNAME FLAGS -COMP( 1983, v1050, 0, 0, v1050, v1050, driver_device, 0, "Visual Technology Inc", "Visual 1050", GAME_IMPERFECT_GRAPHICS | GAME_SUPPORTS_SAVE | GAME_NO_SOUND | GAME_IMPERFECT_KEYBOARD ) +COMP( 1983, v1050, 0, 0, v1050, v1050, driver_device, 0, "Visual Technology Inc", "Visual 1050", GAME_NOT_WORKING | GAME_IMPERFECT_GRAPHICS | GAME_SUPPORTS_SAVE | GAME_NO_SOUND | GAME_IMPERFECT_KEYBOARD ) diff --git a/src/mess/includes/bullet.h b/src/mess/includes/bullet.h index bb5265aabbf..f8c4a009dac 100644 --- a/src/mess/includes/bullet.h +++ b/src/mess/includes/bullet.h @@ -49,7 +49,10 @@ public: m_floppy(NULL), m_terminal(*this, TERMINAL_TAG), m_centronics(*this, CENTRONICS_TAG), - m_fdrdy(0) + m_sw1(*this, "SW1"), + m_fdrdy(0), + m_exdsk_sw(false), + m_hdcon_sw(false) { } required_device m_maincpu; @@ -69,6 +72,7 @@ public: floppy_image_device *m_floppy; required_device m_terminal; required_device m_centronics; + required_ioport m_sw1; virtual void machine_start(); virtual void machine_reset(); @@ -110,6 +114,8 @@ public: int m_winrdy; int m_exrdy1; int m_exrdy2; + bool m_exdsk_sw; + bool m_hdcon_sw; TIMER_DEVICE_CALLBACK_MEMBER(ctc_tick); DECLARE_WRITE_LINE_MEMBER(dart_rxtxca_w);