summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--scripts/genie.lua15
-rw-r--r--scripts/src/3rdparty.lua1
-rw-r--r--scripts/src/lib.lua2
-rw-r--r--src/lib/formats/bbc_dsk.c53
-rw-r--r--src/lib/formats/bbc_dsk.h33
-rw-r--r--src/mess/drivers/bbc.c62
-rw-r--r--src/mess/includes/bbc.h4
-rw-r--r--src/mess/machine/bbc.c98
8 files changed, 73 insertions, 195 deletions
diff --git a/scripts/genie.lua b/scripts/genie.lua
index 10eed679dfb..7a0f2128fe5 100644
--- a/scripts/genie.lua
+++ b/scripts/genie.lua
@@ -728,9 +728,23 @@ if _OPTIONS["OPTIMIZE"] then
buildoptions {
"-flto",
}
+-- buildoptions {
+-- "-ffat-lto-objects",
+-- }
+-- buildoptions {
+-- "-flto-partition=1to1",
+-- }
linkoptions {
"-flto",
}
+-- linkoptions {
+-- "-flto-partition=1to1",
+-- }
+-- linkoptions {
+-- "-ffat-lto-objects",
+-- }
+
+
end
end
@@ -864,6 +878,7 @@ end
if (version >= 40800) then
-- array bounds checking seems to be buggy in 4.8.1 (try it on video/stvvdp1.c and video/model1.c without -Wno-array-bounds)
buildoptions {
+ "-Wno-unused-variable",
"-Wno-array-bounds"
}
end
diff --git a/scripts/src/3rdparty.lua b/scripts/src/3rdparty.lua
index aad89112883..e744db9b79b 100644
--- a/scripts/src/3rdparty.lua
+++ b/scripts/src/3rdparty.lua
@@ -621,7 +621,6 @@ project "portaudio"
"-Wno-missing-braces",
"-Wno-unused-but-set-variable",
"-Wno-maybe-uninitialized",
- "-Wno-unused-variable",
"-Wno-unused-value",
"-Wno-unused-function",
}
diff --git a/scripts/src/lib.lua b/scripts/src/lib.lua
index a4bca8d6c50..54540f0f630 100644
--- a/scripts/src/lib.lua
+++ b/scripts/src/lib.lua
@@ -158,8 +158,6 @@ project "formats"
MAME_DIR .. "src/lib/formats/atarist_dsk.h",
MAME_DIR .. "src/lib/formats/atom_tap.c",
MAME_DIR .. "src/lib/formats/atom_tap.h",
- MAME_DIR .. "src/lib/formats/bbc_dsk.c",
- MAME_DIR .. "src/lib/formats/bbc_dsk.h",
MAME_DIR .. "src/lib/formats/bw2_dsk.c",
MAME_DIR .. "src/lib/formats/bw2_dsk.h",
MAME_DIR .. "src/lib/formats/bw12_dsk.c",
diff --git a/src/lib/formats/bbc_dsk.c b/src/lib/formats/bbc_dsk.c
deleted file mode 100644
index dfa21213e20..00000000000
--- a/src/lib/formats/bbc_dsk.c
+++ /dev/null
@@ -1,53 +0,0 @@
-// license:GPL-2.0+
-// copyright-holders:Dirk Best
-/***************************************************************************
-
- BBC Micro
-
- Disk image format
-
-***************************************************************************/
-
-#include "bbc_dsk.h"
-
-bbc_format::bbc_format() : wd177x_format(formats)
-{
-}
-
-const char *bbc_format::name() const
-{
- return "bbc";
-}
-
-const char *bbc_format::description() const
-{
- return "BBC Micro disk image";
-}
-
-const char *bbc_format::extensions() const
-{
- return "bbc,img,ssd,dsd";
-}
-
-const bbc_format::format bbc_format::formats[] =
-{
- { // 100k single sided single density
- floppy_image::FF_525, floppy_image::SSSD, floppy_image::FM,
- 4000, 10, 40, 1, 256, {}, 0, {}, 16, 11, 19
- },
- { // 200k double sided single density
- floppy_image::FF_525, floppy_image::DSSD, floppy_image::FM,
- 4000, 10, 40, 2, 256, {}, 0, {}, 16, 11, 19
- },
- { // 200k single sided double density
- floppy_image::FF_525, floppy_image::SSQD, floppy_image::FM,
- 4000, 10, 80, 1, 256, {}, 0, {}, 16, 11, 19
- },
- { // 400k double sided double density
- floppy_image::FF_525, floppy_image::DSQD, floppy_image::FM,
- 4000, 10, 80, 2, 256, {}, 0, {}, 16, 11, 19
- },
- {}
-};
-
-const floppy_format_type FLOPPY_BBC_FORMAT = &floppy_image_format_creator<bbc_format>;
diff --git a/src/lib/formats/bbc_dsk.h b/src/lib/formats/bbc_dsk.h
deleted file mode 100644
index e2520781a15..00000000000
--- a/src/lib/formats/bbc_dsk.h
+++ /dev/null
@@ -1,33 +0,0 @@
-// license:GPL-2.0+
-// copyright-holders:Dirk Best
-/***************************************************************************
-
- BBC Micro
-
- Disk image format
-
-***************************************************************************/
-
-#pragma once
-
-#ifndef __BBC_DSK_H__
-#define __BBC_DSK_H__
-
-#include "wd177x_dsk.h"
-
-class bbc_format : public wd177x_format
-{
-public:
- bbc_format();
-
- virtual const char *name() const;
- virtual const char *description() const;
- virtual const char *extensions() const;
-
-private:
- static const format formats[];
-};
-
-extern const floppy_format_type FLOPPY_BBC_FORMAT;
-
-#endif // __BBC_DSK_H__
diff --git a/src/mess/drivers/bbc.c b/src/mess/drivers/bbc.c
index de7f17dee44..ca639730143 100644
--- a/src/mess/drivers/bbc.c
+++ b/src/mess/drivers/bbc.c
@@ -57,7 +57,6 @@
/* Devices */
#include "imagedev/flopdrv.h"
-#include "formats/bbc_dsk.h"
#include "formats/basicdsk.h"
#include "imagedev/cassette.h"
#include "formats/uef_cas.h"
@@ -610,19 +609,6 @@ static const floppy_interface bbc_floppy_interface =
"floppy_5_25"
};
-FLOPPY_FORMATS_MEMBER( bbc_state::floppy_formats )
- FLOPPY_BBC_FORMAT
-FLOPPY_FORMATS_END
-
-static SLOT_INTERFACE_START( bbc_floppies )
- SLOT_INTERFACE("sssd", FLOPPY_525_SSSD)
- SLOT_INTERFACE("sd", FLOPPY_525_SD)
- SLOT_INTERFACE("ssdd", FLOPPY_525_SSDD)
- SLOT_INTERFACE("dd", FLOPPY_525_DD)
- SLOT_INTERFACE("ssqd", FLOPPY_525_SSQD)
- SLOT_INTERFACE("qd", FLOPPY_525_QD)
-SLOT_INTERFACE_END
-
WRITE_LINE_MEMBER(bbc_state::econet_clk_w)
{
m_adlc->rxc_w(state);
@@ -774,14 +760,12 @@ static MACHINE_CONFIG_DERIVED( bbcb, bbca )
MCFG_I8271_IRQ_CALLBACK(WRITELINE(bbc_state, bbc_i8271_interrupt))
MCFG_I8271_FLOPPIES(FLOPPY_0, FLOPPY_1)
- MCFG_LEGACY_FLOPPY_2_DRIVES_ADD(bbc_floppy_interface)
-
- MCFG_WD1770x_ADD("wd177x", XTAL_16MHz / 2)
- MCFG_WD_FDC_INTRQ_CALLBACK(WRITELINE(bbc_state, bbc_wd177x_intrq_w))
- MCFG_WD_FDC_DRQ_CALLBACK(WRITELINE(bbc_state, bbc_wd177x_drq_w))
+ MCFG_DEVICE_ADD("wd177x", WD1770, 0)
+ MCFG_WD17XX_DEFAULT_DRIVE2_TAGS
+ MCFG_WD17XX_INTRQ_CALLBACK(WRITELINE(bbc_state, bbc_wd177x_intrq_w))
+ MCFG_WD17XX_DRQ_CALLBACK(WRITELINE(bbc_state, bbc_wd177x_drq_w))
- MCFG_FLOPPY_DRIVE_ADD("wd177x:0", bbc_floppies, "qd", bbc_state::floppy_formats)
- MCFG_FLOPPY_DRIVE_ADD("wd177x:1", bbc_floppies, "qd", bbc_state::floppy_formats)
+ MCFG_LEGACY_FLOPPY_2_DRIVES_ADD(bbc_floppy_interface)
/* software lists */
MCFG_DEVICE_REMOVE("cass_ls_a")
@@ -838,14 +822,12 @@ static MACHINE_CONFIG_DERIVED( bbcb_us, bbca )
MCFG_I8271_IRQ_CALLBACK(WRITELINE(bbc_state, bbc_i8271_interrupt))
MCFG_I8271_FLOPPIES(FLOPPY_0, FLOPPY_1)
- MCFG_LEGACY_FLOPPY_2_DRIVES_ADD(bbc_floppy_interface)
+ MCFG_DEVICE_ADD("wd177x", WD1770, 0)
+ MCFG_WD17XX_DEFAULT_DRIVE2_TAGS
+ MCFG_WD17XX_INTRQ_CALLBACK(WRITELINE(bbc_state, bbc_wd177x_intrq_w))
+ MCFG_WD17XX_DRQ_CALLBACK(WRITELINE(bbc_state, bbc_wd177x_drq_w))
- MCFG_WD1770x_ADD("wd177x", XTAL_16MHz / 2)
- MCFG_WD_FDC_INTRQ_CALLBACK(WRITELINE(bbc_state, bbc_wd177x_intrq_w))
- MCFG_WD_FDC_DRQ_CALLBACK(WRITELINE(bbc_state, bbc_wd177x_drq_w))
-
- MCFG_FLOPPY_DRIVE_ADD("wd177x:0", bbc_floppies, "qd", bbc_state::floppy_formats)
- MCFG_FLOPPY_DRIVE_ADD("wd177x:1", bbc_floppies, "qd", bbc_state::floppy_formats)
+ MCFG_LEGACY_FLOPPY_2_DRIVES_ADD(bbc_floppy_interface)
/* software lists */
MCFG_DEVICE_REMOVE("cass_ls_a")
@@ -870,8 +852,6 @@ static MACHINE_CONFIG_DERIVED( bbcbp, bbcb )
/* fdc */
MCFG_DEVICE_REMOVE("i8271")
- MCFG_DEVICE_REMOVE(FLOPPY_0)
- MCFG_DEVICE_REMOVE(FLOPPY_1)
MACHINE_CONFIG_END
@@ -1001,12 +981,12 @@ static MACHINE_CONFIG_START( bbcm, bbc_state )
MCFG_VIA6522_IRQ_HANDLER(WRITELINE(bbc_state, bbcb_via_user_irq_w))
/* fdc */
- MCFG_WD1770x_ADD("wd177x", XTAL_16MHz / 2)
- MCFG_WD_FDC_INTRQ_CALLBACK(WRITELINE(bbc_state, bbc_wd177x_intrq_w))
- MCFG_WD_FDC_DRQ_CALLBACK(WRITELINE(bbc_state, bbc_wd177x_drq_w))
+ MCFG_DEVICE_ADD("wd177x", WD1770, 0)
+ MCFG_WD17XX_DEFAULT_DRIVE2_TAGS
+ MCFG_WD17XX_INTRQ_CALLBACK(WRITELINE(bbc_state, bbc_wd177x_intrq_w))
+ MCFG_WD17XX_DRQ_CALLBACK(WRITELINE(bbc_state, bbc_wd177x_drq_w))
- MCFG_FLOPPY_DRIVE_ADD("wd177x:0", bbc_floppies, "qd", bbc_state::floppy_formats)
- MCFG_FLOPPY_DRIVE_ADD("wd177x:1", bbc_floppies, "qd", bbc_state::floppy_formats)
+ MCFG_LEGACY_FLOPPY_2_DRIVES_ADD(bbc_floppy_interface)
/* econet */
MCFG_DEVICE_ADD("mc6854", MC6854, 0)
@@ -1088,14 +1068,10 @@ static MACHINE_CONFIG_DERIVED( bbcmc, bbcm )
/* fdc */
MCFG_DEVICE_REMOVE("wd177x")
-
-// MCFG_WD1772x_ADD("wd177x", XTAL_16MHz / 2)
- MCFG_WD1770x_ADD("wd177x", XTAL_16MHz / 2)
- MCFG_WD_FDC_INTRQ_CALLBACK(WRITELINE(bbc_state, bbc_wd177x_intrq_w))
- MCFG_WD_FDC_DRQ_CALLBACK(WRITELINE(bbc_state, bbc_wd177x_drq_w))
-
- MCFG_FLOPPY_DRIVE_ADD("wd177x:0", bbc_floppies, "qd", bbc_state::floppy_formats)
- MCFG_FLOPPY_DRIVE_ADD("wd177x:1", bbc_floppies, "qd", bbc_state::floppy_formats)
+ MCFG_DEVICE_ADD("wd177x", WD1772, 0)
+ MCFG_WD17XX_DEFAULT_DRIVE2_TAGS
+ MCFG_WD17XX_INTRQ_CALLBACK(WRITELINE(bbc_state, bbc_wd177x_intrq_w))
+ MCFG_WD17XX_DRQ_CALLBACK(WRITELINE(bbc_state, bbc_wd177x_drq_w))
/* software lists */
MCFG_SOFTWARE_LIST_REMOVE("cart_ls_m")
diff --git a/src/mess/includes/bbc.h b/src/mess/includes/bbc.h
index 11bd1c13eb1..98e1c9b5a6c 100644
--- a/src/mess/includes/bbc.h
+++ b/src/mess/includes/bbc.h
@@ -20,7 +20,7 @@
#include "machine/mc6854.h"
#include "machine/ram.h"
#include "machine/i8271.h"
-#include "machine/wd_fdc.h"
+#include "machine/wd17xx.h"
#include "machine/upd7002.h"
#include "video/mc6845.h"
#include "video/saa5050.h"
@@ -80,8 +80,6 @@ public:
m_palette(*this, "palette")
{ }
- DECLARE_FLOPPY_FORMATS(floppy_formats);
-
DECLARE_WRITE8_MEMBER(bbc_page_selecta_w);
DECLARE_WRITE8_MEMBER(bbc_memorya1_w);
DECLARE_WRITE8_MEMBER(bbc_page_selectb_w);
diff --git a/src/mess/machine/bbc.c b/src/mess/machine/bbc.c
index ef73ee4700a..efc9da1102e 100644
--- a/src/mess/machine/bbc.c
+++ b/src/mess/machine/bbc.c
@@ -17,7 +17,7 @@
#include "cpu/m6502/m6502.h"
#include "sound/tms5220.h"
#include "machine/6522via.h"
-#include "machine/wd_fdc.h"
+#include "machine/wd17xx.h"
#include "imagedev/flopdrv.h"
#include "includes/bbc.h"
#include "machine/mc146818.h"
@@ -1606,28 +1606,20 @@ WRITE_LINE_MEMBER(bbc_state::bbc_wd177x_drq_w)
WRITE8_MEMBER(bbc_state::bbc_wd177x_status_w)
{
- wd1770_t *fdc = machine().device<wd1770_t>("wd177x");
- floppy_image_device *floppy0 = machine().device<floppy_connector>("wd177x:0")->get_device();
- floppy_image_device *floppy1 = machine().device<floppy_connector>("wd177x:1")->get_device();
- floppy_image_device *floppy = NULL;
-
+ wd1770_device *fdc = machine().device<wd1770_device>("wd177x");
m_drive_control = data;
- // bit 0, 1: drive select
- if (BIT(data, 0)) floppy = floppy0;
- if (BIT(data, 1)) floppy = floppy1;
-
- fdc->set_floppy(floppy);
+ /* set drive */
+ if ((data>>0) & 0x01) fdc->set_drive(0);
+ if ((data>>1) & 0x01) fdc->set_drive(1);
- // bit 2: side select
- if (floppy)
- floppy->ss_w(BIT(data, 2));
+ /* set side */
+ fdc->set_side((data>>2) & 0x01);
- // bit 3: density
+ /* set density */
fdc->dden_w(BIT(data, 3));
- // bit 4: interrupt enable
- m_1770_IntEnabled = !BIT(data, 4);
+ m_1770_IntEnabled=(((data>>4) & 0x01)==0);
}
@@ -1635,7 +1627,7 @@ WRITE8_MEMBER(bbc_state::bbc_wd177x_status_w)
READ8_MEMBER(bbc_state::bbc_wd1770_read)
{
int retval=0xff;
- wd1770_t *fdc = machine().device<wd1770_t>("wd177x");
+ wd1770_device *fdc = machine().device<wd1770_device>("wd177x");
switch (offset)
{
case 4:
@@ -1653,22 +1645,22 @@ READ8_MEMBER(bbc_state::bbc_wd1770_read)
default:
break;
}
- //logerror("wd177x read: $%02X $%02X\n", offset,retval);
+ logerror("wd177x read: $%02X $%02X\n", offset,retval);
return retval;
}
WRITE8_MEMBER(bbc_state::bbc_wd1770_write)
{
- wd1770_t *fdc = machine().device<wd1770_t>("wd177x");
- //logerror("wd177x write: $%02X $%02X\n", offset,data);
+ wd1770_device *fdc = machine().device<wd1770_device>("wd177x");
+ logerror("wd177x write: $%02X $%02X\n", offset,data);
switch (offset)
{
case 0:
bbc_wd177x_status_w(space, 0, data);
break;
case 4:
- fdc->cmd_w(space, 0, data);
+ fdc->command_w(space, 0, data);
break;
case 5:
fdc->track_w(space, 0, data);
@@ -1723,34 +1715,26 @@ AM_RANGE(0xfc00, 0xfdff) AM_READWRITE(bbc_opus_read , bbc_opus_write )
WRITE8_MEMBER(bbc_state::bbc_opus_status_w)
{
- wd1770_t *fdc = machine().device<wd1770_t>("wd177x");
- floppy_image_device *floppy0 = machine().device<floppy_connector>("wd177x:0")->get_device();
- floppy_image_device *floppy1 = machine().device<floppy_connector>("wd177x:1")->get_device();
- floppy_image_device *floppy = NULL;
-
+ wd1770_device *fdc = machine().device<wd1770_device>("wd177x");
m_drive_control = data;
- // bit 1, 2: drive select
- if (BIT(data, 1)) floppy = floppy0;
- if (BIT(data, 2)) floppy = floppy1;
-
- fdc->set_floppy(floppy);
+ /* set drive */
+ if ((data>>1) & 0x01) fdc->set_drive(0);
+ if ((data>>2) & 0x01) fdc->set_drive(1);
- // bit 0: side select
- if (floppy)
- floppy->ss_w(BIT(data, 0));
+ /* set side */
+ fdc->set_side((data>>0) & 0x01);
- // bit 5: density
+ /* set density */
fdc->dden_w(BIT(data, 5));
- // bit 4: interrupt enable
- m_1770_IntEnabled = BIT(data, 4);
+ m_1770_IntEnabled=(data>>4) & 0x01;
}
READ8_MEMBER(bbc_state::bbc_opus_read)
{
- wd1770_t *fdc = machine().device<wd1770_t>("wd177x");
- //logerror("wd177x read: $%02X\n", offset);
+ wd1770_device *fdc = machine().device<wd1770_device>("wd177x");
+ logerror("wd177x read: $%02X\n", offset);
if (m_DFSType==6)
{
@@ -1778,8 +1762,8 @@ READ8_MEMBER(bbc_state::bbc_opus_read)
WRITE8_MEMBER(bbc_state::bbc_opus_write)
{
- wd1770_t *fdc = machine().device<wd1770_t>("wd177x");
- //logerror("wd177x write: $%02X $%02X\n", offset,data);
+ wd1770_device *fdc = machine().device<wd1770_device>("wd177x");
+ logerror("wd177x write: $%02X $%02X\n", offset,data);
if (m_DFSType==6)
{
@@ -1788,7 +1772,7 @@ WRITE8_MEMBER(bbc_state::bbc_opus_write)
switch (offset)
{
case 0xf8:
- fdc->cmd_w(space, 0, data);
+ fdc->command_w(space, 0, data);
break;
case 0xf9:
fdc->track_w(space, 0, data);
@@ -1826,7 +1810,7 @@ BBC MASTER DISC SUPPORT
READ8_MEMBER(bbc_state::bbcm_wd1770_read)
{
int retval=0xff;
- wd1770_t *fdc = machine().device<wd1770_t>("wd177x");
+ wd1770_device *fdc = machine().device<wd1770_device>("wd177x");
switch (offset)
{
case 0:
@@ -1850,12 +1834,12 @@ READ8_MEMBER(bbc_state::bbcm_wd1770_read)
WRITE8_MEMBER(bbc_state::bbcm_wd1770_write)
{
- wd1770_t *fdc = machine().device<wd1770_t>("wd177x");
+ wd1770_device *fdc = machine().device<wd1770_device>("wd177x");
//logerror("wd177x write: $%02X $%02X\n", offset,data);
switch (offset)
{
case 0:
- fdc->cmd_w(space, 0, data);
+ fdc->command_w(space, 0, data);
break;
case 1:
fdc->track_w(space, 0, data);
@@ -1879,28 +1863,22 @@ READ8_MEMBER(bbc_state::bbcm_wd1770l_read)
WRITE8_MEMBER(bbc_state::bbcm_wd1770l_write)
{
- wd1770_t *fdc = machine().device<wd1770_t>("wd177x");
- floppy_image_device *floppy0 = machine().device<floppy_connector>("wd177x:0")->get_device();
- floppy_image_device *floppy1 = machine().device<floppy_connector>("wd177x:1")->get_device();
- floppy_image_device *floppy = NULL;
-
+ wd1770_device *fdc = machine().device<wd1770_device>("wd177x");
m_drive_control = data;
- // bit 0, 1: drive select
- if (BIT(data, 0)) floppy = floppy0;
- if (BIT(data, 1)) floppy = floppy1;
+ /* set drive */
+ if ((data>>0) & 0x01) fdc->set_drive(0);
+ if ((data>>1) & 0x01) fdc->set_drive(1);
- fdc->set_floppy(floppy);
+ /* set side */
+ fdc->set_side((data>>4) & 0x01);
- // bit 4: side select
- if (floppy)
- floppy->ss_w(BIT(data, 4));
-
- // bit 5: density
+ /* set density */
fdc->dden_w(BIT(data, 5));
// m_1770_IntEnabled=(((data>>4) & 0x01)==0);
m_1770_IntEnabled=1;
+
}