x1/x1twin: updated to use the new wd fdc. bonus: formatting disks now

works in hubasic.
This commit is contained in:
Dirk Best 2015-05-31 10:40:18 +02:00
parent 0c45c0f1f6
commit 2f7882fbff
6 changed files with 137 additions and 52 deletions

View File

@ -391,6 +391,8 @@ project "formats"
MAME_DIR .. "src/lib/formats/wd177x_dsk.h",
MAME_DIR .. "src/lib/formats/x07_cas.c",
MAME_DIR .. "src/lib/formats/x07_cas.h",
MAME_DIR .. "src/lib/formats/x1_dsk.c",
MAME_DIR .. "src/lib/formats/x1_dsk.h",
MAME_DIR .. "src/lib/formats/x1_tap.c",
MAME_DIR .. "src/lib/formats/x1_tap.h",
MAME_DIR .. "src/lib/formats/xdf_dsk.c",

41
src/lib/formats/x1_dsk.c Normal file
View File

@ -0,0 +1,41 @@
// license:GPL-2.0+
// copyright-holders:Dirk Best
/***************************************************************************
Sharp X1
Disk image format
***************************************************************************/
#include "x1_dsk.h"
x1_format::x1_format() : wd177x_format(formats)
{
}
const char *x1_format::name() const
{
return "x1";
}
const char *x1_format::description() const
{
return "Sharp X1 disk image";
}
const char *x1_format::extensions() const
{
return "2d";
}
const x1_format::format x1_format::formats[] =
{
{
floppy_image::FF_525, floppy_image::DSDD, floppy_image::MFM,
2000, 16, 40, 2, 256, {}, 1, {}, 32, 22, 54
},
{}
};
const floppy_format_type FLOPPY_X1_FORMAT = &floppy_image_format_creator<x1_format>;

33
src/lib/formats/x1_dsk.h Normal file
View File

@ -0,0 +1,33 @@
// license:GPL-2.0+
// copyright-holders:Dirk Best
/***************************************************************************
Sharp X1
Disk image format
***************************************************************************/
#pragma once
#ifndef __X1_DSK_H__
#define __X1_DSK_H__
#include "wd177x_dsk.h"
class x1_format : public wd177x_format
{
public:
x1_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_X1_FORMAT;
#endif // __X1_DSK_H__

View File

@ -206,6 +206,7 @@
************************************************************************************************/
#include "includes/x1.h"
#include "formats/x1_dsk.h"
#define MAIN_CLOCK XTAL_16MHz
#define VDP_CLOCK XTAL_42_9545MHz
@ -1021,10 +1022,12 @@ READ8_MEMBER( x1_state::x1_fdc_r )
WRITE8_MEMBER( x1_state::x1_fdc_w )
{
floppy_image_device *floppy = NULL;
switch(offset+0xff8)
{
case 0x0ff8:
m_fdc->command_w(space, offset,data);
m_fdc->cmd_w(space, offset,data);
break;
case 0x0ff9:
m_fdc->track_w(space, offset,data);
@ -1035,12 +1038,25 @@ WRITE8_MEMBER( x1_state::x1_fdc_w )
case 0x0ffb:
m_fdc->data_w(space, offset,data);
break;
case 0x0ffc:
m_fdc->set_drive(data & 3);
floppy_get_device(machine(), data & 3)->floppy_mon_w(!BIT(data, 7));
floppy_get_device(machine(), data & 3)->floppy_drive_set_ready_state(data & 0x80,0);
m_fdc->set_side(BIT(data, 4));
switch (data & 0x03)
{
case 0: floppy = m_floppy0->get_device(); break;
case 1: floppy = m_floppy1->get_device(); break;
case 2: floppy = m_floppy2->get_device(); break;
case 3: floppy = m_floppy3->get_device(); break;
}
m_fdc->set_floppy(floppy);
if (floppy)
{
floppy->ss_w(BIT(data, 4));
floppy->mon_w(!BIT(data, 7));
}
break;
case 0x0ffd:
case 0x0ffe:
case 0x0fff:
@ -2414,21 +2430,13 @@ PALETTE_INIT_MEMBER(x1_state,x1)
palette.set_pen_color(i,rgb_t(0x00,0x00,0x00));
}
static LEGACY_FLOPPY_OPTIONS_START( x1 )
LEGACY_FLOPPY_OPTION( img2d, "2d", "2D disk image", basicdsk_identify_default, basicdsk_construct_default, NULL,
HEADS([2])
TRACKS([40])
SECTORS([16])
SECTOR_LENGTH([256])
FIRST_SECTOR_ID([1]))
LEGACY_FLOPPY_OPTIONS_END
FLOPPY_FORMATS_MEMBER( x1_state::floppy_formats )
FLOPPY_X1_FORMAT
FLOPPY_FORMATS_END
static const floppy_interface x1_floppy_interface =
{
FLOPPY_STANDARD_5_25_DSDD_40,
LEGACY_FLOPPY_OPTIONS_NAME(x1),
"floppy_5_25"
};
static SLOT_INTERFACE_START( x1_floppies )
SLOT_INTERFACE("dd", FLOPPY_525_DD)
SLOT_INTERFACE_END
static MACHINE_CONFIG_START( x1, x1_state )
/* basic machine hardware */
@ -2475,8 +2483,14 @@ static MACHINE_CONFIG_START( x1, x1_state )
MCFG_VIDEO_START_OVERRIDE(x1_state,x1)
MCFG_DEVICE_ADD("fdc", MB8877, 0)
MCFG_WD17XX_DEFAULT_DRIVE4_TAGS
MCFG_MB8877x_ADD("fdc", MAIN_CLOCK / 16)
MCFG_FLOPPY_DRIVE_ADD("fdc:0", x1_floppies, "dd", x1_state::floppy_formats)
MCFG_FLOPPY_DRIVE_ADD("fdc:1", x1_floppies, "dd", x1_state::floppy_formats)
MCFG_FLOPPY_DRIVE_ADD("fdc:2", x1_floppies, "dd", x1_state::floppy_formats)
MCFG_FLOPPY_DRIVE_ADD("fdc:3", x1_floppies, "dd", x1_state::floppy_formats)
MCFG_SOFTWARE_LIST_ADD("flop_list","x1_flop")
MCFG_GENERIC_CARTSLOT_ADD("cartslot", generic_plain_slot, "x1_cart")
MCFG_GENERIC_EXTENSIONS("bin,rom")
@ -2502,9 +2516,6 @@ static MACHINE_CONFIG_START( x1, x1_state )
MCFG_SOFTWARE_LIST_ADD("cass_list","x1_cass")
MCFG_LEGACY_FLOPPY_4_DRIVES_ADD(x1_floppy_interface)
MCFG_SOFTWARE_LIST_ADD("flop_list","x1_flop")
MCFG_TIMER_DRIVER_ADD_PERIODIC("keyboard_timer", x1_state, x1_keyboard_callback, attotime::from_hz(250))
MCFG_TIMER_DRIVER_ADD_PERIODIC("cmt_wind_timer", x1_state, x1_cmt_wind_timer, attotime::from_hz(16))
MACHINE_CONFIG_END
@ -2527,10 +2538,8 @@ static MACHINE_CONFIG_DERIVED( x1turbo, x1 )
MCFG_Z80DMA_IN_IORQ_CB(READ8(x1_state, io_read_byte))
MCFG_Z80DMA_OUT_IORQ_CB(WRITE8(x1_state, io_write_byte))
MCFG_DEVICE_REMOVE("fdc")
MCFG_DEVICE_ADD("fdc", MB8877, 0)
MCFG_WD17XX_DEFAULT_DRIVE4_TAGS
MCFG_WD17XX_DRQ_CALLBACK(WRITELINE(x1_state,fdc_drq_w))
MCFG_DEVICE_MODIFY("fdc")
MCFG_WD_FDC_DRQ_CALLBACK(WRITELINE(x1_state, fdc_drq_w))
MCFG_YM2151_ADD("ym", MAIN_CLOCK/8) //option board
MCFG_SOUND_ROUTE(0, "lspeaker", 0.50)

View File

@ -15,6 +15,7 @@
************************************************************************************************/
#include "includes/x1.h"
#include "formats/x1_dsk.h"
#include "includes/pce.h"
//#include "cpu/h6280/h6280.h"
@ -394,23 +395,9 @@ static const z80_daisy_config x1_daisy[] =
{ NULL }
};
static LEGACY_FLOPPY_OPTIONS_START( x1 )
LEGACY_FLOPPY_OPTION( img2d, "2d", "2D disk image", basicdsk_identify_default, basicdsk_construct_default, NULL,
HEADS([2])
TRACKS([40])
SECTORS([16])
SECTOR_LENGTH([256])
FIRST_SECTOR_ID([1]))
LEGACY_FLOPPY_OPTIONS_END
static const floppy_interface x1_floppy_interface =
{
FLOPPY_STANDARD_5_25_DSDD_40,
LEGACY_FLOPPY_OPTIONS_NAME(x1),
"floppy_5_25"
};
static SLOT_INTERFACE_START( x1_floppies )
SLOT_INTERFACE("dd", FLOPPY_525_DD)
SLOT_INTERFACE_END
static MACHINE_CONFIG_START( x1twin, x1twin_state )
/* basic machine hardware */
@ -471,8 +458,14 @@ static MACHINE_CONFIG_START( x1twin, x1twin_state )
MCFG_VIDEO_START_OVERRIDE(x1twin_state,x1)
MCFG_DEVICE_ADD("fdc", MB8877, 0)
MCFG_WD17XX_DEFAULT_DRIVE4_TAGS
MCFG_MB8877x_ADD("fdc", MAIN_CLOCK / 16)
MCFG_FLOPPY_DRIVE_ADD("fdc:0", x1_floppies, "dd", x1_state::floppy_formats)
MCFG_FLOPPY_DRIVE_ADD("fdc:1", x1_floppies, "dd", x1_state::floppy_formats)
MCFG_FLOPPY_DRIVE_ADD("fdc:2", x1_floppies, "dd", x1_state::floppy_formats)
MCFG_FLOPPY_DRIVE_ADD("fdc:3", x1_floppies, "dd", x1_state::floppy_formats)
MCFG_SOFTWARE_LIST_ADD("flop_list","x1_flop")
MCFG_GENERIC_CARTSLOT_ADD("cartslot", generic_plain_slot, "x1_cart")
MCFG_GENERIC_EXTENSIONS("bin,rom")
@ -503,9 +496,6 @@ static MACHINE_CONFIG_START( x1twin, x1twin_state )
MCFG_SOFTWARE_LIST_ADD("cass_list","x1_cass")
MCFG_LEGACY_FLOPPY_4_DRIVES_ADD(x1_floppy_interface)
MCFG_SOFTWARE_LIST_ADD("flop_list","x1_flop")
#if 0
MCFG_SOUND_ADD("c6280", C6280, PCE_MAIN_CLOCK/6)
MCFG_C6280_CPU("pce_cpu")

View File

@ -15,7 +15,7 @@
#include "machine/z80ctc.h"
#include "machine/z80dart.h"
#include "machine/i8255.h"
#include "machine/wd17xx.h"
#include "machine/wd_fdc.h"
#include "machine/z80dma.h"
#include "video/mc6845.h"
#include "sound/2151intf.h"
@ -81,6 +81,10 @@ public:
m_cassette(*this, "cassette"),
m_cart(*this, "cartslot"),
m_fdc(*this, "fdc"),
m_floppy0(*this, "fdc:0"),
m_floppy1(*this, "fdc:1"),
m_floppy2(*this, "fdc:2"),
m_floppy3(*this, "fdc:3"),
m_crtc(*this, "crtc"),
m_ctc(*this, "ctc"),
m_gfxdecode(*this, "gfxdecode"),
@ -88,10 +92,16 @@ public:
m_dma(*this, "dma")
{ }
DECLARE_FLOPPY_FORMATS(floppy_formats);
required_device<cpu_device> m_maincpu;
required_device<cassette_image_device> m_cassette;
required_device<generic_slot_device> m_cart;
required_device<mb8877_device> m_fdc;
required_device<mb8877_t> m_fdc;
required_device<floppy_connector> m_floppy0;
required_device<floppy_connector> m_floppy1;
required_device<floppy_connector> m_floppy2;
required_device<floppy_connector> m_floppy3;
required_device<mc6845_device> m_crtc;
required_device<z80ctc_device> m_ctc;