formats.py 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240
  1. # greaseweazle/codec/formats.py
  2. #
  3. # Written & released by Keir Fraser <keir.xen@gmail.com>
  4. #
  5. # This is free and unencumbered software released into the public domain.
  6. # See the file COPYING for more details, or visit <http://unlicense.org>.
  7. from collections import OrderedDict
  8. from greaseweazle.tools import util
  9. class Format:
  10. adf_compatible = False
  11. img_compatible = False
  12. default_trackset = 'c=0-79:h=0-1'
  13. max_trackset = 'c=0-81:h=0-1'
  14. def __init__(self):
  15. self.default_tracks = util.TrackSet(self.default_trackset)
  16. self.max_tracks = util.TrackSet(self.max_trackset)
  17. self.decode_track = self.fmt.decode_track
  18. class Format_Acorn_DFS_SS(Format):
  19. img_compatible = True
  20. default_trackset = 'c=0-39:h=0'
  21. max_trackset = 'c=0-81:h=0'
  22. def __init__(self):
  23. import greaseweazle.codec.ibm.fm as m
  24. self.fmt = m.Acorn_DFS
  25. self.default_revs = m.default_revs
  26. super().__init__()
  27. class Format_Acorn_DFS_DS(Format):
  28. img_compatible = True
  29. default_trackset = 'c=0-39:h=0-1'
  30. max_trackset = 'c=0-81:h=0-1'
  31. def __init__(self):
  32. import greaseweazle.codec.ibm.fm as m
  33. self.fmt = m.Acorn_DFS
  34. self.default_revs = m.default_revs
  35. super().__init__()
  36. class Format_Acorn_ADFS_160(Format):
  37. img_compatible = True
  38. default_trackset = 'c=0-39:h=0'
  39. max_trackset = 'c=0-81:h=0'
  40. def __init__(self):
  41. import greaseweazle.codec.ibm.mfm as m
  42. self.fmt = m.Acorn_ADFS_640
  43. self.default_revs = m.default_revs
  44. super().__init__()
  45. class Format_Acorn_ADFS_320(Format):
  46. img_compatible = True
  47. default_trackset = 'c=0-79:h=0'
  48. max_trackset = 'c=0-81:h=0'
  49. def __init__(self):
  50. import greaseweazle.codec.ibm.mfm as m
  51. self.fmt = m.Acorn_ADFS_640
  52. self.default_revs = m.default_revs
  53. super().__init__()
  54. class Format_Acorn_ADFS_640(Format):
  55. img_compatible = True
  56. def __init__(self):
  57. import greaseweazle.codec.ibm.mfm as m
  58. self.fmt = m.Acorn_ADFS_640
  59. self.default_revs = m.default_revs
  60. super().__init__()
  61. class Format_Acorn_ADFS_800(Format):
  62. img_compatible = True
  63. def __init__(self):
  64. import greaseweazle.codec.ibm.mfm as m
  65. self.fmt = m.Acorn_ADFS_800
  66. self.default_revs = m.default_revs
  67. super().__init__()
  68. class Format_Acorn_ADFS_1600(Format):
  69. img_compatible = True
  70. def __init__(self):
  71. import greaseweazle.codec.ibm.mfm as m
  72. self.fmt = m.Acorn_ADFS_1600
  73. self.default_revs = m.default_revs
  74. super().__init__()
  75. class Format_Amiga_AmigaDOS_DD(Format):
  76. adf_compatible = True
  77. def __init__(self):
  78. import greaseweazle.codec.amiga.amigados as m
  79. self.fmt = m.AmigaDOS_DD
  80. self.default_revs = m.default_revs
  81. super().__init__()
  82. class Format_Amiga_AmigaDOS_HD(Format):
  83. adf_compatible = True
  84. def __init__(self):
  85. import greaseweazle.codec.amiga.amigados as m
  86. self.fmt = m.AmigaDOS_HD
  87. self.default_revs = m.default_revs
  88. super().__init__()
  89. class Format_IBM_180(Format):
  90. img_compatible = True
  91. default_trackset = 'c=0-39:h=0'
  92. max_trackset = 'c=0-41:h=0'
  93. def __init__(self):
  94. import greaseweazle.codec.ibm.mfm as m
  95. self.fmt = m.IBM_MFM_720
  96. self.default_revs = m.default_revs
  97. super().__init__()
  98. class Format_IBM_360(Format):
  99. img_compatible = True
  100. default_trackset = 'c=0-39:h=0-1'
  101. max_trackset = 'c=0-41:h=0-1'
  102. def __init__(self):
  103. import greaseweazle.codec.ibm.mfm as m
  104. self.fmt = m.IBM_MFM_720
  105. self.default_revs = m.default_revs
  106. super().__init__()
  107. class Format_IBM_720(Format):
  108. img_compatible = True
  109. def __init__(self):
  110. import greaseweazle.codec.ibm.mfm as m
  111. self.fmt = m.IBM_MFM_720
  112. self.default_revs = m.default_revs
  113. super().__init__()
  114. class Format_IBM_800(Format):
  115. img_compatible = True
  116. def __init__(self):
  117. import greaseweazle.codec.ibm.mfm as m
  118. self.fmt = m.IBM_MFM_800
  119. self.default_revs = m.default_revs
  120. super().__init__()
  121. class Format_IBM_1440(Format):
  122. img_compatible = True
  123. def __init__(self):
  124. import greaseweazle.codec.ibm.mfm as m
  125. self.fmt = m.IBM_MFM_1440
  126. self.default_revs = m.default_revs
  127. super().__init__()
  128. class Format_IBM_1200(Format):
  129. img_compatible = True
  130. def __init__(self):
  131. import greaseweazle.codec.ibm.mfm as m
  132. self.fmt = m.IBM_MFM_1200
  133. self.default_revs = m.default_revs
  134. super().__init__()
  135. class Format_AtariST_360(Format):
  136. img_compatible = True
  137. default_trackset = 'c=0-79:h=0'
  138. max_trackset = 'c=0-81:h=0'
  139. def __init__(self):
  140. import greaseweazle.codec.ibm.mfm as m
  141. self.fmt = m.AtariST_SS_9SPT
  142. self.default_revs = m.default_revs
  143. super().__init__()
  144. class Format_AtariST_400(Format):
  145. img_compatible = True
  146. default_trackset = 'c=0-79:h=0'
  147. max_trackset = 'c=0-81:h=0'
  148. def __init__(self):
  149. import greaseweazle.codec.ibm.mfm as m
  150. self.fmt = m.AtariST_10SPT
  151. self.default_revs = m.default_revs
  152. super().__init__()
  153. class Format_AtariST_440(Format):
  154. img_compatible = True
  155. default_trackset = 'c=0-79:h=0'
  156. max_trackset = 'c=0-81:h=0'
  157. def __init__(self):
  158. import greaseweazle.codec.ibm.mfm as m
  159. self.fmt = m.AtariST_11SPT
  160. self.default_revs = m.default_revs
  161. super().__init__()
  162. class Format_AtariST_720(Format):
  163. img_compatible = True
  164. def __init__(self):
  165. import greaseweazle.codec.ibm.mfm as m
  166. self.fmt = m.AtariST_DS_9SPT
  167. self.default_revs = m.default_revs
  168. super().__init__()
  169. class Format_AtariST_800(Format):
  170. img_compatible = True
  171. def __init__(self):
  172. import greaseweazle.codec.ibm.mfm as m
  173. self.fmt = m.AtariST_10SPT
  174. self.default_revs = m.default_revs
  175. super().__init__()
  176. class Format_AtariST_880(Format):
  177. img_compatible = True
  178. def __init__(self):
  179. import greaseweazle.codec.ibm.mfm as m
  180. self.fmt = m.AtariST_11SPT
  181. self.default_revs = m.default_revs
  182. super().__init__()
  183. formats = OrderedDict({
  184. 'acorn.dfs.ss': Format_Acorn_DFS_SS,
  185. 'acorn.dfs.ds': Format_Acorn_DFS_DS,
  186. 'acorn.adfs.160': Format_Acorn_ADFS_160,
  187. 'acorn.adfs.320': Format_Acorn_ADFS_320,
  188. 'acorn.adfs.640': Format_Acorn_ADFS_640,
  189. 'acorn.adfs.800': Format_Acorn_ADFS_800,
  190. 'acorn.adfs.1600': Format_Acorn_ADFS_1600,
  191. 'amiga.amigados': Format_Amiga_AmigaDOS_DD,
  192. 'amiga.amigados_hd': Format_Amiga_AmigaDOS_HD,
  193. 'atarist.360': Format_AtariST_360,
  194. 'atarist.400': Format_AtariST_400,
  195. 'atarist.440': Format_AtariST_440,
  196. 'atarist.720': Format_AtariST_720,
  197. 'atarist.800': Format_AtariST_800,
  198. 'atarist.880': Format_AtariST_880,
  199. 'commodore.1581': Format_IBM_800,
  200. 'ibm.180': Format_IBM_180,
  201. 'ibm.360': Format_IBM_360,
  202. 'ibm.720': Format_IBM_720,
  203. 'ibm.1200': Format_IBM_1200,
  204. 'ibm.1440': Format_IBM_1440,
  205. })
  206. def print_formats(f = None):
  207. s = ''
  208. for k, v in formats.items():
  209. if not f or f(k, v):
  210. if s:
  211. s += '\n'
  212. s += ' ' + k
  213. return s