From b63b1b54aefdbb6c27a7fad5bb315a69136217f7 Mon Sep 17 00:00:00 2001 From: Curt Coder Date: Sat, 16 Nov 2013 12:06:23 +0000 Subject: [PATCH] (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) --- .gitattributes | 2 + src/emu/bus/abcbus/lux21046.c | 42 ++++++++++++++------ src/emu/bus/abcbus/lux21046.h | 3 ++ src/lib/formats/abc800_dsk.c | 75 +++++++++++++++++++++++++++++++++++ src/lib/formats/abc800_dsk.h | 30 ++++++++++++++ src/lib/lib.mak | 1 + 6 files changed, 140 insertions(+), 13 deletions(-) create mode 100644 src/lib/formats/abc800_dsk.c create mode 100644 src/lib/formats/abc800_dsk.h diff --git a/.gitattributes b/.gitattributes index 049459a2697..16efdab6c2b 100644 --- a/.gitattributes +++ b/.gitattributes @@ -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 diff --git a/src/emu/bus/abcbus/lux21046.c b/src/emu/bus/abcbus/lux21046.c index bd16271a830..797457831d0 100644 --- a/src/emu/bus/abcbus/lux21046.c +++ b/src/emu/bus/abcbus/lux21046.c @@ -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" ) diff --git a/src/emu/bus/abcbus/lux21046.h b/src/emu/bus/abcbus/lux21046.h index 200eca67f7b..1dd40d06b22 100644 --- a/src/emu/bus/abcbus/lux21046.h +++ b/src/emu/bus/abcbus/lux21046.h @@ -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(); diff --git a/src/lib/formats/abc800_dsk.c b/src/lib/formats/abc800_dsk.c new file mode 100644 index 00000000000..231525e28fa --- /dev/null +++ b/src/lib/formats/abc800_dsk.c @@ -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; diff --git a/src/lib/formats/abc800_dsk.h b/src/lib/formats/abc800_dsk.h new file mode 100644 index 00000000000..ff87ac5eb9b --- /dev/null +++ b/src/lib/formats/abc800_dsk.h @@ -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 diff --git a/src/lib/lib.mak b/src/lib/lib.mak index 8f4b5b5d4d8..e2081895795 100644 --- a/src/lib/lib.mak +++ b/src/lib/lib.mak @@ -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 \