Added argument to convert raw data to assembly source .byte (or equivalent) directives

This commit is contained in:
Rob McMullen 2017-07-28 09:28:22 -07:00
parent 4f8cf05853
commit 1f4bbbd533
1 changed files with 23 additions and 5 deletions

View File

@ -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())])