summaryrefslogtreecommitdiff
path: root/Examples/DskImg.HC
diff options
context:
space:
mode:
Diffstat (limited to 'Examples/DskImg.HC')
-rw-r--r--Examples/DskImg.HC73
1 files changed, 73 insertions, 0 deletions
diff --git a/Examples/DskImg.HC b/Examples/DskImg.HC
new file mode 100644
index 0000000..7aec469
--- /dev/null
+++ b/Examples/DskImg.HC
@@ -0,0 +1,73 @@
+#define CYLINDERS 80
+#define SECTORS 18
+#define BASE 0x03F0
+#define IMG_SIZE 1474560
+
+/*
+ Copyright (C) 2025-2026 Harley Travis <yoshi128k@gmail.com>.
+ This software (including source code) is licensed under the BSD Zero Clause
+ License. See the Copying.TXT file for details.
+*/
+
+/*
+
+ Make sure IRQ6 is on and
+ pointed to the correct handler!
+
+*/
+
+U8 DskImg()
+{
+ U64 i;
+
+ // Open image file for writing
+ CFile *img = FOpen("Floppy.IMG","w",IMG_SIZE/BLK_SIZE);
+
+ // Initialize the controller
+ FDCReset(BASE);
+ Sleep(100);
+
+ /*
+
+ Loop through each sector,
+ reading each into the buffer,
+ then writing it into the file
+
+ */
+
+ for (i = 0; i < CYLINDERS; i++) {
+ "Track %d\n", i;
+ if (FDCSeek(BASE, i, 0)) {
+ FDCReset(BASE);
+ FClose(img);
+ return 1;
+ }
+ if (FDCSeek(BASE, i, 1)) {
+ FDCReset(BASE);
+ FClose(img);
+ return 1;
+ }
+ FDCReadMulti(BASE, i, 0, 1, 18);
+ FBlkWrite(img, &FDC_DMA, 36 * i, 36);
+ }
+
+ // Return to track 0
+ "Returning to track 0...\n";
+ if (FDCSeek(BASE, 0, 0)) {
+ FDCReset(BASE);
+ FClose(img);
+ return 1;
+ }
+ if (FDCSeek(BASE, 0, 1)) {
+ FDCReset(BASE);
+ FClose(img);
+ return 1;
+ }
+
+ // Close the image file
+ FClose(img);
+
+ return 0;
+}
+
+DskImg;