From fe633ab032e1bb152c2840787063836db92f94df Mon Sep 17 00:00:00 2001 From: Horde Nicolas Date: Tue, 6 Jul 2021 13:14:56 +0200 Subject: [PATCH] =?UTF-8?q?Am=C3=A9lioration=20de=20l'interface,=20mise=20?= =?UTF-8?q?en=20place=20de=20l'initialisation=20de=20la=20VM=20et=20rafrai?= =?UTF-8?q?chissement=20des=20registres?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ia86.cpp | 77 ++++++++++++++++++++++++++++++++++++++++++++++---------- ia86.h | 4 ++- 2 files changed, 67 insertions(+), 14 deletions(-) diff --git a/ia86.cpp b/ia86.cpp index 9153294..950d90f 100644 --- a/ia86.cpp +++ b/ia86.cpp @@ -18,7 +18,7 @@ std::string intToHexString(int intValue, int size) { string hexStr; std::stringstream sstream; - sstream << std::setfill ('0') << std::setw(size) << std::hex << (int)intValue; + sstream << std::uppercase << std::setfill ('0') << std::setw(size) << std::hex << (int)intValue; hexStr= sstream.str(); sstream.clear(); return hexStr; @@ -319,7 +319,7 @@ std::vector> Desassembler::Desassemble(Code *code) { std::string *bytes = new std::string(""); for (size_t k = 0; k < insn[j].size; k++) - *bytes=*bytes+intToHexString((int)insn[j].bytes[k], 1); + *bytes=*bytes+intToHexString((int)insn[j].bytes[k], 2); std::string adresse = intToHexString((int)insn[j].address, 8); std::string *menmonic = new std::string((char *)insn[j].mnemonic); std::string *op_str = new std::string((char *)insn[j].op_str); @@ -748,17 +748,25 @@ void Menu::AdjustWindows() screen.setGeometry ( FPoint { 105, 18 }, FSize{80, 25} ); debug.setGeometry ( FPoint { 42, 17 }, FSize{60, 27} ); scenar.setGeometry ( FPoint { 187, 01 }, FSize{23, 55} ); - flags.hide(); - stack.hide(); - mem.hide(); - screen.hide(); - if (goals[scenar.getselected()].level > 3) + this->hide(); + flags.hide(); + stack.hide(); + mem.hide(); + screen.hide(); + log.show(); + edit.show(); + view.show(); + regs.show(); + tuto.show(); + debug.show(); + scenar.show(); + if (goals[scenar.getselected()].level > 3) flags.show(); - if (goals[scenar.getselected()].level > 5) + if (goals[scenar.getselected()].level > 5) stack.show(); - if (goals[scenar.getselected()].level > 2) + if (goals[scenar.getselected()].level > 2) mem.show(); - if (goals[scenar.getselected()].level > 6) + if (goals[scenar.getselected()].level > 6) screen.show(); } @@ -789,6 +797,8 @@ void Menu::initMenus() Breakpoint.setStatusbarMessage ("Enlève ou met un point d'arrêt"); End.addAccelerator (FKey::F6); End.setStatusbarMessage ("Termine le programme et remet à zéro la machine IA86"); + Init.addAccelerator (FKey::F3); + Init.setStatusbarMessage ("Initialise la machine IA86"); About.setStatusbarMessage ("A propos de IA86"); } @@ -842,6 +852,17 @@ void Menu::initMenusCallBack() this, &Menu::end ); + About.addCallback + ( + "clicked", + this, + &Menu::about + ); + Init.addCallback ( + "clicked", + this, + &Menu::initIA + ); } void Menu::initMisc() @@ -898,7 +919,6 @@ void Menu::loadGoal() void Menu::end() { - regs.set("En attente d'initialisation..."); vm.Halt(code); } @@ -908,6 +928,32 @@ void Menu::compile() debug.set(unasmer.Desassemble(code)); } +void Menu::about() +{ + log.hide(); + edit.hide(); + view.hide(); + regs.hide(); + flags.hide(); + stack.hide(); + mem.hide(); + tuto.hide(); + screen.hide(); + debug.hide(); + scenar.hide(); + this->show(); + this->redraw(); + this->Info.redraw(); + //((finalcut::FApplication*)this->getParent())->sendQueuedEvents(); + sleep(3); + AdjustWindows(); +} + +void Menu::initIA() +{ + vm.Prepare(&goals[scenar.getselected()].init,code); +} + bool Menu::verify() { if (!code->assembled) @@ -916,7 +962,7 @@ bool Menu::verify() return false; } if (!code->initialized) - vm.Prepare(&goals[scenar.getselected()].init,code); + initIA(); if (!code->initialized) return false; return true; @@ -925,9 +971,15 @@ bool Menu::verify() void Menu::refresh() { if (!code->executed) + { finalcut::FApplication::setDarkTheme(); + regs.set("En attente d'initialisation..."); + } else + { finalcut::FApplication::setDefaultTheme(); + regs.set(vm.getRegs(goals[scenar.getselected()].level)); + } auto root_widget = getRootWidget(); root_widget->resetColors(); root_widget->redraw(); @@ -938,7 +990,6 @@ void Menu::exec() { if (!verify()) return; vm.Run(code,code->address,code->address+code->size,0); - regs.set(vm.getRegs(goals[scenar.getselected()].level)); } void Menu::trace() diff --git a/ia86.h b/ia86.h index 8833990..1ffcdae 100644 --- a/ia86.h +++ b/ia86.h @@ -320,9 +320,10 @@ class Menu final : public finalcut::FDialog void trace(); void step(); bool verify(); + void about(); void AdjustWindows(); void initWindows(); - void splash(); + void initIA(); void initLayout() override; void adjustSize() override; // Event handler @@ -341,6 +342,7 @@ class Menu final : public finalcut::FDialog finalcut::FMenuItem Assemble{"&Compilation", &Tools}; finalcut::FMenuItem Rearange{"&Ordonne les fenêtres", &Tools}; finalcut::FMenu Debug{"&Déboguage", &Menubar}; + finalcut::FMenuItem Init{"&Initialiser", &Debug}; finalcut::FMenuItem Run{"&Exécuter", &Debug}; finalcut::FMenuItem End{"&Terminer", &Debug}; finalcut::FMenuItem TraceInto{"Pas à pas &détaillé", &Debug};