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