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.
Files changed (454) hide show
  1. data/bin/ripxplore.rb +188 -0
  2. data/doc/classes/A2Dsk.html +226 -0
  3. data/doc/classes/A2Dsk.src/M000005.html +18 -0
  4. data/doc/classes/A2Dsk.src/M000006.html +18 -0
  5. data/doc/classes/A2Dsk.src/M000007.html +18 -0
  6. data/doc/classes/A2Dsk.src/M000008.html +18 -0
  7. data/doc/classes/A2Dsk.src/M000009.html +18 -0
  8. data/doc/classes/A2Dsk.src/M000010.html +22 -0
  9. data/doc/classes/A2DskDosOrder.html +139 -0
  10. data/doc/classes/A2DskDosOrder.src/M000242.html +18 -0
  11. data/doc/classes/A2DskPhysicalOrder.html +139 -0
  12. data/doc/classes/A2DskPhysicalOrder.src/M000019.html +18 -0
  13. data/doc/classes/Apple2.html +187 -0
  14. data/doc/classes/Apple2.src/M000128.html +18 -0
  15. data/doc/classes/Apple2.src/M000129.html +18 -0
  16. data/doc/classes/Apple2.src/M000130.html +18 -0
  17. data/doc/classes/Apple2.src/M000131.html +19 -0
  18. data/doc/classes/AppleBinary.html +193 -0
  19. data/doc/classes/AppleBinary.src/M000089.html +20 -0
  20. data/doc/classes/AppleBinary.src/M000090.html +18 -0
  21. data/doc/classes/AppleBinary.src/M000091.html +18 -0
  22. data/doc/classes/AppleBinary.src/M000092.html +18 -0
  23. data/doc/classes/AppleCPM.html +228 -0
  24. data/doc/classes/AppleCPM.src/M000243.html +18 -0
  25. data/doc/classes/AppleCPM.src/M000244.html +18 -0
  26. data/doc/classes/AppleCPM.src/M000245.html +21 -0
  27. data/doc/classes/AppleCPM.src/M000246.html +40 -0
  28. data/doc/classes/AppleDos.html +275 -0
  29. data/doc/classes/AppleDos.src/M000161.html +18 -0
  30. data/doc/classes/AppleDos.src/M000162.html +18 -0
  31. data/doc/classes/AppleDos.src/M000163.html +18 -0
  32. data/doc/classes/AppleDos.src/M000164.html +86 -0
  33. data/doc/classes/AppleHiResPic.html +279 -0
  34. data/doc/classes/AppleHiResPic.src/M000083.html +22 -0
  35. data/doc/classes/AppleHiResPic.src/M000084.html +18 -0
  36. data/doc/classes/AppleHiResPic.src/M000085.html +22 -0
  37. data/doc/classes/AppleHiResPic.src/M000086.html +57 -0
  38. data/doc/classes/AppleHiResPic.src/M000087.html +18 -0
  39. data/doc/classes/AppleHiResPic.src/M000088.html +18 -0
  40. data/doc/classes/AppleText.html +156 -0
  41. data/doc/classes/AppleText.src/M000142.html +21 -0
  42. data/doc/classes/AppleText.src/M000143.html +20 -0
  43. data/doc/classes/AppleWorksWP.html +160 -0
  44. data/doc/classes/AppleWorksWP.src/M000081.html +20 -0
  45. data/doc/classes/AppleWorksWP.src/M000082.html +45 -0
  46. data/doc/classes/Applesoft.html +169 -0
  47. data/doc/classes/Applesoft.src/M000175.html +21 -0
  48. data/doc/classes/Applesoft.src/M000176.html +75 -0
  49. data/doc/classes/Atari800.html +169 -0
  50. data/doc/classes/Atari800.src/M000177.html +23 -0
  51. data/doc/classes/Atari800.src/M000178.html +18 -0
  52. data/doc/classes/Atari800.src/M000179.html +19 -0
  53. data/doc/classes/AtariBasic.html +215 -0
  54. data/doc/classes/AtariBasic.src/M000204.html +20 -0
  55. data/doc/classes/AtariBasic.src/M000205.html +108 -0
  56. data/doc/classes/AtariBinary.html +193 -0
  57. data/doc/classes/AtariBinary.src/M000238.html +20 -0
  58. data/doc/classes/AtariBinary.src/M000239.html +18 -0
  59. data/doc/classes/AtariBinary.src/M000240.html +18 -0
  60. data/doc/classes/AtariBinary.src/M000241.html +18 -0
  61. data/doc/classes/AtariDos.html +186 -0
  62. data/doc/classes/AtariDos.src/M000047.html +18 -0
  63. data/doc/classes/AtariDos.src/M000048.html +43 -0
  64. data/doc/classes/AtariText.html +159 -0
  65. data/doc/classes/AtariText.src/M000002.html +20 -0
  66. data/doc/classes/AtariText.src/M000003.html +18 -0
  67. data/doc/classes/Atr.html +271 -0
  68. data/doc/classes/Atr.src/M000208.html +18 -0
  69. data/doc/classes/Atr.src/M000209.html +18 -0
  70. data/doc/classes/Atr.src/M000210.html +19 -0
  71. data/doc/classes/Atr.src/M000211.html +18 -0
  72. data/doc/classes/Atr.src/M000212.html +18 -0
  73. data/doc/classes/Atr.src/M000213.html +19 -0
  74. data/doc/classes/Atr.src/M000214.html +19 -0
  75. data/doc/classes/C64.html +206 -0
  76. data/doc/classes/C64.src/M000020.html +18 -0
  77. data/doc/classes/C64.src/M000021.html +31 -0
  78. data/doc/classes/C64.src/M000022.html +22 -0
  79. data/doc/classes/C64.src/M000023.html +19 -0
  80. data/doc/classes/C64.src/M000024.html +19 -0
  81. data/doc/classes/C64BasicPrg.html +201 -0
  82. data/doc/classes/C64BasicPrg.src/M000035.html +20 -0
  83. data/doc/classes/C64BasicPrg.src/M000036.html +59 -0
  84. data/doc/classes/C64Prg.html +190 -0
  85. data/doc/classes/C64Prg.src/M000169.html +20 -0
  86. data/doc/classes/C64Prg.src/M000170.html +18 -0
  87. data/doc/classes/C64Prg.src/M000171.html +18 -0
  88. data/doc/classes/C64Prg.src/M000172.html +20 -0
  89. data/doc/classes/C64PrgText.html +139 -0
  90. data/doc/classes/C64PrgText.src/M000237.html +18 -0
  91. data/doc/classes/C64Seq.html +156 -0
  92. data/doc/classes/C64Seq.src/M000013.html +20 -0
  93. data/doc/classes/C64Seq.src/M000014.html +18 -0
  94. data/doc/classes/CPMFile.html +156 -0
  95. data/doc/classes/CPMFile.src/M000108.html +20 -0
  96. data/doc/classes/CPMFile.src/M000109.html +18 -0
  97. data/doc/classes/CbmDos.html +172 -0
  98. data/doc/classes/CbmDos.src/M000182.html +18 -0
  99. data/doc/classes/CbmDos.src/M000183.html +42 -0
  100. data/doc/classes/CbmFile.html +156 -0
  101. data/doc/classes/CbmFile.src/M000235.html +20 -0
  102. data/doc/classes/CbmFile.src/M000236.html +18 -0
  103. data/doc/classes/D64.html +247 -0
  104. data/doc/classes/D64.src/M000037.html +18 -0
  105. data/doc/classes/D64.src/M000038.html +18 -0
  106. data/doc/classes/D64.src/M000039.html +18 -0
  107. data/doc/classes/D64.src/M000040.html +22 -0
  108. data/doc/classes/D64.src/M000041.html +18 -0
  109. data/doc/classes/D64.src/M000042.html +21 -0
  110. data/doc/classes/D65.html +170 -0
  111. data/doc/classes/D65.src/M000049.html +22 -0
  112. data/doc/classes/D65.src/M000050.html +68 -0
  113. data/doc/classes/DumpUtilities.html +152 -0
  114. data/doc/classes/DumpUtilities.src/M000077.html +33 -0
  115. data/doc/classes/DumpUtilities.src/M000078.html +27 -0
  116. data/doc/classes/FileCache.html +210 -0
  117. data/doc/classes/FileCache.src/M000135.html +18 -0
  118. data/doc/classes/FileCache.src/M000136.html +20 -0
  119. data/doc/classes/FileCache.src/M000137.html +22 -0
  120. data/doc/classes/FileCache.src/M000138.html +32 -0
  121. data/doc/classes/FileCacheItem.html +152 -0
  122. data/doc/classes/FileCacheItem.src/M000165.html +18 -0
  123. data/doc/classes/FileCacheItem.src/M000166.html +18 -0
  124. data/doc/classes/FileContainer.html +146 -0
  125. data/doc/classes/FileContainer.src/M000232.html +26 -0
  126. data/doc/classes/FileSystem.html +252 -0
  127. data/doc/classes/FileSystem.src/M000069.html +18 -0
  128. data/doc/classes/FileSystem.src/M000070.html +18 -0
  129. data/doc/classes/FileSystem.src/M000071.html +18 -0
  130. data/doc/classes/FileSystem.src/M000072.html +18 -0
  131. data/doc/classes/FileSystem.src/M000073.html +18 -0
  132. data/doc/classes/FileSystem.src/M000074.html +18 -0
  133. data/doc/classes/FileSystem.src/M000075.html +20 -0
  134. data/doc/classes/FileSystem.src/M000076.html +25 -0
  135. data/doc/classes/FileSystemImage.html +430 -0
  136. data/doc/classes/FileSystemImage.src/M000215.html +19 -0
  137. data/doc/classes/FileSystemImage.src/M000216.html +41 -0
  138. data/doc/classes/FileSystemImage.src/M000217.html +27 -0
  139. data/doc/classes/FileSystemImage.src/M000218.html +18 -0
  140. data/doc/classes/FileSystemImage.src/M000219.html +18 -0
  141. data/doc/classes/FileSystemImage.src/M000220.html +18 -0
  142. data/doc/classes/FileSystemImage.src/M000221.html +22 -0
  143. data/doc/classes/FileSystemImage.src/M000222.html +19 -0
  144. data/doc/classes/FileSystemImage.src/M000223.html +18 -0
  145. data/doc/classes/FileSystemImage.src/M000224.html +18 -0
  146. data/doc/classes/FileSystemImage.src/M000225.html +18 -0
  147. data/doc/classes/FileSystemImage.src/M000226.html +18 -0
  148. data/doc/classes/FileSystemImage.src/M000227.html +20 -0
  149. data/doc/classes/FileSystemImage.src/M000228.html +22 -0
  150. data/doc/classes/FileSystemImage.src/M000229.html +22 -0
  151. data/doc/classes/FileSystemImage.src/M000230.html +18 -0
  152. data/doc/classes/FileSystemImage.src/M000231.html +23 -0
  153. data/doc/classes/G64.html +257 -0
  154. data/doc/classes/G64.src/M000093.html +30 -0
  155. data/doc/classes/G64.src/M000094.html +18 -0
  156. data/doc/classes/G64.src/M000095.html +18 -0
  157. data/doc/classes/G64.src/M000096.html +17 -0
  158. data/doc/classes/G64.src/M000097.html +18 -0
  159. data/doc/classes/G64.src/M000098.html +18 -0
  160. data/doc/classes/G64.src/M000099.html +21 -0
  161. data/doc/classes/GenericFile.html +157 -0
  162. data/doc/classes/GenericFile.src/M000167.html +20 -0
  163. data/doc/classes/GenericFile.src/M000168.html +18 -0
  164. data/doc/classes/HostSystem.html +225 -0
  165. data/doc/classes/HostSystem.src/M000025.html +22 -0
  166. data/doc/classes/HostSystem.src/M000026.html +18 -0
  167. data/doc/classes/HostSystem.src/M000027.html +18 -0
  168. data/doc/classes/HostSystem.src/M000028.html +22 -0
  169. data/doc/classes/HostSystem.src/M000029.html +33 -0
  170. data/doc/classes/HostSystem.src/M000030.html +18 -0
  171. data/doc/classes/ImageFormat.html +415 -0
  172. data/doc/classes/ImageFormat.src/M000144.html +18 -0
  173. data/doc/classes/ImageFormat.src/M000145.html +18 -0
  174. data/doc/classes/ImageFormat.src/M000146.html +18 -0
  175. data/doc/classes/ImageFormat.src/M000147.html +18 -0
  176. data/doc/classes/ImageFormat.src/M000148.html +18 -0
  177. data/doc/classes/ImageFormat.src/M000149.html +22 -0
  178. data/doc/classes/ImageFormat.src/M000150.html +19 -0
  179. data/doc/classes/ImageFormat.src/M000151.html +18 -0
  180. data/doc/classes/ImageFormat.src/M000152.html +18 -0
  181. data/doc/classes/ImageFormat.src/M000153.html +18 -0
  182. data/doc/classes/ImageFormat.src/M000154.html +18 -0
  183. data/doc/classes/ImageFormat.src/M000155.html +18 -0
  184. data/doc/classes/ImageFormat.src/M000156.html +18 -0
  185. data/doc/classes/ImageFormat.src/M000157.html +18 -0
  186. data/doc/classes/ImageFormat.src/M000158.html +20 -0
  187. data/doc/classes/ImageFormat.src/M000159.html +26 -0
  188. data/doc/classes/ImageFormat.src/M000160.html +18 -0
  189. data/doc/classes/ImageSniffing.html +152 -0
  190. data/doc/classes/ImageSniffing.src/M000051.html +57 -0
  191. data/doc/classes/ImageSniffing.src/M000052.html +131 -0
  192. data/doc/classes/IntegerBASIC.html +247 -0
  193. data/doc/classes/IntegerBASIC.src/M000206.html +20 -0
  194. data/doc/classes/IntegerBASIC.src/M000207.html +86 -0
  195. data/doc/classes/MBasic.html +182 -0
  196. data/doc/classes/MBasic.src/M000011.html +20 -0
  197. data/doc/classes/MBasic.src/M000012.html +22 -0
  198. data/doc/classes/NADOLDos.html +187 -0
  199. data/doc/classes/NADOLDos.src/M000180.html +18 -0
  200. data/doc/classes/NADOLDos.src/M000181.html +52 -0
  201. data/doc/classes/NADOLFile.html +157 -0
  202. data/doc/classes/NADOLFile.src/M000045.html +20 -0
  203. data/doc/classes/NADOLFile.src/M000046.html +18 -0
  204. data/doc/classes/NADOLTokens.html +170 -0
  205. data/doc/classes/NADOLTokens.src/M000018.html +41 -0
  206. data/doc/classes/NativeFileType.html +444 -0
  207. data/doc/classes/NativeFileType.src/M000110.html +22 -0
  208. data/doc/classes/NativeFileType.src/M000111.html +18 -0
  209. data/doc/classes/NativeFileType.src/M000112.html +18 -0
  210. data/doc/classes/NativeFileType.src/M000113.html +18 -0
  211. data/doc/classes/NativeFileType.src/M000114.html +18 -0
  212. data/doc/classes/NativeFileType.src/M000115.html +18 -0
  213. data/doc/classes/NativeFileType.src/M000116.html +18 -0
  214. data/doc/classes/NativeFileType.src/M000117.html +23 -0
  215. data/doc/classes/NativeFileType.src/M000118.html +18 -0
  216. data/doc/classes/NativeFileType.src/M000119.html +18 -0
  217. data/doc/classes/NativeFileType.src/M000120.html +24 -0
  218. data/doc/classes/NativeFileType.src/M000121.html +35 -0
  219. data/doc/classes/NativeFileType.src/M000122.html +24 -0
  220. data/doc/classes/NativeFileType.src/M000123.html +18 -0
  221. data/doc/classes/NativeFileType.src/M000124.html +18 -0
  222. data/doc/classes/NativeFileType.src/M000125.html +18 -0
  223. data/doc/classes/NativeFileType.src/M000126.html +20 -0
  224. data/doc/classes/NativeFileType.src/M000127.html +27 -0
  225. data/doc/classes/PNG/Canvas.html +273 -0
  226. data/doc/classes/PNG/Canvas.src/M000196.html +20 -0
  227. data/doc/classes/PNG/Canvas.src/M000197.html +20 -0
  228. data/doc/classes/PNG/Canvas.src/M000198.html +20 -0
  229. data/doc/classes/PNG/Canvas.src/M000199.html +22 -0
  230. data/doc/classes/PNG/Canvas.src/M000200.html +18 -0
  231. data/doc/classes/PNG/Canvas.src/M000201.html +73 -0
  232. data/doc/classes/PNG/Color.html +338 -0
  233. data/doc/classes/PNG/Color.src/M000189.html +18 -0
  234. data/doc/classes/PNG/Color.src/M000190.html +16 -0
  235. data/doc/classes/PNG/Color.src/M000191.html +16 -0
  236. data/doc/classes/PNG/Color.src/M000192.html +16 -0
  237. data/doc/classes/PNG/Color.src/M000193.html +16 -0
  238. data/doc/classes/PNG/Color.src/M000194.html +21 -0
  239. data/doc/classes/PNG/Color.src/M000195.html +18 -0
  240. data/doc/classes/PNG.html +229 -0
  241. data/doc/classes/PNG.src/M000185.html +18 -0
  242. data/doc/classes/PNG.src/M000186.html +21 -0
  243. data/doc/classes/PNG.src/M000187.html +26 -0
  244. data/doc/classes/PNG.src/M000188.html +26 -0
  245. data/doc/classes/PascalDos.html +203 -0
  246. data/doc/classes/PascalDos.src/M000132.html +18 -0
  247. data/doc/classes/PascalDos.src/M000133.html +21 -0
  248. data/doc/classes/PascalDos.src/M000134.html +62 -0
  249. data/doc/classes/PascalFile.html +169 -0
  250. data/doc/classes/PascalFile.src/M000173.html +20 -0
  251. data/doc/classes/PascalFile.src/M000174.html +18 -0
  252. data/doc/classes/ProDos.html +164 -0
  253. data/doc/classes/ProDos.src/M000102.html +18 -0
  254. data/doc/classes/ProDos.src/M000103.html +22 -0
  255. data/doc/classes/ProDosFile.html +187 -0
  256. data/doc/classes/ProDosFile.src/M000015.html +20 -0
  257. data/doc/classes/ProDosFile.src/M000016.html +18 -0
  258. data/doc/classes/ProDosFile.src/M000017.html +19 -0
  259. data/doc/classes/Proc.html +315 -0
  260. data/doc/classes/Proc.src/M000053.html +21 -0
  261. data/doc/classes/Proc.src/M000054.html +19 -0
  262. data/doc/classes/Proc.src/M000055.html +22 -0
  263. data/doc/classes/Proc.src/M000056.html +22 -0
  264. data/doc/classes/Proc.src/M000057.html +22 -0
  265. data/doc/classes/Proc.src/M000058.html +19 -0
  266. data/doc/classes/Proc.src/M000059.html +16 -0
  267. data/doc/classes/Proc.src/M000060.html +20 -0
  268. data/doc/classes/Proc.src/M000061.html +18 -0
  269. data/doc/classes/Proc.src/M000062.html +16 -0
  270. data/doc/classes/Proc.src/M000063.html +16 -0
  271. data/doc/classes/ProcSource.html +146 -0
  272. data/doc/classes/ProcSource.src/M000248.html +38 -0
  273. data/doc/classes/ProcSource.src/M000249.html +109 -0
  274. data/doc/classes/RDoc.html +135 -0
  275. data/doc/classes/RDoc.src/M000247.html +40 -0
  276. data/doc/classes/RawDisk.html +157 -0
  277. data/doc/classes/RawDisk.src/M000100.html +18 -0
  278. data/doc/classes/RawDisk.src/M000101.html +18 -0
  279. data/doc/classes/RipXplore.html +124 -0
  280. data/doc/classes/RipXploreLog.html +167 -0
  281. data/doc/classes/RipXploreLog.src/M000139.html +18 -0
  282. data/doc/classes/RipXploreLog.src/M000140.html +20 -0
  283. data/doc/classes/RipXploreLog.src/M000141.html +18 -0
  284. data/doc/classes/ScAsm.html +145 -0
  285. data/doc/classes/ScAsm.src/M000004.html +45 -0
  286. data/doc/classes/SubclassTracking.html +138 -0
  287. data/doc/classes/SubclassTracking.src/M000250.html +23 -0
  288. data/doc/classes/TestFileCache.html +137 -0
  289. data/doc/classes/TestFileCache.src/M000184.html +21 -0
  290. data/doc/classes/Trs80.html +157 -0
  291. data/doc/classes/Trs80.src/M000043.html +18 -0
  292. data/doc/classes/Trs80.src/M000044.html +18 -0
  293. data/doc/classes/Trs80Cmd.html +217 -0
  294. data/doc/classes/Trs80Cmd.src/M000104.html +19 -0
  295. data/doc/classes/Trs80Cmd.src/M000105.html +24 -0
  296. data/doc/classes/Trs80Cmd.src/M000106.html +20 -0
  297. data/doc/classes/Trs80Cmd.src/M000107.html +35 -0
  298. data/doc/classes/Trs80Jcl.html +156 -0
  299. data/doc/classes/Trs80Jcl.src/M000233.html +20 -0
  300. data/doc/classes/Trs80Jcl.src/M000234.html +18 -0
  301. data/doc/classes/Trs80Jv1Dsk.html +211 -0
  302. data/doc/classes/Trs80Jv1Dsk.src/M000064.html +18 -0
  303. data/doc/classes/Trs80Jv1Dsk.src/M000065.html +18 -0
  304. data/doc/classes/Trs80Jv1Dsk.src/M000066.html +18 -0
  305. data/doc/classes/Trs80Jv1Dsk.src/M000067.html +18 -0
  306. data/doc/classes/Trs80Jv1Dsk.src/M000068.html +19 -0
  307. data/doc/classes/Trs80LevelIIBasic.html +169 -0
  308. data/doc/classes/Trs80LevelIIBasic.src/M000079.html +20 -0
  309. data/doc/classes/Trs80LevelIIBasic.src/M000080.html +43 -0
  310. data/doc/classes/Trs80PascalSource.html +156 -0
  311. data/doc/classes/Trs80PascalSource.src/M000202.html +20 -0
  312. data/doc/classes/Trs80PascalSource.src/M000203.html +30 -0
  313. data/doc/classes/TrsDos.html +255 -0
  314. data/doc/classes/TrsDos.src/M000031.html +18 -0
  315. data/doc/classes/TrsDos.src/M000032.html +18 -0
  316. data/doc/classes/TrsDos.src/M000033.html +18 -0
  317. data/doc/classes/TrsDos.src/M000034.html +62 -0
  318. data/doc/created.rid +1 -0
  319. data/doc/files/bin/ripxplore_rb.html +150 -0
  320. data/doc/files/lib/DumpUtilities_rb.html +101 -0
  321. data/doc/files/lib/FileCache_rb.html +110 -0
  322. data/doc/files/lib/FileContainer_rb.html +101 -0
  323. data/doc/files/lib/FileSystemImage_rb.html +109 -0
  324. data/doc/files/lib/FileSystem_rb.html +111 -0
  325. data/doc/files/lib/HostSystem_rb.html +110 -0
  326. data/doc/files/lib/ImageFormat_rb.html +111 -0
  327. data/doc/files/lib/NativeFileType_rb.html +111 -0
  328. data/doc/files/lib/PatchedPNG_rb.html +116 -0
  329. data/doc/files/lib/RipXploreLog_rb.html +108 -0
  330. data/doc/files/lib/RipXplore_rb.html +114 -0
  331. data/doc/files/lib/SubclassTracking_rb.html +108 -0
  332. data/doc/files/lib/disassemblers/D65_rb.html +101 -0
  333. data/doc/files/lib/file_systems/AppleCPM_rb.html +108 -0
  334. data/doc/files/lib/file_systems/AppleDos_rb.html +108 -0
  335. data/doc/files/lib/file_systems/AtariDos_rb.html +108 -0
  336. data/doc/files/lib/file_systems/CbmDos_rb.html +108 -0
  337. data/doc/files/lib/file_systems/NADOLDos_rb.html +108 -0
  338. data/doc/files/lib/file_systems/PascalDos_rb.html +108 -0
  339. data/doc/files/lib/file_systems/ProDos_rb.html +108 -0
  340. data/doc/files/lib/file_systems/RawDisk_rb.html +108 -0
  341. data/doc/files/lib/file_systems/TrsDos_rb.html +108 -0
  342. data/doc/files/lib/host_systems/Apple2_rb.html +109 -0
  343. data/doc/files/lib/host_systems/Atari800_rb.html +109 -0
  344. data/doc/files/lib/host_systems/C64_rb.html +109 -0
  345. data/doc/files/lib/host_systems/Trs80_rb.html +108 -0
  346. data/doc/files/lib/image_formats/A2Dsk_rb.html +108 -0
  347. data/doc/files/lib/image_formats/Atr_rb.html +108 -0
  348. data/doc/files/lib/image_formats/D64_rb.html +108 -0
  349. data/doc/files/lib/image_formats/G64_rb.html +108 -0
  350. data/doc/files/lib/image_formats/Trs80Jv1Dsk_rb.html +108 -0
  351. data/doc/files/lib/native_file_types/apple2/AppleBinary_rb.html +108 -0
  352. data/doc/files/lib/native_file_types/apple2/AppleHiResPic_rb.html +108 -0
  353. data/doc/files/lib/native_file_types/apple2/AppleText_rb.html +108 -0
  354. data/doc/files/lib/native_file_types/apple2/AppleWorksWP_rb.html +108 -0
  355. data/doc/files/lib/native_file_types/apple2/Applesoft_rb.html +108 -0
  356. data/doc/files/lib/native_file_types/apple2/IntegerBASIC_rb.html +108 -0
  357. data/doc/files/lib/native_file_types/apple2/NADOLFile_rb.html +108 -0
  358. data/doc/files/lib/native_file_types/apple2/PascalFile_rb.html +108 -0
  359. data/doc/files/lib/native_file_types/apple2/ProDosFile_rb.html +108 -0
  360. data/doc/files/lib/native_file_types/apple2/ScAsm_rb.html +101 -0
  361. data/doc/files/lib/native_file_types/atari800/AtariBasic_rb.html +108 -0
  362. data/doc/files/lib/native_file_types/atari800/AtariBinary_rb.html +108 -0
  363. data/doc/files/lib/native_file_types/atari800/AtariText_rb.html +108 -0
  364. data/doc/files/lib/native_file_types/c64/C64BasicPrg_rb.html +109 -0
  365. data/doc/files/lib/native_file_types/c64/C64PrgText_rb.html +109 -0
  366. data/doc/files/lib/native_file_types/c64/C64Prg_rb.html +109 -0
  367. data/doc/files/lib/native_file_types/c64/C64Seq_rb.html +109 -0
  368. data/doc/files/lib/native_file_types/c64/CbmFile_rb.html +108 -0
  369. data/doc/files/lib/native_file_types/cpm/CPMFile_rb.html +108 -0
  370. data/doc/files/lib/native_file_types/cpm/MBasic_rb.html +108 -0
  371. data/doc/files/lib/native_file_types/generic/GenericFile_rb.html +101 -0
  372. data/doc/files/lib/native_file_types/trs80/Trs80Cmd_rb.html +108 -0
  373. data/doc/files/lib/native_file_types/trs80/Trs80Jcl_rb.html +108 -0
  374. data/doc/files/lib/native_file_types/trs80/Trs80LevelIIBasic_rb.html +108 -0
  375. data/doc/files/lib/native_file_types/trs80/Trs80PascalSource_rb.html +108 -0
  376. data/doc/files/lib/proc_source_rb.html +182 -0
  377. data/doc/files/lib/proc_source_rb.src/M000001.html +24 -0
  378. data/doc/files/lib/rdoc_patch_rb.html +108 -0
  379. data/doc/files/test/tc_file_cache_rb.html +108 -0
  380. data/doc/files/test/tc_image_sniffing_rb.html +108 -0
  381. data/doc/files/test/testhelper_rb.html +129 -0
  382. data/doc/files/test/ts_test_all_rb.html +108 -0
  383. data/doc/fr_class_index.html +26 -0
  384. data/doc/fr_file_index.html +27 -0
  385. data/doc/fr_method_index.html +26 -0
  386. data/doc/index.html +24 -0
  387. data/doc/rdoc-style.css +208 -0
  388. data/lib/DumpUtilities.rb +34 -0
  389. data/lib/FileCache.rb +84 -0
  390. data/lib/FileContainer.rb +45 -0
  391. data/lib/FileSystem.rb +83 -0
  392. data/lib/FileSystemImage.rb +176 -0
  393. data/lib/HostSystem.rb +84 -0
  394. data/lib/ImageFormat.rb +127 -0
  395. data/lib/NativeFileType.rb +168 -0
  396. data/lib/PatchedPNG.rb +303 -0
  397. data/lib/RipXplore.rb +77 -0
  398. data/lib/RipXploreLog.rb +63 -0
  399. data/lib/SubclassTracking.rb +11 -0
  400. data/lib/disassemblers/D65.rb +181 -0
  401. data/lib/file_systems/AppleCPM.rb +123 -0
  402. data/lib/file_systems/AppleDos.rb +211 -0
  403. data/lib/file_systems/AtariDos.rb +80 -0
  404. data/lib/file_systems/CbmDos.rb +75 -0
  405. data/lib/file_systems/NADOLDos.rb +110 -0
  406. data/lib/file_systems/PascalDos.rb +131 -0
  407. data/lib/file_systems/ProDos.rb +155 -0
  408. data/lib/file_systems/RawDisk.rb +45 -0
  409. data/lib/file_systems/TrsDos.rb +148 -0
  410. data/lib/host_systems/Apple2.rb +57 -0
  411. data/lib/host_systems/Atari800.rb +57 -0
  412. data/lib/host_systems/C64.rb +82 -0
  413. data/lib/host_systems/Trs80.rb +48 -0
  414. data/lib/host_systems/a2_symbols.yaml +199 -0
  415. data/lib/host_systems/atari_800_symbols.yaml +496 -0
  416. data/lib/host_systems/c64_symbols.yaml +636 -0
  417. data/lib/image_formats/A2Dsk.rb +77 -0
  418. data/lib/image_formats/Atr.rb +83 -0
  419. data/lib/image_formats/D64.rb +87 -0
  420. data/lib/image_formats/G64.rb +174 -0
  421. data/lib/image_formats/Trs80Jv1Dsk.rb +65 -0
  422. data/lib/native_file_types/apple2/AppleBinary.rb +51 -0
  423. data/lib/native_file_types/apple2/AppleHiResPic.rb +166 -0
  424. data/lib/native_file_types/apple2/AppleText.rb +43 -0
  425. data/lib/native_file_types/apple2/AppleWorksWP.rb +68 -0
  426. data/lib/native_file_types/apple2/Applesoft.rb +115 -0
  427. data/lib/native_file_types/apple2/IntegerBASIC.rb +217 -0
  428. data/lib/native_file_types/apple2/NADOLFile.rb +205 -0
  429. data/lib/native_file_types/apple2/PascalFile.rb +48 -0
  430. data/lib/native_file_types/apple2/ProDosFile.rb +112 -0
  431. data/lib/native_file_types/apple2/ScAsm.rb +110 -0
  432. data/lib/native_file_types/atari800/AtariBasic.rb +396 -0
  433. data/lib/native_file_types/atari800/AtariBinary.rb +53 -0
  434. data/lib/native_file_types/atari800/AtariText.rb +49 -0
  435. data/lib/native_file_types/c64/C64BasicPrg.rb +333 -0
  436. data/lib/native_file_types/c64/C64Prg.rb +57 -0
  437. data/lib/native_file_types/c64/C64PrgText.rb +45 -0
  438. data/lib/native_file_types/c64/C64Seq.rb +47 -0
  439. data/lib/native_file_types/c64/CbmFile.rb +41 -0
  440. data/lib/native_file_types/cpm/CPMFile.rb +40 -0
  441. data/lib/native_file_types/cpm/MBasic.rb +311 -0
  442. data/lib/native_file_types/generic/GenericFile.rb +43 -0
  443. data/lib/native_file_types/trs80/Trs80Cmd.rb +130 -0
  444. data/lib/native_file_types/trs80/Trs80Jcl.rb +43 -0
  445. data/lib/native_file_types/trs80/Trs80LevelIIBasic.rb +201 -0
  446. data/lib/native_file_types/trs80/Trs80PascalSource.rb +58 -0
  447. data/lib/proc_source.rb +238 -0
  448. data/lib/rdoc_patch.rb +32 -0
  449. data/test/tc_file_cache.rb +11 -0
  450. data/test/tc_image_sniffing.rb +165 -0
  451. data/test/testhelper.rb +14 -0
  452. data/test/testlog.txt +30755 -0
  453. data/test/ts_test_all.rb +3 -0
  454. metadata +601 -0
data/lib/RipXplore.rb ADDED
@@ -0,0 +1,77 @@
1
+ $:.unshift(File.dirname(__FILE__)) unless
2
+ $:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
3
+
4
+ require 'open-uri'
5
+ class RipXplore
6
+
7
+ VERSION="0.0.1"
8
+
9
+ private
10
+ def RipXplore.require_files_in_subdir(dirname)
11
+ full_path=File.expand_path(dirname,File.dirname(__FILE__))
12
+ Dir.glob("#{full_path}/*.rb").sort.each {|f| require f}
13
+ Dir.foreach(full_path) do |f|
14
+ next if f=~/^\./ #skip anything that starts with a .
15
+ full_subdir_path=File.expand_path(f,full_path)
16
+ RipXplore.require_files_in_subdir(full_subdir_path) if File.directory?(full_subdir_path)
17
+ end
18
+ end
19
+ #load all plugins
20
+ require 'HostSystem'
21
+ RipXplore.require_files_in_subdir("host_systems")
22
+ require 'ImageFormat'
23
+ RipXplore.require_files_in_subdir("image_formats")
24
+ require 'FileSystem'
25
+ RipXplore.require_files_in_subdir("file_systems")
26
+ require 'NativeFileType'
27
+ RipXplore.require_files_in_subdir("native_file_types")
28
+ require 'FileSystemImage'
29
+ RipXplore.require_files_in_subdir("disassemblers")
30
+ def RipXplore.supported_file_system_images
31
+ FileSystemImage.subclasses
32
+ end
33
+
34
+ def RipXplore.best_fit_from_file(file,filename=nil)
35
+
36
+ filename=file.path if filename.nil?
37
+ if !(filename=~/(.*)\.gz$/i).nil? then
38
+ require 'zlib'
39
+ file_bytes=Zlib::GzipReader.new(file).read
40
+ filename=$1
41
+ else
42
+ file_bytes=file.read
43
+ end
44
+ FileSystemImage.best_fit(file_bytes,filename)
45
+ end
46
+
47
+ def RipXplore.best_fit_from_filename(filename)
48
+ file=open(filename,"rb")
49
+ RipXplore.best_fit_from_file(file,filename)
50
+ end
51
+ end
52
+
53
+
54
+ # == Author
55
+ # Jonno Downes (jonno@jamtronix.com)
56
+ #
57
+ # == Copyright
58
+ # Copyright (c) 2008 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,63 @@
1
+ $:.unshift(File.dirname(__FILE__)) unless
2
+ $:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
3
+
4
+ require 'logger'
5
+ @@logger=Logger.new(STDERR)
6
+ @@logger.level=Logger::WARN
7
+ class RipXploreLog
8
+
9
+ def RipXploreLog.debug_logging
10
+ @@logger.level=Logger::DEBUG
11
+ end
12
+
13
+ def RipXploreLog.log_to(filename)
14
+ old_log_level=@@logger.level
15
+ @@logger=Logger.new(filename)
16
+ @@logger.level=old_log_level
17
+ end
18
+
19
+ def RipXploreLog.log( message,severity=Logger::INFO, progname = nil)
20
+ @@logger.add(severity,message,progname)
21
+ end
22
+
23
+ #make some helper logging functions
24
+ [:debug,:info,:warn,:error,:fatal].each do |severity|
25
+
26
+ severity_constant="Logger::#{severity.to_s.upcase}"
27
+ class_def=%{
28
+ def RipXploreLog.#{severity}(message,progname=nil)
29
+ RipXploreLog.log(message,#{severity_constant},progname)
30
+ end
31
+ }
32
+ eval class_def
33
+ end
34
+
35
+ end
36
+
37
+
38
+
39
+
40
+ # == Author
41
+ # Jonno Downes (jonno@jamtronix.com)
42
+ #
43
+ # == Copyright
44
+ # Copyright (c) 2008 Jonno Downes (jonno@jamtronix.com)
45
+ #
46
+ #Permission is hereby granted, free of charge, to any person obtaining
47
+ #a copy of this software and associated documentation files (the
48
+ #"Software"), to deal in the Software without restriction, including
49
+ #without limitation the rights to use, copy, modify, merge, publish,
50
+ #distribute, sublicense, and/or sell copies of the Software, and to
51
+ #permit persons to whom the Software is furnished to do so, subject to
52
+ #the following conditions:
53
+
54
+ # The above copyright notice and this permission notice shall be
55
+ # included in all copies or substantial portions of the Software.
56
+
57
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
58
+ # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
59
+ # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
60
+ # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
61
+ # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
62
+ # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
63
+ # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,11 @@
1
+ #derived from http://ola-bini.blogspot.com/2007/07/objectspace-to-have-or-not-to-have.html
2
+ module SubclassTracking
3
+ def self.extended(klazz)
4
+ (class <<klazz; self; end).send :attr_accessor, :subclasses
5
+ (class <<klazz; self; end).send :define_method, :inherited do |clzz|
6
+ klazz.subclasses << clzz
7
+ super
8
+ end
9
+ klazz.subclasses = []
10
+ end
11
+ end
@@ -0,0 +1,181 @@
1
+ $:.unshift(File.dirname(__FILE__)) unless
2
+ $:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
3
+ class D65
4
+ # 6502 Disassembler with symbols
5
+ # based on 6502disassembler.js : n. landsteiner, electronic tradion 2005; e-tradion.net
6
+
7
+ unless defined?(OPCODES) then
8
+ OPCODES= [
9
+ ['BRK',:imp], ['ORA',:inx], ['???',:imp], ['???',:imp], #00..03
10
+ ['TSB',:zpg], ['ORA',:zpg], ['ASL',:zpg], ['???',:imp], #04..07
11
+ ['PHP',:imp], ['ORA',:imm], ['ASL',:acc], ['???',:imp], #08..0b
12
+ ['TSB',:abs], ['ORA',:abs], ['ASL',:abs], ['???',:imp], #0c..0f
13
+ ['BPL',:rel], ['ORA',:iny], ['ORA',:inz], ['???',:imp], #10..13
14
+ ['TRB',:zpg], ['ORA',:zpx], ['ASL',:zpx], ['???',:imp], #14..17
15
+ ['CLC',:imp], ['ORA',:aby], ['INC',:acc], ['???',:imp], #18..1B
16
+ ['INC',:abs], ['ORA',:abx], ['ASL',:abx], ['???',:imp], #1c..1f
17
+ ['JSR',:abs], ['AND',:inx], ['???',:imp], ['???',:imp], #20..23
18
+ ['BIT',:zpg], ['AND',:zpg], ['ROL',:zpg], ['???',:imp], #24..27
19
+ ['PLP',:imp], ['AND',:imm], ['ROL',:acc], ['???',:imp], #28..2b
20
+ ['BIT',:abs], ['AND',:abs], ['ROL',:abs], ['???',:imp], #2c..2f
21
+ ['BMI',:rel], ['AND',:iny], ['AND',:inz], ['???',:imp], #30..33
22
+ ['BIT',:zpx], ['AND',:zpx], ['ROL',:zpx], ['???',:imp], #34..37
23
+ ['SEC',:imp], ['AND',:aby], ['DEC',:acc], ['???',:imp], #38..3b
24
+ ['BIT',:inx], ['AND',:abx], ['ROL',:abx], ['???',:imp], #3c..3f
25
+ ['RTI',:imp], ['EOR',:inx], ['???',:imp], ['???',:imp], #40..43
26
+ ['???',:imp], ['EOR',:zpg], ['LSR',:zpg], ['???',:imp], #44..47
27
+ ['PHA',:imp], ['EOR',:imm], ['LSR',:acc], ['???',:imp], #48..4b
28
+ ['JMP',:abs], ['EOR',:abs], ['LSR',:abs], ['???',:imp], #4c..4f
29
+ ['BVC',:rel], ['EOR',:iny], ['EOR',:inz], ['???',:imp], #50..53
30
+ ['???',:imp], ['EOR',:zpx], ['LSR',:zpx], ['???',:imp], #54..57
31
+ ['CLI',:imp], ['EOR',:aby], ['PHY',:imp], ['???',:imp], #58..5b
32
+ ['???',:imp], ['EOR',:abx], ['LSR',:abx], ['???',:imp], #5c..5f
33
+ ['RTS',:imp], ['ADC',:inx], ['???',:imp], ['???',:imp], #60..63
34
+ ['STZ',:zpg], ['ADC',:zpg], ['ROR',:zpg], ['???',:imp], #64..67
35
+ ['PLA',:imp], ['ADC',:imm], ['ROR',:acc], ['???',:imp], #68..6b
36
+ ['JMP',:ind], ['ADC',:abs], ['ROR',:abs], ['???',:imp], #6c..6f
37
+ ['BVS',:rel], ['ADC',:iny], ['ADC',:inz], ['???',:imp], #70..73
38
+ ['STZ',:zpx], ['ADC',:zpx], ['ROR',:zpx], ['???',:imp], #74..77
39
+ ['SEI',:imp], ['ADC',:aby], ['PLY',:imp], ['???',:imp], #78..7b
40
+ ['JMP',:inx], ['ADC',:abx], ['ROR',:abx], ['???',:imp], #7c..7f
41
+ ['BRA',:rel], ['STA',:inx], ['???',:imp], ['???',:imp], #80..83
42
+ ['STY',:zpg], ['STA',:zpg], ['STX',:zpg], ['???',:imp], #84..87
43
+ ['DEY',:imp], ['BIT',:imm], ['TXA',:imp], ['???',:imp], #88..8b
44
+ ['STY',:abs], ['STA',:abs], ['STX',:abs], ['???',:imp], #8c..8f
45
+ ['BCC',:rel], ['STA',:iny], ['STA',:inz], ['???',:imp], #90..93
46
+ ['STY',:zpx], ['STA',:zpx], ['STX',:zpy], ['???',:imp], #94..97
47
+ ['TYA',:imp], ['STA',:aby], ['TXS',:imp], ['???',:imp], #98..9b
48
+ ['STZ',:abs], ['STA',:abx], ['STZ',:abx], ['???',:imp], #9c..9f
49
+ ['LDY',:imm], ['LDA',:inx], ['LDX',:imm], ['???',:imp], #a0..a3
50
+ ['LDY',:zpg], ['LDA',:zpg], ['LDX',:zpg], ['???',:imp], #a4..a7
51
+ ['TAY',:imp], ['LDA',:imm], ['TAX',:imp], ['???',:imp], #a8..ab
52
+ ['LDY',:abs], ['LDA',:abs], ['LDX',:abs], ['???',:imp], #ab..af
53
+ ['BCS',:rel], ['LDA',:iny], ['LDA',:inz], ['???',:imp], #b0..b3
54
+ ['LDY',:zpx], ['LDA',:zpx], ['LDX',:zpy], ['???',:imp], #b4..b7
55
+ ['CLV',:imp], ['LDA',:aby], ['TSX',:imp], ['???',:imp], #b8..bb
56
+ ['LDY',:abx], ['LDA',:abx], ['LDX',:aby], ['???',:imp], #bc..bf
57
+ ['CPY',:imm], ['CMP',:inx], ['???',:imp], ['???',:imp], #c0..c3
58
+ ['CPY',:zpg], ['CMP',:zpg], ['DEC',:zpg], ['???',:imp], #c4..c7
59
+ ['INY',:imp], ['CMP',:imm], ['DEX',:imp], ['???',:imp], #c8..cb
60
+ ['CPY',:abs], ['CMP',:abs], ['DEC',:abs], ['???',:imp], #cc..cf
61
+ ['BNE',:rel], ['CMP',:iny], ['CMP',:inz], ['???',:imp], #d0..d3
62
+ ['???',:imp], ['CMP',:zpx], ['DEC',:zpx], ['???',:imp], #d4..d7
63
+ ['CLD',:imp], ['CMP',:aby], ['PHX',:imp], ['???',:imp], #d8..db
64
+ ['???',:imp], ['CMP',:abx], ['DEC',:abx], ['???',:imp], #db..df
65
+ ['CPX',:imm], ['SBC',:inx], ['???',:imp], ['???',:imp], #e0..e3
66
+ ['CPX',:zpg], ['SBC',:zpg], ['INC',:zpg], ['???',:imp], #e4..e7
67
+ ['INX',:imp], ['SBC',:imm], ['NOP',:imp], ['???',:imp], #e8..eb
68
+ ['CPX',:abs], ['SBC',:abs], ['INC',:abs], ['???',:imp], #ec..ef
69
+ ['BEQ',:rel], ['SBC',:iny], ['SBC',:ind], ['???',:imp], #f0..f3
70
+ ['???',:imp], ['SBC',:zpx], ['INC',:zpx], ['???',:imp], #f4..f7
71
+ ['SED',:imp], ['SBC',:aby], ['PLX',:imp], ['???',:imp], #f8..fb
72
+ ['???',:imp], ['SBC',:abx], ['INC',:abx], ['???',:imp] #fc..ff
73
+ ]
74
+
75
+
76
+ OPCODE_SIZE={
77
+ :imp,1,
78
+ :acc,1,
79
+ :imm,2,
80
+ :abs,3,
81
+ :abx,3,
82
+ :aby,3,
83
+ :zpg,2,
84
+ :zpx,2,
85
+ :zpy,2,
86
+ :ind,3,
87
+ :inx,2,
88
+ :iny,2,
89
+ :inz,2,
90
+ :rel,2
91
+ }
92
+
93
+ end
94
+
95
+ def self.make_printable(b)
96
+ if (b%0x80)>=0x20 then
97
+ (b%0x80).chr
98
+ else
99
+ '.'
100
+ end
101
+ end
102
+
103
+ def D65.disassemble(buffer,start_address=0,symbols={})
104
+
105
+ index=0
106
+ s=""
107
+ while index<buffer.length
108
+ byte=buffer[index]
109
+ current_address=start_address+index
110
+ opcode_name=OPCODES[byte][0]
111
+ operand_type=OPCODES[byte][1]
112
+ next_byte=(index<buffer.length-1?buffer[index+1]:0)
113
+ next_word=(index<buffer.length-2?buffer[index+1]+buffer[index+2]*256:0)
114
+ operand_format,operand_address= case operand_type
115
+ when :imp then ['','']
116
+ when :acc then ["A",'']
117
+ when :imm then ["\#$%02X",next_byte]
118
+ when :abs then ["$%04X",next_word]
119
+ when :abx then ["$%04X,X",next_word]
120
+ when :aby then ["$%04X,Y",next_word]
121
+ when :zpg then ["$%02X",next_byte]
122
+ when :zpx then ["$%02X,X",next_byte]
123
+ when :zpy then ["$%02X,Y",next_byte]
124
+ when :ind then ["($%04X)",next_word]
125
+ when :inx then ["($%02X),X",next_byte]
126
+ when :iny then ["($%02X),Y",next_byte]
127
+ when :inz then ["($%02X)",next_byte]
128
+ when :rel then ["$%04X",(current_address+next_byte.chr.unpack("c")[0]+2)%0x10000]
129
+ else
130
+ abort("unknown symbol #{operand_type}")
131
+ end
132
+ operand = sprintf(operand_format,operand_address)
133
+ opcode_size=OPCODE_SIZE[operand_type]
134
+ instruction_bytes=case opcode_size
135
+ when 1 then sprintf("%02X | %s | ",byte,make_printable(byte))
136
+ when 2 then sprintf("%02X %02X | %s%s | ",byte,next_byte,make_printable(byte),make_printable(next_byte))
137
+ when 3 then sprintf("%02X %02X %02X | %s%s%s| ",byte,next_byte,next_word>>8,make_printable(byte),make_printable(next_byte),make_printable(next_word>>8))
138
+ end
139
+
140
+ s<<sprintf("%04X: %s %s %s ; ",current_address,instruction_bytes,opcode_name,operand.ljust(10))
141
+ annotation=symbols[current_address] unless symbols.nil?
142
+ if annotation.nil? then
143
+ annotation=symbols[operand_address] unless symbols.nil?
144
+ if (annotation && (operand_type!=:imm)) then
145
+ s<<" "+annotation.to_s
146
+ end
147
+ else
148
+ s<<" @@"+annotation.to_s
149
+ end
150
+ s<< "\n"
151
+ index+=opcode_size
152
+ end
153
+
154
+ s
155
+ end
156
+
157
+ end
158
+ # == Author
159
+ # Jonno Downes (jonno@jamtronix.com)
160
+ #
161
+ # == Copyright
162
+ # Copyright (c) 2007 Jonno Downes (jonno@jamtronix.com)
163
+ #
164
+ #Permission is hereby granted, free of charge, to any person obtaining
165
+ #a copy of this software and associated documentation files (the
166
+ #"Software"), to deal in the Software without restriction, including
167
+ #without limitation the rights to use, copy, modify, merge, publish,
168
+ #distribute, sublicense, and/or sell copies of the Software, and to
169
+ #permit persons to whom the Software is furnished to do so, subject to
170
+ #the following conditions:
171
+
172
+ # The above copyright notice and this permission notice shall be
173
+ # included in all copies or substantial portions of the Software.
174
+
175
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
176
+ # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
177
+ # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
178
+ # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
179
+ # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
180
+ # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
181
+ # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,123 @@
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
+
8
+ require 'FileSystem'
9
+ class AppleCPM<FileSystem
10
+
11
+ def self.host_system
12
+ Apple2
13
+ end
14
+
15
+ def self.matching_score
16
+ 20
17
+ end
18
+
19
+ RECORD_SIZE=128
20
+ BLOCK_SIZE=1024
21
+ BLOCKS_PER_EXTENT=16
22
+ RECORDS_PER_BLOCK=BLOCK_SIZE/RECORD_SIZE
23
+ RECORDS_PER_EXTENT=RECORDS_PER_BLOCK*BLOCKS_PER_EXTENT
24
+
25
+ SECTORS_IN_BLOCK=[
26
+ [0x00,0x06,0x0C,0x03], #block 0
27
+ [0x09,0x0F,0x0E,0x05], #block 1
28
+ [0x0B,0x02,0x08,0x07], #block 2
29
+ [0x0D,0x04,0x0A,0x01] #block 3
30
+ ]
31
+
32
+ def self.get_block(file_system_image,block_no)
33
+ track_no= ((block_no/4)+3)%file_system_image.track_count
34
+ s=""
35
+ SECTORS_IN_BLOCK[block_no%4].each {|sector_no| s+=file_system_image.get_sector(track_no,sector_no)}
36
+ s
37
+ end
38
+
39
+
40
+ #look for a valid looking CPM directory on track 3.
41
+ #go through each sector in order, for each sector, look at every 32nd byte, and see if it is a valid 'user number' (i.e. a number from 00..0F). Stop looking when you see an 'E5'.
42
+ #if an invalid user number is found before an E5, then the disk is NOT a CPM disk
43
+ is_valid_file_system_if lambda {
44
+ is_valid=true
45
+ found_0xE5_byte=false
46
+ [0x0,0x6,0xC,0x3,0x9, 0xF,0xE,0x5].each do |sector_no|
47
+ sector=file_system_image.get_sector(3,sector_no)
48
+ if sector.nil? then
49
+ is_valid=false
50
+ break
51
+ end
52
+ [0x00,0x20,0x40,0x60,0x80,0xA0,0xC0,0xE0].each do |byte_number|
53
+ if (sector[byte_number]>0x0F && sector[byte_number]!=0xe5 && sector[byte_number]!=0x1F) then
54
+ is_valid=false
55
+ break
56
+ end
57
+ if (sector[byte_number]==0xe5) then
58
+ found_0xE5_byte=true
59
+ end
60
+ end
61
+ end
62
+ is_valid && found_0xE5_byte
63
+ }
64
+
65
+ #CPM DIR looks like this:
66
+ #$00 User number, or E5h if it's a free entry
67
+ #$01..0B Filename + extension: 8+3 characters
68
+ #$0C..0D Extent number of this entry
69
+ #$0E ???
70
+ #$0F Number of 128-byte records allocated in this extant
71
+ #$10..1F Allocation map for this directory entry
72
+ def self.files(file_system_image)
73
+ files=FileContainer.new
74
+ catalog=get_block(file_system_image,0)+get_block(file_system_image,1)
75
+ 0.upto(63) do |dir_entry_no|
76
+ dir_entry_start=dir_entry_no*0x20
77
+ dir_entry=catalog[dir_entry_start..dir_entry_start+0x1F]
78
+ if (dir_entry[0]<0x10) then
79
+ file_name=dir_entry[0x01..0x08].gsub(' ','')
80
+ file_ext=dir_entry[0x09..0x0B].gsub(' ','')
81
+ full_filename="#{file_name}.#{file_ext}"
82
+ files<<NativeFileType.best_fit(file_system_image,full_filename,'',file_ext)
83
+ if files[full_filename].nil? then
84
+ files<<file
85
+ end
86
+ s=""
87
+ 0x10.upto(0x1f) do |i|
88
+ block=dir_entry[i]
89
+ s+=get_block(file_system_image,block) unless block==0
90
+ end
91
+ records_allocated=dir_entry[0x0F]
92
+ files[full_filename].contents+=s[0,(records_allocated*128)]
93
+ end
94
+ end
95
+ files
96
+ end
97
+ end
98
+
99
+
100
+ # == Author
101
+ # Jonno Downes (jonno@jamtronix.com)
102
+ #
103
+ # == Copyright
104
+ # Copyright (c) 2007 Jonno Downes (jonno@jamtronix.com)
105
+ #
106
+ #Permission is hereby granted, free of charge, to any person obtaining
107
+ #a copy of this software and associated documentation files (the
108
+ #"Software"), to deal in the Software without restriction, including
109
+ #without limitation the rights to use, copy, modify, merge, publish,
110
+ #distribute, sublicense, and/or sell copies of the Software, and to
111
+ #permit persons to whom the Software is furnished to do so, subject to
112
+ #the following conditions:
113
+
114
+ # The above copyright notice and this permission notice shall be
115
+ # included in all copies or substantial portions of the Software.
116
+
117
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
118
+ # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
119
+ # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
120
+ # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
121
+ # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
122
+ # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
123
+ # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,211 @@
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
+
8
+ require 'FileSystem'
9
+ #
10
+ # Disk image with a standard Apple DOS 3.3 VTOC at track $11, sector $00
11
+ #
12
+ #
13
+ #VTOC : Volume Table of Contents (from Beneath Apple DOS pp 4-2 & 4-3)
14
+ # 00 not used
15
+ # 01 track number of first catalog sector
16
+ # 02 sector number of first catalog sector
17
+ # 03 release number of DOS used to INIT this disk
18
+ # 04-05 not used
19
+ # 06 Diskette volume number (1-254)
20
+ # 07-26 not used
21
+ # 27 maximum number of track/sector pairs which will fit in one file track/sector
22
+ # list sector (122 for 256 byte sectors)
23
+ # 28-2F not used
24
+ # 30 last track where sectors were allocated
25
+ # 31 direction of track allocation (+1 or -1)
26
+ # 32-33 not used
27
+ # 34 number of tracks per diskette (normally 35)
28
+ # 35 number of sectors per track (13 or 16)
29
+ # 36-37 number of bytes per sector (LO/HI format)
30
+ # 38-3B bit map of free sectors in track 0
31
+ # 3C-3F bit map of free sectors in track 1
32
+ # 40-43 bit map of free sectors in track 2
33
+ # ...
34
+ # BC-BF bit map of free sectors in track 33
35
+ # CO-C3 bit map of free sectors in track 34
36
+ # C4-FF bit maps for additional tracks if there are more than 35 tracks per diskette
37
+ #
38
+ #CATALOG (from Beneath Apple DOS p 4-6)
39
+ # 00 Not Used
40
+ # 01 track number of next catalog sector
41
+ # 02 sector number of next catalog sector
42
+ # 03-0A not used
43
+ # 0B-2D First file descriptive entry
44
+ # 2E-50 Second file descriptive entry
45
+ # 51-73 Third file descriptive entry
46
+ # 74-96 Fourth file descriptive entry
47
+ # 97-B9 Fifth file descriptive entry
48
+ # BA-DC Sixth file descriptive entry
49
+ # DD-FF Seventh file descriptive entry
50
+ #
51
+ #FILE DESCRIPTIVE ENTRY (from Beneath Apple DOS p 4-6)
52
+ # 00 Track of first track/sector list sector, if this is a deleted file this contains FF
53
+ # and the original track number is copied to the last byte of the file name (BYTE 20)
54
+ # If this byte contains a 00, the entry is assumed to never have been used and is
55
+ # available for use. (This means track 0 can never be used for data even if the DOS image
56
+ # is 'wiped' from the disk)
57
+ #
58
+ # 01 Sector of first track/sector list sector
59
+ # 02 File type and flags:
60
+ # 80+file type - file is locked
61
+ # 00+file type - file is not locked
62
+ #
63
+ # 00 - TEXT file
64
+ # 01 - INTEGER BASIC file
65
+ # 02 - APPLESOFT BASIC file
66
+ # 04 - BINARY file
67
+ # 08 - S type file
68
+ # 10 - RELOCATABLE object module file
69
+ # 20 - a type file
70
+ # 40 - b type file
71
+ #
72
+ # 03-20 File Name (30 characters)
73
+ # 21-22 Length of file in sectors (LO/HI format)
74
+ #
75
+ #
76
+ #TRACK/SECTOR LIST FORMAT (from Beneath Apple DOS p 4-6)
77
+ # 00 Not used
78
+ # 01 Track number of next T/S list of one is needed or zero if no more t/s list
79
+ # 02 Sector number of next T/S list (if one is present)
80
+ # 03-04 Not used
81
+ # 05-06 Sector offset in file of the first sector described by this list
82
+ # 07-oB Not used
83
+ # 0C-0D Track and sector of first data sector or zeros
84
+ # 0E-0F Track and sector of second data sector or zeros
85
+ # 10-FF Up to 120 more track and sector pairs
86
+ class AppleDos<FileSystem
87
+
88
+ def self.host_system
89
+ Apple2
90
+ end
91
+
92
+ #if the filesystem on a DSK is DOS, we don't have to worry about sector interleaves
93
+ is_valid_file_system_if lambda {!file_system_image.image_format.is_a?(A2DskDosOrder)}
94
+
95
+ # does this image have a standard Apple DOS 3.3 VTOC?
96
+ # VTOC is at track 0x11, sector 0
97
+ # bytes 1 & 2 are a track number, sector number and DOS version number
98
+ # byte 27 is maximum number of track/sector pairs which will fit in one file track/sector list sector (122 for 256 byte sectors)
99
+ # 35 number of sectors per track (16)
100
+ # see if these are reasonable values
101
+ is_valid_file_system_if lambda {
102
+ vtoc_sector=file_system_image.get_sector(AppleDos.vtoc_track_no,AppleDos.vtoc_sector_no)
103
+ (! vtoc_sector.nil?) && (vtoc_sector[01]<=34) && (vtoc_sector[02]<=15) && (vtoc_sector[0x27]==0x7A) && (vtoc_sector[0x35]==0x10)
104
+ }
105
+
106
+ def self.vtoc_track_no
107
+ 0x11
108
+ end
109
+
110
+ def self.vtoc_sector_no
111
+ 0
112
+ end
113
+
114
+ def self.files(file_system_image)
115
+ files=FileContainer.new
116
+ vtoc_sector=file_system_image.get_sector(vtoc_track_no,vtoc_sector_no)
117
+ catalog_sector=file_system_image.get_sector(vtoc_sector[01],vtoc_sector[02])
118
+ done=false
119
+ visited_sectors={}
120
+ while !done
121
+ break if catalog_sector.nil?
122
+ (0..6).each {|file_number|
123
+ file_descriptive_entry_start=11+file_number*35
124
+ file_descriptive_entry=catalog_sector[file_descriptive_entry_start,36]
125
+ break if (file_descriptive_entry[0]==0xFF) # skip deleted files
126
+ filename=""
127
+ file_descriptive_entry[3..32].to_s.each_byte{|b| filename+=(b.%128).chr}
128
+ filename.gsub!(/ *$/,"") #strip off trailing spaces
129
+ filename.tr!("\x00-\x1f","\x40-\x5f") #convert non-printable chars to corresponding uppercase letter
130
+ locked=(file_descriptive_entry[2]>=0x80)
131
+ sector_count=file_descriptive_entry[0x21]+file_descriptive_entry[0x22]*256
132
+
133
+ file_type_code=file_descriptive_entry[2]%0x80
134
+
135
+
136
+ if (sector_count>0) then
137
+ contents=""
138
+ ts_list_track_no=file_descriptive_entry[0]
139
+ ts_list_sector_no=file_descriptive_entry[1]
140
+ while (ts_list_track_no>0) && (ts_list_track_no<=0X22) && (ts_list_sector_no<=0x0f)
141
+ ts_list_sector=file_system_image.get_sector(ts_list_track_no,ts_list_sector_no)
142
+ ts_list_track_no=ts_list_sector[1]
143
+ ts_list_sector_no=ts_list_sector[2]
144
+
145
+ 0x0C.step(0xff,2) {|i|
146
+ data_track_no=ts_list_sector[i]
147
+ data_sector_no=ts_list_sector[i+1]
148
+ if (data_track_no>0) && (data_track_no<=0X22) && (data_sector_no<=0x0f) then
149
+ contents+=file_system_image.get_sector(data_track_no,data_sector_no)
150
+ end
151
+ }
152
+ end
153
+ if contents.length>0 then
154
+ files<<NativeFileType.best_fit(file_system_image,filename,contents,file_type_code)
155
+ # @files<< case file_type_code
156
+ # when 0x00 then TextFile.new(filename,contents,locked)
157
+ # when 0x01 then SCAsmFile.can_be_scasm_file?(contents)? SCAsmFile.new(filename,contents,locked): IntegerBasicFile.new(filename,contents,locked)
158
+ # when 0x02 then AppleSoftFile.new(filename,contents,locked)
159
+ # when 0x04 then MusiCompFile.can_be_musicomp_file?(filename,contents)? MusiCompFile.new(filename,contents,locked): BinaryFile.new(filename,contents,locked)
160
+ # when 0x08 then "S" #S type file
161
+ # when 0x10 then "R" #RELOCATABLE object module file
162
+ # when 0x20 then "a" #??
163
+ # when 0x40 then "b" #??
164
+ # else DOSFile.new(filename,contents,locked,file_type_code)
165
+ # end
166
+ end
167
+ end
168
+ }
169
+ next_track=catalog_sector[1]
170
+ next_sector=catalog_sector[2]%0x10
171
+ if (next_track==0) &&( next_sector==0) then
172
+ done=true
173
+ else
174
+ #check we haven't got into an endless loop
175
+ s="#{next_track}/#{next_sector}"
176
+ if (!visited_sectors[s].nil?) then
177
+ done=true
178
+ end
179
+ visited_sectors[s]=true
180
+ catalog_sector=file_system_image.get_sector(next_track,next_sector)
181
+ end
182
+ end
183
+ files
184
+ end
185
+ end
186
+
187
+
188
+ # == Author
189
+ # Jonno Downes (jonno@jamtronix.com)
190
+ #
191
+ # == Copyright
192
+ # Copyright (c) 2007 Jonno Downes (jonno@jamtronix.com)
193
+ #
194
+ #Permission is hereby granted, free of charge, to any person obtaining
195
+ #a copy of this software and associated documentation files (the
196
+ #"Software"), to deal in the Software without restriction, including
197
+ #without limitation the rights to use, copy, modify, merge, publish,
198
+ #distribute, sublicense, and/or sell copies of the Software, and to
199
+ #permit persons to whom the Software is furnished to do so, subject to
200
+ #the following conditions:
201
+
202
+ # The above copyright notice and this permission notice shall be
203
+ # included in all copies or substantial portions of the Software.
204
+
205
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
206
+ # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
207
+ # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
208
+ # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
209
+ # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
210
+ # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
211
+ # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.