mirror of
https://github.com/holub/mame
synced 2025-05-29 17:13:05 +03:00
Sync with MESS (no whatsnew)
This commit is contained in:
parent
37949aebca
commit
f1e3bf44a7
2
.gitattributes
vendored
2
.gitattributes
vendored
@ -1525,6 +1525,8 @@ src/lib/formats/dsk_dsk.c svneol=native#text/plain
|
||||
src/lib/formats/dsk_dsk.h svneol=native#text/plain
|
||||
src/lib/formats/esq16_dsk.c svneol=native#text/plain
|
||||
src/lib/formats/esq16_dsk.h svneol=native#text/plain
|
||||
src/lib/formats/esq8_dsk.c svneol=native#text/plain
|
||||
src/lib/formats/esq8_dsk.h svneol=native#text/plain
|
||||
src/lib/formats/fdi_dsk.c svneol=native#text/plain
|
||||
src/lib/formats/flopimg.c svneol=native#text/plain
|
||||
src/lib/formats/flopimg.h svneol=native#text/plain
|
||||
|
164
src/lib/formats/esq8_dsk.c
Normal file
164
src/lib/formats/esq8_dsk.c
Normal file
@ -0,0 +1,164 @@
|
||||
/*********************************************************************
|
||||
|
||||
formats/esq8_dsk.c
|
||||
|
||||
Formats for 8-bit Ensoniq synthesizers and samplers
|
||||
|
||||
Disk is PC MFM, 40 tracks, single (Mirage) or double (SQ-80) sided,
|
||||
with 6 sectors per track.
|
||||
Sectors 0-4 are 1024 bytes, sector 5 is 512 bytes
|
||||
|
||||
*********************************************************************/
|
||||
|
||||
#include "emu.h"
|
||||
#include "flopimg.h"
|
||||
#include "formats/esq8_dsk.h"
|
||||
|
||||
const floppy_image_format_t::desc_e esq8img_format::esq_6_desc[] = {
|
||||
{ MFM, 0x4e, 80 },
|
||||
{ MFM, 0x00, 12 },
|
||||
{ RAW, 0x5224, 3 },
|
||||
{ MFM, 0xfc, 1 },
|
||||
{ MFM, 0x4e, 50 },
|
||||
{ MFM, 0x00, 12 },
|
||||
{ SECTOR_LOOP_START, 0, 5 },
|
||||
{ CRC_CCITT_START, 1 },
|
||||
{ RAW, 0x4489, 3 },
|
||||
{ MFM, 0xfe, 1 },
|
||||
{ TRACK_ID },
|
||||
{ HEAD_ID },
|
||||
{ SECTOR_ID },
|
||||
{ SIZE_ID },
|
||||
{ CRC_END, 1 },
|
||||
{ CRC, 1 },
|
||||
{ MFM, 0x4e, 22 },
|
||||
{ MFM, 0x00, 12 },
|
||||
{ CRC_CCITT_START, 2 },
|
||||
{ RAW, 0x4489, 3 },
|
||||
{ MFM, 0xfb, 1 },
|
||||
{ SECTOR_DATA, -1 },
|
||||
{ CRC_END, 2 },
|
||||
{ CRC, 2 },
|
||||
{ MFM, 0x4e, 84 },
|
||||
{ MFM, 0x00, 12 },
|
||||
{ SECTOR_LOOP_END },
|
||||
{ MFM, 0x4e, 170 },
|
||||
{ END }
|
||||
};
|
||||
|
||||
esq8img_format::esq8img_format()
|
||||
{
|
||||
}
|
||||
|
||||
const char *esq8img_format::name() const
|
||||
{
|
||||
return "img";
|
||||
}
|
||||
|
||||
const char *esq8img_format::description() const
|
||||
{
|
||||
return "Ensoniq Mirage/SQ-80 floppy disk image";
|
||||
}
|
||||
|
||||
const char *esq8img_format::extensions() const
|
||||
{
|
||||
return "img";
|
||||
}
|
||||
|
||||
bool esq8img_format::supports_save() const
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
void esq8img_format::find_size(io_generic *io, int &track_count, int &head_count, int §or_count)
|
||||
{
|
||||
int size = io_generic_size(io);
|
||||
track_count = 80;
|
||||
head_count = 1;
|
||||
sector_count = 6;
|
||||
|
||||
if (size == 5632 * 80)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
track_count = head_count = sector_count = 0;
|
||||
}
|
||||
|
||||
int esq8img_format::identify(io_generic *io, UINT32 form_factor)
|
||||
{
|
||||
int track_count, head_count, sector_count;
|
||||
find_size(io, track_count, head_count, sector_count);
|
||||
|
||||
if(track_count)
|
||||
return 50;
|
||||
return 0;
|
||||
}
|
||||
|
||||
bool esq8img_format::load(io_generic *io, UINT32 form_factor, floppy_image *image)
|
||||
{
|
||||
int track_count, head_count, sector_count;
|
||||
find_size(io, track_count, head_count, sector_count);
|
||||
|
||||
UINT8 sectdata[(5*1024) + 512];
|
||||
desc_s sectors[6];
|
||||
for(int i=0; i<sector_count; i++) {
|
||||
if (i < 5)
|
||||
{
|
||||
sectors[i].data = sectdata + (1024*i); // 5 1024 byte sectors
|
||||
sectors[i].size = 1024;
|
||||
sectors[i].sector_id = i;
|
||||
}
|
||||
else
|
||||
{
|
||||
sectors[i].data = sectdata + (5*1024); // 1 512 byte sector
|
||||
sectors[i].size = 512;
|
||||
sectors[i].sector_id = i;
|
||||
}
|
||||
}
|
||||
|
||||
int track_size = (5*1024) + 512;
|
||||
|
||||
for(int track=0; track < track_count; track++)
|
||||
{
|
||||
for(int head=0; head < head_count; head++)
|
||||
{
|
||||
io_generic_read(io, sectdata, (track*head_count + head)*track_size, track_size);
|
||||
generate_track(esq_6_desc, track, head, sectors, sector_count, 109376, image);
|
||||
}
|
||||
}
|
||||
|
||||
image->set_variant(floppy_image::DSDD);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool esq8img_format::save(io_generic *io, floppy_image *image)
|
||||
{
|
||||
int track_count, head_count, sector_count;
|
||||
get_geometry_mfm_pc(image, 2000, track_count, head_count, sector_count);
|
||||
|
||||
if(track_count != 80)
|
||||
track_count = 80;
|
||||
|
||||
// Happens for a fully unformatted floppy
|
||||
if(!head_count)
|
||||
head_count = 1;
|
||||
|
||||
if(sector_count != 6)
|
||||
sector_count = 6;
|
||||
|
||||
UINT8 sectdata[10*512];
|
||||
int track_size = (5*1024) + 512;
|
||||
|
||||
for(int track=0; track < track_count; track++) {
|
||||
for(int head=0; head < head_count; head++) {
|
||||
get_track_data_mfm_pc(track, head, image, 2000, 512, sector_count, sectdata);
|
||||
io_generic_write(io, sectdata, (track*head_count + head)*track_size, track_size);
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
const floppy_format_type FLOPPY_ESQ8IMG_FORMAT = &floppy_image_format_creator<esq8img_format>;
|
40
src/lib/formats/esq8_dsk.h
Normal file
40
src/lib/formats/esq8_dsk.h
Normal file
@ -0,0 +1,40 @@
|
||||
/*********************************************************************
|
||||
|
||||
formats/esq8_dsk.h
|
||||
|
||||
Formats for 8-bit Ensoniq synthesizers and samplers
|
||||
|
||||
Disk is PC MFM, 40 tracks, single (Mirage) or double (SQ-80) sided,
|
||||
with 6 sectors per track.
|
||||
Sectors 0-4 are 1024 bytes, sector 5 is 512 bytes
|
||||
|
||||
*********************************************************************/
|
||||
|
||||
#ifndef ESQ8_DSK_H_
|
||||
#define ESQ8_DSK_H_
|
||||
|
||||
#include "flopimg.h"
|
||||
|
||||
class esq8img_format : public floppy_image_format_t
|
||||
{
|
||||
public:
|
||||
esq8img_format();
|
||||
|
||||
virtual int identify(io_generic *io, UINT32 form_factor);
|
||||
virtual bool load(io_generic *io, UINT32 form_factor, floppy_image *image);
|
||||
virtual bool save(io_generic *io, floppy_image *image);
|
||||
|
||||
virtual const char *name() const;
|
||||
virtual const char *description() const;
|
||||
virtual const char *extensions() const;
|
||||
virtual bool supports_save() const;
|
||||
|
||||
static const desc_e esq_6_desc[];
|
||||
|
||||
private:
|
||||
void find_size(io_generic *io, int &track_count, int &head_count, int §or_count);
|
||||
};
|
||||
|
||||
extern const floppy_format_type FLOPPY_ESQ8IMG_FORMAT;
|
||||
|
||||
#endif /* ESQ8_DSK_H_ */
|
@ -117,6 +117,7 @@ FORMATSOBJS = \
|
||||
$(LIBOBJ)/formats/dfi_dsk.o \
|
||||
$(LIBOBJ)/formats/dim_dsk.o \
|
||||
$(LIBOBJ)/formats/dsk_dsk.o \
|
||||
$(LIBOBJ)/formats/esq8_dsk.o \
|
||||
$(LIBOBJ)/formats/esq16_dsk.o \
|
||||
$(LIBOBJ)/formats/fdi_dsk.o \
|
||||
$(LIBOBJ)/formats/fm7_cas.o \
|
||||
|
Loading…
Reference in New Issue
Block a user