Skip to content

Commit cab8734

Browse files
committed
Merge branch 'dev'
2 parents 78e058e + 43d5cdb commit cab8734

File tree

5 files changed

+64
-21
lines changed

5 files changed

+64
-21
lines changed

Emulator/Media/DiskFiles/EXTFile.cpp

Lines changed: 49 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -103,13 +103,22 @@ EXTFile::finalizeRead()
103103
}
104104

105105
for (isize i = 0; i < numTracks; i++) {
106-
107-
if (typeOfTrack(i) != 1) {
106+
107+
if (typeOfTrack(i) != 0 && typeOfTrack(i) != 1) {
108108

109-
warn("Only MFM encoded tracks are supported yet\n");
109+
warn("Unsupported track format\n");
110110
throw VAError(ERROR_EXT_INCOMPATIBLE);
111111
}
112112

113+
if (typeOfTrack(i) == 0) {
114+
115+
if (usedBitsForTrack(i) != 11 * 512 * 8) {
116+
117+
warn("Unsupported standard track size\n");
118+
throw VAError(ERROR_EXT_CORRUPTED);
119+
}
120+
}
121+
113122
if (usedBitsForTrack(i) > availableBytesForTrack(i) * 8) {
114123

115124
warn("Corrupted length information\n");
@@ -165,31 +174,53 @@ void
165174
EXTFile::encodeDisk(class FloppyDisk &disk) const
166175
{
167176
assert(!data.empty());
168-
177+
169178
isize tracks = storedTracks();
170179
debug(MFM_DEBUG, "Encoding Amiga disk with %ld tracks\n", tracks);
171180

172-
// Start with an unformatted disk
173-
disk.clearDisk();
181+
// Create an empty ADF
182+
ADFFile adf(getDiameter(), getDensity());
183+
184+
// Wipe out all data
185+
disk.clearDisk(0);
186+
187+
// Encode all standard tracks
188+
for (Track t = 0; t < tracks; t++) encodeStandardTrack(adf, t);
174189

175-
// Encode all tracks
176-
for (Track t = 0; t < tracks; t++) encodeTrack(disk, t);
190+
// Convert the ADF to a disk
191+
disk.encodeDisk(adf);
192+
193+
// Encode all extended tracks
194+
for (Track t = 0; t < tracks; t++) encodeExtendedTrack(disk, t);
177195
}
178196

179197
void
180-
EXTFile::encodeTrack(class FloppyDisk &disk, Track t) const
198+
EXTFile::encodeStandardTrack(ADFFile &adf, Track t) const
181199
{
182-
auto numTracks = storedTracks();
183-
184-
for (isize i = 0; i < numTracks; i++) {
200+
if (typeOfTrack(t) == 0) {
185201

186-
debug(MFM_DEBUG, "Encoding track %ld\n", i);
187-
188-
auto numBits = usedBitsForTrack(i);
202+
debug(MFM_DEBUG, "Encoding standard track %ld\n", t);
203+
204+
auto numBits = usedBitsForTrack(t);
189205
assert(numBits % 8 == 0);
190-
191-
std::memcpy(disk.data.track[i], trackData(i), numBits / 8);
192-
disk.length.track[i] = (i32)(numBits / 8);
206+
207+
auto ptr = adf.data.ptr + t * 11 * 512;
208+
std::memcpy(ptr, trackData(t), size_t(numBits / 8));
209+
}
210+
}
211+
212+
void
213+
EXTFile::encodeExtendedTrack(class FloppyDisk &disk, Track t) const
214+
{
215+
if (typeOfTrack(t) == 1) {
216+
217+
debug(MFM_DEBUG, "Encoding extended track %ld\n", t);
218+
219+
auto numBits = usedBitsForTrack(t);
220+
assert(numBits % 8 == 0);
221+
222+
std::memcpy(disk.data.track[t], trackData(t), size_t(numBits / 8));
223+
disk.length.track[t] = i32(numBits / 8);
193224
}
194225
}
195226

Emulator/Media/DiskFiles/EXTFile.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,8 @@ class EXTFile : public FloppyFile {
116116

117117
private:
118118

119-
void encodeTrack(class FloppyDisk &disk, Track t) const throws;
119+
void encodeStandardTrack(class ADFFile &adf, Track t) const throws;
120+
void encodeExtendedTrack(class FloppyDisk &disk, Track t) const throws;
120121

121122

122123
// Scanning the raw data

Emulator/Peripherals/Drive/FloppyDisk.cpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,14 @@ FloppyDisk::clearDisk()
142142
}
143143
}
144144

145+
void
146+
FloppyDisk::clearDisk(u8 value)
147+
{
148+
for (isize i = 0; i < isizeof(data.raw); i++) {
149+
data.raw[i] = value;
150+
}
151+
}
152+
145153
void
146154
FloppyDisk::clearTrack(Track t)
147155
{

Emulator/Peripherals/Drive/FloppyDisk.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -182,6 +182,9 @@ class FloppyDisk : public AmigaObject {
182182
// Initializes the disk with random data
183183
void clearDisk();
184184

185+
// Initializes the disk with a constant value
186+
void clearDisk(u8 value);
187+
185188
// Initializes a single track with random data or a specific value
186189
void clearTrack(Track t);
187190
void clearTrack(Track t, u8 value);

Resources/Info.plist

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -146,9 +146,9 @@
146146
<key>CFBundlePackageType</key>
147147
<string>APPL</string>
148148
<key>CFBundleShortVersionString</key>
149-
<string>2.0</string>
149+
<string>2.1b1</string>
150150
<key>CFBundleVersion</key>
151-
<string>220510</string>
151+
<string>220520</string>
152152
<key>LSApplicationCategoryType</key>
153153
<string>public.app-category.entertainment</string>
154154
<key>LSMinimumSystemVersion</key>

0 commit comments

Comments
 (0)