From fdff63505df742e3d42cae76d82f4f5f9431d66e Mon Sep 17 00:00:00 2001 From: Rob McMullen Date: Fri, 25 Sep 2015 23:02:35 -0700 Subject: [PATCH] Added parsing of obj/exe/xex files into segments --- atrcopy.py | 60 +++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 59 insertions(+), 1 deletion(-) diff --git a/atrcopy.py b/atrcopy.py index 9a8f0fe..f965eb3 100755 --- a/atrcopy.py +++ b/atrcopy.py @@ -173,9 +173,60 @@ class MydosDirent(AtrDirent): self.current_sector = disk.first_data_after_vtoc return raw -class AtrFile(object): + +class InvalidBinaryFile(AtrError): pass +class ObjSegment(object): + def __init__(self, metadata_start, data_start, start_addr, end_addr, data, error=None): + self.metadata_start = metadata_start + self.data_start = data_start + self.start_addr = start_addr + self.end_addr = end_addr + self.data = data + self.error = error + + def __str__(self): + s = "%04x-%04x (%04x @ %04x)" % (self.start_addr, self.end_addr, len(self.data), self.data_start) + if self.error: + s += " " + self.error + return s + +class AtariDosFile(object): + def __init__(self, data): + self.data = data + self.size = len(data) + self.segments = [] + self.parse_segments() + + def __str__(self): + return "\n".join(str(s) for s in self.segments) + "\n" + + def parse_segments(self): + bytes = self.data + pos = 0 + first = True + while pos < self.size: + header, = struct.unpack("