diff options
author | 2021-01-21 15:08:56 +0100 | |
---|---|---|
committer | 2021-01-22 00:02:30 +0100 | |
commit | bd2db8dcc6c14638c02b8f88e691ae94a3a28f3d (patch) | |
tree | 8a31c8993323cf09185666f0fba09c651057c60e /src/lib/formats/upd765_dsk.cpp | |
parent | 1a76ae1e0a53ad6658c195b6e38d1a1d0ad477fe (diff) |
flopimg: Change the extracted bitstreams into vector<bool>
flopimg: Change the extracted sectors into vector<vector<uint8_t>>
flopimg: Add a Mac sector extraction
apple 3.5 gcr: Generalize track creation/extraction
apple 3.5 gcr: Add a pure sector format
Diffstat (limited to 'src/lib/formats/upd765_dsk.cpp')
-rw-r--r-- | src/lib/formats/upd765_dsk.cpp | 44 |
1 files changed, 18 insertions, 26 deletions
diff --git a/src/lib/formats/upd765_dsk.cpp b/src/lib/formats/upd765_dsk.cpp index 8676c4b9f63..ce17bd1c4f2 100644 --- a/src/lib/formats/upd765_dsk.cpp +++ b/src/lib/formats/upd765_dsk.cpp @@ -352,21 +352,17 @@ bool upd765_format::save(io_generic *io, const std::vector<uint32_t> &variants, void upd765_format::check_compatibility(floppy_image *image, std::vector<int> &candidates) { - uint8_t bitstream[500000/8]; - uint8_t sectdata[50000]; - desc_xs sectors[256]; - int track_size; - // Extract the sectors - generate_bitstream_from_track(0, 0, formats[candidates[0]].cell_size, bitstream, track_size, image); + auto bitstream = generate_bitstream_from_track(0, 0, formats[candidates[0]].cell_size, image); + std::vector<std::vector<uint8_t>> sectors; switch (formats[candidates[0]].encoding) { case floppy_image::FM: - extract_sectors_from_bitstream_fm_pc(bitstream, track_size, sectors, sectdata, sizeof(sectdata)); + sectors = extract_sectors_from_bitstream_fm_pc(bitstream); break; case floppy_image::MFM: - extract_sectors_from_bitstream_mfm_pc(bitstream, track_size, sectors, sectdata, sizeof(sectdata)); + sectors = extract_sectors_from_bitstream_mfm_pc(bitstream); break; } @@ -375,8 +371,8 @@ void upd765_format::check_compatibility(floppy_image *image, std::vector<int> &c for(unsigned int i=0; i != candidates.size(); i++) { const format &f = formats[candidates[i]]; int ns = 0; - for(int j=0; j<256; j++) - if(sectors[j].data) { + for(unsigned int j=0; j != sectors.size(); j++) + if(!sectors[j].empty()) { int sid; if(f.sector_base_id == -1) { for(sid=0; sid < f.sector_count; sid++) @@ -387,10 +383,10 @@ void upd765_format::check_compatibility(floppy_image *image, std::vector<int> &c if(sid < 0 || sid > f.sector_count) goto fail; if(f.sector_base_size) { - if(sectors[j].size != f.sector_base_size) + if(sectors[j].size() != f.sector_base_size) goto fail; } else { - if(sectors[j].size != f.per_sector_size[sid]) + if(sectors[j].size() != f.per_sector_size[sid]) goto fail; } ns++; @@ -406,33 +402,29 @@ void upd765_format::check_compatibility(floppy_image *image, std::vector<int> &c void upd765_format::extract_sectors(floppy_image *image, const format &f, desc_s *sdesc, int track, int head) { - uint8_t bitstream[500000/8]; - uint8_t sectdata[50000]; - desc_xs sectors[256]; - int track_size; - // Extract the sectors - generate_bitstream_from_track(track, head, f.cell_size, bitstream, track_size, image); + auto bitstream = generate_bitstream_from_track(track, head, f.cell_size, image); + std::vector<std::vector<uint8_t>> sectors; switch (f.encoding) { case floppy_image::FM: - extract_sectors_from_bitstream_fm_pc(bitstream, track_size, sectors, sectdata, sizeof(sectdata)); + sectors = extract_sectors_from_bitstream_fm_pc(bitstream); break; case floppy_image::MFM: - extract_sectors_from_bitstream_mfm_pc(bitstream, track_size, sectors, sectdata, sizeof(sectdata)); + sectors = extract_sectors_from_bitstream_mfm_pc(bitstream); break; } for(int i=0; i<f.sector_count; i++) { desc_s &ds = sdesc[i]; - desc_xs &xs = sectors[ds.sector_id]; - if(!xs.data) + const auto &data = sectors[ds.sector_id]; + if(data.empty()) memset((void *)ds.data, 0, ds.size); - else if(xs.size < ds.size) { - memcpy((void *)ds.data, xs.data, xs.size); - memset((uint8_t *)ds.data + xs.size, 0, xs.size - ds.size); + else if(data.size() < ds.size) { + memcpy((void *)ds.data, data.data(), data.size()); + memset((uint8_t *)ds.data + data.size(), 0, data.size() - ds.size); } else - memcpy((void *)ds.data, xs.data, ds.size); + memcpy((void *)ds.data, data.data(), ds.size); } } |