mirror of
				https://github.com/davidgiven/fluxengine.git
				synced 2025-10-24 11:11:02 -07:00 
			
		
		
		
	Distinguish between filesystem track ordering and image track ordering
(although currently only the filesystem ordering is used).
This commit is contained in:
		| @@ -46,7 +46,7 @@ class Flag | ||||
| { | ||||
| public: | ||||
|     Flag(const std::vector<std::string>& names, const std::string helptext); | ||||
|     virtual ~Flag(){}; | ||||
|     virtual ~Flag() {}; | ||||
|  | ||||
|     void checkInitialised() const | ||||
|     { | ||||
|   | ||||
| @@ -54,10 +54,12 @@ message LayoutProto | ||||
|         [ default = 0, (help) = "number of tracks in image" ]; | ||||
|     optional int32 sides = 3 | ||||
|         [ default = 0, (help) = "number of sides in image" ]; | ||||
|     optional Order order = 4 | ||||
|     optional Order filesystem_track_order = 4 | ||||
|         [ default = CHS, (help) = "the order of sectors in the filesystem" ]; | ||||
|     optional bool swap_sides = 5 | ||||
|     optional Order image_track_order = 5 | ||||
|         [ default = CHS, (help) = "the order of sectors in disk images" ]; | ||||
|     optional bool swap_sides = 6 | ||||
|         [ default = false, (help) = "the sides are inverted on this disk" ]; | ||||
|     optional FormatType format_type = 6 | ||||
|     optional FormatType format_type = 7 | ||||
|         [ default = FORMATTYPE_UNKNOWN, (help) = "Format type of image" ]; | ||||
| } | ||||
|   | ||||
| @@ -2,6 +2,7 @@ | ||||
| #include "lib/data/sector.h" | ||||
| #include "lib/data/image.h" | ||||
| #include "lib/data/layout.h" | ||||
| #include "lib/config/config.h" | ||||
|  | ||||
| Image::Image() {} | ||||
|  | ||||
| @@ -25,7 +26,8 @@ void Image::clear() | ||||
| void Image::createBlankImage() | ||||
| { | ||||
|     clear(); | ||||
|     for (const auto& trackAndHead : Layout::getTrackOrdering()) | ||||
|     for (const auto& trackAndHead : Layout::getTrackOrdering( | ||||
|              globalConfig()->layout().filesystem_track_order())) | ||||
|     { | ||||
|         unsigned track = trackAndHead.first; | ||||
|         unsigned side = trackAndHead.second; | ||||
|   | ||||
| @@ -108,21 +108,21 @@ void Layout::getBounds( | ||||
| } | ||||
|  | ||||
| std::vector<std::pair<int, int>> Layout::getTrackOrdering( | ||||
|     unsigned guessedTracks, unsigned guessedSides) | ||||
|     LayoutProto::Order ordering, unsigned guessedTracks, unsigned guessedSides) | ||||
| { | ||||
|     auto layout = globalConfig()->layout(); | ||||
|     int tracks = layout.has_tracks() ? layout.tracks() : guessedTracks; | ||||
|     int sides = layout.has_sides() ? layout.sides() : guessedSides; | ||||
|  | ||||
|     std::vector<std::pair<int, int>> ordering; | ||||
|     switch (layout.order()) | ||||
|     std::vector<std::pair<int, int>> trackList; | ||||
|     switch (ordering) | ||||
|     { | ||||
|         case LayoutProto::CHS: | ||||
|         { | ||||
|             for (int track = 0; track < tracks; track++) | ||||
|             { | ||||
|                 for (int side = 0; side < sides; side++) | ||||
|                     ordering.push_back(std::make_pair(track, side)); | ||||
|                     trackList.push_back(std::make_pair(track, side)); | ||||
|             } | ||||
|             break; | ||||
|         } | ||||
| @@ -132,16 +132,16 @@ std::vector<std::pair<int, int>> Layout::getTrackOrdering( | ||||
|             for (int side = 0; side < sides; side++) | ||||
|             { | ||||
|                 for (int track = 0; track < tracks; track++) | ||||
|                     ordering.push_back(std::make_pair(track, side)); | ||||
|                     trackList.push_back(std::make_pair(track, side)); | ||||
|             } | ||||
|             break; | ||||
|         } | ||||
|  | ||||
|         default: | ||||
|             error("LAYOUT: invalid track ordering"); | ||||
|             error("LAYOUT: invalid track trackList"); | ||||
|     } | ||||
|  | ||||
|     return ordering; | ||||
|     return trackList; | ||||
| } | ||||
|  | ||||
| std::vector<unsigned> Layout::expandSectorList( | ||||
|   | ||||
| @@ -2,6 +2,7 @@ | ||||
| #define LAYOUT_H | ||||
|  | ||||
| #include "lib/data/flux.h" | ||||
| #include "lib/config/layout.pb.h" | ||||
|  | ||||
| class SectorListProto; | ||||
| class TrackInfo; | ||||
| @@ -39,7 +40,9 @@ public: | ||||
|     /* Returns a series of <track, side> pairs representing the filesystem | ||||
|      * ordering of the disk, in logical numbers. */ | ||||
|     static std::vector<std::pair<int, int>> getTrackOrdering( | ||||
|         unsigned guessedTracks = 0, unsigned guessedSides = 0); | ||||
|         LayoutProto::Order ordering, | ||||
|         unsigned guessedTracks = 0, | ||||
|         unsigned guessedSides = 0); | ||||
|  | ||||
|     /* Returns the layout of a given track. */ | ||||
|     static std::shared_ptr<const TrackInfo> getLayoutOfTrack( | ||||
|   | ||||
| @@ -98,10 +98,10 @@ public: | ||||
|     } | ||||
|  | ||||
| protected: | ||||
|     virtual void beginTrack(){}; | ||||
|     virtual void beginTrack() {}; | ||||
|     virtual nanoseconds_t advanceToNextRecord() = 0; | ||||
|     virtual void decodeSectorRecord() = 0; | ||||
|     virtual void decodeDataRecord(){}; | ||||
|     virtual void decodeDataRecord() {}; | ||||
|  | ||||
|     const DecoderProto& _config; | ||||
|     std::shared_ptr<TrackDataFlux> _trackdata; | ||||
|   | ||||
| @@ -68,7 +68,7 @@ std::unique_ptr<Image> ImageReader::readMappedImage() | ||||
| { | ||||
|     auto rawImage = readImage(); | ||||
|  | ||||
|     if (!_config.filesystem_sector_order()) | ||||
|     if (!_config.filesystem_track_order()) | ||||
|         return rawImage; | ||||
|  | ||||
|     log("READER: converting from filesystem sector order to disk order"); | ||||
|   | ||||
| @@ -13,7 +13,7 @@ class ImageReader | ||||
| { | ||||
| public: | ||||
|     ImageReader(const ImageReaderProto& config); | ||||
|     virtual ~ImageReader(){}; | ||||
|     virtual ~ImageReader() {}; | ||||
|  | ||||
| public: | ||||
|     static std::unique_ptr<ImageReader> create(Config& config); | ||||
|   | ||||
| @@ -19,7 +19,7 @@ message NfdInputProto {} | ||||
| message ImageReaderProto | ||||
| { | ||||
|     optional string filename = 1 [ (help) = "filename of input sector image" ]; | ||||
|     optional bool filesystem_sector_order = 13 [ | ||||
|     optional bool filesystem_track_order = 13 [ | ||||
|         (help) = "read/write sector image in filesystem order", | ||||
|         default = false | ||||
|     ]; | ||||
|   | ||||
| @@ -32,7 +32,8 @@ public: | ||||
|                 "tracks, sides and trackdata fields in the layout?"); | ||||
|  | ||||
|         std::unique_ptr<Image> image(new Image); | ||||
|         for (const auto& p : Layout::getTrackOrdering()) | ||||
|         for (const auto& p : | ||||
|             Layout::getTrackOrdering(layout.filesystem_track_order())) | ||||
|         { | ||||
|             int track = p.first; | ||||
|             int side = p.second; | ||||
|   | ||||
| @@ -176,7 +176,7 @@ void ImageWriter::printMap(const Image& image) | ||||
|  | ||||
| void ImageWriter::writeMappedImage(const Image& image) | ||||
| { | ||||
|     if (_config.filesystem_sector_order()) | ||||
|     if (_config.filesystem_track_order()) | ||||
|     { | ||||
|         log("WRITER: converting from disk sector order to filesystem order"); | ||||
|  | ||||
|   | ||||
| @@ -9,7 +9,7 @@ class ImageWriter | ||||
| { | ||||
| public: | ||||
|     ImageWriter(const ImageWriterProto& config); | ||||
|     virtual ~ImageWriter(){}; | ||||
|     virtual ~ImageWriter() {}; | ||||
|  | ||||
| public: | ||||
|     static std::unique_ptr<ImageWriter> create(Config& config); | ||||
|   | ||||
| @@ -67,7 +67,7 @@ message ImdOutputProto | ||||
| message ImageWriterProto | ||||
| { | ||||
|     optional string filename = 1 [ (help) = "filename of output sector image" ]; | ||||
|     optional bool filesystem_sector_order = 10 [ | ||||
|     optional bool filesystem_track_order = 10 [ | ||||
|         (help) = "read/write sector image in filesystem order", | ||||
|         default = false | ||||
|     ]; | ||||
|   | ||||
| @@ -31,7 +31,8 @@ public: | ||||
|         if (!outputFile.is_open()) | ||||
|             error("cannot open output file"); | ||||
|  | ||||
|         for (const auto& p : Layout::getTrackOrdering(tracks, sides)) | ||||
|         for (const auto& p : Layout::getTrackOrdering( | ||||
|                  layout.filesystem_track_order(), tracks, sides)) | ||||
|         { | ||||
|             int track = p.first; | ||||
|             int side = p.second; | ||||
|   | ||||
| @@ -160,8 +160,8 @@ Filesystem::Filesystem(std::shared_ptr<SectorInterface> sectors): | ||||
|             "information"); | ||||
|  | ||||
|     unsigned block = 0; | ||||
|     for (const auto& p : | ||||
|         Layout::getTrackOrdering(layout.tracks(), layout.sides())) | ||||
|     for (const auto& p : Layout::getTrackOrdering( | ||||
|              layout.filesystem_track_order(), layout.tracks(), layout.sides())) | ||||
|     { | ||||
|         int track = p.first; | ||||
|         int side = p.second; | ||||
|   | ||||
| @@ -96,7 +96,8 @@ option_group { | ||||
| 				format_type: FORMATTYPE_80TRACK | ||||
| 				tracks: 80 | ||||
| 				sides: 2 | ||||
| 				order: HCS | ||||
| 				image_track_order: HCS | ||||
| 				filesystem_track_order: HCS | ||||
| 				layoutdata { | ||||
| 					sector_size: 256 | ||||
| 					physical { | ||||
| @@ -136,11 +137,11 @@ option_group { | ||||
| 			 | ||||
| 		config { | ||||
| 			image_reader { | ||||
| 				filesystem_sector_order: true | ||||
| 				filesystem_track_order: true | ||||
| 			} | ||||
| 			 | ||||
| 			image_writer { | ||||
| 				filesystem_sector_order: true | ||||
| 				filesystem_track_order: true | ||||
| 			} | ||||
| 		 | ||||
| 			filesystem { | ||||
| @@ -179,11 +180,11 @@ option_group { | ||||
| 			 | ||||
| 		config { | ||||
| 			image_reader { | ||||
| 				filesystem_sector_order: true | ||||
| 				filesystem_track_order: true | ||||
| 			} | ||||
| 			 | ||||
| 			image_writer { | ||||
| 				filesystem_sector_order: true | ||||
| 				filesystem_track_order: true | ||||
| 			} | ||||
| 		 | ||||
| 			filesystem { | ||||
| @@ -221,11 +222,11 @@ option_group { | ||||
| 			 | ||||
| 		config { | ||||
| 			image_reader { | ||||
| 				filesystem_sector_order: true | ||||
| 				filesystem_track_order: true | ||||
| 			} | ||||
| 			 | ||||
| 			image_writer { | ||||
| 				filesystem_sector_order: true | ||||
| 				filesystem_track_order: true | ||||
| 			} | ||||
| 		 | ||||
| 			filesystem { | ||||
|   | ||||
| @@ -124,7 +124,8 @@ option { | ||||
| 			layoutdata { | ||||
| 				sector_size: 275 | ||||
| 			} | ||||
| 			order: HCS | ||||
| 			filesystem_track_order: HCS | ||||
| 			image_track_order: HCS | ||||
| 		} | ||||
|  | ||||
| 		decoder { | ||||
|   | ||||
| @@ -38,7 +38,8 @@ layout { | ||||
| 	format_type: FORMATTYPE_80TRACK | ||||
| 	tracks: 80 | ||||
| 	sides: 2 | ||||
| 	order: HCS | ||||
| 	image_track_order: HCS | ||||
| 	filesystem_track_order: HCS | ||||
| 	swap_sides: true | ||||
| 	layoutdata { | ||||
| 		sector_size: 1024 | ||||
|   | ||||
		Reference in New Issue
	
	Block a user