20 lines
669 B
Python
20 lines
669 B
Python
"""Write an Atari .car cartridge image (CART header + ROM)."""
|
|
|
|
from __future__ import annotations
|
|
|
|
import struct
|
|
|
|
TYPE_STD_16K = 2 # "Standard 16 KB cartridge"
|
|
|
|
|
|
def write_car(rom: bytes, path: str, cart_type: int = TYPE_STD_16K) -> str:
|
|
"""Wrap a cart `rom` in the .car container (16-byte CART header + ROM).
|
|
The header holds the cartridge type and a checksum (sum of all ROM bytes)."""
|
|
header = bytearray(16)
|
|
header[0:4] = b"CART"
|
|
struct.pack_into(">I", header, 4, cart_type)
|
|
struct.pack_into(">I", header, 8, sum(rom) & 0xFFFFFFFF)
|
|
with open(path, "wb") as f:
|
|
f.write(header)
|
|
f.write(rom)
|
|
return path
|