PIF fixes + implement drag and drop

This commit is contained in:
CocoSimone
2022-09-20 23:02:05 +02:00
parent 82578cd914
commit 8c97be3619
3 changed files with 25 additions and 18 deletions

View File

@@ -5,9 +5,10 @@
void App::Run() { void App::Run() {
// Main loop // Main loop
const u8* state = SDL_GetKeyboardState(nullptr); const u8* state = SDL_GetKeyboardState(nullptr);
SDL_EventState(SDL_DROPFILE, SDL_ENABLE);
while (!core.done) { while (!core.done) {
core.Run(window, window.volumeL, window.volumeR);
core.UpdateController(state); core.UpdateController(state);
core.Run(window, window.volumeL, window.volumeR);
SDL_Event event; SDL_Event event;
while (SDL_PollEvent(&event)) { while (SDL_PollEvent(&event)) {
@@ -38,6 +39,13 @@ void App::Run() {
} }
} break; } break;
} break; } break;
case SDL_DROPFILE: {
char* droppedDir = event.drop.file;
if(droppedDir) {
LoadROM(droppedDir);
}
free(droppedDir);
} break;
} }
} }
} }

View File

@@ -70,12 +70,8 @@ void Core::Run(Window& window, float volumeL, float volumeR) {
void Core::UpdateController(const u8* state) { void Core::UpdateController(const u8* state) {
Controller& controller = mem.mmio.si.controller; Controller& controller = mem.mmio.si.controller;
controller.raw = 0;
if(gamepadConnected) { if(gamepadConnected) {
controller.b1 = 0;
controller.b2 = 0;
controller.b3 = 0;
controller.b4 = 0;
bool A = GET_BUTTON(gamepad, SDL_CONTROLLER_BUTTON_A); bool A = GET_BUTTON(gamepad, SDL_CONTROLLER_BUTTON_A);
bool B = GET_BUTTON(gamepad, SDL_CONTROLLER_BUTTON_X); bool B = GET_BUTTON(gamepad, SDL_CONTROLLER_BUTTON_X);
bool Z = GET_AXIS(gamepad, SDL_CONTROLLER_AXIS_TRIGGERLEFT) == 32767; bool Z = GET_AXIS(gamepad, SDL_CONTROLLER_AXIS_TRIGGERLEFT) == 32767;
@@ -109,11 +105,6 @@ void Core::UpdateController(const u8* state) {
controller.b4 = 0; controller.b4 = 0;
} }
} else { } else {
controller.b1 = 0;
controller.b2 = 0;
controller.b3 = 0;
controller.b4 = 0;
controller.b1 = controller.b1 =
(state[SDL_SCANCODE_X] << 7) | (state[SDL_SCANCODE_X] << 7) |
(state[SDL_SCANCODE_C] << 6) | (state[SDL_SCANCODE_C] << 6) |
@@ -133,8 +124,19 @@ void Core::UpdateController(const u8* state) {
(state[SDL_SCANCODE_K] << 1) | (state[SDL_SCANCODE_K] << 1) |
(state[SDL_SCANCODE_L]); (state[SDL_SCANCODE_L]);
s8 xaxis = state[SDL_SCANCODE_LEFT] ? -128 : (state[SDL_SCANCODE_RIGHT] ? 127 : 0); s8 xaxis = 0;
s8 yaxis = state[SDL_SCANCODE_DOWN] ? -128 : (state[SDL_SCANCODE_UP] ? 127 : 0); if(state[SDL_SCANCODE_LEFT]) {
xaxis = -128;
} else if(state[SDL_SCANCODE_RIGHT]) {
xaxis = 127;
}
s8 yaxis = 0;
if(state[SDL_SCANCODE_DOWN]) {
yaxis = -128;
} else if(state[SDL_SCANCODE_UP]) {
yaxis = 127;
}
controller.b3 = xaxis; controller.b3 = xaxis;
controller.b4 = yaxis; controller.b4 = yaxis;

View File

@@ -52,7 +52,6 @@ void ProcessPIFCommands(u8* pifRam, Controller& controller, Mem& mem) {
} }
i += t + rlen; i += t + rlen;
channel++;
} }
} }
} }
@@ -61,11 +60,9 @@ void ProcessPIFCommands(u8* pifRam, Controller& controller, Mem& mem) {
pifRam[63] &= ~8; pifRam[63] &= ~8;
} }
if(control & 48) { if (control & 0x30) {
pifRam[63] = 128; pifRam[63] = 0x80;
} }
//pifRam[63] &= ~1;
} }
} }