(MESS) abc800: Added support for raw 640KB disk images. [Curt Coder]

(MESS) abc800: Fixed fast controller Z80 daisy chain, formatting a disk works now except for a not ready status after the last track. (nw)
This commit is contained in:
Curt Coder 2013-11-16 12:06:23 +00:00
parent 252fc882a8
commit b63b1b54ae
6 changed files with 140 additions and 13 deletions

2
.gitattributes vendored
View File

@ -2602,6 +2602,8 @@ src/lib/formats/a26_cas.c svneol=native#text/plain
src/lib/formats/a26_cas.h svneol=native#text/plain
src/lib/formats/a5105_dsk.c svneol=native#text/plain
src/lib/formats/a5105_dsk.h svneol=native#text/plain
src/lib/formats/abc800_dsk.c svneol=native#text/plain
src/lib/formats/abc800_dsk.h svneol=native#text/plain
src/lib/formats/ace_tap.c svneol=native#text/plain
src/lib/formats/ace_tap.h svneol=native#text/plain
src/lib/formats/adam_cas.c svneol=native#text/plain

View File

@ -151,14 +151,14 @@ ADDRESS_MAP_END
static ADDRESS_MAP_START( luxor_55_21046_io, AS_IO, 8, luxor_55_21046_device )
ADDRESS_MAP_UNMAP_HIGH
AM_RANGE(0x08, 0x08) AM_MIRROR(0xff07) AM_READ(out_r)
AM_RANGE(0x18, 0x18) AM_MIRROR(0xff07) AM_WRITE(inp_w)
AM_RANGE(0x28, 0x28) AM_MIRROR(0xff07) AM_WRITE(_4b_w)
AM_RANGE(0x38, 0x38) AM_MIRROR(0xff07) AM_WRITE(_9b_w)
AM_RANGE(0x48, 0x48) AM_MIRROR(0xff07) AM_WRITE(_8a_w)
AM_RANGE(0x58, 0x58) AM_MIRROR(0xff07) AM_MASK(0xff00) AM_READ(_9a_r)
AM_RANGE(0x68, 0x6b) AM_MIRROR(0xff04) AM_DEVREAD(SAB1793_TAG, fd1793_t, read)
AM_RANGE(0x78, 0x7b) AM_MIRROR(0xff04) AM_DEVWRITE(SAB1793_TAG, fd1793_t, write)
AM_RANGE(0x0c, 0x0c) AM_MIRROR(0xff03) AM_READ(out_r)
AM_RANGE(0x1c, 0x1c) AM_MIRROR(0xff03) AM_WRITE(inp_w)
AM_RANGE(0x2c, 0x2c) AM_MIRROR(0xff03) AM_WRITE(_4b_w)
AM_RANGE(0x3c, 0x3c) AM_MIRROR(0xff03) AM_WRITE(_9b_w)
AM_RANGE(0x4c, 0x4c) AM_MIRROR(0xff03) AM_WRITE(_8a_w)
AM_RANGE(0x5c, 0x5c) AM_MIRROR(0xff07) AM_MASK(0xff00) AM_READ(_9a_r)
AM_RANGE(0x68, 0x6b) AM_MIRROR(0xff00) AM_DEVREAD(SAB1793_TAG, fd1793_t, read)
AM_RANGE(0x78, 0x7b) AM_MIRROR(0xff00) AM_DEVWRITE(SAB1793_TAG, fd1793_t, write)
AM_RANGE(0x80, 0x80) AM_MIRROR(0xff77) AM_DEVREADWRITE(Z80DMA_TAG, z80dma_device, read, write)
ADDRESS_MAP_END
@ -266,6 +266,10 @@ static Z80DMA_INTERFACE( dma_intf )
// wd17xx_interface fdc_intf
//-------------------------------------------------
FLOPPY_FORMATS_MEMBER( luxor_55_21046_device::floppy_formats )
FLOPPY_ABC800_FORMAT
FLOPPY_FORMATS_END
static SLOT_INTERFACE_START( abc_floppies )
SLOT_INTERFACE( "525sssd", FLOPPY_525_SSSD )
SLOT_INTERFACE( "525sd", FLOPPY_525_SD )
@ -288,20 +292,32 @@ void luxor_55_21046_device::fdc_drq_w(bool state)
}
//-------------------------------------------------
// z80_daisy_config z80_daisy_chain
//-------------------------------------------------
static const z80_daisy_config z80_daisy_chain[] =
{
{ Z80DMA_TAG },
{ NULL }
};
//-------------------------------------------------
// MACHINE_CONFIG( luxor_55_21046 )
//-------------------------------------------------
static MACHINE_CONFIG_FRAGMENT( luxor_55_21046 )
MCFG_CPU_ADD(Z80_TAG, Z80, XTAL_16MHz/4)
MCFG_CPU_CONFIG(z80_daisy_chain)
MCFG_CPU_PROGRAM_MAP(luxor_55_21046_mem)
MCFG_CPU_IO_MAP(luxor_55_21046_io)
MCFG_Z80DMA_ADD(Z80DMA_TAG, XTAL_16MHz/4, dma_intf)
MCFG_FD1793x_ADD(SAB1793_TAG, XTAL_16MHz/16)
MCFG_FLOPPY_DRIVE_ADD(SAB1793_TAG":0", abc_floppies, "525dd", floppy_image_device::default_floppy_formats)
MCFG_FLOPPY_DRIVE_ADD(SAB1793_TAG":1", abc_floppies, "525dd", floppy_image_device::default_floppy_formats)
MCFG_FLOPPY_DRIVE_ADD(SAB1793_TAG":0", abc_floppies, "525dd", luxor_55_21046_device::floppy_formats)
MCFG_FLOPPY_DRIVE_ADD(SAB1793_TAG":1", abc_floppies, "525dd", luxor_55_21046_device::floppy_formats)
MACHINE_CONFIG_END
@ -398,9 +414,9 @@ INPUT_PORTS_START( luxor_55_21046 )
PORT_START("SW3")
PORT_DIPNAME( 0x7f, 0x2c, "Card Address" ) PORT_DIPLOCATION("SW3:1,2,3,4,5,6,7")
PORT_DIPSETTING( 0x2c, "44 (ABC 832/834/850)" )
PORT_DIPSETTING( 0x2d, "45 (ABC 830)" )
PORT_DIPSETTING( 0x2e, "46 (ABC 838)" )
PORT_DIPSETTING( 0x2c, "44 (ABC 832/834/850)" ) // MF0: MF1:
PORT_DIPSETTING( 0x2d, "45 (ABC 830)" ) // MO0: MO1:
PORT_DIPSETTING( 0x2e, "46 (ABC 838)" ) // SF0: SF1:
PORT_START("S1") // also S3,S5
PORT_DIPNAME( 0x01, 0x01, "Interface Type" )

View File

@ -18,6 +18,7 @@
#include "abcbus.h"
#include "cpu/z80/z80.h"
#include "cpu/z80/z80daisy.h"
#include "formats/abc800_dsk.h"
#include "machine/wd_fdc.h"
#include "machine/z80dma.h"
@ -81,6 +82,8 @@ public:
void fdc_intrq_w(bool state);
void fdc_drq_w(bool state);
DECLARE_FLOPPY_FORMATS( floppy_formats );
protected:
// device-level overrides
virtual void device_start();

View File

@ -0,0 +1,75 @@
// license:BSD-3-Clause
// copyright-holders:Curt Coder
/*********************************************************************
formats/abc800_dsk.c
Luxor ABC 830/832/838 disk image formats
*********************************************************************/
#include "emu.h"
#include "formats/abc800_dsk.h"
abc800_format::abc800_format() : wd177x_format(formats)
{
}
const char *abc800_format::name() const
{
return "abc800";
}
const char *abc800_format::description() const
{
return "Luxor ABC 830/832/838 disk image";
}
const char *abc800_format::extensions() const
{
return "dsk";
}
const abc800_format::format abc800_format::formats[] = {
/* { // 80K 5 1/4 inch single density double sided
floppy_image::FF_525, floppy_image::DSSD, floppy_image::FM,
2000, 8, 40, 2, 256, {}, 1, {}, 54, 22, 0
},
{ // 160K 5 1/4 inch double density double sided
floppy_image::FF_525, floppy_image::DSDD, floppy_image::MFM,
2000, 8, 40, 2, 256, {}, 1, {}, 54, 22, 0
},
*/
// track description
// 55x4e 12x00 3xf5 fe 2x00 2x01 f7 22x4e 12x00 3xf5 fb 256xe5 f7
// 54x4e 12x00 3xf5 fe 2x00 02 01 f7 22x4e 12x00 3xf5 fb 256xe5 f7
// 54x4e 12x00 3xf5 fe 2x00 03 01 f7 22x4e 12x00 3xf5 fb 256xe5 f7
// 54x4e 12x00 3xf5 fe 2x00 04 01 f7 22x4e 12x00 3xf5 fb 256xe5 f7
// 54x4e 12x00 3xf5 fe 2x00 05 01 f7 22x4e 12x00 3xf5 fb 256xe5 f7
// 54x4e 12x00 3xf5 fe 2x00 06 01 f7 22x4e 12x00 3xf5 fb 256xe5 f7
// 54x4e 12x00 3xf5 fe 2x00 07 01 f7 22x4e 12x00 3xf5 fb 256xe5 f7
// 54x4e 12x00 3xf5 fe 2x00 08 01 f7 22x4e 12x00 3xf5 fb 256xe5 f7
// 54x4e 12x00 3xf5 fe 2x00 09 01 f7 22x4e 12x00 3xf5 fb 256xe5 f7
// 54x4e 12x00 3xf5 fe 2x00 0a 01 f7 22x4e 12x00 3xf5 fb 256xe5 f7
// 54x4e 12x00 3xf5 fe 2x00 0b 01 f7 22x4e 12x00 3xf5 fb 256xe5 f7
// 54x4e 12x00 3xf5 fe 2x00 0c 01 f7 22x4e 12x00 3xf5 fb 256xe5 f7
// 54x4e 12x00 3xf5 fe 2x00 0d 01 f7 22x4e 12x00 3xf5 fb 256xe5 f7
// 54x4e 12x00 3xf5 fe 2x00 0e 01 f7 22x4e 12x00 3xf5 fb 256xe5 f7
// 54x4e 12x00 3xf5 fe 2x00 0f 01 f7 22x4e 12x00 3xf5 fb 256xe5 f7
// 54x4e 12x00 3xf5 fe 2x00 10 01 f7 22x4e 12x00 3xf5 fb 256xe5 f7
// 298x4e
{ // 640K 5 1/4 inch quad density
floppy_image::FF_525, floppy_image::DSQD, floppy_image::MFM,
2000, 16, 80, 2, 256, {}, 1, {}, 54, 22, 0
},
/*
{ // 1M 8 inch double density
floppy_image::FF_8, floppy_image::DSDD, floppy_image::MFM,
2000, 16, 77, 2, 256, {}, 1, {}, 55, 22, 84
},
*/
{}
};
const floppy_format_type FLOPPY_ABC800_FORMAT = &floppy_image_format_creator<abc800_format>;

View File

@ -0,0 +1,30 @@
// license:BSD-3-Clause
// copyright-holders:Curt Coder
/*********************************************************************
formats/abc800_dsk.h
Luxor ABC 830/832/838 disk image formats
*********************************************************************/
#ifndef ABC800_DSK_H_
#define ABC800_DSK_H_
#include "wd177x_dsk.h"
class abc800_format : public wd177x_format {
public:
abc800_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_ABC800_FORMAT;
#endif

View File

@ -97,6 +97,7 @@ FORMATSOBJS = \
$(LIBOBJ)/formats/basicdsk.o \
$(LIBOBJ)/formats/a26_cas.o \
$(LIBOBJ)/formats/a5105_dsk.o \
$(LIBOBJ)/formats/abc800_dsk.o \
$(LIBOBJ)/formats/ace_tap.o \
$(LIBOBJ)/formats/adam_cas.o \
$(LIBOBJ)/formats/adam_dsk.o \