clang-format in src/floppy/
This commit is contained in:
252
src/floppy/fdc.c
252
src/floppy/fdc.c
File diff suppressed because it is too large
Load Diff
@@ -34,7 +34,7 @@
|
||||
#define ROM_B215 "roms/floppy/magitronic/Magitronic B215 - BIOS ROM.bin"
|
||||
#define ROM_ADDR (uint32_t)(device_get_config_hex20("bios_addr") & 0x000fffff)
|
||||
|
||||
#define DRIVE_SELECT (int)(real_drive(dev->fdc_controller, i))
|
||||
#define DRIVE_SELECT (int) (real_drive(dev->fdc_controller, i))
|
||||
typedef struct
|
||||
{
|
||||
fdc_t *fdc_controller;
|
||||
@@ -44,7 +44,7 @@ typedef struct
|
||||
static uint8_t
|
||||
b215_read(uint16_t addr, void *priv)
|
||||
{
|
||||
b215_t *dev = (b215_t *)priv;
|
||||
b215_t *dev = (b215_t *) priv;
|
||||
|
||||
/*
|
||||
Register 3F0h
|
||||
@@ -59,19 +59,15 @@ b215_read(uint16_t addr, void *priv)
|
||||
*/
|
||||
int drive_spec[2];
|
||||
|
||||
for (int i = 0; i <= 1; i++)
|
||||
{
|
||||
if (fdd_is_525(DRIVE_SELECT))
|
||||
{
|
||||
for (int i = 0; i <= 1; i++) {
|
||||
if (fdd_is_525(DRIVE_SELECT)) {
|
||||
if (!fdd_is_dd(DRIVE_SELECT))
|
||||
drive_spec[i] = 1;
|
||||
else if (fdd_doublestep_40(DRIVE_SELECT))
|
||||
drive_spec[i] = 2;
|
||||
else
|
||||
drive_spec[i] = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
} else {
|
||||
if (fdd_is_dd(DRIVE_SELECT) && !fdd_is_double_sided(DRIVE_SELECT))
|
||||
drive_spec[i] = 0;
|
||||
else if (fdd_is_dd(DRIVE_SELECT) && fdd_is_double_sided(DRIVE_SELECT))
|
||||
@@ -87,7 +83,7 @@ b215_read(uint16_t addr, void *priv)
|
||||
static void
|
||||
b215_close(void *priv)
|
||||
{
|
||||
b215_t *dev = (b215_t *)priv;
|
||||
b215_t *dev = (b215_t *) priv;
|
||||
|
||||
free(dev);
|
||||
}
|
||||
@@ -95,7 +91,7 @@ b215_close(void *priv)
|
||||
static void *
|
||||
b215_init(const device_t *info)
|
||||
{
|
||||
b215_t *dev = (b215_t *)malloc(sizeof(b215_t));
|
||||
b215_t *dev = (b215_t *) malloc(sizeof(b215_t));
|
||||
memset(dev, 0, sizeof(b215_t));
|
||||
|
||||
rom_init(&dev->rom, ROM_B215, ROM_ADDR, 0x2000, 0x1fff, 0, MEM_MAPPING_EXTERNAL);
|
||||
@@ -106,13 +102,14 @@ b215_init(const device_t *info)
|
||||
return dev;
|
||||
}
|
||||
|
||||
static int b215_available(void)
|
||||
static int
|
||||
b215_available(void)
|
||||
{
|
||||
return rom_present(ROM_B215);
|
||||
}
|
||||
|
||||
static const device_config_t b215_config[] = {
|
||||
// clang-format off
|
||||
// clang-format off
|
||||
{
|
||||
.name = "bios_addr",
|
||||
.description = "BIOS Address:",
|
||||
|
||||
@@ -90,7 +90,7 @@ typedef struct
|
||||
static void
|
||||
pii_close(void *priv)
|
||||
{
|
||||
pii_t *dev = (pii_t *)priv;
|
||||
pii_t *dev = (pii_t *) priv;
|
||||
|
||||
free(dev);
|
||||
}
|
||||
@@ -100,7 +100,7 @@ pii_init(const device_t *info)
|
||||
{
|
||||
pii_t *dev;
|
||||
|
||||
dev = (pii_t *)malloc(sizeof(pii_t));
|
||||
dev = (pii_t *) malloc(sizeof(pii_t));
|
||||
memset(dev, 0, sizeof(pii_t));
|
||||
|
||||
if (BIOS_ADDR != 0)
|
||||
@@ -111,18 +111,20 @@ pii_init(const device_t *info)
|
||||
return dev;
|
||||
}
|
||||
|
||||
static int pii_151b_available(void)
|
||||
static int
|
||||
pii_151b_available(void)
|
||||
{
|
||||
return rom_present(ROM_PII_151B);
|
||||
}
|
||||
|
||||
static int pii_158_available(void)
|
||||
static int
|
||||
pii_158_available(void)
|
||||
{
|
||||
return rom_present(ROM_PII_158B);
|
||||
}
|
||||
|
||||
static const device_config_t pii_config[] = {
|
||||
// clang-format off
|
||||
// clang-format off
|
||||
{
|
||||
.name = "bios_addr",
|
||||
.description = "BIOS Address:",
|
||||
|
||||
145
src/floppy/fdd.c
145
src/floppy/fdd.c
@@ -39,7 +39,6 @@
|
||||
#include <86box/fdd_td0.h>
|
||||
#include <86box/fdc.h>
|
||||
|
||||
|
||||
/* Flags:
|
||||
Bit 0: 300 rpm supported;
|
||||
Bit 1: 360 rpm supported;
|
||||
@@ -65,7 +64,6 @@
|
||||
#define FLAG_IGNORE_DENSEL 512
|
||||
#define FLAG_PS2 1024
|
||||
|
||||
|
||||
typedef struct {
|
||||
int type;
|
||||
int track;
|
||||
@@ -75,7 +73,6 @@ typedef struct {
|
||||
int check_bpb;
|
||||
} fdd_t;
|
||||
|
||||
|
||||
fdd_t fdd[FDD_NUM];
|
||||
|
||||
char floppyfns[FDD_NUM][512];
|
||||
@@ -86,8 +83,8 @@ static int fdd_notfound = 0,
|
||||
driveloaders[FDD_NUM];
|
||||
|
||||
int writeprot[FDD_NUM], fwriteprot[FDD_NUM],
|
||||
fdd_changed[FDD_NUM], ui_writeprot[FDD_NUM] = {0, 0, 0, 0},
|
||||
drive_empty[FDD_NUM] = {1, 1, 1, 1};
|
||||
fdd_changed[FDD_NUM], ui_writeprot[FDD_NUM] = { 0, 0, 0, 0 },
|
||||
drive_empty[FDD_NUM] = { 1, 1, 1, 1 };
|
||||
|
||||
DRIVE drives[FDD_NUM];
|
||||
|
||||
@@ -97,51 +94,48 @@ fdc_t *fdd_fdc;
|
||||
|
||||
d86f_handler_t d86f_handler[FDD_NUM];
|
||||
|
||||
|
||||
static const struct
|
||||
{
|
||||
char *ext;
|
||||
void (*load)(int drive, char *fn);
|
||||
void (*close)(int drive);
|
||||
int size;
|
||||
} loaders[]=
|
||||
{
|
||||
} loaders[] = {
|
||||
{"001", img_load, img_close, -1},
|
||||
{"002", img_load, img_close, -1},
|
||||
{"003", img_load, img_close, -1},
|
||||
{"004", img_load, img_close, -1},
|
||||
{"005", img_load, img_close, -1},
|
||||
{"006", img_load, img_close, -1},
|
||||
{"007", img_load, img_close, -1},
|
||||
{"008", img_load, img_close, -1},
|
||||
{"009", img_load, img_close, -1},
|
||||
{"010", img_load, img_close, -1},
|
||||
{"12", img_load, img_close, -1},
|
||||
{"144", img_load, img_close, -1},
|
||||
{"360", img_load, img_close, -1},
|
||||
{"720", img_load, img_close, -1},
|
||||
{"86F", d86f_load, d86f_close, -1},
|
||||
{"BIN", img_load, img_close, -1},
|
||||
{"CQ", img_load, img_close, -1},
|
||||
{"CQM", img_load, img_close, -1},
|
||||
{"DDI", img_load, img_close, -1},
|
||||
{"DSK", img_load, img_close, -1},
|
||||
{"FDI", fdi_load, fdi_close, -1},
|
||||
{"FDF", img_load, img_close, -1},
|
||||
{"FLP", img_load, img_close, -1},
|
||||
{"HDM", img_load, img_close, -1},
|
||||
{"IMA", img_load, img_close, -1},
|
||||
{"IMD", imd_load, imd_close, -1},
|
||||
{"IMG", img_load, img_close, -1},
|
||||
{"JSON", json_load, json_close, -1},
|
||||
{"MFM", mfm_load, mfm_close, -1},
|
||||
{"TD0", td0_load, td0_close, -1},
|
||||
{"VFD", img_load, img_close, -1},
|
||||
{"XDF", img_load, img_close, -1},
|
||||
{0, 0, 0, 0}
|
||||
{ "002", img_load, img_close, -1},
|
||||
{ "003", img_load, img_close, -1},
|
||||
{ "004", img_load, img_close, -1},
|
||||
{ "005", img_load, img_close, -1},
|
||||
{ "006", img_load, img_close, -1},
|
||||
{ "007", img_load, img_close, -1},
|
||||
{ "008", img_load, img_close, -1},
|
||||
{ "009", img_load, img_close, -1},
|
||||
{ "010", img_load, img_close, -1},
|
||||
{ "12", img_load, img_close, -1},
|
||||
{ "144", img_load, img_close, -1},
|
||||
{ "360", img_load, img_close, -1},
|
||||
{ "720", img_load, img_close, -1},
|
||||
{ "86F", d86f_load, d86f_close, -1},
|
||||
{ "BIN", img_load, img_close, -1},
|
||||
{ "CQ", img_load, img_close, -1},
|
||||
{ "CQM", img_load, img_close, -1},
|
||||
{ "DDI", img_load, img_close, -1},
|
||||
{ "DSK", img_load, img_close, -1},
|
||||
{ "FDI", fdi_load, fdi_close, -1},
|
||||
{ "FDF", img_load, img_close, -1},
|
||||
{ "FLP", img_load, img_close, -1},
|
||||
{ "HDM", img_load, img_close, -1},
|
||||
{ "IMA", img_load, img_close, -1},
|
||||
{ "IMD", imd_load, imd_close, -1},
|
||||
{ "IMG", img_load, img_close, -1},
|
||||
{ "JSON", json_load, json_close, -1},
|
||||
{ "MFM", mfm_load, mfm_close, -1},
|
||||
{ "TD0", td0_load, td0_close, -1},
|
||||
{ "VFD", img_load, img_close, -1},
|
||||
{ "XDF", img_load, img_close, -1},
|
||||
{ 0, 0, 0, 0 }
|
||||
};
|
||||
|
||||
|
||||
static const struct
|
||||
{
|
||||
int max_track;
|
||||
@@ -197,49 +191,43 @@ static const struct
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
#ifdef ENABLE_FDD_LOG
|
||||
int fdd_do_log = ENABLE_FDD_LOG;
|
||||
|
||||
|
||||
static void
|
||||
fdd_log(const char *fmt, ...)
|
||||
{
|
||||
va_list ap;
|
||||
|
||||
if (fdd_do_log)
|
||||
{
|
||||
if (fdd_do_log) {
|
||||
va_start(ap, fmt);
|
||||
pclog_ex(fmt, ap);
|
||||
va_end(ap);
|
||||
}
|
||||
}
|
||||
#else
|
||||
#define fdd_log(fmt, ...)
|
||||
# define fdd_log(fmt, ...)
|
||||
#endif
|
||||
|
||||
|
||||
char *
|
||||
fdd_getname(int type)
|
||||
{
|
||||
return (char *)drive_types[type].name;
|
||||
return (char *) drive_types[type].name;
|
||||
}
|
||||
|
||||
|
||||
char *
|
||||
fdd_get_internal_name(int type)
|
||||
{
|
||||
return (char *)drive_types[type].internal_name;
|
||||
return (char *) drive_types[type].internal_name;
|
||||
}
|
||||
|
||||
|
||||
int
|
||||
fdd_get_from_internal_name(char *s)
|
||||
{
|
||||
int c = 0;
|
||||
|
||||
while (strlen(drive_types[c].internal_name)) {
|
||||
if (!strcmp((char *)drive_types[c].internal_name, s))
|
||||
if (!strcmp((char *) drive_types[c].internal_name, s))
|
||||
return c;
|
||||
c++;
|
||||
}
|
||||
@@ -247,7 +235,6 @@ fdd_get_from_internal_name(char *s)
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/* This is needed for the dump as 86F feature. */
|
||||
void
|
||||
fdd_do_seek(int drive, int track)
|
||||
@@ -256,7 +243,6 @@ fdd_do_seek(int drive, int track)
|
||||
drives[drive].seek(drive, track);
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
fdd_forced_seek(int drive, int track_diff)
|
||||
{
|
||||
@@ -271,7 +257,6 @@ fdd_forced_seek(int drive, int track_diff)
|
||||
fdd_do_seek(drive, fdd[drive].track);
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
fdd_seek(int drive, int track_diff)
|
||||
{
|
||||
@@ -291,24 +276,22 @@ fdd_seek(int drive, int track_diff)
|
||||
fdd_do_seek(drive, fdd[drive].track);
|
||||
}
|
||||
|
||||
|
||||
int
|
||||
fdd_track0(int drive)
|
||||
{
|
||||
/* If drive is disabled, TRK0 never gets set. */
|
||||
if (!drive_types[fdd[drive].type].max_track) return 0;
|
||||
if (!drive_types[fdd[drive].type].max_track)
|
||||
return 0;
|
||||
|
||||
return !fdd[drive].track;
|
||||
}
|
||||
|
||||
|
||||
int
|
||||
fdd_current_track(int drive)
|
||||
{
|
||||
return fdd[drive].track;
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
fdd_set_densel(int densel)
|
||||
{
|
||||
@@ -322,7 +305,6 @@ fdd_set_densel(int densel)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
int
|
||||
fdd_getrpm(int drive)
|
||||
{
|
||||
@@ -351,7 +333,6 @@ fdd_getrpm(int drive)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
int
|
||||
fdd_can_read_medium(int drive)
|
||||
{
|
||||
@@ -362,14 +343,12 @@ fdd_can_read_medium(int drive)
|
||||
return !!(drive_types[fdd[drive].type].flags & hole);
|
||||
}
|
||||
|
||||
|
||||
int
|
||||
fdd_doublestep_40(int drive)
|
||||
{
|
||||
return !!(drive_types[fdd[drive].type].flags & FLAG_DOUBLE_STEP);
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
fdd_set_type(int drive, int type)
|
||||
{
|
||||
@@ -379,49 +358,42 @@ fdd_set_type(int drive, int type)
|
||||
fdd[drive].densel ^= 1;
|
||||
}
|
||||
|
||||
|
||||
int
|
||||
fdd_get_type(int drive)
|
||||
{
|
||||
return fdd[drive].type;
|
||||
}
|
||||
|
||||
|
||||
int
|
||||
fdd_get_flags(int drive)
|
||||
{
|
||||
return drive_types[fdd[drive].type].flags;
|
||||
}
|
||||
|
||||
|
||||
int
|
||||
fdd_is_525(int drive)
|
||||
{
|
||||
return drive_types[fdd[drive].type].flags & FLAG_525;
|
||||
}
|
||||
|
||||
|
||||
int
|
||||
fdd_is_dd(int drive)
|
||||
{
|
||||
return (drive_types[fdd[drive].type].flags & 0x70) == 0x10;
|
||||
}
|
||||
|
||||
|
||||
int
|
||||
fdd_is_ed(int drive)
|
||||
{
|
||||
return drive_types[fdd[drive].type].flags & FLAG_HOLE2;
|
||||
}
|
||||
|
||||
|
||||
int
|
||||
fdd_is_double_sided(int drive)
|
||||
{
|
||||
return drive_types[fdd[drive].type].flags & FLAG_DS;
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
fdd_set_head(int drive, int head)
|
||||
{
|
||||
@@ -431,7 +403,6 @@ fdd_set_head(int drive, int head)
|
||||
fdd[drive].head = head;
|
||||
}
|
||||
|
||||
|
||||
int
|
||||
fdd_get_head(int drive)
|
||||
{
|
||||
@@ -440,41 +411,36 @@ fdd_get_head(int drive)
|
||||
return fdd[drive].head;
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
fdd_set_turbo(int drive, int turbo)
|
||||
{
|
||||
fdd[drive].turbo = turbo;
|
||||
}
|
||||
|
||||
|
||||
int
|
||||
fdd_get_turbo(int drive)
|
||||
{
|
||||
return fdd[drive].turbo;
|
||||
}
|
||||
|
||||
|
||||
void fdd_set_check_bpb(int drive, int check_bpb)
|
||||
void
|
||||
fdd_set_check_bpb(int drive, int check_bpb)
|
||||
{
|
||||
fdd[drive].check_bpb = check_bpb;
|
||||
}
|
||||
|
||||
|
||||
int
|
||||
fdd_get_check_bpb(int drive)
|
||||
{
|
||||
return fdd[drive].check_bpb;
|
||||
}
|
||||
|
||||
|
||||
int
|
||||
fdd_get_densel(int drive)
|
||||
{
|
||||
return fdd[drive].densel;
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
fdd_load(int drive, char *fn)
|
||||
{
|
||||
@@ -498,7 +464,8 @@ fdd_load(int drive, char *fn)
|
||||
while (loaders[c].ext) {
|
||||
if (!strcasecmp(p, (char *) loaders[c].ext) && (size == loaders[c].size || loaders[c].size == -1)) {
|
||||
driveloaders[drive] = c;
|
||||
if (floppyfns[drive] != fn) strcpy(floppyfns[drive], fn);
|
||||
if (floppyfns[drive] != fn)
|
||||
strcpy(floppyfns[drive], fn);
|
||||
d86f_setup(drive);
|
||||
loaders[c].load(drive, floppyfns[drive]);
|
||||
drive_empty[drive] = 0;
|
||||
@@ -509,14 +476,13 @@ fdd_load(int drive, char *fn)
|
||||
c++;
|
||||
}
|
||||
}
|
||||
fdd_log("FDD: could not load '%s' %s\n",fn,p);
|
||||
fdd_log("FDD: could not load '%s' %s\n", fn, p);
|
||||
drive_empty[drive] = 1;
|
||||
fdd_set_head(drive, 0);
|
||||
memset(floppyfns[drive], 0, sizeof(floppyfns[drive]));
|
||||
ui_sb_update_icon_state(SB_FLOPPY | drive, 1);
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
fdd_close(int drive)
|
||||
{
|
||||
@@ -542,7 +508,6 @@ fdd_close(int drive)
|
||||
ui_sb_update_icon_state(SB_FLOPPY | drive, 1);
|
||||
}
|
||||
|
||||
|
||||
int
|
||||
fdd_hole(int drive)
|
||||
{
|
||||
@@ -552,7 +517,6 @@ fdd_hole(int drive)
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
static __inline uint64_t
|
||||
fdd_byteperiod(int drive)
|
||||
{
|
||||
@@ -562,7 +526,6 @@ fdd_byteperiod(int drive)
|
||||
return 32ULL * TIMER_USEC;
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
fdd_set_motor_enable(int drive, int motor_enable)
|
||||
{
|
||||
@@ -574,7 +537,6 @@ fdd_set_motor_enable(int drive, int motor_enable)
|
||||
motoron[drive] = motor_enable;
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
fdd_poll(void *priv)
|
||||
{
|
||||
@@ -598,7 +560,6 @@ fdd_poll(void *priv)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
int
|
||||
fdd_get_bitcell_period(int rate)
|
||||
{
|
||||
@@ -619,10 +580,9 @@ fdd_get_bitcell_period(int rate)
|
||||
break;
|
||||
}
|
||||
|
||||
return 1000000 / bit_rate*2; /*Bitcell period in ns*/
|
||||
return 1000000 / bit_rate * 2; /*Bitcell period in ns*/
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
fdd_reset(void)
|
||||
{
|
||||
@@ -634,7 +594,6 @@ fdd_reset(void)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
fdd_readsector(int drive, int sector, int track, int side, int density, int sector_size)
|
||||
{
|
||||
@@ -644,7 +603,6 @@ fdd_readsector(int drive, int sector, int track, int side, int density, int sect
|
||||
fdd_notfound = 1000;
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
fdd_writesector(int drive, int sector, int track, int side, int density, int sector_size)
|
||||
{
|
||||
@@ -654,7 +612,6 @@ fdd_writesector(int drive, int sector, int track, int side, int density, int sec
|
||||
fdd_notfound = 1000;
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
fdd_comparesector(int drive, int sector, int track, int side, int density, int sector_size)
|
||||
{
|
||||
@@ -664,7 +621,6 @@ fdd_comparesector(int drive, int sector, int track, int side, int density, int s
|
||||
fdd_notfound = 1000;
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
fdd_readaddress(int drive, int side, int density)
|
||||
{
|
||||
@@ -672,7 +628,6 @@ fdd_readaddress(int drive, int side, int density)
|
||||
drives[drive].readaddress(drive, side, density);
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
fdd_format(int drive, int side, int density, uint8_t fill)
|
||||
{
|
||||
@@ -682,7 +637,6 @@ fdd_format(int drive, int side, int density, uint8_t fill)
|
||||
fdd_notfound = 1000;
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
fdd_stop(int drive)
|
||||
{
|
||||
@@ -690,14 +644,12 @@ fdd_stop(int drive)
|
||||
drives[drive].stop(drive);
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
fdd_set_fdc(void *fdc)
|
||||
{
|
||||
fdd_fdc = (fdc_t *) fdc;
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
fdd_init(void)
|
||||
{
|
||||
@@ -720,7 +672,6 @@ fdd_init(void)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
fdd_do_writeback(int drive)
|
||||
{
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -24,7 +24,6 @@
|
||||
#include <86box/fdd.h>
|
||||
#include <86box/fdd_common.h>
|
||||
|
||||
|
||||
const uint8_t fdd_holes[6] = { 0, 0, 0, 1, 1, 2 };
|
||||
|
||||
const uint8_t fdd_rates[6] = { 2, 2, 1, 4, 0, 3 };
|
||||
@@ -60,10 +59,9 @@ const uint8_t fdd_max_sectors[8][6] = {
|
||||
};
|
||||
|
||||
const uint8_t fdd_dmf_r[21] = {
|
||||
12,2,13,3,14,4,15,5,16,6,17,7,18,8,19,9,20,10,21,11,1
|
||||
12, 2, 13, 3, 14, 4, 15, 5, 16, 6, 17, 7, 18, 8, 19, 9, 20, 10, 21, 11, 1
|
||||
};
|
||||
|
||||
|
||||
static const uint8_t fdd_gap3_sizes[5][8][48] = {
|
||||
{ { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* [0][0] */
|
||||
@@ -347,20 +345,18 @@ static const uint8_t fdd_gap3_sizes[5][8][48] = {
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
int
|
||||
fdd_get_gap3_size(int rate, int size, int sector)
|
||||
{
|
||||
return(fdd_gap3_sizes[rate][size][sector]);
|
||||
return (fdd_gap3_sizes[rate][size][sector]);
|
||||
}
|
||||
|
||||
|
||||
uint8_t
|
||||
fdd_sector_size_code(int size)
|
||||
{
|
||||
int ret = 2;
|
||||
|
||||
switch(size) {
|
||||
switch (size) {
|
||||
case 128:
|
||||
ret = 0;
|
||||
break;
|
||||
@@ -397,32 +393,29 @@ fdd_sector_size_code(int size)
|
||||
break;
|
||||
}
|
||||
|
||||
return(ret);
|
||||
return (ret);
|
||||
}
|
||||
|
||||
|
||||
int
|
||||
fdd_sector_code_size(uint8_t code)
|
||||
{
|
||||
return(128 << code);
|
||||
return (128 << code);
|
||||
}
|
||||
|
||||
|
||||
int
|
||||
fdd_bps_valid(uint16_t bps)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i=0; i<=8; i++) {
|
||||
for (i = 0; i <= 8; i++) {
|
||||
if (bps == (128 << i)) {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
return(0);
|
||||
return (0);
|
||||
}
|
||||
|
||||
|
||||
int
|
||||
fdd_interleave(int sector, int skew, int spt)
|
||||
{
|
||||
@@ -437,5 +430,5 @@ fdd_interleave(int sector, int skew, int spt)
|
||||
adjusted_r += (adjust + add);
|
||||
}
|
||||
|
||||
return(adjusted_r);
|
||||
return (adjusted_r);
|
||||
}
|
||||
|
||||
@@ -36,7 +36,6 @@
|
||||
#include <86box/fdc.h>
|
||||
#include <fdi2raw.h>
|
||||
|
||||
|
||||
typedef struct {
|
||||
FILE *f;
|
||||
FDI *h;
|
||||
@@ -47,36 +46,31 @@ typedef struct {
|
||||
int tracklen[2][4];
|
||||
int trackindex[2][4];
|
||||
|
||||
uint8_t track_data[2][4][256*1024];
|
||||
uint8_t track_timing[2][4][256*1024];
|
||||
uint8_t track_data[2][4][256 * 1024];
|
||||
uint8_t track_timing[2][4][256 * 1024];
|
||||
} fdi_t;
|
||||
|
||||
|
||||
static fdi_t *fdi[FDD_NUM];
|
||||
static fdc_t *fdi_fdc;
|
||||
|
||||
|
||||
#ifdef ENABLE_FDI_LOG
|
||||
int fdi_do_log = ENABLE_FDI_LOG;
|
||||
|
||||
|
||||
static void
|
||||
fdi_log(const char *fmt, ...)
|
||||
{
|
||||
va_list ap;
|
||||
|
||||
if (fdi_do_log)
|
||||
{
|
||||
if (fdi_do_log) {
|
||||
va_start(ap, fmt);
|
||||
pclog_ex(fmt, ap);
|
||||
va_end(ap);
|
||||
}
|
||||
}
|
||||
#else
|
||||
#define fdi_log(fmt, ...)
|
||||
# define fdi_log(fmt, ...)
|
||||
#endif
|
||||
|
||||
|
||||
static uint16_t
|
||||
disk_flags(int drive)
|
||||
{
|
||||
@@ -110,10 +104,9 @@ disk_flags(int drive)
|
||||
*/
|
||||
temp_disk_flags |= 0x800;
|
||||
|
||||
return(temp_disk_flags);
|
||||
return (temp_disk_flags);
|
||||
}
|
||||
|
||||
|
||||
static uint16_t
|
||||
side_flags(int drive)
|
||||
{
|
||||
@@ -150,37 +143,36 @@ side_flags(int drive)
|
||||
*/
|
||||
temp_side_flags |= 0x08;
|
||||
|
||||
return(temp_side_flags);
|
||||
return (temp_side_flags);
|
||||
}
|
||||
|
||||
|
||||
static int
|
||||
fdi_density(void)
|
||||
{
|
||||
if (! fdc_is_mfm(fdi_fdc)) return(0);
|
||||
if (!fdc_is_mfm(fdi_fdc))
|
||||
return (0);
|
||||
|
||||
switch (fdc_get_bit_rate(fdi_fdc)) {
|
||||
case 0:
|
||||
return(2);
|
||||
return (2);
|
||||
|
||||
case 1:
|
||||
return(1);
|
||||
return (1);
|
||||
|
||||
case 2:
|
||||
return(1);
|
||||
return (1);
|
||||
|
||||
case 3:
|
||||
case 5:
|
||||
return(3);
|
||||
return (3);
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return(1);
|
||||
return (1);
|
||||
}
|
||||
|
||||
|
||||
static int32_t
|
||||
extra_bit_cells(int drive, int side)
|
||||
{
|
||||
@@ -215,10 +207,9 @@ extra_bit_cells(int drive, int side)
|
||||
raw_size = is_300_rpm ? 100000 : 83333;
|
||||
}
|
||||
|
||||
return((dev->tracklen[side][density] - raw_size));
|
||||
return ((dev->tracklen[side][density] - raw_size));
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
read_revolution(int drive)
|
||||
{
|
||||
@@ -238,12 +229,12 @@ read_revolution(int drive)
|
||||
for (den = 0; den < 4; den++) {
|
||||
for (side = 0; side < dev->sides; side++) {
|
||||
c = fdi2raw_loadtrack(dev->h,
|
||||
(uint16_t *)dev->track_data[side][den],
|
||||
(uint16_t *)dev->track_timing[side][den],
|
||||
(uint16_t *) dev->track_data[side][den],
|
||||
(uint16_t *) dev->track_timing[side][den],
|
||||
(track * dev->sides) + side,
|
||||
&dev->tracklen[side][den],
|
||||
&dev->trackindex[side][den], NULL, den);
|
||||
if (! c)
|
||||
if (!c)
|
||||
memset(dev->track_data[side][den], 0, dev->tracklen[side][den]);
|
||||
}
|
||||
|
||||
@@ -254,7 +245,6 @@ read_revolution(int drive)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static uint32_t
|
||||
index_hole_pos(int drive, int side)
|
||||
{
|
||||
@@ -263,10 +253,9 @@ index_hole_pos(int drive, int side)
|
||||
|
||||
density = fdi_density();
|
||||
|
||||
return(dev->trackindex[side][density]);
|
||||
return (dev->trackindex[side][density]);
|
||||
}
|
||||
|
||||
|
||||
static uint32_t
|
||||
get_raw_size(int drive, int side)
|
||||
{
|
||||
@@ -275,10 +264,9 @@ get_raw_size(int drive, int side)
|
||||
|
||||
density = fdi_density();
|
||||
|
||||
return(dev->tracklen[side][density]);
|
||||
return (dev->tracklen[side][density]);
|
||||
}
|
||||
|
||||
|
||||
static uint16_t *
|
||||
encoded_data(int drive, int side)
|
||||
{
|
||||
@@ -287,10 +275,9 @@ encoded_data(int drive, int side)
|
||||
|
||||
density = fdi_density();
|
||||
|
||||
return((uint16_t *)dev->track_data[side][density]);
|
||||
return ((uint16_t *) dev->track_data[side][density]);
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
fdi_seek(int drive, int track)
|
||||
{
|
||||
@@ -303,7 +290,8 @@ fdi_seek(int drive, int track)
|
||||
|
||||
d86f_set_cur_track(drive, track);
|
||||
|
||||
if (dev->f == NULL) return;
|
||||
if (dev->f == NULL)
|
||||
return;
|
||||
|
||||
if (track < 0)
|
||||
track = 0;
|
||||
@@ -318,7 +306,6 @@ fdi_seek(int drive, int track)
|
||||
read_revolution(drive);
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
fdi_load(int drive, char *fn)
|
||||
{
|
||||
@@ -328,7 +315,7 @@ fdi_load(int drive, char *fn)
|
||||
writeprot[drive] = fwriteprot[drive] = 1;
|
||||
|
||||
/* Allocate a drive block. */
|
||||
dev = (fdi_t *)malloc(sizeof(fdi_t));
|
||||
dev = (fdi_t *) malloc(sizeof(fdi_t));
|
||||
|
||||
if (dev == NULL) {
|
||||
memset(floppyfns[drive], 0, sizeof(floppyfns[drive]));
|
||||
@@ -383,13 +370,13 @@ fdi_load(int drive, char *fn)
|
||||
fdi_log("Loaded as FDI\n");
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
fdi_close(int drive)
|
||||
{
|
||||
fdi_t *dev = fdi[drive];
|
||||
|
||||
if (dev == NULL) return;
|
||||
if (dev == NULL)
|
||||
return;
|
||||
|
||||
d86f_unregister(drive);
|
||||
|
||||
@@ -406,9 +393,8 @@ fdi_close(int drive)
|
||||
fdi[drive] = NULL;
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
fdi_set_fdc(void *fdc)
|
||||
{
|
||||
fdi_fdc = (fdc_t *)fdc;
|
||||
fdi_fdc = (fdc_t *) fdc;
|
||||
}
|
||||
|
||||
@@ -31,7 +31,6 @@
|
||||
#include <86box/fdd_imd.h>
|
||||
#include <86box/fdc.h>
|
||||
|
||||
|
||||
typedef struct {
|
||||
uint8_t is_present;
|
||||
uint32_t file_offs;
|
||||
@@ -64,38 +63,33 @@ typedef struct {
|
||||
uint8_t track_buffer[2][25000];
|
||||
} imd_t;
|
||||
|
||||
|
||||
static imd_t *imd[FDD_NUM];
|
||||
static fdc_t *imd_fdc;
|
||||
|
||||
|
||||
#ifdef ENABLE_IMD_LOG
|
||||
int imd_do_log = ENABLE_IMD_LOG;
|
||||
|
||||
|
||||
static void
|
||||
imd_log(const char *fmt, ...)
|
||||
{
|
||||
va_list ap;
|
||||
|
||||
if (imd_do_log)
|
||||
{
|
||||
if (imd_do_log) {
|
||||
va_start(ap, fmt);
|
||||
pclog_ex(fmt, ap);
|
||||
va_end(ap);
|
||||
}
|
||||
}
|
||||
#else
|
||||
#define imd_log(fmt, ...)
|
||||
# define imd_log(fmt, ...)
|
||||
#endif
|
||||
|
||||
|
||||
static uint32_t
|
||||
get_raw_tsize(int side_flags, int slower_rpm)
|
||||
{
|
||||
uint32_t size;
|
||||
|
||||
switch(side_flags & 0x27) {
|
||||
switch (side_flags & 0x27) {
|
||||
case 0x22:
|
||||
size = slower_rpm ? 5314 : 5208;
|
||||
break;
|
||||
@@ -135,10 +129,9 @@ get_raw_tsize(int side_flags, int slower_rpm)
|
||||
break;
|
||||
}
|
||||
|
||||
return(size);
|
||||
return (size);
|
||||
}
|
||||
|
||||
|
||||
static int
|
||||
track_is_xdf(int drive, int side, int track)
|
||||
{
|
||||
@@ -154,17 +147,19 @@ track_is_xdf(int drive, int side, int track)
|
||||
for (i = 0; i < 256; i++)
|
||||
dev->xdf_ordered_pos[i][side] = 0;
|
||||
|
||||
if (dev->tracks[track][side].params[2] & 0xC0) return(0);
|
||||
if (dev->tracks[track][side].params[2] & 0xC0)
|
||||
return (0);
|
||||
|
||||
if ((dev->tracks[track][side].params[3] != 16) &&
|
||||
(dev->tracks[track][side].params[3] != 19)) return(0);
|
||||
if ((dev->tracks[track][side].params[3] != 16) && (dev->tracks[track][side].params[3] != 19))
|
||||
return (0);
|
||||
|
||||
r_map = (uint8_t *)(dev->buffer + dev->tracks[track][side].r_map_offs);
|
||||
r_map = (uint8_t *) (dev->buffer + dev->tracks[track][side].r_map_offs);
|
||||
|
||||
if (! track) {
|
||||
if (dev->tracks[track][side].params[4] != 2) return(0);
|
||||
if (!track) {
|
||||
if (dev->tracks[track][side].params[4] != 2)
|
||||
return (0);
|
||||
|
||||
if (! side) {
|
||||
if (!side) {
|
||||
max_high_id = (dev->tracks[track][side].params[3] == 19) ? 0x8B : 0x88;
|
||||
expected_high_count = (dev->tracks[track][side].params[3] == 19) ? 0x0B : 0x08;
|
||||
expected_low_count = 8;
|
||||
@@ -185,12 +180,13 @@ track_is_xdf(int drive, int side, int track)
|
||||
}
|
||||
if ((high_sectors == expected_high_count) && (low_sectors == expected_low_count)) {
|
||||
dev->current_side_flags[side] = (dev->tracks[track][side].params[3] == 19) ? 0x08 : 0x28;
|
||||
return((dev->tracks[track][side].params[3] == 19) ? 2 : 1);
|
||||
return ((dev->tracks[track][side].params[3] == 19) ? 2 : 1);
|
||||
}
|
||||
}
|
||||
return(0);
|
||||
return (0);
|
||||
} else {
|
||||
if (dev->tracks[track][side].params[4] != 0xFF) return(0);
|
||||
if (dev->tracks[track][side].params[4] != 0xFF)
|
||||
return (0);
|
||||
|
||||
n_map = (uint8_t *) (dev->buffer + dev->tracks[track][side].n_map_offs);
|
||||
|
||||
@@ -207,21 +203,20 @@ track_is_xdf(int drive, int side, int track)
|
||||
|
||||
if ((effective_sectors == 3) && (xdf_sectors == 3)) {
|
||||
dev->current_side_flags[side] = 0x28;
|
||||
return(1); /* 5.25" 2HD XDF */
|
||||
return (1); /* 5.25" 2HD XDF */
|
||||
}
|
||||
|
||||
if ((effective_sectors == 4) && (xdf_sectors == 4)) {
|
||||
dev->current_side_flags[side] = 0x08;
|
||||
return(2); /* 3.5" 2HD XDF */
|
||||
return (2); /* 3.5" 2HD XDF */
|
||||
}
|
||||
|
||||
return(0);
|
||||
return (0);
|
||||
}
|
||||
|
||||
return(0);
|
||||
return (0);
|
||||
}
|
||||
|
||||
|
||||
static int
|
||||
track_is_interleave(int drive, int side, int track)
|
||||
{
|
||||
@@ -239,11 +234,14 @@ track_is_interleave(int drive, int side, int track)
|
||||
|
||||
r_map = dev->buffer + dev->tracks[track][side].r_map_offs;
|
||||
|
||||
if (dev->tracks[track][side].params[2] & 0xC0) return(0);
|
||||
if (dev->tracks[track][side].params[2] & 0xC0)
|
||||
return (0);
|
||||
|
||||
if (track_spt != 21) return(0);
|
||||
if (track_spt != 21)
|
||||
return (0);
|
||||
|
||||
if (dev->tracks[track][side].params[4] != 2) return(0);
|
||||
if (dev->tracks[track][side].params[4] != 2)
|
||||
return (0);
|
||||
|
||||
for (i = 0; i < track_spt; i++) {
|
||||
if ((r_map[i] >= 1) && (r_map[i] <= track_spt)) {
|
||||
@@ -252,12 +250,12 @@ track_is_interleave(int drive, int side, int track)
|
||||
}
|
||||
}
|
||||
|
||||
if (effective_sectors == track_spt) return(1);
|
||||
if (effective_sectors == track_spt)
|
||||
return (1);
|
||||
|
||||
return(0);
|
||||
return (0);
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
sector_to_buffer(int drive, int track, int side, uint8_t *buffer, int sector, int len)
|
||||
{
|
||||
@@ -277,7 +275,6 @@ sector_to_buffer(int drive, int track, int side, uint8_t *buffer, int sector, in
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
imd_seek(int drive, int track)
|
||||
{
|
||||
@@ -306,7 +303,8 @@ imd_seek(int drive, int track)
|
||||
uint8_t *data;
|
||||
int flags = 0x00;
|
||||
|
||||
if (dev->f == NULL) return;
|
||||
if (dev->f == NULL)
|
||||
return;
|
||||
|
||||
if (!dev->track_width && fdd_doublestep_40(drive))
|
||||
track /= 2;
|
||||
@@ -359,7 +357,7 @@ imd_seek(int drive, int track)
|
||||
track_gap3 = gap3_sizes[track_rate][n][dev->tracks[track][side].params[3]];
|
||||
}
|
||||
|
||||
if (! track_gap3)
|
||||
if (!track_gap3)
|
||||
track_gap3 = dev->tracks[track][side].gap3_len;
|
||||
|
||||
xdf_type = track_is_xdf(drive, side, track);
|
||||
@@ -368,7 +366,7 @@ imd_seek(int drive, int track)
|
||||
|
||||
current_pos = d86f_prepare_pretrack(drive, side, 0);
|
||||
|
||||
if (! xdf_type) {
|
||||
if (!xdf_type) {
|
||||
for (sector = 0; sector < dev->tracks[track][side].params[3]; sector++) {
|
||||
if (interleave_type == 0) {
|
||||
real_sector = r_map[sector];
|
||||
@@ -444,16 +442,14 @@ imd_seek(int drive, int track)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static uint16_t
|
||||
disk_flags(int drive)
|
||||
{
|
||||
imd_t *dev = imd[drive];
|
||||
|
||||
return(dev->disk_flags);
|
||||
return (dev->disk_flags);
|
||||
}
|
||||
|
||||
|
||||
static uint16_t
|
||||
side_flags(int drive)
|
||||
{
|
||||
@@ -464,10 +460,9 @@ side_flags(int drive)
|
||||
side = fdd_get_head(drive);
|
||||
sflags = dev->current_side_flags[side];
|
||||
|
||||
return(sflags);
|
||||
return (sflags);
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
set_sector(int drive, int side, uint8_t c, uint8_t h, uint8_t r, uint8_t n)
|
||||
{
|
||||
@@ -489,7 +484,8 @@ set_sector(int drive, int side, uint8_t c, uint8_t h, uint8_t r, uint8_t n)
|
||||
if (sn == 0xFF)
|
||||
n_map = dev->buffer + dev->tracks[track][side].n_map_offs;
|
||||
|
||||
if (c != dev->track) return;
|
||||
if (c != dev->track)
|
||||
return;
|
||||
|
||||
for (i = 0; i < dev->tracks[track][side].params[3]; i++) {
|
||||
id[0] = (sh & 0x80) ? c_map[i] : sc;
|
||||
@@ -502,7 +498,6 @@ set_sector(int drive, int side, uint8_t c, uint8_t h, uint8_t r, uint8_t n)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
imd_writeback(int drive)
|
||||
{
|
||||
@@ -514,7 +509,8 @@ imd_writeback(int drive)
|
||||
uint8_t h, n, spt;
|
||||
uint32_t ssize;
|
||||
|
||||
if (writeprot[drive]) return;
|
||||
if (writeprot[drive])
|
||||
return;
|
||||
|
||||
for (side = 0; side < dev->sides; side++) {
|
||||
if (dev->tracks[track][side].is_present) {
|
||||
@@ -543,36 +539,36 @@ imd_writeback(int drive)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static uint8_t
|
||||
poll_read_data(int drive, int side, uint16_t pos)
|
||||
{
|
||||
imd_t *dev = imd[drive];
|
||||
int type = dev->current_data[side][0];
|
||||
|
||||
if ((type == 0) || (type > 8)) return(0xf6); /* Should never happen. */
|
||||
if ((type == 0) || (type > 8))
|
||||
return (0xf6); /* Should never happen. */
|
||||
|
||||
if (type & 1)
|
||||
return(dev->current_data[side][pos + 1]);
|
||||
return (dev->current_data[side][pos + 1]);
|
||||
else
|
||||
return(dev->current_data[side][1]);
|
||||
return (dev->current_data[side][1]);
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
poll_write_data(int drive, int side, uint16_t pos, uint8_t data)
|
||||
{
|
||||
imd_t *dev = imd[drive];
|
||||
int type = dev->current_data[side][0];
|
||||
|
||||
if (writeprot[drive]) return;
|
||||
if (writeprot[drive])
|
||||
return;
|
||||
|
||||
if ((type & 1) || (type == 0) || (type > 8)) return; /* Should never happen. */
|
||||
if ((type & 1) || (type == 0) || (type > 8))
|
||||
return; /* Should never happen. */
|
||||
|
||||
dev->current_data[side][pos + 1] = data;
|
||||
}
|
||||
|
||||
|
||||
static int
|
||||
format_conditions(int drive)
|
||||
{
|
||||
@@ -584,17 +580,15 @@ format_conditions(int drive)
|
||||
temp = (fdc_get_format_sectors(imd_fdc) == dev->tracks[track][side].params[3]);
|
||||
temp = temp && (fdc_get_format_n(imd_fdc) == dev->tracks[track][side].params[4]);
|
||||
|
||||
return(temp);
|
||||
return (temp);
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
imd_init(void)
|
||||
{
|
||||
memset(imd, 0x00, sizeof(imd));
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
imd_load(int drive, char *fn)
|
||||
{
|
||||
@@ -626,7 +620,7 @@ imd_load(int drive, char *fn)
|
||||
writeprot[drive] = 0;
|
||||
|
||||
/* Allocate a drive block. */
|
||||
dev = (imd_t *)malloc(sizeof(imd_t));
|
||||
dev = (imd_t *) malloc(sizeof(imd_t));
|
||||
memset(dev, 0x00, sizeof(imd_t));
|
||||
|
||||
dev->f = plat_fopen(fn, "rb+");
|
||||
@@ -704,7 +698,7 @@ imd_load(int drive, char *fn)
|
||||
/* Set up the drive unit. */
|
||||
imd[drive] = dev;
|
||||
|
||||
while(1) {
|
||||
while (1) {
|
||||
track = buffer2[1];
|
||||
side = buffer2[2];
|
||||
if (side & 1)
|
||||
@@ -713,7 +707,7 @@ imd_load(int drive, char *fn)
|
||||
side &= 0x3F;
|
||||
|
||||
dev->tracks[track][side].side_flags = (buffer2[0] % 3);
|
||||
if (! dev->tracks[track][side].side_flags)
|
||||
if (!dev->tracks[track][side].side_flags)
|
||||
dev->disk_flags |= (0x02);
|
||||
dev->tracks[track][side].side_flags |= (!(buffer2[0] - dev->tracks[track][side].side_flags) ? 0 : 8);
|
||||
mfm = dev->tracks[track][side].side_flags & 8;
|
||||
@@ -911,13 +905,13 @@ imd_load(int drive, char *fn)
|
||||
d86f_common_handlers(drive);
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
imd_close(int drive)
|
||||
{
|
||||
imd_t *dev = imd[drive];
|
||||
|
||||
if (dev == NULL) return;
|
||||
if (dev == NULL)
|
||||
return;
|
||||
|
||||
d86f_unregister(drive);
|
||||
|
||||
@@ -932,7 +926,6 @@ imd_close(int drive)
|
||||
imd[drive] = NULL;
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
imd_set_fdc(void *fdc)
|
||||
{
|
||||
|
||||
@@ -60,12 +60,10 @@
|
||||
#include <86box/fdd_common.h>
|
||||
#include <86box/fdd_json.h>
|
||||
|
||||
|
||||
#define NTRACKS 256
|
||||
#define NSIDES 2
|
||||
#define NSECTORS 256
|
||||
|
||||
|
||||
typedef struct {
|
||||
uint8_t track, /* ID: track number */
|
||||
side, /* side number */
|
||||
@@ -104,32 +102,27 @@ typedef struct {
|
||||
sector_t sects[NTRACKS][NSIDES][NSECTORS];
|
||||
} json_t;
|
||||
|
||||
|
||||
static json_t *images[FDD_NUM];
|
||||
|
||||
|
||||
#define ENABLE_JSON_LOG 1
|
||||
#ifdef ENABLE_JSON_LOG
|
||||
int json_do_log = ENABLE_JSON_LOG;
|
||||
|
||||
|
||||
static void
|
||||
json_log(const char *fmt, ...)
|
||||
{
|
||||
va_list ap;
|
||||
|
||||
if (json_do_log)
|
||||
{
|
||||
if (json_do_log) {
|
||||
va_start(ap, fmt);
|
||||
pclog_ex(fmt, ap);
|
||||
va_end(ap);
|
||||
}
|
||||
}
|
||||
#else
|
||||
#define json_log(fmt, ...)
|
||||
# define json_log(fmt, ...)
|
||||
#endif
|
||||
|
||||
|
||||
static void
|
||||
handle(json_t *dev, char *name, char *str)
|
||||
{
|
||||
@@ -140,13 +133,13 @@ handle(json_t *dev, char *name, char *str)
|
||||
int i, s;
|
||||
|
||||
/* Point to the currently selected sector. */
|
||||
sec = &dev->sects[dev->track][dev->side][dev->dmf-1];
|
||||
sec = &dev->sects[dev->track][dev->side][dev->dmf - 1];
|
||||
|
||||
/* If no name given, assume sector is done. */
|
||||
if (name == NULL) {
|
||||
/* If no buffer, assume one with 00's. */
|
||||
if (sec->data == NULL) {
|
||||
sec->data = (uint8_t *)malloc(sec->size);
|
||||
sec->data = (uint8_t *) malloc(sec->size);
|
||||
memset(sec->data, 0x00, sec->size);
|
||||
}
|
||||
|
||||
@@ -160,19 +153,19 @@ handle(json_t *dev, char *name, char *str)
|
||||
return;
|
||||
}
|
||||
|
||||
if (! strcmp(name, "sector")) {
|
||||
if (!strcmp(name, "sector")) {
|
||||
sec->sector = atoi(str);
|
||||
sec->size = 512;
|
||||
} else if (! strcmp(name, "length")) {
|
||||
} else if (!strcmp(name, "length")) {
|
||||
sec->size = atoi(str);
|
||||
} else if (! strcmp(name, "pattern")) {
|
||||
} else if (!strcmp(name, "pattern")) {
|
||||
pat = atol(str);
|
||||
|
||||
if (sec->data == NULL)
|
||||
sec->data = (uint8_t *)malloc(sec->size);
|
||||
sec->data = (uint8_t *) malloc(sec->size);
|
||||
p = sec->data;
|
||||
s = (sec->size / sizeof(uint32_t));
|
||||
for (i=0; i<s; i++) {
|
||||
for (i = 0; i < s; i++) {
|
||||
l = pat;
|
||||
*p++ = (l & 0x000000ff);
|
||||
l >>= 8;
|
||||
@@ -182,13 +175,14 @@ handle(json_t *dev, char *name, char *str)
|
||||
l >>= 8;
|
||||
*p++ = (l & 0x000000ff);
|
||||
}
|
||||
} else if (! strcmp(name, "data")) {
|
||||
} else if (!strcmp(name, "data")) {
|
||||
if (sec->data == NULL)
|
||||
sec->data = (uint8_t *)malloc(sec->size);
|
||||
sec->data = (uint8_t *) malloc(sec->size);
|
||||
p = sec->data;
|
||||
while (str && *str) {
|
||||
sp = strchr(str, ',');
|
||||
if (sp != NULL) *sp++ = '\0';
|
||||
if (sp != NULL)
|
||||
*sp++ = '\0';
|
||||
l = atol(str);
|
||||
|
||||
*p++ = (l & 0x000000ff);
|
||||
@@ -204,16 +198,14 @@ handle(json_t *dev, char *name, char *str)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static int
|
||||
unexpect(int c, int state, int level)
|
||||
{
|
||||
json_log("JSON: Unexpected '%c' in state %d/%d.\n", c, state, level);
|
||||
|
||||
return(-1);
|
||||
return (-1);
|
||||
}
|
||||
|
||||
|
||||
static int
|
||||
load_image(json_t *dev)
|
||||
{
|
||||
@@ -223,12 +215,12 @@ load_image(json_t *dev)
|
||||
|
||||
if (dev->f == NULL) {
|
||||
json_log("JSON: no file loaded!\n");
|
||||
return(0);
|
||||
return (0);
|
||||
}
|
||||
|
||||
/* Initialize. */
|
||||
for (i=0; i<NTRACKS; i++) {
|
||||
for (j=0; j<NSIDES; j++)
|
||||
for (i = 0; i < NTRACKS; i++) {
|
||||
for (j = 0; j < NSIDES; j++)
|
||||
memset(dev->sects[i][j], 0x00, sizeof(sector_t));
|
||||
}
|
||||
dev->track = dev->side = dev->dmf = 0; /* "dmf" is "sector#" */
|
||||
@@ -245,7 +237,7 @@ load_image(json_t *dev)
|
||||
}
|
||||
|
||||
/* Process it. */
|
||||
switch(state) {
|
||||
switch (state) {
|
||||
case 0: /* read level header */
|
||||
dev->dmf = 1;
|
||||
if ((c != '[') && (c != '{') && (c != '\r') && (c != '\n')) {
|
||||
@@ -291,7 +283,7 @@ load_image(json_t *dev)
|
||||
break;
|
||||
|
||||
case 5: /* read sector value data */
|
||||
switch(c) {
|
||||
switch (c) {
|
||||
case ',':
|
||||
case '}':
|
||||
*ptr = '\0';
|
||||
@@ -321,7 +313,7 @@ load_image(json_t *dev)
|
||||
|
||||
case 7: /* sector done */
|
||||
handle(dev, NULL, NULL);
|
||||
switch(c) {
|
||||
switch (c) {
|
||||
case ',': /* next sector */
|
||||
dev->dmf++;
|
||||
state = 1;
|
||||
@@ -330,7 +322,8 @@ load_image(json_t *dev)
|
||||
case ']': /* all sectors done */
|
||||
if (--level == 0)
|
||||
state = -1;
|
||||
else state++;
|
||||
else
|
||||
state++;
|
||||
break;
|
||||
|
||||
default:
|
||||
@@ -339,7 +332,7 @@ load_image(json_t *dev)
|
||||
break;
|
||||
|
||||
case 8: /* side done */
|
||||
switch(c) {
|
||||
switch (c) {
|
||||
case ',': /* next side */
|
||||
state = 0;
|
||||
break;
|
||||
@@ -347,7 +340,8 @@ load_image(json_t *dev)
|
||||
case ']': /* all sides done */
|
||||
if (--level == 0)
|
||||
state = -1;
|
||||
else state++;
|
||||
else
|
||||
state++;
|
||||
break;
|
||||
|
||||
default:
|
||||
@@ -358,7 +352,7 @@ load_image(json_t *dev)
|
||||
break;
|
||||
|
||||
case 9: /* track done */
|
||||
switch(c) {
|
||||
switch (c) {
|
||||
case ',': /* next track */
|
||||
dev->side = 0;
|
||||
state = 0;
|
||||
@@ -367,7 +361,8 @@ load_image(json_t *dev)
|
||||
case ']': /* all tracks done */
|
||||
if (--level == 0)
|
||||
state = -1;
|
||||
else state++;
|
||||
else
|
||||
state++;
|
||||
break;
|
||||
|
||||
default:
|
||||
@@ -376,22 +371,20 @@ load_image(json_t *dev)
|
||||
dev->track++;
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/* Save derived values. */
|
||||
dev->tracks = dev->track;
|
||||
dev->sides = dev->side;
|
||||
|
||||
return(1);
|
||||
return (1);
|
||||
}
|
||||
|
||||
|
||||
/* Seek the heads to a track, and prepare to read data from that track. */
|
||||
static void
|
||||
json_seek(int drive, int track)
|
||||
{
|
||||
uint8_t id[4] = { 0,0,0,0 };
|
||||
uint8_t id[4] = { 0, 0, 0, 0 };
|
||||
json_t *dev = images[drive];
|
||||
int side, sector;
|
||||
int rate, gap2, gap3, pos;
|
||||
@@ -403,7 +396,8 @@ json_seek(int drive, int track)
|
||||
}
|
||||
|
||||
/* Allow for doublestepping tracks. */
|
||||
if (! dev->track_width && fdd_doublestep_40(drive)) track /= 2;
|
||||
if (!dev->track_width && fdd_doublestep_40(drive))
|
||||
track /= 2;
|
||||
|
||||
/* Set the new track. */
|
||||
dev->track = track;
|
||||
@@ -420,10 +414,11 @@ json_seek(int drive, int track)
|
||||
return;
|
||||
}
|
||||
|
||||
for (side=0; side<dev->sides; side++) {
|
||||
for (side = 0; side < dev->sides; side++) {
|
||||
/* Get transfer rate for this side. */
|
||||
rate = dev->track_flags & 0x07;
|
||||
if (!rate && (dev->track_flags & 0x20)) rate = 4;
|
||||
if (!rate && (dev->track_flags & 0x20))
|
||||
rate = 4;
|
||||
|
||||
/* Get correct GAP3 value for this side. */
|
||||
gap3 = fdd_get_gap3_size(rate,
|
||||
@@ -435,7 +430,7 @@ json_seek(int drive, int track)
|
||||
|
||||
pos = d86f_prepare_pretrack(drive, side, 0);
|
||||
|
||||
for (sector=0; sector<dev->spt[track][side]; sector++) {
|
||||
for (sector = 0; sector < dev->spt[track][side]; sector++) {
|
||||
rsec = dev->sects[track][side][sector].sector;
|
||||
asec = sector;
|
||||
|
||||
@@ -455,30 +450,27 @@ json_seek(int drive, int track)
|
||||
);
|
||||
|
||||
if (sector == 0)
|
||||
d86f_initialize_last_sector_id(drive,id[0],id[1],id[2],id[3]);
|
||||
d86f_initialize_last_sector_id(drive, id[0], id[1], id[2], id[3]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static uint16_t
|
||||
disk_flags(int drive)
|
||||
{
|
||||
json_t *dev = images[drive];
|
||||
|
||||
return(dev->disk_flags);
|
||||
return (dev->disk_flags);
|
||||
}
|
||||
|
||||
|
||||
static uint16_t
|
||||
track_flags(int drive)
|
||||
{
|
||||
json_t *dev = images[drive];
|
||||
|
||||
return(dev->track_flags);
|
||||
return (dev->track_flags);
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
set_sector(int drive, int side, uint8_t c, uint8_t h, uint8_t r, uint8_t n)
|
||||
{
|
||||
@@ -488,40 +480,35 @@ set_sector(int drive, int side, uint8_t c, uint8_t h, uint8_t r, uint8_t n)
|
||||
dev->sector[side] = 0;
|
||||
|
||||
/* Make sure we are on the desired track. */
|
||||
if (c != dev->track) return;
|
||||
if (c != dev->track)
|
||||
return;
|
||||
|
||||
/* Set the desired side. */
|
||||
dev->side = side;
|
||||
|
||||
/* Now loop over all sector ID's on this side to find our sector. */
|
||||
for (i=0; i<dev->spt[c][side]; i++) {
|
||||
if ((dev->sects[dev->track][side][i].track == c) &&
|
||||
(dev->sects[dev->track][side][i].side == h) &&
|
||||
(dev->sects[dev->track][side][i].sector == r) &&
|
||||
(dev->sects[dev->track][side][i].size == n)) {
|
||||
for (i = 0; i < dev->spt[c][side]; i++) {
|
||||
if ((dev->sects[dev->track][side][i].track == c) && (dev->sects[dev->track][side][i].side == h) && (dev->sects[dev->track][side][i].sector == r) && (dev->sects[dev->track][side][i].size == n)) {
|
||||
dev->sector[side] = i;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static uint8_t
|
||||
poll_read_data(int drive, int side, uint16_t pos)
|
||||
{
|
||||
json_t *dev = images[drive];
|
||||
uint8_t sec = dev->sector[side];
|
||||
|
||||
return(dev->sects[dev->track][side][sec].data[pos]);
|
||||
return (dev->sects[dev->track][side][sec].data[pos]);
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
json_init(void)
|
||||
{
|
||||
memset(images, 0x00, sizeof(images));
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
json_load(int drive, char *fn)
|
||||
{
|
||||
@@ -535,7 +522,7 @@ json_load(int drive, char *fn)
|
||||
d86f_unregister(drive);
|
||||
|
||||
/* Allocate a drive block. */
|
||||
dev = (json_t *)malloc(sizeof(json_t));
|
||||
dev = (json_t *) malloc(sizeof(json_t));
|
||||
memset(dev, 0x00, sizeof(json_t));
|
||||
|
||||
/* Open the image file. */
|
||||
@@ -553,9 +540,9 @@ json_load(int drive, char *fn)
|
||||
images[drive] = dev;
|
||||
|
||||
/* Load all sectors from the image file. */
|
||||
if (! load_image(dev)) {
|
||||
if (!load_image(dev)) {
|
||||
json_log("JSON: failed to initialize\n");
|
||||
(void)fclose(dev->f);
|
||||
(void) fclose(dev->f);
|
||||
free(dev);
|
||||
images[drive] = NULL;
|
||||
memset(fn, 0x00, sizeof(char));
|
||||
@@ -586,25 +573,22 @@ json_load(int drive, char *fn)
|
||||
|
||||
temp_rate = 0xff;
|
||||
sec = &dev->sects[0][0][0];
|
||||
for (i=0; i<6; i++) {
|
||||
if (dev->spt[0][0] > fdd_max_sectors[sec->size][i]) continue;
|
||||
for (i = 0; i < 6; i++) {
|
||||
if (dev->spt[0][0] > fdd_max_sectors[sec->size][i])
|
||||
continue;
|
||||
|
||||
bit_rate = fdd_bit_rates_300[i];
|
||||
temp_rate = fdd_rates[i];
|
||||
dev->disk_flags |= (fdd_holes[i] << 1);
|
||||
|
||||
if ((bit_rate == 500.0) && (dev->spt[0][0] == 21) &&
|
||||
(sec->size == 2) && (dev->tracks >= 80) &&
|
||||
(dev->tracks <= 82) && (dev->sides == 2)) {
|
||||
if ((bit_rate == 500.0) && (dev->spt[0][0] == 21) && (sec->size == 2) && (dev->tracks >= 80) && (dev->tracks <= 82) && (dev->sides == 2)) {
|
||||
/*
|
||||
* This is a DMF floppy, set the flag so
|
||||
* we know to interleave the sectors.
|
||||
*/
|
||||
dev->dmf = 1;
|
||||
} else {
|
||||
if ((bit_rate == 500.0) && (dev->spt[0][0] == 22) &&
|
||||
(sec->size == 2) && (dev->tracks >= 80) &&
|
||||
(dev->tracks <= 82) && (dev->sides == 2)) {
|
||||
if ((bit_rate == 500.0) && (dev->spt[0][0] == 22) && (sec->size == 2) && (dev->tracks >= 80) && (dev->tracks <= 82) && (dev->sides == 2)) {
|
||||
/*
|
||||
* This is marked specially because of the
|
||||
* track flag (a RPM slow down is needed).
|
||||
@@ -620,7 +604,7 @@ json_load(int drive, char *fn)
|
||||
|
||||
if (temp_rate == 0xff) {
|
||||
json_log("JSON: invalid image (temp_rate=0xff)\n");
|
||||
(void)fclose(dev->f);
|
||||
(void) fclose(dev->f);
|
||||
dev->f = NULL;
|
||||
free(dev);
|
||||
images[drive] = NULL;
|
||||
@@ -637,12 +621,12 @@ json_load(int drive, char *fn)
|
||||
if (dev->dmf)
|
||||
dev->gap3_len = 8;
|
||||
else
|
||||
dev->gap3_len = fdd_get_gap3_size(temp_rate,sec->size,dev->spt[0][0]);
|
||||
dev->gap3_len = fdd_get_gap3_size(temp_rate, sec->size, dev->spt[0][0]);
|
||||
|
||||
if (! dev->gap3_len) {
|
||||
if (!dev->gap3_len) {
|
||||
json_log("JSON: image of unknown format was inserted into drive %c:!\n",
|
||||
'C'+drive);
|
||||
(void)fclose(dev->f);
|
||||
'C' + drive);
|
||||
(void) fclose(dev->f);
|
||||
dev->f = NULL;
|
||||
free(dev);
|
||||
images[drive] = NULL;
|
||||
@@ -680,7 +664,6 @@ json_load(int drive, char *fn)
|
||||
drives[drive].seek = json_seek;
|
||||
}
|
||||
|
||||
|
||||
/* Close the image. */
|
||||
void
|
||||
json_close(int drive)
|
||||
@@ -688,16 +671,17 @@ json_close(int drive)
|
||||
json_t *dev = images[drive];
|
||||
int t, h, s;
|
||||
|
||||
if (dev == NULL) return;
|
||||
if (dev == NULL)
|
||||
return;
|
||||
|
||||
/* Unlink image from the system. */
|
||||
d86f_unregister(drive);
|
||||
|
||||
/* Release all the sector buffers. */
|
||||
for (t=0; t<256; t++) {
|
||||
for (h=0; h<2; h++) {
|
||||
for (t = 0; t < 256; t++) {
|
||||
for (h = 0; h < 2; h++) {
|
||||
memset(dev->sects[t][h], 0x00, sizeof(sector_t));
|
||||
for (s=0; s<256; s++) {
|
||||
for (s = 0; s < 256; s++) {
|
||||
if (dev->sects[t][h][s].data != NULL)
|
||||
free(dev->sects[t][h][s].data);
|
||||
dev->sects[t][h][s].data = NULL;
|
||||
@@ -706,7 +690,7 @@ json_close(int drive)
|
||||
}
|
||||
|
||||
if (dev->f != NULL)
|
||||
(void)fclose(dev->f);
|
||||
(void) fclose(dev->f);
|
||||
|
||||
/* Release the memory. */
|
||||
free(dev);
|
||||
|
||||
@@ -31,8 +31,7 @@
|
||||
#include <86box/fdd_mfm.h>
|
||||
#include <86box/fdc.h>
|
||||
|
||||
|
||||
#pragma pack(push,1)
|
||||
#pragma pack(push, 1)
|
||||
typedef struct {
|
||||
uint8_t hdr_name[7];
|
||||
|
||||
@@ -76,35 +75,30 @@ typedef struct {
|
||||
int br_rounded, rpm_rounded,
|
||||
total_tracks, cur_track;
|
||||
|
||||
uint8_t track_data[2][256*1024];
|
||||
uint8_t track_data[2][256 * 1024];
|
||||
} mfm_t;
|
||||
|
||||
|
||||
static mfm_t *mfm[FDD_NUM];
|
||||
static fdc_t *mfm_fdc;
|
||||
|
||||
|
||||
#ifdef ENABLE_MFM_LOG
|
||||
int mfm_do_log = ENABLE_MFM_LOG;
|
||||
|
||||
|
||||
static void
|
||||
mfm_log(const char *fmt, ...)
|
||||
{
|
||||
va_list ap;
|
||||
|
||||
if (mfm_do_log)
|
||||
{
|
||||
if (mfm_do_log) {
|
||||
va_start(ap, fmt);
|
||||
pclog_ex(fmt, ap);
|
||||
va_end(ap);
|
||||
}
|
||||
}
|
||||
#else
|
||||
#define mfm_log(fmt, ...)
|
||||
# define mfm_log(fmt, ...)
|
||||
#endif
|
||||
|
||||
|
||||
static int
|
||||
get_track_index(int drive, int side, int track)
|
||||
{
|
||||
@@ -112,8 +106,7 @@ get_track_index(int drive, int side, int track)
|
||||
int i, ret = -1;
|
||||
|
||||
for (i = 0; i < dev->total_tracks; i++) {
|
||||
if ((dev->tracks[i].track_no == track) &&
|
||||
(dev->tracks[i].side_no == side)) {
|
||||
if ((dev->tracks[i].track_no == track) && (dev->tracks[i].side_no == side)) {
|
||||
ret = i;
|
||||
break;
|
||||
}
|
||||
@@ -122,7 +115,6 @@ get_track_index(int drive, int side, int track)
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
static int
|
||||
get_adv_track_index(int drive, int side, int track)
|
||||
{
|
||||
@@ -130,8 +122,7 @@ get_adv_track_index(int drive, int side, int track)
|
||||
int i, ret = -1;
|
||||
|
||||
for (i = 0; i < dev->total_tracks; i++) {
|
||||
if ((dev->adv_tracks[i].track_no == track) &&
|
||||
(dev->adv_tracks[i].side_no == side)) {
|
||||
if ((dev->adv_tracks[i].track_no == track) && (dev->adv_tracks[i].side_no == side)) {
|
||||
ret = i;
|
||||
break;
|
||||
}
|
||||
@@ -140,7 +131,6 @@ get_adv_track_index(int drive, int side, int track)
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
get_adv_track_bitrate(int drive, int side, int track, int *br, int *rpm)
|
||||
{
|
||||
@@ -161,7 +151,6 @@ get_adv_track_bitrate(int drive, int side, int track, int *br, int *rpm)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
set_disk_flags(int drive)
|
||||
{
|
||||
@@ -201,7 +190,6 @@ set_disk_flags(int drive)
|
||||
dev->disk_flags = temp_disk_flags;
|
||||
}
|
||||
|
||||
|
||||
static uint16_t
|
||||
disk_flags(int drive)
|
||||
{
|
||||
@@ -210,7 +198,6 @@ disk_flags(int drive)
|
||||
return dev->disk_flags;
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
set_side_flags(int drive, int side)
|
||||
{
|
||||
@@ -262,7 +249,6 @@ set_side_flags(int drive, int side)
|
||||
dev->side_flags[side] = temp_side_flags;
|
||||
}
|
||||
|
||||
|
||||
static uint16_t
|
||||
side_flags(int drive)
|
||||
{
|
||||
@@ -274,7 +260,6 @@ side_flags(int drive)
|
||||
return dev->side_flags[side];
|
||||
}
|
||||
|
||||
|
||||
static uint32_t
|
||||
get_raw_size(int drive, int side)
|
||||
{
|
||||
@@ -316,23 +301,20 @@ get_raw_size(int drive, int side)
|
||||
return dev->tracks[track_index].track_size * 8;
|
||||
}
|
||||
|
||||
|
||||
static int32_t
|
||||
extra_bit_cells(int drive, int side)
|
||||
{
|
||||
return (int32_t) get_raw_size(drive, side);
|
||||
}
|
||||
|
||||
|
||||
static uint16_t *
|
||||
encoded_data(int drive, int side)
|
||||
{
|
||||
mfm_t *dev = mfm[drive];
|
||||
|
||||
return((uint16_t *)dev->track_data[side]);
|
||||
return ((uint16_t *) dev->track_data[side]);
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
mfm_read_side(int drive, int side)
|
||||
{
|
||||
@@ -367,7 +349,6 @@ mfm_read_side(int drive, int side)
|
||||
drive, side, dev->cur_track, track_index, track_size);
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
mfm_seek(int drive, int track)
|
||||
{
|
||||
@@ -396,7 +377,6 @@ mfm_seek(int drive, int track)
|
||||
set_side_flags(drive, 1);
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
mfm_load(int drive, char *fn)
|
||||
{
|
||||
@@ -407,7 +387,7 @@ mfm_load(int drive, char *fn)
|
||||
writeprot[drive] = fwriteprot[drive] = 1;
|
||||
|
||||
/* Allocate a drive block. */
|
||||
dev = (mfm_t *)malloc(sizeof(mfm_t));
|
||||
dev = (mfm_t *) malloc(sizeof(mfm_t));
|
||||
memset(dev, 0x00, sizeof(mfm_t));
|
||||
|
||||
dev->f = plat_fopen(fn, "rb");
|
||||
@@ -497,13 +477,13 @@ mfm_load(int drive, char *fn)
|
||||
mfm_log("Loaded as MFM\n");
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
mfm_close(int drive)
|
||||
{
|
||||
mfm_t *dev = mfm[drive];
|
||||
|
||||
if (dev == NULL) return;
|
||||
if (dev == NULL)
|
||||
return;
|
||||
|
||||
d86f_unregister(drive);
|
||||
|
||||
@@ -523,9 +503,8 @@ mfm_close(int drive)
|
||||
mfm[drive] = NULL;
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
mfm_set_fdc(void *fdc)
|
||||
{
|
||||
mfm_fdc = (fdc_t *)fdc;
|
||||
mfm_fdc = (fdc_t *) fdc;
|
||||
}
|
||||
|
||||
1030
src/floppy/fdi2raw.c
1030
src/floppy/fdi2raw.c
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user