Change segment order to make o65 layout valid
VECTORS was messing things up
This commit is contained in:
@@ -1,6 +1,43 @@
|
||||
#!/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:
|
||||
@@ -8,8 +45,15 @@ def main() -> None:
|
||||
return
|
||||
filename = sys.argv[1]
|
||||
print(filename)
|
||||
with open(filename, "rb") as file:
|
||||
print(file.read(1))
|
||||
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()
|
||||
Reference in New Issue
Block a user