summaryrefslogtreecommitdiffstatshomepage
path: root/src/lib/formats/ami_dsk.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/formats/ami_dsk.cpp')
-rw-r--r--src/lib/formats/ami_dsk.cpp40
1 files changed, 21 insertions, 19 deletions
diff --git a/src/lib/formats/ami_dsk.cpp b/src/lib/formats/ami_dsk.cpp
index eb96b01377d..d4c567050c8 100644
--- a/src/lib/formats/ami_dsk.cpp
+++ b/src/lib/formats/ami_dsk.cpp
@@ -2,7 +2,7 @@
// copyright-holders:Olivier Galibert
/*********************************************************************
- formats/ami_dsk.c
+ formats/ami_dsk.cpp
Amiga disk images
@@ -17,39 +17,39 @@ adf_format::adf_format() : floppy_image_format_t()
{
}
-const char *adf_format::name() const
+const char *adf_format::name() const noexcept
{
return "adf";
}
-const char *adf_format::description() const
+const char *adf_format::description() const noexcept
{
return "Amiga ADF floppy disk image";
}
-const char *adf_format::extensions() const
+const char *adf_format::extensions() const noexcept
{
return "adf";
}
-bool adf_format::supports_save() const
+bool adf_format::supports_save() const noexcept
{
return true;
}
-int adf_format::identify(util::random_read &io, uint32_t form_factor, const std::vector<uint32_t> &variants)
+int adf_format::identify(util::random_read &io, uint32_t form_factor, const std::vector<uint32_t> &variants) const
{
uint64_t size;
if (io.length(size))
return 0;
if ((size == 901120) || (size == 912384) || (size == 1802240))
- return 50;
+ return FIFID_SIZE;
return 0;
}
-bool adf_format::load(util::random_read &io, uint32_t form_factor, const std::vector<uint32_t> &variants, floppy_image *image)
+bool adf_format::load(util::random_read &io, uint32_t form_factor, const std::vector<uint32_t> &variants, floppy_image &image) const
{
desc_s sectors[22];
uint8_t sectdata[512*22];
@@ -78,20 +78,22 @@ bool adf_format::load(util::random_read &io, uint32_t form_factor, const std::ve
}
if (!is_hd) {
- image->set_variant(floppy_image::DSDD);
+ image.set_variant(floppy_image::DSDD);
for (int track=0; track < tracks; track++) {
for (int side=0; side < 2; side++) {
- size_t actual;
- io.read_at((track*2 + side)*512*11, sectdata, 512*11, actual);
+ auto const [err, actual] = read_at(io, (track*2 + side)*512*11, sectdata, 512*11);
+ if (err || (512*11 != actual))
+ return false;
generate_track(amiga_11, track, side, sectors, 11, 100000, image);
}
}
} else {
- image->set_variant(floppy_image::DSHD);
+ image.set_variant(floppy_image::DSHD);
for (int track=0; track < tracks; track++) {
for (int side=0; side < 2; side++) {
- size_t actual;
- io.read_at((track*2 + side)*512*22, sectdata, 512*22, actual);
+ auto const [err, actual] = read_at(io, (track*2 + side)*512*22, sectdata, 512*22);
+ if (err || (512*22 != actual))
+ return false;
generate_track(amiga_22, track, side, sectors, 22, 200000, image);
}
}
@@ -121,11 +123,11 @@ uint32_t adf_format::checksum(const std::vector<bool> &trackbuf, uint32_t pos, i
return check & 0x55555555;
}
-bool adf_format::save(util::random_read_write &io, const std::vector<uint32_t> &variants, floppy_image *image)
+bool adf_format::save(util::random_read_write &io, const std::vector<uint32_t> &variants, const floppy_image &image) const
{
uint8_t sectdata[512*22];
- bool const hd = image->get_variant() == floppy_image::DSHD;
+ bool const hd = image.get_variant() == floppy_image::DSHD;
int const data_track_size = hd ? 512*22 : 512*11;
@@ -151,12 +153,12 @@ bool adf_format::save(util::random_read_write &io, const std::vector<uint32_t> &
*dest++ = val;
}
- size_t actual;
- io.write_at((track*2 + side) * data_track_size, sectdata, data_track_size, actual);
+ // FIXME: check for errors
+ /*auto const [err, actual] =*/ write_at(io, (track*2 + side) * data_track_size, sectdata, data_track_size);
}
}
}
return true;
}
-const floppy_format_type FLOPPY_ADF_FORMAT = &floppy_image_format_creator<adf_format>;
+const adf_format FLOPPY_ADF_FORMAT;