ripxplore 0.0.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/ripxplore.rb +188 -0
- data/doc/classes/A2Dsk.html +226 -0
- data/doc/classes/A2Dsk.src/M000005.html +18 -0
- data/doc/classes/A2Dsk.src/M000006.html +18 -0
- data/doc/classes/A2Dsk.src/M000007.html +18 -0
- data/doc/classes/A2Dsk.src/M000008.html +18 -0
- data/doc/classes/A2Dsk.src/M000009.html +18 -0
- data/doc/classes/A2Dsk.src/M000010.html +22 -0
- data/doc/classes/A2DskDosOrder.html +139 -0
- data/doc/classes/A2DskDosOrder.src/M000242.html +18 -0
- data/doc/classes/A2DskPhysicalOrder.html +139 -0
- data/doc/classes/A2DskPhysicalOrder.src/M000019.html +18 -0
- data/doc/classes/Apple2.html +187 -0
- data/doc/classes/Apple2.src/M000128.html +18 -0
- data/doc/classes/Apple2.src/M000129.html +18 -0
- data/doc/classes/Apple2.src/M000130.html +18 -0
- data/doc/classes/Apple2.src/M000131.html +19 -0
- data/doc/classes/AppleBinary.html +193 -0
- data/doc/classes/AppleBinary.src/M000089.html +20 -0
- data/doc/classes/AppleBinary.src/M000090.html +18 -0
- data/doc/classes/AppleBinary.src/M000091.html +18 -0
- data/doc/classes/AppleBinary.src/M000092.html +18 -0
- data/doc/classes/AppleCPM.html +228 -0
- data/doc/classes/AppleCPM.src/M000243.html +18 -0
- data/doc/classes/AppleCPM.src/M000244.html +18 -0
- data/doc/classes/AppleCPM.src/M000245.html +21 -0
- data/doc/classes/AppleCPM.src/M000246.html +40 -0
- data/doc/classes/AppleDos.html +275 -0
- data/doc/classes/AppleDos.src/M000161.html +18 -0
- data/doc/classes/AppleDos.src/M000162.html +18 -0
- data/doc/classes/AppleDos.src/M000163.html +18 -0
- data/doc/classes/AppleDos.src/M000164.html +86 -0
- data/doc/classes/AppleHiResPic.html +279 -0
- data/doc/classes/AppleHiResPic.src/M000083.html +22 -0
- data/doc/classes/AppleHiResPic.src/M000084.html +18 -0
- data/doc/classes/AppleHiResPic.src/M000085.html +22 -0
- data/doc/classes/AppleHiResPic.src/M000086.html +57 -0
- data/doc/classes/AppleHiResPic.src/M000087.html +18 -0
- data/doc/classes/AppleHiResPic.src/M000088.html +18 -0
- data/doc/classes/AppleText.html +156 -0
- data/doc/classes/AppleText.src/M000142.html +21 -0
- data/doc/classes/AppleText.src/M000143.html +20 -0
- data/doc/classes/AppleWorksWP.html +160 -0
- data/doc/classes/AppleWorksWP.src/M000081.html +20 -0
- data/doc/classes/AppleWorksWP.src/M000082.html +45 -0
- data/doc/classes/Applesoft.html +169 -0
- data/doc/classes/Applesoft.src/M000175.html +21 -0
- data/doc/classes/Applesoft.src/M000176.html +75 -0
- data/doc/classes/Atari800.html +169 -0
- data/doc/classes/Atari800.src/M000177.html +23 -0
- data/doc/classes/Atari800.src/M000178.html +18 -0
- data/doc/classes/Atari800.src/M000179.html +19 -0
- data/doc/classes/AtariBasic.html +215 -0
- data/doc/classes/AtariBasic.src/M000204.html +20 -0
- data/doc/classes/AtariBasic.src/M000205.html +108 -0
- data/doc/classes/AtariBinary.html +193 -0
- data/doc/classes/AtariBinary.src/M000238.html +20 -0
- data/doc/classes/AtariBinary.src/M000239.html +18 -0
- data/doc/classes/AtariBinary.src/M000240.html +18 -0
- data/doc/classes/AtariBinary.src/M000241.html +18 -0
- data/doc/classes/AtariDos.html +186 -0
- data/doc/classes/AtariDos.src/M000047.html +18 -0
- data/doc/classes/AtariDos.src/M000048.html +43 -0
- data/doc/classes/AtariText.html +159 -0
- data/doc/classes/AtariText.src/M000002.html +20 -0
- data/doc/classes/AtariText.src/M000003.html +18 -0
- data/doc/classes/Atr.html +271 -0
- data/doc/classes/Atr.src/M000208.html +18 -0
- data/doc/classes/Atr.src/M000209.html +18 -0
- data/doc/classes/Atr.src/M000210.html +19 -0
- data/doc/classes/Atr.src/M000211.html +18 -0
- data/doc/classes/Atr.src/M000212.html +18 -0
- data/doc/classes/Atr.src/M000213.html +19 -0
- data/doc/classes/Atr.src/M000214.html +19 -0
- data/doc/classes/C64.html +206 -0
- data/doc/classes/C64.src/M000020.html +18 -0
- data/doc/classes/C64.src/M000021.html +31 -0
- data/doc/classes/C64.src/M000022.html +22 -0
- data/doc/classes/C64.src/M000023.html +19 -0
- data/doc/classes/C64.src/M000024.html +19 -0
- data/doc/classes/C64BasicPrg.html +201 -0
- data/doc/classes/C64BasicPrg.src/M000035.html +20 -0
- data/doc/classes/C64BasicPrg.src/M000036.html +59 -0
- data/doc/classes/C64Prg.html +190 -0
- data/doc/classes/C64Prg.src/M000169.html +20 -0
- data/doc/classes/C64Prg.src/M000170.html +18 -0
- data/doc/classes/C64Prg.src/M000171.html +18 -0
- data/doc/classes/C64Prg.src/M000172.html +20 -0
- data/doc/classes/C64PrgText.html +139 -0
- data/doc/classes/C64PrgText.src/M000237.html +18 -0
- data/doc/classes/C64Seq.html +156 -0
- data/doc/classes/C64Seq.src/M000013.html +20 -0
- data/doc/classes/C64Seq.src/M000014.html +18 -0
- data/doc/classes/CPMFile.html +156 -0
- data/doc/classes/CPMFile.src/M000108.html +20 -0
- data/doc/classes/CPMFile.src/M000109.html +18 -0
- data/doc/classes/CbmDos.html +172 -0
- data/doc/classes/CbmDos.src/M000182.html +18 -0
- data/doc/classes/CbmDos.src/M000183.html +42 -0
- data/doc/classes/CbmFile.html +156 -0
- data/doc/classes/CbmFile.src/M000235.html +20 -0
- data/doc/classes/CbmFile.src/M000236.html +18 -0
- data/doc/classes/D64.html +247 -0
- data/doc/classes/D64.src/M000037.html +18 -0
- data/doc/classes/D64.src/M000038.html +18 -0
- data/doc/classes/D64.src/M000039.html +18 -0
- data/doc/classes/D64.src/M000040.html +22 -0
- data/doc/classes/D64.src/M000041.html +18 -0
- data/doc/classes/D64.src/M000042.html +21 -0
- data/doc/classes/D65.html +170 -0
- data/doc/classes/D65.src/M000049.html +22 -0
- data/doc/classes/D65.src/M000050.html +68 -0
- data/doc/classes/DumpUtilities.html +152 -0
- data/doc/classes/DumpUtilities.src/M000077.html +33 -0
- data/doc/classes/DumpUtilities.src/M000078.html +27 -0
- data/doc/classes/FileCache.html +210 -0
- data/doc/classes/FileCache.src/M000135.html +18 -0
- data/doc/classes/FileCache.src/M000136.html +20 -0
- data/doc/classes/FileCache.src/M000137.html +22 -0
- data/doc/classes/FileCache.src/M000138.html +32 -0
- data/doc/classes/FileCacheItem.html +152 -0
- data/doc/classes/FileCacheItem.src/M000165.html +18 -0
- data/doc/classes/FileCacheItem.src/M000166.html +18 -0
- data/doc/classes/FileContainer.html +146 -0
- data/doc/classes/FileContainer.src/M000232.html +26 -0
- data/doc/classes/FileSystem.html +252 -0
- data/doc/classes/FileSystem.src/M000069.html +18 -0
- data/doc/classes/FileSystem.src/M000070.html +18 -0
- data/doc/classes/FileSystem.src/M000071.html +18 -0
- data/doc/classes/FileSystem.src/M000072.html +18 -0
- data/doc/classes/FileSystem.src/M000073.html +18 -0
- data/doc/classes/FileSystem.src/M000074.html +18 -0
- data/doc/classes/FileSystem.src/M000075.html +20 -0
- data/doc/classes/FileSystem.src/M000076.html +25 -0
- data/doc/classes/FileSystemImage.html +430 -0
- data/doc/classes/FileSystemImage.src/M000215.html +19 -0
- data/doc/classes/FileSystemImage.src/M000216.html +41 -0
- data/doc/classes/FileSystemImage.src/M000217.html +27 -0
- data/doc/classes/FileSystemImage.src/M000218.html +18 -0
- data/doc/classes/FileSystemImage.src/M000219.html +18 -0
- data/doc/classes/FileSystemImage.src/M000220.html +18 -0
- data/doc/classes/FileSystemImage.src/M000221.html +22 -0
- data/doc/classes/FileSystemImage.src/M000222.html +19 -0
- data/doc/classes/FileSystemImage.src/M000223.html +18 -0
- data/doc/classes/FileSystemImage.src/M000224.html +18 -0
- data/doc/classes/FileSystemImage.src/M000225.html +18 -0
- data/doc/classes/FileSystemImage.src/M000226.html +18 -0
- data/doc/classes/FileSystemImage.src/M000227.html +20 -0
- data/doc/classes/FileSystemImage.src/M000228.html +22 -0
- data/doc/classes/FileSystemImage.src/M000229.html +22 -0
- data/doc/classes/FileSystemImage.src/M000230.html +18 -0
- data/doc/classes/FileSystemImage.src/M000231.html +23 -0
- data/doc/classes/G64.html +257 -0
- data/doc/classes/G64.src/M000093.html +30 -0
- data/doc/classes/G64.src/M000094.html +18 -0
- data/doc/classes/G64.src/M000095.html +18 -0
- data/doc/classes/G64.src/M000096.html +17 -0
- data/doc/classes/G64.src/M000097.html +18 -0
- data/doc/classes/G64.src/M000098.html +18 -0
- data/doc/classes/G64.src/M000099.html +21 -0
- data/doc/classes/GenericFile.html +157 -0
- data/doc/classes/GenericFile.src/M000167.html +20 -0
- data/doc/classes/GenericFile.src/M000168.html +18 -0
- data/doc/classes/HostSystem.html +225 -0
- data/doc/classes/HostSystem.src/M000025.html +22 -0
- data/doc/classes/HostSystem.src/M000026.html +18 -0
- data/doc/classes/HostSystem.src/M000027.html +18 -0
- data/doc/classes/HostSystem.src/M000028.html +22 -0
- data/doc/classes/HostSystem.src/M000029.html +33 -0
- data/doc/classes/HostSystem.src/M000030.html +18 -0
- data/doc/classes/ImageFormat.html +415 -0
- data/doc/classes/ImageFormat.src/M000144.html +18 -0
- data/doc/classes/ImageFormat.src/M000145.html +18 -0
- data/doc/classes/ImageFormat.src/M000146.html +18 -0
- data/doc/classes/ImageFormat.src/M000147.html +18 -0
- data/doc/classes/ImageFormat.src/M000148.html +18 -0
- data/doc/classes/ImageFormat.src/M000149.html +22 -0
- data/doc/classes/ImageFormat.src/M000150.html +19 -0
- data/doc/classes/ImageFormat.src/M000151.html +18 -0
- data/doc/classes/ImageFormat.src/M000152.html +18 -0
- data/doc/classes/ImageFormat.src/M000153.html +18 -0
- data/doc/classes/ImageFormat.src/M000154.html +18 -0
- data/doc/classes/ImageFormat.src/M000155.html +18 -0
- data/doc/classes/ImageFormat.src/M000156.html +18 -0
- data/doc/classes/ImageFormat.src/M000157.html +18 -0
- data/doc/classes/ImageFormat.src/M000158.html +20 -0
- data/doc/classes/ImageFormat.src/M000159.html +26 -0
- data/doc/classes/ImageFormat.src/M000160.html +18 -0
- data/doc/classes/ImageSniffing.html +152 -0
- data/doc/classes/ImageSniffing.src/M000051.html +57 -0
- data/doc/classes/ImageSniffing.src/M000052.html +131 -0
- data/doc/classes/IntegerBASIC.html +247 -0
- data/doc/classes/IntegerBASIC.src/M000206.html +20 -0
- data/doc/classes/IntegerBASIC.src/M000207.html +86 -0
- data/doc/classes/MBasic.html +182 -0
- data/doc/classes/MBasic.src/M000011.html +20 -0
- data/doc/classes/MBasic.src/M000012.html +22 -0
- data/doc/classes/NADOLDos.html +187 -0
- data/doc/classes/NADOLDos.src/M000180.html +18 -0
- data/doc/classes/NADOLDos.src/M000181.html +52 -0
- data/doc/classes/NADOLFile.html +157 -0
- data/doc/classes/NADOLFile.src/M000045.html +20 -0
- data/doc/classes/NADOLFile.src/M000046.html +18 -0
- data/doc/classes/NADOLTokens.html +170 -0
- data/doc/classes/NADOLTokens.src/M000018.html +41 -0
- data/doc/classes/NativeFileType.html +444 -0
- data/doc/classes/NativeFileType.src/M000110.html +22 -0
- data/doc/classes/NativeFileType.src/M000111.html +18 -0
- data/doc/classes/NativeFileType.src/M000112.html +18 -0
- data/doc/classes/NativeFileType.src/M000113.html +18 -0
- data/doc/classes/NativeFileType.src/M000114.html +18 -0
- data/doc/classes/NativeFileType.src/M000115.html +18 -0
- data/doc/classes/NativeFileType.src/M000116.html +18 -0
- data/doc/classes/NativeFileType.src/M000117.html +23 -0
- data/doc/classes/NativeFileType.src/M000118.html +18 -0
- data/doc/classes/NativeFileType.src/M000119.html +18 -0
- data/doc/classes/NativeFileType.src/M000120.html +24 -0
- data/doc/classes/NativeFileType.src/M000121.html +35 -0
- data/doc/classes/NativeFileType.src/M000122.html +24 -0
- data/doc/classes/NativeFileType.src/M000123.html +18 -0
- data/doc/classes/NativeFileType.src/M000124.html +18 -0
- data/doc/classes/NativeFileType.src/M000125.html +18 -0
- data/doc/classes/NativeFileType.src/M000126.html +20 -0
- data/doc/classes/NativeFileType.src/M000127.html +27 -0
- data/doc/classes/PNG/Canvas.html +273 -0
- data/doc/classes/PNG/Canvas.src/M000196.html +20 -0
- data/doc/classes/PNG/Canvas.src/M000197.html +20 -0
- data/doc/classes/PNG/Canvas.src/M000198.html +20 -0
- data/doc/classes/PNG/Canvas.src/M000199.html +22 -0
- data/doc/classes/PNG/Canvas.src/M000200.html +18 -0
- data/doc/classes/PNG/Canvas.src/M000201.html +73 -0
- data/doc/classes/PNG/Color.html +338 -0
- data/doc/classes/PNG/Color.src/M000189.html +18 -0
- data/doc/classes/PNG/Color.src/M000190.html +16 -0
- data/doc/classes/PNG/Color.src/M000191.html +16 -0
- data/doc/classes/PNG/Color.src/M000192.html +16 -0
- data/doc/classes/PNG/Color.src/M000193.html +16 -0
- data/doc/classes/PNG/Color.src/M000194.html +21 -0
- data/doc/classes/PNG/Color.src/M000195.html +18 -0
- data/doc/classes/PNG.html +229 -0
- data/doc/classes/PNG.src/M000185.html +18 -0
- data/doc/classes/PNG.src/M000186.html +21 -0
- data/doc/classes/PNG.src/M000187.html +26 -0
- data/doc/classes/PNG.src/M000188.html +26 -0
- data/doc/classes/PascalDos.html +203 -0
- data/doc/classes/PascalDos.src/M000132.html +18 -0
- data/doc/classes/PascalDos.src/M000133.html +21 -0
- data/doc/classes/PascalDos.src/M000134.html +62 -0
- data/doc/classes/PascalFile.html +169 -0
- data/doc/classes/PascalFile.src/M000173.html +20 -0
- data/doc/classes/PascalFile.src/M000174.html +18 -0
- data/doc/classes/ProDos.html +164 -0
- data/doc/classes/ProDos.src/M000102.html +18 -0
- data/doc/classes/ProDos.src/M000103.html +22 -0
- data/doc/classes/ProDosFile.html +187 -0
- data/doc/classes/ProDosFile.src/M000015.html +20 -0
- data/doc/classes/ProDosFile.src/M000016.html +18 -0
- data/doc/classes/ProDosFile.src/M000017.html +19 -0
- data/doc/classes/Proc.html +315 -0
- data/doc/classes/Proc.src/M000053.html +21 -0
- data/doc/classes/Proc.src/M000054.html +19 -0
- data/doc/classes/Proc.src/M000055.html +22 -0
- data/doc/classes/Proc.src/M000056.html +22 -0
- data/doc/classes/Proc.src/M000057.html +22 -0
- data/doc/classes/Proc.src/M000058.html +19 -0
- data/doc/classes/Proc.src/M000059.html +16 -0
- data/doc/classes/Proc.src/M000060.html +20 -0
- data/doc/classes/Proc.src/M000061.html +18 -0
- data/doc/classes/Proc.src/M000062.html +16 -0
- data/doc/classes/Proc.src/M000063.html +16 -0
- data/doc/classes/ProcSource.html +146 -0
- data/doc/classes/ProcSource.src/M000248.html +38 -0
- data/doc/classes/ProcSource.src/M000249.html +109 -0
- data/doc/classes/RDoc.html +135 -0
- data/doc/classes/RDoc.src/M000247.html +40 -0
- data/doc/classes/RawDisk.html +157 -0
- data/doc/classes/RawDisk.src/M000100.html +18 -0
- data/doc/classes/RawDisk.src/M000101.html +18 -0
- data/doc/classes/RipXplore.html +124 -0
- data/doc/classes/RipXploreLog.html +167 -0
- data/doc/classes/RipXploreLog.src/M000139.html +18 -0
- data/doc/classes/RipXploreLog.src/M000140.html +20 -0
- data/doc/classes/RipXploreLog.src/M000141.html +18 -0
- data/doc/classes/ScAsm.html +145 -0
- data/doc/classes/ScAsm.src/M000004.html +45 -0
- data/doc/classes/SubclassTracking.html +138 -0
- data/doc/classes/SubclassTracking.src/M000250.html +23 -0
- data/doc/classes/TestFileCache.html +137 -0
- data/doc/classes/TestFileCache.src/M000184.html +21 -0
- data/doc/classes/Trs80.html +157 -0
- data/doc/classes/Trs80.src/M000043.html +18 -0
- data/doc/classes/Trs80.src/M000044.html +18 -0
- data/doc/classes/Trs80Cmd.html +217 -0
- data/doc/classes/Trs80Cmd.src/M000104.html +19 -0
- data/doc/classes/Trs80Cmd.src/M000105.html +24 -0
- data/doc/classes/Trs80Cmd.src/M000106.html +20 -0
- data/doc/classes/Trs80Cmd.src/M000107.html +35 -0
- data/doc/classes/Trs80Jcl.html +156 -0
- data/doc/classes/Trs80Jcl.src/M000233.html +20 -0
- data/doc/classes/Trs80Jcl.src/M000234.html +18 -0
- data/doc/classes/Trs80Jv1Dsk.html +211 -0
- data/doc/classes/Trs80Jv1Dsk.src/M000064.html +18 -0
- data/doc/classes/Trs80Jv1Dsk.src/M000065.html +18 -0
- data/doc/classes/Trs80Jv1Dsk.src/M000066.html +18 -0
- data/doc/classes/Trs80Jv1Dsk.src/M000067.html +18 -0
- data/doc/classes/Trs80Jv1Dsk.src/M000068.html +19 -0
- data/doc/classes/Trs80LevelIIBasic.html +169 -0
- data/doc/classes/Trs80LevelIIBasic.src/M000079.html +20 -0
- data/doc/classes/Trs80LevelIIBasic.src/M000080.html +43 -0
- data/doc/classes/Trs80PascalSource.html +156 -0
- data/doc/classes/Trs80PascalSource.src/M000202.html +20 -0
- data/doc/classes/Trs80PascalSource.src/M000203.html +30 -0
- data/doc/classes/TrsDos.html +255 -0
- data/doc/classes/TrsDos.src/M000031.html +18 -0
- data/doc/classes/TrsDos.src/M000032.html +18 -0
- data/doc/classes/TrsDos.src/M000033.html +18 -0
- data/doc/classes/TrsDos.src/M000034.html +62 -0
- data/doc/created.rid +1 -0
- data/doc/files/bin/ripxplore_rb.html +150 -0
- data/doc/files/lib/DumpUtilities_rb.html +101 -0
- data/doc/files/lib/FileCache_rb.html +110 -0
- data/doc/files/lib/FileContainer_rb.html +101 -0
- data/doc/files/lib/FileSystemImage_rb.html +109 -0
- data/doc/files/lib/FileSystem_rb.html +111 -0
- data/doc/files/lib/HostSystem_rb.html +110 -0
- data/doc/files/lib/ImageFormat_rb.html +111 -0
- data/doc/files/lib/NativeFileType_rb.html +111 -0
- data/doc/files/lib/PatchedPNG_rb.html +116 -0
- data/doc/files/lib/RipXploreLog_rb.html +108 -0
- data/doc/files/lib/RipXplore_rb.html +114 -0
- data/doc/files/lib/SubclassTracking_rb.html +108 -0
- data/doc/files/lib/disassemblers/D65_rb.html +101 -0
- data/doc/files/lib/file_systems/AppleCPM_rb.html +108 -0
- data/doc/files/lib/file_systems/AppleDos_rb.html +108 -0
- data/doc/files/lib/file_systems/AtariDos_rb.html +108 -0
- data/doc/files/lib/file_systems/CbmDos_rb.html +108 -0
- data/doc/files/lib/file_systems/NADOLDos_rb.html +108 -0
- data/doc/files/lib/file_systems/PascalDos_rb.html +108 -0
- data/doc/files/lib/file_systems/ProDos_rb.html +108 -0
- data/doc/files/lib/file_systems/RawDisk_rb.html +108 -0
- data/doc/files/lib/file_systems/TrsDos_rb.html +108 -0
- data/doc/files/lib/host_systems/Apple2_rb.html +109 -0
- data/doc/files/lib/host_systems/Atari800_rb.html +109 -0
- data/doc/files/lib/host_systems/C64_rb.html +109 -0
- data/doc/files/lib/host_systems/Trs80_rb.html +108 -0
- data/doc/files/lib/image_formats/A2Dsk_rb.html +108 -0
- data/doc/files/lib/image_formats/Atr_rb.html +108 -0
- data/doc/files/lib/image_formats/D64_rb.html +108 -0
- data/doc/files/lib/image_formats/G64_rb.html +108 -0
- data/doc/files/lib/image_formats/Trs80Jv1Dsk_rb.html +108 -0
- data/doc/files/lib/native_file_types/apple2/AppleBinary_rb.html +108 -0
- data/doc/files/lib/native_file_types/apple2/AppleHiResPic_rb.html +108 -0
- data/doc/files/lib/native_file_types/apple2/AppleText_rb.html +108 -0
- data/doc/files/lib/native_file_types/apple2/AppleWorksWP_rb.html +108 -0
- data/doc/files/lib/native_file_types/apple2/Applesoft_rb.html +108 -0
- data/doc/files/lib/native_file_types/apple2/IntegerBASIC_rb.html +108 -0
- data/doc/files/lib/native_file_types/apple2/NADOLFile_rb.html +108 -0
- data/doc/files/lib/native_file_types/apple2/PascalFile_rb.html +108 -0
- data/doc/files/lib/native_file_types/apple2/ProDosFile_rb.html +108 -0
- data/doc/files/lib/native_file_types/apple2/ScAsm_rb.html +101 -0
- data/doc/files/lib/native_file_types/atari800/AtariBasic_rb.html +108 -0
- data/doc/files/lib/native_file_types/atari800/AtariBinary_rb.html +108 -0
- data/doc/files/lib/native_file_types/atari800/AtariText_rb.html +108 -0
- data/doc/files/lib/native_file_types/c64/C64BasicPrg_rb.html +109 -0
- data/doc/files/lib/native_file_types/c64/C64PrgText_rb.html +109 -0
- data/doc/files/lib/native_file_types/c64/C64Prg_rb.html +109 -0
- data/doc/files/lib/native_file_types/c64/C64Seq_rb.html +109 -0
- data/doc/files/lib/native_file_types/c64/CbmFile_rb.html +108 -0
- data/doc/files/lib/native_file_types/cpm/CPMFile_rb.html +108 -0
- data/doc/files/lib/native_file_types/cpm/MBasic_rb.html +108 -0
- data/doc/files/lib/native_file_types/generic/GenericFile_rb.html +101 -0
- data/doc/files/lib/native_file_types/trs80/Trs80Cmd_rb.html +108 -0
- data/doc/files/lib/native_file_types/trs80/Trs80Jcl_rb.html +108 -0
- data/doc/files/lib/native_file_types/trs80/Trs80LevelIIBasic_rb.html +108 -0
- data/doc/files/lib/native_file_types/trs80/Trs80PascalSource_rb.html +108 -0
- data/doc/files/lib/proc_source_rb.html +182 -0
- data/doc/files/lib/proc_source_rb.src/M000001.html +24 -0
- data/doc/files/lib/rdoc_patch_rb.html +108 -0
- data/doc/files/test/tc_file_cache_rb.html +108 -0
- data/doc/files/test/tc_image_sniffing_rb.html +108 -0
- data/doc/files/test/testhelper_rb.html +129 -0
- data/doc/files/test/ts_test_all_rb.html +108 -0
- data/doc/fr_class_index.html +26 -0
- data/doc/fr_file_index.html +27 -0
- data/doc/fr_method_index.html +26 -0
- data/doc/index.html +24 -0
- data/doc/rdoc-style.css +208 -0
- data/lib/DumpUtilities.rb +34 -0
- data/lib/FileCache.rb +84 -0
- data/lib/FileContainer.rb +45 -0
- data/lib/FileSystem.rb +83 -0
- data/lib/FileSystemImage.rb +176 -0
- data/lib/HostSystem.rb +84 -0
- data/lib/ImageFormat.rb +127 -0
- data/lib/NativeFileType.rb +168 -0
- data/lib/PatchedPNG.rb +303 -0
- data/lib/RipXplore.rb +77 -0
- data/lib/RipXploreLog.rb +63 -0
- data/lib/SubclassTracking.rb +11 -0
- data/lib/disassemblers/D65.rb +181 -0
- data/lib/file_systems/AppleCPM.rb +123 -0
- data/lib/file_systems/AppleDos.rb +211 -0
- data/lib/file_systems/AtariDos.rb +80 -0
- data/lib/file_systems/CbmDos.rb +75 -0
- data/lib/file_systems/NADOLDos.rb +110 -0
- data/lib/file_systems/PascalDos.rb +131 -0
- data/lib/file_systems/ProDos.rb +155 -0
- data/lib/file_systems/RawDisk.rb +45 -0
- data/lib/file_systems/TrsDos.rb +148 -0
- data/lib/host_systems/Apple2.rb +57 -0
- data/lib/host_systems/Atari800.rb +57 -0
- data/lib/host_systems/C64.rb +82 -0
- data/lib/host_systems/Trs80.rb +48 -0
- data/lib/host_systems/a2_symbols.yaml +199 -0
- data/lib/host_systems/atari_800_symbols.yaml +496 -0
- data/lib/host_systems/c64_symbols.yaml +636 -0
- data/lib/image_formats/A2Dsk.rb +77 -0
- data/lib/image_formats/Atr.rb +83 -0
- data/lib/image_formats/D64.rb +87 -0
- data/lib/image_formats/G64.rb +174 -0
- data/lib/image_formats/Trs80Jv1Dsk.rb +65 -0
- data/lib/native_file_types/apple2/AppleBinary.rb +51 -0
- data/lib/native_file_types/apple2/AppleHiResPic.rb +166 -0
- data/lib/native_file_types/apple2/AppleText.rb +43 -0
- data/lib/native_file_types/apple2/AppleWorksWP.rb +68 -0
- data/lib/native_file_types/apple2/Applesoft.rb +115 -0
- data/lib/native_file_types/apple2/IntegerBASIC.rb +217 -0
- data/lib/native_file_types/apple2/NADOLFile.rb +205 -0
- data/lib/native_file_types/apple2/PascalFile.rb +48 -0
- data/lib/native_file_types/apple2/ProDosFile.rb +112 -0
- data/lib/native_file_types/apple2/ScAsm.rb +110 -0
- data/lib/native_file_types/atari800/AtariBasic.rb +396 -0
- data/lib/native_file_types/atari800/AtariBinary.rb +53 -0
- data/lib/native_file_types/atari800/AtariText.rb +49 -0
- data/lib/native_file_types/c64/C64BasicPrg.rb +333 -0
- data/lib/native_file_types/c64/C64Prg.rb +57 -0
- data/lib/native_file_types/c64/C64PrgText.rb +45 -0
- data/lib/native_file_types/c64/C64Seq.rb +47 -0
- data/lib/native_file_types/c64/CbmFile.rb +41 -0
- data/lib/native_file_types/cpm/CPMFile.rb +40 -0
- data/lib/native_file_types/cpm/MBasic.rb +311 -0
- data/lib/native_file_types/generic/GenericFile.rb +43 -0
- data/lib/native_file_types/trs80/Trs80Cmd.rb +130 -0
- data/lib/native_file_types/trs80/Trs80Jcl.rb +43 -0
- data/lib/native_file_types/trs80/Trs80LevelIIBasic.rb +201 -0
- data/lib/native_file_types/trs80/Trs80PascalSource.rb +58 -0
- data/lib/proc_source.rb +238 -0
- data/lib/rdoc_patch.rb +32 -0
- data/test/tc_file_cache.rb +11 -0
- data/test/tc_image_sniffing.rb +165 -0
- data/test/testhelper.rb +14 -0
- data/test/testlog.txt +30755 -0
- data/test/ts_test_all.rb +3 -0
- metadata +601 -0
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
$:.unshift(File.dirname(__FILE__)) unless
|
|
2
|
+
$:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
|
|
3
|
+
|
|
4
|
+
$:.unshift(File.dirname(__FILE__+"\\..")) unless
|
|
5
|
+
$:.include?(File.dirname(__FILE__+"\\..")) || $:.include?(File.expand_path(File.dirname(__FILE__+"\\..")))
|
|
6
|
+
|
|
7
|
+
require 'ImageFormat'
|
|
8
|
+
|
|
9
|
+
#A2 DSK with "physical" ordering
|
|
10
|
+
class A2Dsk < ImageFormat
|
|
11
|
+
|
|
12
|
+
def A2Dsk.possible_extensions
|
|
13
|
+
['.dsk','.do','.po']
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def A2Dsk.host_system
|
|
17
|
+
Apple2
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
#to be overriden in each subclass with a table showing what order logical sectors are stored
|
|
21
|
+
def A2Dsk.interleave
|
|
22
|
+
nil
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def sectors_in_track(track_no)
|
|
26
|
+
(0..0x0f).collect
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def track_count
|
|
30
|
+
file_bytes.length/4096
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def get_sector(track,sector)
|
|
34
|
+
return nil if self.class.interleave.nil?
|
|
35
|
+
return nil unless sector.between?(0,0x0F)
|
|
36
|
+
physical_sector=self.class.interleave[sector]
|
|
37
|
+
start_byte=track*16*256+physical_sector*256
|
|
38
|
+
file_bytes[start_byte,256]
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
class A2DskPhysicalOrder < A2Dsk
|
|
44
|
+
def A2DskPhysicalOrder.interleave
|
|
45
|
+
[0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F]
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
class A2DskDosOrder < A2Dsk
|
|
50
|
+
def A2DskDosOrder.interleave
|
|
51
|
+
[0x00,0x0E,0x0D,0x0C,0x0B,0x0A,0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x01,0x0F]
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
# == Author
|
|
55
|
+
# Jonno Downes (jonno@jamtronix.com)
|
|
56
|
+
#
|
|
57
|
+
# == Copyright
|
|
58
|
+
# Copyright (c) 2007 Jonno Downes (jonno@jamtronix.com)
|
|
59
|
+
#
|
|
60
|
+
#Permission is hereby granted, free of charge, to any person obtaining
|
|
61
|
+
#a copy of this software and associated documentation files (the
|
|
62
|
+
#"Software"), to deal in the Software without restriction, including
|
|
63
|
+
#without limitation the rights to use, copy, modify, merge, publish,
|
|
64
|
+
#distribute, sublicense, and/or sell copies of the Software, and to
|
|
65
|
+
#permit persons to whom the Software is furnished to do so, subject to
|
|
66
|
+
#the following conditions:
|
|
67
|
+
|
|
68
|
+
# The above copyright notice and this permission notice shall be
|
|
69
|
+
# included in all copies or substantial portions of the Software.
|
|
70
|
+
|
|
71
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
72
|
+
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
73
|
+
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
74
|
+
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
|
75
|
+
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
76
|
+
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|
77
|
+
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
$:.unshift(File.dirname(__FILE__)) unless
|
|
2
|
+
$:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
|
|
3
|
+
|
|
4
|
+
$:.unshift(File.dirname(__FILE__+"\\..")) unless
|
|
5
|
+
$:.include?(File.dirname(__FILE__+"\\..")) || $:.include?(File.expand_path(File.dirname(__FILE__+"\\..")))
|
|
6
|
+
|
|
7
|
+
require 'ImageFormat'
|
|
8
|
+
|
|
9
|
+
#Atari ATR format - http://pages.suddenlink.net/wa5bdu/readme.txt
|
|
10
|
+
class Atr < ImageFormat
|
|
11
|
+
|
|
12
|
+
ATR_HEADER_LENGTH=0x10
|
|
13
|
+
ATR_SECTORS_PER_TRACK=18
|
|
14
|
+
|
|
15
|
+
def self.possible_extensions
|
|
16
|
+
['.atr']
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
is_valid_image_if lambda {
|
|
20
|
+
file_system_image.file_bytes[0,2]==[0x96,0x02]
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
def self.host_system
|
|
24
|
+
Atari800
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
#Atari disks actually don't use tracks, just a single flat list of sectors
|
|
28
|
+
#however for ease of use with utilities that assume there are tracks & sectors
|
|
29
|
+
#we will assign 18 sectors per track
|
|
30
|
+
def sectors_in_track(track_no)
|
|
31
|
+
first_sector=track_no*ATR_SECTORS_PER_TRACK
|
|
32
|
+
(first_sector..first_sector+ATR_SECTORS_PER_TRACK-1).collect
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
# how many tracks could be interpreted by this image format?
|
|
36
|
+
def track_count
|
|
37
|
+
(@file_bytes.length-ATR_HEADER_LENGTH)/(@sector_size*ATR_SECTORS_PER_TRACK)
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
# how many sectors could be interpreted by this image format?
|
|
42
|
+
def sector_count
|
|
43
|
+
(@file_bytes.length-ATR_HEADER_LENGTH)/(@sector_size)
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
#we ignore the track no, but keep the paramater for compatability with other image formats
|
|
47
|
+
def get_sector(track_no,sector_no)
|
|
48
|
+
offset_of_sector=(sector_no-1)*@sector_size+ATR_HEADER_LENGTH
|
|
49
|
+
return @file_bytes[offset_of_sector,@sector_size]
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def initialize(file_bytes)
|
|
53
|
+
@file_bytes=file_bytes
|
|
54
|
+
@sector_size=file_bytes[4,2].unpack("v")[0]
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
# == Author
|
|
61
|
+
# Jonno Downes (jonno@jamtronix.com)
|
|
62
|
+
#
|
|
63
|
+
# == Copyright
|
|
64
|
+
# Copyright (c) 2007 Jonno Downes (jonno@jamtronix.com)
|
|
65
|
+
#
|
|
66
|
+
#Permission is hereby granted, free of charge, to any person obtaining
|
|
67
|
+
#a copy of this software and associated documentation files (the
|
|
68
|
+
#"Software"), to deal in the Software without restriction, including
|
|
69
|
+
#without limitation the rights to use, copy, modify, merge, publish,
|
|
70
|
+
#distribute, sublicense, and/or sell copies of the Software, and to
|
|
71
|
+
#permit persons to whom the Software is furnished to do so, subject to
|
|
72
|
+
#the following conditions:
|
|
73
|
+
|
|
74
|
+
# The above copyright notice and this permission notice shall be
|
|
75
|
+
# included in all copies or substantial portions of the Software.
|
|
76
|
+
|
|
77
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
78
|
+
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
79
|
+
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
80
|
+
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
|
81
|
+
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
82
|
+
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|
83
|
+
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
$:.unshift(File.dirname(__FILE__)) unless
|
|
2
|
+
$:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
|
|
3
|
+
|
|
4
|
+
$:.unshift(File.dirname(__FILE__+"\\..")) unless
|
|
5
|
+
$:.include?(File.dirname(__FILE__+"\\..")) || $:.include?(File.expand_path(File.dirname(__FILE__+"\\..")))
|
|
6
|
+
|
|
7
|
+
require 'ImageFormat'
|
|
8
|
+
|
|
9
|
+
class D64 < ImageFormat
|
|
10
|
+
|
|
11
|
+
#
|
|
12
|
+
# For manipulating D64 files, as used by many C64 emulators.
|
|
13
|
+
#
|
|
14
|
+
# References:
|
|
15
|
+
# http://www.unusedino.de/ec64/technical/formats/d64.html
|
|
16
|
+
# http://www.baltissen.org/newhtm/1541c.htm
|
|
17
|
+
# http://www.scribd.com/doc/40438/The-Commodore-1541-Disk-Drive-Users-Guide
|
|
18
|
+
#
|
|
19
|
+
|
|
20
|
+
D64_BYTES_PER_SECTOR=256
|
|
21
|
+
|
|
22
|
+
@@sectors_in_track=[]
|
|
23
|
+
@@offset_of_track=[]
|
|
24
|
+
1.upto(17) {|t| @@sectors_in_track[t]=21}
|
|
25
|
+
18.upto(24) {|t| @@sectors_in_track[t]=19}
|
|
26
|
+
25.upto(30) {|t| @@sectors_in_track[t]=18}
|
|
27
|
+
31.upto(40) {|t| @@sectors_in_track[t]=17}
|
|
28
|
+
@@offset_of_track[1]=0
|
|
29
|
+
1.upto(39) {|t| @@offset_of_track[t+1]=@@offset_of_track[t]+(@@sectors_in_track[t]*D64_BYTES_PER_SECTOR)}
|
|
30
|
+
|
|
31
|
+
def self.possible_extensions
|
|
32
|
+
['.d64']
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def self.host_system
|
|
36
|
+
C64
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def sectors_in_track(track_no)
|
|
40
|
+
(0..@@sectors_in_track[track_no]-1).collect
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
#for a given byte stream, how many tracks could be interpreted by this image format?
|
|
44
|
+
def track_count
|
|
45
|
+
track_count=0
|
|
46
|
+
1.upto(@@offset_of_track.length-1) do |t|
|
|
47
|
+
track_count=t if file_bytes.length>@@offset_of_track[t]
|
|
48
|
+
end
|
|
49
|
+
track_count
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def end_track
|
|
53
|
+
return track_count
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
def get_sector(track_no,sector_no)
|
|
57
|
+
return nil if @@sectors_in_track[track_no].nil?
|
|
58
|
+
return nil unless sector_no.between?(0,@@sectors_in_track[track_no]-1)
|
|
59
|
+
start_byte=@@offset_of_track[track_no]+(D64_BYTES_PER_SECTOR*(sector_no))
|
|
60
|
+
file_bytes[start_byte,D64_BYTES_PER_SECTOR]
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
end
|
|
64
|
+
# == Author
|
|
65
|
+
# Jonno Downes (jonno@jamtronix.com)
|
|
66
|
+
#
|
|
67
|
+
# == Copyright
|
|
68
|
+
# Copyright (c) 2008 Jonno Downes (jonno@jamtronix.com)
|
|
69
|
+
#
|
|
70
|
+
#Permission is hereby granted, free of charge, to any person obtaining
|
|
71
|
+
#a copy of this software and associated documentation files (the
|
|
72
|
+
#"Software"), to deal in the Software without restriction, including
|
|
73
|
+
#without limitation the rights to use, copy, modify, merge, publish,
|
|
74
|
+
#distribute, sublicense, and/or sell copies of the Software, and to
|
|
75
|
+
#permit persons to whom the Software is furnished to do so, subject to
|
|
76
|
+
#the following conditions:
|
|
77
|
+
|
|
78
|
+
# The above copyright notice and this permission notice shall be
|
|
79
|
+
# included in all copies or substantial portions of the Software.
|
|
80
|
+
|
|
81
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
82
|
+
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
83
|
+
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
84
|
+
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
|
85
|
+
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
86
|
+
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|
87
|
+
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
$:.unshift(File.dirname(__FILE__)) unless
|
|
2
|
+
$:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
|
|
3
|
+
|
|
4
|
+
$:.unshift(File.dirname(__FILE__+"\\..")) unless
|
|
5
|
+
$:.include?(File.dirname(__FILE__+"\\..")) || $:.include?(File.expand_path(File.dirname(__FILE__+"\\..")))
|
|
6
|
+
|
|
7
|
+
require 'ImageFormat'
|
|
8
|
+
|
|
9
|
+
class G64 < ImageFormat
|
|
10
|
+
|
|
11
|
+
#
|
|
12
|
+
# raw GCR binary representation of a 1541 diskette
|
|
13
|
+
#
|
|
14
|
+
# References:
|
|
15
|
+
# http://www.unusedino.de/ec64/technical/formats/g64.html
|
|
16
|
+
# http://www.baltissen.org/newhtm/1541c.htm
|
|
17
|
+
# http://www.scribd.com/doc/40438/The-Commodore-1541-Disk-Drive-Users-Guide
|
|
18
|
+
#
|
|
19
|
+
|
|
20
|
+
CBM_GCR_CODES={
|
|
21
|
+
"01010"=>0x00,
|
|
22
|
+
"01011"=>0x01,
|
|
23
|
+
"10010"=>0x02,
|
|
24
|
+
"10011"=>0x03,
|
|
25
|
+
"01110"=>0x04,
|
|
26
|
+
"01111"=>0x05,
|
|
27
|
+
"10110"=>0x06,
|
|
28
|
+
"10111"=>0x07,
|
|
29
|
+
"01001"=>0x08,
|
|
30
|
+
"11001"=>0x09,
|
|
31
|
+
"11010"=>0x0A,
|
|
32
|
+
"11011"=>0x0B,
|
|
33
|
+
"01101"=>0x0C,
|
|
34
|
+
"11101"=>0x0D,
|
|
35
|
+
"11110"=>0x0E,
|
|
36
|
+
"10101"=>0x0F
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
#G64 format starts with a signature
|
|
40
|
+
is_valid_image_if lambda {
|
|
41
|
+
file_system_image.file_bytes[0,8]=="GCR-1541"
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
def initialize(file_bytes)
|
|
46
|
+
@file_bytes=file_bytes
|
|
47
|
+
@tracks={}
|
|
48
|
+
@end_track=0
|
|
49
|
+
signature,version,raw_track_count,track_length=file_bytes.unpack("A8ccv")
|
|
50
|
+
|
|
51
|
+
0.upto(raw_track_count-1) do |raw_track_no|
|
|
52
|
+
cbm_track_no=(raw_track_no+2.0)/2
|
|
53
|
+
track_offset=file_bytes[0x0c+4*raw_track_no,4].unpack("V")[0]
|
|
54
|
+
if track_offset>0 then
|
|
55
|
+
@end_track=cbm_track_no
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
end
|
|
60
|
+
def self.possible_extensions
|
|
61
|
+
['.g64']
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
def self.host_system
|
|
65
|
+
C64
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
def sectors_in_track(track_no)
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
def track_count
|
|
72
|
+
@end_track
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
def end_track
|
|
76
|
+
@end_track
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
def get_sector(track_no,sector_no)
|
|
80
|
+
#puts "TR #{track_no} : #{sector_no}"
|
|
81
|
+
parse_raw_track((track_no-1)*2) if @tracks[track_no].nil?
|
|
82
|
+
@tracks[track_no][sector_no]
|
|
83
|
+
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
private
|
|
87
|
+
|
|
88
|
+
def parse_raw_track(raw_track_no)
|
|
89
|
+
|
|
90
|
+
# cbm_track_no=(raw_track_no+2.0)/2
|
|
91
|
+
track_offset=file_bytes[0x0c+4*raw_track_no,4].unpack("V")[0]
|
|
92
|
+
if track_offset>0 then
|
|
93
|
+
track_length=file_bytes[track_offset,2].unpack("v")[0]
|
|
94
|
+
track_bytes=file_bytes[track_offset+2,track_length]
|
|
95
|
+
# puts "RAW #{raw_track_no} CBM #{cbm_track_no} OFFSET #{track_offset} #{track_bytes.length}"
|
|
96
|
+
s=""
|
|
97
|
+
track_bytes.each_byte do |byte|
|
|
98
|
+
s+="%08b" % byte
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
raw_blocks=s.split(/1{10,200}/)
|
|
102
|
+
decoded_blocks=[]
|
|
103
|
+
|
|
104
|
+
raw_blocks.each do |raw_block|
|
|
105
|
+
this_byte=0
|
|
106
|
+
high_nibble=true
|
|
107
|
+
decoded_block_bytes=""
|
|
108
|
+
0.upto([(raw_block.length/5-1),518].min) do |i|
|
|
109
|
+
gcr_bits=raw_block[i*5,5]
|
|
110
|
+
this_nibble=CBM_GCR_CODES[gcr_bits]
|
|
111
|
+
if this_nibble.nil? then
|
|
112
|
+
# puts "invalid GCR bits #{gcr_bits} in #{raw_block} offset #{i*5}"
|
|
113
|
+
else
|
|
114
|
+
if (high_nibble) then
|
|
115
|
+
this_byte=this_nibble*0x10
|
|
116
|
+
high_nibble=false
|
|
117
|
+
else
|
|
118
|
+
this_byte+=this_nibble
|
|
119
|
+
high_nibble=true
|
|
120
|
+
decoded_block_bytes<<this_byte
|
|
121
|
+
end
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
end
|
|
125
|
+
decoded_blocks<<decoded_block_bytes
|
|
126
|
+
#puts ">>>>"
|
|
127
|
+
#puts raw_block
|
|
128
|
+
#puts "ID BYTE %02X %02X " % [decoded_block_bytes[0],decoded_block_bytes.length]
|
|
129
|
+
#decoded_block_bytes.each {|x| print "%02x " % x}
|
|
130
|
+
#puts "<<<<"
|
|
131
|
+
#puts
|
|
132
|
+
end
|
|
133
|
+
0.upto(decoded_blocks.length-2) do |i|
|
|
134
|
+
if (decoded_blocks[i][0]==0x08) && (decoded_blocks[i+1][0]==0x07) then
|
|
135
|
+
header_block=decoded_blocks[i]
|
|
136
|
+
data_block=decoded_blocks[i+1]
|
|
137
|
+
sector_no=header_block[2]
|
|
138
|
+
track_no=header_block[3]
|
|
139
|
+
format_id=header_block[4]+header_block[5]
|
|
140
|
+
@tracks[track_no]={} if @tracks[track_no].nil?
|
|
141
|
+
# puts "TRACK %02X SECTOR %02X ID #{format_id} LENGTH %02x" % [track_no,sector_no,data_block.length]
|
|
142
|
+
sector_data=data_block[1,data_block.length-1]
|
|
143
|
+
@tracks[track_no][sector_no]=sector_data
|
|
144
|
+
#puts hex_dump(data_block[1,256])
|
|
145
|
+
end
|
|
146
|
+
end
|
|
147
|
+
end
|
|
148
|
+
end
|
|
149
|
+
|
|
150
|
+
end
|
|
151
|
+
# == Author
|
|
152
|
+
# Jonno Downes (jonno@jamtronix.com)
|
|
153
|
+
#
|
|
154
|
+
# == Copyright
|
|
155
|
+
# Copyright (c) 2008 Jonno Downes (jonno@jamtronix.com)
|
|
156
|
+
#
|
|
157
|
+
#Permission is hereby granted, free of charge, to any person obtaining
|
|
158
|
+
#a copy of this software and associated documentation files (the
|
|
159
|
+
#"Software"), to deal in the Software without restriction, including
|
|
160
|
+
#without limitation the rights to use, copy, modify, merge, publish,
|
|
161
|
+
#distribute, sublicense, and/or sell copies of the Software, and to
|
|
162
|
+
#permit persons to whom the Software is furnished to do so, subject to
|
|
163
|
+
#the following conditions:
|
|
164
|
+
|
|
165
|
+
# The above copyright notice and this permission notice shall be
|
|
166
|
+
# included in all copies or substantial portions of the Software.
|
|
167
|
+
|
|
168
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
169
|
+
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
170
|
+
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
171
|
+
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
|
172
|
+
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
173
|
+
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|
174
|
+
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
$:.unshift(File.dirname(__FILE__)) unless
|
|
2
|
+
$:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
|
|
3
|
+
|
|
4
|
+
$:.unshift(File.dirname(__FILE__+"\\..")) unless
|
|
5
|
+
$:.include?(File.dirname(__FILE__+"\\..")) || $:.include?(File.expand_path(File.dirname(__FILE__+"\\..")))
|
|
6
|
+
|
|
7
|
+
require 'ImageFormat'
|
|
8
|
+
|
|
9
|
+
#TRS80 DSK in JV1 format - http://tim-mann.org/trs80/dskspec.html
|
|
10
|
+
class Trs80Jv1Dsk < ImageFormat
|
|
11
|
+
|
|
12
|
+
def self.possible_extensions
|
|
13
|
+
['.dsk']
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
#JV1 format has no header, and a variable number of tracks, each with 10 sectors, each with 256 bytes.
|
|
17
|
+
#for the moment, we only handle SSSD 80 track images (204800 bytes)
|
|
18
|
+
is_valid_image_if lambda {
|
|
19
|
+
file_system_image.file_bytes.length==204800
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
def self.host_system
|
|
23
|
+
Trs80
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def sectors_in_track(track_no)
|
|
27
|
+
(0..0x09).collect
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
# how many tracks could be interpreted by this image format?
|
|
31
|
+
def track_count
|
|
32
|
+
file_bytes.length/(2560)
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def get_sector(track,sector)
|
|
36
|
+
start_byte=track*10*256+sector*256
|
|
37
|
+
file_bytes[start_byte,256]
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
# == Author
|
|
43
|
+
# Jonno Downes (jonno@jamtronix.com)
|
|
44
|
+
#
|
|
45
|
+
# == Copyright
|
|
46
|
+
# Copyright (c) 2007 Jonno Downes (jonno@jamtronix.com)
|
|
47
|
+
#
|
|
48
|
+
#Permission is hereby granted, free of charge, to any person obtaining
|
|
49
|
+
#a copy of this software and associated documentation files (the
|
|
50
|
+
#"Software"), to deal in the Software without restriction, including
|
|
51
|
+
#without limitation the rights to use, copy, modify, merge, publish,
|
|
52
|
+
#distribute, sublicense, and/or sell copies of the Software, and to
|
|
53
|
+
#permit persons to whom the Software is furnished to do so, subject to
|
|
54
|
+
#the following conditions:
|
|
55
|
+
|
|
56
|
+
# The above copyright notice and this permission notice shall be
|
|
57
|
+
# included in all copies or substantial portions of the Software.
|
|
58
|
+
|
|
59
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
60
|
+
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
61
|
+
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
62
|
+
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
|
63
|
+
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
64
|
+
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|
65
|
+
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
require 'NativeFileType'
|
|
2
|
+
|
|
3
|
+
class AppleBinary<NativeFileType
|
|
4
|
+
|
|
5
|
+
def self.file_system_file_types
|
|
6
|
+
{
|
|
7
|
+
AppleDos=>0x04
|
|
8
|
+
}
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
#Apple DOS Binary files have the load address stored in first two bytes of the file, in LO, HI order
|
|
12
|
+
def self.load_address(contents)
|
|
13
|
+
contents[0]+contents[1]*256
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
#header is 2 bytes for load address, then 2 bytes for file length
|
|
17
|
+
def header_length
|
|
18
|
+
4
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def to_disassembly
|
|
22
|
+
return Apple2.disassemble(data_without_header,load_address+header_length)
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
# == Author
|
|
29
|
+
# Jonno Downes (jonno@jamtronix.com)
|
|
30
|
+
#
|
|
31
|
+
# == Copyright
|
|
32
|
+
# Copyright (c) 2008 Jonno Downes (jonno@jamtronix.com)
|
|
33
|
+
#
|
|
34
|
+
#Permission is hereby granted, free of charge, to any person obtaining
|
|
35
|
+
#a copy of this software and associated documentation files (the
|
|
36
|
+
#"Software"), to deal in the Software without restriction, including
|
|
37
|
+
#without limitation the rights to use, copy, modify, merge, publish,
|
|
38
|
+
#distribute, sublicense, and/or sell copies of the Software, and to
|
|
39
|
+
#permit persons to whom the Software is furnished to do so, subject to
|
|
40
|
+
#the following conditions:
|
|
41
|
+
|
|
42
|
+
# The above copyright notice and this permission notice shall be
|
|
43
|
+
# included in all copies or substantial portions of the Software.
|
|
44
|
+
|
|
45
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
46
|
+
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
47
|
+
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
48
|
+
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
|
49
|
+
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
50
|
+
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|
51
|
+
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
$:.unshift(File.dirname(__FILE__)) unless
|
|
2
|
+
$:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
require 'PatchedPNG'
|
|
6
|
+
|
|
7
|
+
class AppleHiResPic<NativeFileType
|
|
8
|
+
|
|
9
|
+
def self.file_system_file_types
|
|
10
|
+
{
|
|
11
|
+
AppleDos=>0x04,
|
|
12
|
+
NADOLDos=>:any,
|
|
13
|
+
PascalDos=>0x07
|
|
14
|
+
}
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
is_valid_file_if lambda {
|
|
18
|
+
is_valid=true
|
|
19
|
+
if file_system_image.file_system==AppleDos then
|
|
20
|
+
load_address=AppleBinary.load_address(contents)
|
|
21
|
+
is_valid=((contents.length>=8184) && (contents.length<=9000) && ((load_address==0x2000) || load_address==0x4000))
|
|
22
|
+
end
|
|
23
|
+
if file_system_image.file_system==NADOLDos then
|
|
24
|
+
is_valid=(contents.length==8192)
|
|
25
|
+
end
|
|
26
|
+
is_valid
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
|
|
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=1
|
|
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
|
+
def self.matching_score
|
|
69
|
+
[AppleBinary.matching_score+1,NADOLFile.matching_score+1].max
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
#Apple DOS Binary files have the load address stored in first two bytes of the file, in LO, HI order
|
|
73
|
+
def load_address
|
|
74
|
+
if file_system_image.file_system==AppleDos then
|
|
75
|
+
return contents[0]+contents[1]*256
|
|
76
|
+
else
|
|
77
|
+
return 0x2000
|
|
78
|
+
end
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
def to_png
|
|
82
|
+
if file_system_image.file_system==AppleDos then
|
|
83
|
+
buffer=contents[4,contents.length-4]
|
|
84
|
+
else
|
|
85
|
+
buffer=contents
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
canvas = PNG::Canvas.new HGR_COLS*SCALE, HGR_ROWS*SCALE, PNG::Color::Black
|
|
89
|
+
0.upto(HGR_ROWS-1) do |y|
|
|
90
|
+
last_bit_set=false
|
|
91
|
+
0.upto(39) do |x_byte|
|
|
92
|
+
offset=@@scanline_offsets[y]+x_byte
|
|
93
|
+
current_byte=buffer[offset]
|
|
94
|
+
current_byte=0 if current_byte.nil? #if we overrun the buffer then assume it's black
|
|
95
|
+
0.upto(6) do |x_bit|
|
|
96
|
+
x=x_byte*7+x_bit
|
|
97
|
+
bit_set=((current_byte & (2**x_bit))>0)
|
|
98
|
+
if (bit_set) then
|
|
99
|
+
if (last_bit_set) then
|
|
100
|
+
#adjacent pixels should both be white
|
|
101
|
+
AppleHiResPic.set_pixel(canvas,x-1,y,HGR_WHITE)
|
|
102
|
+
AppleHiResPic.set_pixel(canvas,x,y,HGR_WHITE)
|
|
103
|
+
else
|
|
104
|
+
if current_byte>=0x80 then
|
|
105
|
+
pallete=[HGR_BLUE,HGR_ORANGE]
|
|
106
|
+
else
|
|
107
|
+
pallete=[HGR_VIOLET,HGR_GREEN]
|
|
108
|
+
end
|
|
109
|
+
this_pixel_colour=pallete[x%2]
|
|
110
|
+
AppleHiResPic.set_pixel(canvas,x,y,this_pixel_colour)
|
|
111
|
+
AppleHiResPic.set_pixel(canvas,x+1,y,this_pixel_colour) unless x>=HGR_ROWS
|
|
112
|
+
end
|
|
113
|
+
end
|
|
114
|
+
last_bit_set=bit_set
|
|
115
|
+
end
|
|
116
|
+
end
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
png = PNG.new canvas
|
|
120
|
+
result=png.raw_bytes
|
|
121
|
+
result
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
def png_width
|
|
125
|
+
HGR_COLS*SCALE
|
|
126
|
+
end
|
|
127
|
+
def png_height
|
|
128
|
+
HGR_ROWS*SCALE
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
private
|
|
132
|
+
def self.set_pixel(canvas,x,y,colour)
|
|
133
|
+
0.upto(SCALE-1) do |row|
|
|
134
|
+
0.upto(SCALE-1) do |col|
|
|
135
|
+
canvas[x*SCALE+col, y*SCALE+row]= colour
|
|
136
|
+
end
|
|
137
|
+
end
|
|
138
|
+
end
|
|
139
|
+
|
|
140
|
+
end
|
|
141
|
+
|
|
142
|
+
|
|
143
|
+
# == Author
|
|
144
|
+
# Jonno Downes (jonno@jamtronix.com)
|
|
145
|
+
#
|
|
146
|
+
# == Copyright
|
|
147
|
+
# Copyright (c) 2008 Jonno Downes (jonno@jamtronix.com)
|
|
148
|
+
#
|
|
149
|
+
#Permission is hereby granted, free of charge, to any person obtaining
|
|
150
|
+
#a copy of this software and associated documentation files (the
|
|
151
|
+
#"Software"), to deal in the Software without restriction, including
|
|
152
|
+
#without limitation the rights to use, copy, modify, merge, publish,
|
|
153
|
+
#distribute, sublicense, and/or sell copies of the Software, and to
|
|
154
|
+
#permit persons to whom the Software is furnished to do so, subject to
|
|
155
|
+
#the following conditions:
|
|
156
|
+
|
|
157
|
+
# The above copyright notice and this permission notice shall be
|
|
158
|
+
# included in all copies or substantial portions of the Software.
|
|
159
|
+
|
|
160
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
161
|
+
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
162
|
+
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
163
|
+
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
|
164
|
+
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
165
|
+
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|
166
|
+
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|