Fixed some more RSP instructions, fix CI (hopefully)

This commit is contained in:
CocoSimone
2022-10-17 22:32:46 +02:00
parent 2dca6a5116
commit 6510dbf3ac
4 changed files with 19 additions and 11 deletions

View File

@@ -26,8 +26,7 @@ jobs:
- name: Collect artifacts - name: Collect artifacts
run: | run: |
mkdir upload mkdir upload
cp -r resources upload cp -r build/{natsukashii,resources} upload
cp build/natsukashii upload
- name: Upload artifacts - name: Upload artifacts
uses: actions/upload-artifact@v2 uses: actions/upload-artifact@v2
with: with:
@@ -63,8 +62,7 @@ jobs:
- name: Collect artifacts - name: Collect artifacts
run: | run: |
mkdir upload mkdir upload
cp -r resources upload cp -r build/{natsukashii.exe,resources} upload
cp build/natsukashii.exe upload
- name: Upload artifacts - name: Upload artifacts
uses: actions/upload-artifact@v2 uses: actions/upload-artifact@v2
with: with:

View File

@@ -53,4 +53,7 @@ elseif(${CMAKE_BUILD_TYPE} MATCHES Debug)
target_compile_options(natsukashii PRIVATE -march=native -g) target_compile_options(natsukashii PRIVATE -march=native -g)
endif() 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) target_link_libraries(natsukashii PRIVATE ${SDL2_LIBRARIES} ${LIBRARIES} capstone-static nfd parallel-rdp imgui fmt::fmt nlohmann_json::nlohmann_json)

View File

@@ -101,10 +101,10 @@ void Core::UpdateController(const u8* state) {
bool DRIGHT = GET_BUTTON(gamepad, SDL_CONTROLLER_BUTTON_DPAD_RIGHT); bool DRIGHT = GET_BUTTON(gamepad, SDL_CONTROLLER_BUTTON_DPAD_RIGHT);
bool L = GET_BUTTON(gamepad, SDL_CONTROLLER_BUTTON_LEFTSHOULDER); bool L = GET_BUTTON(gamepad, SDL_CONTROLLER_BUTTON_LEFTSHOULDER);
bool R = GET_BUTTON(gamepad, SDL_CONTROLLER_BUTTON_RIGHTSHOULDER); bool R = GET_BUTTON(gamepad, SDL_CONTROLLER_BUTTON_RIGHTSHOULDER);
bool CUP = GET_AXIS(gamepad, SDL_CONTROLLER_AXIS_RIGHTY) == 32767; bool CUP = GET_AXIS(gamepad, SDL_CONTROLLER_AXIS_RIGHTY) <= -128;
bool CDOWN = GET_AXIS(gamepad, SDL_CONTROLLER_AXIS_RIGHTY) == -32767; bool CDOWN = GET_AXIS(gamepad, SDL_CONTROLLER_AXIS_RIGHTY) >= 127;
bool CLEFT = GET_AXIS(gamepad, SDL_CONTROLLER_AXIS_RIGHTX) == -32767; bool CLEFT = GET_AXIS(gamepad, SDL_CONTROLLER_AXIS_RIGHTX) <= -128;
bool CRIGHT = GET_AXIS(gamepad, SDL_CONTROLLER_AXIS_RIGHTX) == 32767; bool CRIGHT = GET_AXIS(gamepad, SDL_CONTROLLER_AXIS_RIGHTX) >= 127;
controller.b1 = (A << 7) | (B << 6) | (Z << 5) | (START << 4) | controller.b1 = (A << 7) | (B << 6) | (Z << 5) | (START << 4) |
(DUP << 3) | (DDOWN << 2) | (DLEFT << 1) | DRIGHT; (DUP << 3) | (DDOWN << 2) | (DLEFT << 1) | DRIGHT;

View File

@@ -964,10 +964,15 @@ void RSP::vmacf(u32 instr) {
VPR vte = GetVTE(vpr[VT(instr)], E2(instr)); VPR vte = GetVTE(vpr[VT(instr)], E2(instr));
for(int i = 0; i < 8; i++) { for(int i = 0; i < 8; i++) {
s32 prod = vs.selement[i] * vte.selement[i]; s16 op1 = vte.element[i];
s64 accDelta = prod * 2; s16 op2 = vs.element[i];
s32 prod = op1 * op2;
s64 accDelta = prod;
accDelta *= 2;
s64 accum = GetACC(i) + accDelta; s64 accum = GetACC(i) + accDelta;
SetACC(i, accum); SetACC(i, accum);
accum = GetACC(i);
s16 result = signedClamp(accum >> 16); s16 result = signedClamp(accum >> 16);
vd.element[i] = result; vd.element[i] = result;
@@ -1001,7 +1006,7 @@ void RSP::veq(u32 instr) {
VPR vte = GetVTE(vpr[VT(instr)], e); VPR vte = GetVTE(vpr[VT(instr)], e);
for(int i = 0; i < 8; i++) { 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]; acc.l.element[i] = vcc.l.element[i] ? vs.element[i] : vte.element[i];
vd.element[i] = acc.l.element[i]; vd.element[i] = acc.l.element[i];
vcc.h.element[i] = vco.h.element[i] = vco.l.element[i] = 0; 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++) { for(int i = 0; i < 8; i++) {
acc.l.element[i] = vcc.l.element[i] ? vs.element[i] : vte.element[i]; acc.l.element[i] = vcc.l.element[i] ? vs.element[i] : vte.element[i];
vd.element[i] = acc.l.element[i]; vd.element[i] = acc.l.element[i];
vco.l.element[i] = vco.h.element[i] = 0;
} }
} }