diff options
Diffstat (limited to 'trunk/src/lib/formats/atarist_dsk.c')
-rw-r--r-- | trunk/src/lib/formats/atarist_dsk.c | 82 |
1 files changed, 82 insertions, 0 deletions
diff --git a/trunk/src/lib/formats/atarist_dsk.c b/trunk/src/lib/formats/atarist_dsk.c new file mode 100644 index 00000000000..797ca32aac4 --- /dev/null +++ b/trunk/src/lib/formats/atarist_dsk.c @@ -0,0 +1,82 @@ +/********************************************************************* + + formats/atarist_dsk.c + + Atari ST disk images + +*********************************************************************/ + +#include "formats/atarist_dsk.h" +#include "formats/basicdsk.h" + +/* + + TODO: + + - MSA format + - STT format + - DIM format + +*/ + +/*************************************************************************** + CONSTANTS / MACROS +***************************************************************************/ + +#define LOG 0 + +/*************************************************************************** + IMPLEMENTATION +***************************************************************************/ + +/*------------------------------------------------- + FLOPPY_IDENTIFY( atarist_st_identify ) +-------------------------------------------------*/ + +static FLOPPY_IDENTIFY( atarist_st_identify ) +{ + *vote = 100; + + return FLOPPY_ERROR_SUCCESS; +} + +/*------------------------------------------------- + FLOPPY_CONSTRUCT( atarist_st_construct ) +-------------------------------------------------*/ + +static FLOPPY_CONSTRUCT( atarist_st_construct ) +{ + int heads = 0; + int tracks = 0; + int sectors = 0; + UINT8 bootsector[512]; + + floppy_image_read(floppy, bootsector, 0, 512); + sectors = bootsector[0x18]; + heads = bootsector[0x1a]; + tracks = (bootsector[0x13] | (bootsector[0x14] << 8)) / sectors / heads; + + struct basicdsk_geometry geometry; + memset(&geometry, 0, sizeof(geometry)); + + geometry.heads = heads; + geometry.first_sector_id = 1; + geometry.sector_length = 512; + geometry.tracks = tracks; + geometry.sectors = sectors; + + if (LOG) LOG_FORMATS("ST Heads %u Tracks %u Sectors %u\n", heads, tracks, sectors); + + return basicdsk_construct(floppy, &geometry); +} + +/*------------------------------------------------- + FLOPPY_CONSTRUCT(atarist_dsk_construct) +-------------------------------------------------*/ + +LEGACY_FLOPPY_OPTIONS_START( atarist ) + LEGACY_FLOPPY_OPTION( atarist, "st", "Atari ST floppy disk image", atarist_st_identify, atarist_st_construct, NULL, NULL ) +/* LEGACY_FLOPPY_OPTION( atarist, "stt", "Atari ST floppy disk image", atarist_stt_identify, atarist_stt_construct, NULL, NULL ) + LEGACY_FLOPPY_OPTION( atarist, "msa", "Atari ST floppy disk image", atarist_msa_identify, atarist_msa_construct, NULL, NULL ) + LEGACY_FLOPPY_OPTION( atarist, "dim", "Atari ST floppy disk image", atarist_dim_identify, atarist_dim_construct, NULL, NULL )*/ +LEGACY_FLOPPY_OPTIONS_END |