diff --git a/CMakeLists.txt b/CMakeLists.txt index aea9f4a..937b1ac 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -14,13 +14,16 @@ elseif(CMAKE_CXX_COMPILER_ID MATCHES "MSVC") endif() set(BIN_DIR "${CMAKE_SOURCE_DIR}/bin") -set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${BIN_DIR}) -SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG ${BIN_DIR}) -SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE ${BIN_DIR}) -SET(CMAKE_LIBRARY_OUTPUT_DIRECTORY_DEBUG ${BIN_DIR}) -SET(CMAKE_LIBRARY_OUTPUT_DIRECTORY_RELEASE ${BIN_DIR}) -SET(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_DEBUG ${BIN_DIR}) -SET(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_RELEASE ${BIN_DIR}) +set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${BIN_DIR}) +SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG ${BIN_DIR}) +SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELWITHDEBINFO ${BIN_DIR}) +SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE ${BIN_DIR}) +SET(CMAKE_LIBRARY_OUTPUT_DIRECTORY_DEBUG ${BIN_DIR}) +SET(CMAKE_LIBRARY_OUTPUT_DIRECTORY_RELWITHDEBINFO ${BIN_DIR}) +SET(CMAKE_LIBRARY_OUTPUT_DIRECTORY_RELEASE ${BIN_DIR}) +SET(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_DEBUG ${BIN_DIR}) +SET(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_RELWITHDEBINFO ${BIN_DIR}) +SET(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_RELEASE ${BIN_DIR}) add_executable(main) @@ -74,7 +77,7 @@ add_test( # Could also compare the first lines of each file using technique from https://superuser.com/a/511406 add_test(NAME blargg_cpu_test5_official_execute COMMAND main CPU_TEST blargg5official WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/bin) -set_tests_properties(blargg_cpu_test5_official_execute PROPERTIES TIMEOUT 5) +set_tests_properties(blargg_cpu_test5_official_execute PROPERTIES TIMEOUT 10) add_test( NAME blargg_cpu_test5_official_match COMMAND python ${CMAKE_SOURCE_DIR}/test/logCompare.py diff --git a/CMakePresets.json b/CMakePresets.json index 449814b..80b5864 100644 --- a/CMakePresets.json +++ b/CMakePresets.json @@ -20,6 +20,15 @@ "CMAKE_BUILD_TYPE": "Debug" } }, + { + "name": "windows-msvc-reldebinfo", + "displayName": "MSVC / MSBuild (RelWithDebInfo)", + "inherits": "windows-msvc-base", + "description": "Windows release-with-debug-info build using MSVC and Visual Studio 2022 generator", + "cacheVariables": { + "CMAKE_BUILD_TYPE": "RelWithDebInfo" + } + }, { "name": "windows-msvc-release", "displayName": "MSVC / MSBuild (Release)", @@ -75,6 +84,11 @@ "configuration": "Debug", "configurePreset": "windows-msvc-debug" }, + { + "name": "MSVC - RelWithDebInfo", + "configuration": "RelWithDebInfo", + "configurePreset": "windows-msvc-reldebinfo" + }, { "name": "MSVC - Release", "configuration": "Release", diff --git a/src/core/ppu.cpp b/src/core/ppu.cpp index 2f04f8a..a05eca6 100644 --- a/src/core/ppu.cpp +++ b/src/core/ppu.cpp @@ -28,6 +28,8 @@ uint8_t PPU::readRegister(addr_t address) { void PPU::writeRegister(addr_t address, uint8_t data) { registers[address] = data; + // Write to the PPU open bus + registers[0x2] = (registers[0x2] & 0xf0) | (data & 0x0f); } void PPU::start() { diff --git a/src/cpu/cpu_test.cpp b/src/cpu/cpu_test.cpp index 7b43fed..0d484b8 100644 --- a/src/cpu/cpu_test.cpp +++ b/src/cpu/cpu_test.cpp @@ -100,7 +100,7 @@ void runBlarggCpuTest5Official() { std::this_thread::yield(); } - for (int i = 0; i < 198000; i++) { + for (int i = 0; i < 368380; i++) { nes->cpu->cycle(); } diff --git a/src/cpu/opcodes.cpp b/src/cpu/opcodes.cpp index 3da9729..20bc30e 100644 --- a/src/cpu/opcodes.cpp +++ b/src/cpu/opcodes.cpp @@ -430,7 +430,6 @@ void CPU::runInstruction(addressingMode mode, instruction inst, addr_t addr, uin setProcessorStatus(stackPop()); p.b1 = oldP.b1; p.b2 = oldP.b2; - p.i = oldP.i; } break; case RLA: {// ROL + AND diff --git a/src/memory/core_memory.cpp b/src/memory/core_memory.cpp index e0a7415..4ed22ac 100644 --- a/src/memory/core_memory.cpp +++ b/src/memory/core_memory.cpp @@ -44,14 +44,14 @@ addr_t CoreMemory::mapPPU(addr_t address) { Reads a byte of data from one of the PPU registers. */ uint8_t CoreMemory::readPPU(addr_t address) { - return ppu->readRegister(address); + return ppu->readRegister(address & 0xf); } /* Writes a byte of data to one of the PPU registers. */ void CoreMemory::writePPU(addr_t address, uint8_t data) { - return ppu->writeRegister(address, data); + return ppu->writeRegister(address & 0xf, data); } /* diff --git a/src/memory/mapper001.cpp b/src/memory/mapper001.cpp index ca740ab..42d82e0 100644 --- a/src/memory/mapper001.cpp +++ b/src/memory/mapper001.cpp @@ -34,7 +34,7 @@ void Mapper001::write(addr_t address, uint8_t data) { shiftReg = (shiftReg >> 1) | ((data & 1) << 4); if (lowBit) { // The low bit was set, so the shift register is full - int regId = address & 0x6000; + int regId = (address & 0x6000) >> 13; uint8_t* registers[] = {&controlReg, &chrReg0, &chrReg1, &prgReg}; *registers[regId] = shiftReg; resetShift();