mirror of
https://github.com/robmcmullen/atrcopy.git
synced 2025-02-21 08:29:04 +00:00
Fixed #7: removed check for low load address; have examples of loading boot sectors at $0080
* added new check for valid ATR disk image size if boot sector not recognized
This commit is contained in:
parent
07be99f20f
commit
db970c1caa
@ -416,6 +416,12 @@ class AtrHeader(BaseHeader):
|
|||||||
pos += self.header_offset
|
pos += self.header_offset
|
||||||
return pos, size
|
return pos, size
|
||||||
|
|
||||||
|
def strict_check(self, image):
|
||||||
|
size = len(image)
|
||||||
|
if self.header_offset == 16 or size in [92176, 133136, 184336, 183952]:
|
||||||
|
return
|
||||||
|
raise InvalidDiskImage("Uncommon size of ATR file")
|
||||||
|
|
||||||
|
|
||||||
class XfdHeader(AtrHeader):
|
class XfdHeader(AtrHeader):
|
||||||
file_format = "XFD"
|
file_format = "XFD"
|
||||||
@ -689,8 +695,8 @@ class BootDiskImage(AtariDosDiskImage):
|
|||||||
max_size = max_ram - bload
|
max_size = max_ram - bload
|
||||||
max_sectors = max_size // self.header.sector_size
|
max_sectors = max_size // self.header.sector_size
|
||||||
if nsec > max_sectors or nsec < 1:
|
if nsec > max_sectors or nsec < 1:
|
||||||
raise InvalidDiskImage("Number of boot sectors out of range")
|
raise InvalidDiskImage("Number of boot sectors out of range (tried %d, max=%d" % (nsec, max_sectors))
|
||||||
if bload < 0x200 or bload > (0xc000 - (nsec * self.header.sector_size)):
|
if bload > (0xc000 - (nsec * self.header.sector_size)):
|
||||||
raise InvalidDiskImage("Bad boot load address")
|
raise InvalidDiskImage("Bad boot load address")
|
||||||
|
|
||||||
def get_boot_sector_info(self):
|
def get_boot_sector_info(self):
|
||||||
@ -732,6 +738,19 @@ class BootDiskImage(AtariDosDiskImage):
|
|||||||
return []
|
return []
|
||||||
|
|
||||||
|
|
||||||
|
class AtariDiskImage(BootDiskImage):
|
||||||
|
def __str__(self):
|
||||||
|
return "%s Unidentified Contents" % (self.header)
|
||||||
|
|
||||||
|
def check_size(self):
|
||||||
|
print self.header
|
||||||
|
if self.header is None:
|
||||||
|
raise ("Not a known Atari disk image format")
|
||||||
|
|
||||||
|
def get_boot_segments(self):
|
||||||
|
return []
|
||||||
|
|
||||||
|
|
||||||
def get_xex(segments, run_addr=None):
|
def get_xex(segments, run_addr=None):
|
||||||
segments_copy = [s for s in segments] # don't affect the original list!
|
segments_copy = [s for s in segments] # don't affect the original list!
|
||||||
main_segment = None
|
main_segment = None
|
||||||
|
@ -5,7 +5,7 @@ import numpy as np
|
|||||||
|
|
||||||
from .segments import SegmentData, DefaultSegment
|
from .segments import SegmentData, DefaultSegment
|
||||||
from .kboot import KBootImage
|
from .kboot import KBootImage
|
||||||
from .ataridos import AtariDosDiskImage, BootDiskImage, AtariDosFile, XexContainerSegment
|
from .ataridos import AtariDosDiskImage, BootDiskImage, AtariDosFile, XexContainerSegment, AtariDiskImage
|
||||||
from .spartados import SpartaDosDiskImage
|
from .spartados import SpartaDosDiskImage
|
||||||
from .cartridge import AtariCartImage, get_known_carts
|
from .cartridge import AtariCartImage, get_known_carts
|
||||||
from .mame import MameZipImage
|
from .mame import MameZipImage
|
||||||
@ -118,6 +118,11 @@ class AtariBootDiskSegmentParser(SegmentParser):
|
|||||||
image_type = BootDiskImage
|
image_type = BootDiskImage
|
||||||
|
|
||||||
|
|
||||||
|
class AtariUnidentifiedSegmentParser(SegmentParser):
|
||||||
|
menu_name = "Atari Disk Image"
|
||||||
|
image_type = AtariDiskImage
|
||||||
|
|
||||||
|
|
||||||
class XexSegmentParser(SegmentParser):
|
class XexSegmentParser(SegmentParser):
|
||||||
menu_name = "XEX (Atari 8-bit executable)"
|
menu_name = "XEX (Atari 8-bit executable)"
|
||||||
image_type = AtariDosFile
|
image_type = AtariDosFile
|
||||||
@ -202,6 +207,7 @@ mime_parsers = {
|
|||||||
SpartaDosSegmentParser,
|
SpartaDosSegmentParser,
|
||||||
AtariDosSegmentParser,
|
AtariDosSegmentParser,
|
||||||
AtariBootDiskSegmentParser,
|
AtariBootDiskSegmentParser,
|
||||||
|
AtariUnidentifiedSegmentParser,
|
||||||
],
|
],
|
||||||
"application/vnd.atari8bit.xex": [
|
"application/vnd.atari8bit.xex": [
|
||||||
XexSegmentParser,
|
XexSegmentParser,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user