added register dump
This commit is contained in:
@@ -9,6 +9,7 @@
|
|||||||
|
|
||||||
#include "components/Alu.h"
|
#include "components/Alu.h"
|
||||||
#include "components/Memory.h"
|
#include "components/Memory.h"
|
||||||
|
#include "components/Register.h"
|
||||||
namespace fs = std::filesystem;
|
namespace fs = std::filesystem;
|
||||||
|
|
||||||
Manager::~Manager() {
|
Manager::~Manager() {
|
||||||
@@ -128,6 +129,7 @@ bool Manager::handleUserInput() {
|
|||||||
while (true) {
|
while (true) {
|
||||||
std::cout << "Eingabe: ";
|
std::cout << "Eingabe: ";
|
||||||
std::cin >> input;
|
std::cin >> input;
|
||||||
|
// ignoriere die Groß- und Kleinschreibung
|
||||||
input = std::tolower(input);
|
input = std::tolower(input);
|
||||||
|
|
||||||
if (input == 's') {
|
if (input == 's') {
|
||||||
@@ -147,7 +149,7 @@ bool Manager::handleUserInput() {
|
|||||||
}
|
}
|
||||||
Memory::getInstance().dump(dumpSize);
|
Memory::getInstance().dump(dumpSize);
|
||||||
} else if (input == 'r') {
|
} else if (input == 'r') {
|
||||||
//Register::getInstance().dump();
|
Register::getInstance().dump();
|
||||||
} else {
|
} else {
|
||||||
std::cout << "Ungültige Eingabe. Bitte erneut versuchen.\n";
|
std::cout << "Ungültige Eingabe. Bitte erneut versuchen.\n";
|
||||||
}
|
}
|
||||||
@@ -180,7 +182,7 @@ void Manager::handleExitInput() {
|
|||||||
}
|
}
|
||||||
Memory::getInstance().dump(dumpSize);
|
Memory::getInstance().dump(dumpSize);
|
||||||
} else if (input == 'r') {
|
} else if (input == 'r') {
|
||||||
//Register::getInstance().dump();
|
Register::getInstance().dump();
|
||||||
} else {
|
} else {
|
||||||
std::cout << "Ungültige Eingabe. Bitte erneut versuchen.\n";
|
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 {
|
void Memory::dump(const int size) const {
|
||||||
// Speichere die Farbcodes für eine einfachere Verwendung
|
// Speichere die Farbcodes für eine einfachere Verwendung
|
||||||
constexpr auto COLOR_ADDRESS = "\033[1;34m";
|
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 auto COLOR_RESET = "\033[0m";
|
||||||
|
|
||||||
constexpr int valuesPerLine = 10;
|
constexpr int valuesPerLine = 10;
|
||||||
|
|
||||||
// Gib die Kopfzeile mit den Überschriften aus
|
// 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) {
|
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";
|
std::cout << COLOR_RESET << "\n";
|
||||||
|
|
||||||
for (int i = 0; i < size; i += valuesPerLine) {
|
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::cout << COLOR_ADDRESS
|
||||||
<< std::setw(8) << std::setfill('0') << std::hex << (i * sizeof(int))
|
<< std::setw(6) << (i * sizeof(int))
|
||||||
<< ": " << COLOR_HEX;
|
<< ": " << COLOR_DEC;
|
||||||
|
|
||||||
// Gib die jeweiligen Werte der einzelnen Blöcke aus
|
// Gib die jeweiligen Werte der einzelnen Blöcke aus
|
||||||
for (int j = 0; j < valuesPerLine && (i + j) < size; ++j) {
|
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";
|
std::cout << COLOR_RESET << "\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
// Setze die Konsole wieder auf dezimal und standard fill zurück
|
// 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;
|
[[nodiscard]] int load(int address) const;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
* Gibt den angegebenen Teil des RAM in der Konsole aus
|
||||||
* @param size
|
*
|
||||||
*/
|
* @param size Die Anzahl der auszugebenden RAM-Blöcke
|
||||||
|
*/
|
||||||
void dump(int size) const;
|
void dump(int size) const;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -4,6 +4,7 @@
|
|||||||
|
|
||||||
#include "Register.h"
|
#include "Register.h"
|
||||||
|
|
||||||
|
#include <iomanip>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
|
||||||
|
|
||||||
@@ -24,3 +25,40 @@ void Register::setRegister(const int reg, const int value) {
|
|||||||
int Register::getRegister(const int reg) const {
|
int Register::getRegister(const int reg) const {
|
||||||
return m_registers.at(reg);
|
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
|
* @return Der Wert des Registers
|
||||||
*/
|
*/
|
||||||
[[nodiscard]] int getRegister(int reg) const;
|
[[nodiscard]] int getRegister(int reg) const;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gibt alle Register in der Konsole aus
|
||||||
|
*/
|
||||||
|
void dump() const;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif //REGISTER_H
|
#endif //REGISTER_H
|
||||||
|
|||||||
Reference in New Issue
Block a user