mirror of
https://github.com/wheremyfoodat/Panda3DS.git
synced 2025-04-11 00:25:41 +12:00
commit
b872650d31
5 changed files with 56 additions and 1 deletions
|
@ -201,5 +201,10 @@ public:
|
||||||
|
|
||||||
void sendGPUInterrupt(GPUInterrupt type) { serviceManager.requestGPUInterrupt(type); }
|
void sendGPUInterrupt(GPUInterrupt type) { serviceManager.requestGPUInterrupt(type); }
|
||||||
void signalDSPEvents() { serviceManager.signalDSPEvents(); }
|
void signalDSPEvents() { serviceManager.signalDSPEvents(); }
|
||||||
|
|
||||||
|
void pressKey(u32 key) { serviceManager.pressKey(key); }
|
||||||
|
void releaseKey(u32 key) { serviceManager.releaseKey(key); }
|
||||||
|
void setCirclepadX(u16 x) { serviceManager.setCirclepadX(x); }
|
||||||
|
void setCirclepadY(u16 y) { serviceManager.setCirclepadY(y); }
|
||||||
void updateInputs() { serviceManager.updateInputs(); }
|
void updateInputs() { serviceManager.updateInputs(); }
|
||||||
};
|
};
|
|
@ -34,6 +34,11 @@ public:
|
||||||
HIDService(Memory& mem, Kernel& kernel) : mem(mem), kernel(kernel) {}
|
HIDService(Memory& mem, Kernel& kernel) : mem(mem), kernel(kernel) {}
|
||||||
void reset();
|
void reset();
|
||||||
void handleSyncRequest(u32 messagePointer);
|
void handleSyncRequest(u32 messagePointer);
|
||||||
|
|
||||||
|
void pressKey(u32 key);
|
||||||
|
void releaseKey(u32 key);
|
||||||
|
void setCirclepadX(u16 x);
|
||||||
|
void setCirclepadY(u16 y);
|
||||||
void updateInputs();
|
void updateInputs();
|
||||||
|
|
||||||
void setSharedMem(u8* ptr) {
|
void setSharedMem(u8* ptr) {
|
||||||
|
|
|
@ -84,5 +84,10 @@ public:
|
||||||
void setHIDSharedMem(u8* ptr) { hid.setSharedMem(ptr); }
|
void setHIDSharedMem(u8* ptr) { hid.setSharedMem(ptr); }
|
||||||
|
|
||||||
void signalDSPEvents() { dsp.signalEvents(); }
|
void signalDSPEvents() { dsp.signalEvents(); }
|
||||||
|
|
||||||
|
void pressKey(u32 key) { hid.pressKey(key); }
|
||||||
|
void releaseKey(u32 key) { hid.releaseKey(key); }
|
||||||
|
void setCirclepadX(u16 x) { hid.setCirclepadX(x); }
|
||||||
|
void setCirclepadY(u16 y) { hid.setCirclepadY(y); }
|
||||||
void updateInputs() { hid.updateInputs(); }
|
void updateInputs() { hid.updateInputs(); }
|
||||||
};
|
};
|
|
@ -108,6 +108,11 @@ void HIDService::getIPCHandles(u32 messagePointer) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void HIDService::pressKey(u32 key) { sharedMem[0]++; *(u32*)&sharedMem[0x28] |= key; }
|
||||||
|
void HIDService::releaseKey(u32 key) { sharedMem[0]++; *(u32*)&sharedMem[0x28] &= ~key; }
|
||||||
|
void HIDService::setCirclepadX(u16 x) { sharedMem[0]++; *(u16*)&sharedMem[0x28 + 0xC] = x; }
|
||||||
|
void HIDService::setCirclepadY(u16 y) { sharedMem[0]++; *(u16*)&sharedMem[0x28 + 0xC + 2] = y; }
|
||||||
|
|
||||||
// TODO: We don't currently have inputs but we must at least try to signal the HID key input events now and then
|
// TODO: We don't currently have inputs but we must at least try to signal the HID key input events now and then
|
||||||
void HIDService::updateInputs() {
|
void HIDService::updateInputs() {
|
||||||
// For some reason, the original developers decided to signal the HID events each time the OS rescanned inputs
|
// For some reason, the original developers decided to signal the HID events each time the OS rescanned inputs
|
||||||
|
|
|
@ -36,10 +36,45 @@ void Emulator::run() {
|
||||||
|
|
||||||
SDL_Event event;
|
SDL_Event event;
|
||||||
while (SDL_PollEvent(&event)) {
|
while (SDL_PollEvent(&event)) {
|
||||||
if (event.type == SDL_QUIT) {
|
switch (event.type) {
|
||||||
|
case SDL_QUIT:
|
||||||
printf("Bye :(\n");
|
printf("Bye :(\n");
|
||||||
running = false;
|
running = false;
|
||||||
return;
|
return;
|
||||||
|
case SDL_KEYDOWN:
|
||||||
|
switch (event.key.keysym.sym) {
|
||||||
|
case SDLK_z: kernel.pressKey(1 << 0); break;
|
||||||
|
case SDLK_RIGHT: kernel.pressKey(1 << 4); break;
|
||||||
|
case SDLK_LEFT: kernel.pressKey(1 << 5); break;
|
||||||
|
case SDLK_UP: kernel.pressKey(1 << 6); break;
|
||||||
|
case SDLK_DOWN: kernel.pressKey(1 << 7); break;
|
||||||
|
case SDLK_w: kernel.setCirclepadY(0x9C); break;
|
||||||
|
case SDLK_a: kernel.setCirclepadX(-0x9C); break;
|
||||||
|
case SDLK_s: kernel.setCirclepadY(-0x9C); break;
|
||||||
|
case SDLK_d: kernel.setCirclepadX(0x9C); break;
|
||||||
|
case SDLK_j: kernel.pressKey(1 << 1); break;
|
||||||
|
case SDLK_k: kernel.pressKey(1 << 10); break;
|
||||||
|
case SDLK_l: kernel.pressKey(1 << 11); break;
|
||||||
|
case SDLK_r: kernel.pressKey(1 << 8); break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case SDL_KEYUP:
|
||||||
|
switch (event.key.keysym.sym) {
|
||||||
|
case SDLK_z: kernel.releaseKey(1 << 0); break;
|
||||||
|
case SDLK_RIGHT: kernel.releaseKey(1 << 4); break;
|
||||||
|
case SDLK_LEFT: kernel.releaseKey(1 << 5); break;
|
||||||
|
case SDLK_UP: kernel.releaseKey(1 << 6); break;
|
||||||
|
case SDLK_DOWN: kernel.releaseKey(1 << 7); break;
|
||||||
|
case SDLK_w: kernel.setCirclepadY(0); break;
|
||||||
|
case SDLK_a: kernel.setCirclepadX(0); break;
|
||||||
|
case SDLK_s: kernel.setCirclepadY(0); break;
|
||||||
|
case SDLK_d: kernel.setCirclepadX(0); break;
|
||||||
|
case SDLK_j: kernel.releaseKey(1 << 1); break;
|
||||||
|
case SDLK_k: kernel.releaseKey(1 << 10); break;
|
||||||
|
case SDLK_l: kernel.releaseKey(1 << 11); break;
|
||||||
|
case SDLK_r: kernel.releaseKey(1 << 8); break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue