formats.py 5.2 KB

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