diff options
Diffstat (limited to 'src/lib/formats/wd177x_dsk.cpp')
-rw-r--r-- | src/lib/formats/wd177x_dsk.cpp | 52 |
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 ¤t_size, int &end_gap_index) +floppy_image_format_t::desc_e* wd177x_format::get_desc_fm(const format &f, int ¤t_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 ¤t_size, int &end_gap_index) +floppy_image_format_t::desc_e* wd177x_format::get_desc_mfm(const format &f, int ¤t_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); |