From 941ab4147abca33eb544e6fde36a6faf90353edc Mon Sep 17 00:00:00 2001 From: Rob McMullen Date: Thu, 28 Jun 2018 10:28:55 -0700 Subject: [PATCH] Added ATR header to kboot images --- atrcopy/kboot.py | 10 ++++++++-- test_data/kboot_test1.atr | Bin 0 -> 3472 bytes 2 files changed, 8 insertions(+), 2 deletions(-) create mode 100644 test_data/kboot_test1.atr diff --git a/atrcopy/kboot.py b/atrcopy/kboot.py index 239b817..0728bb5 100644 --- a/atrcopy/kboot.py +++ b/atrcopy/kboot.py @@ -1,7 +1,7 @@ import numpy as np from . import errors -from .ataridos import AtariDosDirent, AtariDosDiskImage, XexSegment, get_xex +from .ataridos import AtrHeader, AtariDosDirent, AtariDosDiskImage, XexSegment, get_xex from .segments import SegmentData @@ -70,7 +70,13 @@ class KBootImage(AtariDosDiskImage): @classmethod def create_boot_image(cls, segments, run_addr=None): data_segment, _ = get_xex(segments) - data_bytes = add_xexboot_header(data_segment.data) + payload_bytes = add_xexboot_header(data_segment.data) + data_bytes = np.zeros(len(payload_bytes) + 16, np.uint8) + data_bytes[16:] = payload_bytes[:] + header_bytes = data_bytes[0:16] + atr_header = AtrHeader(create=True) + atr_header.check_size(len(payload_bytes)) + atr_header.encode(header_bytes) raw = SegmentData(data_bytes) atr = cls(raw, create=True) return atr diff --git a/test_data/kboot_test1.atr b/test_data/kboot_test1.atr new file mode 100644 index 0000000000000000000000000000000000000000..c8431c779fcdfeb98cdad003644363c7dcccac4f GIT binary patch literal 3472 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 R&TNH)yMsg9SqcBU@egje9q|AF literal 0 HcmV?d00001