added memory dump

This commit is contained in:
black
2025-07-08 22:17:06 +02:00
parent 0c9abcd7e4
commit e3608da3a0
3 changed files with 89 additions and 14 deletions

View File

@@ -8,6 +8,7 @@
#include <filesystem>
#include "components/Alu.h"
#include "components/Memory.h"
namespace fs = std::filesystem;
Manager::~Manager() {
@@ -79,11 +80,19 @@ void Manager::init(const std::string &program_path) {
return;
}
std::cout << "\033[32m=== Herzlich willkommen beim RISC-V Emulator! ===\033[0m\n";
constexpr auto COLOR_GREEN = "\033[32m";
constexpr auto COLOR_YELLOW = "\033[33m";
constexpr auto COLOR_BLUE = "\033[34m";
constexpr auto COLOR_RESET = "\033[0m";
std::cout << COLOR_GREEN << "=== Herzlich willkommen beim RISC-V Emulator! ===" << COLOR_RESET << "\n";
std::cout << "Nachfolgend wird nun die angegebene Quellcodedatei eingelesen und von der ALU bearbeitet.\n"
"\033[33mNach\033[0m jeder bearbeiteten Codezeile wird \033[34mdiese\033[0m ausgegeben und Sie werden "
"nach dem \033[32mnächsten Schritt\033[0m gefragt. Tätigen Sie Ihre Eingabe und bestätigen Sie mit "
"\033[32mENTER\033[0m.\nAnforderungen und Hinweise entnehmen Sie bitte der README.\n\n";
<< COLOR_YELLOW << "Nach" << COLOR_RESET << " jeder bearbeiteten Codezeile wird "
<< COLOR_BLUE << "diese" << COLOR_RESET << " ausgegeben und Sie werden "
<< "nach dem " << COLOR_GREEN << "nächsten Schritt" << COLOR_RESET <<
" gefragt. Tätigen Sie Ihre Eingabe und bestätigen Sie mit "
<< COLOR_GREEN << "ENTER" << COLOR_RESET <<
".\nAnforderungen und Hinweise entnehmen Sie bitte der README.\n\n";
}
std::streampos Manager::getNextStreamLineOffset() {
@@ -106,9 +115,15 @@ std::string Manager::gotoNextStreamLine() {
}
bool Manager::handleUserInput() {
std::cout <<
"\nOptionen: (\033[32ms\033[0m) Programm durchlaufen lassen, (\033[32ml\033[0m) nächste Zeile, (\033[32me\033[0m) beenden, "
"(\033[32mm\033[0m) Memory Dump, (\033[32mr\033[0m) Register Dump\n";
constexpr const char *COLOR_GREEN = "\033[32m";
constexpr const char *COLOR_RESET = "\033[0m";
std::cout << "\nOptionen: ("
<< COLOR_GREEN << "s" << COLOR_RESET << ") Programm durchlaufen lassen, ("
<< COLOR_GREEN << "l" << COLOR_RESET << ") nächste Zeile, ("
<< COLOR_GREEN << "e" << COLOR_RESET << ") beenden, ("
<< COLOR_GREEN << "m" << COLOR_RESET << ") Memory Dump, ("
<< COLOR_GREEN << "r" << COLOR_RESET << ") Register Dump\n";
char input = '\0';
while (true) {
std::cout << "Eingabe: ";
@@ -116,14 +131,21 @@ bool Manager::handleUserInput() {
input = std::tolower(input);
if (input == 's') {
return true; // runAll = true
return true;
} else if (input == 'l') {
return false; // nur nächste Zeile
return false;
} else if (input == 'e') {
std::cout << "Programm wird beendet.\n";
exit(0); // oder andere Beendigung
exit(0);
} else if (input == 'm') {
//Memory::dump();
std::cout << "Wie viele Speicherzellen sollen gedumpt werden? ";
int dumpSize = 0;
while (!(std::cin >> dumpSize) || dumpSize == 0) {
std::cout << "Ungültige Eingabe. Bitte eine positive Zahl eingeben: ";
std::cin.clear();
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
}
Memory::getInstance().dump(dumpSize);
} else if (input == 'r') {
//Register::getInstance().dump();
} else {
@@ -133,8 +155,12 @@ bool Manager::handleUserInput() {
}
void Manager::handleExitInput() {
std::cout <<
"\nOptionen: (\033[32me\033[0m) beenden, (\033[32mm\033[0m) Memory Dump, (\033[32mr\033[0m) Register Dump\n";
constexpr auto COLOR_GREEN = "\033[32m";
constexpr auto COLOR_RESET = "\033[0m";
std::cout << "\nOptionen: ("
<< COLOR_GREEN << "e" << COLOR_RESET << ") beenden, ("
<< COLOR_GREEN << "m" << COLOR_RESET << ") Memory Dump, ("
<< COLOR_GREEN << "r" << COLOR_RESET << ") Register Dump\n";
char input = '\0';
while (true) {
std::cout << "Eingabe: ";
@@ -145,7 +171,14 @@ void Manager::handleExitInput() {
std::cout << "Programm wird beendet.\n";
exit(0); // oder andere Beendigung
} else if (input == 'm') {
//Memory::dump();
std::cout << "Wie viele Speicherzellen sollen gedumpt werden? ";
int dumpSize = 0;
while (!(std::cin >> dumpSize) || dumpSize == 0) {
std::cout << "Ungültige Eingabe. Bitte eine positive Zahl eingeben: ";
std::cin.clear();
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
}
Memory::getInstance().dump(dumpSize);
} else if (input == 'r') {
//Register::getInstance().dump();
} else {