Let's try this
This commit is contained in:
@@ -1,8 +1,11 @@
|
|||||||
file(GLOB_RECURSE SOURCES *.cpp)
|
file(GLOB_RECURSE SOURCES *.cpp)
|
||||||
file(GLOB_RECURSE HEADERS *.hpp)
|
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)
|
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)
|
target_link_libraries(mmio PRIVATE gainput)
|
||||||
@@ -27,6 +27,28 @@ void PIF::Reset() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
mempakOpen = false;
|
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() {
|
void PIF::MaybeLoadMempak() {
|
||||||
@@ -186,7 +208,6 @@ void PIF::ProcessCommands(Mem &mem) {
|
|||||||
channel++;
|
channel++;
|
||||||
break;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
UpdateController();
|
|
||||||
if(!ReadButtons(res)) {
|
if(!ReadButtons(res)) {
|
||||||
cmd[1] |= 0x80;
|
cmd[1] |= 0x80;
|
||||||
}
|
}
|
||||||
@@ -335,7 +356,22 @@ void PIF::EepromWrite(const u8* cmd, u8* res, const Mem& mem) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void PIF::UpdateController() {
|
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) {
|
if (joybusDevices[channel].controller.joy_reset) {
|
||||||
joybusDevices[channel].controller.start = false;
|
joybusDevices[channel].controller.start = false;
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
#include <MemoryRegions.hpp>
|
#include <MemoryRegions.hpp>
|
||||||
#include <SDL_gamecontroller.h>
|
#include <gainput/gainput.h>
|
||||||
#include <GameDB.hpp>
|
#include <GameDB.hpp>
|
||||||
#include <filesystem>
|
#include <filesystem>
|
||||||
#include <mio/mmap.hpp>
|
#include <mio/mmap.hpp>
|
||||||
@@ -104,6 +104,16 @@ enum CICType {
|
|||||||
CIC_NUS_6106_7106
|
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 {
|
struct PIF {
|
||||||
PIF() = default;
|
PIF() = default;
|
||||||
~PIF() = default;
|
~PIF() = default;
|
||||||
@@ -125,7 +135,9 @@ struct PIF {
|
|||||||
std::vector<u8> Serialize();
|
std::vector<u8> Serialize();
|
||||||
|
|
||||||
bool gamepadConnected = false, mempakOpen = false;
|
bool gamepadConnected = false, mempakOpen = false;
|
||||||
SDL_GameController* gamepad{};
|
gainput::InputManager inputManager;
|
||||||
|
gainput::InputMap inputMap{ inputManager };
|
||||||
|
gainput::DeviceId keyboardId, padId;
|
||||||
JoybusDevice joybusDevices[6]{};
|
JoybusDevice joybusDevices[6]{};
|
||||||
u8 bootrom[PIF_BOOTROM_SIZE]{}, ram[PIF_RAM_SIZE]{};
|
u8 bootrom[PIF_BOOTROM_SIZE]{}, ram[PIF_RAM_SIZE]{};
|
||||||
mio::mmap_sink mempak, eeprom;
|
mio::mmap_sink mempak, eeprom;
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ EmuThread::EmuThread(std::unique_ptr<QtInstanceFactory>&& instance, std::unique_
|
|||||||
LoadParallelRDP(core.cpu->mem.GetRDRAM());
|
LoadParallelRDP(core.cpu->mem.GetRDRAM());
|
||||||
while (true) {
|
while (true) {
|
||||||
if (!core.pause) {
|
if (!core.pause) {
|
||||||
|
core.cpu->mem.mmio.si.pif.UpdateController();
|
||||||
core.Run(0.5, 0.5);
|
core.Run(0.5, 0.5);
|
||||||
if(core.render) {
|
if(core.render) {
|
||||||
UpdateScreenParallelRdp(core, core.cpu->mem.mmio.vi);
|
UpdateScreenParallelRdp(core, core.cpu->mem.mmio.vi);
|
||||||
|
|||||||
@@ -13,8 +13,6 @@ KaizenQt::KaizenQt() noexcept : QWidget(nullptr) {
|
|||||||
std::move(mainWindow->view.vulkanWidget->windowInfo),
|
std::move(mainWindow->view.vulkanWidget->windowInfo),
|
||||||
mainWindow);
|
mainWindow);
|
||||||
|
|
||||||
mainWindow->emuThread = emuThread;
|
|
||||||
|
|
||||||
ConnectMainWindowSignalsToSlots();
|
ConnectMainWindowSignalsToSlots();
|
||||||
|
|
||||||
setAcceptDrops(true);
|
setAcceptDrops(true);
|
||||||
|
|||||||
@@ -12,7 +12,6 @@ public:
|
|||||||
MainWindowController() noexcept;
|
MainWindowController() noexcept;
|
||||||
|
|
||||||
Ui::MainWindow view;
|
Ui::MainWindow view;
|
||||||
EmuThread* emuThread = nullptr;
|
|
||||||
private:
|
private:
|
||||||
void ConnectSignalsToSlots() noexcept;
|
void ConnectSignalsToSlots() noexcept;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user