Skip to content

Commit 9e771dc

Browse files
committed
V2 with improved reading, and writing support
1 parent a0bf700 commit 9e771dc

23 files changed

+1341
-754
lines changed

ArduinoFloppyReader/ArduinoFloppyReader/ArduinoFloppyReader.vcxproj

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -146,14 +146,12 @@
146146
<ItemGroup>
147147
<ClInclude Include="..\lib\ADFWriter.h" />
148148
<ClInclude Include="..\lib\ArduinoInterface.h" />
149-
<ClInclude Include="..\lib\phaseAnalyser.h" />
150149
<ClInclude Include="stdafx.h" />
151150
<ClInclude Include="targetver.h" />
152151
</ItemGroup>
153152
<ItemGroup>
154153
<ClCompile Include="..\lib\ADFWriter.cpp" />
155154
<ClCompile Include="..\lib\ArduinoInterface.cpp" />
156-
<ClCompile Include="..\lib\phaseAnalyser.cpp" />
157155
<ClCompile Include="Main.cpp" />
158156
<ClCompile Include="stdafx.cpp">
159157
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Create</PrecompiledHeader>

ArduinoFloppyReader/ArduinoFloppyReader/ArduinoFloppyReader.vcxproj.filters

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -27,9 +27,6 @@
2727
<ClInclude Include="..\lib\ArduinoInterface.h">
2828
<Filter>Header Files</Filter>
2929
</ClInclude>
30-
<ClInclude Include="..\lib\phaseAnalyser.h">
31-
<Filter>Header Files</Filter>
32-
</ClInclude>
3330
</ItemGroup>
3431
<ItemGroup>
3532
<ClCompile Include="stdafx.cpp">
@@ -44,8 +41,5 @@
4441
<ClCompile Include="..\lib\ArduinoInterface.cpp">
4542
<Filter>Source Files</Filter>
4643
</ClCompile>
47-
<ClCompile Include="..\lib\phaseAnalyser.cpp">
48-
<Filter>Source Files</Filter>
49-
</ClCompile>
5044
</ItemGroup>
5145
</Project>
Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,12 @@
11
<?xml version="1.0" encoding="utf-8"?>
22
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
33
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
4-
<LocalDebuggerCommandArguments>5 "c:\\users\\djrob\\desktop\\output2.adf"</LocalDebuggerCommandArguments>
4+
<LocalDebuggerCommandArguments>5 "C:\Users\djrob\Desktop\workbench.adf" WRITE VERIFY</LocalDebuggerCommandArguments>
5+
<DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>
6+
</PropertyGroup>
7+
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
8+
<LocalDebuggerCommandArguments>
9+
</LocalDebuggerCommandArguments>
510
<DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>
611
</PropertyGroup>
712
</Project>

ArduinoFloppyReader/ArduinoFloppyReader/Main.cpp

Lines changed: 89 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
/* ArduinoFloppyReader
1+
/* ArduinoFloppyReader (and writer)
22
*
33
* Copyright (C) 2017 Robert Smith (@RobSmithDev)
44
* http://amiga.robsmithdev.co.uk
@@ -17,9 +17,9 @@
1717
* License along with this program; if not see http://www.gnu.org/licenses/
1818
*/
1919

20-
//////////////////////////////////////////////////////////////////////////////////////////
21-
// Example console application for reading floppy drives //
22-
//////////////////////////////////////////////////////////////////////////////////////////
20+
////////////////////////////////////////////////////////////////////////////////////////////
21+
// Example console application for reading and writing floppy disks to and from ADF files //
22+
////////////////////////////////////////////////////////////////////////////////////////////
2323

2424

2525
#include "stdafx.h"
@@ -30,53 +30,100 @@ using namespace ArduinoFloppyReader;
3030

3131
ADFWriter writer;
3232

33+
// Read an ADF file and write it to disk
34+
void adf2Disk(wchar_t* argv[], bool verify) {
35+
printf("\nWrite disk from ADF mode\n\n");
36+
if (!verify) printf("WARNING: It is STRONGLY recommended to write with verify support turned on.\r\n\r\n");
37+
38+
ADFResult result = writer.ADFToDisk(argv[2],verify, [](const int currentTrack, const DiskSurface currentSide, bool isVerifyError) ->WriteResponse {
39+
if (isVerifyError) {
40+
char input;
41+
do {
42+
printf("\rDisk write verify error on track %i, %s side. [R]etry, [S]kip, [A]bort? ", currentTrack, (currentSide == DiskSurface::dsUpper) ? "Upper" : "Lower");
43+
input = toupper(getchar());
44+
} while ((input != 'R') && (input != 'S') && (input != 'A'));
45+
46+
switch (input) {
47+
case 'R': return WriteResponse::wrRetry;
48+
case 'I': return WriteResponse::wrSkipBadChecksums;
49+
case 'A': return WriteResponse::wrAbort;
50+
}
51+
}
52+
printf("\rWriting Track %i, %s side ", currentTrack, (currentSide == DiskSurface::dsUpper) ? "Upper" : "Lower");
53+
return WriteResponse::wrContinue;
54+
});
55+
56+
switch (result) {
57+
case adfrComplete: printf("\rADF file written to disk "); break;
58+
case adfrCompletedWithErrors: printf("\rADF file written to disk but there were errors during verification "); break;
59+
case adfrAborted: printf("\rWriting ADF file to disk "); break;
60+
case adfrFileError: printf("\rError opening ADF file. "); break;
61+
case adfrDriveError: printf("\rError communicating with the Arduino interface. "); break;
62+
case adfrDiskWriteProtected: printf("\rError, disk is write protected! "); break;
63+
}
64+
}
65+
66+
// Read a disk and save it to ADF files
67+
void disk2ADF(wchar_t* argv[]) {
68+
printf("\nCreate ADF from disk mode\n\n");
69+
70+
ADFResult result = writer.DiskToADF(argv[2], 80, [](const int currentTrack, const DiskSurface currentSide, const int retryCounter, const int sectorsFound, const int badSectorsFound) ->WriteResponse {
71+
if (retryCounter > 20) {
72+
char input;
73+
do {
74+
printf("\rDisk has checksum errors/missing data. [R]etry, [I]gnore, [A]bort? ");
75+
input = toupper(getchar());
76+
} while ((input != 'R') && (input != 'I') && (input != 'A'));
77+
switch (input) {
78+
case 'R': return WriteResponse::wrRetry;
79+
case 'I': return WriteResponse::wrSkipBadChecksums;
80+
case 'A': return WriteResponse::wrAbort;
81+
}
82+
}
83+
printf("\rReading Track %i, %s side (retry: %i) - Got %i/11 sectors (%i bad found) ", currentTrack, (currentSide == DiskSurface::dsUpper) ? "Upper" : "Lower", retryCounter, sectorsFound, badSectorsFound);
84+
return WriteResponse::wrContinue;
85+
});
86+
87+
switch (result) {
88+
case adfrComplete: printf("\rADF file created with valid checksums. "); break;
89+
case adfrAborted: printf("\rADF file aborted. "); break;
90+
case adfrFileError: printf("\rError creating ADF file. "); break;
91+
case adfrFileIOError: printf("\rError writing to ADF file. "); break;
92+
case adfrCompletedWithErrors: printf("\rADF file created with partial success. "); break;
93+
case adfrDriveError: printf("\rError communicating with the Arduino interface. "); break;
94+
}
95+
}
96+
3397
int wmain(int argc, wchar_t* argv[], wchar_t *envp[])
3498
{
35-
printf("Arduino Amiga Floppydisk Reader, Copyright (C) 2017 Robert Smith\r\n");
99+
printf("Arduino Amiga ADF Floppy disk Reader/Writer, Copyright (C) 2017 Robert Smith\r\n");
36100
printf("Full sourcecode and documentation at http://amiga.robsmithdev.co.uk\r\n");
37101
printf("This is free software licenced under the GNU General Public Licence V3\r\n\r\n");
38102

39103
if (argc < 3) {
40-
printf("Usage:\r\n");
41-
printf("ArduinoFloppyReader COMPORT OutputFilename.ADF\r\n\r\n");
104+
printf("Usage:\r\n\n");
105+
printf("To read a disk to an ADF file:\r\n");
106+
printf("ArduinoFloppyReader COMPORT OutputFilename.ADF [READ]\r\n\r\n");
107+
printf("To write an ADF file to disk:\r\n");
108+
printf("ArduinoFloppyReader COMPORT InputFilename.ADF WRITE [VERIFY]\r\n\r\n");
42109
return 0;
43110
}
44-
45-
writer.openDevice(_wtoi(argv[1]));
46-
if (writer.analyseDisk([](int progress) -> bool {
47-
printf("\rAnalysing Disk. %i %% complete", progress);
48-
return true;
49-
}
50-
) == AnalysisResult::arComplete)
51-
{
52-
53-
ADFResult result = writer.writeADF(argv[2], 80, [](const int currentTrack, const DiskSurface currentSide, const int retryCounter, const int sectorsFound, const int badSectorsFound) ->WriteResponse {
54-
if (retryCounter > 15) {
55-
char input;
56-
do {
57-
printf("\rDisk has checksum errors/missing data. [R]etry, [I]gnore, [A]bort? ");
58-
input = toupper(getchar());
59-
} while ((input != 'R') && (input != 'I') && (input != 'A'));
60-
switch (input) {
61-
case 'R': break;
62-
case 'I': return WriteResponse::wrSkipBadChecksums;
63-
case 'A': return WriteResponse::wrAbort;
64-
}
65-
}
66-
printf("\rReading Track %i, %s side (retry: %i) - Got %i/11 sectors (%i bad found) ", currentTrack, (currentSide == DiskSurface::dsUpper) ? "Upper" : "Lower", retryCounter, sectorsFound, badSectorsFound);
67-
return WriteResponse::wrContinue;
68-
});
69-
70-
switch (result) {
71-
case adfrComplete: printf("\rADF file created with valid checksums. "); break;
72-
case adfrAborted: printf("\rADF file aborted. "); break;
73-
case adfrFileError: printf("\rError creating ADF file. "); break;
74-
case adfrFileIOError: printf("\rError writing to ADF file. "); break;
75-
case adfrCompletedWithErrors: printf("\rADF file created with partial success. "); break;
76-
case adfrDriveError: printf("\rError communicating with the Arduino interface. "); break;
77-
}
111+
112+
bool writeMode = false;
113+
bool verify = false;
114+
if (argc > 3) {
115+
_wcsupr(argv[3]);
116+
writeMode = wcscmp(argv[3], L"WRITE") == 0;
78117
}
79-
else printf("\r\n\r\nError reading disk!\r\n");
118+
if (argc > 4) {
119+
_wcsupr(argv[4]);
120+
verify = wcscmp(argv[4], L"VERIFY") == 0;
121+
}
122+
123+
writer.openDevice(_wtoi(argv[1]));
124+
125+
if (writeMode) adf2Disk(argv,verify); else disk2ADF(argv);
126+
80127
writer.closeDevice();
81128

82129

ArduinoFloppyReader/ArduinoFloppyReader/stdafx.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
/* ArduinoFloppyReader
1+
/* ArduinoFloppyReader (and writer)
22
*
33
* Copyright (C) 2017 Robert Smith (@RobSmithDev)
44
* http://amiga.robsmithdev.co.uk
Binary file not shown.
Binary file not shown.

ArduinoFloppyReader/ArduinoFloppyReaderWin/ArduinoFloppyReaderWin.vcxproj

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,7 @@
9595
</ClCompile>
9696
<Link>
9797
<SubSystem>Windows</SubSystem>
98+
<AdditionalDependencies>Winmm.lib</AdditionalDependencies>
9899
</Link>
99100
<Midl>
100101
<MkTypLibCompatible>false</MkTypLibCompatible>
@@ -143,6 +144,7 @@
143144
<SubSystem>Windows</SubSystem>
144145
<EnableCOMDATFolding>true</EnableCOMDATFolding>
145146
<OptimizeReferences>true</OptimizeReferences>
147+
<AdditionalDependencies>Winmm.lib</AdditionalDependencies>
146148
</Link>
147149
<Midl>
148150
<MkTypLibCompatible>false</MkTypLibCompatible>
@@ -187,7 +189,6 @@
187189
<ItemGroup>
188190
<ClInclude Include="..\lib\ADFWriter.h" />
189191
<ClInclude Include="..\lib\ArduinoInterface.h" />
190-
<ClInclude Include="..\lib\phaseAnalyser.h" />
191192
<ClInclude Include="ArduinoFloppyReaderWin.h" />
192193
<ClInclude Include="ArduinoFloppyReaderWinDlg.h" />
193194
<ClInclude Include="Resource.h" />
@@ -197,7 +198,6 @@
197198
<ItemGroup>
198199
<ClCompile Include="..\lib\ADFWriter.cpp" />
199200
<ClCompile Include="..\lib\ArduinoInterface.cpp" />
200-
<ClCompile Include="..\lib\phaseAnalyser.cpp" />
201201
<ClCompile Include="ArduinoFloppyReaderWin.cpp" />
202202
<ClCompile Include="ArduinoFloppyReaderWinDlg.cpp" />
203203
<ClCompile Include="stdafx.cpp">
@@ -219,7 +219,9 @@
219219
<Image Include="..\..\..\..\Websites\amiga\images\floppy.png" />
220220
<Image Include="res\ArduinoFloppyReaderWin.ico" />
221221
<Image Include="res\fin.bmp" />
222+
<Image Include="res\fin2.bmp" />
222223
<Image Include="res\finpartial.bmp" />
224+
<Image Include="res\finpartial2.bmp" />
223225
<Image Include="res\floppy.bmp" />
224226
</ItemGroup>
225227
<ItemGroup>

ArduinoFloppyReader/ArduinoFloppyReaderWin/ArduinoFloppyReaderWin.vcxproj.filters

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -39,9 +39,6 @@
3939
<ClInclude Include="..\lib\ArduinoInterface.h">
4040
<Filter>Header Files</Filter>
4141
</ClInclude>
42-
<ClInclude Include="..\lib\phaseAnalyser.h">
43-
<Filter>Header Files</Filter>
44-
</ClInclude>
4542
</ItemGroup>
4643
<ItemGroup>
4744
<ClCompile Include="ArduinoFloppyReaderWin.cpp">
@@ -59,9 +56,6 @@
5956
<ClCompile Include="..\lib\ArduinoInterface.cpp">
6057
<Filter>Source Files</Filter>
6158
</ClCompile>
62-
<ClCompile Include="..\lib\phaseAnalyser.cpp">
63-
<Filter>Source Files</Filter>
64-
</ClCompile>
6559
</ItemGroup>
6660
<ItemGroup>
6761
<ResourceCompile Include="ArduinoFloppyReaderWin.rc">
@@ -95,6 +89,12 @@
9589
<Image Include="res\finpartial.bmp">
9690
<Filter>Resource Files</Filter>
9791
</Image>
92+
<Image Include="res\fin2.bmp">
93+
<Filter>Resource Files</Filter>
94+
</Image>
95+
<Image Include="res\finpartial2.bmp">
96+
<Filter>Resource Files</Filter>
97+
</Image>
9898
</ItemGroup>
9999
<ItemGroup>
100100
<Media Include="res\sfx.wav">

0 commit comments

Comments
 (0)