summaryrefslogtreecommitdiffstatshomepage
path: root/src/lib/formats/thom_dsk.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/formats/thom_dsk.c')
-rw-r--r--src/lib/formats/thom_dsk.c121
1 files changed, 60 insertions, 61 deletions
diff --git a/src/lib/formats/thom_dsk.c b/src/lib/formats/thom_dsk.c
index 837471e06fd..df910bcbc94 100644
--- a/src/lib/formats/thom_dsk.c
+++ b/src/lib/formats/thom_dsk.c
@@ -30,19 +30,19 @@ struct sap_dsk_tag
{
int tracks;
int sector_size;
- int sector_pos[80][16]; /* remember sector position in file */
+ int sector_pos[80][16]; /* remember sector position in file */
};
static UINT16 thom_sap_crc( UINT8* data, int size )
{
- int i;
- UINT16 crc = 0xffff, crc2;
- for ( i = 0; i < size; i++ )
- {
- crc2 = ( crc >> 4 ) ^ sap_crc[ ( crc ^ data[i] ) & 15 ];
- crc = ( crc2 >> 4 ) ^ sap_crc[ ( crc2 ^ (data[i] >> 4) ) & 15 ];
- }
- return crc;
+ int i;
+ UINT16 crc = 0xffff, crc2;
+ for ( i = 0; i < size; i++ )
+ {
+ crc2 = ( crc >> 4 ) ^ sap_crc[ ( crc ^ data[i] ) & 15 ];
+ crc = ( crc2 >> 4 ) ^ sap_crc[ ( crc2 ^ (data[i] >> 4) ) & 15 ];
+ }
+ return crc;
}
static struct sap_dsk_tag *get_tag(floppy_image_legacy *floppy)
@@ -79,7 +79,7 @@ static int sap_get_tracks_per_disk(floppy_image_legacy *floppy)
static floperr_t get_offset(floppy_image_legacy *floppy, int head, int track, int sector, int sector_is_index, UINT64 *offset)
{
UINT64 offs;
- struct sap_dsk_tag *tag = get_tag(floppy);
+ struct sap_dsk_tag *tag = get_tag(floppy);
/* translate the sector to a raw sector */
if (!sector_is_index)
{
@@ -90,9 +90,9 @@ static floperr_t get_offset(floppy_image_legacy *floppy, int head, int track, in
|| (sector < 0) || (sector >= 16))
return FLOPPY_ERROR_SEEKERROR;
- offs = tag->sector_pos[track][sector];
- if (offs <= 0 )
- return FLOPPY_ERROR_SEEKERROR;
+ offs = tag->sector_pos[track][sector];
+ if (offs <= 0 )
+ return FLOPPY_ERROR_SEEKERROR;
if (offset)
*offset = offs;
@@ -126,20 +126,20 @@ static floperr_t internal_sap_write_sector(floppy_image_legacy *floppy, int head
UINT64 offset;
floperr_t err;
UINT8 buf[256+6];
- UINT16 crc;
+ UINT16 crc;
int i;
err = get_offset(floppy, head, track, sector, sector_is_index, &offset);
if (err)
return err;
- /* buf = 4-byte header + sector + 2-byte CRC */
+ /* buf = 4-byte header + sector + 2-byte CRC */
floppy_image_read(floppy, buf, offset, 4);
for (i=0;i<buflen;i++) {
buf[i+4] = ((UINT8*)buffer)[i];
}
- crc = thom_sap_crc( buf, buflen+4 );
- buf[buflen+4] = crc >> 8;
- buf[buflen+5] = crc & 0xff;
+ crc = thom_sap_crc( buf, buflen+4 );
+ buf[buflen+4] = crc >> 8;
+ buf[buflen+5] = crc & 0xff;
for (i=0;i<buflen;i++) {
buf[i+4] ^= sap_magic_num;
}
@@ -209,41 +209,41 @@ static floperr_t sap_get_indexed_sector_info(floppy_image_legacy *floppy, int he
static floperr_t sap_post_format(floppy_image_legacy *floppy, option_resolution *params)
{
- int track,sector;
- int pos;
- UINT8 buf[256], header[4];
+ int track,sector;
+ int pos;
+ UINT8 buf[256], header[4];
struct sap_dsk_tag *tag;
- tag = (struct sap_dsk_tag *) floppy_create_tag(floppy, sizeof(struct sap_dsk_tag));
+ tag = (struct sap_dsk_tag *) floppy_create_tag(floppy, sizeof(struct sap_dsk_tag));
- /* default options */
- if ( !tag->tracks )
- {
- tag->tracks = 80;
- tag->sector_size = 256;
- }
+ /* default options */
+ if ( !tag->tracks )
+ {
+ tag->tracks = 80;
+ tag->sector_size = 256;
+ }
- /* create SAP file header */
- floppy_image_write( floppy, sap_header, 0, 66 );
+ /* create SAP file header */
+ floppy_image_write( floppy, sap_header, 0, 66 );
- for ( track = 0; track < 80; track++ )
- for ( sector = 0; sector < 16; sector++ )
- tag->sector_pos[track][sector] = 0;
+ for ( track = 0; track < 80; track++ )
+ for ( sector = 0; sector < 16; sector++ )
+ tag->sector_pos[track][sector] = 0;
- /* create all sectors with valid header and CRC */
+ /* create all sectors with valid header and CRC */
memset(buf, 0xe5, 256);
- pos = 0x42;
- header[0] = (tag->sector_size==128) ? 1 : 0;
- header[1] = 0;
- for ( track = 0, pos = 0x42; track < tag->tracks; track++ )
- for ( sector = 0; sector < 16; sector++, pos += tag->sector_size + 6 ) {
- tag->sector_pos[track][sector] = pos;
- header[2] = track;
- header[3] = sector + 1;
- floppy_image_write(floppy, header, pos, 4);
- sap_write_indexed_sector( floppy, 0, track, sector, buf, tag->sector_size, 0 );
- }
-
- return FLOPPY_ERROR_SUCCESS;
+ pos = 0x42;
+ header[0] = (tag->sector_size==128) ? 1 : 0;
+ header[1] = 0;
+ for ( track = 0, pos = 0x42; track < tag->tracks; track++ )
+ for ( sector = 0; sector < 16; sector++, pos += tag->sector_size + 6 ) {
+ tag->sector_pos[track][sector] = pos;
+ header[2] = track;
+ header[3] = sector + 1;
+ floppy_image_write(floppy, header, pos, 4);
+ sap_write_indexed_sector( floppy, 0, track, sector, buf, tag->sector_size, 0 );
+ }
+
+ return FLOPPY_ERROR_SUCCESS;
}
@@ -257,25 +257,25 @@ static FLOPPY_CONSTRUCT(sap_dsk_construct)
if (!tag)
return FLOPPY_ERROR_OUTOFMEMORY;
- /* guess format */
+ /* guess format */
floppy_image_read(floppy, &fmt, 0x42, 1);
if ( fmt==1 ) tag->sector_size = 128; else tag->sector_size = 256;
- /* start with an empty offset table */
- tag->tracks = 0;
- for ( i = 0; i < 80; i++ )
- for ( j = 0; j < 16; j++ )
- tag->sector_pos[i][j] = 0;
+ /* start with an empty offset table */
+ tag->tracks = 0;
+ for ( i = 0; i < 80; i++ )
+ for ( j = 0; j < 16; j++ )
+ tag->sector_pos[i][j] = 0;
- /* count tracks & fill sector offset table */
+ /* count tracks & fill sector offset table */
for ( i = 0x42; i+4 < floppy_image_size(floppy); i += tag->sector_size + 6 ) // CRC 2 bytes + 4 bytes sector header
{
- UINT8 sector, track;
+ UINT8 sector, track;
floppy_image_read(floppy, &track, i+2, 1);
floppy_image_read(floppy, &sector, i+3, 1);
- if ( track >= 80 || sector < 1 || sector > 16 ) continue;
- if ( track > tag->tracks ) tag->tracks = track+1;
- tag->sector_pos[track][sector-1] = i;
+ if ( track >= 80 || sector < 1 || sector > 16 ) continue;
+ if ( track > tag->tracks ) tag->tracks = track+1;
+ tag->sector_pos[track][sector-1] = i;
}
callbacks = floppy_callbacks(floppy);
callbacks->read_sector = sap_read_sector;
@@ -378,9 +378,9 @@ LEGACY_FLOPPY_OPTIONS_START(thomson)
SECTOR_LENGTH([128])
FIRST_SECTOR_ID([1]))
- LEGACY_FLOPPY_OPTION(sap,"sap", "Thomson SAP floppy disk image", sap_dsk_identify, sap_dsk_construct, NULL, NULL)
+ LEGACY_FLOPPY_OPTION(sap,"sap", "Thomson SAP floppy disk image", sap_dsk_identify, sap_dsk_construct, NULL, NULL)
- LEGACY_FLOPPY_OPTION(qdd,"qd", "Thomson QDD floppy disk image (2\"8 SD)", qdd_dsk_identify, qdd_dsk_construct, NULL,
+ LEGACY_FLOPPY_OPTION(qdd,"qd", "Thomson QDD floppy disk image (2\"8 SD)", qdd_dsk_identify, qdd_dsk_construct, NULL,
HEADS([1])
TRACKS([1])
SECTORS([400])
@@ -388,4 +388,3 @@ LEGACY_FLOPPY_OPTIONS_START(thomson)
FIRST_SECTOR_ID([0]))
LEGACY_FLOPPY_OPTIONS_END
-