diff --git a/emulator/components/Memory.cpp b/emulator/components/Memory.cpp new file mode 100644 index 0000000..86e3066 --- /dev/null +++ b/emulator/components/Memory.cpp @@ -0,0 +1,18 @@ +// +// Created by black on 12.06.25. +// + +#include "Memory.h" + +Memory *Memory::getInstance() { + static Memory instance; + return &instance; +} + +void Memory::store(const int address, const int value) { + m_memory[address] = value; +} + +int Memory::load(const int address) const { + return m_memory[address]; +} diff --git a/emulator/components/Memory.h b/emulator/components/Memory.h new file mode 100644 index 0000000..780bdd9 --- /dev/null +++ b/emulator/components/Memory.h @@ -0,0 +1,52 @@ +// +// Created by black on 12.06.25. +// + +#ifndef MEMORY_H +#define MEMORY_H + +/// Eine Hauptspeicherklasse als Singleton implementiert. +/// Als Hauptspeicher wird ein Array genutzt. + + + +class Memory { +private: + Memory() = default; + + /// Singleton instance + static Memory *m_instance; + /// Hauptspeicher (hier 32 kB groß) + int m_memory[8192]; + +public: + /// Singleton Logik + Memory(const Memory &) = delete; + Memory(const Memory &&) = delete; + Memory &operator=(const Memory &) = delete; + Memory &operator=(const Memory &&) = delete; + ~Memory() = default; + + static Memory *getInstance(); + + /** + * Speichert den angegebenen Wert an der angegebenen Adresse im Hauptspeicher + * + * @param address Die Adresse, in die der Wert gespeichert werden soll + * @param value Der Wert, der in die Adresse gespeichert werden soll + */ + void store(int address, int value); + + /** + * Lädt den gespeicherten Wert aus der angegebenen Adresse + * + * @param address Die Adresse, aus der der Wert gelesen werden soll + * @return Der Wert aus der Adresse + */ + int load(int address) const; + +}; + + + +#endif //MEMORY_H