mirror of
https://github.com/davidgiven/fluxengine.git
synced 2025-10-31 11:17:01 -07:00
Allow the LDBS data rate and recording mode to be specified, or (crudely)
guessed if not.
This commit is contained in:
@@ -4,7 +4,29 @@ import "lib/imagereader/imagereader.proto";
|
||||
import "lib/common.proto";
|
||||
|
||||
message D64OutputProto {}
|
||||
message LDBSOutputProto {}
|
||||
|
||||
message LDBSOutputProto {
|
||||
enum DataRate {
|
||||
RATE_HD = 0;
|
||||
RATE_DD = 1;
|
||||
RATE_SD = 2;
|
||||
RATE_ED = 3;
|
||||
RATE_GUESS = -1;
|
||||
}
|
||||
|
||||
enum RecordingMode {
|
||||
RECMODE_MFM = 0;
|
||||
RECMODE_FM = 1;
|
||||
RECMODE_GCR_MAC = 0x12;
|
||||
RECMODE_GCR_PRODOS = 0x14;
|
||||
RECMODE_GCR_LISA = 0x22;
|
||||
RECMODE_GUESS = -1;
|
||||
}
|
||||
|
||||
optional DataRate data_rate = 1 [default=RATE_GUESS, (help) = "data rate to use in LDBS file"];
|
||||
optional RecordingMode recording_mode = 2 [default=RECMODE_GUESS, (help) = "recording mode to use in LDBS file"];
|
||||
}
|
||||
|
||||
message DiskCopyOutputProto {}
|
||||
message NsiOutputProto {}
|
||||
|
||||
|
||||
@@ -23,7 +23,7 @@ public:
|
||||
|
||||
const Geometry geometry = image.getGeometry();
|
||||
|
||||
std::cout << fmt::format("writing {} tracks, {} sides, {} sectors, {} bytes per sector",
|
||||
std::cout << fmt::format("LDBS: writing {} tracks, {} sides, {} sectors, {} bytes per sector",
|
||||
geometry.numTracks, geometry.numSides, geometry.numSectors,
|
||||
geometry.sectorSize)
|
||||
<< std::endl;
|
||||
@@ -33,6 +33,22 @@ public:
|
||||
int trackDirectorySize = 0;
|
||||
trackDirectoryWriter.write_le16(0);
|
||||
|
||||
LDBSOutputProto::DataRate dataRate = _config.ldbs().data_rate();
|
||||
if (dataRate == LDBSOutputProto::RATE_GUESS)
|
||||
{
|
||||
dataRate = (geometry.numSectors > 10) ? LDBSOutputProto::RATE_HD : LDBSOutputProto::RATE_DD;
|
||||
if (geometry.sectorSize <= 256)
|
||||
dataRate = LDBSOutputProto::RATE_SD;
|
||||
std::cout << fmt::format("LDBS: guessing data rate as {}\n", LDBSOutputProto::DataRate_Name(dataRate));
|
||||
}
|
||||
|
||||
LDBSOutputProto::RecordingMode recordingMode = _config.ldbs().recording_mode();
|
||||
if (recordingMode == LDBSOutputProto::RECMODE_GUESS)
|
||||
{
|
||||
recordingMode = LDBSOutputProto::RECMODE_MFM;
|
||||
std::cout << fmt::format("LDBS: guessing recording mode as {}\n", LDBSOutputProto::RecordingMode_Name(recordingMode));
|
||||
}
|
||||
|
||||
for (int track = 0; track < geometry.numTracks; track++)
|
||||
{
|
||||
for (int side = 0; side < geometry.numSides; side++)
|
||||
@@ -51,8 +67,8 @@ public:
|
||||
trackHeaderWriter.write_le16(0x000C); /* offset of sector sideers */
|
||||
trackHeaderWriter.write_le16(0x0012); /* length of each sector descriptor */
|
||||
trackHeaderWriter.write_le16(actualSectors);
|
||||
trackHeaderWriter.write_8(0); /* data rate unknown */
|
||||
trackHeaderWriter.write_8(0); /* recording mode unknown */
|
||||
trackHeaderWriter.write_8(dataRate);
|
||||
trackHeaderWriter.write_8(recordingMode);
|
||||
trackHeaderWriter.write_8(0); /* format gap length */
|
||||
trackHeaderWriter.write_8(0); /* filler byte */
|
||||
trackHeaderWriter.write_le16(0); /* approximate track length */
|
||||
|
||||
Reference in New Issue
Block a user