Added argument to convert raw data to assembly source .byte (or equivalent) directives
This commit is contained in:
parent
4f8cf05853
commit
1f4bbbd533
28
asmgen.py
28
asmgen.py
|
@ -113,13 +113,13 @@ class CC65(AssemblerSyntax):
|
|||
|
||||
|
||||
class Listing(object):
|
||||
def __init__(self, assembler):
|
||||
def __init__(self, assembler, slug="sprite-driver"):
|
||||
self.assembler = assembler
|
||||
self.lines = []
|
||||
self.current = None
|
||||
self.desired_count = 1
|
||||
self.stash_list = []
|
||||
self.slug = "sprite-driver"
|
||||
self.slug = slug
|
||||
|
||||
def __str__(self):
|
||||
self.flush_stash()
|
||||
|
@ -1357,6 +1357,21 @@ class RLE(Listing):
|
|||
return compressed_size
|
||||
|
||||
|
||||
class RawToSource(Listing):
|
||||
def __init__(self, assembler, data, slug):
|
||||
Listing.__init__(self, assembler, slug)
|
||||
raw = np.asarray(data, dtype=np.uint8)
|
||||
self.generate_table(raw)
|
||||
|
||||
def generate_table(self, raw):
|
||||
self.label("%s_START" % (self.slug))
|
||||
for i in range(len(raw)):
|
||||
self.byte(str(int(raw[i])), 16)
|
||||
self.label("%s_END" % (self.slug))
|
||||
self.comment("%d bytes" % len(raw))
|
||||
self.out()
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
disclaimer = '''; AUTOGENERATED FILE; DO NOT EDIT!
|
||||
;
|
||||
|
@ -1384,6 +1399,7 @@ if __name__ == "__main__":
|
|||
parser.add_argument("-l", "--scroll", default=0, type=int, help="Unrolled loop to scroll screen (default: %(default)s)")
|
||||
parser.add_argument("--merge", type=int, nargs="*", help="Merge two HGR images, switching images at the scan line")
|
||||
parser.add_argument("--rle", action="store_true", default=False, help="Create run-length-encoded version of data (assumed to be an image)")
|
||||
parser.add_argument("--src", action="store_true", default=False, help="Create source version of binary file")
|
||||
parser.add_argument("-n", "--name", default="", help="Name for generated assembly function (default: based on image filename)")
|
||||
parser.add_argument("-k", "--clobber", action="store_true", default=False, help="don't save the registers on the stack")
|
||||
parser.add_argument("-d", "--double-buffer", action="store_true", default=False, help="add code blit to either page (default: page 1 only)")
|
||||
|
@ -1427,6 +1443,9 @@ if __name__ == "__main__":
|
|||
sys.exit(0)
|
||||
|
||||
for pngfile in options.files:
|
||||
name = options.name if options.name else os.path.splitext(pngfile)[0]
|
||||
slug = slugify(name)
|
||||
|
||||
if pngfile.lower().endswith(".png"):
|
||||
try:
|
||||
reader = png.Reader(pngfile)
|
||||
|
@ -1438,9 +1457,6 @@ if __name__ == "__main__":
|
|||
print "%s: %s" % (pngfile, e)
|
||||
sys.exit(1)
|
||||
|
||||
name = options.name if options.name else os.path.splitext(pngfile)[0]
|
||||
slug = slugify(name)
|
||||
|
||||
w, h = pngdata[0:2]
|
||||
if w == 280 and h == 192:
|
||||
# Full screen conversion!
|
||||
|
@ -1457,6 +1473,8 @@ if __name__ == "__main__":
|
|||
data = np.fromfile(pngfile, dtype=np.uint8)
|
||||
if options.rle:
|
||||
listings.append(RLE(assembler, data))
|
||||
elif options.src:
|
||||
listings.append(RawToSource(assembler, data, slug))
|
||||
|
||||
|
||||
listings.extend([luts[k] for k in sorted(luts.keys())])
|
||||
|
|
Loading…
Reference in New Issue