def on_rom_binary(self): self.editor_converting = True if self.rom_type_sel == self.actionROMAssembly: file_utils.copy_model_to_file(self.rom_model, self.rom_stream) self.assemble(self.load_converted_asm_bin) self.rom_type_sel = self.actionROMBinario
def on_save(self): filename = self.rom_path if self.rom_path is not None: self.rom_watcher.removePath(self.rom_path) if filename is None: filename = QFileDialog.getSaveFileName(self.window, "Salve o arquivo", os.getcwd(), "Arquivos (*.vm)") if len(filename) == 0 or len(filename[0]) == 0: return None filename = filename[0] self.rom_path = filename file_utils.copy_model_to_file(self.rom_model, self.rom_stream) file_utils.stream_to_file(self.rom_stream, filename) self.rom_watcher.addPath(self.rom_path)
def get_updated_ram(self): ram = tempfile.SpooledTemporaryFile(max_size=self.TEMP_MAX_RAM_USE, mode="w+") file_utils.copy_model_to_file(self.ram_model, ram) return ram
def on_proximo(self): if self.data_changed: if self.lst_parser is not None: self.lst_parser.close() if self.actionROMAssembly.isChecked(): file_utils.copy_model_to_file(self.rom_model, self.rom_stream) self.assemble(self.assemble_end) else: tmp_rom = tempfile.SpooledTemporaryFile( max_size=self.TEMP_MAX_RAM_USE, mode="w+") file_utils.copy_model_to_file(self.rom_model, tmp_rom) tmp_ram = self.get_updated_ram() self.simulate(tmp_rom, tmp_ram) return False step = self.lst_parser.advance() if "s_regAout" not in step: self.step_timer.stop() QMessageBox.warning(self.window, "Simulador", "Fim de simulação") return self.update_line_edit(self.lineEdit_A, step["s_regAout"]) self.update_line_edit(self.lineEdit_S, step["s_regSout"]) self.update_line_edit(self.lineEdit_D, step["s_regDout"]) self.update_line_edit(self.lineEdit_inM, step["inM"]) self.update_line_edit(self.lineEdit_outM, step["outM"]) if self.last_step is not None: addr = int(step["s_regAout"], 2) index = self.ram_model.index(addr, 0) last_pc_counter = int(self.last_step["pcout"], 2) - 1 if int(step["writeM"]) == 0 and int( step["s_muxALUI_A"]) == 1 and int( self.last_step["s_muxALUI_A"]) == 0: self.ramView.setCurrentIndex(index) if int(step["writeM"]) == 1: self.ramView.setCurrentIndex(index) self.ram_model.itemFromIndex(index).setText(step["outM"]) else: last_pc_counter = -1 ## update ROM line pc_counter = int(step["pcout"], 2) - 1 if pc_counter < 0: pc_counter = 0 if pc_counter != last_pc_counter + 1: print("JUMP - Executando NOP") pc_counter = last_pc_counter # Mantem if self.actionROMAssembly.isChecked(): rom_line = asm_utils.z01_real_line(self.assembler_task.labels_pos, pc_counter) else: rom_line = pc_counter index = self.rom_model.index(rom_line, 0) self.romView.setCurrentIndex(index) print("PROXIMO") self.last_step = step
def on_proximo(self): if self.data_changed: if self.lst_parser is not None: self.lst_parser.close() self.sim_line = 0 file_utils.copy_model_to_file(self.rom_model, self.rom_stream) self.vm_translate(self.vm_end) return False while (True): #time.sleep(0.4) # esse timer nao funcionou como eu esperava ! self.sim_real_line_old = self.sim_real_line_current step = self.lst_parser.advance() if "s_regAout" not in step: self.step_timer.stop() QMessageBox.warning(self.window, "Simulador", "Fim de simulação") return False self.update_line_edit(self.lineEdit_SP, self.model_get_value(self.ram_model, 0)) self.update_line_edit(self.lineEdit_LCL, self.model_get_value(self.ram_model, 1)) self.update_line_edit(self.lineEdit_ARG, self.model_get_value(self.ram_model, 2)) self.update_line_edit(self.lineEdit_THIS, self.model_get_value(self.ram_model, 3)) self.update_line_edit(self.lineEdit_THAT, self.model_get_value(self.ram_model, 4)) sp_index = self.ram_model.index(0, 0) # SP if self.last_step is not None: addr = int(step["s_regAout"], 2) index = self.ram_model.index(addr, 0) last_sp = int(self.ram_model.itemFromIndex(sp_index).text(), 2) if int(step["writeM"]) == 0 and int( step["s_muxALUI_A"]) == 1 and int( self.last_step["s_muxALUI_A"]) == 0: self.ramView.setCurrentIndex(index) if int(step["writeM"]) == 1: self.ramView.setCurrentIndex(index) self.ram_model.itemFromIndex(index).setText(step["outM"]) else: last_sp = 256 ## descobrir linha com base no SP sp = int(self.ram_model.itemFromIndex(sp_index).text(), 2) if sp != last_sp: self.sim_line += 1 self.refresh_stack(self.ram_model, 256, sp, self.global_stack_model, self.globalStackView) ## update line pc = int(step["pcout"], 2) - 1 self.sim_real_line_current = vm_utils.vm_command_line( self.assembler_task.commands_pos, self.assembler_task.comments_pos, self.assembler_task.labels_pos, pc) index = self.rom_model.index(self.sim_real_line_current, 0) self.romView.setCurrentIndex(index) print("PROXIMA INSTRUCAO NASM") self.last_step = step if (self.sim_real_line_current != self.sim_real_line_old): print("PROXIMA INSTRUCAO VM") break