summaryrefslogtreecommitdiffstatshomepage
path: root/src/lib/formats/jvc_dsk.cpp
diff options
context:
space:
mode:
author tim lindner <tlindner@macmess.org>2022-02-16 18:50:18 -0800
committer GitHub <noreply@github.com>2022-02-17 13:50:18 +1100
commit33d6e9c9cd8f74554a05d2f79c6779b73b8c6261 (patch)
treef3a064133014c6d1ab6b0aa5fdeea176ffb68558 /src/lib/formats/jvc_dsk.cpp
parent8da1c539662bd567f3881fa1118f11bdeffeb31e (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.cpp27
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;
}