mirror of
https://github.com/holub/mame
synced 2025-10-05 08:41:31 +03:00
(MESS) Floppy fixes WIP. (nw)
This commit is contained in:
parent
0e19f641d3
commit
d67192af3e
@ -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
|
||||
|
@ -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)
|
||||
|
@ -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)
|
||||
|
@ -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 )
|
||||
|
@ -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 )
|
||||
|
@ -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<cpu_device> m_maincpu;
|
||||
@ -69,6 +72,7 @@ public:
|
||||
floppy_image_device *m_floppy;
|
||||
required_device<serial_terminal_device> m_terminal;
|
||||
required_device<centronics_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);
|
||||
|
Loading…
Reference in New Issue
Block a user