コード例 #1
0
    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
コード例 #2
0
ファイル: vm_main.py プロジェクト: gabrielvf1/Z01---Grupo-H
    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)
コード例 #3
0
 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
コード例 #4
0
    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
コード例 #5
0
ファイル: vm_main.py プロジェクト: gabrielvf1/Z01---Grupo-H
    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