Refactor disk layout information out of ImgReaderWriterProto into a new

top-level config paragraph.
This commit is contained in:
David Given
2022-08-25 22:51:26 +02:00
parent e733dc90d8
commit 1dd94a7d82
49 changed files with 883 additions and 1458 deletions

View File

@@ -92,6 +92,7 @@ all: binaries tests
PROTOS = \ PROTOS = \
arch/aeslanier/aeslanier.proto \ arch/aeslanier/aeslanier.proto \
arch/agat/agat.proto \
arch/amiga/amiga.proto \ arch/amiga/amiga.proto \
arch/apple2/apple2.proto \ arch/apple2/apple2.proto \
arch/brother/brother.proto \ arch/brother/brother.proto \
@@ -100,25 +101,25 @@ PROTOS = \
arch/fb100/fb100.proto \ arch/fb100/fb100.proto \
arch/ibm/ibm.proto \ arch/ibm/ibm.proto \
arch/macintosh/macintosh.proto \ arch/macintosh/macintosh.proto \
arch/micropolis/micropolis.proto \
arch/mx/mx.proto \ arch/mx/mx.proto \
arch/northstar/northstar.proto \
arch/tids990/tids990.proto \
arch/victor9k/victor9k.proto \ arch/victor9k/victor9k.proto \
arch/zilogmcz/zilogmcz.proto \ arch/zilogmcz/zilogmcz.proto \
arch/tids990/tids990.proto \ lib/common.proto \
arch/micropolis/micropolis.proto \ lib/config.proto \
arch/northstar/northstar.proto \
arch/agat/agat.proto \
lib/decoders/decoders.proto \ lib/decoders/decoders.proto \
lib/drive.proto \
lib/encoders/encoders.proto \ lib/encoders/encoders.proto \
lib/fl2.proto \
lib/fluxsink/fluxsink.proto \ lib/fluxsink/fluxsink.proto \
lib/fluxsource/fluxsource.proto \ lib/fluxsource/fluxsource.proto \
lib/imagereader/imagereader.proto \ lib/imagereader/imagereader.proto \
lib/imagewriter/imagewriter.proto \ lib/imagewriter/imagewriter.proto \
lib/usb/usb.proto \ lib/layout.proto \
lib/common.proto \
lib/fl2.proto \
lib/config.proto \
lib/mapper.proto \ lib/mapper.proto \
lib/drive.proto \ lib/usb/usb.proto \
tests/testproto.proto \ tests/testproto.proto \
PROTO_HDRS = $(patsubst %.proto, $(OBJDIR)/%.pb.h, $(PROTOS)) PROTO_HDRS = $(patsubst %.proto, $(OBJDIR)/%.pb.h, $(PROTOS))

View File

@@ -10,12 +10,15 @@ import "lib/usb/usb.proto";
import "lib/drive.proto"; import "lib/drive.proto";
import "lib/mapper.proto"; import "lib/mapper.proto";
import "lib/common.proto"; import "lib/common.proto";
import "lib/layout.proto";
// NEXT_TAG: 17 // NEXT_TAG: 18
message ConfigProto { message ConfigProto {
optional string comment = 8; optional string comment = 8;
optional bool is_extension = 13; optional bool is_extension = 13;
optional LayoutProto layout = 17;
optional ImageReaderProto image_reader = 12; optional ImageReaderProto image_reader = 12;
optional ImageWriterProto image_writer = 9; optional ImageWriterProto image_writer = 9;

View File

@@ -3,38 +3,6 @@ syntax = "proto2";
import "lib/common.proto"; import "lib/common.proto";
message ImgInputOutputProto { message ImgInputOutputProto {
enum Order {
UNDEFINED = 0;
CHS = 1;
HCS = 2;
}
message SectorsProto {
repeated int32 sector = 1 [(help) = "sector ID"];
}
message SectorRangeProto {
optional int32 start_sector = 1 [default=0, (help) = "first sector ID"];
optional int32 sector_count = 2 [default=1, (help) = "total number of sectors"];
}
message TrackdataProto {
optional int32 track = 1 [(help) = "if present, this format only applies to this track"];
optional int32 up_to_track = 5 [(help) = "if present, forms a range with track"];
optional int32 side = 2 [(help) = "if present, this format only applies to this side"];
optional int32 sector_size = 3 [default=512, (help) = "number of bytes per sector"];
oneof sectors_oneof {
SectorsProto sectors = 4 [(help) = "use a list of sector IDs"];
SectorRangeProto sector_range = 6 [(help) = "use a range of contiguous IDs"];
}
}
repeated TrackdataProto trackdata = 4 [(help) = "per-track format information (repeatable)"];
optional int32 tracks = 5 [default=0, (help) = "number of tracks in image"];
optional int32 sides = 6 [default=0, (help) = "number of sides in image"];
optional Order order = 9 [default=CHS, (help) = "the order in which to emit tracks in the image"];
} }
message DiskCopyInputProto {} message DiskCopyInputProto {}

View File

@@ -6,6 +6,8 @@
#include "logger.h" #include "logger.h"
#include "mapper.h" #include "mapper.h"
#include "lib/config.pb.h" #include "lib/config.pb.h"
#include "lib/layout.pb.h"
#include "lib/proto.h"
#include "imginputoutpututils.h" #include "imginputoutpututils.h"
#include "fmt/format.h" #include "fmt/format.h"
#include <algorithm> #include <algorithm>
@@ -24,12 +26,13 @@ public:
if (!inputFile.is_open()) if (!inputFile.is_open())
Error() << "cannot open input file"; Error() << "cannot open input file";
if (!_config.img().tracks() || !_config.img().sides()) auto layout = config.layout();
if (!layout.tracks() || !layout.sides())
Error() << "IMG: bad configuration; did you remember to set the " Error() << "IMG: bad configuration; did you remember to set the "
"tracks, sides and trackdata fields?"; "tracks, sides and trackdata fields in the layout?";
std::unique_ptr<Image> image(new Image); std::unique_ptr<Image> image(new Image);
for (const auto& p : getTrackOrdering(_config.img())) for (const auto& p : getTrackOrdering(layout))
{ {
int track = p.first; int track = p.first;
int side = p.second; int side = p.second;
@@ -37,10 +40,9 @@ public:
if (inputFile.eof()) if (inputFile.eof())
break; break;
ImgInputOutputProto::TrackdataProto trackdata; auto trackdata = getTrackFormat(layout, track, side);
getTrackFormat(_config.img(), trackdata, track, side);
for (int sectorId : getSectors(trackdata)) for (int sectorId : getTrackSectors(trackdata))
{ {
Bytes data(trackdata.sector_size()); Bytes data(trackdata.sector_size());
inputFile.read((char*)data.begin(), data.size()); inputFile.read((char*)data.begin(), data.size());
@@ -48,7 +50,8 @@ 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->logicalTrack = track;
sector->physicalTrack = Mapper::remapTrackLogicalToPhysical(track); sector->physicalTrack =
Mapper::remapTrackLogicalToPhysical(track);
sector->logicalSide = sector->physicalHead = side; sector->logicalSide = sector->physicalHead = side;
sector->logicalSector = sectorId; sector->logicalSector = sectorId;
sector->data = data; sector->data = data;
@@ -63,36 +66,6 @@ public:
inputFile.tellg() / 1024); inputFile.tellg() / 1024);
return image; return image;
} }
std::vector<unsigned> getSectors(
const ImgInputOutputProto::TrackdataProto& trackdata)
{
std::vector<unsigned> sectors;
switch (trackdata.sectors_oneof_case())
{
case ImgInputOutputProto::TrackdataProto::SectorsOneofCase::
kSectors:
{
for (int sectorId : trackdata.sectors().sector())
sectors.push_back(sectorId);
break;
}
case ImgInputOutputProto::TrackdataProto::SectorsOneofCase::
kSectorRange:
{
int sectorId = trackdata.sector_range().start_sector();
for (int i = 0; i < trackdata.sector_range().sector_count();
i++)
sectors.push_back(sectorId + i);
break;
}
default:
Error() << "no list of sectors provided in track format";
}
return sectors;
}
}; };
std::unique_ptr<ImageReader> ImageReader::createImgImageReader( std::unique_ptr<ImageReader> ImageReader::createImgImageReader(

View File

@@ -3,8 +3,10 @@
#include "sector.h" #include "sector.h"
#include "imagewriter/imagewriter.h" #include "imagewriter/imagewriter.h"
#include "image.h" #include "image.h"
#include "lib/proto.h"
#include "lib/config.pb.h" #include "lib/config.pb.h"
#include "imginputoutpututils.h" #include "imginputoutpututils.h"
#include "lib/layout.pb.h"
#include "fmt/format.h" #include "fmt/format.h"
#include "logger.h" #include "logger.h"
#include <algorithm> #include <algorithm>
@@ -14,85 +16,58 @@
class ImgImageWriter : public ImageWriter class ImgImageWriter : public ImageWriter
{ {
public: public:
ImgImageWriter(const ImageWriterProto& config): ImgImageWriter(const ImageWriterProto& config): ImageWriter(config) {}
ImageWriter(config)
{}
void writeImage(const Image& image) void writeImage(const Image& image)
{ {
const Geometry geometry = image.getGeometry(); const Geometry geometry = image.getGeometry();
int tracks = _config.img().has_tracks() ? _config.img().tracks() : geometry.numTracks; auto& layout = config.layout();
int sides = _config.img().has_sides() ? _config.img().sides() : geometry.numSides; int tracks = layout.has_tracks() ? layout.tracks() : geometry.numTracks;
int sides = layout.has_sides() ? layout.sides() : geometry.numSides;
std::ofstream outputFile(_config.filename(), std::ios::out | std::ios::binary); std::ofstream outputFile(
if (!outputFile.is_open()) _config.filename(), std::ios::out | std::ios::binary);
Error() << "cannot open output file"; if (!outputFile.is_open())
Error() << "cannot open output file";
for (const auto& p : getTrackOrdering(_config.img(), tracks, sides)) for (const auto& p : getTrackOrdering(layout, tracks, sides))
{ {
int track = p.first; int track = p.first;
int side = p.second; int side = p.second;
ImgInputOutputProto::TrackdataProto trackdata; auto trackdata = getTrackFormat(layout, track, side);
getTrackFormat(_config.img(), trackdata, track, side); auto sectors = getTrackSectors(trackdata, geometry.numSectors);
if (sectors.empty())
{
int maxSector = geometry.firstSector + geometry.numSectors - 1;
for (int i = geometry.firstSector; i <= maxSector; i++)
sectors.push_back(i);
}
auto sectors = getSectors(trackdata, geometry.numSectors); int sectorSize = trackdata.has_sector_size()
if (sectors.empty()) ? trackdata.sector_size()
{ : geometry.sectorSize;
int maxSector = geometry.firstSector + geometry.numSectors - 1;
for (int i=geometry.firstSector; i<=maxSector; i++)
sectors.push_back(i);
}
int sectorSize = trackdata.has_sector_size() ? trackdata.sector_size() : geometry.sectorSize; for (int sectorId : sectors)
{
const auto& sector = image.get(track, side, sectorId);
if (sector)
sector->data.slice(0, sectorSize).writeTo(outputFile);
else
outputFile.seekp(sectorSize, std::ios::cur);
}
}
for (int sectorId : sectors) Logger() << fmt::format("IMG: wrote {} tracks, {} sides, {} kB total",
{ tracks,
const auto& sector = image.get(track, side, sectorId); sides,
if (sector) outputFile.tellp() / 1024);
sector->data.slice(0, sectorSize).writeTo(outputFile); }
else
outputFile.seekp(sectorSize, std::ios::cur);
}
}
Logger() << fmt::format("IMG: wrote {} tracks, {} sides, {} kB total",
tracks, sides,
outputFile.tellp() / 1024);
}
std::vector<unsigned> getSectors(const ImgInputOutputProto::TrackdataProto& trackdata, unsigned numSectors)
{
std::vector<unsigned> sectors;
switch (trackdata.sectors_oneof_case())
{
case ImgInputOutputProto::TrackdataProto::SectorsOneofCase::kSectors:
{
for (int sectorId : trackdata.sectors().sector())
sectors.push_back(sectorId);
break;
}
case ImgInputOutputProto::TrackdataProto::SectorsOneofCase::kSectorRange:
{
int sectorId = trackdata.sector_range().start_sector();
if (trackdata.sector_range().has_sector_count())
numSectors = trackdata.sector_range().sector_count();
for (int i=0; i<numSectors; i++)
sectors.push_back(sectorId + i);
break;
}
default:
break;
}
return sectors;
}
}; };
std::unique_ptr<ImageWriter> ImageWriter::createImgImageWriter( std::unique_ptr<ImageWriter> ImageWriter::createImgImageWriter(
const ImageWriterProto& config) const ImageWriterProto& config)
{ {
return std::unique_ptr<ImageWriter>(new ImgImageWriter(config)); return std::unique_ptr<ImageWriter>(new ImgImageWriter(config));
} }

View File

@@ -1,57 +1,92 @@
#include "globals.h" #include "globals.h"
#include "lib/imagereader/imagereader.pb.h" #include "lib/imagereader/imagereader.pb.h"
#include "lib/layout.pb.h"
#include "imginputoutpututils.h" #include "imginputoutpututils.h"
std::vector<std::pair<int, int>> getTrackOrdering(const ImgInputOutputProto& config, std::vector<std::pair<int, int>> getTrackOrdering(
unsigned numTracks, unsigned numSides) const LayoutProto& config, unsigned numTracks, unsigned numSides)
{ {
int tracks = config.has_tracks() ? config.tracks() : numTracks; int tracks = config.has_tracks() ? config.tracks() : numTracks;
int sides = config.has_sides() ? config.sides() : numSides; int sides = config.has_sides() ? config.sides() : numSides;
std::vector<std::pair<int, int>> ordering; std::vector<std::pair<int, int>> ordering;
switch (config.order()) switch (config.order())
{ {
case ImgInputOutputProto::CHS: case LayoutProto::CHS:
{ {
for (int track = 0; track < tracks; track++) for (int track = 0; track < tracks; track++)
{ {
for (int side = 0; side < sides; side++) for (int side = 0; side < sides; side++)
ordering.push_back(std::make_pair(track, side)); ordering.push_back(std::make_pair(track, side));
} }
break; break;
} }
case ImgInputOutputProto::HCS:
{
for (int side = 0; side < sides; side++)
{
for (int track = 0; track < tracks; track++)
ordering.push_back(std::make_pair(track, side));
}
break;
}
default:
Error() << "IMG: invalid track ordering";
}
return ordering; case LayoutProto::HCS:
{
for (int side = 0; side < sides; side++)
{
for (int track = 0; track < tracks; track++)
ordering.push_back(std::make_pair(track, side));
}
break;
}
default:
Error() << "IMG: invalid track ordering";
}
return ordering;
} }
void getTrackFormat(const ImgInputOutputProto& config, LayoutProto::TrackdataProto getTrackFormat(const LayoutProto& config,
ImgInputOutputProto::TrackdataProto& trackdata, unsigned track, unsigned side) unsigned track,
unsigned side)
{ {
trackdata.Clear(); LayoutProto::TrackdataProto trackdata;
for (const ImgInputOutputProto::TrackdataProto& f : config.trackdata())
{
if (f.has_track() && f.has_up_to_track() && ((track < f.track()) || (track > f.up_to_track())))
continue;
if (f.has_track() && !f.has_up_to_track() && (track != f.track()))
continue;
if (f.has_side() && (f.side() != side))
continue;
trackdata.MergeFrom(f); for (const auto& f : config.trackdata())
} {
if (f.has_track() && f.has_up_to_track() &&
((track < f.track()) || (track > f.up_to_track())))
continue;
if (f.has_track() && !f.has_up_to_track() && (track != f.track()))
continue;
if (f.has_side() && (f.side() != side))
continue;
trackdata.MergeFrom(f);
}
return trackdata;
} }
std::vector<unsigned> getTrackSectors(
const LayoutProto::TrackdataProto& trackdata, unsigned numSectors)
{
std::vector<unsigned> sectors;
switch (trackdata.sectors_oneof_case())
{
case LayoutProto::TrackdataProto::SectorsOneofCase::kSectors:
{
for (int sectorId : trackdata.sectors().sector())
sectors.push_back(sectorId);
break;
}
case LayoutProto::TrackdataProto::SectorsOneofCase::
kSectorRange:
{
int sectorId = trackdata.sector_range().start_sector();
if (trackdata.sector_range().has_sector_count())
numSectors = trackdata.sector_range().sector_count();
for (int i = 0; i < numSectors; i++)
sectors.push_back(sectorId + i);
break;
}
default:
break;
}
return sectors;
}

View File

@@ -1,12 +1,16 @@
#ifndef IMGINPUTOUTPUTUTILS_H #ifndef IMGINPUTOUTPUTUTILS_H
#define IMGINPUTOUTPUTUTILS_H #define IMGINPUTOUTPUTUTILS_H
extern std::vector<std::pair<int, int>> getTrackOrdering(const ImgInputOutputProto& config, extern std::vector<std::pair<int, int>> getTrackOrdering(
unsigned numTracks = 0, unsigned numSides = 0); const LayoutProto& config,
unsigned numTracks = 0,
unsigned numSides = 0);
extern void getTrackFormat(const ImgInputOutputProto& config, extern LayoutProto::TrackdataProto getTrackFormat(const LayoutProto& config,
ImgInputOutputProto::TrackdataProto& trackdata, unsigned track, unsigned side); unsigned track,
unsigned side);
extern std::vector<unsigned> getTrackSectors(
const LayoutProto::TrackdataProto& trackdata, unsigned numSectors = 0);
#endif #endif

39
lib/layout.proto Normal file
View File

@@ -0,0 +1,39 @@
syntax = "proto2";
import "lib/common.proto";
message LayoutProto {
enum Order {
UNDEFINED = 0;
CHS = 1;
HCS = 2;
}
message SectorsProto {
repeated int32 sector = 1 [(help) = "sector ID"];
}
message SectorRangeProto {
optional int32 start_sector = 1 [default=0, (help) = "first sector ID"];
optional int32 sector_count = 2 [default=1, (help) = "total number of sectors"];
}
message TrackdataProto {
optional int32 track = 1 [(help) = "if present, this format only applies to this track"];
optional int32 up_to_track = 5 [(help) = "if present, forms a range with track"];
optional int32 side = 2 [(help) = "if present, this format only applies to this side"];
optional int32 sector_size = 3 [default=512, (help) = "number of bytes per sector"];
oneof sectors_oneof {
SectorsProto sectors = 4 [(help) = "use a list of sector IDs"];
SectorRangeProto sector_range = 6 [(help) = "use a range of contiguous IDs"];
}
}
repeated TrackdataProto trackdata = 1 [(help) = "per-track format information (repeatable)"];
optional int32 tracks = 2 [default=0, (help) = "number of tracks in image"];
optional int32 sides = 3 [default=0, (help) = "number of sides in image"];
optional Order order = 4 [default=CHS, (help) = "the order of sectors in the filesystem"];
}

View File

@@ -1,96 +1,7 @@
image_reader { image_reader {
img { img {}
tracks: 80
sides: 1
trackdata {
sector_size: 524
sector_range {
start_sector: 0
}
}
trackdata {
track: 0
up_to_track: 15
sector_range {
sector_count: 12
}
}
trackdata {
track: 16
up_to_track: 31
sector_range {
sector_count: 11
}
}
trackdata {
track: 32
up_to_track: 47
sector_range {
sector_count: 10
}
}
trackdata {
track: 48
up_to_track: 63
sector_range {
sector_count: 9
}
}
trackdata {
track: 64
up_to_track: 79
sector_range {
sector_count: 8
}
}
}
} }
image_writer { image_writer {
img { img {}
tracks: 80
sides: 1
trackdata {
sector_size: 524
sector_range {
start_sector: 0
}
}
trackdata {
track: 0
up_to_track: 15
sector_range {
sector_count: 12
}
}
trackdata {
track: 16
up_to_track: 31
sector_range {
sector_count: 11
}
}
trackdata {
track: 32
up_to_track: 47
sector_range {
sector_count: 10
}
}
trackdata {
track: 48
up_to_track: 63
sector_range {
sector_count: 9
}
}
trackdata {
track: 64
up_to_track: 79
sector_range {
sector_count: 8
}
}
}
} }

View File

@@ -1,97 +1,9 @@
image_reader { image_reader {
img { img {}
tracks: 80
sides: 2
trackdata {
sector_size: 524
sector_range {
start_sector: 0
}
}
trackdata {
track: 0
up_to_track: 15
sector_range {
sector_count: 12
}
}
trackdata {
track: 16
up_to_track: 31
sector_range {
sector_count: 11
}
}
trackdata {
track: 32
up_to_track: 47
sector_range {
sector_count: 10
}
}
trackdata {
track: 48
up_to_track: 63
sector_range {
sector_count: 9
}
}
trackdata {
track: 64
up_to_track: 79
sector_range {
sector_count: 8
}
}
}
} }
image_writer { image_writer {
img { img {}
tracks: 80
sides: 2
trackdata {
sector_size: 524
sector_range {
start_sector: 0
}
}
trackdata {
track: 0
up_to_track: 15
sector_range {
sector_count: 12
}
}
trackdata {
track: 16
up_to_track: 31
sector_range {
sector_count: 11
}
}
trackdata {
track: 32
up_to_track: 47
sector_range {
sector_count: 10
}
}
trackdata {
track: 48
up_to_track: 63
sector_range {
sector_count: 9
}
}
trackdata {
track: 64
up_to_track: 79
sector_range {
sector_count: 8
}
}
}
} }

View File

@@ -2,11 +2,13 @@ comment: 'Acorn ADFS L/D/E/F 640kB/800kB/1600kB 3.5" or 5.25" 80-track DS (ro)'
image_writer { image_writer {
filename: "acornadfs.img" filename: "acornadfs.img"
img { img {}
trackdata { }
sector_range {
start_sector: 0 layout {
} trackdata {
sector_range {
start_sector: 0
} }
} }
} }

View File

@@ -2,11 +2,13 @@ comment: 'Acorn DFS 100kB/200kB 3.5" or 5.25" 40- or 80-track SS (ro)'
image_writer { image_writer {
filename: "acorndfs.img" filename: "acorndfs.img"
img { img {}
trackdata { }
sector_range {
start_sector: 0 layout {
} trackdata {
sector_range {
start_sector: 0
} }
} }
} }

View File

@@ -2,11 +2,13 @@ comment: 'Agat 840kB 5.25" 80-track DS (ro)'
image_writer { image_writer {
filename: "agat.img" filename: "agat.img"
img { img {}
trackdata { }
sector_range {
start_sector: 0 layout {
} trackdata {
sector_range {
start_sector: 0
} }
} }
} }

View File

@@ -2,30 +2,22 @@ comment: 'Amiga 880kB 3.5" DSDD'
image_reader { image_reader {
filename: "amiga.adf" filename: "amiga.adf"
img { img {}
tracks: 80
sides: 2
trackdata {
sector_size: 512
sector_range {
start_sector: 0
sector_count: 11
}
}
}
} }
image_writer { image_writer {
filename: "amiga.adf" filename: "amiga.adf"
img { img {}
tracks: 80 }
sides: 2
trackdata { layout {
sector_size: 512 tracks: 80
sector_range { sides: 2
start_sector: 0 trackdata {
sector_count: 11 sector_size: 512
} sector_range {
start_sector: 0
sector_count: 11
} }
} }
} }

View File

@@ -2,11 +2,13 @@ comment: 'Ampro 400kB/800kB 5.25" 40/80 track SSDD/DSDD (ro)'
image_writer { image_writer {
filename: "ampro.img" filename: "ampro.img"
img { img {}
trackdata { }
sector_range {
start_sector: 17 layout {
} trackdata {
sector_range {
start_sector: 17
} }
} }
} }

View File

@@ -2,15 +2,17 @@ comment: 'Apple II 140kB DOS 3.3 5.25" 40 track SSSD'
image_reader { image_reader {
filename: "apple2.img" filename: "apple2.img"
img { img {}
tracks: 40 }
sides: 1
trackdata { layout {
sector_size: 256 tracks: 40
sector_range { sides: 1
start_sector: 0 trackdata {
sector_count: 16 sector_size: 256
} sector_range {
start_sector: 0
sector_count: 16
} }
} }
} }

View File

@@ -2,30 +2,22 @@ comment: 'Atari ST 360kB 3.5" 80-track 9-sector SSDD'
image_reader { image_reader {
filename: "atarist360.st" filename: "atarist360.st"
img { img {}
tracks: 80
sides: 1
trackdata {
sector_size: 512
sector_range {
start_sector: 1
sector_count: 9
}
}
}
} }
image_writer { image_writer {
filename: "atarist360.st" filename: "atarist360.st"
img { img {}
tracks: 80 }
sides: 1
trackdata { layout {
sector_size: 512 tracks: 80
sector_range { sides: 1
start_sector: 1 trackdata {
sector_count: 9 sector_size: 512
} sector_range {
start_sector: 1
sector_count: 9
} }
} }
} }

View File

@@ -2,30 +2,22 @@ comment: 'Atari ST 370kB 3.5" 82-track 9-sector SSDD'
image_reader { image_reader {
filename: "atarist370.st" filename: "atarist370.st"
img { img {}
tracks: 82
sides: 1
trackdata {
sector_size: 512
sector_range {
start_sector: 1
sector_count: 9
}
}
}
} }
image_writer { image_writer {
filename: "atarist370.st" filename: "atarist370.st"
img { img {}
tracks: 82 }
sides: 1
trackdata { layout {
sector_size: 512 tracks: 82
sector_range { sides: 1
start_sector: 1 trackdata {
sector_count: 9 sector_size: 512
} sector_range {
start_sector: 1
sector_count: 9
} }
} }
} }

View File

@@ -2,30 +2,22 @@ comment: 'Atari ST 400kB 3.5" 80-track 10-sector SSDD'
image_reader { image_reader {
filename: "atarist400.st" filename: "atarist400.st"
img { img {}
tracks: 80
sides: 1
trackdata {
sector_size: 512
sector_range {
start_sector: 1
sector_count: 10
}
}
}
} }
image_writer { image_writer {
filename: "atarist400.st" filename: "atarist400.st"
img { img {}
tracks: 80 }
sides: 1
trackdata { layout {
sector_size: 512 tracks: 80
sector_range { sides: 1
start_sector: 1 trackdata {
sector_count: 10 sector_size: 512
} sector_range {
start_sector: 1
sector_count: 10
} }
} }
} }

View File

@@ -2,30 +2,22 @@ comment: 'Atari ST 410kB 3.5" 82-track 10-sector SSDD'
image_reader { image_reader {
filename: "atarist410.st" filename: "atarist410.st"
img { img {}
tracks: 82
sides: 1
trackdata {
sector_size: 512
sector_range {
start_sector: 1
sector_count: 10
}
}
}
} }
image_writer { image_writer {
filename: "atarist410.st" filename: "atarist410.st"
img { img {}
tracks: 82 }
sides: 1
trackdata { layout {
sector_size: 512 tracks: 82
sector_range { sides: 1
start_sector: 1 trackdata {
sector_count: 10 sector_size: 512
} sector_range {
start_sector: 1
sector_count: 10
} }
} }
} }

View File

@@ -2,30 +2,22 @@ comment: 'Atari ST 720kB 3.5" 80-track 9-sector DSDD'
image_reader { image_reader {
filename: "atarist720.st" filename: "atarist720.st"
img { img {}
tracks: 80
sides: 2
trackdata {
sector_size: 512
sector_range {
start_sector: 1
sector_count: 9
}
}
}
} }
image_writer { image_writer {
filename: "atarist720.st" filename: "atarist720.st"
img { img {}
tracks: 80 }
sides: 2
trackdata { layout {
sector_size: 512 tracks: 80
sector_range { sides: 2
start_sector: 1 trackdata {
sector_count: 9 sector_size: 512
} sector_range {
start_sector: 1
sector_count: 9
} }
} }
} }

View File

@@ -2,30 +2,22 @@ comment: 'Atari ST 740kB 3.5" 82-track 9-sector DSDD'
image_reader { image_reader {
filename: "atarist740.st" filename: "atarist740.st"
img { img {}
tracks: 82
sides: 2
trackdata {
sector_size: 512
sector_range {
start_sector: 1
sector_count: 9
}
}
}
} }
image_writer { image_writer {
filename: "atarist740.st" filename: "atarist740.st"
img { img {}
tracks: 82 }
sides: 2
trackdata { layout {
sector_size: 512 tracks: 82
sector_range { sides: 2
start_sector: 1 trackdata {
sector_count: 9 sector_size: 512
} sector_range {
start_sector: 1
sector_count: 9
} }
} }
} }

View File

@@ -2,30 +2,22 @@ comment: 'Atari ST 800kB 3.5" 80-track 10-sector DSDD'
image_reader { image_reader {
filename: "atarist800.st" filename: "atarist800.st"
img { img {}
tracks: 80
sides: 2
trackdata {
sector_size: 512
sector_range {
start_sector: 1
sector_count: 10
}
}
}
} }
image_writer { image_writer {
filename: "atarist800.st" filename: "atarist800.st"
img { img {}
tracks: 80 }
sides: 2
trackdata { layout {
sector_size: 512 tracks: 80
sector_range { sides: 2
start_sector: 1 trackdata {
sector_count: 10 sector_size: 512
} sector_range {
start_sector: 1
sector_count: 10
} }
} }
} }

View File

@@ -2,30 +2,22 @@ comment: 'Atari ST 820kB 3.5" 82-track 10-sector DSDD'
image_reader { image_reader {
filename: "atarist820.st" filename: "atarist820.st"
img { img {}
tracks: 82
sides: 2
trackdata {
sector_size: 512
sector_range {
start_sector: 1
sector_count: 10
}
}
}
} }
image_writer { image_writer {
filename: "atarist820.st" filename: "atarist820.st"
img { img {}
tracks: 82 }
sides: 2
trackdata { layout {
sector_size: 512 tracks: 82
sector_range { sides: 2
start_sector: 1 trackdata {
sector_count: 10 sector_size: 512
} sector_range {
start_sector: 1
sector_count: 10
} }
} }
} }

View File

@@ -2,17 +2,7 @@ comment: 'BK 800kB 5.25"/3.5" 80-track 10-sector DSDD'
image_reader { image_reader {
filename: "bk800.img" filename: "bk800.img"
img { img {}
tracks: 80
sides: 2
trackdata {
sector_size: 512
sector_range {
start_sector: 1
sector_count: 10
}
}
}
} }
image_writer { image_writer {
@@ -20,6 +10,18 @@ image_writer {
img {} img {}
} }
layout {
tracks: 80
sides: 2
trackdata {
sector_size: 512
sector_range {
start_sector: 1
sector_count: 10
}
}
}
encoder { encoder {
ibm { ibm {
trackdata { trackdata {

View File

@@ -2,30 +2,22 @@ comment: 'Brother 120kB 3.5" 39-track SS GCR'
image_reader { image_reader {
filename: "brother120.img" filename: "brother120.img"
img { img {}
tracks: 39
sides: 1
trackdata {
sector_size: 256
sector_range {
start_sector: 0
sector_count: 12
}
}
}
} }
image_writer { image_writer {
filename: "brother120.img" filename: "brother120.img"
img { img {}
tracks: 39 }
sides: 1
trackdata { layout {
sector_size: 256 tracks: 39
sector_range { sides: 1
start_sector: 0 trackdata {
sector_count: 12 sector_size: 256
} sector_range {
start_sector: 0
sector_count: 12
} }
} }
} }

View File

@@ -2,30 +2,22 @@ comment: 'Brother 240kB 3.5" 78-track SS GCR'
image_reader { image_reader {
filename: "brother240.img" filename: "brother240.img"
img { img {}
tracks: 78
sides: 1
trackdata {
sector_size: 256
sector_range {
start_sector: 0
sector_count: 12
}
}
}
} }
image_writer { image_writer {
filename: "brother240.img" filename: "brother240.img"
img { img {}
tracks: 78 }
sides: 1
trackdata { layout {
sector_size: 256 tracks: 78
sector_range { sides: 1
start_sector: 0 trackdata {
sector_count: 12 sector_size: 256
} sector_range {
start_sector: 0
sector_count: 12
} }
} }
} }

View File

@@ -2,30 +2,22 @@ comment: 'Commodore 1581 800kB 3.5" DSDD'
image_reader { image_reader {
filename: "commodore1581.d81" filename: "commodore1581.d81"
img { img {}
tracks: 80
sides: 2
trackdata {
sector_size: 512
sector_range {
start_sector: 0
sector_count: 10
}
}
}
} }
image_writer { image_writer {
filename: "commodore1581.d81" filename: "commodore1581.d81"
img { img {}
tracks: 80 }
sides: 2
trackdata { layout {
sector_size: 512 tracks: 80
sector_range { sides: 2
start_sector: 0 trackdata {
sector_count: 10 sector_size: 512
} sector_range {
start_sector: 0
sector_count: 10
} }
} }
} }

View File

@@ -2,33 +2,35 @@ comment: 'VDS Eco1 1210kB 77-track mixed format DSHD (ro)'
image_writer { image_writer {
filename: "eco1.img" filename: "eco1.img"
img { img {}
tracks: 77 }
sides: 2
trackdata { layout {
sector_size: 512 tracks: 77
sector_range { sides: 2
start_sector: 1 trackdata {
sector_count: 16 sector_size: 512
} sector_range {
start_sector: 1
sector_count: 16
} }
trackdata { }
track: 0 trackdata {
side: 0 track: 0
sector_size: 128 side: 0
sector_range { sector_size: 128
start_sector: 1 sector_range {
sector_count: 26 start_sector: 1
} sector_count: 26
} }
trackdata { }
track: 0 trackdata {
side: 1 track: 0
sector_size: 256 side: 1
sector_range { sector_size: 256
start_sector: 1 sector_range {
sector_count: 26 start_sector: 1
} sector_count: 26
} }
} }
} }

View File

@@ -2,15 +2,17 @@ comment: 'Hewlett-Packard 9121 264kB 3.5" SSDD'
image_reader { image_reader {
filename: "hp9121.img" filename: "hp9121.img"
img { img {}
tracks: 66 }
sides: 1
trackdata { layout {
sector_size: 256 tracks: 66
sector_range { sides: 1
start_sector: 0 trackdata {
sector_count: 16 sector_size: 256
} sector_range {
start_sector: 0
sector_count: 16
} }
} }
} }

View File

@@ -7,15 +7,17 @@ drive {
image_reader { image_reader {
filename: "hplif770.img" filename: "hplif770.img"
img { img {}
tracks: 77 }
sides: 2
trackdata { layout {
sector_size: 1024 tracks: 77
sector_range { sides: 2
start_sector: 1 trackdata {
sector_count: 5 sector_size: 1024
} sector_range {
start_sector: 1
sector_count: 5
} }
} }
} }

View File

@@ -2,17 +2,7 @@ comment: 'PC 1200kB 5.25" 80-track 15-sector DSHD'
image_reader { image_reader {
filename: "ibm1200.img" filename: "ibm1200.img"
img { img {}
tracks: 80
sides: 2
trackdata {
sector_size: 512
sector_range {
start_sector: 1
sector_count: 15
}
}
}
} }
image_writer { image_writer {
@@ -20,6 +10,18 @@ image_writer {
img {} img {}
} }
layout {
tracks: 80
sides: 2
trackdata {
sector_size: 512
sector_range {
start_sector: 1
sector_count: 15
}
}
}
encoder { encoder {
ibm { ibm {
trackdata { trackdata {

View File

@@ -2,17 +2,7 @@ comment: 'Japanese PC 1232kB 5.25"/3.5" 77-track 8-sector DSHD'
image_reader { image_reader {
filename: "ibm1232.img" filename: "ibm1232.img"
img { img {}
tracks: 77
sides: 2
trackdata {
sector_size: 1024
sector_range {
start_sector: 1
sector_count: 8
}
}
}
} }
image_writer { image_writer {
@@ -20,6 +10,18 @@ image_writer {
img {} img {}
} }
layout {
tracks: 77
sides: 2
trackdata {
sector_size: 1024
sector_range {
start_sector: 1
sector_count: 8
}
}
}
encoder { encoder {
ibm { ibm {
trackdata { trackdata {

View File

@@ -2,17 +2,7 @@ comment: 'PC 1440kB 3.5" 80-track 18-sector DSHD'
image_reader { image_reader {
filename: "ibm1440.img" filename: "ibm1440.img"
img { img {}
tracks: 80
sides: 2
trackdata {
sector_size: 512
sector_range {
start_sector: 1
sector_count: 18
}
}
}
} }
image_writer { image_writer {
@@ -20,6 +10,18 @@ image_writer {
img {} img {}
} }
layout {
tracks: 80
sides: 2
trackdata {
sector_size: 512
sector_range {
start_sector: 1
sector_count: 18
}
}
}
encoder { encoder {
ibm { ibm {
trackdata { trackdata {

View File

@@ -2,17 +2,7 @@ comment: 'PC 180kB 5.25" 40-track 9-sector SSDD'
image_reader { image_reader {
filename: "ibm180.img" filename: "ibm180.img"
img { img {}
tracks: 40
sides: 1
trackdata {
sector_size: 512
sector_range {
start_sector: 1
sector_count: 9
}
}
}
} }
image_writer { image_writer {
@@ -20,6 +10,18 @@ image_writer {
img {} img {}
} }
layout {
tracks: 40
sides: 1
trackdata {
sector_size: 512
sector_range {
start_sector: 1
sector_count: 9
}
}
}
encoder { encoder {
ibm { ibm {
trackdata { trackdata {

View File

@@ -2,17 +2,7 @@ comment: 'PC 360kB 5.25" 40-track 9-sector DSDD'
image_reader { image_reader {
filename: "ibm360.img" filename: "ibm360.img"
img { img {}
tracks: 40
sides: 2
trackdata {
sector_size: 512
sector_range {
start_sector: 1
sector_count: 9
}
}
}
} }
image_writer { image_writer {
@@ -20,6 +10,18 @@ image_writer {
img {} img {}
} }
layout {
tracks: 40
sides: 2
trackdata {
sector_size: 512
sector_range {
start_sector: 1
sector_count: 9
}
}
}
encoder { encoder {
ibm { ibm {
trackdata { trackdata {

View File

@@ -2,17 +2,7 @@ comment: 'PC 720kB 5.25"/3.5" 80-track 9-sector DSDD'
image_reader { image_reader {
filename: "ibm720.img" filename: "ibm720.img"
img { img {}
tracks: 80
sides: 2
trackdata {
sector_size: 512
sector_range {
start_sector: 1
sector_count: 9
}
}
}
} }
image_writer { image_writer {
@@ -20,6 +10,18 @@ image_writer {
img {} img {}
} }
layout {
tracks: 80
sides: 2
trackdata {
sector_size: 512
sector_range {
start_sector: 1
sector_count: 9
}
}
}
encoder { encoder {
ibm { ibm {
trackdata { trackdata {

View File

@@ -2,98 +2,56 @@ comment: 'Macintosh 400kB 3.5" SSDD GCR'
image_reader { image_reader {
filename: "mac400.dsk" filename: "mac400.dsk"
img { img {}
tracks: 80
sides: 1
trackdata {
sector_size: 512
sector_range {
start_sector: 0
}
}
trackdata {
track: 0
up_to_track: 15
sector_range {
sector_count: 12
}
}
trackdata {
track: 16
up_to_track: 31
sector_range {
sector_count: 11
}
}
trackdata {
track: 32
up_to_track: 47
sector_range {
sector_count: 10
}
}
trackdata {
track: 48
up_to_track: 63
sector_range {
sector_count: 9
}
}
trackdata {
track: 64
up_to_track: 79
sector_range {
sector_count: 8
}
}
}
} }
image_writer { image_writer {
filename: "mac400.dsk" filename: "mac400.dsk"
img { img {}
tracks: 80 }
sides: 1
trackdata { layout {
sector_size: 512 tracks: 80
sector_range { sides: 1
start_sector: 0 trackdata {
} sector_size: 512
sector_range {
start_sector: 0
} }
trackdata { }
track: 0 trackdata {
up_to_track: 15 track: 0
sector_range { up_to_track: 15
sector_count: 12 sector_range {
} sector_count: 12
} }
trackdata { }
track: 16 trackdata {
up_to_track: 31 track: 16
sector_range { up_to_track: 31
sector_count: 11 sector_range {
} sector_count: 11
} }
trackdata { }
track: 32 trackdata {
up_to_track: 47 track: 32
sector_range { up_to_track: 47
sector_count: 10 sector_range {
} sector_count: 10
} }
trackdata { }
track: 48 trackdata {
up_to_track: 63 track: 48
sector_range { up_to_track: 63
sector_count: 9 sector_range {
} sector_count: 9
} }
trackdata { }
track: 64 trackdata {
up_to_track: 79 track: 64
sector_range { up_to_track: 79
sector_count: 8 sector_range {
} sector_count: 8
} }
} }
} }

View File

@@ -2,103 +2,60 @@ comment: 'Macintosh 800kB 3.5" DSDD GCR'
image_reader { image_reader {
filename: "mac800.dsk" filename: "mac800.dsk"
img { img {}
tracks: 80
sides: 2
trackdata {
sector_size: 512
sector_range {
start_sector: 0
}
}
trackdata {
track: 0
up_to_track: 15
sector_range {
sector_count: 12
}
}
trackdata {
track: 16
up_to_track: 31
sector_range {
sector_count: 11
}
}
trackdata {
track: 32
up_to_track: 47
sector_range {
sector_count: 10
}
}
trackdata {
track: 48
up_to_track: 63
sector_range {
sector_count: 9
}
}
trackdata {
track: 64
up_to_track: 79
sector_range {
sector_count: 8
}
}
}
} }
image_writer { image_writer {
filename: "mac800.dsk" filename: "mac800.dsk"
img { img {}
tracks: 80 }
sides: 2
trackdata { layout {
sector_size: 512 tracks: 80
sector_range { sides: 2
start_sector: 0 trackdata {
} sector_size: 512
sector_range {
start_sector: 0
} }
trackdata { }
track: 0 trackdata {
up_to_track: 15 track: 0
sector_range { up_to_track: 15
sector_count: 12 sector_range {
} sector_count: 12
} }
trackdata { }
track: 16 trackdata {
up_to_track: 31 track: 16
sector_range { up_to_track: 31
sector_count: 11 sector_range {
} sector_count: 11
} }
trackdata { }
track: 32 trackdata {
up_to_track: 47 track: 32
sector_range { up_to_track: 47
sector_count: 10 sector_range {
} sector_count: 10
} }
trackdata { }
track: 48 trackdata {
up_to_track: 63 track: 48
sector_range { up_to_track: 63
sector_count: 9 sector_range {
} sector_count: 9
} }
trackdata { }
track: 64 trackdata {
up_to_track: 79 track: 64
sector_range { up_to_track: 79
sector_count: 8 sector_range {
} sector_count: 8
} }
} }
} }
encoder { encoder {
macintosh {} macintosh {}
} }

View File

@@ -6,29 +6,21 @@ drive {
image_reader { image_reader {
filename: "micropolis.img" filename: "micropolis.img"
img { img {}
tracks: 35
sides: 1
trackdata {
sector_size: 256
sector_range {
start_sector: 0
sector_count: 16
}
}
}
} }
image_writer { image_writer {
filename: "micropolis.img" filename: "micropolis.img"
img { img {}
tracks: 35 }
trackdata {
sector_size: 256 layout {
sector_range { tracks: 35
start_sector: 0 trackdata {
sector_count: 16 sector_size: 256
} sector_range {
start_sector: 0
sector_count: 16
} }
} }
} }

View File

@@ -6,29 +6,21 @@ drive {
image_reader { image_reader {
filename: "micropolis.img" filename: "micropolis.img"
img { img {}
tracks: 35
sides: 2
trackdata {
sector_size: 256
sector_range {
start_sector: 0
sector_count: 16
}
}
}
} }
image_writer { image_writer {
filename: "micropolis.img" filename: "micropolis.img"
img { img {}
tracks: 35 }
trackdata {
sector_size: 256 layout {
sector_range { tracks: 35
start_sector: 0 trackdata {
sector_count: 16 sector_size: 256
} sector_range {
start_sector: 0
sector_count: 16
} }
} }
} }

View File

@@ -6,29 +6,21 @@ drive {
image_reader { image_reader {
filename: "micropolis.img" filename: "micropolis.img"
img { img {}
tracks: 77
sides: 1
trackdata {
sector_size: 256
sector_range {
start_sector: 0
sector_count: 16
}
}
}
} }
image_writer { image_writer {
filename: "micropolis.img" filename: "micropolis.img"
img { img {}
tracks: 77 }
trackdata {
sector_size: 256 layout {
sector_range { tracks: 77
start_sector: 0 trackdata {
sector_count: 16 sector_size: 256
} sector_range {
start_sector: 0
sector_count: 16
} }
} }
} }

View File

@@ -6,29 +6,21 @@ drive {
image_reader { image_reader {
filename: "micropolis.img" filename: "micropolis.img"
img { img {}
tracks: 77
sides: 2
trackdata {
sector_size: 256
sector_range {
start_sector: 0
sector_count: 16
}
}
}
} }
image_writer { image_writer {
filename: "micropolis.img" filename: "micropolis.img"
img { img {}
tracks: 77 }
trackdata {
sector_size: 256 layout {
sector_range { tracks: 77
start_sector: 0 trackdata {
sector_count: 16 sector_size: 256
} sector_range {
start_sector: 0
sector_count: 16
} }
} }
} }

View File

@@ -6,48 +6,31 @@ drive {
image_reader { image_reader {
filename: "n88basic.img" filename: "n88basic.img"
img { img {}
tracks: 77
sides: 2
trackdata {
sector_size: 256
sector_range {
start_sector: 1
sector_count: 26
}
}
trackdata {
track: 0
side: 0
sector_size: 128
sector_range {
start_sector: 1
sector_count: 26
}
}
}
} }
image_writer { image_writer {
filename: "n88basic.img" filename: "n88basic.img"
img { img {}
tracks: 77 }
sides: 2
trackdata { layout {
sector_size: 256 tracks: 77
sector_range { sides: 2
start_sector: 1 trackdata {
sector_count: 26 sector_size: 256
} sector_range {
start_sector: 1
sector_count: 26
} }
trackdata { }
track: 0 trackdata {
side: 0 track: 0
sector_size: 128 side: 0
sector_range { sector_size: 128
start_sector: 1 sector_range {
sector_count: 26 start_sector: 1
} sector_count: 26
} }
} }
} }

View File

@@ -6,17 +6,7 @@ drive {
image_reader { image_reader {
filename: "rx50.img" filename: "rx50.img"
img { img {}
tracks: 80
sides: 1
trackdata {
sector_size: 512
sector_range {
start_sector: 1
sector_count: 10
}
}
}
} }
image_writer { image_writer {
@@ -24,6 +14,18 @@ image_writer {
img {} img {}
} }
layout {
tracks: 80
sides: 1
trackdata {
sector_size: 512
sector_range {
start_sector: 1
sector_count: 10
}
}
}
encoder { encoder {
ibm { ibm {
trackdata { trackdata {

View File

@@ -2,17 +2,7 @@ comment: 'Texas Instruments DS990 1126kB 8" DSSD'
image_reader { image_reader {
filename: "tids990.img" filename: "tids990.img"
img { img {}
tracks: 77
sides: 2
trackdata {
sector_size: 288
sector_range {
start_sector: 0
sector_count: 26
}
}
}
} }
image_writer { image_writer {
@@ -20,6 +10,18 @@ image_writer {
img {} img {}
} }
layout {
tracks: 77
sides: 2
trackdata {
sector_size: 288
sector_range {
start_sector: 0
sector_count: 26
}
}
}
encoder { encoder {
tids990 {} tids990 {}
} }

View File

@@ -3,19 +3,17 @@ is_extension: true
image_reader { image_reader {
filename: "micropolis.vgi" filename: "micropolis.vgi"
img { img {}
trackdata {
sector_size: 275
}
}
} }
image_writer { image_writer {
filename: "micropolis.vgi" filename: "micropolis.vgi"
img { img {}
trackdata { }
sector_size: 275
} layout {
trackdata {
sector_size: 275
} }
} }

View File

@@ -2,284 +2,149 @@ comment: 'Victor 9000 / Sirius One 1224kB DSHD GCR variable sector)'
image_reader { image_reader {
filename: "victor9k_ds.img" filename: "victor9k_ds.img"
img { img {}
tracks: 80
sides: 2
trackdata {
sector_size: 512
sector_range {
start_sector: 0
}
}
trackdata {
side: 0
track: 0
up_to_track: 3
sector_range {
sector_count: 19
}
}
trackdata {
side: 0
track: 4
up_to_track: 15
sector_range {
sector_count: 18
}
}
trackdata {
side: 0
track: 16
up_to_track: 26
sector_range {
sector_count: 17
}
}
trackdata {
side: 0
track: 27
up_to_track: 37
sector_range {
sector_count: 16
}
}
trackdata {
side: 0
track: 38
up_to_track: 47
sector_range {
sector_count: 15
}
}
trackdata {
side: 0
track: 48
up_to_track: 59
sector_range {
sector_count: 14
}
}
trackdata {
side: 0
track: 60
up_to_track: 70
sector_range {
sector_count: 13
}
}
trackdata {
side: 0
track: 71
up_to_track: 79
sector_range {
sector_count: 12
}
}
trackdata {
side: 1
track: 0
up_to_track: 7
sector_range {
sector_count: 18
}
}
trackdata {
side: 1
track: 8
up_to_track: 18
sector_range {
sector_count: 17
}
}
trackdata {
side: 1
track: 19
up_to_track: 29
sector_range {
sector_count: 16
}
}
trackdata {
side: 1
track: 30
up_to_track: 39
sector_range {
sector_count: 15
}
}
trackdata {
side: 1
track: 40
up_to_track: 51
sector_range {
sector_count: 14
}
}
trackdata {
side: 1
track: 52
up_to_track: 62
sector_range {
sector_count: 13
}
}
trackdata {
side: 1
track: 63
up_to_track: 74
sector_range {
sector_count: 12
}
}
trackdata {
side: 1
track: 75
up_to_track: 79
sector_range {
sector_count: 11
}
}
}
} }
image_writer { image_writer {
filename: "victor9k_ds.img" filename: "victor9k_ds.img"
img { img {}
tracks: 80 }
sides: 2
trackdata { layout {
sector_size: 512 tracks: 80
sector_range { sides: 2
start_sector: 0 trackdata {
} sector_size: 512
sector_range {
start_sector: 0
} }
trackdata { }
side: 0 trackdata {
track: 0 side: 0
up_to_track: 3 track: 0
sector_range { up_to_track: 3
sector_count: 19 sector_range {
} sector_count: 19
} }
trackdata { }
side: 0 trackdata {
track: 4 side: 0
up_to_track: 15 track: 4
sector_range { up_to_track: 15
sector_count: 18 sector_range {
} sector_count: 18
} }
trackdata { }
side: 0 trackdata {
track: 16 side: 0
up_to_track: 26 track: 16
sector_range { up_to_track: 26
sector_count: 17 sector_range {
} sector_count: 17
} }
trackdata { }
side: 0 trackdata {
track: 27 side: 0
up_to_track: 37 track: 27
sector_range { up_to_track: 37
sector_count: 16 sector_range {
} sector_count: 16
} }
trackdata { }
side: 0 trackdata {
track: 38 side: 0
up_to_track: 47 track: 38
sector_range { up_to_track: 47
sector_count: 15 sector_range {
} sector_count: 15
} }
trackdata { }
side: 0 trackdata {
track: 48 side: 0
up_to_track: 59 track: 48
sector_range { up_to_track: 59
sector_count: 14 sector_range {
} sector_count: 14
} }
trackdata { }
side: 0 trackdata {
track: 60 side: 0
up_to_track: 70 track: 60
sector_range { up_to_track: 70
sector_count: 13 sector_range {
} sector_count: 13
} }
trackdata { }
side: 0 trackdata {
track: 71 side: 0
up_to_track: 79 track: 71
sector_range { up_to_track: 79
sector_count: 12 sector_range {
} sector_count: 12
} }
trackdata { }
side: 1 trackdata {
track: 0 side: 1
up_to_track: 7 track: 0
sector_range { up_to_track: 7
sector_count: 18 sector_range {
} sector_count: 18
} }
trackdata { }
side: 1 trackdata {
track: 8 side: 1
up_to_track: 18 track: 8
sector_range { up_to_track: 18
sector_count: 17 sector_range {
} sector_count: 17
} }
trackdata { }
side: 1 trackdata {
track: 19 side: 1
up_to_track: 29 track: 19
sector_range { up_to_track: 29
sector_count: 16 sector_range {
} sector_count: 16
} }
trackdata { }
side: 1 trackdata {
track: 30 side: 1
up_to_track: 39 track: 30
sector_range { up_to_track: 39
sector_count: 15 sector_range {
} sector_count: 15
} }
trackdata { }
side: 1 trackdata {
track: 40 side: 1
up_to_track: 51 track: 40
sector_range { up_to_track: 51
sector_count: 14 sector_range {
} sector_count: 14
} }
trackdata { }
side: 1 trackdata {
track: 52 side: 1
up_to_track: 62 track: 52
sector_range { up_to_track: 62
sector_count: 13 sector_range {
} sector_count: 13
} }
trackdata { }
side: 1 trackdata {
track: 63 side: 1
up_to_track: 74 track: 63
sector_range { up_to_track: 74
sector_count: 12 sector_range {
} sector_count: 12
} }
trackdata { }
side: 1 trackdata {
track: 75 side: 1
up_to_track: 79 track: 75
sector_range { up_to_track: 79
sector_count: 11 sector_range {
} sector_count: 11
} }
} }
} }

View File

@@ -2,140 +2,77 @@ comment: 'Victor 9000 / Sirius One 612kB SSHD GCR variable sector)'
image_reader { image_reader {
filename: "victor9k.img" filename: "victor9k.img"
img { img {}
tracks: 80
sides: 1
trackdata {
sector_size: 512
sector_range {
start_sector: 0
}
}
trackdata {
track: 0
up_to_track: 3
sector_range {
sector_count: 19
}
}
trackdata {
track: 4
up_to_track: 15
sector_range {
sector_count: 18
}
}
trackdata {
track: 16
up_to_track: 26
sector_range {
sector_count: 17
}
}
trackdata {
track: 27
up_to_track: 37
sector_range {
sector_count: 16
}
}
trackdata {
track: 38
up_to_track: 47
sector_range {
sector_count: 15
}
}
trackdata {
track: 48
up_to_track: 59
sector_range {
sector_count: 14
}
}
trackdata {
track: 60
up_to_track: 70
sector_range {
sector_count: 13
}
}
trackdata {
track: 71
up_to_track: 79
sector_range {
sector_count: 12
}
}
}
} }
image_writer { image_writer {
filename: "victor9k.img" filename: "victor9k.img"
img { img {}
tracks: 80 }
sides: 1
trackdata { layout {
sector_size: 512 tracks: 80
sector_range { sides: 1
start_sector: 0 trackdata {
} sector_size: 512
sector_range {
start_sector: 0
} }
trackdata { }
track: 0 trackdata {
up_to_track: 3 track: 0
sector_range { up_to_track: 3
sector_count: 19 sector_range {
} sector_count: 19
} }
trackdata { }
track: 4 trackdata {
up_to_track: 15 track: 4
sector_range { up_to_track: 15
sector_count: 18 sector_range {
} sector_count: 18
} }
trackdata { }
track: 16 trackdata {
up_to_track: 26 track: 16
sector_range { up_to_track: 26
sector_count: 17 sector_range {
} sector_count: 17
} }
trackdata { }
track: 27 trackdata {
up_to_track: 37 track: 27
sector_range { up_to_track: 37
sector_count: 16 sector_range {
} sector_count: 16
} }
trackdata { }
track: 38 trackdata {
up_to_track: 47 track: 38
sector_range { up_to_track: 47
sector_count: 15 sector_range {
} sector_count: 15
} }
trackdata { }
track: 48 trackdata {
up_to_track: 59 track: 48
sector_range { up_to_track: 59
sector_count: 14 sector_range {
} sector_count: 14
} }
trackdata { }
track: 60 trackdata {
up_to_track: 70 track: 60
sector_range { up_to_track: 70
sector_count: 13 sector_range {
} sector_count: 13
} }
trackdata { }
track: 71 trackdata {
up_to_track: 79 track: 71
sector_range { up_to_track: 79
sector_count: 12 sector_range {
} sector_count: 12
} }
} }
} }