Fixed some more RSP instructions, fix CI (hopefully)
This commit is contained in:
@@ -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)
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user