summaryrefslogtreecommitdiffstatshomepage
path: root/src/lib/formats/wd177x_dsk.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/formats/wd177x_dsk.cpp')
-rw-r--r--src/lib/formats/wd177x_dsk.cpp52
1 files changed, 25 insertions, 27 deletions
diff --git a/src/lib/formats/wd177x_dsk.cpp b/src/lib/formats/wd177x_dsk.cpp
index 5675e3bd5aa..e5b02f02e32 100644
--- a/src/lib/formats/wd177x_dsk.cpp
+++ b/src/lib/formats/wd177x_dsk.cpp
@@ -2,7 +2,7 @@
// copyright-holders:Olivier Galibert, 68bit
/*********************************************************************
- formats/wd177x_dsk.h
+ formats/wd177x_dsk.cpp
helper for simple wd177x-formatted disk images
@@ -27,7 +27,7 @@ wd177x_format::wd177x_format(const format *_formats)
// encoded disk, or a track with an different sector IDs etc. Only the track
// encoding is used from the returned format, the number of track_count is not
// accessed.
-const wd177x_format::format &wd177x_format::get_track_format(const format &f, int head, int track)
+const wd177x_format::format &wd177x_format::get_track_format(const format &f, int head, int track) const
{
return f;
}
@@ -35,7 +35,7 @@ const wd177x_format::format &wd177x_format::get_track_format(const format &f, in
/*
Default implementation for find_size. May be overwritten by subclasses.
*/
-int wd177x_format::find_size(util::random_read &io, uint32_t form_factor, const std::vector<uint32_t> &variants)
+int wd177x_format::find_size(util::random_read &io, uint32_t form_factor, const std::vector<uint32_t> &variants) const
{
uint64_t size;
if(io.length(size))
@@ -62,18 +62,18 @@ int wd177x_format::find_size(util::random_read &io, uint32_t form_factor, const
return -1;
}
-int wd177x_format::identify(util::random_read &io, uint32_t form_factor, const std::vector<uint32_t> &variants)
+int wd177x_format::identify(util::random_read &io, uint32_t form_factor, const std::vector<uint32_t> &variants) const
{
int const type = find_size(io, form_factor, variants);
if(type != -1)
- return 50;
+ return FIFID_SIZE;
return 0;
}
// A track specific format is to be supplied.
-int wd177x_format::compute_track_size(const format &f) const
+int wd177x_format::compute_track_size(const format &f)
{
int track_size;
if(f.sector_base_size)
@@ -111,7 +111,7 @@ void wd177x_format::build_sector_description(const format &f, uint8_t *sectdata,
}
// A track specific format is to be supplied.
-floppy_image_format_t::desc_e* wd177x_format::get_desc_fm(const format &f, int &current_size, int &end_gap_index)
+floppy_image_format_t::desc_e* wd177x_format::get_desc_fm(const format &f, int &current_size, int &end_gap_index) const
{
static floppy_image_format_t::desc_e desc[23] = {
/* 00 */ { FM, 0xff, 0 },
@@ -159,7 +159,7 @@ floppy_image_format_t::desc_e* wd177x_format::get_desc_fm(const format &f, int &
}
// A track specific format is to be supplied.
-floppy_image_format_t::desc_e* wd177x_format::get_desc_mfm(const format &f, int &current_size, int &end_gap_index)
+floppy_image_format_t::desc_e* wd177x_format::get_desc_mfm(const format &f, int &current_size, int &end_gap_index) const
{
static floppy_image_format_t::desc_e desc[25] = {
/* 00 */ { MFM, 0x4e, 0 },
@@ -208,7 +208,7 @@ floppy_image_format_t::desc_e* wd177x_format::get_desc_mfm(const format &f, int
return desc;
}
-bool wd177x_format::load(util::random_read &io, uint32_t form_factor, const std::vector<uint32_t> &variants, floppy_image *image)
+bool wd177x_format::load(util::random_read &io, uint32_t form_factor, const std::vector<uint32_t> &variants, floppy_image &image) const
{
int const type = find_size(io, form_factor, variants);
if(type == -1)
@@ -216,7 +216,7 @@ bool wd177x_format::load(util::random_read &io, uint32_t form_factor, const std:
const format &f = formats[type];
int max_tracks, max_heads;
- image->get_maximal_geometry(max_tracks, max_heads);
+ image.get_maximal_geometry(max_tracks, max_heads);
if(f.track_count > max_tracks) {
osd_printf_error("wd177x_format: Number of tracks in image file too high for floppy drive (%d > %d)\n", f.track_count, max_tracks);
@@ -262,22 +262,21 @@ bool wd177x_format::load(util::random_read &io, uint32_t form_factor, const std:
build_sector_description(tf, sectdata, sectors, track, head);
int track_size = compute_track_size(tf);
- size_t actual;
- io.read_at(get_image_offset(f, head, track), sectdata, track_size, actual);
+ /*auto const [err, actual] =*/ read_at(io, get_image_offset(f, head, track), sectdata, track_size); // FIXME: check for errors and premature EOF
generate_track(desc, track, head, sectors, tf.sector_count, total_size, image);
}
- image->set_form_variant(f.form_factor, f.variant);
+ image.set_form_variant(f.form_factor, f.variant);
return true;
}
-bool wd177x_format::supports_save() const
+bool wd177x_format::supports_save() const noexcept
{
return true;
}
-bool wd177x_format::save(util::random_read_write &io, const std::vector<uint32_t> &variants, floppy_image *image)
+bool wd177x_format::save(util::random_read_write &io, const std::vector<uint32_t> &variants, const floppy_image &image) const
{
// Count the number of formats
int formats_count;
@@ -297,8 +296,8 @@ bool wd177x_format::save(util::random_read_write &io, const std::vector<uint32_t
int cur_cell_size = 0;
candidates.clear();
for(int i=0; i < formats_count; i++) {
- if(image->get_form_factor() == floppy_image::FF_UNKNOWN ||
- image->get_form_factor() == formats[i].form_factor) {
+ if(image.get_form_factor() == floppy_image::FF_UNKNOWN ||
+ image.get_form_factor() == formats[i].form_factor) {
if(formats[i].cell_size == cur_cell_size)
candidates.push_back(i);
else if((!cur_cell_size || formats[i].cell_size < cur_cell_size) &&
@@ -335,7 +334,7 @@ bool wd177x_format::save(util::random_read_write &io, const std::vector<uint32_t
// Otherwise, find the best
int tracks, heads;
- image->get_actual_geometry(tracks, heads);
+ image.get_actual_geometry(tracks, heads);
chosen_candidate = candidates[0];
for(unsigned int i=1; i < candidates.size(); i++) {
const format &cc = formats[chosen_candidate];
@@ -389,8 +388,7 @@ bool wd177x_format::save(util::random_read_write &io, const std::vector<uint32_t
build_sector_description(tf, sectdata, sectors, track, head);
extract_sectors(image, tf, sectors, track, head);
int track_size = compute_track_size(tf);
- size_t actual;
- io.write_at(get_image_offset(f, head, track), sectdata, track_size, actual);
+ /*auto const [err, actual] =*/ write_at(io, get_image_offset(f, head, track), sectdata, track_size); // FIXME: check for errors
}
}
@@ -401,7 +399,7 @@ bool wd177x_format::save(util::random_read_write &io, const std::vector<uint32_t
Default implementation of the image offset computation. May be overwritten
by subclasses.
*/
-int wd177x_format::get_image_offset(const format &f, int head, int track)
+int wd177x_format::get_image_offset(const format &f, int head, int track) const
{
int offset = 0;
@@ -422,20 +420,20 @@ int wd177x_format::get_image_offset(const format &f, int head, int track)
}
// A track specific format is to be supplied.
-int wd177x_format::get_track_dam_fm(const format &f, int head, int track)
+int wd177x_format::get_track_dam_fm(const format &f, int head, int track) const
{
// everything marked as data by default
return FM_DAM;
}
// A track specific format is to be supplied.
-int wd177x_format::get_track_dam_mfm(const format &f, int head, int track)
+int wd177x_format::get_track_dam_mfm(const format &f, int head, int track) const
{
// everything marked as data by default
return MFM_DAM;
}
-void wd177x_format::check_compatibility(floppy_image *image, std::vector<int> &candidates)
+void wd177x_format::check_compatibility(const floppy_image &image, std::vector<int> &candidates) const
{
// Check compatibility with every candidate, copy in-place
int *ok_cands = &candidates[0];
@@ -443,7 +441,7 @@ void wd177x_format::check_compatibility(floppy_image *image, std::vector<int> &c
const format &f = formats[candidates[i]];
int max_tracks, max_heads;
- image->get_maximal_geometry(max_tracks, max_heads);
+ image.get_maximal_geometry(max_tracks, max_heads);
// Fail if floppy drive can't handle track or head count
if(f.track_count > max_tracks || f.head_count > max_heads) {
@@ -504,7 +502,7 @@ void wd177x_format::check_compatibility(floppy_image *image, std::vector<int> &c
}
// A track specific format is to be supplied.
-void wd177x_format::extract_sectors(floppy_image *image, const format &f, desc_s *sdesc, int track, int head)
+void wd177x_format::extract_sectors(const floppy_image &image, const format &f, desc_s *sdesc, int track, int head)
{
// Extract the sectors
auto bitstream = generate_bitstream_from_track(track, head, f.cell_size, image);
@@ -527,7 +525,7 @@ void wd177x_format::extract_sectors(floppy_image *image, const format &f, desc_s
else if(sectors[ds.sector_id].size() < ds.size) {
memcpy((void *)ds.data, sectors[ds.sector_id].data(), sectors[ds.sector_id].size());
- memset((uint8_t *)ds.data + sectors[ds.sector_id].size(), 0, sectors[ds.sector_id].size() - ds.size);
+ memset((uint8_t *)ds.data + sectors[ds.sector_id].size(), 0, ds.size - sectors[ds.sector_id].size());
} else
memcpy((void *)ds.data, sectors[ds.sector_id].data(), ds.size);