mirror of
https://github.com/davidgiven/fluxengine.git
synced 2025-10-31 11:17:01 -07:00
Actually start using the new physical sector stuff.
This commit is contained in:
@@ -206,7 +206,7 @@ public:
|
|||||||
|
|
||||||
std::set<unsigned> requiredSectors(const Location& location) const override
|
std::set<unsigned> requiredSectors(const Location& location) const override
|
||||||
{
|
{
|
||||||
auto trackLayout = Layout::getLayoutOfTrack(location.logicalTrack, location.head);
|
auto& trackLayout = Layout::getLayoutOfTrack(location.logicalTrack, location.head);
|
||||||
return std::set<unsigned>(trackLayout.logicalSectors.begin(), trackLayout.logicalSectors.end());
|
return std::set<unsigned>(trackLayout.logicalSectors.begin(), trackLayout.logicalSectors.end());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -115,7 +115,7 @@ public:
|
|||||||
IbmEncoderProto::TrackdataProto trackdata;
|
IbmEncoderProto::TrackdataProto trackdata;
|
||||||
getEncoderTrackData(trackdata, location.logicalTrack, location.head);
|
getEncoderTrackData(trackdata, location.logicalTrack, location.head);
|
||||||
|
|
||||||
auto trackLayout =
|
auto& trackLayout =
|
||||||
Layout::getLayoutOfTrack(location.logicalTrack, location.head);
|
Layout::getLayoutOfTrack(location.logicalTrack, location.head);
|
||||||
|
|
||||||
int logicalSide = location.head ^ trackdata.swap_sides();
|
int logicalSide = location.head ^ trackdata.swap_sides();
|
||||||
@@ -138,7 +138,7 @@ public:
|
|||||||
IbmEncoderProto::TrackdataProto trackdata;
|
IbmEncoderProto::TrackdataProto trackdata;
|
||||||
getEncoderTrackData(trackdata, location.logicalTrack, location.head);
|
getEncoderTrackData(trackdata, location.logicalTrack, location.head);
|
||||||
|
|
||||||
auto trackLayout =
|
auto& trackLayout =
|
||||||
Layout::getLayoutOfTrack(location.logicalTrack, location.head);
|
Layout::getLayoutOfTrack(location.logicalTrack, location.head);
|
||||||
|
|
||||||
auto writeBytes = [&](const Bytes& bytes)
|
auto writeBytes = [&](const Bytes& bytes)
|
||||||
|
|||||||
@@ -26,6 +26,7 @@
|
|||||||
#include "sector.h"
|
#include "sector.h"
|
||||||
#include "image.h"
|
#include "image.h"
|
||||||
#include "lib/decoders/decoders.pb.h"
|
#include "lib/decoders/decoders.pb.h"
|
||||||
|
#include "lib/layout.h"
|
||||||
#include "fmt/format.h"
|
#include "fmt/format.h"
|
||||||
#include <numeric>
|
#include <numeric>
|
||||||
|
|
||||||
@@ -72,6 +73,8 @@ std::shared_ptr<const TrackDataFlux> AbstractDecoder::decodeToSectors(
|
|||||||
auto newSector = [&] {
|
auto newSector = [&] {
|
||||||
_sector = std::make_shared<Sector>();
|
_sector = std::make_shared<Sector>();
|
||||||
_sector->status = Sector::MISSING;
|
_sector->status = Sector::MISSING;
|
||||||
|
_sector->logicalTrack = location.logicalTrack;
|
||||||
|
_sector->logicalSide = location.head;
|
||||||
_sector->physicalTrack = location.physicalTrack;
|
_sector->physicalTrack = location.physicalTrack;
|
||||||
_sector->physicalHead = location.head;
|
_sector->physicalHead = location.head;
|
||||||
};
|
};
|
||||||
@@ -132,7 +135,11 @@ std::shared_ptr<const TrackDataFlux> AbstractDecoder::decodeToSectors(
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (_sector->status != Sector::MISSING)
|
if (_sector->status != Sector::MISSING)
|
||||||
|
{
|
||||||
|
auto& trackLayout = Layout::getLayoutOfTrack(_sector->logicalTrack, _sector->logicalSide);
|
||||||
|
_sector->logicalSector = trackLayout.physicalSectorToLogical(_sector->physicalSector);
|
||||||
_trackdata->sectors.push_back(_sector);
|
_trackdata->sectors.push_back(_sector);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
23
lib/image.cc
23
lib/image.cc
@@ -1,7 +1,8 @@
|
|||||||
#include "globals.h"
|
#include "lib/globals.h"
|
||||||
#include "sector.h"
|
#include "lib/sector.h"
|
||||||
#include "image.h"
|
#include "lib/image.h"
|
||||||
#include "layout.h"
|
#include "lib/layout.h"
|
||||||
|
#include "lib/mapper.h"
|
||||||
|
|
||||||
Image::Image() {}
|
Image::Image() {}
|
||||||
|
|
||||||
@@ -10,7 +11,7 @@ Image::Image(std::set<std::shared_ptr<const Sector>>& sectors)
|
|||||||
for (auto& sector : sectors)
|
for (auto& sector : sectors)
|
||||||
{
|
{
|
||||||
key_t key = std::make_tuple(
|
key_t key = std::make_tuple(
|
||||||
sector->logicalTrack, sector->logicalSide, sector->physicalSector);
|
sector->logicalTrack, sector->logicalSide, sector->logicalSector);
|
||||||
_sectors[key] = sector;
|
_sectors[key] = sector;
|
||||||
}
|
}
|
||||||
calculateSize();
|
calculateSize();
|
||||||
@@ -29,7 +30,7 @@ void Image::createBlankImage()
|
|||||||
{
|
{
|
||||||
unsigned track = trackAndHead.first;
|
unsigned track = trackAndHead.first;
|
||||||
unsigned side = trackAndHead.second;
|
unsigned side = trackAndHead.second;
|
||||||
auto trackLayout = Layout::getLayoutOfTrack(track, side);
|
auto& trackLayout = Layout::getLayoutOfTrack(track, side);
|
||||||
Bytes blank(trackLayout.sectorSize);
|
Bytes blank(trackLayout.sectorSize);
|
||||||
for (unsigned sectorId : trackLayout.logicalSectors)
|
for (unsigned sectorId : trackLayout.logicalSectors)
|
||||||
put(track, side, sectorId)->data = blank;
|
put(track, side, sectorId)->data = blank;
|
||||||
@@ -62,11 +63,15 @@ std::shared_ptr<const Sector> Image::get(
|
|||||||
std::shared_ptr<Sector> Image::put(
|
std::shared_ptr<Sector> Image::put(
|
||||||
unsigned track, unsigned side, unsigned sectorid)
|
unsigned track, unsigned side, unsigned sectorid)
|
||||||
{
|
{
|
||||||
|
auto& trackLayout = Layout::getLayoutOfTrack(track, side);
|
||||||
key_t key = std::make_tuple(track, side, sectorid);
|
key_t key = std::make_tuple(track, side, sectorid);
|
||||||
std::shared_ptr<Sector> sector = std::make_shared<Sector>();
|
std::shared_ptr<Sector> sector = std::make_shared<Sector>();
|
||||||
sector->logicalTrack = track;
|
sector->logicalTrack = track;
|
||||||
sector->logicalSide = side;
|
sector->logicalSide = side;
|
||||||
sector->physicalSector = sectorid;
|
sector->logicalSector = sectorid;
|
||||||
|
sector->physicalTrack = Mapper::remapTrackLogicalToPhysical(track);
|
||||||
|
sector->physicalHead = side;
|
||||||
|
sector->physicalSector = trackLayout.logicalSectorToPhysical(sectorid);
|
||||||
_sectors[key] = sector;
|
_sectors[key] = sector;
|
||||||
return sector;
|
return sector;
|
||||||
}
|
}
|
||||||
@@ -100,8 +105,8 @@ void Image::calculateSize()
|
|||||||
_geometry.numSides =
|
_geometry.numSides =
|
||||||
std::max(_geometry.numSides, (unsigned)sector->logicalSide + 1);
|
std::max(_geometry.numSides, (unsigned)sector->logicalSide + 1);
|
||||||
_geometry.firstSector = std::min(
|
_geometry.firstSector = std::min(
|
||||||
_geometry.firstSector, (unsigned)sector->physicalSector);
|
_geometry.firstSector, (unsigned)sector->logicalSector);
|
||||||
maxSector = std::max(maxSector, (unsigned)sector->physicalSector);
|
maxSector = std::max(maxSector, (unsigned)sector->logicalSector);
|
||||||
_geometry.sectorSize =
|
_geometry.sectorSize =
|
||||||
std::max(_geometry.sectorSize, (unsigned)sector->data.size());
|
std::max(_geometry.sectorSize, (unsigned)sector->data.size());
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -69,20 +69,14 @@ public:
|
|||||||
offset += 256;
|
offset += 256;
|
||||||
|
|
||||||
sector->status = Sector::OK;
|
sector->status = Sector::OK;
|
||||||
sector->logicalTrack = track;
|
|
||||||
sector->physicalTrack = physicalTrack;
|
sector->physicalTrack = physicalTrack;
|
||||||
sector->logicalSide = sector->physicalHead = head;
|
|
||||||
sector->physicalSector = sectorId;
|
|
||||||
sector->data.writer().append(payload);
|
sector->data.writer().append(payload);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{ // no more data in input file. Write sectors with status:
|
{ // no more data in input file. Write sectors with status:
|
||||||
// DATA_MISSING
|
// DATA_MISSING
|
||||||
sector->status = Sector::DATA_MISSING;
|
sector->status = Sector::DATA_MISSING;
|
||||||
sector->logicalTrack = track;
|
|
||||||
sector->physicalTrack = physicalTrack;
|
sector->physicalTrack = physicalTrack;
|
||||||
sector->logicalSide = sector->physicalHead = head;
|
|
||||||
sector->physicalSector = sectorId;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -197,10 +197,6 @@ public:
|
|||||||
inputFile.read((char*)data.begin(), data.size());
|
inputFile.read((char*)data.begin(), data.size());
|
||||||
const auto& sector = image->put(track, head, sectorId);
|
const auto& sector = image->put(track, head, sectorId);
|
||||||
sector->status = Sector::OK;
|
sector->status = Sector::OK;
|
||||||
sector->logicalTrack = track;
|
|
||||||
sector->physicalTrack = Mapper::remapTrackLogicalToPhysical(track);
|
|
||||||
sector->logicalSide = sector->physicalHead = head;
|
|
||||||
sector->physicalSector = sectorId;
|
|
||||||
sector->data = data;
|
sector->data = data;
|
||||||
|
|
||||||
physical->add_sector(sectorId);
|
physical->add_sector(sectorId);
|
||||||
|
|||||||
@@ -86,10 +86,6 @@ public:
|
|||||||
|
|
||||||
const auto& sector = image->put(track, side, sectorId);
|
const auto& sector = image->put(track, side, sectorId);
|
||||||
sector->status = Sector::OK;
|
sector->status = Sector::OK;
|
||||||
sector->logicalTrack = track;
|
|
||||||
sector->physicalTrack = Mapper::remapTrackLogicalToPhysical(track);
|
|
||||||
sector->logicalSide = sector->physicalHead = side;
|
|
||||||
sector->physicalSector = sectorId;
|
|
||||||
sector->data = data;
|
sector->data = data;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -110,10 +110,6 @@ public:
|
|||||||
|
|
||||||
const auto& sector = image->put(track, head, sectorId);
|
const auto& sector = image->put(track, head, sectorId);
|
||||||
sector->status = Sector::OK;
|
sector->status = Sector::OK;
|
||||||
sector->logicalTrack = track;
|
|
||||||
sector->physicalTrack = Mapper::remapTrackLogicalToPhysical(track);
|
|
||||||
sector->logicalSide = sector->physicalHead = head;
|
|
||||||
sector->physicalSector = sectorId;
|
|
||||||
sector->data.writer().append(payload).append(tag);
|
sector->data.writer().append(payload).append(tag);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -66,10 +66,6 @@ public:
|
|||||||
const auto& sector =
|
const auto& sector =
|
||||||
image->put(track, side, sectorId);
|
image->put(track, side, sectorId);
|
||||||
sector->status = Sector::OK;
|
sector->status = Sector::OK;
|
||||||
sector->logicalTrack = track;
|
|
||||||
sector->physicalTrack = Mapper::remapTrackLogicalToPhysical(track);
|
|
||||||
sector->logicalSide = sector->physicalHead = side;
|
|
||||||
sector->physicalSector = sectorId;
|
|
||||||
sector->data = data;
|
sector->data = data;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -264,7 +264,6 @@ public:
|
|||||||
int SectorID;
|
int SectorID;
|
||||||
SectorID = sector_skew[s];
|
SectorID = sector_skew[s];
|
||||||
const auto& sector = image->put(header.track, header.Head, SectorID);
|
const auto& sector = image->put(header.track, header.Head, SectorID);
|
||||||
sector->physicalSector = SectorID;
|
|
||||||
//read the status of the sector
|
//read the status of the sector
|
||||||
unsigned int Status_Sector = br.read_8();
|
unsigned int Status_Sector = br.read_8();
|
||||||
headerPtr++;
|
headerPtr++;
|
||||||
|
|||||||
@@ -40,7 +40,7 @@ public:
|
|||||||
if (inputFile.eof())
|
if (inputFile.eof())
|
||||||
break;
|
break;
|
||||||
|
|
||||||
auto trackLayout = Layout::getLayoutOfTrack(track, side);
|
auto& trackLayout = Layout::getLayoutOfTrack(track, side);
|
||||||
for (int sectorId : trackLayout.logicalSectors)
|
for (int sectorId : trackLayout.logicalSectors)
|
||||||
{
|
{
|
||||||
Bytes data(trackLayout.sectorSize);
|
Bytes data(trackLayout.sectorSize);
|
||||||
@@ -48,11 +48,6 @@ public:
|
|||||||
|
|
||||||
const auto& sector = image->put(track, side, sectorId);
|
const auto& sector = image->put(track, side, sectorId);
|
||||||
sector->status = Sector::OK;
|
sector->status = Sector::OK;
|
||||||
sector->logicalTrack = track;
|
|
||||||
sector->physicalTrack =
|
|
||||||
Mapper::remapTrackLogicalToPhysical(track);
|
|
||||||
sector->logicalSide = sector->physicalHead = side;
|
|
||||||
sector->physicalSector = sectorId;
|
|
||||||
sector->data = data;
|
sector->data = data;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -124,10 +124,6 @@ public:
|
|||||||
const auto& sector =
|
const auto& sector =
|
||||||
image->put(header.track, head, header.sector);
|
image->put(header.track, head, header.sector);
|
||||||
sector->status = Sector::OK;
|
sector->status = Sector::OK;
|
||||||
sector->logicalTrack = header.track;
|
|
||||||
sector->physicalTrack = Mapper::remapTrackLogicalToPhysical(header.track);
|
|
||||||
sector->logicalSide = sector->physicalHead = head;
|
|
||||||
sector->physicalSector = header.sector;
|
|
||||||
sector->data = data;
|
sector->data = data;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -147,10 +147,6 @@ public:
|
|||||||
inputFile.read((char*)data.begin(), data.size());
|
inputFile.read((char*)data.begin(), data.size());
|
||||||
const auto& sector = image->put(track, head, sectorId);
|
const auto& sector = image->put(track, head, sectorId);
|
||||||
sector->status = Sector::OK;
|
sector->status = Sector::OK;
|
||||||
sector->logicalTrack = track;
|
|
||||||
sector->physicalTrack = Mapper::remapTrackLogicalToPhysical(track);
|
|
||||||
sector->logicalSide = sector->physicalHead = head;
|
|
||||||
sector->physicalSector = sectorId;
|
|
||||||
sector->data = data;
|
sector->data = data;
|
||||||
|
|
||||||
physical->add_sector(sectorId);
|
physical->add_sector(sectorId);
|
||||||
|
|||||||
@@ -100,10 +100,6 @@ public:
|
|||||||
|
|
||||||
const auto& sector = image->put(track, head, sectorId);
|
const auto& sector = image->put(track, head, sectorId);
|
||||||
sector->status = Sector::OK;
|
sector->status = Sector::OK;
|
||||||
sector->logicalTrack = track;
|
|
||||||
sector->physicalTrack = Mapper::remapTrackLogicalToPhysical(track);
|
|
||||||
sector->logicalSide = sector->physicalHead = head;
|
|
||||||
sector->physicalSector = sectorId;
|
|
||||||
sector->data = data;
|
sector->data = data;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -82,7 +82,7 @@ public:
|
|||||||
ByteWriter sectorWriter(sectorBytes);
|
ByteWriter sectorWriter(sectorBytes);
|
||||||
sectorWriter.write_8(sector->logicalTrack);
|
sectorWriter.write_8(sector->logicalTrack);
|
||||||
sectorWriter.write_8(sector->logicalSide);
|
sectorWriter.write_8(sector->logicalSide);
|
||||||
sectorWriter.write_8(sector->physicalSector);
|
sectorWriter.write_8(sector->logicalSector);
|
||||||
sectorWriter.write_8(24 - countl_zero(uint32_t(sector->data.size())));
|
sectorWriter.write_8(24 - countl_zero(uint32_t(sector->data.size())));
|
||||||
sectorWriter.write_le16(sectors.size());
|
sectorWriter.write_le16(sectors.size());
|
||||||
sectorWriter.write_8(0x00); // always write mfm
|
sectorWriter.write_8(0x00); // always write mfm
|
||||||
|
|||||||
@@ -89,6 +89,7 @@ void ImageWriter::writeCsv(const Image& image, const std::string& filename)
|
|||||||
|
|
||||||
f << "\"Physical track\","
|
f << "\"Physical track\","
|
||||||
"\"Physical side\","
|
"\"Physical side\","
|
||||||
|
"\"Physical sector\","
|
||||||
"\"Logical track\","
|
"\"Logical track\","
|
||||||
"\"Logical side\","
|
"\"Logical side\","
|
||||||
"\"Logical sector\","
|
"\"Logical sector\","
|
||||||
@@ -104,12 +105,13 @@ void ImageWriter::writeCsv(const Image& image, const std::string& filename)
|
|||||||
|
|
||||||
for (const auto& sector : image)
|
for (const auto& sector : image)
|
||||||
{
|
{
|
||||||
f << fmt::format("{},{},{},{},{},{},{},{},{},{},{},{},{}\n",
|
f << fmt::format("{},{},{},{},{},{},{},{},{},{},{},{},{},{}\n",
|
||||||
sector->physicalTrack,
|
sector->physicalTrack,
|
||||||
sector->physicalHead,
|
sector->physicalHead,
|
||||||
|
sector->physicalSector,
|
||||||
sector->logicalTrack,
|
sector->logicalTrack,
|
||||||
sector->logicalSide,
|
sector->logicalSide,
|
||||||
sector->physicalSector,
|
sector->logicalSector,
|
||||||
sector->clock,
|
sector->clock,
|
||||||
sector->headerStartTime,
|
sector->headerStartTime,
|
||||||
sector->headerEndTime,
|
sector->headerEndTime,
|
||||||
|
|||||||
@@ -36,7 +36,7 @@ public:
|
|||||||
int track = p.first;
|
int track = p.first;
|
||||||
int side = p.second;
|
int side = p.second;
|
||||||
|
|
||||||
auto trackLayout = Layout::getLayoutOfTrack(track, side);
|
auto& trackLayout = Layout::getLayoutOfTrack(track, side);
|
||||||
for (int sectorId : trackLayout.logicalSectors)
|
for (int sectorId : trackLayout.logicalSectors)
|
||||||
{
|
{
|
||||||
const auto& sector = image.get(track, side, sectorId);
|
const auto& sector = image.get(track, side, sectorId);
|
||||||
|
|||||||
@@ -69,7 +69,7 @@ const Layout& Layout::getLayoutOfTrack(unsigned track, unsigned side)
|
|||||||
auto& layout = layoutCache[std::make_pair(track, side)];
|
auto& layout = layoutCache[std::make_pair(track, side)];
|
||||||
if (!layout)
|
if (!layout)
|
||||||
{
|
{
|
||||||
layout.reset(new Layout);
|
layout.reset(new Layout());
|
||||||
|
|
||||||
LayoutProto::LayoutdataProto layoutdata;
|
LayoutProto::LayoutdataProto layoutdata;
|
||||||
for (const auto& f : config.layout().layoutdata())
|
for (const auto& f : config.layout().layoutdata())
|
||||||
@@ -105,20 +105,22 @@ const Layout& Layout::getLayoutOfTrack(unsigned track, unsigned side)
|
|||||||
return *layout;
|
return *layout;
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned Layout::physicalSectorToLogical(unsigned physicalSectorId)
|
unsigned Layout::physicalSectorToLogical(unsigned physicalSectorId) const
|
||||||
{
|
{
|
||||||
for (int i=0; i<physicalSectors.size(); i++)
|
for (int i = 0; i < physicalSectors.size(); i++)
|
||||||
if (physicalSectors[i] == physicalSectorId)
|
if (physicalSectors[i] == physicalSectorId)
|
||||||
return logicalSectors[i];
|
return logicalSectors[i];
|
||||||
Error() << fmt::format("LAYOUT: physical sector {} not recognised", physicalSectorId);
|
Error() << fmt::format(
|
||||||
|
"LAYOUT: physical sector {} not recognised", physicalSectorId);
|
||||||
|
throw nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned Layout::logicalSectorToPhysical(unsigned logicalSectorId)
|
unsigned Layout::logicalSectorToPhysical(unsigned logicalSectorId) const
|
||||||
{
|
{
|
||||||
for (int i=0; i<logicalSectors.size(); i++)
|
for (int i = 0; i < logicalSectors.size(); i++)
|
||||||
if (logicalSectors[i] == logicalSectorId)
|
if (logicalSectors[i] == logicalSectorId)
|
||||||
return physicalSectors[i];
|
return physicalSectors[i];
|
||||||
Error() << fmt::format("LAYOUT: logical sector {} not recognised", logicalSectorId);
|
Error() << fmt::format(
|
||||||
|
"LAYOUT: logical sector {} not recognised", logicalSectorId);
|
||||||
|
throw nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
12
lib/layout.h
12
lib/layout.h
@@ -5,6 +5,14 @@
|
|||||||
|
|
||||||
class Layout
|
class Layout
|
||||||
{
|
{
|
||||||
|
public:
|
||||||
|
Layout() {}
|
||||||
|
|
||||||
|
private:
|
||||||
|
/* Can't copy. */
|
||||||
|
Layout(const Layout&);
|
||||||
|
Layout& operator=(const Layout&);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
static std::vector<std::pair<int, int>> getTrackOrdering(
|
static std::vector<std::pair<int, int>> getTrackOrdering(
|
||||||
unsigned guessedTracks = 0, unsigned guessedSides = 0);
|
unsigned guessedTracks = 0, unsigned guessedSides = 0);
|
||||||
@@ -19,8 +27,8 @@ public:
|
|||||||
std::vector<unsigned> physicalSectors;
|
std::vector<unsigned> physicalSectors;
|
||||||
std::vector<unsigned> logicalSectors;
|
std::vector<unsigned> logicalSectors;
|
||||||
|
|
||||||
unsigned physicalSectorToLogical(unsigned sectorId);
|
unsigned physicalSectorToLogical(unsigned sectorId) const;
|
||||||
unsigned logicalSectorToPhysical(unsigned sectorId);
|
unsigned logicalSectorToPhysical(unsigned sectorId) const;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -120,7 +120,7 @@ std::string Logger::toString(const AnyLogMessage& message)
|
|||||||
stream << fmt::format(" {}.{}.{}{}",
|
stream << fmt::format(" {}.{}.{}{}",
|
||||||
sector->logicalTrack,
|
sector->logicalTrack,
|
||||||
sector->logicalSide,
|
sector->logicalSide,
|
||||||
sector->physicalSector,
|
sector->logicalSector,
|
||||||
Sector::statusToChar(sector->status));
|
Sector::statusToChar(sector->status));
|
||||||
|
|
||||||
stream << '\n';
|
stream << '\n';
|
||||||
|
|||||||
@@ -109,7 +109,7 @@ static std::set<std::shared_ptr<const Sector>> collectSectors(
|
|||||||
for (const auto& sector : track_sectors)
|
for (const auto& sector : track_sectors)
|
||||||
{
|
{
|
||||||
key_t sectorid = {
|
key_t sectorid = {
|
||||||
sector->logicalTrack, sector->logicalSide, sector->physicalSector};
|
sector->logicalTrack, sector->logicalSide, sector->logicalSector};
|
||||||
sectors.insert({sectorid, sector});
|
sectors.insert({sectorid, sector});
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -166,7 +166,7 @@ BadSectorsState combineRecordAndSectors(
|
|||||||
for (unsigned logical_sector : decoder.requiredSectors(trackFlux.location))
|
for (unsigned logical_sector : decoder.requiredSectors(trackFlux.location))
|
||||||
{
|
{
|
||||||
auto sector = std::make_shared<Sector>(location);
|
auto sector = std::make_shared<Sector>(location);
|
||||||
sector->physicalSector = logical_sector;
|
sector->logicalSector = logical_sector;
|
||||||
sector->status = Sector::MISSING;
|
sector->status = Sector::MISSING;
|
||||||
track_sectors.insert(sector);
|
track_sectors.insert(sector);
|
||||||
}
|
}
|
||||||
@@ -344,14 +344,14 @@ void writeTracksAndVerify(FluxSink& fluxSink,
|
|||||||
wanted
|
wanted
|
||||||
.put(sector->logicalTrack,
|
.put(sector->logicalTrack,
|
||||||
sector->logicalSide,
|
sector->logicalSide,
|
||||||
sector->physicalSector)
|
sector->logicalSector)
|
||||||
->data = sector->data;
|
->data = sector->data;
|
||||||
|
|
||||||
for (const auto& sector : trackFlux->sectors)
|
for (const auto& sector : trackFlux->sectors)
|
||||||
{
|
{
|
||||||
const auto s = wanted.get(sector->logicalTrack,
|
const auto s = wanted.get(sector->logicalTrack,
|
||||||
sector->logicalSide,
|
sector->logicalSide,
|
||||||
sector->physicalSector);
|
sector->logicalSector);
|
||||||
if (!s)
|
if (!s)
|
||||||
{
|
{
|
||||||
Logger() << "spurious sector on verify";
|
Logger() << "spurious sector on verify";
|
||||||
@@ -364,7 +364,7 @@ void writeTracksAndVerify(FluxSink& fluxSink,
|
|||||||
}
|
}
|
||||||
wanted.erase(sector->logicalTrack,
|
wanted.erase(sector->logicalTrack,
|
||||||
sector->logicalSide,
|
sector->logicalSide,
|
||||||
sector->physicalSector);
|
sector->logicalSector);
|
||||||
}
|
}
|
||||||
if (!wanted.empty())
|
if (!wanted.empty())
|
||||||
{
|
{
|
||||||
@@ -524,7 +524,7 @@ std::shared_ptr<const DiskFlux> readDiskCommand(
|
|||||||
"status {}\n",
|
"status {}\n",
|
||||||
sector->logicalTrack,
|
sector->logicalTrack,
|
||||||
sector->logicalSide,
|
sector->logicalSide,
|
||||||
sector->physicalSector,
|
sector->logicalSector,
|
||||||
sector->headerStartTime / 1000.0,
|
sector->headerStartTime / 1000.0,
|
||||||
sector->clock / 1000.0,
|
sector->clock / 1000.0,
|
||||||
Sector::statusToString(sector->status));
|
Sector::statusToString(sector->status));
|
||||||
|
|||||||
@@ -63,7 +63,7 @@ public:
|
|||||||
{
|
{
|
||||||
unsigned track = trackid.first;
|
unsigned track = trackid.first;
|
||||||
unsigned side = trackid.second;
|
unsigned side = trackid.second;
|
||||||
auto trackLayout = Layout::getLayoutOfTrack(track, side);
|
auto& trackLayout = Layout::getLayoutOfTrack(track, side);
|
||||||
locations.insert(Mapper::computeLocationFor(track, side));
|
locations.insert(Mapper::computeLocationFor(track, side));
|
||||||
|
|
||||||
/* If we don't have all the sectors of this track, we may need to
|
/* If we don't have all the sectors of this track, we may need to
|
||||||
@@ -131,7 +131,7 @@ private:
|
|||||||
auto trackdata = readAndDecodeTrack(*_fluxSource, *_decoder, location);
|
auto trackdata = readAndDecodeTrack(*_fluxSource, *_decoder, location);
|
||||||
|
|
||||||
for (const auto& sector : trackdata->sectors)
|
for (const auto& sector : trackdata->sectors)
|
||||||
*_loadedSectors.put(track, side, sector->physicalSector) = *sector;
|
*_loadedSectors.put(track, side, sector->logicalSector) = *sector;
|
||||||
_loadedTracks.insert(trackid_t(track, side));
|
_loadedTracks.insert(trackid_t(track, side));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -164,7 +164,7 @@ Filesystem::Filesystem(std::shared_ptr<SectorInterface> sectors):
|
|||||||
int track = p.first;
|
int track = p.first;
|
||||||
int side = p.second;
|
int side = p.second;
|
||||||
|
|
||||||
auto trackLayout = Layout::getLayoutOfTrack(track, side);
|
auto& trackLayout = Layout::getLayoutOfTrack(track, side);
|
||||||
if (trackLayout.logicalSectors.empty())
|
if (trackLayout.logicalSectors.empty())
|
||||||
Error() << "FS: filesystem support cannot be used without concrete "
|
Error() << "FS: filesystem support cannot be used without concrete "
|
||||||
"layout information";
|
"layout information";
|
||||||
@@ -268,7 +268,7 @@ Bytes Filesystem::getLogicalSector(uint32_t number, uint32_t count)
|
|||||||
int track = std::get<0>(it);
|
int track = std::get<0>(it);
|
||||||
int side = std::get<1>(it);
|
int side = std::get<1>(it);
|
||||||
int sector = std::get<2>(it);
|
int sector = std::get<2>(it);
|
||||||
auto trackLayout = Layout::getLayoutOfTrack(track, side);
|
auto& trackLayout = Layout::getLayoutOfTrack(track, side);
|
||||||
bw += _sectors->get(track, side, sector)
|
bw += _sectors->get(track, side, sector)
|
||||||
->data.slice(0, trackLayout.sectorSize);
|
->data.slice(0, trackLayout.sectorSize);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -187,21 +187,22 @@ static void readRow(const std::vector<std::string>& row, Image& image)
|
|||||||
if (status == Sector::Status::MISSING)
|
if (status == Sector::Status::MISSING)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
int logicalTrack = std::stoi(row[2]);
|
int logicalTrack = std::stoi(row[3]);
|
||||||
int logicalSide = std::stoi(row[3]);
|
int logicalSide = std::stoi(row[4]);
|
||||||
int logicalSector = std::stoi(row[4]);
|
int logicalSector = std::stoi(row[5]);
|
||||||
|
|
||||||
const auto& sector = image.put(logicalTrack, logicalSide, logicalSector);
|
const auto& sector = image.put(logicalTrack, logicalSide, logicalSector);
|
||||||
sector->physicalTrack = std::stoi(row[0]);
|
sector->physicalTrack = std::stoi(row[0]);
|
||||||
sector->physicalHead = std::stoi(row[1]);
|
sector->physicalHead = std::stoi(row[1]);
|
||||||
|
sector->physicalSector = std::stoi(row[2]);
|
||||||
sector->logicalTrack = logicalTrack;
|
sector->logicalTrack = logicalTrack;
|
||||||
sector->logicalSide = logicalSide;
|
sector->logicalSide = logicalSide;
|
||||||
sector->physicalSector = logicalSector;
|
sector->logicalSector = logicalSector;
|
||||||
sector->clock = std::stod(row[5]);
|
sector->clock = std::stod(row[6]);
|
||||||
sector->headerStartTime = std::stod(row[6]);
|
sector->headerStartTime = std::stod(row[7]);
|
||||||
sector->headerEndTime = std::stod(row[7]);
|
sector->headerEndTime = std::stod(row[8]);
|
||||||
sector->dataStartTime = std::stod(row[8]);
|
sector->dataStartTime = std::stod(row[9]);
|
||||||
sector->dataEndTime = std::stod(row[9]);
|
sector->dataEndTime = std::stod(row[10]);
|
||||||
sector->status = status;
|
sector->status = status;
|
||||||
}
|
}
|
||||||
catch (const std::invalid_argument& e)
|
catch (const std::invalid_argument& e)
|
||||||
|
|||||||
@@ -237,7 +237,7 @@ void FluxViewerControl::OnPaint(wxPaintEvent&)
|
|||||||
wxDCClipper clipper(dc, rect);
|
wxDCClipper clipper(dc, rect);
|
||||||
|
|
||||||
auto text = fmt::format("c{}.h{}.s{} {}",
|
auto text = fmt::format("c{}.h{}.s{} {}",
|
||||||
sector->logicalTrack, sector->logicalSide, sector->physicalSector,
|
sector->logicalTrack, sector->logicalSide, sector->logicalSector,
|
||||||
Sector::statusToString(sector->status));
|
Sector::statusToString(sector->status));
|
||||||
auto size = dc.GetTextExtent(text);
|
auto size = dc.GetTextExtent(text);
|
||||||
dc.DrawText(text, { x+sp+BORDER, t1y - size.GetHeight()/2 });
|
dc.DrawText(text, { x+sp+BORDER, t1y - size.GetHeight()/2 });
|
||||||
@@ -438,7 +438,7 @@ void FluxViewerControl::DisplayDecodedData(std::shared_ptr<const Sector> sector)
|
|||||||
std::stringstream s;
|
std::stringstream s;
|
||||||
|
|
||||||
auto title = fmt::format("User data for c{}.h{}.s{}",
|
auto title = fmt::format("User data for c{}.h{}.s{}",
|
||||||
sector->logicalTrack, sector->logicalSide, sector->physicalSector);
|
sector->logicalTrack, sector->logicalSide, sector->logicalSector);
|
||||||
s << title << '\n';
|
s << title << '\n';
|
||||||
dumpSectorMetadata(s, sector);
|
dumpSectorMetadata(s, sector);
|
||||||
s << '\n';
|
s << '\n';
|
||||||
@@ -453,7 +453,7 @@ void FluxViewerControl::DisplayRawData(std::shared_ptr<const Sector> sector)
|
|||||||
std::stringstream s;
|
std::stringstream s;
|
||||||
|
|
||||||
auto title = fmt::format("Raw data for c{}.h{}.s{}",
|
auto title = fmt::format("Raw data for c{}.h{}.s{}",
|
||||||
sector->logicalTrack, sector->logicalSide, sector->physicalSector);
|
sector->logicalTrack, sector->logicalSide, sector->logicalSector);
|
||||||
s << title << '\n';
|
s << title << '\n';
|
||||||
dumpSectorMetadata(s, sector);
|
dumpSectorMetadata(s, sector);
|
||||||
s << fmt::format("Number of records: {}\n", sector->records.size());
|
s << fmt::format("Number of records: {}\n", sector->records.size());
|
||||||
|
|||||||
Reference in New Issue
Block a user