formats.py 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189
  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 greaseweazle.tools import util
  8. class Format:
  9. adf_compatible = False
  10. img_compatible = False
  11. default_trackset = 'c=0-79:h=0-1'
  12. max_trackset = 'c=0-81:h=0-1'
  13. def __init__(self):
  14. self.default_tracks = util.TrackSet(self.default_trackset)
  15. self.max_tracks = util.TrackSet(self.max_trackset)
  16. self.decode_track = self.fmt.decode_track
  17. class Format_Acorn_DFS_SS(Format):
  18. img_compatible = True
  19. default_trackset = 'c=0-39:h=0'
  20. max_trackset = 'c=0-81:h=0'
  21. def __init__(self):
  22. import greaseweazle.codec.ibm.fm as m
  23. self.fmt = m.Acorn_DFS
  24. self.default_revs = m.default_revs
  25. super().__init__()
  26. class Format_Acorn_DFS_DS(Format):
  27. img_compatible = True
  28. default_trackset = 'c=0-39:h=0-1'
  29. max_trackset = 'c=0-81:h=0-1'
  30. def __init__(self):
  31. import greaseweazle.codec.ibm.fm as m
  32. self.fmt = m.Acorn_DFS
  33. self.default_revs = m.default_revs
  34. super().__init__()
  35. class Format_Amiga_AmigaDOS_DD(Format):
  36. adf_compatible = True
  37. def __init__(self):
  38. import greaseweazle.codec.amiga.amigados as m
  39. self.fmt = m.AmigaDOS_DD
  40. self.default_revs = m.default_revs
  41. super().__init__()
  42. class Format_Amiga_AmigaDOS_HD(Format):
  43. adf_compatible = True
  44. def __init__(self):
  45. import greaseweazle.codec.amiga.amigados as m
  46. self.fmt = m.AmigaDOS_HD
  47. self.default_revs = m.default_revs
  48. super().__init__()
  49. class Format_IBM_180(Format):
  50. img_compatible = True
  51. default_trackset = 'c=0-39:h=0'
  52. max_trackset = 'c=0-41:h=0'
  53. def __init__(self):
  54. import greaseweazle.codec.ibm.mfm as m
  55. self.fmt = m.IBM_MFM_720
  56. self.default_revs = m.default_revs
  57. super().__init__()
  58. class Format_IBM_360(Format):
  59. img_compatible = True
  60. default_trackset = 'c=0-39:h=0-1'
  61. max_trackset = 'c=0-41:h=0-1'
  62. def __init__(self):
  63. import greaseweazle.codec.ibm.mfm as m
  64. self.fmt = m.IBM_MFM_720
  65. self.default_revs = m.default_revs
  66. super().__init__()
  67. class Format_IBM_720(Format):
  68. img_compatible = True
  69. def __init__(self):
  70. import greaseweazle.codec.ibm.mfm as m
  71. self.fmt = m.IBM_MFM_720
  72. self.default_revs = m.default_revs
  73. super().__init__()
  74. class Format_IBM_800(Format):
  75. img_compatible = True
  76. def __init__(self):
  77. import greaseweazle.codec.ibm.mfm as m
  78. self.fmt = m.IBM_MFM_800
  79. self.default_revs = m.default_revs
  80. super().__init__()
  81. class Format_IBM_1440(Format):
  82. img_compatible = True
  83. def __init__(self):
  84. import greaseweazle.codec.ibm.mfm as m
  85. self.fmt = m.IBM_MFM_1440
  86. self.default_revs = m.default_revs
  87. super().__init__()
  88. class Format_IBM_1200(Format):
  89. img_compatible = True
  90. def __init__(self):
  91. import greaseweazle.codec.ibm.mfm as m
  92. self.fmt = m.IBM_MFM_1200
  93. self.default_revs = m.default_revs
  94. super().__init__()
  95. class Format_AtariST_360(Format):
  96. img_compatible = True
  97. default_trackset = 'c=0-79:h=0'
  98. max_trackset = 'c=0-81:h=0'
  99. def __init__(self):
  100. import greaseweazle.codec.ibm.mfm as m
  101. self.fmt = m.AtariST_SS_9SPT
  102. self.default_revs = m.default_revs
  103. super().__init__()
  104. class Format_AtariST_400(Format):
  105. img_compatible = True
  106. default_trackset = 'c=0-79:h=0'
  107. max_trackset = 'c=0-81:h=0'
  108. def __init__(self):
  109. import greaseweazle.codec.ibm.mfm as m
  110. self.fmt = m.AtariST_10SPT
  111. self.default_revs = m.default_revs
  112. super().__init__()
  113. class Format_AtariST_440(Format):
  114. img_compatible = True
  115. default_trackset = 'c=0-79:h=0'
  116. max_trackset = 'c=0-81:h=0'
  117. def __init__(self):
  118. import greaseweazle.codec.ibm.mfm as m
  119. self.fmt = m.AtariST_11SPT
  120. self.default_revs = m.default_revs
  121. super().__init__()
  122. class Format_AtariST_720(Format):
  123. img_compatible = True
  124. def __init__(self):
  125. import greaseweazle.codec.ibm.mfm as m
  126. self.fmt = m.AtariST_DS_9SPT
  127. self.default_revs = m.default_revs
  128. super().__init__()
  129. class Format_AtariST_800(Format):
  130. img_compatible = True
  131. def __init__(self):
  132. import greaseweazle.codec.ibm.mfm as m
  133. self.fmt = m.AtariST_10SPT
  134. self.default_revs = m.default_revs
  135. super().__init__()
  136. class Format_AtariST_880(Format):
  137. img_compatible = True
  138. def __init__(self):
  139. import greaseweazle.codec.ibm.mfm as m
  140. self.fmt = m.AtariST_11SPT
  141. self.default_revs = m.default_revs
  142. super().__init__()
  143. formats = {
  144. 'acorn.dfs.ss': Format_Acorn_DFS_SS,
  145. 'acorn.dfs.ds': Format_Acorn_DFS_DS,
  146. 'amiga.amigados': Format_Amiga_AmigaDOS_DD,
  147. 'amiga.amigados_hd': Format_Amiga_AmigaDOS_HD,
  148. 'ibm.180': Format_IBM_180,
  149. 'ibm.360': Format_IBM_360,
  150. 'ibm.720': Format_IBM_720,
  151. 'ibm.1200': Format_IBM_1200,
  152. 'ibm.1440': Format_IBM_1440,
  153. 'atarist.360': Format_AtariST_360,
  154. 'atarist.400': Format_AtariST_400,
  155. 'atarist.440': Format_AtariST_440,
  156. 'atarist.720': Format_AtariST_720,
  157. 'atarist.800': Format_AtariST_800,
  158. 'atarist.880': Format_AtariST_880,
  159. 'commodore.1581': Format_IBM_800,
  160. }
  161. def print_formats(f = None):
  162. s = ''
  163. for k, v in sorted(formats.items()):
  164. if not f or f(k, v):
  165. if s:
  166. s += '\n'
  167. s += ' ' + k
  168. return s