(MESS) Floppy fixes WIP. (nw)

This commit is contained in:
Curt Coder 2013-01-11 15:19:16 +00:00
parent 0e19f641d3
commit d67192af3e
6 changed files with 102 additions and 41 deletions

View File

@ -21,10 +21,12 @@
RAM expansions: RAM expansions:
- CMD RAMLink - CMD RAMLink
- CMD RAMDrive - CMD RAMDrive
- CMD REU 1750XL
- Commodore REU 1700/1750/1764 - Commodore REU 1700/1750/1764
- Rex RAM-Floppy 256K - Rex RAM-Floppy 256K
- Rex Goliath 1MB - Rex Goliath 1MB
- RAM-Cart - RAM-Cart
- Silicon Disk System
Hard disks: Hard disks:
- Lt. Kernal - Lt. Kernal

View File

@ -94,7 +94,7 @@ void wd_fdc_t::device_reset()
sub_state = IDLE; sub_state = IDLE;
cur_live.state = IDLE; cur_live.state = IDLE;
track = 0x00; track = 0x00;
sector = 0x00; sector = 0x01;
status = 0x00; status = 0x00;
data = 0x00; data = 0x00;
cmd_buffer = track_buffer = sector_buffer = -1; cmd_buffer = track_buffer = sector_buffer = -1;
@ -106,6 +106,9 @@ void wd_fdc_t::device_reset()
hld = false; hld = false;
intrq_cond = 0; intrq_cond = 0;
live_abort(); live_abort();
// restore
cmd_w(0x03);
} }
void wd_fdc_t::set_floppy(floppy_image_device *_floppy) void wd_fdc_t::set_floppy(floppy_image_device *_floppy)

View File

@ -48,10 +48,8 @@ Notes:
TODO: TODO:
- revision F boot ROM dump - floppy broken
- wmb_org.imd does not load
- z80dart wait/ready - z80dart wait/ready
- floppy type dips
- Winchester hard disk - Winchester hard disk
- revision E model - revision E model
@ -201,6 +199,13 @@ WRITE8_MEMBER( bullet_state::exdsk_w )
*/ */
if (BIT(data, 2))
{
m_exdsk_sw = true;
}
if (m_exdsk_sw)
{
// drive select // drive select
m_floppy = NULL; m_floppy = NULL;
@ -219,6 +224,7 @@ WRITE8_MEMBER( bullet_state::exdsk_w )
} }
m_fdc->set_floppy(m_floppy); m_fdc->set_floppy(m_floppy);
}
if (m_floppy) if (m_floppy)
{ {
@ -281,12 +287,20 @@ WRITE8_MEMBER( bullet_state::hdcon_w )
*/ */
if (BIT(data, 4))
{
m_hdcon_sw = true;
}
if (m_hdcon_sw)
{
// FDC clock // FDC clock
m_fdc->set_unscaled_clock(BIT(data, 2) ? XTAL_16MHz/16 : XTAL_16MHz/8); m_fdc->set_unscaled_clock(BIT(data, 2) ? XTAL_16MHz/8 : XTAL_16MHz/16);
// density select // density select
m_fdc->dden_w(BIT(data, 3)); m_fdc->dden_w(BIT(data, 3));
} }
}
//------------------------------------------------- //-------------------------------------------------
@ -317,7 +331,7 @@ READ8_MEMBER( bullet_state::info_r )
// floppy // floppy
data |= m_fdc->hld_r() << 4; 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->intrq_r() << 6;
data |= m_fdc->drq_r() << 7; 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_DIPNAME( 0xf0, 0x50, "Floppy Type" ) PORT_DIPLOCATION("SW1:5,6,7,8")
PORT_DIPSETTING( 0xf0, "5.25\" SD" ) PORT_DIPSETTING( 0xf0, "5.25\" SD" )
PORT_DIPSETTING( 0x50, "5.25\" DD" ) PORT_DIPSETTING( 0x50, "5.25\" DD" )
PORT_DIPSETTING( 0x60, "8\" SD" ) PORT_DIPSETTING( 0x90, "8\" SD" )
PORT_DIPSETTING( 0x00, "8\" DD" ) PORT_DIPSETTING( 0x00, "8\" DD" )
INPUT_PORTS_END INPUT_PORTS_END
@ -1029,6 +1043,7 @@ SLOT_INTERFACE_END
static SLOT_INTERFACE_START( bullet_35_floppies ) static SLOT_INTERFACE_START( bullet_35_floppies )
SLOT_INTERFACE( "35dd", FLOPPY_35_DD ) SLOT_INTERFACE( "35dd", FLOPPY_35_DD )
SLOT_INTERFACE_END SLOT_INTERFACE_END
void bullet_state::fdc_intrq_w(bool state) void bullet_state::fdc_intrq_w(bool state)
{ {
z80dart_dcda_w(m_dart, state); z80dart_dcda_w(m_dart, state);
@ -1095,8 +1110,8 @@ static const z80_daisy_config daisy_chain[] =
void bullet_state::machine_start() void bullet_state::machine_start()
{ {
// floppy callbacks // floppy callbacks
m_fdc->setup_intrq_cb(mb8877_t::line_cb(FUNC(bullet_state::fdc_intrq_w), this)); m_fdc->setup_intrq_cb(wd_fdc_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_drq_cb(wd_fdc_t::line_cb(FUNC(bullet_state::fdc_drq_w), this));
// state saving // state saving
save_item(NAME(m_segst)); save_item(NAME(m_segst));
@ -1119,8 +1134,8 @@ void bullet_state::machine_start()
void bulletf_state::machine_start() void bulletf_state::machine_start()
{ {
// floppy callbacks // floppy callbacks
m_fdc->setup_intrq_cb(mb8877_t::line_cb(FUNC(bulletf_state::fdc_intrq_w), this)); m_fdc->setup_intrq_cb(wd_fdc_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_drq_cb(wd_fdc_t::line_cb(FUNC(bulletf_state::fdc_drq_w), this));
// state saving // state saving
save_item(NAME(m_fdrdy)); save_item(NAME(m_fdrdy));
@ -1146,6 +1161,32 @@ void bullet_state::machine_reset()
m_exdma = 0; m_exdma = 0;
m_buf = 0; m_buf = 0;
update_dma_rdy(); 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 // MACHINE CONFIGURATION
//************************************************************************** //**************************************************************************
@ -1188,7 +1230,7 @@ static MACHINE_CONFIG_START( bullet, bullet_state )
MCFG_Z80DART_ADD(Z80DART_TAG, XTAL_16MHz/4, dart_intf) MCFG_Z80DART_ADD(Z80DART_TAG, XTAL_16MHz/4, dart_intf)
MCFG_Z80DMA_ADD(Z80DMA_TAG, XTAL_16MHz/4, dma_intf) MCFG_Z80DMA_ADD(Z80DMA_TAG, XTAL_16MHz/4, dma_intf)
MCFG_Z80PIO_ADD(Z80PIO_TAG, XTAL_16MHz/4, pio_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":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":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) 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":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_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_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 // software lists
MCFG_SOFTWARE_LIST_ADD("flop_list", "wmbullet") 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_Z80DART_ADD(Z80DART_TAG, XTAL_16MHz/4, dart_intf)
MCFG_Z80DMA_ADD(Z80DMA_TAG, XTAL_16MHz/4, dma_intf) MCFG_Z80DMA_ADD(Z80DMA_TAG, XTAL_16MHz/4, dma_intf)
MCFG_Z80PIO_ADD(Z80PIO_TAG, XTAL_16MHz/4, bulletf_pio_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":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":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) 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":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_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_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_SCSIBUS_ADD(SCSIBUS_TAG)
MCFG_SCSIDEV_ADD(SCSIBUS_TAG ":harddisk0", SCSIHD, SCSI_ID_0) MCFG_SCSIDEV_ADD(SCSIBUS_TAG ":harddisk0", SCSIHD, SCSI_ID_0)

View File

@ -10,6 +10,7 @@
TODO: TODO:
- floppy broken
- keyboard CPU ROM - keyboard CPU ROM
- graphics board - graphics board
- Tandy 6000 HD - Tandy 6000 HD
@ -230,11 +231,17 @@ WRITE8_MEMBER( trs80m2_state::drvslt_w )
m_fdc->set_floppy(m_floppy); m_fdc->set_floppy(m_floppy);
if (m_floppy)
{
// side select // side select
if (m_floppy) m_floppy->ss_w(!BIT(data, 6)); m_floppy->ss_w(!BIT(data, 6));
// motor
m_floppy->mon_w(0);
}
// FM/MFM // FM/MFM
m_fdc->dden_w(BIT(data, 7)); m_fdc->dden_w(!BIT(data, 7));
} }
READ8_MEMBER( trs80m2_state::keyboard_r ) 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) MCFG_MC6845_ADD(MC6845_TAG, MC6845, XTAL_12_48MHz/8, mc6845_intf)
// devices // 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_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_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) 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) MCFG_MC6845_ADD(MC6845_TAG, MC6845, XTAL_12_48MHz/8, mc6845_intf)
// devices // 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_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_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) 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 // 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( 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( 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 ) //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 )

View File

@ -95,6 +95,7 @@ Notes:
TODO: TODO:
- floppy broken
- write to banked RAM at 0x0000-0x1fff when ROM is active - write to banked RAM at 0x0000-0x1fff when ROM is active
- real keyboard w/i8049 - real keyboard w/i8049
- keyboard beeper (NE555 wired in strange mix of astable/monostable modes) - keyboard beeper (NE555 wired in strange mix of astable/monostable modes)
@ -1131,4 +1132,4 @@ ROM_END
// System Drivers // System Drivers
// YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY FULLNAME FLAGS // 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 )

View File

@ -49,7 +49,10 @@ public:
m_floppy(NULL), m_floppy(NULL),
m_terminal(*this, TERMINAL_TAG), m_terminal(*this, TERMINAL_TAG),
m_centronics(*this, CENTRONICS_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<cpu_device> m_maincpu; required_device<cpu_device> m_maincpu;
@ -69,6 +72,7 @@ public:
floppy_image_device *m_floppy; floppy_image_device *m_floppy;
required_device<serial_terminal_device> m_terminal; required_device<serial_terminal_device> m_terminal;
required_device<centronics_device> m_centronics; required_device<centronics_device> m_centronics;
required_ioport m_sw1;
virtual void machine_start(); virtual void machine_start();
virtual void machine_reset(); virtual void machine_reset();
@ -110,6 +114,8 @@ public:
int m_winrdy; int m_winrdy;
int m_exrdy1; int m_exrdy1;
int m_exrdy2; int m_exrdy2;
bool m_exdsk_sw;
bool m_hdcon_sw;
TIMER_DEVICE_CALLBACK_MEMBER(ctc_tick); TIMER_DEVICE_CALLBACK_MEMBER(ctc_tick);
DECLARE_WRITE_LINE_MEMBER(dart_rxtxca_w); DECLARE_WRITE_LINE_MEMBER(dart_rxtxca_w);