diff options
author | 2022-02-16 18:50:18 -0800 | |
---|---|---|
committer | 2022-02-17 13:50:18 +1100 | |
commit | 33d6e9c9cd8f74554a05d2f79c6779b73b8c6261 (patch) | |
tree | f3a064133014c6d1ab6b0aa5fdeea176ffb68558 /src/lib/formats/jvc_dsk.cpp | |
parent | 8da1c539662bd567f3881fa1118f11bdeffeb31e (diff) |
formats/jvc_disk: Changed code to verify image geometry against floppy drive geometry. (#9238)
Diffstat (limited to 'src/lib/formats/jvc_dsk.cpp')
-rw-r--r-- | src/lib/formats/jvc_dsk.cpp | 27 |
1 files changed, 20 insertions, 7 deletions
diff --git a/src/lib/formats/jvc_dsk.cpp b/src/lib/formats/jvc_dsk.cpp index d63f11751bb..3192aef5871 100644 --- a/src/lib/formats/jvc_dsk.cpp +++ b/src/lib/formats/jvc_dsk.cpp @@ -105,10 +105,8 @@ ***************************************************************************/ #include "jvc_dsk.h" - #include "ioprocs.h" - -#include "osdcore.h" // osd_printf_* +#include "imageutl.h" jvc_format::jvc_format() @@ -156,7 +154,7 @@ bool jvc_format::parse_header(util::random_read &io, int &header_size, int &trac switch (header_size) { case 5: - osd_printf_info("jvc_format: sector attribute flag unsupported\n"); + LOG_FORMATS("jvc_format: sector attribute flag unsupported\n"); return false; case 4: base_sector_id = header[3]; [[fallthrough]]; @@ -170,7 +168,7 @@ bool jvc_format::parse_header(util::random_read &io, int &header_size, int &trac break; } - osd_printf_verbose("Floppy disk image geometry: %d tracks, %d head(s), %d sectors with %d bytes.\n", tracks, heads, sectors, sector_size); + LOG_FORMATS("jvc_format: Floppy disk image geometry: %d tracks, %d head(s), %d sectors with %d bytes.\n", tracks, heads, sectors, sector_size); return tracks * heads * sectors * sector_size == (size - header_size); } @@ -184,6 +182,7 @@ int jvc_format::identify(util::random_read &io, uint32_t form_factor, const std: bool jvc_format::load(util::random_read &io, uint32_t form_factor, const std::vector<uint32_t> &variants, floppy_image *image) { int header_size, track_count, head_count, sector_count, sector_size, sector_base_id; + int max_tracks, max_heads; if (!parse_header(io, header_size, track_count, head_count, sector_count, sector_size, sector_base_id)) return false; @@ -191,7 +190,21 @@ bool jvc_format::load(util::random_read &io, uint32_t form_factor, const std::ve // safety check if (sector_count * sector_size > 10000) { - osd_printf_error("jvc_format: incorrect track layout\n"); + LOG_FORMATS("jvc_format: incorrect track layout\n"); + return false; + } + + image->get_maximal_geometry(max_tracks, max_heads); + + if (track_count > max_tracks) + { + LOG_FORMATS("jvc_format: Floppy disk has too many tracks for this drive (floppy tracks=%d, drive tracks=%d).\n", track_count, max_tracks); + return false; + } + + if (head_count > max_heads) + { + LOG_FORMATS("jvc_format: Floppy disk has too many sides for this drive (floppy sides=%d, drive sides=%d).\n", head_count, max_heads); return false; } @@ -261,7 +274,7 @@ bool jvc_format::save(util::random_read_write &io, const std::vector<uint32_t> & { if (sectors[1 + i].size() != 256) { - osd_printf_error("jvc_format: invalid sector size: %d\n", sectors[1 + i].size()); + LOG_FORMATS("jvc_format: invalid sector size: %d\n", sectors[1 + i].size()); return false; } |