Let's try this
This commit is contained in:
@@ -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)
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -13,8 +13,6 @@ KaizenQt::KaizenQt() noexcept : QWidget(nullptr) {
|
||||
std::move(mainWindow->view.vulkanWidget->windowInfo),
|
||||
mainWindow);
|
||||
|
||||
mainWindow->emuThread = emuThread;
|
||||
|
||||
ConnectMainWindowSignalsToSlots();
|
||||
|
||||
setAcceptDrops(true);
|
||||
|
||||
@@ -12,7 +12,6 @@ public:
|
||||
MainWindowController() noexcept;
|
||||
|
||||
Ui::MainWindow view;
|
||||
EmuThread* emuThread = nullptr;
|
||||
private:
|
||||
void ConnectSignalsToSlots() noexcept;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user