added register dump

This commit is contained in:
black
2025-07-08 22:41:02 +02:00
parent e3608da3a0
commit cf45a6e634
5 changed files with 59 additions and 13 deletions

View File

@@ -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";
}

View File

@@ -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(' ');
}

View File

@@ -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;
};

View File

@@ -4,6 +4,7 @@
#include "Register.h"
#include <iomanip>
#include <iostream>
@@ -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(' ');
}

View File

@@ -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