added register dump
This commit is contained in:
@@ -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";
|
||||
}
|
||||
|
||||
@@ -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(' ');
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
};
|
||||
|
||||
|
||||
@@ -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(' ');
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user