mirror of
https://github.com/holub/mame
synced 2025-07-01 00:09:18 +03:00
x1/x1twin: updated to use the new wd fdc. bonus: formatting disks now
works in hubasic.
This commit is contained in:
parent
0c45c0f1f6
commit
2f7882fbff
@ -391,6 +391,8 @@ project "formats"
|
|||||||
MAME_DIR .. "src/lib/formats/wd177x_dsk.h",
|
MAME_DIR .. "src/lib/formats/wd177x_dsk.h",
|
||||||
MAME_DIR .. "src/lib/formats/x07_cas.c",
|
MAME_DIR .. "src/lib/formats/x07_cas.c",
|
||||||
MAME_DIR .. "src/lib/formats/x07_cas.h",
|
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.c",
|
||||||
MAME_DIR .. "src/lib/formats/x1_tap.h",
|
MAME_DIR .. "src/lib/formats/x1_tap.h",
|
||||||
MAME_DIR .. "src/lib/formats/xdf_dsk.c",
|
MAME_DIR .. "src/lib/formats/xdf_dsk.c",
|
||||||
|
41
src/lib/formats/x1_dsk.c
Normal file
41
src/lib/formats/x1_dsk.c
Normal 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
33
src/lib/formats/x1_dsk.h
Normal 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__
|
@ -206,6 +206,7 @@
|
|||||||
************************************************************************************************/
|
************************************************************************************************/
|
||||||
|
|
||||||
#include "includes/x1.h"
|
#include "includes/x1.h"
|
||||||
|
#include "formats/x1_dsk.h"
|
||||||
|
|
||||||
#define MAIN_CLOCK XTAL_16MHz
|
#define MAIN_CLOCK XTAL_16MHz
|
||||||
#define VDP_CLOCK XTAL_42_9545MHz
|
#define VDP_CLOCK XTAL_42_9545MHz
|
||||||
@ -1021,10 +1022,12 @@ READ8_MEMBER( x1_state::x1_fdc_r )
|
|||||||
|
|
||||||
WRITE8_MEMBER( x1_state::x1_fdc_w )
|
WRITE8_MEMBER( x1_state::x1_fdc_w )
|
||||||
{
|
{
|
||||||
|
floppy_image_device *floppy = NULL;
|
||||||
|
|
||||||
switch(offset+0xff8)
|
switch(offset+0xff8)
|
||||||
{
|
{
|
||||||
case 0x0ff8:
|
case 0x0ff8:
|
||||||
m_fdc->command_w(space, offset,data);
|
m_fdc->cmd_w(space, offset,data);
|
||||||
break;
|
break;
|
||||||
case 0x0ff9:
|
case 0x0ff9:
|
||||||
m_fdc->track_w(space, offset,data);
|
m_fdc->track_w(space, offset,data);
|
||||||
@ -1035,12 +1038,25 @@ WRITE8_MEMBER( x1_state::x1_fdc_w )
|
|||||||
case 0x0ffb:
|
case 0x0ffb:
|
||||||
m_fdc->data_w(space, offset,data);
|
m_fdc->data_w(space, offset,data);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 0x0ffc:
|
case 0x0ffc:
|
||||||
m_fdc->set_drive(data & 3);
|
switch (data & 0x03)
|
||||||
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);
|
case 0: floppy = m_floppy0->get_device(); break;
|
||||||
m_fdc->set_side(BIT(data, 4));
|
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;
|
break;
|
||||||
|
|
||||||
case 0x0ffd:
|
case 0x0ffd:
|
||||||
case 0x0ffe:
|
case 0x0ffe:
|
||||||
case 0x0fff:
|
case 0x0fff:
|
||||||
@ -2414,21 +2430,13 @@ PALETTE_INIT_MEMBER(x1_state,x1)
|
|||||||
palette.set_pen_color(i,rgb_t(0x00,0x00,0x00));
|
palette.set_pen_color(i,rgb_t(0x00,0x00,0x00));
|
||||||
}
|
}
|
||||||
|
|
||||||
static LEGACY_FLOPPY_OPTIONS_START( x1 )
|
FLOPPY_FORMATS_MEMBER( x1_state::floppy_formats )
|
||||||
LEGACY_FLOPPY_OPTION( img2d, "2d", "2D disk image", basicdsk_identify_default, basicdsk_construct_default, NULL,
|
FLOPPY_X1_FORMAT
|
||||||
HEADS([2])
|
FLOPPY_FORMATS_END
|
||||||
TRACKS([40])
|
|
||||||
SECTORS([16])
|
|
||||||
SECTOR_LENGTH([256])
|
|
||||||
FIRST_SECTOR_ID([1]))
|
|
||||||
LEGACY_FLOPPY_OPTIONS_END
|
|
||||||
|
|
||||||
static const floppy_interface x1_floppy_interface =
|
static SLOT_INTERFACE_START( x1_floppies )
|
||||||
{
|
SLOT_INTERFACE("dd", FLOPPY_525_DD)
|
||||||
FLOPPY_STANDARD_5_25_DSDD_40,
|
SLOT_INTERFACE_END
|
||||||
LEGACY_FLOPPY_OPTIONS_NAME(x1),
|
|
||||||
"floppy_5_25"
|
|
||||||
};
|
|
||||||
|
|
||||||
static MACHINE_CONFIG_START( x1, x1_state )
|
static MACHINE_CONFIG_START( x1, x1_state )
|
||||||
/* basic machine hardware */
|
/* basic machine hardware */
|
||||||
@ -2475,8 +2483,14 @@ static MACHINE_CONFIG_START( x1, x1_state )
|
|||||||
|
|
||||||
MCFG_VIDEO_START_OVERRIDE(x1_state,x1)
|
MCFG_VIDEO_START_OVERRIDE(x1_state,x1)
|
||||||
|
|
||||||
MCFG_DEVICE_ADD("fdc", MB8877, 0)
|
MCFG_MB8877x_ADD("fdc", MAIN_CLOCK / 16)
|
||||||
MCFG_WD17XX_DEFAULT_DRIVE4_TAGS
|
|
||||||
|
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_CARTSLOT_ADD("cartslot", generic_plain_slot, "x1_cart")
|
||||||
MCFG_GENERIC_EXTENSIONS("bin,rom")
|
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_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("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))
|
MCFG_TIMER_DRIVER_ADD_PERIODIC("cmt_wind_timer", x1_state, x1_cmt_wind_timer, attotime::from_hz(16))
|
||||||
MACHINE_CONFIG_END
|
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_IN_IORQ_CB(READ8(x1_state, io_read_byte))
|
||||||
MCFG_Z80DMA_OUT_IORQ_CB(WRITE8(x1_state, io_write_byte))
|
MCFG_Z80DMA_OUT_IORQ_CB(WRITE8(x1_state, io_write_byte))
|
||||||
|
|
||||||
MCFG_DEVICE_REMOVE("fdc")
|
MCFG_DEVICE_MODIFY("fdc")
|
||||||
MCFG_DEVICE_ADD("fdc", MB8877, 0)
|
MCFG_WD_FDC_DRQ_CALLBACK(WRITELINE(x1_state, fdc_drq_w))
|
||||||
MCFG_WD17XX_DEFAULT_DRIVE4_TAGS
|
|
||||||
MCFG_WD17XX_DRQ_CALLBACK(WRITELINE(x1_state,fdc_drq_w))
|
|
||||||
|
|
||||||
MCFG_YM2151_ADD("ym", MAIN_CLOCK/8) //option board
|
MCFG_YM2151_ADD("ym", MAIN_CLOCK/8) //option board
|
||||||
MCFG_SOUND_ROUTE(0, "lspeaker", 0.50)
|
MCFG_SOUND_ROUTE(0, "lspeaker", 0.50)
|
||||||
|
@ -15,6 +15,7 @@
|
|||||||
************************************************************************************************/
|
************************************************************************************************/
|
||||||
|
|
||||||
#include "includes/x1.h"
|
#include "includes/x1.h"
|
||||||
|
#include "formats/x1_dsk.h"
|
||||||
|
|
||||||
#include "includes/pce.h"
|
#include "includes/pce.h"
|
||||||
//#include "cpu/h6280/h6280.h"
|
//#include "cpu/h6280/h6280.h"
|
||||||
@ -394,23 +395,9 @@ static const z80_daisy_config x1_daisy[] =
|
|||||||
{ NULL }
|
{ NULL }
|
||||||
};
|
};
|
||||||
|
|
||||||
static LEGACY_FLOPPY_OPTIONS_START( x1 )
|
static SLOT_INTERFACE_START( x1_floppies )
|
||||||
LEGACY_FLOPPY_OPTION( img2d, "2d", "2D disk image", basicdsk_identify_default, basicdsk_construct_default, NULL,
|
SLOT_INTERFACE("dd", FLOPPY_525_DD)
|
||||||
HEADS([2])
|
SLOT_INTERFACE_END
|
||||||
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 MACHINE_CONFIG_START( x1twin, x1twin_state )
|
static MACHINE_CONFIG_START( x1twin, x1twin_state )
|
||||||
/* basic machine hardware */
|
/* basic machine hardware */
|
||||||
@ -471,8 +458,14 @@ static MACHINE_CONFIG_START( x1twin, x1twin_state )
|
|||||||
|
|
||||||
MCFG_VIDEO_START_OVERRIDE(x1twin_state,x1)
|
MCFG_VIDEO_START_OVERRIDE(x1twin_state,x1)
|
||||||
|
|
||||||
MCFG_DEVICE_ADD("fdc", MB8877, 0)
|
MCFG_MB8877x_ADD("fdc", MAIN_CLOCK / 16)
|
||||||
MCFG_WD17XX_DEFAULT_DRIVE4_TAGS
|
|
||||||
|
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_CARTSLOT_ADD("cartslot", generic_plain_slot, "x1_cart")
|
||||||
MCFG_GENERIC_EXTENSIONS("bin,rom")
|
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_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
|
#if 0
|
||||||
MCFG_SOUND_ADD("c6280", C6280, PCE_MAIN_CLOCK/6)
|
MCFG_SOUND_ADD("c6280", C6280, PCE_MAIN_CLOCK/6)
|
||||||
MCFG_C6280_CPU("pce_cpu")
|
MCFG_C6280_CPU("pce_cpu")
|
||||||
|
@ -15,7 +15,7 @@
|
|||||||
#include "machine/z80ctc.h"
|
#include "machine/z80ctc.h"
|
||||||
#include "machine/z80dart.h"
|
#include "machine/z80dart.h"
|
||||||
#include "machine/i8255.h"
|
#include "machine/i8255.h"
|
||||||
#include "machine/wd17xx.h"
|
#include "machine/wd_fdc.h"
|
||||||
#include "machine/z80dma.h"
|
#include "machine/z80dma.h"
|
||||||
#include "video/mc6845.h"
|
#include "video/mc6845.h"
|
||||||
#include "sound/2151intf.h"
|
#include "sound/2151intf.h"
|
||||||
@ -81,6 +81,10 @@ public:
|
|||||||
m_cassette(*this, "cassette"),
|
m_cassette(*this, "cassette"),
|
||||||
m_cart(*this, "cartslot"),
|
m_cart(*this, "cartslot"),
|
||||||
m_fdc(*this, "fdc"),
|
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_crtc(*this, "crtc"),
|
||||||
m_ctc(*this, "ctc"),
|
m_ctc(*this, "ctc"),
|
||||||
m_gfxdecode(*this, "gfxdecode"),
|
m_gfxdecode(*this, "gfxdecode"),
|
||||||
@ -88,10 +92,16 @@ public:
|
|||||||
m_dma(*this, "dma")
|
m_dma(*this, "dma")
|
||||||
{ }
|
{ }
|
||||||
|
|
||||||
|
DECLARE_FLOPPY_FORMATS(floppy_formats);
|
||||||
|
|
||||||
required_device<cpu_device> m_maincpu;
|
required_device<cpu_device> m_maincpu;
|
||||||
required_device<cassette_image_device> m_cassette;
|
required_device<cassette_image_device> m_cassette;
|
||||||
required_device<generic_slot_device> m_cart;
|
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<mc6845_device> m_crtc;
|
||||||
required_device<z80ctc_device> m_ctc;
|
required_device<z80ctc_device> m_ctc;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user