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