Revision f8d3d128 block.c
b/block.c | ||
---|---|---|
2013 | 2013 |
uint8_t last_sect; |
2014 | 2014 |
uint8_t max_track; |
2015 | 2015 |
uint8_t max_head; |
2016 |
FDriveRate rate; |
|
2016 | 2017 |
} FDFormat; |
2017 | 2018 |
|
2018 | 2019 |
static const FDFormat fd_formats[] = { |
2019 | 2020 |
/* First entry is default format */ |
2020 | 2021 |
/* 1.44 MB 3"1/2 floppy disks */ |
2021 |
{ FDRIVE_DRV_144, 18, 80, 1, }, |
|
2022 |
{ FDRIVE_DRV_144, 20, 80, 1, }, |
|
2023 |
{ FDRIVE_DRV_144, 21, 80, 1, }, |
|
2024 |
{ FDRIVE_DRV_144, 21, 82, 1, }, |
|
2025 |
{ FDRIVE_DRV_144, 21, 83, 1, }, |
|
2026 |
{ FDRIVE_DRV_144, 22, 80, 1, }, |
|
2027 |
{ FDRIVE_DRV_144, 23, 80, 1, }, |
|
2028 |
{ FDRIVE_DRV_144, 24, 80, 1, }, |
|
2022 |
{ FDRIVE_DRV_144, 18, 80, 1, FDRIVE_RATE_500K, },
|
|
2023 |
{ FDRIVE_DRV_144, 20, 80, 1, FDRIVE_RATE_500K, },
|
|
2024 |
{ FDRIVE_DRV_144, 21, 80, 1, FDRIVE_RATE_500K, },
|
|
2025 |
{ FDRIVE_DRV_144, 21, 82, 1, FDRIVE_RATE_500K, },
|
|
2026 |
{ FDRIVE_DRV_144, 21, 83, 1, FDRIVE_RATE_500K, },
|
|
2027 |
{ FDRIVE_DRV_144, 22, 80, 1, FDRIVE_RATE_500K, },
|
|
2028 |
{ FDRIVE_DRV_144, 23, 80, 1, FDRIVE_RATE_500K, },
|
|
2029 |
{ FDRIVE_DRV_144, 24, 80, 1, FDRIVE_RATE_500K, },
|
|
2029 | 2030 |
/* 2.88 MB 3"1/2 floppy disks */ |
2030 |
{ FDRIVE_DRV_288, 36, 80, 1, }, |
|
2031 |
{ FDRIVE_DRV_288, 39, 80, 1, }, |
|
2032 |
{ FDRIVE_DRV_288, 40, 80, 1, }, |
|
2033 |
{ FDRIVE_DRV_288, 44, 80, 1, }, |
|
2034 |
{ FDRIVE_DRV_288, 48, 80, 1, }, |
|
2031 |
{ FDRIVE_DRV_288, 36, 80, 1, FDRIVE_RATE_1M, },
|
|
2032 |
{ FDRIVE_DRV_288, 39, 80, 1, FDRIVE_RATE_1M, },
|
|
2033 |
{ FDRIVE_DRV_288, 40, 80, 1, FDRIVE_RATE_1M, },
|
|
2034 |
{ FDRIVE_DRV_288, 44, 80, 1, FDRIVE_RATE_1M, },
|
|
2035 |
{ FDRIVE_DRV_288, 48, 80, 1, FDRIVE_RATE_1M, },
|
|
2035 | 2036 |
/* 720 kB 3"1/2 floppy disks */ |
2036 |
{ FDRIVE_DRV_144, 9, 80, 1, }, |
|
2037 |
{ FDRIVE_DRV_144, 10, 80, 1, }, |
|
2038 |
{ FDRIVE_DRV_144, 10, 82, 1, }, |
|
2039 |
{ FDRIVE_DRV_144, 10, 83, 1, }, |
|
2040 |
{ FDRIVE_DRV_144, 13, 80, 1, }, |
|
2041 |
{ FDRIVE_DRV_144, 14, 80, 1, }, |
|
2037 |
{ FDRIVE_DRV_144, 9, 80, 1, FDRIVE_RATE_250K, },
|
|
2038 |
{ FDRIVE_DRV_144, 10, 80, 1, FDRIVE_RATE_250K, },
|
|
2039 |
{ FDRIVE_DRV_144, 10, 82, 1, FDRIVE_RATE_250K, },
|
|
2040 |
{ FDRIVE_DRV_144, 10, 83, 1, FDRIVE_RATE_250K, },
|
|
2041 |
{ FDRIVE_DRV_144, 13, 80, 1, FDRIVE_RATE_250K, },
|
|
2042 |
{ FDRIVE_DRV_144, 14, 80, 1, FDRIVE_RATE_250K, },
|
|
2042 | 2043 |
/* 1.2 MB 5"1/4 floppy disks */ |
2043 |
{ FDRIVE_DRV_120, 15, 80, 1, }, |
|
2044 |
{ FDRIVE_DRV_120, 18, 80, 1, }, |
|
2045 |
{ FDRIVE_DRV_120, 18, 82, 1, }, |
|
2046 |
{ FDRIVE_DRV_120, 18, 83, 1, }, |
|
2047 |
{ FDRIVE_DRV_120, 20, 80, 1, }, |
|
2044 |
{ FDRIVE_DRV_120, 15, 80, 1, FDRIVE_RATE_500K, },
|
|
2045 |
{ FDRIVE_DRV_120, 18, 80, 1, FDRIVE_RATE_500K, },
|
|
2046 |
{ FDRIVE_DRV_120, 18, 82, 1, FDRIVE_RATE_500K, },
|
|
2047 |
{ FDRIVE_DRV_120, 18, 83, 1, FDRIVE_RATE_500K, },
|
|
2048 |
{ FDRIVE_DRV_120, 20, 80, 1, FDRIVE_RATE_500K, },
|
|
2048 | 2049 |
/* 720 kB 5"1/4 floppy disks */ |
2049 |
{ FDRIVE_DRV_120, 9, 80, 1, }, |
|
2050 |
{ FDRIVE_DRV_120, 11, 80, 1, }, |
|
2050 |
{ FDRIVE_DRV_120, 9, 80, 1, FDRIVE_RATE_250K, },
|
|
2051 |
{ FDRIVE_DRV_120, 11, 80, 1, FDRIVE_RATE_250K, },
|
|
2051 | 2052 |
/* 360 kB 5"1/4 floppy disks */ |
2052 |
{ FDRIVE_DRV_120, 9, 40, 1, }, |
|
2053 |
{ FDRIVE_DRV_120, 9, 40, 0, }, |
|
2054 |
{ FDRIVE_DRV_120, 10, 41, 1, }, |
|
2055 |
{ FDRIVE_DRV_120, 10, 42, 1, }, |
|
2053 |
{ FDRIVE_DRV_120, 9, 40, 1, FDRIVE_RATE_300K, },
|
|
2054 |
{ FDRIVE_DRV_120, 9, 40, 0, FDRIVE_RATE_300K, },
|
|
2055 |
{ FDRIVE_DRV_120, 10, 41, 1, FDRIVE_RATE_300K, },
|
|
2056 |
{ FDRIVE_DRV_120, 10, 42, 1, FDRIVE_RATE_300K, },
|
|
2056 | 2057 |
/* 320 kB 5"1/4 floppy disks */ |
2057 |
{ FDRIVE_DRV_120, 8, 40, 1, }, |
|
2058 |
{ FDRIVE_DRV_120, 8, 40, 0, }, |
|
2058 |
{ FDRIVE_DRV_120, 8, 40, 1, FDRIVE_RATE_250K, },
|
|
2059 |
{ FDRIVE_DRV_120, 8, 40, 0, FDRIVE_RATE_250K, },
|
|
2059 | 2060 |
/* 360 kB must match 5"1/4 better than 3"1/2... */ |
2060 |
{ FDRIVE_DRV_144, 9, 80, 0, }, |
|
2061 |
{ FDRIVE_DRV_144, 9, 80, 0, FDRIVE_RATE_250K, },
|
|
2061 | 2062 |
/* end */ |
2062 |
{ FDRIVE_DRV_NONE, -1, -1, 0, }, |
|
2063 |
{ FDRIVE_DRV_NONE, -1, -1, 0, 0, },
|
|
2063 | 2064 |
}; |
2064 | 2065 |
|
2065 | 2066 |
void bdrv_get_floppy_geometry_hint(BlockDriverState *bs, int *nb_heads, |
2066 | 2067 |
int *max_track, int *last_sect, |
2067 |
FDriveType drive_in, FDriveType *drive) |
|
2068 |
FDriveType drive_in, FDriveType *drive, |
|
2069 |
FDriveRate *rate) |
|
2068 | 2070 |
{ |
2069 | 2071 |
const FDFormat *parse; |
2070 | 2072 |
uint64_t nb_sectors, size; |
... | ... | |
2073 | 2075 |
bdrv_get_geometry_hint(bs, nb_heads, max_track, last_sect); |
2074 | 2076 |
if (*nb_heads != 0 && *max_track != 0 && *last_sect != 0) { |
2075 | 2077 |
/* User defined disk */ |
2078 |
*rate = FDRIVE_RATE_500K; |
|
2076 | 2079 |
} else { |
2077 | 2080 |
bdrv_get_geometry(bs, &nb_sectors); |
2078 | 2081 |
match = -1; |
... | ... | |
2107 | 2110 |
*max_track = parse->max_track; |
2108 | 2111 |
*last_sect = parse->last_sect; |
2109 | 2112 |
*drive = parse->drive; |
2113 |
*rate = parse->rate; |
|
2110 | 2114 |
} |
2111 | 2115 |
} |
2112 | 2116 |
|
Also available in: Unified diff