diff options
Diffstat (limited to 'block.c')
-rw-r--r-- | block.c | 74 |
1 files changed, 39 insertions, 35 deletions
@@ -2013,58 +2013,60 @@ typedef struct FDFormat { uint8_t last_sect; uint8_t max_track; uint8_t max_head; + FDriveRate rate; } FDFormat; static const FDFormat fd_formats[] = { /* First entry is default format */ /* 1.44 MB 3"1/2 floppy disks */ - { FDRIVE_DRV_144, 18, 80, 1, }, - { FDRIVE_DRV_144, 20, 80, 1, }, - { FDRIVE_DRV_144, 21, 80, 1, }, - { FDRIVE_DRV_144, 21, 82, 1, }, - { FDRIVE_DRV_144, 21, 83, 1, }, - { FDRIVE_DRV_144, 22, 80, 1, }, - { FDRIVE_DRV_144, 23, 80, 1, }, - { FDRIVE_DRV_144, 24, 80, 1, }, + { FDRIVE_DRV_144, 18, 80, 1, FDRIVE_RATE_500K, }, + { FDRIVE_DRV_144, 20, 80, 1, FDRIVE_RATE_500K, }, + { FDRIVE_DRV_144, 21, 80, 1, FDRIVE_RATE_500K, }, + { FDRIVE_DRV_144, 21, 82, 1, FDRIVE_RATE_500K, }, + { FDRIVE_DRV_144, 21, 83, 1, FDRIVE_RATE_500K, }, + { FDRIVE_DRV_144, 22, 80, 1, FDRIVE_RATE_500K, }, + { FDRIVE_DRV_144, 23, 80, 1, FDRIVE_RATE_500K, }, + { FDRIVE_DRV_144, 24, 80, 1, FDRIVE_RATE_500K, }, /* 2.88 MB 3"1/2 floppy disks */ - { FDRIVE_DRV_288, 36, 80, 1, }, - { FDRIVE_DRV_288, 39, 80, 1, }, - { FDRIVE_DRV_288, 40, 80, 1, }, - { FDRIVE_DRV_288, 44, 80, 1, }, - { FDRIVE_DRV_288, 48, 80, 1, }, + { FDRIVE_DRV_288, 36, 80, 1, FDRIVE_RATE_1M, }, + { FDRIVE_DRV_288, 39, 80, 1, FDRIVE_RATE_1M, }, + { FDRIVE_DRV_288, 40, 80, 1, FDRIVE_RATE_1M, }, + { FDRIVE_DRV_288, 44, 80, 1, FDRIVE_RATE_1M, }, + { FDRIVE_DRV_288, 48, 80, 1, FDRIVE_RATE_1M, }, /* 720 kB 3"1/2 floppy disks */ - { FDRIVE_DRV_144, 9, 80, 1, }, - { FDRIVE_DRV_144, 10, 80, 1, }, - { FDRIVE_DRV_144, 10, 82, 1, }, - { FDRIVE_DRV_144, 10, 83, 1, }, - { FDRIVE_DRV_144, 13, 80, 1, }, - { FDRIVE_DRV_144, 14, 80, 1, }, + { FDRIVE_DRV_144, 9, 80, 1, FDRIVE_RATE_250K, }, + { FDRIVE_DRV_144, 10, 80, 1, FDRIVE_RATE_250K, }, + { FDRIVE_DRV_144, 10, 82, 1, FDRIVE_RATE_250K, }, + { FDRIVE_DRV_144, 10, 83, 1, FDRIVE_RATE_250K, }, + { FDRIVE_DRV_144, 13, 80, 1, FDRIVE_RATE_250K, }, + { FDRIVE_DRV_144, 14, 80, 1, FDRIVE_RATE_250K, }, /* 1.2 MB 5"1/4 floppy disks */ - { FDRIVE_DRV_120, 15, 80, 1, }, - { FDRIVE_DRV_120, 18, 80, 1, }, - { FDRIVE_DRV_120, 18, 82, 1, }, - { FDRIVE_DRV_120, 18, 83, 1, }, - { FDRIVE_DRV_120, 20, 80, 1, }, + { FDRIVE_DRV_120, 15, 80, 1, FDRIVE_RATE_500K, }, + { FDRIVE_DRV_120, 18, 80, 1, FDRIVE_RATE_500K, }, + { FDRIVE_DRV_120, 18, 82, 1, FDRIVE_RATE_500K, }, + { FDRIVE_DRV_120, 18, 83, 1, FDRIVE_RATE_500K, }, + { FDRIVE_DRV_120, 20, 80, 1, FDRIVE_RATE_500K, }, /* 720 kB 5"1/4 floppy disks */ - { FDRIVE_DRV_120, 9, 80, 1, }, - { FDRIVE_DRV_120, 11, 80, 1, }, + { FDRIVE_DRV_120, 9, 80, 1, FDRIVE_RATE_250K, }, + { FDRIVE_DRV_120, 11, 80, 1, FDRIVE_RATE_250K, }, /* 360 kB 5"1/4 floppy disks */ - { FDRIVE_DRV_120, 9, 40, 1, }, - { FDRIVE_DRV_120, 9, 40, 0, }, - { FDRIVE_DRV_120, 10, 41, 1, }, - { FDRIVE_DRV_120, 10, 42, 1, }, + { FDRIVE_DRV_120, 9, 40, 1, FDRIVE_RATE_300K, }, + { FDRIVE_DRV_120, 9, 40, 0, FDRIVE_RATE_300K, }, + { FDRIVE_DRV_120, 10, 41, 1, FDRIVE_RATE_300K, }, + { FDRIVE_DRV_120, 10, 42, 1, FDRIVE_RATE_300K, }, /* 320 kB 5"1/4 floppy disks */ - { FDRIVE_DRV_120, 8, 40, 1, }, - { FDRIVE_DRV_120, 8, 40, 0, }, + { FDRIVE_DRV_120, 8, 40, 1, FDRIVE_RATE_250K, }, + { FDRIVE_DRV_120, 8, 40, 0, FDRIVE_RATE_250K, }, /* 360 kB must match 5"1/4 better than 3"1/2... */ - { FDRIVE_DRV_144, 9, 80, 0, }, + { FDRIVE_DRV_144, 9, 80, 0, FDRIVE_RATE_250K, }, /* end */ - { FDRIVE_DRV_NONE, -1, -1, 0, }, + { FDRIVE_DRV_NONE, -1, -1, 0, 0, }, }; void bdrv_get_floppy_geometry_hint(BlockDriverState *bs, int *nb_heads, int *max_track, int *last_sect, - FDriveType drive_in, FDriveType *drive) + FDriveType drive_in, FDriveType *drive, + FDriveRate *rate) { const FDFormat *parse; uint64_t nb_sectors, size; @@ -2073,6 +2075,7 @@ void bdrv_get_floppy_geometry_hint(BlockDriverState *bs, int *nb_heads, bdrv_get_geometry_hint(bs, nb_heads, max_track, last_sect); if (*nb_heads != 0 && *max_track != 0 && *last_sect != 0) { /* User defined disk */ + *rate = FDRIVE_RATE_500K; } else { bdrv_get_geometry(bs, &nb_sectors); match = -1; @@ -2107,6 +2110,7 @@ void bdrv_get_floppy_geometry_hint(BlockDriverState *bs, int *nb_heads, *max_track = parse->max_track; *last_sect = parse->last_sect; *drive = parse->drive; + *rate = parse->rate; } } |