Eliminate the IBM trackdata sector layout stuff in favour of the layout{}

clause.
This commit is contained in:
David Given
2022-08-27 23:23:28 +02:00
parent c16ab349b1
commit 3256b4f627
64 changed files with 245 additions and 651 deletions

View File

@@ -82,6 +82,7 @@ public:
config.set_tpi(48);
}
auto layout = config.mutable_layout();
std::unique_ptr<Image> image(new Image);
for (int track = 0; track < trackTableSize / 4; track++)
{
@@ -99,7 +100,9 @@ public:
auto trackdata = ibm->add_trackdata();
trackdata->set_target_clock_period_us(1e3 / clockRate);
trackdata->set_target_rotational_period_ms(167);
auto sectors = trackdata->mutable_sectors();
auto layoutdata = layout->add_layoutdata();
auto physical = layoutdata->mutable_physical();
for (int sectorInTrack = 0; sectorInTrack < currentSectorsInTrack;
sectorInTrack++)
@@ -149,9 +152,13 @@ public:
trackSectorSize = sectorSize;
// this is the first sector we've read, use it settings for
// per-track data
layoutdata->set_track(track);
layoutdata->set_side(head);
layoutdata->set_sector_size(sectorSize);
trackdata->set_track(track);
trackdata->set_head(head);
trackdata->set_sector_size(sectorSize);
trackdata->set_use_fm(fm);
if (fm)
{
@@ -196,7 +203,7 @@ public:
sector->logicalSector = sectorId;
sector->data = data;
sectors->add_sector(sectorId);
physical->add_sector(sectorId);
}
if (mediaFlag != 0x20)
@@ -213,6 +220,9 @@ public:
geometry.numTracks,
geometry.numSides);
layout->set_tracks(geometry.numTracks);
layout->set_sides(geometry.numSides);
if (!config.has_heads())
{
auto* heads = config.mutable_heads();

View File

@@ -97,13 +97,16 @@ public:
trackCount++;
}
auto layout = config.mutable_layout();
if (config.encoder().format_case() ==
EncoderProto::FormatCase::FORMAT_NOT_SET)
{
auto ibm = config.mutable_encoder()->mutable_ibm();
auto trackdata = ibm->add_trackdata();
trackdata->set_target_clock_period_us(2);
auto sectors = trackdata->mutable_sectors();
auto layoutdata = layout->add_layoutdata();
auto physical = layoutdata->mutable_physical();
switch (mediaByte)
{
case 0x00:
@@ -111,24 +114,24 @@ public:
"(1024 byte sectors)";
config.mutable_tracks()->set_end(76);
trackdata->set_target_rotational_period_ms(167);
trackdata->set_sector_size(1024);
layoutdata->set_sector_size(1024);
for (int i = 0; i < 9; i++)
sectors->add_sector(i);
physical->add_sector(i);
break;
case 0x02:
Logger() << "DIM: automatically setting format to 1.2MB "
"(512 byte sectors)";
trackdata->set_target_rotational_period_ms(167);
trackdata->set_sector_size(512);
layoutdata->set_sector_size(512);
for (int i = 0; i < 15; i++)
sectors->add_sector(i);
physical->add_sector(i);
break;
case 0x03:
Logger() << "DIM: automatically setting format to 1.44MB";
trackdata->set_target_rotational_period_ms(200);
trackdata->set_sector_size(512);
layoutdata->set_sector_size(512);
for (int i = 0; i < 18; i++)
sectors->add_sector(i);
physical->add_sector(i);
break;
default:
Error() << fmt::format(
@@ -148,6 +151,9 @@ public:
geometry.numSides,
((int)inputFile.tellg() - 256) / 1024);
layout->set_tracks(geometry.numTracks);
layout->set_sides(geometry.numSides);
if (!config.has_heads())
{
auto* heads = config.mutable_heads();

View File

@@ -77,13 +77,16 @@ public:
trackCount++;
}
auto layout = config.mutable_layout();
if (config.encoder().format_case() ==
EncoderProto::FormatCase::FORMAT_NOT_SET)
{
auto ibm = config.mutable_encoder()->mutable_ibm();
auto trackdata = ibm->add_trackdata();
trackdata->set_target_clock_period_us(2);
auto sectors = trackdata->mutable_sectors();
auto layoutdata = layout->add_layoutdata();
auto physical = layoutdata->mutable_physical();
switch (fddType)
{
case 0x90:
@@ -91,17 +94,19 @@ public:
"(1024 byte sectors)";
config.mutable_tracks()->set_end(76);
trackdata->set_target_rotational_period_ms(167);
trackdata->set_sector_size(1024);
layoutdata->set_sector_size(1024);
for (int i = 0; i < 9; i++)
sectors->add_sector(i);
physical->add_sector(i);
break;
case 0x30:
Logger() << "FDI: automatically setting format to 1.44MB";
trackdata->set_target_rotational_period_ms(200);
trackdata->set_sector_size(512);
layoutdata->set_sector_size(512);
for (int i = 0; i < 18; i++)
sectors->add_sector(i);
physical->add_sector(i);
break;
default:
Error() << fmt::format(
"FDI: unknown fdd type 0x{:2x}, could not determine "
@@ -118,6 +123,9 @@ public:
geometry.numSides,
((int)inputFile.tellg() - headerSize) / 1024);
layout->set_tracks(geometry.numTracks);
layout->set_sides(geometry.numSides);
if (!config.has_heads())
{
auto* heads = config.mutable_heads();

View File

@@ -142,6 +142,8 @@ public:
TrackHeader header = {0, 0, 0, 0, 0};
TrackHeader previousheader = {0, 0, 0, 0, 0};
auto layout = config.mutable_layout();
unsigned n = 0;
unsigned headerPtr = 0;
unsigned Modulation_Speed = 0;
@@ -229,8 +231,10 @@ public:
}
auto ibm = config.mutable_encoder()->mutable_ibm();
auto trackdata = ibm->add_trackdata();
auto layoutdata = layout->add_layoutdata();
trackdata->set_target_clock_period_us(1e3 / Modulation_Speed);
trackdata->set_target_rotational_period_ms(200);
if (trackSectorSize < 0)
@@ -240,15 +244,17 @@ public:
// per-track data
trackdata->set_track(header.track);
trackdata->set_head(header.Head);
trackdata->set_sector_size(sectorSize);
trackdata->set_use_fm(fm);
layoutdata->set_track(header.track);
layoutdata->set_side(header.Head);
layoutdata->set_sector_size(sectorSize);
}
else if (trackSectorSize != sectorSize)
{
Error() << "IMD: multiple sector sizes per track are "
"currently unsupported";
}
auto sectors = trackdata->mutable_sectors();
//read the sectors
for (int s = 0; s < header.numSectors; s++)
@@ -408,6 +414,9 @@ public:
fm ? "FM" : "MFM",
Modulation_Speed, header.numSectors, sectorSize, (header.track+1) * trackSize / 1024);
layout->set_tracks(geometry.numTracks);
layout->set_sides(geometry.numSides);
if (!config.has_heads())
{
auto* heads = config.mutable_heads();

View File

@@ -8,7 +8,7 @@
#include "lib/config.pb.h"
#include "lib/layout.pb.h"
#include "lib/proto.h"
#include "imginputoutpututils.h"
#include "lib/layout.h"
#include "fmt/format.h"
#include <algorithm>
#include <iostream>
@@ -32,7 +32,7 @@ public:
"tracks, sides and trackdata fields in the layout?";
std::unique_ptr<Image> image(new Image);
for (const auto& p : getTrackOrdering(layout))
for (const auto& p : Layout::getTrackOrdering())
{
int track = p.first;
int side = p.second;
@@ -40,11 +40,10 @@ public:
if (inputFile.eof())
break;
auto trackdata = getTrackFormat(layout, track, side);
for (int sectorId : getTrackSectors(trackdata))
auto layoutdata = Layout::getLayoutOfTrack(track, side);
for (int sectorId : Layout::getSectorsInTrack(layoutdata))
{
Bytes data(trackdata.sector_size());
Bytes data(layoutdata.sector_size());
inputFile.read((char*)data.begin(), data.size());
const auto& sector = image->put(track, side, sectorId);

View File

@@ -56,6 +56,7 @@ public:
Logger() << "NFD: overriding configured format";
auto ibm = config.mutable_encoder()->mutable_ibm();
auto layout = config.mutable_layout();
config.mutable_tracks()->set_end(0);
Logger() << "NFD: HD 1.2MB mode";
if (!config.drive().has_drive())
@@ -67,7 +68,9 @@ public:
auto trackdata = ibm->add_trackdata();
trackdata->set_target_clock_period_us(2);
trackdata->set_target_rotational_period_ms(167);
auto sectors = trackdata->mutable_sectors();
auto layoutdata = layout->add_layoutdata();
auto physical = layoutdata->mutable_physical();
int currentTrackTrack = -1;
int currentTrackHead = -1;
int trackSectorSize = -1;
@@ -112,7 +115,9 @@ public:
// per-track data
trackdata->set_track(track);
trackdata->set_head(head);
trackdata->set_sector_size(sectorSize);
layoutdata->set_track(track);
layoutdata->set_side(head);
layoutdata->set_sector_size(sectorSize);
trackdata->set_use_fm(!mfm);
if (!mfm)
{
@@ -148,7 +153,7 @@ public:
sector->logicalSector = sectorId;
sector->data = data;
sectors->add_sector(sectorId);
physical->add_sector(sectorId);
if (config.tracks().end() < track)
config.mutable_tracks()->set_end(track);
}