diff options
Diffstat (limited to 'src/lib/formats/thom_dsk.c')
-rw-r--r-- | src/lib/formats/thom_dsk.c | 121 |
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, §or, 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 - |