diff --git a/asmgen.py b/asmgen.py index 21929f3..a49682a 100755 --- a/asmgen.py +++ b/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())])