import configuration
config = configuration.Config()
rom = bytearray(open(config.rom_path, "r").read())

headerlist = (
	["sfxheaders02.asm", 0x8003, 0x822e],
	["sfxheaders08.asm", 0x20003, 0x202be],
	["sfxheaders1f.asm", 0x7c003, 0x7c249],
	)

def printsfxheaders(filename, address, end):
	file = open(filename, 'w')
	bank = address / 0x4000
	byte = rom[address]
	sfx = 1
	channel = 1
	file.write("SFX_Headers_{:02x}:\n".format(bank))
	file.write("\tdb $ff, $ff, $ff ; padding\n")
	while address != end:
		left = (byte >> 6) + 1
		file.write("\nSFX_{:02x}_{:02x}: ; {:02x} ({:0x}:{:02x})\n".format(bank, sfx, address, bank, address % 0x4000 + 0x4000))
		while left != 0:
			pointer = rom[address + 2] * 0x100 + rom[address + 1]
			if byte >> 4 != 0: file.write("	db ( ${:0x}0 | CH{:0x} )\n".format(byte >> 4, byte % 0x10))
			else: file.write("\tdb CH{:0x}\n".format(byte))
			file.write("\tdw SFX_{:02x}_{:02x}_Ch{}\n".format(bank, sfx, channel))
			address += 3
			byte = rom[address]
			channel += 1
			left -= 1
		channel = 1
		sfx += 1
	file.write("\n; {}".format(hex(address)))

for header in headerlist:
	printsfxheaders(header[0], header[1], header[2])