mame/src/lib/formats/comx35_dsk.c

79 lines
1.9 KiB
C

/*********************************************************************
formats/comx35_dsk.c
COMX35 disk images
*********************************************************************/
#include "formats/comx35_dsk.h"
#include "formats/basicdsk.h"
/***************************************************************************
IMPLEMENTATION
***************************************************************************/
/*-------------------------------------------------
FLOPPY_IDENTIFY( comx35_dsk_identify )
-------------------------------------------------*/
static FLOPPY_IDENTIFY( comx35_dsk_identify )
{
*vote = ((floppy_image_size(floppy) == (35*1*16*128)) || (floppy_image_size(floppy) == (35*2*16*128))) ? 100 : 0;
return FLOPPY_ERROR_SUCCESS;
}
/*-------------------------------------------------
FLOPPY_CONSTRUCT( comx35_dsk_construct )
-------------------------------------------------*/
static FLOPPY_CONSTRUCT( comx35_dsk_construct )
{
UINT8 header[1];
int heads = 1;
int cylinders = 35;
switch (floppy_image_size(floppy))
{
case 35*1*16*128:
heads = 1;
cylinders = 35;
break;
case 35*2*16*128:
floppy_image_read(floppy, header, 0x12, 1);
if (header[0] == 0x01)
{
heads = 1;
cylinders = 70;
}
else
{
heads = 2;
cylinders = 35;
}
break;
}
struct basicdsk_geometry geometry;
memset(&geometry, 0, sizeof(geometry));
geometry.heads = heads;
geometry.first_sector_id = 0;
geometry.sector_length = 128;
geometry.tracks = cylinders;
geometry.sectors = 16;
return basicdsk_construct(floppy, &geometry);
}
/*-------------------------------------------------
FLOPPY_OPTIONS( comx35 )
-------------------------------------------------*/
LEGACY_FLOPPY_OPTIONS_START( comx35 )
LEGACY_FLOPPY_OPTION( comx35, "img", "COMX35 floppy disk image", comx35_dsk_identify, comx35_dsk_construct, NULL, NULL )
LEGACY_FLOPPY_OPTIONS_END