mirror of
https://github.com/davidgiven/fluxengine.git
synced 2025-10-31 11:17:01 -07:00
Eliminate the IBM trackdata sector layout stuff in favour of the layout{}
clause.
This commit is contained in:
@@ -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();
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user