formats.py 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  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_720(Format):
  23. img_compatible = True
  24. def __init__(self):
  25. import greaseweazle.codec.ibm.mfm as m
  26. self.fmt = m.IBM_MFM_720
  27. self.default_revs = m.default_revs
  28. self.decode_track = self.fmt.decode_track
  29. super().__init__()
  30. class Format_IBM_800(Format):
  31. img_compatible = True
  32. def __init__(self):
  33. import greaseweazle.codec.ibm.mfm as m
  34. self.fmt = m.IBM_MFM_800
  35. self.default_revs = m.default_revs
  36. self.decode_track = self.fmt.decode_track
  37. super().__init__()
  38. class Format_IBM_1440(Format):
  39. img_compatible = True
  40. def __init__(self):
  41. import greaseweazle.codec.ibm.mfm as m
  42. self.fmt = m.IBM_MFM_1M44
  43. self.default_revs = m.default_revs
  44. self.decode_track = self.fmt.decode_track
  45. super().__init__()
  46. class Format_AtariST_360(Format):
  47. img_compatible = True
  48. default_trackset = 'c=0-79:h=0'
  49. max_trackset = 'c=0-81:h=0'
  50. def __init__(self):
  51. import greaseweazle.codec.ibm.mfm as m
  52. self.fmt = m.AtariST_SS_9SPT
  53. self.default_revs = m.default_revs
  54. self.decode_track = self.fmt.decode_track
  55. super().__init__()
  56. class Format_AtariST_400(Format):
  57. img_compatible = True
  58. default_trackset = 'c=0-79:h=0'
  59. max_trackset = 'c=0-81:h=0'
  60. def __init__(self):
  61. import greaseweazle.codec.ibm.mfm as m
  62. self.fmt = m.AtariST_10SPT
  63. self.default_revs = m.default_revs
  64. self.decode_track = self.fmt.decode_track
  65. super().__init__()
  66. class Format_AtariST_440(Format):
  67. img_compatible = True
  68. default_trackset = 'c=0-79:h=0'
  69. max_trackset = 'c=0-81:h=0'
  70. def __init__(self):
  71. import greaseweazle.codec.ibm.mfm as m
  72. self.fmt = m.AtariST_11SPT
  73. self.default_revs = m.default_revs
  74. self.decode_track = self.fmt.decode_track
  75. super().__init__()
  76. class Format_AtariST_720(Format):
  77. img_compatible = True
  78. def __init__(self):
  79. import greaseweazle.codec.ibm.mfm as m
  80. self.fmt = m.AtariST_DS_9SPT
  81. self.default_revs = m.default_revs
  82. self.decode_track = self.fmt.decode_track
  83. super().__init__()
  84. class Format_AtariST_800(Format):
  85. img_compatible = True
  86. def __init__(self):
  87. import greaseweazle.codec.ibm.mfm as m
  88. self.fmt = m.AtariST_10SPT
  89. self.default_revs = m.default_revs
  90. self.decode_track = self.fmt.decode_track
  91. super().__init__()
  92. class Format_AtariST_880(Format):
  93. img_compatible = True
  94. def __init__(self):
  95. import greaseweazle.codec.ibm.mfm as m
  96. self.fmt = m.AtariST_11SPT
  97. self.default_revs = m.default_revs
  98. self.decode_track = self.fmt.decode_track
  99. super().__init__()
  100. formats = {
  101. 'amiga.amigados': Format_Amiga_AmigaDOS,
  102. 'ibm.720': Format_IBM_720,
  103. 'ibm.1440': Format_IBM_1440,
  104. 'atarist.360': Format_AtariST_360,
  105. 'atarist.400': Format_AtariST_400,
  106. 'atarist.440': Format_AtariST_440,
  107. 'atarist.720': Format_AtariST_720,
  108. 'atarist.800': Format_AtariST_800,
  109. 'atarist.880': Format_AtariST_880,
  110. 'commodore.1581': Format_IBM_800,
  111. }
  112. def print_formats(f = None):
  113. s = ''
  114. for k, v in sorted(formats.items()):
  115. if not f or f(k, v):
  116. if s:
  117. s += '\n'
  118. s += ' ' + k
  119. return s