Added WD1007V-SE1 ESDI emulation.

This commit is contained in:
SarahW 2017-07-05 21:00:50 +01:00
commit 5d6c3fb9ea
16 changed files with 891 additions and 29 deletions

View file

@ -52,34 +52,55 @@ void hdd_close(hdd_file_t *hdd)
}
}
void hdd_read_sectors(hdd_file_t *hdd, int offset, int nr_sectors, void *buffer)
int hdd_read_sectors(hdd_file_t *hdd, int offset, int nr_sectors, void *buffer)
{
off64_t addr;
int transfer_sectors = nr_sectors;
if ((hdd->sectors - offset) < transfer_sectors)
transfer_sectors = hdd->sectors - offset;
addr = offset * 512;
fseeko64(hdd->f, addr, SEEK_SET);
fread(buffer, nr_sectors*512, 1, hdd->f);
fread(buffer, transfer_sectors*512, 1, hdd->f);
if (nr_sectors != transfer_sectors)
return 1;
return 0;
}
void hdd_write_sectors(hdd_file_t *hdd, int offset, int nr_sectors, void *buffer)
int hdd_write_sectors(hdd_file_t *hdd, int offset, int nr_sectors, void *buffer)
{
off64_t addr;
int transfer_sectors = nr_sectors;
if ((hdd->sectors - offset) < transfer_sectors)
transfer_sectors = hdd->sectors - offset;
addr = offset * 512;
fseeko64(hdd->f, addr, SEEK_SET);
fwrite(buffer, nr_sectors*512, 1, hdd->f);
fwrite(buffer, transfer_sectors*512, 1, hdd->f);
if (nr_sectors != transfer_sectors)
return 1;
return 0;
}
void hdd_format_sectors(hdd_file_t *hdd, int offset, int nr_sectors)
int hdd_format_sectors(hdd_file_t *hdd, int offset, int nr_sectors)
{
off64_t addr;
int c;
uint8_t zero_buffer[512];
int transfer_sectors = nr_sectors;
memset(zero_buffer, 0, 512);
if ((hdd->sectors - offset) < transfer_sectors)
transfer_sectors = hdd->sectors - offset;
addr = offset * 512;
fseeko64(hdd->f, addr, SEEK_SET);
for (c = 0; c < nr_sectors; c++)
for (c = 0; c < transfer_sectors; c++)
fwrite(zero_buffer, 512, 1, hdd->f);
if (nr_sectors != transfer_sectors)
return 1;
return 0;
}