diff --git a/src/Manager.cpp b/src/Manager.cpp index c53d3c2..aeace9e 100644 --- a/src/Manager.cpp +++ b/src/Manager.cpp @@ -9,6 +9,7 @@ #include "components/Alu.h" #include "components/Memory.h" +#include "components/Register.h" namespace fs = std::filesystem; Manager::~Manager() { @@ -128,6 +129,7 @@ bool Manager::handleUserInput() { while (true) { std::cout << "Eingabe: "; std::cin >> input; + // ignoriere die Groß- und Kleinschreibung input = std::tolower(input); if (input == 's') { @@ -147,7 +149,7 @@ bool Manager::handleUserInput() { } Memory::getInstance().dump(dumpSize); } else if (input == 'r') { - //Register::getInstance().dump(); + Register::getInstance().dump(); } else { std::cout << "Ungültige Eingabe. Bitte erneut versuchen.\n"; } @@ -180,7 +182,7 @@ void Manager::handleExitInput() { } Memory::getInstance().dump(dumpSize); } else if (input == 'r') { - //Register::getInstance().dump(); + Register::getInstance().dump(); } else { std::cout << "Ungültige Eingabe. Bitte erneut versuchen.\n"; } diff --git a/src/components/Memory.cpp b/src/components/Memory.cpp index 5bc41b8..7471908 100644 --- a/src/components/Memory.cpp +++ b/src/components/Memory.cpp @@ -27,32 +27,32 @@ int Memory::load(const int address) const { void Memory::dump(const int size) const { // Speichere die Farbcodes für eine einfachere Verwendung constexpr auto COLOR_ADDRESS = "\033[1;34m"; - constexpr auto COLOR_HEX = "\033[0;37m"; + constexpr auto COLOR_DEC = "\033[0;37m"; constexpr auto COLOR_RESET = "\033[0m"; constexpr int valuesPerLine = 10; // Gib die Kopfzeile mit den Überschriften aus - std::cout << COLOR_ADDRESS << "Adresse " << COLOR_HEX; + std::cout << COLOR_ADDRESS << "Adresse "; for (int i = 0; i < valuesPerLine; ++i) { - std::cout << " +" << std::setw(2) << std::setfill('0') << std::hex << i * sizeof(int) << " "; + std::cout << " +" << std::setw(2) << i * sizeof(int) << " "; } std::cout << COLOR_RESET << "\n"; for (int i = 0; i < size; i += valuesPerLine) { - // Gibe die Überschrift für die einzelnen Blöcke mit dem entsprechenden Offset aus + // Gebe die Überschrift für die einzelnen Blöcke mit dem entsprechenden Offset aus std::cout << COLOR_ADDRESS - << std::setw(8) << std::setfill('0') << std::hex << (i * sizeof(int)) - << ": " << COLOR_HEX; + << std::setw(6) << (i * sizeof(int)) + << ": " << COLOR_DEC; // Gib die jeweiligen Werte der einzelnen Blöcke aus for (int j = 0; j < valuesPerLine && (i + j) < size; ++j) { - std::cout << std::setw(8) << std::setfill('0') << std::hex << m_memory[i + j] << " "; + std::cout << std::setw(6) << m_memory[i + j] << " "; } std::cout << COLOR_RESET << "\n"; } // Setze die Konsole wieder auf dezimal und standard fill zurück - std::cout << std::dec << std::setfill(' '); + std::cout << std::setfill(' '); } diff --git a/src/components/Memory.h b/src/components/Memory.h index f6699ea..10ec442 100644 --- a/src/components/Memory.h +++ b/src/components/Memory.h @@ -54,9 +54,10 @@ public: [[nodiscard]] int load(int address) const; /** - * - * @param size - */ + * Gibt den angegebenen Teil des RAM in der Konsole aus + * + * @param size Die Anzahl der auszugebenden RAM-Blöcke + */ void dump(int size) const; }; diff --git a/src/components/Register.cpp b/src/components/Register.cpp index 8b36ae3..3a21794 100644 --- a/src/components/Register.cpp +++ b/src/components/Register.cpp @@ -4,6 +4,7 @@ #include "Register.h" +#include #include @@ -24,3 +25,40 @@ void Register::setRegister(const int reg, const int value) { int Register::getRegister(const int reg) const { return m_registers.at(reg); } + +void Register::dump() const { + // Speichere die Farbcodes für eine einfachere Verwendung + constexpr auto COLOR_ADDRESS = "\033[1;34m"; + constexpr auto COLOR_DEC = "\033[0;37m"; + constexpr auto COLOR_RESET = "\033[0m"; + + constexpr int valuesPerLine = 10; + + // Gib die Kopfzeile mit den Überschriften aus + std::cout << COLOR_ADDRESS << "Register "; + for (int i = 0; i < valuesPerLine; ++i) { + std::cout << " x" << std::setw(2) << std::setfill('0') << i << " "; + } + std::cout << COLOR_RESET << "\n"; + + // Verwendung von size_t für std::min() + for (size_t i = 0; i < m_registers.size(); i += valuesPerLine) { + // Gib die Zeilenlabel aus + std::cout << COLOR_ADDRESS + << "x" << std::setw(2) << std::setfill('0') << i + << "-x" << std::setw(2) << std::setfill('0') << std::min(i + valuesPerLine - 1, m_registers.size() - 1) + << ": " << COLOR_DEC; + + std::cout << std::setfill(' '); + + // Gib die jeweiligen Werte der Register aus + for (int j = 0; j < valuesPerLine && (i + j) < m_registers.size(); ++j) { + std::cout << std::setw(6) << std::right << m_registers[i + j] << " "; + } + + std::cout << COLOR_RESET << "\n"; + } + + // Setze die Konsole wieder auf dezimal und standard fill zurück + std::cout << std::setfill(' '); +} diff --git a/src/components/Register.h b/src/components/Register.h index decf0ff..996d7e9 100644 --- a/src/components/Register.h +++ b/src/components/Register.h @@ -51,6 +51,11 @@ public: * @return Der Wert des Registers */ [[nodiscard]] int getRegister(int reg) const; + + /** + * Gibt alle Register in der Konsole aus + */ + void dump() const; }; #endif //REGISTER_H