Let's try this

This commit is contained in:
Simone
2024-01-22 09:49:16 +01:00
parent f5196f5ce2
commit 410f9f62fc
6 changed files with 57 additions and 8 deletions

View File

@@ -1,8 +1,11 @@
file(GLOB_RECURSE SOURCES *.cpp)
file(GLOB_RECURSE HEADERS *.hpp)
find_package(gainput REQUIRED)
set(GAINPUT_SAMPLES OFF)
set(GAINPUT_TESTS OFF)
add_subdirectory(../../../../external/gainput gainput)
add_library(mmio ${SOURCES} ${HEADERS} ../../../../external/cic_nus_6105/n64_cic_nus_6105.cpp)
target_include_directories(mmio PRIVATE ../../../../external/gainput/lib/include)
target_link_libraries(mmio PRIVATE gainput)

View File

@@ -27,6 +27,28 @@ void PIF::Reset() {
}
mempakOpen = false;
inputManager.SetDisplaySize(640, 480);
keyboardId = inputManager.CreateDevice<gainput::InputDeviceKeyboard>();
inputMap.MapBool(BtnZ, keyboardId, gainput::KeyZ);
inputMap.MapBool(BtnA, keyboardId, gainput::KeyX);
inputMap.MapBool(BtnB, keyboardId, gainput::KeyC);
inputMap.MapBool(BtnL, keyboardId, gainput::KeyA);
inputMap.MapBool(BtnR, keyboardId, gainput::KeyS);
inputMap.MapBool(BtnStart, keyboardId, gainput::KeyReturn);
inputMap.MapBool(BtnDUp, keyboardId, gainput::KeyI);
inputMap.MapBool(BtnDDown, keyboardId, gainput::KeyK);
inputMap.MapBool(BtnDLeft, keyboardId, gainput::KeyJ);
inputMap.MapBool(BtnDRight, keyboardId, gainput::KeyL);
inputMap.MapBool(BtnCUp, keyboardId, gainput::KeyKpUp);
inputMap.MapBool(BtnCDown, keyboardId, gainput::KeyKpDown);
inputMap.MapBool(BtnCLeft, keyboardId, gainput::KeyKpLeft);
inputMap.MapBool(BtnCRight, keyboardId, gainput::KeyKpRight);
inputMap.MapBool(AxisUp, keyboardId, gainput::KeyUp);
inputMap.MapBool(AxisDown, keyboardId, gainput::KeyDown);
inputMap.MapBool(AxisLeft, keyboardId, gainput::KeyLeft);
inputMap.MapBool(AxisRight, keyboardId, gainput::KeyRight);
}
void PIF::MaybeLoadMempak() {
@@ -186,7 +208,6 @@ void PIF::ProcessCommands(Mem &mem) {
channel++;
break;
case 1:
UpdateController();
if(!ReadButtons(res)) {
cmd[1] |= 0x80;
}
@@ -335,7 +356,22 @@ void PIF::EepromWrite(const u8* cmd, u8* res, const Mem& mem) {
}
void PIF::UpdateController() {
//joybusDevices[channel].controller = value;
inputManager.Update();
joybusDevices[channel].controller.a = inputMap.GetBool(BtnA);
joybusDevices[channel].controller.b = inputMap.GetBool(BtnB);
joybusDevices[channel].controller.z = inputMap.GetBool(BtnZ);
joybusDevices[channel].controller.l = inputMap.GetBool(BtnL);
joybusDevices[channel].controller.r = inputMap.GetBool(BtnR);
joybusDevices[channel].controller.dp_up = inputMap.GetBool(BtnDUp);
joybusDevices[channel].controller.dp_down = inputMap.GetBool(BtnDDown);
joybusDevices[channel].controller.dp_left = inputMap.GetBool(BtnDLeft);
joybusDevices[channel].controller.dp_right = inputMap.GetBool(BtnDRight);
joybusDevices[channel].controller.c_up = inputMap.GetBool(BtnCUp);
joybusDevices[channel].controller.c_down = inputMap.GetBool(BtnCDown);
joybusDevices[channel].controller.c_left = inputMap.GetBool(BtnCLeft);
joybusDevices[channel].controller.c_right = inputMap.GetBool(BtnCRight);
joybusDevices[channel].controller.joy_x = inputMap.GetBool(AxisLeft) ? -127 : inputMap.GetBool(AxisRight) ? 127 : 0;
joybusDevices[channel].controller.joy_y = inputMap.GetBool(AxisUp) ? -127 : inputMap.GetBool(AxisDown) ? 127 : 0;
if (joybusDevices[channel].controller.joy_reset) {
joybusDevices[channel].controller.start = false;

View File

@@ -1,6 +1,6 @@
#pragma once
#include <MemoryRegions.hpp>
#include <SDL_gamecontroller.h>
#include <gainput/gainput.h>
#include <GameDB.hpp>
#include <filesystem>
#include <mio/mmap.hpp>
@@ -104,6 +104,16 @@ enum CICType {
CIC_NUS_6106_7106
};
enum Button {
BtnA, BtnB, BtnZ, BtnL, BtnR, BtnStart,
BtnCUp, BtnCDown, BtnCLeft, BtnCRight,
BtnDUp, BtnDDown, BtnDLeft, BtnDRight,
};
enum Axis {
AxisLeft, AxisRight, AxisUp, AxisDown
};
struct PIF {
PIF() = default;
~PIF() = default;
@@ -125,7 +135,9 @@ struct PIF {
std::vector<u8> Serialize();
bool gamepadConnected = false, mempakOpen = false;
SDL_GameController* gamepad{};
gainput::InputManager inputManager;
gainput::InputMap inputMap{ inputManager };
gainput::DeviceId keyboardId, padId;
JoybusDevice joybusDevices[6]{};
u8 bootrom[PIF_BOOTROM_SIZE]{}, ram[PIF_RAM_SIZE]{};
mio::mmap_sink mempak, eeprom;

View File

@@ -10,6 +10,7 @@ EmuThread::EmuThread(std::unique_ptr<QtInstanceFactory>&& instance, std::unique_
LoadParallelRDP(core.cpu->mem.GetRDRAM());
while (true) {
if (!core.pause) {
core.cpu->mem.mmio.si.pif.UpdateController();
core.Run(0.5, 0.5);
if(core.render) {
UpdateScreenParallelRdp(core, core.cpu->mem.mmio.vi);

View File

@@ -13,8 +13,6 @@ KaizenQt::KaizenQt() noexcept : QWidget(nullptr) {
std::move(mainWindow->view.vulkanWidget->windowInfo),
mainWindow);
mainWindow->emuThread = emuThread;
ConnectMainWindowSignalsToSlots();
setAcceptDrops(true);

View File

@@ -12,7 +12,6 @@ public:
MainWindowController() noexcept;
Ui::MainWindow view;
EmuThread* emuThread = nullptr;
private:
void ConnectSignalsToSlots() noexcept;