Skip to content

Commit 01a7afd

Browse files
committed
Merge from master.
2 parents 3a42911 + dfff5d7 commit 01a7afd

33 files changed

+216
-125
lines changed

lib/algorithms/readerwriter.cc

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -347,7 +347,7 @@ ReadResult readGroup(FluxSourceIteratorHolder& fluxSourceIteratorHolder,
347347
ReadResult result = BAD_AND_CAN_NOT_RETRY;
348348

349349
for (unsigned offset = 0; offset < trackInfo->groupSize;
350-
offset += Layout::getHeadWidth())
350+
offset += Layout::getHeadWidth())
351351
{
352352
log(BeginReadOperationLogMessage{
353353
trackInfo->physicalTrack + offset, trackInfo->physicalSide});
@@ -404,7 +404,7 @@ void writeTracks(FluxSink& fluxSink,
404404
for (;;)
405405
{
406406
for (int offset = 0; offset < trackInfo->groupSize;
407-
offset += Layout::getHeadWidth())
407+
offset += Layout::getHeadWidth())
408408
{
409409
unsigned physicalTrack = trackInfo->physicalTrack + offset;
410410

@@ -734,7 +734,7 @@ void readDiskCommand(
734734
if (globalConfig()->decoder().has_write_csv_to())
735735
writer.writeCsv(
736736
*diskflux->image, globalConfig()->decoder().write_csv_to());
737-
writer.writeMappedImage(*diskflux->image);
737+
writer.writeImage(*diskflux->image);
738738
}
739739

740740
void rawReadDiskCommand(FluxSource& fluxsource, FluxSink& fluxsink)

lib/config/flags.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ class Flag
4646
{
4747
public:
4848
Flag(const std::vector<std::string>& names, const std::string helptext);
49-
virtual ~Flag(){};
49+
virtual ~Flag() {};
5050

5151
void checkInitialised() const
5252
{

lib/config/layout.proto

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,9 @@ message LayoutProto
2222
enum Order
2323
{
2424
UNDEFINED = 0;
25-
CHS = 1;
26-
HCS = 2;
25+
CHS = 1; // sort by cylinder, then head, then sector -- libdsk 'alt'
26+
HCS = 2; // sort by head, then cylinder, then sector -- libdsk 'outout'
27+
HCS_RH1 = 3; // as HCS, except the cylinder count for head 1 is reversed -- libdsk 'outback'
2728
}
2829

2930
message LayoutdataProto
@@ -54,10 +55,12 @@ message LayoutProto
5455
[ default = 0, (help) = "number of tracks in image" ];
5556
optional int32 sides = 3
5657
[ default = 0, (help) = "number of sides in image" ];
57-
optional Order order = 4
58+
optional Order filesystem_track_order = 4
5859
[ default = CHS, (help) = "the order of sectors in the filesystem" ];
59-
optional bool swap_sides = 5
60+
optional Order image_track_order = 5
61+
[ default = CHS, (help) = "the order of sectors in disk images" ];
62+
optional bool swap_sides = 6
6063
[ default = false, (help) = "the sides are inverted on this disk" ];
61-
optional FormatType format_type = 6
64+
optional FormatType format_type = 7
6265
[ default = FORMATTYPE_UNKNOWN, (help) = "Format type of image" ];
6366
}

lib/data/image.cc

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
#include "lib/data/sector.h"
33
#include "lib/data/image.h"
44
#include "lib/data/layout.h"
5+
#include "lib/config/config.h"
56

67
Image::Image() {}
78

@@ -25,7 +26,8 @@ void Image::clear()
2526
void Image::createBlankImage()
2627
{
2728
clear();
28-
for (const auto& trackAndHead : Layout::getTrackOrdering())
29+
for (const auto& trackAndHead : Layout::getTrackOrdering(
30+
globalConfig()->layout().filesystem_track_order()))
2931
{
3032
unsigned track = trackAndHead.first;
3133
unsigned side = trackAndHead.second;

lib/data/layout.cc

Lines changed: 21 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -108,21 +108,21 @@ void Layout::getBounds(
108108
}
109109

110110
std::vector<std::pair<int, int>> Layout::getTrackOrdering(
111-
unsigned guessedTracks, unsigned guessedSides)
111+
LayoutProto::Order ordering, unsigned guessedTracks, unsigned guessedSides)
112112
{
113113
auto layout = globalConfig()->layout();
114114
int tracks = layout.has_tracks() ? layout.tracks() : guessedTracks;
115115
int sides = layout.has_sides() ? layout.sides() : guessedSides;
116116

117-
std::vector<std::pair<int, int>> ordering;
118-
switch (layout.order())
117+
std::vector<std::pair<int, int>> trackList;
118+
switch (ordering)
119119
{
120120
case LayoutProto::CHS:
121121
{
122122
for (int track = 0; track < tracks; track++)
123123
{
124124
for (int side = 0; side < sides; side++)
125-
ordering.push_back(std::make_pair(track, side));
125+
trackList.push_back(std::make_pair(track, side));
126126
}
127127
break;
128128
}
@@ -132,16 +132,30 @@ std::vector<std::pair<int, int>> Layout::getTrackOrdering(
132132
for (int side = 0; side < sides; side++)
133133
{
134134
for (int track = 0; track < tracks; track++)
135-
ordering.push_back(std::make_pair(track, side));
135+
trackList.push_back(std::make_pair(track, side));
136+
}
137+
break;
138+
}
139+
140+
case LayoutProto::HCS_RH1:
141+
{
142+
for (int side = 0; side < sides; side++)
143+
{
144+
if (side == 0)
145+
for (int track = 0; track < tracks; track++)
146+
trackList.push_back(std::make_pair(track, side));
147+
if (side == 1)
148+
for (int track = tracks; track >= 0; track--)
149+
trackList.push_back(std::make_pair(track - 1, side));
136150
}
137151
break;
138152
}
139153

140154
default:
141-
error("LAYOUT: invalid track ordering");
155+
error("LAYOUT: invalid track trackList");
142156
}
143157

144-
return ordering;
158+
return trackList;
145159
}
146160

147161
std::vector<unsigned> Layout::expandSectorList(

lib/data/layout.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
#define LAYOUT_H
33

44
#include "lib/data/flux.h"
5+
#include "lib/config/layout.pb.h"
56

67
class SectorListProto;
78
class TrackInfo;
@@ -39,7 +40,9 @@ class Layout
3940
/* Returns a series of <track, side> pairs representing the filesystem
4041
* ordering of the disk, in logical numbers. */
4142
static std::vector<std::pair<int, int>> getTrackOrdering(
42-
unsigned guessedTracks = 0, unsigned guessedSides = 0);
43+
LayoutProto::Order ordering,
44+
unsigned guessedTracks = 0,
45+
unsigned guessedSides = 0);
4346

4447
/* Returns the layout of a given track. */
4548
static std::shared_ptr<const TrackInfo> getLayoutOfTrack(

lib/decoders/decoders.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -98,10 +98,10 @@ class Decoder
9898
}
9999

100100
protected:
101-
virtual void beginTrack(){};
101+
virtual void beginTrack() {};
102102
virtual nanoseconds_t advanceToNextRecord() = 0;
103103
virtual void decodeSectorRecord() = 0;
104-
virtual void decodeDataRecord(){};
104+
virtual void decodeDataRecord() {};
105105

106106
const DecoderProto& _config;
107107
std::shared_ptr<TrackDataFlux> _trackdata;

lib/imagereader/d88imagereader.cc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ class D88ImageReader : public ImageReader
9393
auto physical = layoutdata->mutable_physical();
9494

9595
for (int sectorInTrack = 0; sectorInTrack < currentSectorsInTrack;
96-
sectorInTrack++)
96+
sectorInTrack++)
9797
{
9898
Bytes sectorHeader(0x10);
9999
inputFile.read(

lib/imagereader/imagereader.cc

Lines changed: 0 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -63,26 +63,3 @@ std::unique_ptr<ImageReader> ImageReader::create(const ImageReaderProto& config)
6363
}
6464

6565
ImageReader::ImageReader(const ImageReaderProto& config): _config(config) {}
66-
67-
std::unique_ptr<Image> ImageReader::readMappedImage()
68-
{
69-
auto rawImage = readImage();
70-
71-
if (!_config.filesystem_sector_order())
72-
return rawImage;
73-
74-
log("READER: converting from filesystem sector order to disk order");
75-
std::set<std::shared_ptr<const Sector>> sectors;
76-
for (const auto& e : *rawImage)
77-
{
78-
auto trackLayout =
79-
Layout::getLayoutOfTrack(e->logicalTrack, e->logicalSide);
80-
auto newSector = std::make_shared<Sector>();
81-
*newSector = *e;
82-
newSector->logicalSector =
83-
trackLayout->filesystemToNaturalSectorMap.at(e->logicalSector);
84-
sectors.insert(newSector);
85-
}
86-
87-
return std::make_unique<Image>(sectors);
88-
}

lib/imagereader/imagereader.h

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ class ImageReader
1313
{
1414
public:
1515
ImageReader(const ImageReaderProto& config);
16-
virtual ~ImageReader(){};
16+
virtual ~ImageReader() {};
1717

1818
public:
1919
static std::unique_ptr<ImageReader> create(Config& config);
@@ -51,15 +51,10 @@ class ImageReader
5151
return _extraConfig;
5252
}
5353

54-
/* Directly reads the image. */
54+
/* Reads the image. */
5555

5656
virtual std::unique_ptr<Image> readImage() = 0;
5757

58-
/* Reads the image, and then applies any optional mapping to go from
59-
* filesystem ordering to disk ordering. */
60-
61-
std::unique_ptr<Image> readMappedImage();
62-
6358
protected:
6459
const ImageReaderProto& _config;
6560
ConfigProto _extraConfig;

0 commit comments

Comments
 (0)