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