Files
super6502/sw/script/o65dump.py
Byron Lathi 8bccfed867 Change segment order to make o65 layout valid
VECTORS was messing things up
2023-08-22 20:49:07 -07:00

59 lines
2.2 KiB
Python
Executable File

#!/usr/bin/python
import sys
import io
class O65():
header: dict[str, int] = {}
options: list[(int, int, bytes)] = []
text: bytes
data: bytes
def __init__(self, filename: str) -> None:
with open(filename, "rb") as _file:
self.header["no_c64"] = int.from_bytes(_file.read(2))
self.header["magic"] = int.from_bytes(_file.read(3))
self.header["version"] = int.from_bytes(_file.read(1))
self.header["mode"] = int.from_bytes(_file.read(2), byteorder="little")
self.header["tbase"] = int.from_bytes(_file.read(2), byteorder="little")
self.header["tlen"] = int.from_bytes(_file.read(2), byteorder="little")
self.header["dbase"] = int.from_bytes(_file.read(2), byteorder="little")
self.header["dlen"] = int.from_bytes(_file.read(2), byteorder="little")
self.header["bbase"] = int.from_bytes(_file.read(2), byteorder="little")
self.header["blen"] = int.from_bytes(_file.read(2), byteorder="little")
self.header["zbase"] = int.from_bytes(_file.read(2), byteorder="little")
self.header["zlen"] = int.from_bytes(_file.read(2), byteorder="little")
self.header["stack"] = int.from_bytes(_file.read(2), byteorder="little")
olen = int.from_bytes(_file.read(1))
while olen != 0:
otype = int.from_bytes(_file.read(1))
obytes = _file.read(olen - 2)
self.options.append((olen, otype, obytes))
olen = int.from_bytes(_file.read(1))
self.text = _file.read(self.header["tlen"])
self.data = _file.read(self.header["dlen"])
def main() -> None:
if len(sys.argv) < 2:
print("Please supply a filename")
return
filename = sys.argv[1]
print(filename)
o65 = O65(filename)
for item, value in o65.header.items():
print(f"{item}:\t{value:x}")
for option in o65.options:
print(f"Type: {option[1]}, Data: {option[2]}")
with open("text.bin", "wb") as textfile:
textfile.write(o65.text)
if __name__ == "__main__":
main()