dsktool 0.4.2 → 0.5.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/bin/dskexplorer.rb +1 -1
- data/bin/dskexplorer.rb~ +365 -0
- data/bin/dsktool.rb +7 -3
- data/bin/dsktool.rb~ +173 -0
- data/doc/classes/AppleSoftFile.html +199 -0
- data/doc/classes/AppleSoftFile.src/M000005.html +18 -0
- data/doc/classes/AppleSoftFile.src/M000006.html +18 -0
- data/doc/classes/AppleSoftFile.src/M000008.html +18 -0
- data/doc/classes/AppleSoftFile.src/M000009.html +18 -0
- data/doc/classes/AppleSoftFile.src/M000010.html +18 -0
- data/doc/classes/AppleSoftFile.src/M000055.html +18 -0
- data/doc/classes/AppleSoftFile.src/M000056.html +18 -0
- data/doc/classes/AppleSoftFile.src/M000057.html +18 -0
- data/doc/classes/AppleSoftFile.src/M000058.html +18 -0
- data/doc/classes/BinaryFile.html +241 -0
- data/doc/classes/BinaryFile.src/M000015.html +18 -0
- data/doc/classes/BinaryFile.src/M000020.html +18 -0
- data/doc/classes/BinaryFile.src/M000021.html +18 -0
- data/doc/classes/BinaryFile.src/M000022.html +19 -0
- data/doc/classes/BinaryFile.src/M000107.html +18 -0
- data/doc/classes/BinaryFile.src/M000108.html +18 -0
- data/doc/classes/BinaryFile.src/M000109.html +18 -0
- data/doc/classes/BinaryFile.src/M000110.html +19 -0
- data/doc/classes/BinaryFile.src/M000111.html +19 -0
- data/doc/classes/BinaryFile.src/M000112.html +19 -0
- data/doc/classes/BinaryFile.src/M000113.html +18 -0
- data/doc/classes/CPMDisk.html +331 -0
- data/doc/classes/CPMDisk.src/M000024.html +21 -0
- data/doc/classes/CPMDisk.src/M000025.html +23 -0
- data/doc/classes/CPMDisk.src/M000026.html +23 -0
- data/doc/classes/CPMDisk.src/M000027.html +19 -0
- data/doc/classes/CPMDisk.src/M000028.html +18 -0
- data/doc/classes/CPMDisk.src/M000029.html +18 -0
- data/doc/classes/CPMDisk.src/M000030.html +31 -0
- data/doc/classes/CPMDisk.src/M000031.html +51 -0
- data/doc/classes/CPMDisk.src/M000032.html +53 -0
- data/doc/classes/CPMFile.html +252 -0
- data/doc/classes/CPMFile.src/M000064.html +22 -0
- data/doc/classes/CPMFile.src/M000065.html +20 -0
- data/doc/classes/CPMFile.src/M000066.html +22 -0
- data/doc/classes/CPMFile.src/M000067.html +18 -0
- data/doc/classes/CPMFile.src/M000068.html +18 -0
- data/doc/classes/CPMFile.src/M000069.html +18 -0
- data/doc/classes/CPMFile.src/M000070.html +18 -0
- data/doc/classes/CatalogServlet.html +148 -0
- data/doc/classes/CatalogServlet.src/M000035.html +20 -0
- data/doc/classes/CatalogServlet.src/M000036.html +20 -0
- data/doc/classes/D65.html +180 -0
- data/doc/classes/D65.src/M000002.html +18 -0
- data/doc/classes/D65.src/M000003.html +18 -0
- data/doc/classes/D65.src/M000004.html +64 -0
- data/doc/classes/D65.src/M000005.html +18 -0
- data/doc/classes/D65.src/M000006.html +18 -0
- data/doc/classes/D65.src/M000007.html +18 -0
- data/doc/classes/D65.src/M000008.html +18 -0
- data/doc/classes/D65.src/M000048.html +18 -0
- data/doc/classes/D65.src/M000049.html +64 -0
- data/doc/classes/DOSDisk.html +425 -0
- data/doc/classes/DOSDisk.src/M000007.html +20 -0
- data/doc/classes/DOSDisk.src/M000008.html +77 -0
- data/doc/classes/DOSDisk.src/M000010.html +20 -0
- data/doc/classes/DOSDisk.src/M000011.html +20 -0
- data/doc/classes/DOSDisk.src/M000012.html +19 -0
- data/doc/classes/DOSDisk.src/M000013.html +20 -0
- data/doc/classes/DOSDisk.src/M000053.html +23 -0
- data/doc/classes/DOSDisk.src/M000054.html +19 -0
- data/doc/classes/DOSDisk.src/M000055.html +21 -0
- data/doc/classes/DOSDisk.src/M000056.html +37 -0
- data/doc/classes/DOSDisk.src/M000057.html +85 -0
- data/doc/classes/DOSDisk.src/M000058.html +37 -0
- data/doc/classes/DOSDisk.src/M000059.html +34 -0
- data/doc/classes/DOSDisk.src/M000060.html +27 -0
- data/doc/classes/DOSDisk.src/M000061.html +43 -0
- data/doc/classes/DOSDisk.src/M000062.html +31 -0
- data/doc/classes/DOSDisk.src/M000063.html +95 -0
- data/doc/classes/DOSDisk.src/M000064.html +85 -0
- data/doc/classes/DOSDisk.src/M000065.html +37 -0
- data/doc/classes/DOSDisk.src/M000066.html +34 -0
- data/doc/classes/DOSDisk.src/M000067.html +27 -0
- data/doc/classes/DOSDisk.src/M000068.html +43 -0
- data/doc/classes/DOSDisk.src/M000069.html +31 -0
- data/doc/classes/DOSDisk.src/M000070.html +95 -0
- data/doc/classes/DOSFile.html +253 -0
- data/doc/classes/DOSFile.src/M000016.html +22 -0
- data/doc/classes/DOSFile.src/M000017.html +17 -0
- data/doc/classes/DOSFile.src/M000018.html +18 -0
- data/doc/classes/DOSFile.src/M000021.html +22 -0
- data/doc/classes/DOSFile.src/M000022.html +22 -0
- data/doc/classes/DOSFile.src/M000023.html +22 -0
- data/doc/classes/DOSFile.src/M000024.html +17 -0
- data/doc/classes/DOSFile.src/M000025.html +18 -0
- data/doc/classes/DOSFile.src/M000116.html +22 -0
- data/doc/classes/DOSFile.src/M000117.html +18 -0
- data/doc/classes/DOSFile.src/M000118.html +18 -0
- data/doc/classes/DOSFile.src/M000119.html +28 -0
- data/doc/classes/DOSFile.src/M000120.html +18 -0
- data/doc/classes/DSK.html +633 -0
- data/doc/classes/DSK.src/M000009.html +22 -0
- data/doc/classes/DSK.src/M000010.html +27 -0
- data/doc/classes/DSK.src/M000011.html +19 -0
- data/doc/classes/DSK.src/M000012.html +18 -0
- data/doc/classes/DSK.src/M000013.html +22 -0
- data/doc/classes/DSK.src/M000014.html +22 -0
- data/doc/classes/DSK.src/M000015.html +22 -0
- data/doc/classes/DSK.src/M000016.html +22 -0
- data/doc/classes/DSK.src/M000017.html +22 -0
- data/doc/classes/DSK.src/M000018.html +22 -0
- data/doc/classes/DSK.src/M000019.html +22 -0
- data/doc/classes/DSK.src/M000020.html +34 -0
- data/doc/classes/DSK.src/M000079.html +19 -0
- data/doc/classes/DSK.src/M000080.html +19 -0
- data/doc/classes/DSK.src/M000081.html +18 -0
- data/doc/classes/DSK.src/M000082.html +18 -0
- data/doc/classes/DSK.src/M000083.html +18 -0
- data/doc/classes/DSK.src/M000084.html +18 -0
- data/doc/classes/DSK.src/M000085.html +18 -0
- data/doc/classes/DSK.src/M000086.html +25 -0
- data/doc/classes/DSK.src/M000087.html +19 -0
- data/doc/classes/DSK.src/M000088.html +20 -0
- data/doc/classes/DSK.src/M000089.html +35 -0
- data/doc/classes/DSK.src/M000090.html +22 -0
- data/doc/classes/DSK.src/M000091.html +22 -0
- data/doc/classes/DSK.src/M000092.html +27 -0
- data/doc/classes/DSK.src/M000093.html +25 -0
- data/doc/classes/DSK.src/M000094.html +33 -0
- data/doc/classes/DSK.src/M000095.html +66 -0
- data/doc/classes/DSK.src/M000096.html +33 -0
- data/doc/classes/DSK.src/M000097.html +22 -0
- data/doc/classes/DSK.src/M000098.html +23 -0
- data/doc/classes/DSK.src/M000099.html +24 -0
- data/doc/classes/DSK.src/M000100.html +21 -0
- data/doc/classes/DSK.src/M000101.html +18 -0
- data/doc/classes/DSK.src/M000102.html +24 -0
- data/doc/classes/DSK.src/M000103.html +24 -0
- data/doc/classes/DSK.src/M000104.html +24 -0
- data/doc/classes/DSKFile.html +328 -0
- data/doc/classes/DSKFile.src/M000071.html +19 -0
- data/doc/classes/DSKFile.src/M000072.html +18 -0
- data/doc/classes/DSKFile.src/M000073.html +23 -0
- data/doc/classes/DSKFile.src/M000074.html +25 -0
- data/doc/classes/DSKFile.src/M000075.html +18 -0
- data/doc/classes/DSKFile.src/M000076.html +18 -0
- data/doc/classes/DSKFile.src/M000077.html +18 -0
- data/doc/classes/DSKFile.src/M000078.html +18 -0
- data/doc/classes/DSKFile.src/M000079.html +50 -0
- data/doc/classes/DSKTrackSector.html +199 -0
- data/doc/classes/DSKTrackSector.src/M000045.html +20 -0
- data/doc/classes/DSKTrackSector.src/M000046.html +18 -0
- data/doc/classes/DSKTrackSector.src/M000047.html +21 -0
- data/doc/classes/DSKTrackSector.src/M000049.html +20 -0
- data/doc/classes/DSKTrackSector.src/M000050.html +18 -0
- data/doc/classes/DSKTrackSector.src/M000051.html +21 -0
- data/doc/classes/DirectoryServlet.html +148 -0
- data/doc/classes/DirectoryServlet.src/M000041.html +20 -0
- data/doc/classes/DirectoryServlet.src/M000044.html +20 -0
- data/doc/classes/DumpUtilities.html +158 -0
- data/doc/classes/DumpUtilities.src/M000050.html +33 -0
- data/doc/classes/DumpUtilities.src/M000051.html +23 -0
- data/doc/classes/HGR.html +232 -0
- data/doc/classes/HGR.src/M000114.html +29 -0
- data/doc/classes/HGR.src/M000115.html +56 -0
- data/doc/classes/IntegerBasicFile.html +293 -0
- data/doc/classes/IntegerBasicFile.src/M000001.html +18 -0
- data/doc/classes/IntegerBasicFile.src/M000004.html +18 -0
- data/doc/classes/IntegerBasicFile.src/M000005.html +18 -0
- data/doc/classes/IntegerBasicFile.src/M000036.html +18 -0
- data/doc/classes/IntegerBasicFile.src/M000037.html +18 -0
- data/doc/classes/IntegerBasicFile.src/M000038.html +18 -0
- data/doc/classes/IntegerBasicFile.src/M000039.html +18 -0
- data/doc/classes/MBASICFile.html +202 -0
- data/doc/classes/MBASICFile.src/M000033.html +22 -0
- data/doc/classes/MBASICFile.src/M000034.html +30 -0
- data/doc/classes/MBASICFile.src/M000035.html +94 -0
- data/doc/classes/NADOLBinaryFile.html +184 -0
- data/doc/classes/NADOLBinaryFile.src/M000052.html +19 -0
- data/doc/classes/NADOLBinaryFile.src/M000053.html +18 -0
- data/doc/classes/NADOLBinaryFile.src/M000054.html +18 -0
- data/doc/classes/NADOLDisk.html +324 -0
- data/doc/classes/NADOLDisk.src/M000014.html +23 -0
- data/doc/classes/NADOLDisk.src/M000015.html +19 -0
- data/doc/classes/NADOLDisk.src/M000016.html +18 -0
- data/doc/classes/NADOLDisk.src/M000017.html +29 -0
- data/doc/classes/NADOLDisk.src/M000018.html +34 -0
- data/doc/classes/NADOLDisk.src/M000019.html +32 -0
- data/doc/classes/NADOLDisk.src/M000020.html +22 -0
- data/doc/classes/NADOLDisk.src/M000021.html +38 -0
- data/doc/classes/NADOLDisk.src/M000022.html +27 -0
- data/doc/classes/NADOLDisk.src/M000023.html +53 -0
- data/doc/classes/NADOLDisk.src/M000024.html +46 -0
- data/doc/classes/NADOLFile.html +189 -0
- data/doc/classes/NADOLFile.src/M000042.html +18 -0
- data/doc/classes/NADOLFile.src/M000043.html +18 -0
- data/doc/classes/NADOLFile.src/M000044.html +28 -0
- data/doc/classes/NADOLTokenisedFile.html +231 -0
- data/doc/classes/NADOLTokenisedFile.src/M000124.html +28 -0
- data/doc/classes/NADOLTokenisedFile.src/M000125.html +49 -0
- data/doc/classes/NADOLTokenisedFile.src/M000126.html +18 -0
- data/doc/classes/NADOLTokenisedFile.src/M000127.html +18 -0
- data/doc/classes/Nibbles.html +231 -0
- data/doc/classes/Nibbles.src/M000110.html +18 -0
- data/doc/classes/Nibbles.src/M000111.html +20 -0
- data/doc/classes/Nibbles.src/M000112.html +18 -0
- data/doc/classes/Nibbles.src/M000113.html +101 -0
- data/doc/classes/PNG.html +151 -0
- data/doc/classes/PNG.src/M000123.html +26 -0
- data/doc/classes/SCAsmFile.html +242 -0
- data/doc/classes/SCAsmFile.src/M000102.html +18 -0
- data/doc/classes/SCAsmFile.src/M000103.html +18 -0
- data/doc/classes/SCAsmFile.src/M000104.html +18 -0
- data/doc/classes/SCAsmFile.src/M000105.html +18 -0
- data/doc/classes/SCAsmFile.src/M000106.html +39 -0
- data/doc/classes/ShowFileServlet.html +148 -0
- data/doc/classes/ShowFileServlet.src/M000052.html +22 -0
- data/doc/classes/ShowFileServlet.src/M000059.html +22 -0
- data/doc/classes/ShowPNGServlet.html +148 -0
- data/doc/classes/ShowPNGServlet.src/M000101.html +26 -0
- data/doc/classes/ShowPNGServlet.src/M000105.html +26 -0
- data/doc/classes/ShowSectorServlet.html +148 -0
- data/doc/classes/ShowSectorServlet.src/M000040.html +22 -0
- data/doc/classes/ShowSectorServlet.src/M000043.html +22 -0
- data/doc/classes/TestCPMDisks.html +159 -0
- data/doc/classes/TestCPMDisks.src/M000037.html +19 -0
- data/doc/classes/TestCPMDisks.src/M000038.html +57 -0
- data/doc/classes/TestDOSDisks.html +279 -0
- data/doc/classes/TestDOSDisks.src/M000001.html +19 -0
- data/doc/classes/TestDOSDisks.src/M000002.html +19 -0
- data/doc/classes/TestDOSDisks.src/M000003.html +25 -0
- data/doc/classes/TestDOSDisks.src/M000014.html +26 -0
- data/doc/classes/TestDOSDisks.src/M000015.html +19 -0
- data/doc/classes/TestDOSDisks.src/M000016.html +62 -0
- data/doc/classes/TestDOSDisks.src/M000017.html +22 -0
- data/doc/classes/TestDOSDisks.src/M000018.html +20 -0
- data/doc/classes/TestDOSDisks.src/M000019.html +19 -0
- data/doc/classes/TestDOSDisks.src/M000020.html +25 -0
- data/doc/classes/TestDOSDisks.src/M000021.html +47 -0
- data/doc/classes/TestDOSDisks.src/M000022.html +28 -0
- data/doc/classes/TestDOSDisks.src/M000023.html +28 -0
- data/doc/classes/TestDOSDisks.src/M000025.html +26 -0
- data/doc/classes/TestDOSDisks.src/M000026.html +19 -0
- data/doc/classes/TestDOSDisks.src/M000027.html +62 -0
- data/doc/classes/TestDOSDisks.src/M000028.html +22 -0
- data/doc/classes/TestDOSDisks.src/M000029.html +20 -0
- data/doc/classes/TestDOSDisks.src/M000030.html +19 -0
- data/doc/classes/TestDOSDisks.src/M000031.html +25 -0
- data/doc/classes/TestDOSDisks.src/M000032.html +47 -0
- data/doc/classes/TestDOSDisks.src/M000033.html +28 -0
- data/doc/classes/TestDOSDisks.src/M000034.html +28 -0
- data/doc/classes/TestDisassembly.html +144 -0
- data/doc/classes/TestDisassembly.src/M000005.html +19 -0
- data/doc/classes/TestDisassembly.src/M000006.html +19 -0
- data/doc/classes/TestDisassembly.src/M000039.html +19 -0
- data/doc/classes/TestModifiedDOSDisks.html +193 -0
- data/doc/classes/TestModifiedDOSDisks.src/M000045.html +24 -0
- data/doc/classes/TestModifiedDOSDisks.src/M000046.html +27 -0
- data/doc/classes/TestModifiedDOSDisks.src/M000047.html +24 -0
- data/doc/classes/TestModifiedDOSDisks.src/M000048.html +27 -0
- data/doc/classes/TestNADOLDisks.html +193 -0
- data/doc/classes/TestNADOLDisks.src/M000106.html +22 -0
- data/doc/classes/TestNADOLDisks.src/M000107.html +72 -0
- data/doc/classes/TestNADOLDisks.src/M000108.html +22 -0
- data/doc/classes/TestNADOLDisks.src/M000109.html +72 -0
- data/doc/classes/TestNADOLDisks.src/M000121.html +22 -0
- data/doc/classes/TestNADOLDisks.src/M000122.html +73 -0
- data/doc/classes/TestPascalDisks.html +174 -0
- data/doc/classes/TestPascalDisks.src/M000040.html +28 -0
- data/doc/classes/TestPascalDisks.src/M000041.html +24 -0
- data/doc/classes/TestPascalDisks.src/M000042.html +27 -0
- data/doc/classes/TestProDOSDisks.html +253 -0
- data/doc/classes/TestProDOSDisks.src/M000114.html +28 -0
- data/doc/classes/TestProDOSDisks.src/M000115.html +28 -0
- data/doc/classes/TestProDOSDisks.src/M000116.html +41 -0
- data/doc/classes/TestProDOSDisks.src/M000117.html +28 -0
- data/doc/classes/TestProDOSDisks.src/M000118.html +28 -0
- data/doc/classes/TestProDOSDisks.src/M000119.html +28 -0
- data/doc/classes/TestProDOSDisks.src/M000120.html +41 -0
- data/doc/classes/TestProDOSDisks.src/M000121.html +28 -0
- data/doc/classes/TextFile.html +196 -0
- data/doc/classes/TextFile.src/M000019.html +18 -0
- data/doc/classes/TextFile.src/M000020.html +20 -0
- data/doc/classes/TextFile.src/M000024.html +18 -0
- data/doc/classes/TextFile.src/M000025.html +18 -0
- data/doc/classes/TextFile.src/M000026.html +18 -0
- data/doc/classes/TextFile.src/M000027.html +20 -0
- data/doc/classes/TextFile.src/M000128.html +18 -0
- data/doc/classes/TextFile.src/M000129.html +18 -0
- data/doc/classes/TextFile.src/M000130.html +18 -0
- data/doc/classes/TextFile.src/M000131.html +20 -0
- data/doc/created.rid +1 -0
- data/doc/dot/f_0.dot +14 -84
- data/doc/dot/f_0.png +0 -0
- data/doc/dot/f_1.dot +32 -0
- data/doc/dot/f_1.png +0 -0
- data/doc/dot/f_10.dot +32 -0
- data/doc/dot/f_10.png +0 -0
- data/doc/dot/f_11.dot +14 -0
- data/doc/dot/f_11.png +0 -0
- data/doc/dot/f_12.dot +84 -0
- data/doc/dot/f_12.png +0 -0
- data/doc/dot/f_15.dot +32 -0
- data/doc/dot/f_15.png +0 -0
- data/doc/dot/f_18.dot +32 -0
- data/doc/dot/f_18.png +0 -0
- data/doc/dot/f_2.dot +32 -0
- data/doc/dot/f_2.png +0 -0
- data/doc/dot/f_20.dot +32 -0
- data/doc/dot/f_20.png +0 -0
- data/doc/dot/f_3.dot +32 -0
- data/doc/dot/f_3.png +0 -0
- data/doc/dot/f_4.dot +32 -0
- data/doc/dot/f_4.png +0 -0
- data/doc/dot/f_5.dot +32 -0
- data/doc/dot/f_5.png +0 -0
- data/doc/dot/f_6.dot +32 -0
- data/doc/dot/f_6.png +0 -0
- data/doc/dot/f_7.dot +23 -0
- data/doc/dot/f_7.png +0 -0
- data/doc/dot/f_8.dot +23 -0
- data/doc/dot/f_8.png +0 -0
- data/doc/dot/f_9.dot +45 -0
- data/doc/dot/f_9.png +0 -0
- data/doc/files/bin/dskexplorer_rb.html +365 -0
- data/doc/files/bin/dskexplorer_rb.src/M000001.html +21 -0
- data/doc/files/bin/dskexplorer_rb.src/M000002.html +21 -0
- data/doc/files/bin/dskexplorer_rb.src/M000003.html +22 -0
- data/doc/files/bin/dskexplorer_rb.src/M000004.html +20 -0
- data/doc/files/bin/dskexplorer_rb.src/M000005.html +20 -0
- data/doc/files/bin/dskexplorer_rb.src/M000006.html +22 -0
- data/doc/files/bin/dskexplorer_rb.src/M000007.html +16 -0
- data/doc/files/bin/dskexplorer_rb.src/M000008.html +20 -0
- data/doc/files/bin/dskexplorer_rb.src/M000009.html +43 -0
- data/doc/files/bin/dskexplorer_rb.src/M000010.html +59 -0
- data/doc/files/bin/dskexplorer_rb.src/M000011.html +53 -0
- data/doc/files/bin/dskexplorer_rb.src/M000012.html +58 -0
- data/doc/files/bin/dskexplorer_rb.src/M000013.html +37 -0
- data/doc/files/bin/dsktool_rb.html +276 -0
- data/doc/files/bin/romdump_rb.html +189 -0
- data/doc/files/dsktool_web/dskexplorer_rb.html +112 -0
- data/doc/files/dsktool_web/dskexplorer_web_rb.html +112 -0
- data/doc/files/dsktool_web/index_rb.html +112 -0
- data/doc/files/lib/CPMDisk_rb.html +115 -0
- data/doc/files/lib/CPMFile_rb.html +117 -0
- data/doc/files/lib/D65_rb.html +114 -0
- data/doc/files/lib/DOSDisk_rb.html +115 -0
- data/doc/files/lib/DOSFile_rb.html +122 -0
- data/doc/files/lib/DSKFile_rb.html +114 -0
- data/doc/files/lib/DSK_rb.html +127 -0
- data/doc/files/lib/DumpUtilities_rb.html +107 -0
- data/doc/files/lib/HGR_rb.html +122 -0
- data/doc/files/lib/NADOLDisk_rb.html +115 -0
- data/doc/files/lib/NADOLFile_rb.html +120 -0
- data/doc/files/lib/Nibbles_rb.html +114 -0
- data/doc/files/test/tc_cpm_disks_rb.html +122 -0
- data/doc/files/test/tc_disassembly_rb.html +116 -0
- data/doc/files/test/tc_dos_disks_rb.html +122 -0
- data/doc/files/test/tc_modified_dos_disks_rb.html +122 -0
- data/doc/files/test/tc_nadol_disks_rb.html +122 -0
- data/doc/files/test/tc_prodos_disks_rb.html +122 -0
- data/doc/files/test/test_dos_disks_rb.html +109 -0
- data/doc/files/test/ts_test_all_rb.html +119 -0
- data/doc/files/test_bak/hgr_scanlines_rb.html +106 -0
- data/doc/files/test_bak/tc_disassembly_rb.html +123 -0
- data/doc/files/test_bak/tc_dos_disks_rb.html +122 -0
- data/doc/files/test_bak/tc_modified_dos_disks_rb.html +122 -0
- data/doc/files/test_bak/tc_nadol_disks_rb.html +122 -0
- data/doc/files/test_bak/tc_pascal_disks_rb.html +122 -0
- data/doc/files/test_bak/tc_prodos_disks_rb.html +122 -0
- data/doc/files/test_bak/ts_test_all_rb.html +118 -0
- data/doc/fr_class_index.html +46 -0
- data/doc/fr_file_index.html +47 -0
- data/doc/fr_method_index.html +147 -0
- data/doc/index.html +24 -0
- data/doc/rdoc-style.css +208 -0
- data/lib/CPMDisk.rb +194 -0
- data/lib/CPMFile.rb +344 -0
- data/lib/DOSDisk.rb +16 -12
- data/lib/DOSDisk.rb~ +201 -0
- data/lib/DOSFile.rb~ +402 -0
- data/lib/DSK.rb +99 -49
- data/lib/DSK.rb~ +226 -0
- data/lib/DSKFile.rb +9 -0
- data/lib/DSKFile.rb~ +137 -0
- data/lib/HGR.rb~ +157 -0
- data/lib/NADOLDisk.rb~ +104 -0
- data/lib/NADOLFile.rb~ +225 -0
- data/lib/Nibbles.rb +210 -0
- data/lib/PascalDisk.rb~ +120 -0
- data/lib/PascalFile.rb~ +62 -0
- data/lib/ProDOSDisk.rb~ +197 -0
- data/lib/ProDOSFile.rb~ +160 -0
- data/test/1.txt +267 -0
- data/test/CPM1.DSK +0 -0
- data/test/CPM1.PO +0 -0
- data/test/PIC.ZO +0 -0
- data/test/STARCPM.DSK +0 -0
- data/test/SWRDTH1.NIB +1 -0
- data/test/blah.png +0 -0
- data/test/blah2.png +0 -0
- data/test/blank.nib +1 -0
- data/test/build_hgr_table.rb +28 -0
- data/test/build_hgr_table.rb~ +28 -0
- data/test/cpm_write_test.dsk +0 -0
- data/test/ed.txt +0 -0
- data/test/p.html +15030 -0
- data/test/pic.rb +19 -0
- data/test/pic.rb~ +18 -0
- data/test/sword.dsk +0 -0
- data/test/tc_cpm_disks.rb +59 -0
- data/test/tc_dos_disks.rb~ +107 -0
- data/test/tc_modified_dos_disks.rb +33 -0
- data/test/tc_nadol_disks.rb +0 -1
- data/test/tc_nadol_disks.rb~ +42 -0
- data/test/tc_pascal_disks.rb~ +48 -0
- data/test/tc_prodos_disks.rb~ +78 -0
- data/test/ts_test_all.rb +6 -4
- data/test/ts_test_all.rb~ +7 -0
- data/test/x.txt +16 -0
- metadata +485 -35
data/lib/DSK.rb
CHANGED
@@ -10,12 +10,12 @@ require 'open-uri'
|
|
10
10
|
#
|
11
11
|
class DSK
|
12
12
|
|
13
|
-
FILE_SYSTEMS=[:prodos,:dos33,:nadol,:pascal,:unknown,:none]
|
13
|
+
FILE_SYSTEMS=[:prodos,:dos33,:nadol,:cpm,:pascal,:modified_dos,:unknown,:none]
|
14
14
|
SECTOR_ORDERS=[:physical,:dos]
|
15
|
-
DSK_IMAGE_EXTENSIONS=[".dsk",".po",".do",".hdv"]
|
15
|
+
DSK_IMAGE_EXTENSIONS=[".dsk",".po",".do",".hdv",".nib"]
|
16
16
|
INTERLEAVES={
|
17
17
|
:physical=> [0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F],
|
18
|
-
:dos=>[0x00,0x0E,0x0D,0x0C,0x0B,0x0A,0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x01,0x0F]
|
18
|
+
:dos=>[0x00,0x0E,0x0D,0x0C,0x0B,0x0A,0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x01,0x0F],
|
19
19
|
}
|
20
20
|
|
21
21
|
#does this filename have a suitable extension?
|
@@ -24,7 +24,8 @@ class DSK
|
|
24
24
|
DSK_IMAGE_EXTENSIONS.include?(extension)
|
25
25
|
end
|
26
26
|
DSK_FILE_LENGTH=143360
|
27
|
-
|
27
|
+
NIB_FILE_LENGTH=232960
|
28
|
+
attr_accessor :file_bytes,:sector_order,:track_count,:source_filename
|
28
29
|
|
29
30
|
def file_system
|
30
31
|
:unknown
|
@@ -63,12 +64,38 @@ class DSK
|
|
63
64
|
(vtoc_sector[01]<=34) && (vtoc_sector[02]<=15) && (vtoc_sector[0x27]==0x7A) && (vtoc_sector[0x35]==0x10)
|
64
65
|
end
|
65
66
|
|
67
|
+
def is_modified_dos?(vtoc_track_no,vtoc_sector_no)
|
68
|
+
vtoc_sector=get_sector(vtoc_track_no,vtoc_sector_no)
|
69
|
+
(vtoc_sector[01]<=34) && (vtoc_sector[02]<=15) && (vtoc_sector[0x27]==0x7A) && (vtoc_sector[0x35]==0x10)
|
70
|
+
end
|
71
|
+
|
66
72
|
def is_nadol?(sector_order)
|
67
73
|
#currently ignores sector order
|
68
74
|
# track $00, sector $02 , bytes $11 - "NADOL"
|
69
75
|
(@file_bytes[0x00211..0x00215]=="NADOL")
|
70
76
|
end
|
71
77
|
|
78
|
+
def is_cpm?(sector_order)
|
79
|
+
#currently ignores sector order
|
80
|
+
#look for a valid looking CPM directory on track 3.
|
81
|
+
#go through each sector in order, for each sector, look at every 32nd byte, and see if it is a valid 'user number' (i.e. a number from 00..0F). Stop looking when you see an 'E5'.
|
82
|
+
#if an invalid user number is found before an E5, then the disk is NOT a CPM disk
|
83
|
+
found_0xE5_byte=false
|
84
|
+
[0x0,0x6,0xC,0x3,0x9,0xF,0xE,0x5].each do |sector_no|
|
85
|
+
sector=get_sector(3,INTERLEAVES[sector_order][sector_no])
|
86
|
+
[0x00,0x20,0x40,0x60,0x80,0xA0,0xC0,0xE0].each do |byte_number|
|
87
|
+
if (sector[byte_number]>0x0F && sector[byte_number]!=0xe5 && sector[byte_number]!=0x1F) then
|
88
|
+
# puts "found #{sprintf '%02x',sector[byte_number]} at #{sprintf '%02x', byte_number} sector #{sprintf '%02x', sector_no}"
|
89
|
+
return false
|
90
|
+
end
|
91
|
+
if (sector[byte_number]==0xe5) then
|
92
|
+
found_0xE5_byte=true
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
96
|
+
return found_0xE5_byte #if we've only seen 00 bytes, then it's not really a CPM
|
97
|
+
end
|
98
|
+
|
72
99
|
def is_prodos?(sector_order)
|
73
100
|
#block $02 - bytes $00/$01 are both $00, byte $04 is $F?,
|
74
101
|
#bytes $29-$2A = sectors ( 0x118 on a 35 track 5.25" disk)
|
@@ -95,9 +122,10 @@ class DSK
|
|
95
122
|
@file_bytes=file_bytes
|
96
123
|
@files={}
|
97
124
|
@sector_order=sector_order
|
98
|
-
@track_count=file_bytes.length/4096
|
125
|
+
@track_count=file_bytes.length/4096
|
126
|
+
@source_filename="(unknown)"
|
99
127
|
end
|
100
|
-
|
128
|
+
|
101
129
|
#write out DSK to file
|
102
130
|
def save_as(filename)
|
103
131
|
if !(filename=~/\.gz$/).nil? then
|
@@ -119,6 +147,9 @@ class DSK
|
|
119
147
|
case filesystem
|
120
148
|
when :none
|
121
149
|
return DSK.new()
|
150
|
+
when :cpm
|
151
|
+
require 'CPMDisk'
|
152
|
+
return CPMDisk.new("\xe5"*DSK_FILE_LENGTH,:physical)
|
122
153
|
when :nadol
|
123
154
|
return DSK.read(File.dirname(__FILE__)+"/nadol_blank.po.gz")
|
124
155
|
when :dos33
|
@@ -127,58 +158,77 @@ class DSK
|
|
127
158
|
raise "initialisation of #{filesystem} file system not currently supported"
|
128
159
|
end
|
129
160
|
end
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
if !(filename=~/\.gz$/).nil? then
|
136
|
-
require 'zlib'
|
137
|
-
file_bytes=Zlib::GzipReader.new(open(filename,"rb")).read
|
138
|
-
else
|
139
|
-
file_bytes=open(filename,"rb").read
|
140
|
-
end
|
141
|
-
|
142
|
-
|
143
|
-
dsk=DSK.new(file_bytes)
|
144
|
-
SECTOR_ORDERS.each do |sector_order|
|
145
|
-
begin
|
161
|
+
|
162
|
+
#for a generic DSK,return an instance of subclass representing the the best match file system
|
163
|
+
def best_subclass
|
164
|
+
SECTOR_ORDERS.each do |sector_order|
|
165
|
+
begin
|
146
166
|
candidate_filesystem="unknown"
|
147
|
-
if (
|
148
|
-
require 'DOSDisk'
|
167
|
+
if (self.is_dos33?(sector_order))
|
168
|
+
require 'DOSDisk'
|
149
169
|
candidate_filesystem="DOS 3.3"
|
150
|
-
|
151
|
-
break
|
170
|
+
return DOSDisk.new(self.file_bytes,sector_order)
|
152
171
|
end
|
153
172
|
|
154
|
-
if (
|
155
|
-
require 'NADOLDisk'
|
173
|
+
if (self.is_nadol?(sector_order))
|
174
|
+
require 'NADOLDisk'
|
156
175
|
candidate_filesystem="NADOL"
|
157
|
-
|
158
|
-
break
|
176
|
+
return NADOLDisk.new(self.file_bytes,sector_order)
|
159
177
|
end
|
160
|
-
|
161
|
-
if (
|
162
|
-
require 'ProDOSDisk'
|
163
|
-
candidate_filesystem="ProDOS"
|
164
|
-
|
165
|
-
break
|
178
|
+
|
179
|
+
if (self.is_prodos?(sector_order))
|
180
|
+
require 'ProDOSDisk'
|
181
|
+
candidate_filesystem="ProDOS"
|
182
|
+
return ProDOSDisk.new(self.file_bytes,sector_order)
|
166
183
|
end
|
167
184
|
|
168
|
-
if (
|
169
|
-
require 'PascalDisk'
|
185
|
+
if (self.is_pascal?(sector_order))
|
186
|
+
require 'PascalDisk'
|
170
187
|
candidate_filesystem="Pascal"
|
171
|
-
|
172
|
-
break
|
188
|
+
return PascalDisk.new(self.file_bytes,sector_order)
|
173
189
|
end
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
190
|
+
|
191
|
+
if (self.is_cpm?(sector_order))
|
192
|
+
require 'CPMDisk'
|
193
|
+
candidate_filesystem="CP/M"
|
194
|
+
return CPMDisk.new(self.file_bytes,sector_order)
|
195
|
+
end
|
196
|
+
rescue Exception=>e
|
197
|
+
STDERR<<"error while parsing #{self.source_filename} as #{candidate_filesystem} (sector order #{sector_order}\n"
|
198
|
+
STDERR<<"#{e}\n"
|
199
|
+
STDERR<<e.backtrace.join("\n")
|
200
|
+
end
|
180
201
|
end
|
181
|
-
|
202
|
+
|
203
|
+
#if none of the above matched, look for a DOS image with a VTOC in the wrong spot
|
204
|
+
0.upto(0x22) do |track|
|
205
|
+
if (self.is_modified_dos?(track,0))
|
206
|
+
require 'DOSDisk'
|
207
|
+
candidate_filesystem="MODIFIED DOS"
|
208
|
+
return DOSDisk.new(self.file_bytes,:physical,track,0)
|
209
|
+
end
|
210
|
+
end
|
211
|
+
#if we didn't find a better match, return self
|
212
|
+
self
|
213
|
+
end
|
214
|
+
#read in an existing DSK file (must exist)
|
215
|
+
def DSK.read(filename)
|
216
|
+
#is the file extension .gz?
|
217
|
+
if !(filename=~/\.gz$/).nil? then
|
218
|
+
require 'zlib'
|
219
|
+
file_bytes=Zlib::GzipReader.new(open(filename,"rb")).read
|
220
|
+
else
|
221
|
+
file_bytes=open(filename,"rb").read
|
222
|
+
end
|
223
|
+
|
224
|
+
if (file_bytes.length-NIB_FILE_LENGTH).abs<=1 then
|
225
|
+
require 'Nibbles'
|
226
|
+
dsk=Nibbles.make_dsk_from_nibbles(file_bytes)
|
227
|
+
else
|
228
|
+
dsk=DSK.new(file_bytes)
|
229
|
+
end
|
230
|
+
dsk.source_filename=filename
|
231
|
+
dsk.best_subclass
|
182
232
|
end
|
183
233
|
|
184
234
|
def get_sector(track,requested_sector,sector_order=@sector_order)
|
@@ -186,7 +236,7 @@ class DSK
|
|
186
236
|
raise "bad sector_order #{sector_order}" if INTERLEAVES[sector_order].nil?
|
187
237
|
physical_sector=INTERLEAVES[sector_order][requested_sector]
|
188
238
|
start_byte=track*16*256+physical_sector*256
|
189
|
-
@file_bytes[start_byte
|
239
|
+
@file_bytes[start_byte,256]
|
190
240
|
end
|
191
241
|
|
192
242
|
def set_sector(track,sector,contents)
|
@@ -205,7 +255,7 @@ end
|
|
205
255
|
raise "boot code can't exceed 16 sectors" if sectors_needed>16
|
206
256
|
s=sectors_needed.chr+contents
|
207
257
|
for sector in 0..sectors_needed-1
|
208
|
-
sector_data=s[sector*256
|
258
|
+
sector_data=s[sector*256,256]
|
209
259
|
set_sector(0,sector,sector_data)
|
210
260
|
end
|
211
261
|
end
|
data/lib/DSK.rb~
ADDED
@@ -0,0 +1,226 @@
|
|
1
|
+
$:.unshift(File.dirname(__FILE__)) unless
|
2
|
+
$:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
|
3
|
+
require 'open-uri'
|
4
|
+
|
5
|
+
#
|
6
|
+
# For manipulating DSK files, as created by ADT (http://adt.berlios.de) and ADTPRo (http://adtpro.sourceforge.net)
|
7
|
+
# used by many Apple 2 emulators.
|
8
|
+
#
|
9
|
+
class DSK
|
10
|
+
|
11
|
+
FILE_SYSTEMS=[:prodos,:dos33,:nadol,:pascal,:unknown]
|
12
|
+
SECTOR_ORDERS=[:physical,:prodos_from_dos]
|
13
|
+
DSK_IMAGE_EXTENSIONS=[".dsk",".po",".do",".hdv"]
|
14
|
+
INTERLEAVES={
|
15
|
+
:physical=> [0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F],
|
16
|
+
:prodos_from_dos=>[0x00,0x0E,0x0D,0x0C,0x0B,0x0A,0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x01,0x0F]
|
17
|
+
}
|
18
|
+
|
19
|
+
#does this filename have a suitable extension?
|
20
|
+
def DSK.is_dsk_file?(filename)
|
21
|
+
extension=File.extname(File.basename(filename,".gz")).downcase
|
22
|
+
DSK_IMAGE_EXTENSIONS.include?(extension)
|
23
|
+
end
|
24
|
+
DSK_FILE_LENGTH=143360
|
25
|
+
attr_accessor :file_bytes,:sector_order,:track_count
|
26
|
+
|
27
|
+
def file_system
|
28
|
+
:unknown
|
29
|
+
end
|
30
|
+
|
31
|
+
# does this DSK have a standard Apple DOS 3.3 VTOC?
|
32
|
+
def is_dos33?(sector_order)
|
33
|
+
#currently ignores sector order
|
34
|
+
# VTOC is at offset 0x11000
|
35
|
+
# bytes 1 & 2 are a track number, sector number and DOS version number
|
36
|
+
# byte 27 is maximum number of track/sector pairs which will fit in one file track/sector list sector (122 for 256 byte sectors)
|
37
|
+
# 35 number of sectors per track (16)
|
38
|
+
# see if these are reasonable values
|
39
|
+
vtoc_sector=get_sector(0x11,0)
|
40
|
+
(vtoc_sector[01]<=34) && (vtoc_sector[02]<=15) && (vtoc_sector[0x27]==0x7A) && (vtoc_sector[0x35]==0x10)
|
41
|
+
end
|
42
|
+
|
43
|
+
def is_nadol?(sector_order)
|
44
|
+
#currently ignores sector order
|
45
|
+
# track $00, sector $02 , bytes $11 - "NADOL"
|
46
|
+
(@file_bytes[0x00211..0x00215]=="NADOL")
|
47
|
+
end
|
48
|
+
|
49
|
+
def is_prodos?(sector_order)
|
50
|
+
#block $02 - bytes $00/$01 are both $00, byte $04 is $F?,
|
51
|
+
#bytes $29-$2A = sectors ( 0x118 on a 35 track 5.25" disk)
|
52
|
+
first_sector_in_block_2=INTERLEAVES[sector_order][4]
|
53
|
+
first_sector_in_block_2=get_sector(0,4,sector_order)
|
54
|
+
(first_sector_in_block_2[0..1]=="\x00\x00") && (first_sector_in_block_2[4]>=0xF0) && (first_sector_in_block_2[0x29]+first_sector_in_block_2[0x2a]*0x100==track_count*8)
|
55
|
+
end
|
56
|
+
|
57
|
+
def is_pascal?(sector_order)
|
58
|
+
#block $02 - bytes $00..$01 are both $00, byte $06 is < 8 and
|
59
|
+
#bytes $0E-$0F = sectors ( 0x118 on a 35 track 5.25" disk)
|
60
|
+
first_sector_in_block_2=INTERLEAVES[sector_order][4]
|
61
|
+
first_sector_in_block_2=get_sector(0,4,sector_order)
|
62
|
+
(first_sector_in_block_2[0..1]=="\x00\x00") && (first_sector_in_block_2[6]<=7) && (first_sector_in_block_2[0x0E]+first_sector_in_block_2[0x0F]*0x100==track_count*8)
|
63
|
+
end
|
64
|
+
|
65
|
+
#create a new DSK structure (in memory, not on disk)
|
66
|
+
def initialize(file_bytes="\0"*DSK_FILE_LENGTH,sector_order=:physical)
|
67
|
+
#file must be a multiple of (16 sectors * 256 bytes) = 4096
|
68
|
+
#some dsks on Asimov appear to have an extra byte at the end so allow for 1 extra byte
|
69
|
+
if (file_bytes.length%4096>1) then
|
70
|
+
raise "DSK files must be #{DSK_FILE_LENGTH} bytes long (was #{file_bytes.length} bytes)"
|
71
|
+
end
|
72
|
+
@file_bytes=file_bytes
|
73
|
+
@files={}
|
74
|
+
@sector_order=sector_order
|
75
|
+
@track_count=file_bytes.length/4096
|
76
|
+
end
|
77
|
+
|
78
|
+
#read in an existing DSK file (must exist)
|
79
|
+
def DSK.read(filename)
|
80
|
+
#is the file extension .gz?
|
81
|
+
if !(filename=~/\.gz$/).nil? then
|
82
|
+
require 'zlib'
|
83
|
+
file_bytes=Zlib::GzipReader.new(open(filename,"rb")).read
|
84
|
+
else
|
85
|
+
file_bytes=open(filename,"rb").read
|
86
|
+
end
|
87
|
+
|
88
|
+
|
89
|
+
dsk=DSK.new(file_bytes)
|
90
|
+
SECTOR_ORDERS.each do |sector_order|
|
91
|
+
begin
|
92
|
+
candidate_filesystem="unknown"
|
93
|
+
if (dsk.is_dos33?(sector_order))
|
94
|
+
require 'DOSDisk'
|
95
|
+
candidate_filesystem="DOS 3.3"
|
96
|
+
dsk=DOSDisk.new(file_bytes,sector_order)
|
97
|
+
break
|
98
|
+
end
|
99
|
+
|
100
|
+
if (dsk.is_nadol?(sector_order))
|
101
|
+
require 'NADOLDisk'
|
102
|
+
candidate_filesystem="NADOL"
|
103
|
+
dsk=NADOLDisk.new(file_bytes,sector_order)
|
104
|
+
break
|
105
|
+
end
|
106
|
+
|
107
|
+
if (dsk.is_prodos?(sector_order))
|
108
|
+
require 'ProDOSDisk'
|
109
|
+
candidate_filesystem="ProDOS"
|
110
|
+
dsk=ProDOSDisk.new(file_bytes,sector_order)
|
111
|
+
break
|
112
|
+
end
|
113
|
+
|
114
|
+
if (dsk.is_pascal?(sector_order))
|
115
|
+
require 'PascalDisk'
|
116
|
+
candidate_filesystem="Pascal"
|
117
|
+
dsk=PascalDisk.new(file_bytes,sector_order)
|
118
|
+
break
|
119
|
+
end
|
120
|
+
|
121
|
+
rescue Exception=>e
|
122
|
+
STDERR<<"error while parsing #{filename} as #{candidate_filesystem} (sector order #{sector_order}\n"
|
123
|
+
STDERR<<"#{e}\n"
|
124
|
+
STDERR<<e.backtrace.join("\n")
|
125
|
+
end
|
126
|
+
end
|
127
|
+
dsk
|
128
|
+
end
|
129
|
+
|
130
|
+
def get_sector(track,requested_sector,sector_order=@sector_order)
|
131
|
+
raise "bad sector #{requested_sector}" unless requested_sector.between?(0,0x0F)
|
132
|
+
raise "bad sector_order #{sector_order}" if INTERLEAVES[sector_order].nil?
|
133
|
+
physical_sector=INTERLEAVES[sector_order][requested_sector]
|
134
|
+
start_byte=track*16*256+physical_sector*256
|
135
|
+
@file_bytes[start_byte..start_byte+255]
|
136
|
+
end
|
137
|
+
|
138
|
+
def get_block(block_no)
|
139
|
+
track=(block_no / 8).to_i
|
140
|
+
first_sector=2*(block_no % 8)
|
141
|
+
raise "illegal block no #{block_no}" if track>=self.track_count
|
142
|
+
return self.get_sector(track,first_sector)+self.get_sector(track,first_sector+1)
|
143
|
+
end
|
144
|
+
|
145
|
+
def files
|
146
|
+
@files
|
147
|
+
end
|
148
|
+
|
149
|
+
#return a formatted hex dump of a single 256 byte sector
|
150
|
+
def dump_sector(track,sector)
|
151
|
+
start_byte=track.to_i*16*256+sector.to_i*256
|
152
|
+
s=hline
|
153
|
+
s<<sprintf("TRACK: $%02X SECTOR $%02X\ OFFSET $%04X\n",track,sector,start_byte)
|
154
|
+
s<< "\t"
|
155
|
+
sector_data=get_sector(track,sector)
|
156
|
+
(0..15).each {|x| s<<sprintf("%02X ",x) }
|
157
|
+
s<<"\n"
|
158
|
+
s<<hline
|
159
|
+
(0..15).each {|line_number|
|
160
|
+
lhs=""
|
161
|
+
rhs=""
|
162
|
+
start_byte=line_number*16
|
163
|
+
line=sector_data[start_byte..start_byte+15]
|
164
|
+
line.each_byte {|byte|
|
165
|
+
lhs<< sprintf("%02X ", byte)
|
166
|
+
rhs<< (byte%128).chr.sub(/[\x00-\x1f]/,'.')
|
167
|
+
}
|
168
|
+
s<<sprintf("%02X\t%s %s\n",start_byte,lhs,rhs)
|
169
|
+
}
|
170
|
+
s
|
171
|
+
end
|
172
|
+
|
173
|
+
#return a formatted hex dump of a single 256 byte sector
|
174
|
+
def disassemble_sector(track,sector)
|
175
|
+
require 'D65'
|
176
|
+
sector_data=get_sector(track,sector)
|
177
|
+
if (track==0) && (sector==0) then
|
178
|
+
return D65.disassemble(sector_data[1..255],0x801)
|
179
|
+
else
|
180
|
+
return D65.disassemble(sector_data)
|
181
|
+
end
|
182
|
+
end
|
183
|
+
|
184
|
+
#return a formatted hex dump of all sectors on all tracks
|
185
|
+
def hex_dump
|
186
|
+
s=""
|
187
|
+
(0..34).each {|track|
|
188
|
+
(0..15).each {|sector|
|
189
|
+
s<<dump_sector(track,sector)
|
190
|
+
}
|
191
|
+
}
|
192
|
+
s
|
193
|
+
end
|
194
|
+
|
195
|
+
private
|
196
|
+
|
197
|
+
def hline
|
198
|
+
"-"*79+"\n"
|
199
|
+
end
|
200
|
+
|
201
|
+
|
202
|
+
end
|
203
|
+
# == Author
|
204
|
+
# Jonno Downes (jonno@jamtronix.com)
|
205
|
+
#
|
206
|
+
# == Copyright
|
207
|
+
# Copyright (c) 2007 Jonno Downes (jonno@jamtronix.com)
|
208
|
+
#
|
209
|
+
#Permission is hereby granted, free of charge, to any person obtaining
|
210
|
+
#a copy of this software and associated documentation files (the
|
211
|
+
#"Software"), to deal in the Software without restriction, including
|
212
|
+
#without limitation the rights to use, copy, modify, merge, publish,
|
213
|
+
#distribute, sublicense, and/or sell copies of the Software, and to
|
214
|
+
#permit persons to whom the Software is furnished to do so, subject to
|
215
|
+
#the following conditions:
|
216
|
+
|
217
|
+
# The above copyright notice and this permission notice shall be
|
218
|
+
# included in all copies or substantial portions of the Software.
|
219
|
+
|
220
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
221
|
+
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
222
|
+
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
223
|
+
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
224
|
+
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
225
|
+
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
226
|
+
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/lib/DSKFile.rb
CHANGED
@@ -15,6 +15,15 @@ class DSKFile
|
|
15
15
|
@contents
|
16
16
|
end
|
17
17
|
|
18
|
+
def to_ascii
|
19
|
+
s=""
|
20
|
+
@contents.each_byte do |b|
|
21
|
+
s+=(b%0x80).chr.gsub(0x0D.chr,"\r\n")#.gsub(0x0A.chr,"\n")
|
22
|
+
end
|
23
|
+
return s.gsub(/\0/," ")
|
24
|
+
#return s.sub(/\0*$/,"")
|
25
|
+
end
|
26
|
+
|
18
27
|
def ==(other_object)
|
19
28
|
if !other_object.kind_of? DSKFile then
|
20
29
|
return false
|