mirror of
https://github.com/keirf/greaseweazle-firmware.git
synced 2025-10-31 11:06:44 -07:00
New Commodore 1581 format specifier and *.D81 image support
This commit is contained in:
@@ -1,11 +1,19 @@
|
||||
# greaseweazle/codec/formats.py
|
||||
#
|
||||
# Written & released by Keir Fraser <keir.xen@gmail.com>
|
||||
#
|
||||
# This is free and unencumbered software released into the public domain.
|
||||
# See the file COPYING for more details, or visit <http://unlicense.org>.
|
||||
|
||||
from greaseweazle.tools import util
|
||||
|
||||
class Format:
|
||||
img_compatible = False
|
||||
default_trackset = 'c=0-79:h=0-1'
|
||||
max_trackset = 'c=0-81:h=0-1'
|
||||
def __init__(self):
|
||||
self.tracks = util.TrackSet(self.default_trackset)
|
||||
self.default_tracks = util.TrackSet(self.default_trackset)
|
||||
self.max_tracks = util.TrackSet(self.max_trackset)
|
||||
|
||||
class Format_Amiga_AmigaDOS(Format):
|
||||
def __init__(self):
|
||||
@@ -24,6 +32,15 @@ class Format_IBM_720(Format):
|
||||
self.decode_track = self.fmt.decode_track
|
||||
super().__init__()
|
||||
|
||||
class Format_IBM_800(Format):
|
||||
img_compatible = True
|
||||
def __init__(self):
|
||||
import greaseweazle.codec.ibm.mfm as m
|
||||
self.fmt = m.IBM_MFM_800
|
||||
self.default_revs = m.default_revs
|
||||
self.decode_track = self.fmt.decode_track
|
||||
super().__init__()
|
||||
|
||||
class Format_IBM_1440(Format):
|
||||
img_compatible = True
|
||||
def __init__(self):
|
||||
@@ -36,6 +53,7 @@ class Format_IBM_1440(Format):
|
||||
class Format_AtariST_360(Format):
|
||||
img_compatible = True
|
||||
default_trackset = 'c=0-79:h=0'
|
||||
max_trackset = 'c=0-81:h=0'
|
||||
def __init__(self):
|
||||
import greaseweazle.codec.ibm.mfm as m
|
||||
self.fmt = m.AtariST_SS_9SPT
|
||||
@@ -46,6 +64,7 @@ class Format_AtariST_360(Format):
|
||||
class Format_AtariST_400(Format):
|
||||
img_compatible = True
|
||||
default_trackset = 'c=0-79:h=0'
|
||||
max_trackset = 'c=0-81:h=0'
|
||||
def __init__(self):
|
||||
import greaseweazle.codec.ibm.mfm as m
|
||||
self.fmt = m.AtariST_10SPT
|
||||
@@ -56,6 +75,7 @@ class Format_AtariST_400(Format):
|
||||
class Format_AtariST_440(Format):
|
||||
img_compatible = True
|
||||
default_trackset = 'c=0-79:h=0'
|
||||
max_trackset = 'c=0-81:h=0'
|
||||
def __init__(self):
|
||||
import greaseweazle.codec.ibm.mfm as m
|
||||
self.fmt = m.AtariST_11SPT
|
||||
@@ -100,7 +120,8 @@ formats = {
|
||||
'atarist.440': Format_AtariST_440,
|
||||
'atarist.720': Format_AtariST_720,
|
||||
'atarist.800': Format_AtariST_800,
|
||||
'atarist.880': Format_AtariST_880
|
||||
'atarist.880': Format_AtariST_880,
|
||||
'commodore.1581': Format_IBM_800,
|
||||
}
|
||||
|
||||
def print_formats(f = None):
|
||||
|
||||
@@ -385,6 +385,11 @@ class IBM_MFM_720(IBM_MFM_Predefined):
|
||||
id0 = 1
|
||||
sz = 2
|
||||
|
||||
class IBM_MFM_800(IBM_MFM_720):
|
||||
|
||||
gap_3 = 30
|
||||
nsec = 10
|
||||
|
||||
class AtariST_SS_9SPT(IBM_MFM_720):
|
||||
|
||||
gap_1 = None
|
||||
|
||||
15
scripts/greaseweazle/image/d81.py
Normal file
15
scripts/greaseweazle/image/d81.py
Normal file
@@ -0,0 +1,15 @@
|
||||
# greaseweazle/image/d81.py
|
||||
#
|
||||
# Written & released by Keir Fraser <keir.xen@gmail.com>
|
||||
#
|
||||
# This is free and unencumbered software released into the public domain.
|
||||
# See the file COPYING for more details, or visit <http://unlicense.org>.
|
||||
|
||||
from greaseweazle.image.img import IMG
|
||||
|
||||
class D81(IMG):
|
||||
sides_swapped = True
|
||||
|
||||
# Local variables:
|
||||
# python-indent: 4
|
||||
# End:
|
||||
@@ -13,6 +13,8 @@ import greaseweazle.codec.formats
|
||||
|
||||
class IMG(Image):
|
||||
|
||||
sides_swapped = False
|
||||
|
||||
def __init__(self, name, fmt):
|
||||
self.to_track = dict()
|
||||
error.check(fmt is not None and fmt.img_compatible, """\
|
||||
@@ -33,8 +35,10 @@ Compatible formats:\n%s"""
|
||||
img = cls(name, fmt)
|
||||
|
||||
pos = 0
|
||||
for t in fmt.tracks:
|
||||
for t in fmt.max_tracks:
|
||||
cyl, head = t.cyl, t.head
|
||||
if img.sides_swapped:
|
||||
head ^= 1
|
||||
track = fmt.fmt(cyl, head)
|
||||
pos += track.set_img_track(dat[pos:])
|
||||
img.to_track[cyl,head] = track
|
||||
@@ -67,6 +71,8 @@ Compatible formats:\n%s"""
|
||||
|
||||
for cyl in range(n_cyl):
|
||||
for head in range(n_side):
|
||||
if self.sides_swapped:
|
||||
head ^= 1
|
||||
if (cyl,head) in self.to_track:
|
||||
tdat += self.to_track[cyl,head].get_img_track()
|
||||
|
||||
|
||||
@@ -148,7 +148,7 @@ Unknown format '%s'
|
||||
Known formats:\n%s"""
|
||||
% (args.format, formats.print_formats()))
|
||||
decoder = args.fmt_cls.decode_track
|
||||
def_tracks = util.TrackSet(args.fmt_cls.default_trackset)
|
||||
def_tracks = args.fmt_cls.default_tracks
|
||||
if args.revs is None: args.revs = args.fmt_cls.default_revs
|
||||
if def_tracks is None:
|
||||
def_tracks = util.TrackSet('c=0-81:h=0-1')
|
||||
|
||||
@@ -159,14 +159,15 @@ def split_opts(seq):
|
||||
|
||||
def get_image_class(name):
|
||||
image_types = { '.adf': 'ADF',
|
||||
'.scp': 'SCP',
|
||||
'.d81': 'D81',
|
||||
'.dsk': 'EDSK',
|
||||
'.hfe': 'HFE',
|
||||
'.ima': 'IMG',
|
||||
'.img': 'IMG',
|
||||
'.st' : 'IMG',
|
||||
'.ipf': 'IPF',
|
||||
'.dsk': 'EDSK',
|
||||
'.raw': 'KryoFlux' }
|
||||
'.raw': 'KryoFlux',
|
||||
'.scp': 'SCP',
|
||||
'.st' : 'IMG' }
|
||||
if os.path.isdir(name):
|
||||
typename = 'KryoFlux'
|
||||
else:
|
||||
|
||||
@@ -178,7 +178,7 @@ def main(argv):
|
||||
Unknown format '%s'
|
||||
Known formats:\n%s"""
|
||||
% (args.format, formats.print_formats()))
|
||||
def_tracks = util.TrackSet(args.fmt_cls.default_trackset)
|
||||
def_tracks = args.fmt_cls.default_tracks
|
||||
if def_tracks is None:
|
||||
def_tracks = util.TrackSet('c=0-81:h=0-1')
|
||||
if args.tracks is not None:
|
||||
|
||||
Reference in New Issue
Block a user