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/DSKFile.rb~
ADDED
@@ -0,0 +1,137 @@
|
|
1
|
+
$:.unshift(File.dirname(__FILE__)) unless
|
2
|
+
$:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
|
3
|
+
|
4
|
+
|
5
|
+
|
6
|
+
#Generic Apple II file
|
7
|
+
class DSKFile
|
8
|
+
attr_accessor(:filename,:contents)
|
9
|
+
def initialize(filename,contents)
|
10
|
+
@filename=filename
|
11
|
+
@contents=contents
|
12
|
+
end
|
13
|
+
|
14
|
+
def to_s
|
15
|
+
@contents
|
16
|
+
end
|
17
|
+
|
18
|
+
def file_extension
|
19
|
+
".bin"
|
20
|
+
end
|
21
|
+
def hex_dump
|
22
|
+
s=""
|
23
|
+
(0..(@contents.length/16)).each {|line_number|
|
24
|
+
lhs=""
|
25
|
+
rhs=""
|
26
|
+
start_byte=line_number*16
|
27
|
+
line=@contents[start_byte..start_byte+15]
|
28
|
+
if line.length>0 then
|
29
|
+
line.each_byte {|byte|
|
30
|
+
lhs+= sprintf("%02X ", byte)
|
31
|
+
rhs+= (byte%128).chr.sub(/[\x00-\x1f]/,'.')
|
32
|
+
}
|
33
|
+
lhs+=" "*(16-line.length)*3
|
34
|
+
s+=sprintf("%02X\t%s %s\n",start_byte,lhs,rhs)
|
35
|
+
end
|
36
|
+
}
|
37
|
+
s
|
38
|
+
end
|
39
|
+
|
40
|
+
#default is files can NOT be displayed as a picture
|
41
|
+
def can_be_picture?
|
42
|
+
false
|
43
|
+
end
|
44
|
+
# Adapted from FID.C -- a utility to browse Apple II .DSK image files by Paul Schlyter (pausch@saaf.se)
|
45
|
+
#
|
46
|
+
#Applesoft file format:
|
47
|
+
# <Length_of_file> (16-bit little endian)
|
48
|
+
# <Line>
|
49
|
+
# ......
|
50
|
+
# <Line>
|
51
|
+
# where <Line> is:
|
52
|
+
# <Next addr> (16-bit little endian)
|
53
|
+
# <Line no> (16-bit little endian: 0-65535)
|
54
|
+
# <Tokens and/or characters>
|
55
|
+
# <End-of-line marker: $00 >
|
56
|
+
#
|
57
|
+
APPLESOFT_TOKENS = [
|
58
|
+
"END","FOR","NEXT","DATA","INPUT","DEL","DIM","READ",
|
59
|
+
"GR","TEXT","PR#","IN#","CALL","PLOT","HLIN","VLIN",
|
60
|
+
"HGR2","HGR","HCOLOR=","HPLOT","DRAW","XDRAW","HTAB",
|
61
|
+
"HOME","ROT=","SCALE=","SHLOAD","TRACE","NOTRACE",
|
62
|
+
"NORMAL","INVERSE","FLASH","COLOR=","POP","VTAB",
|
63
|
+
"HIMEM=","LOMEM=","ONERR","RESUME","RECALL","STORE",
|
64
|
+
"SPEED=","LET","GOTO","RUN","IF","RESTORE","&","GOSUB",
|
65
|
+
"RETURN","REM","STOP","ON","WAIT","LOAD","SAVE","DEF",
|
66
|
+
"POKE","PRINT","CONT","LIST","CLEAR","GET","NEW",
|
67
|
+
"TAB(","TO","FN","SPC(","THEN","AT","NOT","STEP","+",
|
68
|
+
"-","*","/","^","AND","OR",">","=","<","SGN","INT",
|
69
|
+
"ABS","USR","FRE","SCRN(","PDL","POS","SQR","RND",
|
70
|
+
"LOG","EXP","COS","SIN","TAN","ATN","PEEK","LEN",
|
71
|
+
"STR$","VAL","ASC","CHR$", "LEFT$","RIGHT$","MID$","?",
|
72
|
+
"?","?","?","?","?","?","?","?","?","?","?","?","?","?","?","?","?","?","?","?"
|
73
|
+
]
|
74
|
+
|
75
|
+
def buffer_as_applesoft_file(buffer)
|
76
|
+
|
77
|
+
length=buffer[0]+buffer[1]*256
|
78
|
+
index=2
|
79
|
+
s=""
|
80
|
+
while (index<length)
|
81
|
+
index+=2 #skip over the "next address" field
|
82
|
+
break if buffer[index].nil?
|
83
|
+
break if buffer[index+1].nil?
|
84
|
+
line_no=buffer[index]+buffer[index+1]*256
|
85
|
+
index+=2 #skip over the "line number" field
|
86
|
+
s+=sprintf("%u",line_no)
|
87
|
+
done_line=false
|
88
|
+
last_char_space=false
|
89
|
+
while (!done_line)
|
90
|
+
b=buffer[index]
|
91
|
+
break if b.nil?
|
92
|
+
if b>=0x80 then
|
93
|
+
if !last_char_space then
|
94
|
+
s+=" "
|
95
|
+
end
|
96
|
+
s+=APPLESOFT_TOKENS[b-0x80]+" "
|
97
|
+
last_char_space=true
|
98
|
+
else
|
99
|
+
s+=b.chr
|
100
|
+
last_char_space=false
|
101
|
+
end
|
102
|
+
index+=1
|
103
|
+
done_line=(index>=length)||(buffer[index]==0)
|
104
|
+
end
|
105
|
+
s+="\n"
|
106
|
+
index+=1 # skip over "end of line" marker
|
107
|
+
end
|
108
|
+
s
|
109
|
+
end
|
110
|
+
end
|
111
|
+
|
112
|
+
|
113
|
+
|
114
|
+
# == Author
|
115
|
+
# Jonno Downes (jonno@jamtronix.com)
|
116
|
+
#
|
117
|
+
# == Copyright
|
118
|
+
# Copyright (c) 2007 Jonno Downes (jonno@jamtronix.com)
|
119
|
+
#
|
120
|
+
#Permission is hereby granted, free of charge, to any person obtaining
|
121
|
+
#a copy of this software and associated documentation files (the
|
122
|
+
#"Software"), to deal in the Software without restriction, including
|
123
|
+
#without limitation the rights to use, copy, modify, merge, publish,
|
124
|
+
#distribute, sublicense, and/or sell copies of the Software, and to
|
125
|
+
#permit persons to whom the Software is furnished to do so, subject to
|
126
|
+
#the following conditions:
|
127
|
+
|
128
|
+
# The above copyright notice and this permission notice shall be
|
129
|
+
# included in all copies or substantial portions of the Software.
|
130
|
+
|
131
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
132
|
+
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
133
|
+
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
134
|
+
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
135
|
+
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
136
|
+
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
137
|
+
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/lib/HGR.rb~
ADDED
@@ -0,0 +1,157 @@
|
|
1
|
+
#Apple II Hi-Res Graphics routines
|
2
|
+
$:.unshift(File.dirname(__FILE__)) unless
|
3
|
+
$:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
|
4
|
+
|
5
|
+
require 'rubygems'
|
6
|
+
require_gem 'png', '= 1.0.0'
|
7
|
+
require 'png'
|
8
|
+
#need to add a new method to PNG to get at the raw bytes as the png library only writes to disk
|
9
|
+
class PNG
|
10
|
+
def raw_bytes
|
11
|
+
bytes=""
|
12
|
+
bytes<< [137, 80, 78, 71, 13, 10, 26, 10].pack("C*") # PNG signature
|
13
|
+
bytes<< PNG.chunk('IHDR',
|
14
|
+
[ @height, @width, @bits, 6, 0, 0, 0 ].pack("N2C5"))
|
15
|
+
# 0 == filter type code "none"
|
16
|
+
data = @data.map { |row| [0] + row.map { |p| p.values } }.flatten
|
17
|
+
bytes<< PNG.chunk('IDAT', Zlib::Deflate.deflate(data.pack("C*"), 9))
|
18
|
+
bytes<< PNG.chunk('IEND', '')
|
19
|
+
bytes
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
class HGR
|
24
|
+
|
25
|
+
PALLETE_MODES=[:white,:green,:amber,:colour]
|
26
|
+
PALLETE={
|
27
|
+
:white=>PNG::Color::White,
|
28
|
+
:green=>PNG::Color.new(0x00, 0x99, 0x00, 0xFF),
|
29
|
+
:amber=>PNG::Color::Orange
|
30
|
+
}
|
31
|
+
|
32
|
+
#colours cribbed from http://groups.google.com.au/group/comp.sys.apple2/browse_thread/thread/b9aa36ead6935c42/faa0f4df3e89060f
|
33
|
+
HGR_BLACK=PNG::Color::Black #color=0,4
|
34
|
+
HGR_GREEN=PNG::Color.new(0x2F,0xB8,0x1F,0xFF) #color=1
|
35
|
+
HGR_VIOLET=PNG::Color.new(0xC8,0x47,0xE4,0xFF) #color=2
|
36
|
+
HGR_WHITE=PNG::Color::White #color=3,7
|
37
|
+
HGR_ORANGE=PNG::Color.new(0xC7,0x70,0x28,0xFF) #color=5
|
38
|
+
HGR_BLUE=PNG::Color.new(0x30,0x8F,0xE3,0xFF) #color=6
|
39
|
+
|
40
|
+
HGR_COLS=40*7
|
41
|
+
HGR_ROWS=8*8*3
|
42
|
+
SCALE=2
|
43
|
+
|
44
|
+
#per Apple // Reference Manual for //e chapter 2, pages 22-35
|
45
|
+
#also TechNote - Apple IIe #3 Double High-Resolution Graphics - http://web.pdx.edu/~heiss/technotes/aiie/tn.aiie.03.html
|
46
|
+
#HGR screen consists of 3 bands of 8 rows of 8 scanlines
|
47
|
+
#for each absolute scanline, what is the offset into screen ram that the 40 bytes for this scanline is stored?
|
48
|
+
|
49
|
+
@@scanline_offsets=Array.new(HGR_ROWS)
|
50
|
+
|
51
|
+
0.upto(2) do |band|
|
52
|
+
0.upto(7) do |row|
|
53
|
+
0.upto(7) do |relative_scanline|
|
54
|
+
band_ram_offset=band*40
|
55
|
+
band_scanline_offset=band*64
|
56
|
+
scanline_ram_offset=relative_scanline*1024
|
57
|
+
scanline_scanline_offset=relative_scanline
|
58
|
+
row_ram_offset=128*row
|
59
|
+
row_scanline_offset=8*row
|
60
|
+
scanline_offset=band_scanline_offset+scanline_scanline_offset+row_scanline_offset
|
61
|
+
ram_offset=band_ram_offset+scanline_ram_offset+row_ram_offset
|
62
|
+
@@scanline_offsets[scanline_offset]=ram_offset
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
|
68
|
+
0.upto(HGR_ROWS-1) do |scanline|
|
69
|
+
puts "no offset defined for scanline #{scanline}" if @@scanline_offsets[scanline].nil?
|
70
|
+
end
|
71
|
+
#HGR screen is 8192 bytes stored at either $2000 (page 1) or $4000 (page 2)
|
72
|
+
def HGR.can_be_hgr_screen?(buffer,memory_location=nil)
|
73
|
+
if ((memory_location.nil?) || (memory_location==0) || (memory_location==0x2000) || (memory_location==0x4000)) then
|
74
|
+
#because only 120 out of every 128 bytes are shown, the last 8 bytes are not needed
|
75
|
+
#in order to save a sector under dos 3.3 it was common to only store 8192=8184 (0x1FF8) bytes
|
76
|
+
#sometimes an extra sector was included by mistake
|
77
|
+
if (buffer.length>=8184 && buffer.length<=8192) || buffer.length==8444
|
78
|
+
return true
|
79
|
+
end
|
80
|
+
end
|
81
|
+
false
|
82
|
+
end
|
83
|
+
|
84
|
+
private
|
85
|
+
def HGR.set_pixel(canvas,x,y,colour)
|
86
|
+
0.upto(SCALE-1) do |row|
|
87
|
+
0.upto(SCALE-1) do |col|
|
88
|
+
canvas[x*SCALE+col, y*SCALE+row]= colour
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
public
|
94
|
+
def HGR.buffer_to_png(buffer,pallete_mode=:amber)
|
95
|
+
canvas = PNG::Canvas.new HGR_COLS*SCALE, HGR_ROWS*SCALE, PNG::Color::Black
|
96
|
+
0.upto(HGR_ROWS-1) do |y|
|
97
|
+
last_bit_set=false
|
98
|
+
0.upto(39) do |x_byte|
|
99
|
+
offset=@@scanline_offsets[y]+x_byte
|
100
|
+
current_byte=buffer[offset]
|
101
|
+
current_byte=0 if current_byte.nil? #if we overrun the buffer then assume it's black
|
102
|
+
0.upto(6) do |x_bit|
|
103
|
+
x=x_byte*7+x_bit
|
104
|
+
bit_set=((current_byte & (2**x_bit))>0)
|
105
|
+
if (bit_set) then
|
106
|
+
if pallete_mode==:colour then
|
107
|
+
if (last_bit_set) then
|
108
|
+
#adjacent pixels should both be white
|
109
|
+
set_pixel(canvas,x-1,y,HGR_WHITE)
|
110
|
+
set_pixel(canvas,x,y,HGR_WHITE)
|
111
|
+
else
|
112
|
+
if current_byte>=0x80 then
|
113
|
+
pallete=[HGR_BLUE,HGR_ORANGE]
|
114
|
+
else
|
115
|
+
pallete=[HGR_VIOLET,HGR_GREEN]
|
116
|
+
end
|
117
|
+
this_pixel_colour=pallete[x%2]
|
118
|
+
set_pixel(canvas,x,y,this_pixel_colour)
|
119
|
+
end
|
120
|
+
else
|
121
|
+
this_pixel_colour=PALLETE[pallete_mode]
|
122
|
+
this_pixel_colour=PALLETE.values[0] if this_pixel_colour.nil?
|
123
|
+
set_pixel(canvas,x,y,this_pixel_colour)
|
124
|
+
end
|
125
|
+
end
|
126
|
+
last_bit_set=bit_set
|
127
|
+
end
|
128
|
+
end
|
129
|
+
end
|
130
|
+
png = PNG.new canvas
|
131
|
+
png.raw_bytes
|
132
|
+
end
|
133
|
+
end
|
134
|
+
# == Author
|
135
|
+
# Jonno Downes (jonno@jamtronix.com)
|
136
|
+
#
|
137
|
+
# == Copyright
|
138
|
+
# Copyright (c) 2007 Jonno Downes (jonno@jamtronix.com)
|
139
|
+
#
|
140
|
+
#Permission is hereby granted, free of charge, to any person obtaining
|
141
|
+
#a copy of this software and associated documentation files (the
|
142
|
+
#"Software"), to deal in the Software without restriction, including
|
143
|
+
#without limitation the rights to use, copy, modify, merge, publish,
|
144
|
+
#distribute, sublicense, and/or sell copies of the Software, and to
|
145
|
+
#permit persons to whom the Software is furnished to do so, subject to
|
146
|
+
#the following conditions:
|
147
|
+
|
148
|
+
# The above copyright notice and this permission notice shall be
|
149
|
+
# included in all copies or substantial portions of the Software.
|
150
|
+
|
151
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
152
|
+
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
153
|
+
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
154
|
+
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
155
|
+
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
156
|
+
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
157
|
+
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/lib/NADOLDisk.rb~
ADDED
@@ -0,0 +1,104 @@
|
|
1
|
+
$:.unshift(File.dirname(__FILE__)) unless
|
2
|
+
$:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
|
3
|
+
|
4
|
+
# Disk image in NADOL format
|
5
|
+
#
|
6
|
+
#CATALOG will be at track $00, sector $03 to track $00, sector $09
|
7
|
+
#each entry consists of $10 bytes, which are:
|
8
|
+
# 00-0B - filename - if file is deleted, first byte will be FF
|
9
|
+
# 0C-0D - filesize (low byte first)
|
10
|
+
# 0E - track of track sector list sector
|
11
|
+
# 0F - sector of track sector list sector
|
12
|
+
|
13
|
+
#TRACK/SECTOR LIST FORMAT
|
14
|
+
# pairs of track/sectors in order. up to 128 entries [assumes that no file can be > 128 sectors]
|
15
|
+
|
16
|
+
require 'NADOLFile'
|
17
|
+
|
18
|
+
class NADOLDisk < DSK
|
19
|
+
|
20
|
+
def dump_catalog
|
21
|
+
s=""
|
22
|
+
files.keys.sort.each { |file_name|
|
23
|
+
file=files[file_name]
|
24
|
+
s<< "#{sprintf('% 6d',file.contents.length)} #{file.filename}\n"
|
25
|
+
}
|
26
|
+
s
|
27
|
+
end
|
28
|
+
|
29
|
+
def initialize(file_bytes,sector_order)
|
30
|
+
super(file_bytes,sector_order)
|
31
|
+
self.read_catalog
|
32
|
+
end
|
33
|
+
|
34
|
+
def file_system
|
35
|
+
:nadol
|
36
|
+
end
|
37
|
+
|
38
|
+
#reads the catalog, and populate the "files" array with files
|
39
|
+
#CATALOG will be at track $00, sector $03 to track $00, sector $09
|
40
|
+
#each entry consists of $10 bytes, which are:
|
41
|
+
# 00-0B - filename - if file is deleted, first byte will be FF
|
42
|
+
# 0C-0D - filesize (low byte first)
|
43
|
+
# 0E - track of track sector list sector
|
44
|
+
# 0F - sector of track sector list sector
|
45
|
+
def read_catalog
|
46
|
+
0x300.step(0x9FF,0x10) do |file_descriptive_entry_start|
|
47
|
+
file_descriptive_entry=@file_bytes[file_descriptive_entry_start..file_descriptive_entry_start+0x0F]
|
48
|
+
break if (file_descriptive_entry[0]==0xFF) # skip deleted files
|
49
|
+
filename=""
|
50
|
+
file_descriptive_entry[0..11].to_s.each_byte{|b| filename+=(b.%128).chr} #strip off high bit
|
51
|
+
filename.sub!(/ *$/,"") #strip off trailing spaces
|
52
|
+
full_sectors=file_descriptive_entry[0x0D]
|
53
|
+
bytes_in_last_sector=file_descriptive_entry[0x0C]
|
54
|
+
file_size=full_sectors*256+bytes_in_last_sector
|
55
|
+
if (file_size>0) then
|
56
|
+
contents=""
|
57
|
+
ts_list_track_no=file_descriptive_entry[0x0E]
|
58
|
+
ts_list_sector_no=file_descriptive_entry[0x0F]
|
59
|
+
ts_list=get_sector(ts_list_track_no,ts_list_sector_no)
|
60
|
+
entry_number=0
|
61
|
+
while entry_number<full_sectors do
|
62
|
+
data_track_no=ts_list[entry_number*2]
|
63
|
+
data_sector_no=ts_list[entry_number*2+1]
|
64
|
+
contents+=get_sector(data_track_no,data_sector_no)
|
65
|
+
entry_number+=1
|
66
|
+
end
|
67
|
+
if (bytes_in_last_sector>0) then
|
68
|
+
data_track_no=ts_list[entry_number*2]
|
69
|
+
data_sector_no=ts_list[entry_number*2+1]
|
70
|
+
contents+=get_sector(data_track_no,data_sector_no)[0..bytes_in_last_sector-1]
|
71
|
+
end
|
72
|
+
if (NADOLTokenisedFile.can_be_nadol_tokenised_file?(contents)) then
|
73
|
+
@files[filename]= NADOLTokenisedFile.new(filename,contents)
|
74
|
+
else
|
75
|
+
@files[filename]= NADOLBinaryFile.new(filename,contents)
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
# == Author
|
82
|
+
# Jonno Downes (jonno@jamtronix.com)
|
83
|
+
#
|
84
|
+
# == Copyright
|
85
|
+
# Copyright (c) 2007 Jonno Downes (jonno@jamtronix.com)
|
86
|
+
#
|
87
|
+
#Permission is hereby granted, free of charge, to any person obtaining
|
88
|
+
#a copy of this software and associated documentation files (the
|
89
|
+
#"Software"), to deal in the Software without restriction, including
|
90
|
+
#without limitation the rights to use, copy, modify, merge, publish,
|
91
|
+
#distribute, sublicense, and/or sell copies of the Software, and to
|
92
|
+
#permit persons to whom the Software is furnished to do so, subject to
|
93
|
+
#the following conditions:
|
94
|
+
|
95
|
+
# The above copyright notice and this permission notice shall be
|
96
|
+
# included in all copies or substantial portions of the Software.
|
97
|
+
|
98
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
99
|
+
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
100
|
+
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
101
|
+
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
102
|
+
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
103
|
+
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
104
|
+
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/lib/NADOLFile.rb~
ADDED
@@ -0,0 +1,225 @@
|
|
1
|
+
$:.unshift(File.dirname(__FILE__)) unless
|
2
|
+
$:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
|
3
|
+
|
4
|
+
require 'D65'
|
5
|
+
require 'DSKFile'
|
6
|
+
|
7
|
+
#NADOL (Nibbles Away Disk Optimized Language) file
|
8
|
+
class NADOLFile < DSKFile
|
9
|
+
def file_extension
|
10
|
+
".bin"
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
#a file on a NADOL dsk that does not appear to be in NADOL tokenised format
|
15
|
+
class NADOLBinaryFile<NADOLFile
|
16
|
+
def disassembly(start_address=0x8000)
|
17
|
+
require 'D65'
|
18
|
+
D65.disassemble(@contents,start_address)
|
19
|
+
end
|
20
|
+
|
21
|
+
def can_be_picture?
|
22
|
+
HGR.can_be_hgr_screen?(@contents)
|
23
|
+
end
|
24
|
+
|
25
|
+
def to_png(pallete_mode=:amber)
|
26
|
+
HGR.buffer_to_png(@contents)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
|
31
|
+
#file packed by the NADOL EDITOR application.
|
32
|
+
#format is a series of unnumbered lines, where each line has the following format:
|
33
|
+
# <Length> (8-bit: including length byte, line no, contents, zero>
|
34
|
+
# <Tokens and/or Characters>
|
35
|
+
# <Zero byte> ($00, to mark the end of the S-C Asm source line)
|
36
|
+
# each byte in the line is interpreted as follows:
|
37
|
+
# $00 - end of line marker
|
38
|
+
# $01 - $64 - NADOL tokens
|
39
|
+
# $65 - $70 - ??? unknown
|
40
|
+
# $71 - $7f - 1 to F spaces
|
41
|
+
# $80 - $FF - ASCII character with high bit set
|
42
|
+
class NADOLTokenisedFile < NADOLFile
|
43
|
+
NADOL_EDITOR_TOKENS = [
|
44
|
+
"?", #00 (so we can use token as an index in to this array)
|
45
|
+
"READ(", #01
|
46
|
+
"FREE(", #02
|
47
|
+
"NOT(", #03
|
48
|
+
"LENGTH(", #04
|
49
|
+
"PDL(", #05
|
50
|
+
"SIZEOF(", #06
|
51
|
+
"LSCRN(", #07
|
52
|
+
"HSCRN(", #08
|
53
|
+
"CHECK(", #09
|
54
|
+
"MAKE(", #0a
|
55
|
+
"SCREEN(", #0b
|
56
|
+
"HEXPACK ",#0c
|
57
|
+
"PROCEDURE ",#0d
|
58
|
+
"ENDPROC", #0e
|
59
|
+
"FUNCTION ",#0f
|
60
|
+
"ENDFUNC", #10
|
61
|
+
"IF ", #11
|
62
|
+
"ELSE", #12
|
63
|
+
"ENDIF", #13
|
64
|
+
"WHILE ", #14
|
65
|
+
"ENDWHILE",#15
|
66
|
+
"DEFINE ", #16
|
67
|
+
"RESULT=", #17
|
68
|
+
"PRINT", #18
|
69
|
+
"PRINTHEX",#19
|
70
|
+
"PRINTBYTE",#1a
|
71
|
+
"LABEL ", #1b
|
72
|
+
"GOTO ", #1c
|
73
|
+
"INVERSE", #1d
|
74
|
+
"NORMAL", #1e
|
75
|
+
"FLASH", #1f
|
76
|
+
"CASE ", #20
|
77
|
+
"GOTOXY(", #21
|
78
|
+
"CLEAR", #22
|
79
|
+
"NEW", #23
|
80
|
+
"HOME", #24
|
81
|
+
"CLREOL", #25
|
82
|
+
"CLREOP", #26
|
83
|
+
"PRBLOCK(",#27
|
84
|
+
"STOP", #28
|
85
|
+
"COPY(", #29
|
86
|
+
"FILL(", #2a
|
87
|
+
"MASK(", #2b
|
88
|
+
"RSECT(", #2c
|
89
|
+
"WSECT(", #2d
|
90
|
+
"RBLOCK(", #2e
|
91
|
+
"WBLOCK(", #2f
|
92
|
+
"WTRACK(", #30
|
93
|
+
"WSYNC(", #31
|
94
|
+
"RECAL(", #32
|
95
|
+
"DISPLAY(",#33
|
96
|
+
"RTRACK(", #34
|
97
|
+
"RSYNC(", #35
|
98
|
+
"BEEP(", #36
|
99
|
+
"DISASM(", #37
|
100
|
+
"TEXT", #38
|
101
|
+
"FORMAT(", #39
|
102
|
+
"SETFORMAT(",#3a
|
103
|
+
"WORKDRIVE ",#3b
|
104
|
+
"INIT ", #3c
|
105
|
+
"LOAD ", #3d
|
106
|
+
"SAVE ", #3e
|
107
|
+
"CATALOG", #3f
|
108
|
+
"DELETE ", #40
|
109
|
+
"RENAME ", #41
|
110
|
+
"PACK ", #42
|
111
|
+
"CONVERT(",#43
|
112
|
+
"INPUT(", #44
|
113
|
+
"LORES", #45
|
114
|
+
"PLOT(", #46
|
115
|
+
"HLINE(", #47
|
116
|
+
"VLINE(", #48
|
117
|
+
"COLOR=", #49
|
118
|
+
"FIND(", #4a
|
119
|
+
"HIRES", #4b
|
120
|
+
"HCOLOR=", #4c
|
121
|
+
"HPLOT", #4d
|
122
|
+
"CALL(", #4e
|
123
|
+
"PR#", #4f
|
124
|
+
"IN#", #50
|
125
|
+
"FILTER(", #51
|
126
|
+
"LIST", #52
|
127
|
+
"RUN", #53
|
128
|
+
"AUXMOVE(",#54
|
129
|
+
"LCMOVE(", #55
|
130
|
+
"DELAY(", #56
|
131
|
+
"INTEGER", #57
|
132
|
+
"BYTE", #58
|
133
|
+
" AND ", #59
|
134
|
+
" OR ", #5a
|
135
|
+
" MOD ", #5b
|
136
|
+
" XOR ", #5c
|
137
|
+
" WITH ", #5d
|
138
|
+
" TO ", #5e
|
139
|
+
" AT ", #5f
|
140
|
+
"TAB(", #60
|
141
|
+
"ENDCASE", #61
|
142
|
+
"MON:", #62
|
143
|
+
"EDIT", #63
|
144
|
+
"SAVE@" #64
|
145
|
+
]
|
146
|
+
|
147
|
+
|
148
|
+
#check whether a given series of bytes can be a valid NADOL tokenised file
|
149
|
+
#heuristics are:
|
150
|
+
# - bytes
|
151
|
+
def NADOLTokenisedFile.can_be_nadol_tokenised_file?(buffer)
|
152
|
+
r=true
|
153
|
+
i=0
|
154
|
+
while i<buffer.length
|
155
|
+
line_length=buffer[i]
|
156
|
+
if buffer[i+line_length-1]!=0 then
|
157
|
+
r=false
|
158
|
+
break
|
159
|
+
end
|
160
|
+
i+=line_length
|
161
|
+
end
|
162
|
+
r
|
163
|
+
end
|
164
|
+
|
165
|
+
def to_s
|
166
|
+
NADOLTokenisedFile.buffer_as_tokenised_file(@contents)
|
167
|
+
end
|
168
|
+
def file_extension
|
169
|
+
".nad"
|
170
|
+
end
|
171
|
+
|
172
|
+
private
|
173
|
+
def NADOLTokenisedFile.buffer_as_tokenised_file(buffer)
|
174
|
+
s=""
|
175
|
+
index=0
|
176
|
+
while (index<buffer.length)
|
177
|
+
line_length=buffer[index]
|
178
|
+
index+=1
|
179
|
+
end_of_line=index+line_length-2
|
180
|
+
while(index<end_of_line)
|
181
|
+
b=buffer[index]
|
182
|
+
if (b<=0x64) then
|
183
|
+
s+=NADOL_EDITOR_TOKENS[b]
|
184
|
+
elsif(b>0x70 and b<0x80) then
|
185
|
+
s+=" "*(b-0x70)
|
186
|
+
elsif(b>=0x80) then
|
187
|
+
s+=(b-0x80).chr
|
188
|
+
else
|
189
|
+
raise sprintf("unknown token %02X at offset %04X",b,index)
|
190
|
+
end
|
191
|
+
index+=1 #move to next char
|
192
|
+
end
|
193
|
+
index+=1 #skip over end-of-line marker
|
194
|
+
s+="\n"
|
195
|
+
end
|
196
|
+
s
|
197
|
+
end
|
198
|
+
|
199
|
+
end
|
200
|
+
|
201
|
+
|
202
|
+
# == Author
|
203
|
+
# Jonno Downes (jonno@jamtronix.com)
|
204
|
+
#
|
205
|
+
# == Copyright
|
206
|
+
# Copyright (c) 2007 Jonno Downes (jonno@jamtronix.com)
|
207
|
+
#
|
208
|
+
#Permission is hereby granted, free of charge, to any person obtaining
|
209
|
+
#a copy of this software and associated documentation files (the
|
210
|
+
#"Software"), to deal in the Software without restriction, including
|
211
|
+
#without limitation the rights to use, copy, modify, merge, publish,
|
212
|
+
#distribute, sublicense, and/or sell copies of the Software, and to
|
213
|
+
#permit persons to whom the Software is furnished to do so, subject to
|
214
|
+
#the following conditions:
|
215
|
+
|
216
|
+
# The above copyright notice and this permission notice shall be
|
217
|
+
# included in all copies or substantial portions of the Software.
|
218
|
+
|
219
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
220
|
+
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
221
|
+
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
222
|
+
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
223
|
+
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
224
|
+
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
225
|
+
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|