diff --git a/libplip/Core/PlipChip8.cpp b/libplip/Core/PlipChip8.cpp index 13c3240..e7627f9 100644 --- a/libplip/Core/PlipChip8.cpp +++ b/libplip/Core/PlipChip8.cpp @@ -10,6 +10,7 @@ namespace Plip::Core { PlipChip8::PlipChip8(PlipInput *input) : Plip::PlipCore(input) { + m_ram = new PlipMemoryRam(RamSize); } PlipError PlipChip8::Load(const std::string &path) { @@ -17,8 +18,19 @@ namespace Plip::Core { if(!io::FileExists(path)) return PlipError::FileNotFound; auto size = io::GetSize(path); - auto ram = io::ReadRam(path, io::GetSize(path), 0x200, 0x1000); - m_memoryMap->AddBlock(&ram); + auto data = io::ReadFile(path, size); + + // Zero RAM. + for(auto i = 0; i < RamSize; i++) + m_ram->SetByte(i, 0x00); + + // Load program. + auto ramByte = ProgramOffset; + auto dataByte = 0; + while(dataByte < size && ramByte < RamSize) + m_ram->SetByte(ramByte++, data[dataByte++]); + + m_memoryMap->AddBlock(m_ram); return PlipError::Success; } } diff --git a/libplip/Core/PlipChip8.h b/libplip/Core/PlipChip8.h index 99b0dec..c81ce48 100644 --- a/libplip/Core/PlipChip8.h +++ b/libplip/Core/PlipChip8.h @@ -12,6 +12,7 @@ #include "../PlipCore.h" #include "../PlipError.h" #include "../Input/PlipInput.h" +#include "../Memory/PlipMemoryRam.h" namespace Plip::Core { class PlipChip8 : public PlipCore { @@ -19,5 +20,11 @@ namespace Plip::Core { explicit PlipChip8(PlipInput *input); PlipError Load(const std::string &path) override; + + static const uint32_t ProgramOffset = 0x200; + static const uint32_t RamSize = 0x1000; + + private: + PlipMemoryRam *m_ram; }; } diff --git a/libplip/PlipIo.cpp b/libplip/PlipIo.cpp index 51183e4..7f8fb3b 100644 --- a/libplip/PlipIo.cpp +++ b/libplip/PlipIo.cpp @@ -36,30 +36,4 @@ namespace Plip { auto file = LoadFile(path); return ReadFile(file, size); } - - PlipMemoryRam PlipIo::ReadRam(std::ifstream &file, uintmax_t dataSize, uint32_t offset, uint32_t ramSize) { - auto data = ReadFile(file, dataSize); - auto ram = PlipMemoryRam(ramSize); - - auto ramByte = offset; - auto dataByte = 0; - while(ramByte < dataSize && ramByte < ramSize) - ram.SetByte(ramByte++, data[dataByte++]); - - return ram; - } - - PlipMemoryRam PlipIo::ReadRam(const std::string &path, uintmax_t dataSize, uint32_t offset, uint32_t ramSize) { - auto file = LoadFile(path); - return ReadRam(file, dataSize, offset, ramSize); - } - - PlipMemoryRom PlipIo::ReadRom(std::ifstream &file, uintmax_t size) { - return PlipMemoryRom(ReadFile(file, size).data(), size); - } - - PlipMemoryRom PlipIo::ReadRom(const std::string &path, uintmax_t size) { - auto file = LoadFile(path); - return ReadRom(file, size); - } } diff --git a/libplip/PlipIo.h b/libplip/PlipIo.h index b074eaf..f3ae9e6 100644 --- a/libplip/PlipIo.h +++ b/libplip/PlipIo.h @@ -19,15 +19,10 @@ namespace Plip { static bool FileExists(const std::string &path); static uintmax_t GetSize(const std::string &path); static std::ifstream LoadFile(const std::string &path); - static PlipMemoryRam ReadRam(std::ifstream &file, uintmax_t dataSize, uint32_t offset, uint32_t ramSize); - static PlipMemoryRam ReadRam(const std::string &path, uintmax_t dataSize, uint32_t offset, uint32_t ramSize); - static PlipMemoryRom ReadRom(std::ifstream &file, uintmax_t size); - static PlipMemoryRom ReadRom(const std::string &path, uintmax_t size); + static std::vector ReadFile(std::ifstream &file, uintmax_t size); + static std::vector ReadFile(const std::string &path, uintmax_t size); private: PlipIo() = default; - - static std::vector ReadFile(std::ifstream &file, uintmax_t size); - static std::vector ReadFile(const std::string &path, uintmax_t size); }; } diff --git a/plip-sdl/main.cpp b/plip-sdl/main.cpp index efa4f94..df4a0a5 100644 --- a/plip-sdl/main.cpp +++ b/plip-sdl/main.cpp @@ -197,11 +197,6 @@ int main(int argc, char **argv) { break; } - auto dCore = plip->GetCore(); - auto dMap = dCore->GetMemoryMap(); - auto b = dMap->GetByte(0x200); - std::cout << b << std::endl; - gameLoop(plip, config, timer); SDL_Quit();