abc80x: Split floppy software lists by disk drive type. [Curt Coder]

abc800_dsk: Split to interleaved and non-interleaved disk formats. [Curt Coder]

New working software list items
-------------------------------
abc838_flop: Systemskiva ABC800 v1.0 (Sweden), Systemskiva för UFD-DOS v6.3 (Sweden) [Curt Coder]
This commit is contained in:
Curt Coder 2023-03-26 11:30:31 +03:00
parent cfe5f09da9
commit d280b65088
15 changed files with 245 additions and 55 deletions

View File

@ -3,7 +3,7 @@
<!--
license:CC0-1.0
-->
<softwarelist name="abc806" description="Luxor ABC 806 diskettes">
<softwarelist name="abc806_flop" description="Luxor ABC 806 diskettes">
<software name="graf806" supported="no">
<description>Graf806</description>

View File

@ -3,10 +3,10 @@
<!--
license:CC0-1.0
-->
<softwarelist name="abc800" description="Luxor ABC 800 diskettes">
<softwarelist name="abc830_flop" description="Luxor ABC 830 diskettes">
<software name="basope10">
<description>Basope v1.0 (Fin)</description>
<description>Basope v1.0 (Finland)</description>
<year>198?</year>
<publisher>&lt;unknown&gt;</publisher>
@ -18,7 +18,7 @@ license:CC0-1.0
</software>
<software name="graf16">
<description>Grafiikka 800 v1.6 (Fin)</description>
<description>Grafiikka 800 v1.6 (Finland)</description>
<year>198?</year>
<publisher>&lt;unknown&gt;</publisher>
<info name="serial" value="68 20027-41" />
@ -43,7 +43,7 @@ license:CC0-1.0
</software>
<software name="ord800">
<description>ORD 800 v2.4 (Swe)</description>
<description>ORD 800 v2.4 (Sweden)</description>
<year>198?</year>
<publisher>P-Data</publisher>
@ -55,7 +55,7 @@ license:CC0-1.0
</software>
<software name="prommis">
<description>PROMMIS v6.2 (Swe)</description>
<description>PROMMIS v6.2 (Sweden)</description>
<year>1983</year>
<publisher>ELogik</publisher>
@ -67,7 +67,7 @@ license:CC0-1.0
</software>
<software name="red800">
<description>Bokföring 800 v2.0 (Swe)</description>
<description>Bokföring 800 v2.0 (Sweden)</description>
<year>198?</year>
<publisher>P-Data</publisher>
@ -79,7 +79,7 @@ license:CC0-1.0
</software>
<software name="sana800">
<description>Sana 800 v2.3 (Fin)</description>
<description>Sana 800 v2.3 (Finland)</description>
<year>198?</year>
<publisher>P-Data</publisher>
<info name="serial" value="68 20037-56" />
@ -92,7 +92,7 @@ license:CC0-1.0
</software>
<software name="tty800">
<description>TTY800 v1.5 (Swe)</description>
<description>TTY800 v1.5 (Sweden)</description>
<year>1983</year>
<publisher>Front-Line</publisher>
@ -104,7 +104,7 @@ license:CC0-1.0
</software>
<software name="tty800a" cloneof="tty800">
<description>TTY800 v1.5 (Swe) (no autoboot)</description>
<description>TTY800 v1.5 (Sweden) (no autoboot)</description>
<year>1983</year>
<publisher>Front-Line</publisher>
<info name="usage" value="RUN&quot;TTY&quot;" />
@ -130,7 +130,7 @@ license:CC0-1.0
</software>
<software name="sys10fi">
<description>Systeemilevy ABC800 v1.0 (Fin)</description>
<description>Systeemilevy ABC800 v1.0 (Finland)</description>
<year>198?</year>
<publisher>Luxor</publisher>
<info name="usage" value="RUN&quot;LIB&quot;" />
@ -143,7 +143,7 @@ license:CC0-1.0
</software>
<software name="sys10sw">
<description>Systemskiva ABC800 v1.0 (Swe)</description>
<description>Systemskiva ABC800 v1.0 (Sweden)</description>
<year>198?</year>
<publisher>Luxor</publisher>
<info name="serial" value="68 29011-41" />
@ -190,6 +190,7 @@ license:CC0-1.0
<part name="flop" interface="floppy_5_25">
<dataarea name="flop" size="163840">
<!-- interleaved sectors -->
<rom name="demo11.dsk" size="163840" crc="f57d142d" sha1="f9c67904ddc8fa598353dcdcd8c0bc3eb4e91524"/>
</dataarea>
</part>
@ -209,7 +210,7 @@ license:CC0-1.0
</software>
<software name="ufd631">
<description>Systemskiva v6.31 för UFD-DOS (Swe)</description>
<description>Systemskiva v6.31 för UFD-DOS (Sweden)</description>
<year>198?</year>
<publisher>Luxor</publisher>
<info name="serial" value="68 29251-51" />
@ -222,17 +223,4 @@ license:CC0-1.0
</part>
</software>
<software name="abc832">
<description>ABC832 Systemskiva v2.5 (Swe)</description>
<year>1982</year>
<publisher>Luxor</publisher>
<info name="usage" value="BYE" />
<part name="flop" interface="floppy_5_25">
<dataarea name="flop" size="655360">
<rom name="abc832.dsk" size="655360" crc="36c1ff01" sha1="7aceaa4bf79301f545ec4b8ca7cbaa7f34fff462"/>
</dataarea>
</part>
</software>
</softwarelist>

22
hash/abc832_flop.xml Normal file
View File

@ -0,0 +1,22 @@
<?xml version="1.0"?>
<!DOCTYPE softwarelist SYSTEM "softwarelist.dtd">
<!--
license:CC0-1.0
-->
<softwarelist name="abc832_flop" description="Luxor ABC 832 diskettes">
<software name="abc832" supported="no">
<description>ABC832 Systemskiva v2.5 (Sweden)</description>
<year>1982</year>
<publisher>Luxor</publisher>
<info name="usage" value="BYE" />
<sharedfeat name="bus_default" value="abc832" />
<part name="flop" interface="floppy_5_25">
<dataarea name="flop" size="655360">
<rom name="abc832.img" size="655360" crc="36c1ff01" sha1="7aceaa4bf79301f545ec4b8ca7cbaa7f34fff462"/>
</dataarea>
</part>
</software>
</softwarelist>

36
hash/abc838_flop.xml Normal file
View File

@ -0,0 +1,36 @@
<?xml version="1.0"?>
<!DOCTYPE softwarelist SYSTEM "softwarelist.dtd">
<!--
license:CC0-1.0
-->
<softwarelist name="abc838_flop" description="Luxor ABC 838 diskettes">
<software name="sys800_8">
<description>Systemskiva ABC800 v1.0 (Sweden)</description>
<year>198?</year>
<publisher>Luxor</publisher>
<info name="serial" value="68 29111-81" />
<sharedfeat name="bus_default" value="abc838" />
<part name="flop" interface="floppy_8">
<dataarea name="flop" size="1025024">
<rom name="68_29111-81.img" size="1025024" crc="12c55446" sha1="3a22e44b330db1402c1526c5783216dbdbd01a36"/>
</dataarea>
</part>
</software>
<software name="ufd63_8">
<description>Systemskiva för UFD-DOS v6.3 (Sweden)</description>
<year>198?</year>
<publisher>Luxor</publisher>
<info name="serial" value="68 29251-81" />
<sharedfeat name="bus_default" value="abc838" />
<part name="flop" interface="floppy_8">
<dataarea name="flop" size="1025024">
<rom name="68_29251-81.img" size="1025024" crc="0e135afd" sha1="3fcb04839e53468b8ff02b03128cdca979b0ab28"/>
</dataarea>
</part>
</software>
</softwarelist>

View File

@ -131,6 +131,18 @@ if opt_tool(FORMATS, "ABC800_DSK") then
}
end
--------------------------------------------------
--
--@src/lib/formats/abc800i_dsk.h,FORMATS["ABC800I_DSK"] = true
--------------------------------------------------
if opt_tool(FORMATS, "ABC800I_DSK") then
files {
MAME_DIR.. "src/lib/formats/abc800i_dsk.cpp",
MAME_DIR.. "src/lib/formats/abc800i_dsk.h",
}
end
--------------------------------------------------
--
--@src/lib/formats/abc1600_dsk.h,FORMATS["ABC1600_DSK"] = true

View File

@ -302,6 +302,7 @@ static void abc_floppies(device_slot_interface &device)
void luxor_55_10828_device::floppy_formats(format_registration &fr)
{
fr.add_mfm_containers();
fr.add(FLOPPY_ABC800I_FORMAT);
fr.add(FLOPPY_ABC800_FORMAT);
}

View File

@ -15,6 +15,7 @@
#include "cpu/z80/z80.h"
#include "machine/z80daisy.h"
#include "formats/abc800_dsk.h"
#include "formats/abc800i_dsk.h"
#include "imagedev/floppy.h"
#include "machine/wd_fdc.h"
#include "machine/z80pio.h"

View File

@ -257,6 +257,7 @@ void luxor_55_21046_device::io_write_byte(offs_t offset, uint8_t data)
void luxor_55_21046_device::floppy_formats(format_registration &fr)
{
fr.add_mfm_containers();
fr.add(FLOPPY_ABC800I_FORMAT);
fr.add(FLOPPY_ABC800_FORMAT);
}

View File

@ -15,6 +15,7 @@
#include "cpu/z80/z80.h"
#include "machine/z80daisy.h"
#include "formats/abc800_dsk.h"
#include "formats/abc800i_dsk.h"
#include "imagedev/floppy.h"
#include "machine/wd_fdc.h"
#include "machine/z80dma.h"

View File

@ -26,7 +26,7 @@ const char *abc800_format::description() const
const char *abc800_format::extensions() const
{
return "dsk,img";
return "img";
}
const abc800_format::format abc800_format::formats[] = {
@ -51,7 +51,7 @@ const abc800_format::format abc800_format::formats[] = {
{ // 80K 5 1/4 inch single density single sided
floppy_image::FF_525, floppy_image::SSSD, floppy_image::FM,
4000, 16, 40, 1, 128, {}, -1, { 1,2,11,12,5,6,15,16,9,10,3,4,13,14,7,8 }, 28, 11, 27
4000, 16, 40, 1, 128, {}, 1, {}, 28, 11, 27
},
// track description
@ -75,7 +75,7 @@ const abc800_format::format abc800_format::formats[] = {
{ // 160K 5 1/4 inch double density single sided
floppy_image::FF_525, floppy_image::SSDD, floppy_image::MFM,
2000, 16, 40, 1, 256, {}, -1, { 1,8,15,6,13,4,11,2,9,16,7,14,5,12,3,10 }, 55, 22, 54
2000, 16, 40, 1, 256, {}, 1, {}, 55, 22, 54
},
// track description
@ -141,29 +141,6 @@ const abc800_format::format abc800_format::formats[] = {
const abc800_format FLOPPY_ABC800_FORMAT;
void abc800_format::build_sector_description(const format &f, uint8_t *sectdata, desc_s *sectors, int track, int head) const
{
if(f.sector_base_id == -1) {
for(int i=0; i<f.sector_count; i++) {
int cur_offset = 0;
for(int j=0; j<f.sector_count; j++)
if(f.per_sector_id[j] < f.per_sector_id[i])
cur_offset += f.sector_base_size ? f.sector_base_size : f.per_sector_size[j];
sectors[i].data = sectdata + cur_offset;
sectors[i].size = f.sector_base_size ? f.sector_base_size : f.per_sector_size[i];
sectors[i].sector_id = i + f.per_sector_id[0];
}
} else {
int cur_offset = 0;
for(int i=0; i<f.sector_count; i++) {
sectors[i].data = sectdata + cur_offset;
sectors[i].size = f.sector_base_size ? f.sector_base_size : f.per_sector_size[i];
cur_offset += sectors[i].size;
sectors[i].sector_id = i + f.sector_base_id;
}
}
}
int abc800_format::get_image_offset(const format &f, int head, int track) const
{
int offset = 0;

View File

@ -24,7 +24,6 @@ public:
virtual const char *extensions() const override;
protected:
virtual void build_sector_description(const format &d, uint8_t *sectdata, desc_s *sectors, int track, int head) const override;
virtual int get_image_offset(const format &f, int head, int track) const override;
private:

View File

@ -0,0 +1,108 @@
// license:BSD-3-Clause
// copyright-holders:Curt Coder
/*********************************************************************
formats/abc800i_dsk.c
Luxor ABC 830 interleaved disk image formats
*********************************************************************/
#include "formats/abc800i_dsk.h"
abc800i_format::abc800i_format() : wd177x_format(formats)
{
}
const char *abc800i_format::name() const
{
return "abc800i";
}
const char *abc800i_format::description() const
{
return "Luxor ABC 830 interleaved disk image";
}
const char *abc800i_format::extensions() const
{
return "dsk";
}
const abc800i_format::format abc800i_format::formats[] = {
// track description
// 28xff 6x00 fe 2x00 01 00 f7 11xff 6x00 fb 128xe5 f7
// 27xff 6x00 fe 2x00 02 00 f7 11xff 6x00 fb 128xe5 f7
// 27xff 6x00 fe 2x00 03 00 f7 11xff 6x00 fb 128xe5 f7
// 27xff 6x00 fe 2x00 04 00 f7 11xff 6x00 fb 128xe5 f7
// 27xff 6x00 fe 2x00 05 00 f7 11xff 6x00 fb 128xe5 f7
// 27xff 6x00 fe 2x00 06 00 f7 11xff 6x00 fb 128xe5 f7
// 27xff 6x00 fe 2x00 07 00 f7 11xff 6x00 fb 128xe5 f7
// 27xff 6x00 fe 2x00 08 00 f7 11xff 6x00 fb 128xe5 f7
// 27xff 6x00 fe 2x00 09 00 f7 11xff 6x00 fb 128xe5 f7
// 27xff 6x00 fe 2x00 0a 00 f7 11xff 6x00 fb 128xe5 f7
// 27xff 6x00 fe 2x00 0b 00 f7 11xff 6x00 fb 128xe5 f7
// 27xff 6x00 fe 2x00 0c 00 f7 11xff 6x00 fb 128xe5 f7
// 27xff 6x00 fe 2x00 0d 00 f7 11xff 6x00 fb 128xe5 f7
// 27xff 6x00 fe 2x00 0e 00 f7 11xff 6x00 fb 128xe5 f7
// 27xff 6x00 fe 2x00 0f 00 f7 11xff 6x00 fb 128xe5 f7
// 27xff 6x00 fe 2x00 10 00 f7 11xff 6x00 fb 128xe5 f7
// 117xff
{ // 80K 5 1/4 inch single density single sided
floppy_image::FF_525, floppy_image::SSSD, floppy_image::FM,
4000, 16, 40, 1, 128, {}, -1, { 1,2,11,12,5,6,15,16,9,10,3,4,13,14,7,8 }, 28, 11, 27
},
// track description
// 55x4e 12x00 3xf5 fe 2x00 01 01 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
{ // 160K 5 1/4 inch double density single sided
floppy_image::FF_525, floppy_image::SSDD, floppy_image::MFM,
2000, 16, 40, 1, 256, {}, -1, { 1,8,15,6,13,4,11,2,9,16,7,14,5,12,3,10 }, 55, 22, 54
},
{}
};
const abc800i_format FLOPPY_ABC800I_FORMAT;
void abc800i_format::build_sector_description(const format &f, uint8_t *sectdata, desc_s *sectors, int track, int head) const
{
printf("fu");
if(f.sector_base_id == -1) {
for(int i=0; i<f.sector_count; i++) {
int cur_offset = 0;
for(int j=0; j<f.sector_count; j++)
if(f.per_sector_id[j] < f.per_sector_id[i])
cur_offset += f.sector_base_size ? f.sector_base_size : f.per_sector_size[j];
sectors[i].data = sectdata + cur_offset;
sectors[i].size = f.sector_base_size ? f.sector_base_size : f.per_sector_size[i];
sectors[i].sector_id = i + f.per_sector_id[0];
}
} else {
int cur_offset = 0;
for(int i=0; i<f.sector_count; i++) {
sectors[i].data = sectdata + cur_offset;
sectors[i].size = f.sector_base_size ? f.sector_base_size : f.per_sector_size[i];
cur_offset += sectors[i].size;
sectors[i].sector_id = i + f.sector_base_id;
}
}
}

View File

@ -0,0 +1,35 @@
// license:BSD-3-Clause
// copyright-holders:Curt Coder
/*********************************************************************
formats/abc800i_dsk.h
Luxor ABC 830 interleaved disk image formats
*********************************************************************/
#ifndef MAME_FORMATS_ABC800I_DSK_H
#define MAME_FORMATS_ABC800I_DSK_H
#pragma once
#include "wd177x_dsk.h"
class abc800i_format : public wd177x_format
{
public:
abc800i_format();
virtual const char *name() const override;
virtual const char *description() const override;
virtual const char *extensions() const override;
protected:
virtual void build_sector_description(const format &d, uint8_t *sectdata, desc_s *sectors, int track, int head) const override;
private:
static const format formats[];
};
extern const abc800i_format FLOPPY_ABC800I_FORMAT;
#endif // MAME_FORMATS_ABC800I_DSK_H

View File

@ -36,6 +36,10 @@
#include "abc800_dsk.h"
#endif
#ifdef HAS_FORMATS_ABC800I_DSK
#include "abc800i_dsk.h"
#endif
#ifdef HAS_FORMATS_ABCFD2_DSK
#include "abcfd2_dsk.h"
#endif
@ -820,6 +824,9 @@ void mame_formats_full_list(mame_formats_enumerator &en)
#ifdef HAS_FORMATS_ABC800_DSK
en.add(FLOPPY_ABC800_FORMAT); // abc800_dsk.h
#endif
#ifdef HAS_FORMATS_ABC800I_DSK
en.add(FLOPPY_ABC800I_FORMAT); // abc800i_dsk.h
#endif
#ifdef HAS_FORMATS_ABCFD2_DSK
en.add(FLOPPY_ABC_FD2_FORMAT); // abcfd2_dsk.h
#endif

View File

@ -2084,7 +2084,9 @@ void abc800_state::common(machine_config &config)
ABCBUS_SLOT(config, ABCBUS_TAG, ABC800_X01/2/2, abcbus_cards, nullptr);
// software list
SOFTWARE_LIST(config, "flop_list").set_original("abc800");
SOFTWARE_LIST(config, "flop_list_830").set_original("abc830_flop");
SOFTWARE_LIST(config, "flop_list_832").set_original("abc832_flop");
SOFTWARE_LIST(config, "flop_list_838").set_original("abc838_flop");
SOFTWARE_LIST(config, "hdd_list").set_original("abc800_hdd");
// quickload
@ -2227,7 +2229,7 @@ void abc806_state::abc806(machine_config &config)
RAM(config, RAM_TAG).set_default_size("160K").set_extra_options("544K");
// software list
SOFTWARE_LIST(config, "flop_list2").set_original("abc806");
SOFTWARE_LIST(config, "flop_list_806").set_original("abc806_flop");
}