ys2-intro/loader/tools/tinycrunch_v1.2/test/cbmcat
2025-11-13 19:07:39 +03:00

46 lines
1 KiB
Python

#!/usr/bin/env python
from __future__ import print_function
import sys
from struct import pack,unpack
if sys.platform == "win32":
import os, msvcrt
msvcrt.setmode(sys.stdout.fileno(), os.O_BINARY)
class Mem:
def __init__(self):
self.low_water=0xffff
self.high_water=0
page=b'\0'*256
self.mem=page*256
def load_prg(self, fn):
data=open(fn,'rb').read()
start=unpack('<H',data[:2])[0]
data=data[2:]
end=min(0x10000,start+len(data))
data=data[:end-start]
self.low_water=min(self.low_water, start)
self.high_water=max(self.high_water, end)
self.mem=self.mem[:start]+data+self.mem[end:]
def write(self, f):
if self.low_water<self.high_water:
f.write(pack('<H',self.low_water)+self.mem[self.low_water:self.high_water])
else:
f.write(pack('<H',0x0801))
m=Mem()
for fn in sys.argv[1:]:
m.load_prg(fn)
try:
fo=sys.stdout.buffer
except AttributeError:
import sys
fo=sys.stdout
m.write(fo)