def main(): c = Cartridge(sys.argv[1], sys.argv[2]) magic = c.read_int16(0) print " [INFO] Magic: %04X" % magic index_base = c.read_int16(2) print " [INFO] IndexBase: %04X" % index_base version_ptr = c.read_int16(index_base + 2) print " [INFO] VersionPtr: %04X (%06X)" % ( version_ptr, version_ptr*2 + index_base) version = c.read_int16(version_ptr*2 + index_base) print " [INFO] Version: %04X" % version mover_scripts_ptr = c.read_int16(index_base + 4) print " [INFO] MoverScriptsPtr: %04X (%06X)" % ( mover_scripts_ptr, mover_scripts_ptr*2+index_base) cmdCX_offset = c.read_int16(index_base + 6) print " [INFO] cmdCX_offset: %04X" % cmdCX_offset start = c.read_int16(index_base + 8) print " [INFO] start pc: %04X (%06X)" % ( start, start*2+index_base) smth = c.read_int16(index_base + 0xA) print " [INFO] Something: %04X" % (smth) mover_scripts_num = c.read_int16(mover_scripts_ptr*2 + index_base - 2) print " [INFO] MoverScriptsNum: %d" % (mover_scripts_num,) mover = Mover(c, index_base, cmdCX_offset) player = Player(c) cpu = CPU(c, index_base, cmdCX_offset, start, mover, player) while 1: if c.origlog_pos > (len(c.origlog) - 5): break ts, next_addr = c.origlog[c.origlog_pos] next_addrs = mover.nextaddr() if next_addr in next_addrs: mover.do_one_cmd(ts, next_addr) continue next_addrs = player.nextaddr() if next_addr in next_addrs: player.do_one_cmd(ts, next_addr) continue cpu.do_one_cmd(ts, next_addr)