initial commit

This commit is contained in:
2026-03-03 23:50:39 -06:00
commit fa9ff2c753
14 changed files with 441 additions and 0 deletions

75
main.cpp Normal file
View File

@@ -0,0 +1,75 @@
#include "Bus.h"
#include "cpu.h"
#include "spdlog/spdlog.h"
#include "spdlog/sinks/rotating_file_sink.h"
#include "CLI11/include/CLI/CLI.hpp"
Bus* g_bus;
IMemoryAccessor* g_cpuMemory;
CPU* g_cpu;
Cartridge* g_cartridge;
std::shared_ptr<spdlog::logger> gLogger;
spdlog::logger* Logger() { return gLogger.get(); }
void initLogger()
{
constexpr static std::size_t MAX_LOG_SIZE = 1048576 * 5;
constexpr static std::size_t MAX_LOG_FILES = 10;
gLogger = spdlog::rotating_logger_mt("bear", "logs/bear.log", MAX_LOG_SIZE, MAX_LOG_FILES);
}
int main(int argc, char** argv)
{
initLogger();
Logger()->info("Bear started...");
CLI::App args { "A NES Emulator" };
argv = args.ensure_utf8(argv);
std::string filename;
args.add_option("-f, --file", filename, ".nes ROM file to load");
CLI11_PARSE(args, argc, argv);
if (filename.empty())
{
Logger()->error("ROM file not specified");
exit(-1);
}
std::ifstream romFile(filename.c_str(), std::ios::binary);
if (!romFile.is_open())
{
Logger()->error("Could not open ROM file");
exit(-1);
}
romFile.seekg(0, std::ios::end);
const std::streamsize romFileSize = romFile.tellg();
romFile.seekg(0, std::ios::beg);
auto* rom = new std::byte[romFileSize];
if (!romFile.read(reinterpret_cast<char*>(rom), romFileSize))
{
Logger()->error("Could not read ROM file");
exit(-1);
}
g_cartridge = new Cartridge(rom);
g_bus->cartridge = g_cartridge;
g_cpuMemory = new CPUMemoryAccessor(g_bus);
g_cpu = new CPU(g_cpuMemory);
g_bus->cpu = g_cpu;
g_cpu->start();
return 0;
}