summaryrefslogtreecommitdiffstatshomepage
path: root/src/mess/machine
diff options
context:
space:
mode:
author Wilbert Pol <wilbert@jdg.info>2014-04-29 20:16:10 +0000
committer Wilbert Pol <wilbert@jdg.info>2014-04-29 20:16:10 +0000
commit50150040e2a668f5164122ba28caeb51d67dc3e8 (patch)
tree1a0cd2562154aef45345247a77bfcbfe2c0656e0 /src/mess/machine
parent1cfcad0d3f99898493cde0b5712ade62b955e48b (diff)
(MESS) msx.c: Floppy cleanup (nw)
Diffstat (limited to 'src/mess/machine')
-rw-r--r--src/mess/machine/msx.c24
-rw-r--r--src/mess/machine/msx_slot.c97
2 files changed, 65 insertions, 56 deletions
diff --git a/src/mess/machine/msx.c b/src/mess/machine/msx.c
index 810c7576d11..d6c6e988cb6 100644
--- a/src/mess/machine/msx.c
+++ b/src/mess/machine/msx.c
@@ -373,7 +373,7 @@ MACHINE_START_MEMBER(msx_state,msx)
MACHINE_START_MEMBER(msx_state,msx2)
{
m_port_c_old = 0xff;
- m_dsk_stat = 0x7f;
+ m_dsk_stat = 0x3f;
}
MACHINE_RESET_MEMBER(msx_state,msx)
@@ -689,28 +689,6 @@ WRITE_LINE_MEMBER( msx_state::msx_wd179x_drq_w )
m_dsk_stat |= 0x80;
}
-const wd17xx_interface msx_wd17xx_interface =
-{
- DEVCB_LINE_VCC,
- DEVCB_DRIVER_LINE_MEMBER(msx_state, msx_wd179x_intrq_w),
- DEVCB_DRIVER_LINE_MEMBER(msx_state, msx_wd179x_drq_w),
- {FLOPPY_0, FLOPPY_1, NULL, NULL}
-};
-
-LEGACY_FLOPPY_OPTIONS_START(msx)
- LEGACY_FLOPPY_OPTION(msx, "dsk", "MSX SS", basicdsk_identify_default, basicdsk_construct_default, NULL,
- HEADS([1])
- TRACKS([80])
- SECTORS([9])
- SECTOR_LENGTH([512])
- FIRST_SECTOR_ID([1]))
- LEGACY_FLOPPY_OPTION(msx, "dsk", "MSX DS", basicdsk_identify_default, basicdsk_construct_default, NULL,
- HEADS([2])
- TRACKS([80])
- SECTORS([9])
- SECTOR_LENGTH([512])
- FIRST_SECTOR_ID([1]))
-LEGACY_FLOPPY_OPTIONS_END
/*
** The PPI functions
diff --git a/src/mess/machine/msx_slot.c b/src/mess/machine/msx_slot.c
index d9f08e53068..a5ae53997a8 100644
--- a/src/mess/machine/msx_slot.c
+++ b/src/mess/machine/msx_slot.c
@@ -22,7 +22,6 @@
#include "machine/i8255.h"
#include "includes/msx_slot.h"
#include "includes/msx.h"
-#include "machine/wd17xx.h"
#include "sound/k051649.h"
#include "sound/2413intf.h"
#include "sound/dac.h"
@@ -1230,17 +1229,18 @@ MSX_SLOT_INIT(diskrom)
MSX_SLOT_RESET(diskrom)
{
msx_state *drvstate = machine.driver_data<msx_state>();
- drvstate->m_wd179x->reset();
+ drvstate->m_fdc->soft_reset();
+ drvstate->m_fdc->dden_w(false);
}
READ8_MEMBER(msx_state::msx_diskrom_page1_r)
{
switch (offset)
{
- case 0: return m_wd179x->status_r (space, 0);
- case 1: return m_wd179x->track_r (space, 0);
- case 2: return m_wd179x->sector_r (space, 0);
- case 3: return m_wd179x->data_r (space, 0);
+ case 0: return m_fdc->status_r();
+ case 1: return m_fdc->track_r();
+ case 2: return m_fdc->sector_r();
+ case 3: return m_fdc->data_r();
case 7: return m_dsk_stat;
default:
return m_state[1]->m_mem[offset + 0x3ff8];
@@ -1254,13 +1254,13 @@ READ8_MEMBER(msx_state::msx_diskrom_page2_r)
switch (offset)
{
case 0x7f8:
- return m_wd179x->status_r (space, 0);
+ return m_fdc->status_r();
case 0x7f9:
- return m_wd179x->track_r (space, 0);
+ return m_fdc->track_r();
case 0x7fa:
- return m_wd179x->sector_r (space, 0);
+ return m_fdc->sector_r();
case 0x7fb:
- return m_wd179x->data_r (space, 0);
+ return m_fdc->data_r();
case 0x7ff:
return m_dsk_stat;
default:
@@ -1303,7 +1303,6 @@ MSX_SLOT_MAP(diskrom)
MSX_SLOT_WRITE(diskrom)
{
msx_state *drvstate = machine.driver_data<msx_state>();
- address_space &space = drvstate->m_maincpu->space(AS_PROGRAM);
if (addr >= 0xa000 && addr < 0xc000)
{
addr -= 0x4000;
@@ -1311,23 +1310,42 @@ MSX_SLOT_WRITE(diskrom)
switch (addr)
{
case 0x7ff8:
- drvstate->m_wd179x->command_w (space, 0, val);
+ drvstate->m_fdc->cmd_w(val);
break;
case 0x7ff9:
- drvstate->m_wd179x->track_w (space, 0, val);
+ drvstate->m_fdc->track_w(val);
break;
case 0x7ffa:
- drvstate->m_wd179x->sector_w (space, 0, val);
+ drvstate->m_fdc->sector_w(val);
break;
case 0x7ffb:
- drvstate->m_wd179x->data_w (space, 0, val);
+ drvstate->m_fdc->data_w(val);
break;
case 0x7ffc:
- drvstate->m_wd179x->set_side (val & 1);
+ if (drvstate->m_floppy)
+ {
+ drvstate->m_floppy->ss_w(val & 1);
+ }
state->m_mem[0x3ffc] = val | 0xfe;
break;
case 0x7ffd:
- drvstate->m_wd179x->set_drive (val & 1);
+ switch (val & 3)
+ {
+ case 0: case 2:
+ drvstate->m_floppy = (drvstate->m_floppy0) ? drvstate->m_floppy0->get_device() : NULL;
+ break;
+ case 1:
+ drvstate->m_floppy = (drvstate->m_floppy1) ? drvstate->m_floppy1->get_device() : NULL;
+ break;
+ default:
+ drvstate->m_floppy = NULL;
+ }
+ if (drvstate->m_floppy)
+ {
+ drvstate->m_floppy->mon_w((val & 0x80) ? 0 : 1);
+ drvstate->m_floppy->ss_w(state->m_mem[0x3ffc] & 1);
+ }
+ drvstate->m_fdc->set_floppy(drvstate->m_floppy);
if ((state->m_mem[0x3ffd] ^ val) & 0x40)
{
set_led_status (machine, 0, !(val & 0x40));
@@ -1355,17 +1373,17 @@ MSX_SLOT_INIT(diskrom2)
MSX_SLOT_RESET(diskrom2)
{
msx_state *drvstate = machine.driver_data<msx_state>();
- drvstate->m_wd179x->reset();
+ drvstate->m_fdc->reset();
}
READ8_MEMBER(msx_state::msx_diskrom2_page1_r)
{
switch (offset)
{
- case 0: return m_wd179x->status_r(space, 0);
- case 1: return m_wd179x->track_r(space, 0);
- case 2: return m_wd179x->sector_r(space, 0);
- case 3: return m_wd179x->data_r(space, 0);
+ case 0: return m_fdc->status_r();
+ case 1: return m_fdc->track_r();
+ case 2: return m_fdc->sector_r();
+ case 3: return m_fdc->data_r();
case 4: return m_dsk_stat;
default:
return m_state[1]->m_mem[offset + 0x3ff8];
@@ -1379,13 +1397,13 @@ READ8_MEMBER(msx_state::msx_diskrom2_page2_r)
switch (offset)
{
case 0x7b8:
- return m_wd179x->status_r (space, 0);
+ return m_fdc->status_r();
case 0x7b9:
- return m_wd179x->track_r (space, 0);
+ return m_fdc->track_r();
case 0x7ba:
- return m_wd179x->sector_r (space, 0);
+ return m_fdc->sector_r();
case 0x7bb:
- return m_wd179x->data_r (space, 0);
+ return m_fdc->data_r();
case 0x7bc:
return m_dsk_stat;
default:
@@ -1427,7 +1445,6 @@ MSX_SLOT_MAP(diskrom2)
MSX_SLOT_WRITE(diskrom2)
{
msx_state *drvstate = machine.driver_data<msx_state>();
- address_space &space = drvstate->m_maincpu->space(AS_PROGRAM);
if (addr >= 0xa000 && addr < 0xc000)
{
addr -= 0x4000;
@@ -1435,21 +1452,35 @@ MSX_SLOT_WRITE(diskrom2)
switch (addr)
{
case 0x7fb8:
- drvstate->m_wd179x->command_w (space, 0, val);
+ drvstate->m_fdc->cmd_w(val);
break;
case 0x7fb9:
- drvstate->m_wd179x->track_w (space, 0, val);
+ drvstate->m_fdc->track_w(val);
break;
case 0x7fba:
- drvstate->m_wd179x->sector_w (space, 0, val);
+ drvstate->m_fdc->sector_w(val);
break;
case 0x7fbb:
- drvstate->m_wd179x->data_w (space, 0, val);
+ drvstate->m_fdc->data_w(val);
break;
case 0x7fbc:
- drvstate->m_wd179x->set_side (val & 1);
+ switch(val & 3)
+ {
+ case 1:
+ drvstate->m_floppy = (drvstate->m_floppy0) ? drvstate->m_floppy0->get_device() : NULL;
+ break;
+ case 2:
+ drvstate->m_floppy = (drvstate->m_floppy1) ? drvstate->m_floppy1->get_device() : NULL;
+ break;
+ default:
+ drvstate->m_floppy = NULL;
+ }
+ if (drvstate->m_floppy) {
+ drvstate->m_floppy->ss_w((val & 4) ? 1 : 0);
+ drvstate->m_floppy->mon_w((val & 8) ? 0 : 1);
+ }
state->m_mem[0x3fbc] = val | 0xfe;
- drvstate->m_wd179x->set_drive (val & 1);
+ drvstate->m_fdc->set_floppy(drvstate->m_floppy);
if ((state->m_mem[0x3fbc] ^ val) & 0x40)
{
set_led_status (machine, 0, !(val & 0x40));