Ejemplo n.º 1
0
    def unpack(self, cartridge_packed):
        # Validating plaintext checksum
        if self.checksum.checksum(cartridge_packed[0x00:0x40]) != struct.unpack("<H", str(cartridge_packed[0x40:0x42]))[0]:
            raise Exception("invalid content checksum: should have " + hex(struct.unpack("<H", str(cartridge_packed[0x40:0x42]))[0]) + " but have " + hex(self.checksum.checksum(cartridge_packed[0x00:0x40])))

        # Validating current material quantity checksum
        if self.checksum.checksum(cartridge_packed[0x58:0x60]) != struct.unpack("<H", str(cartridge_packed[0x62:0x64]))[0]:
            raise Exception("invalid current material quantity checksum")

        cartridge_packed = buffer(cartridge_packed)

        # Serial number
        serial_number = struct.unpack_from("<d", cartridge_packed, 0x0)[0]
        # Material
        material_name = material.get_name_from_id(int(struct.unpack_from("<d", cartridge_packed, 0x08)[0]))
        # Manufacturing lot
        manufacturing_lot = struct.unpack_from("<20s", cartridge_packed, 0x10)[0].split('\x00')[0]
        # Manufacturing datetime
        (mfg_datetime_year,
            mfg_datetime_month,
            mfg_datetime_day,
            mfg_datetime_hour,
            mfg_datetime_minute,
            mfg_datetime_second) = struct.unpack_from("<HBBBBH", cartridge_packed, 0x28)
        mfg_datetime = datetime.datetime(mfg_datetime_year + 1900,
                mfg_datetime_month,
                mfg_datetime_day,
                mfg_datetime_hour,
                mfg_datetime_minute,
                mfg_datetime_second)
        # Last use datetime
        (use_datetime_year,
            use_datetime_month,
            use_datetime_day,
            use_datetime_hour,
            use_datetime_minute,
            use_datetime_second) = struct.unpack_from("<HBBBBH", cartridge_packed, 0x30)
        use_datetime = datetime.datetime(use_datetime_year + 1900,
                use_datetime_month,
                use_datetime_day,
                use_datetime_hour,
                use_datetime_minute,
                use_datetime_second)
        # Initial material quantity
        initial_material_quantity = struct.unpack_from("<d", cartridge_packed, 0x38)[0]
        # Version
        version = struct.unpack_from("<H", cartridge_packed, 0x24)[0]
        # Key fragment
        key_fragment = str(struct.unpack_from("<8s", cartridge_packed, 0x48)[0]).encode("hex")
        # Current material quantity
        current_material_quantity = struct.unpack_from("<d", cartridge_packed, 0x58)[0]
        # Signature
        signature = struct.unpack_from("<9s", cartridge_packed, 0x68)[0]

        return cartridge.Cartridge(serial_number, material_name, manufacturing_lot, mfg_datetime, use_datetime, initial_material_quantity, current_material_quantity, key_fragment, version, signature)
Ejemplo n.º 2
0
                initial = datetime.now()

            if not (self._canvas == None):
                if self._canvas.key_value != 0x00 and wait_frames_for_key == 0:
                    wait_frames_for_key = 1
                    nes.controller[0] = self._canvas.key_value
                    self._canvas.key_value = 0x00

        print("Emulator stopped!")
        self._thread = None


#######################
#       MAIN
#######################
cartridge = cart.Cartridge(rom)

nes.insert_cartridge(cartridge)

mapAsm = nes.cpu.disassemble(0x0000, 0xFFFF)

nes.reset()

emulator = Emulator()
emulator.start()

emulator._canvas = CanvasOpenGL()
emulator._canvas.init_canvas()

glutTimerFunc(17, emulator._canvas.loop, 0)
glutMainLoop()
Ejemplo n.º 3
0
    vbox.addWidget(window.initPanelSprite(500, 500), 0, 0, 2, 1)
    vbox.addWidget(window.initPanelCPU(), 0, 1, 1, 1)
    vbox.addWidget(window.initCode(15), 1, 1)

    #window.refreshRAM()
    window.refreshCPU()
    window.refreshCode()
    window.canvas.refresh()

    window.thread = QThread()
    window.thread.started.connect(window.do_work)

    window.setLayout(vbox)
    window.show()

    sys.exit(app.exec_())


#######################
#       MAIN
#######################
cartridge = cart.Cartridge("nestest.nes")

nes.insert_cartridge(cartridge)

mapAsm = nes.cpu.disassemble(0x0000, 0xFFFF)

nes.reset()

# Init frame
frame()