コード例 #1
0
ファイル: emu.py プロジェクト: sevikkk/robopanda
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)