mirror of
https://github.com/davidgiven/fluxengine.git
synced 2025-10-24 11:11:02 -07:00
Merge from trunk.
This commit is contained in:
2
.github/workflows/ccpp.yml
vendored
2
.github/workflows/ccpp.yml
vendored
@@ -10,7 +10,7 @@ jobs:
|
||||
with:
|
||||
fetch-depth: 1
|
||||
- name: apt
|
||||
run: sudo apt install libusb-1.0-0-dev libsqlite3-dev ninja-build
|
||||
run: sudo apt update && sudo apt install libusb-1.0-0-dev libsqlite3-dev ninja-build
|
||||
- name: make
|
||||
run: make
|
||||
|
||||
|
||||
@@ -177,7 +177,8 @@ directory.
|
||||
These all take an optional `--write-flux` option which will cause the raw
|
||||
flux to be written to the specified file as well as the normal decode.
|
||||
There are various `--dump` options for showing raw data during the decode
|
||||
process.
|
||||
process, and `--write-csv` will write a copious CSV report of the state of
|
||||
every sector in the file in machine-readable format.
|
||||
|
||||
- `fluxengine write *`: writes various formats of disk. Again, see the
|
||||
per-format documentation [in the index page](../README.md).
|
||||
|
||||
25
lib/image.cc
25
lib/image.cc
@@ -1,25 +0,0 @@
|
||||
#include "globals.h"
|
||||
#include "image.h"
|
||||
#include "flags.h"
|
||||
#include "dataspec.h"
|
||||
#include "sector.h"
|
||||
#include "sectorset.h"
|
||||
#include "imagereader/imagereader.h"
|
||||
#include "imagewriter/imagewriter.h"
|
||||
#include "fmt/format.h"
|
||||
#include <algorithm>
|
||||
#include <iostream>
|
||||
#include <fstream>
|
||||
|
||||
SectorSet readSectorsFromFile(const ImageSpec& spec)
|
||||
{
|
||||
return ImageReader::create(spec)->readImage();
|
||||
}
|
||||
|
||||
void writeSectorsToFile(const SectorSet& sectors, const ImageSpec& spec)
|
||||
{
|
||||
std::unique_ptr<ImageWriter> writer(ImageWriter::create(sectors, spec));
|
||||
writer->adjustGeometry();
|
||||
writer->printMap();
|
||||
writer->writeImage();
|
||||
}
|
||||
14
lib/image.h
14
lib/image.h
@@ -1,14 +0,0 @@
|
||||
#ifndef IMAGE_H
|
||||
#define IMAGE_H
|
||||
|
||||
class SectorSet;
|
||||
class ImageSpec;
|
||||
|
||||
extern SectorSet readSectorsFromFile(
|
||||
const ImageSpec& filename);
|
||||
|
||||
extern void writeSectorsToFile(
|
||||
const SectorSet& sectors,
|
||||
const ImageSpec& filename);
|
||||
|
||||
#endif
|
||||
@@ -1,5 +1,4 @@
|
||||
#include "globals.h"
|
||||
#include "image.h"
|
||||
#include "flags.h"
|
||||
#include "dataspec.h"
|
||||
#include "sector.h"
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
#include "globals.h"
|
||||
#include "image.h"
|
||||
#include "flags.h"
|
||||
#include "dataspec.h"
|
||||
#include "sector.h"
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
#include "globals.h"
|
||||
#include "image.h"
|
||||
#include "flags.h"
|
||||
#include "dataspec.h"
|
||||
#include "sector.h"
|
||||
|
||||
@@ -1,11 +1,12 @@
|
||||
#include "globals.h"
|
||||
#include "image.h"
|
||||
#include "flags.h"
|
||||
#include "dataspec.h"
|
||||
#include "sector.h"
|
||||
#include "sectorset.h"
|
||||
#include "imagewriter/imagewriter.h"
|
||||
#include "fmt/format.h"
|
||||
#include <iostream>
|
||||
#include <fstream>
|
||||
|
||||
std::map<std::string, ImageWriter::Constructor> ImageWriter::formats =
|
||||
{
|
||||
@@ -63,6 +64,56 @@ void ImageWriter::adjustGeometry()
|
||||
}
|
||||
}
|
||||
|
||||
void ImageWriter::writeCsv(const std::string& filename)
|
||||
{
|
||||
std::ofstream f(filename, std::ios::out);
|
||||
if (!f.is_open())
|
||||
Error() << "cannot open CSV report file";
|
||||
|
||||
f << "\"Physical track\","
|
||||
"\"Physical side\","
|
||||
"\"Logical track\","
|
||||
"\"Logical side\","
|
||||
"\"Logical sector\","
|
||||
"\"Clock (ns)\","
|
||||
"\"Header start (ns)\","
|
||||
"\"Header end (ns)\","
|
||||
"\"Data start (ns)\","
|
||||
"\"Data end (ns)\","
|
||||
"\"Raw data address (bytes)\","
|
||||
"\"User payload length (bytes)\","
|
||||
"\"Status\""
|
||||
"\n";
|
||||
|
||||
for (int track = 0; track < spec.cylinders; track++)
|
||||
{
|
||||
for (int head = 0; head < spec.heads; head++)
|
||||
{
|
||||
for (int sectorId = 0; sectorId < spec.sectors; sectorId++)
|
||||
{
|
||||
f << fmt::format("{},{},", track, head);
|
||||
const auto& sector = sectors.get(track, head, sectorId);
|
||||
if (!sector)
|
||||
f << fmt::format(",,{},,,,,,,,MISSING\n", sectorId);
|
||||
else
|
||||
f << fmt::format("{},{},{},{},{},{},{},{},{},{},{}\n",
|
||||
sector->logicalTrack,
|
||||
sector->logicalSide,
|
||||
sector->logicalSector,
|
||||
sector->clock,
|
||||
sector->headerStartTime,
|
||||
sector->headerEndTime,
|
||||
sector->dataStartTime,
|
||||
sector->dataEndTime,
|
||||
sector->position.bytes,
|
||||
sector->data.size(),
|
||||
Sector::statusToString(sector->status)
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void ImageWriter::printMap()
|
||||
{
|
||||
int badSectors = 0;
|
||||
|
||||
@@ -35,6 +35,7 @@ private:
|
||||
public:
|
||||
virtual void adjustGeometry();
|
||||
void printMap();
|
||||
void writeCsv(const std::string& filename);
|
||||
virtual void writeImage() = 0;
|
||||
|
||||
protected:
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
#include "globals.h"
|
||||
#include "image.h"
|
||||
#include "flags.h"
|
||||
#include "dataspec.h"
|
||||
#include "sector.h"
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
#include "globals.h"
|
||||
#include "image.h"
|
||||
#include "flags.h"
|
||||
#include "dataspec.h"
|
||||
#include "sector.h"
|
||||
|
||||
@@ -12,12 +12,13 @@
|
||||
#include "sectorset.h"
|
||||
#include "visualiser.h"
|
||||
#include "record.h"
|
||||
#include "image.h"
|
||||
#include "bytes.h"
|
||||
#include "decoders/rawbits.h"
|
||||
#include "track.h"
|
||||
#include "imagewriter/imagewriter.h"
|
||||
#include "fmt/format.h"
|
||||
#include <iostream>
|
||||
#include <fstream>
|
||||
|
||||
FlagGroup readerFlags
|
||||
{
|
||||
@@ -68,6 +69,11 @@ static SettableFlag highDensityFlag(
|
||||
{ "--high-density", "--hd" },
|
||||
"set the drive to high density mode");
|
||||
|
||||
static StringFlag csvFile(
|
||||
{ "--write-csv" },
|
||||
"write a CSV report of the disk state",
|
||||
"");
|
||||
|
||||
static std::unique_ptr<FluxSink> outputFluxSink;
|
||||
|
||||
void setReaderDefaultSource(const std::string& source)
|
||||
@@ -85,6 +91,16 @@ void setReaderRevolutions(int revolutions)
|
||||
setHardwareFluxSourceRevolutions(revolutions);
|
||||
}
|
||||
|
||||
static void writeSectorsToFile(const SectorSet& sectors, const ImageSpec& spec)
|
||||
{
|
||||
std::unique_ptr<ImageWriter> writer(ImageWriter::create(sectors, spec));
|
||||
writer->adjustGeometry();
|
||||
writer->printMap();
|
||||
if (!csvFile.get().empty())
|
||||
writer->writeCsv(csvFile.get());
|
||||
writer->writeImage();
|
||||
}
|
||||
|
||||
void Track::readFluxmap()
|
||||
{
|
||||
std::cout << fmt::format("{0:>3}.{1}: ", physicalTrack, physicalSide) << std::flush;
|
||||
@@ -280,7 +296,7 @@ void readDiskCommand(AbstractDecoder& decoder)
|
||||
|
||||
if (!visualise.get().empty())
|
||||
visualiseSectorsToFile(allSectors, visualise.get());
|
||||
|
||||
|
||||
writeSectorsToFile(allSectors, outputSpec);
|
||||
if (failures)
|
||||
std::cerr << "Warning: some sectors could not be decoded." << std::endl;
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
#include "globals.h"
|
||||
#include "image.h"
|
||||
#include "sector.h"
|
||||
#include "sectorset.h"
|
||||
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
#define _USE_MATH_DEFINES
|
||||
#include "globals.h"
|
||||
#include "image.h"
|
||||
#include "sector.h"
|
||||
#include "sectorset.h"
|
||||
#include "visualiser.h"
|
||||
|
||||
@@ -9,9 +9,9 @@
|
||||
#include "encoders/encoders.h"
|
||||
#include "fluxsource/fluxsource.h"
|
||||
#include "fluxsink/fluxsink.h"
|
||||
#include "imagereader/imagereader.h"
|
||||
#include "fmt/format.h"
|
||||
#include "record.h"
|
||||
#include "image.h"
|
||||
#include "sector.h"
|
||||
#include "sectorset.h"
|
||||
|
||||
@@ -43,6 +43,11 @@ void setWriterDefaultInput(const std::string& input)
|
||||
::input.set(input);
|
||||
}
|
||||
|
||||
static SectorSet readSectorsFromFile(const ImageSpec& spec)
|
||||
{
|
||||
return ImageReader::create(spec)->readImage();
|
||||
}
|
||||
|
||||
void writeTracks(
|
||||
const std::function<std::unique_ptr<Fluxmap>(int track, int side)> producer)
|
||||
{
|
||||
|
||||
@@ -192,7 +192,6 @@ buildlibrary libbackend.a \
|
||||
lib/fluxsource/streamfluxsource.cc \
|
||||
lib/globals.cc \
|
||||
lib/hexdump.cc \
|
||||
lib/image.cc \
|
||||
lib/ldbs.cc \
|
||||
lib/reader.cc \
|
||||
lib/sector.cc \
|
||||
|
||||
@@ -4,7 +4,6 @@
|
||||
#include "fluxmap.h"
|
||||
#include "decoders/fluxmapreader.h"
|
||||
#include "decoders/decoders.h"
|
||||
#include "image.h"
|
||||
#include "protocol.h"
|
||||
#include "decoders/rawbits.h"
|
||||
#include "record.h"
|
||||
|
||||
@@ -3,7 +3,6 @@
|
||||
#include "reader.h"
|
||||
#include "fluxmap.h"
|
||||
#include "decoders/decoders.h"
|
||||
#include "image.h"
|
||||
#include "sector.h"
|
||||
#include "sectorset.h"
|
||||
#include "record.h"
|
||||
|
||||
@@ -3,7 +3,6 @@
|
||||
#include "reader.h"
|
||||
#include "fluxmap.h"
|
||||
#include "decoders/decoders.h"
|
||||
#include "image.h"
|
||||
#include "sector.h"
|
||||
#include "sectorset.h"
|
||||
#include "record.h"
|
||||
|
||||
@@ -6,7 +6,6 @@
|
||||
#include "amiga/amiga.h"
|
||||
#include "sector.h"
|
||||
#include "sectorset.h"
|
||||
#include "image.h"
|
||||
#include "record.h"
|
||||
#include "fmt/format.h"
|
||||
#include <fstream>
|
||||
|
||||
@@ -3,7 +3,6 @@
|
||||
#include "reader.h"
|
||||
#include "fluxmap.h"
|
||||
#include "decoders/decoders.h"
|
||||
#include "image.h"
|
||||
#include "sector.h"
|
||||
#include "sectorset.h"
|
||||
#include "record.h"
|
||||
|
||||
@@ -6,7 +6,6 @@
|
||||
#include "apple2/apple2.h"
|
||||
#include "sector.h"
|
||||
#include "sectorset.h"
|
||||
#include "image.h"
|
||||
#include "record.h"
|
||||
#include "fmt/format.h"
|
||||
#include <fstream>
|
||||
|
||||
@@ -7,7 +7,6 @@
|
||||
#include "brother/brother.h"
|
||||
#include "sector.h"
|
||||
#include "sectorset.h"
|
||||
#include "image.h"
|
||||
#include "record.h"
|
||||
#include "fmt/format.h"
|
||||
#include <fstream>
|
||||
|
||||
@@ -6,7 +6,6 @@
|
||||
#include "c64/c64.h"
|
||||
#include "sector.h"
|
||||
#include "sectorset.h"
|
||||
#include "image.h"
|
||||
#include "record.h"
|
||||
#include "fmt/format.h"
|
||||
#include <fstream>
|
||||
|
||||
@@ -3,7 +3,6 @@
|
||||
#include "reader.h"
|
||||
#include "fluxmap.h"
|
||||
#include "decoders/decoders.h"
|
||||
#include "image.h"
|
||||
#include "sector.h"
|
||||
#include "sectorset.h"
|
||||
#include "record.h"
|
||||
|
||||
@@ -6,7 +6,6 @@
|
||||
#include "f85/f85.h"
|
||||
#include "sector.h"
|
||||
#include "sectorset.h"
|
||||
#include "image.h"
|
||||
#include "record.h"
|
||||
#include "fmt/format.h"
|
||||
#include <fstream>
|
||||
|
||||
@@ -3,7 +3,6 @@
|
||||
#include "reader.h"
|
||||
#include "fluxmap.h"
|
||||
#include "decoders/decoders.h"
|
||||
#include "image.h"
|
||||
#include "sector.h"
|
||||
#include "sectorset.h"
|
||||
#include "record.h"
|
||||
|
||||
@@ -3,7 +3,6 @@
|
||||
#include "reader.h"
|
||||
#include "fluxmap.h"
|
||||
#include "decoders/decoders.h"
|
||||
#include "image.h"
|
||||
#include "sector.h"
|
||||
#include "sectorset.h"
|
||||
#include "record.h"
|
||||
|
||||
@@ -6,7 +6,6 @@
|
||||
#include "macintosh/macintosh.h"
|
||||
#include "sector.h"
|
||||
#include "sectorset.h"
|
||||
#include "image.h"
|
||||
#include "record.h"
|
||||
#include "fmt/format.h"
|
||||
#include <fstream>
|
||||
|
||||
@@ -4,7 +4,6 @@
|
||||
#include "fluxmap.h"
|
||||
#include "decoders/decoders.h"
|
||||
#include "mx/mx.h"
|
||||
#include "image.h"
|
||||
#include "sector.h"
|
||||
#include "sectorset.h"
|
||||
#include "record.h"
|
||||
|
||||
@@ -6,7 +6,6 @@
|
||||
#include "victor9k/victor9k.h"
|
||||
#include "sector.h"
|
||||
#include "sectorset.h"
|
||||
#include "image.h"
|
||||
#include "record.h"
|
||||
#include "fmt/format.h"
|
||||
#include <fstream>
|
||||
|
||||
@@ -3,7 +3,6 @@
|
||||
#include "reader.h"
|
||||
#include "fluxmap.h"
|
||||
#include "decoders/decoders.h"
|
||||
#include "image.h"
|
||||
#include "sector.h"
|
||||
#include "sectorset.h"
|
||||
#include "record.h"
|
||||
|
||||
@@ -4,7 +4,6 @@
|
||||
#include "amiga/amiga.h"
|
||||
#include "writer.h"
|
||||
#include "fmt/format.h"
|
||||
#include "image.h"
|
||||
#include <fstream>
|
||||
|
||||
static FlagGroup flags { &writerFlags, &amigaEncoderFlags };
|
||||
|
||||
@@ -5,7 +5,6 @@
|
||||
#include "brother/brother.h"
|
||||
#include "writer.h"
|
||||
#include "fmt/format.h"
|
||||
#include "image.h"
|
||||
#include <fstream>
|
||||
|
||||
static FlagGroup flags { &writerFlags, &brotherEncoderFlags };
|
||||
|
||||
@@ -5,7 +5,6 @@
|
||||
#include "ibm/ibm.h"
|
||||
#include "writer.h"
|
||||
#include "fmt/format.h"
|
||||
#include "image.h"
|
||||
#include <fstream>
|
||||
|
||||
static FlagGroup flags { &writerFlags };
|
||||
|
||||
Reference in New Issue
Block a user