diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index bf51db96..8f66f172 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -26,8 +26,7 @@ jobs: - name: Collect artifacts run: | mkdir upload - cp -r resources upload - cp build/natsukashii upload + cp -r build/{natsukashii,resources} upload - name: Upload artifacts uses: actions/upload-artifact@v2 with: @@ -63,8 +62,7 @@ jobs: - name: Collect artifacts run: | mkdir upload - cp -r resources upload - cp build/natsukashii.exe upload + cp -r build/{natsukashii.exe,resources} upload - name: Upload artifacts uses: actions/upload-artifact@v2 with: diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index ba25d653..1603ff62 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -53,4 +53,7 @@ elseif(${CMAKE_BUILD_TYPE} MATCHES Debug) target_compile_options(natsukashii PRIVATE -march=native -g) endif() +file(COPY ${PROJECT_SOURCE_DIR}/../resources/ DESTINATION ${PROJECT_BINARY_DIR}/resources/) +file(REMOVE ${PROJECT_BINARY_DIR}/resources/mario.png ${PROJECT_BINARY_DIR}/resources/shader.frag ${PROJECT_BINARY_DIR}/resources/shader.vert) + target_link_libraries(natsukashii PRIVATE ${SDL2_LIBRARIES} ${LIBRARIES} capstone-static nfd parallel-rdp imgui fmt::fmt nlohmann_json::nlohmann_json) \ No newline at end of file diff --git a/src/n64/Core.cpp b/src/n64/Core.cpp index 532c32b1..e76a4427 100644 --- a/src/n64/Core.cpp +++ b/src/n64/Core.cpp @@ -101,10 +101,10 @@ void Core::UpdateController(const u8* state) { bool DRIGHT = GET_BUTTON(gamepad, SDL_CONTROLLER_BUTTON_DPAD_RIGHT); bool L = GET_BUTTON(gamepad, SDL_CONTROLLER_BUTTON_LEFTSHOULDER); bool R = GET_BUTTON(gamepad, SDL_CONTROLLER_BUTTON_RIGHTSHOULDER); - bool CUP = GET_AXIS(gamepad, SDL_CONTROLLER_AXIS_RIGHTY) == 32767; - bool CDOWN = GET_AXIS(gamepad, SDL_CONTROLLER_AXIS_RIGHTY) == -32767; - bool CLEFT = GET_AXIS(gamepad, SDL_CONTROLLER_AXIS_RIGHTX) == -32767; - bool CRIGHT = GET_AXIS(gamepad, SDL_CONTROLLER_AXIS_RIGHTX) == 32767; + bool CUP = GET_AXIS(gamepad, SDL_CONTROLLER_AXIS_RIGHTY) <= -128; + bool CDOWN = GET_AXIS(gamepad, SDL_CONTROLLER_AXIS_RIGHTY) >= 127; + bool CLEFT = GET_AXIS(gamepad, SDL_CONTROLLER_AXIS_RIGHTX) <= -128; + bool CRIGHT = GET_AXIS(gamepad, SDL_CONTROLLER_AXIS_RIGHTX) >= 127; controller.b1 = (A << 7) | (B << 6) | (Z << 5) | (START << 4) | (DUP << 3) | (DDOWN << 2) | (DLEFT << 1) | DRIGHT; diff --git a/src/n64/core/rsp/instructions.cpp b/src/n64/core/rsp/instructions.cpp index 1446eb76..4dde3718 100644 --- a/src/n64/core/rsp/instructions.cpp +++ b/src/n64/core/rsp/instructions.cpp @@ -964,10 +964,15 @@ void RSP::vmacf(u32 instr) { VPR vte = GetVTE(vpr[VT(instr)], E2(instr)); for(int i = 0; i < 8; i++) { - s32 prod = vs.selement[i] * vte.selement[i]; - s64 accDelta = prod * 2; + s16 op1 = vte.element[i]; + s16 op2 = vs.element[i]; + s32 prod = op1 * op2; + + s64 accDelta = prod; + accDelta *= 2; s64 accum = GetACC(i) + accDelta; SetACC(i, accum); + accum = GetACC(i); s16 result = signedClamp(accum >> 16); vd.element[i] = result; @@ -1001,7 +1006,7 @@ void RSP::veq(u32 instr) { VPR vte = GetVTE(vpr[VT(instr)], e); for(int i = 0; i < 8; i++) { - vcc.l.element[i] = vco.h.element[i] || (vs.element[i] == vte.element[i]) ? 0xffff : 0; + vcc.l.element[i] = (vco.h.element[i] == 0) && (vs.element[i] == vte.element[i]) ? 0xffff : 0; acc.l.element[i] = vcc.l.element[i] ? vs.element[i] : vte.element[i]; vd.element[i] = acc.l.element[i]; vcc.h.element[i] = vco.h.element[i] = vco.l.element[i] = 0; @@ -1267,6 +1272,8 @@ void RSP::vmrg(u32 instr) { for(int i = 0; i < 8; i++) { acc.l.element[i] = vcc.l.element[i] ? vs.element[i] : vte.element[i]; vd.element[i] = acc.l.element[i]; + + vco.l.element[i] = vco.h.element[i] = 0; } }