Input will come next
This commit is contained in:
@@ -333,41 +333,8 @@ void PIF::EepromWrite(const u8* cmd, u8* res, const Mem& mem) {
|
||||
}
|
||||
}
|
||||
|
||||
void PIF::UpdateController(u32 value) {
|
||||
bool A = (value >> 31) & 1;
|
||||
bool B = (value >> 30) & 1;
|
||||
bool Z = (value >> 29) & 1;
|
||||
bool START = (value >> 28) & 1;
|
||||
bool DUP = (value >> 27) & 1;
|
||||
bool DDOWN = (value >> 26) & 1;
|
||||
bool DLEFT = (value >> 25) & 1;
|
||||
bool DRIGHT = (value >> 24) & 1;
|
||||
bool L = (value >> 21) & 1;
|
||||
bool R = (value >> 20) & 1;
|
||||
bool CUP = (value >> 19) & 1;
|
||||
bool CDOWN = (value >> 18) & 1;
|
||||
bool CLEFT = (value >> 17) & 1;
|
||||
bool CRIGHT = (value >> 16) & 1;
|
||||
s8 x = (s8(value >> 8)) & 0xFF;
|
||||
s8 y = (s8(value)) & 0xFF;
|
||||
|
||||
joybusDevices[channel].controller.a = A;
|
||||
joybusDevices[channel].controller.b = B;
|
||||
joybusDevices[channel].controller.z = Z;
|
||||
joybusDevices[channel].controller.start = START;
|
||||
joybusDevices[channel].controller.dp_up = DUP;
|
||||
joybusDevices[channel].controller.dp_down = DDOWN;
|
||||
joybusDevices[channel].controller.dp_left = DLEFT;
|
||||
joybusDevices[channel].controller.dp_right = DRIGHT;
|
||||
joybusDevices[channel].controller.joy_reset = L && R && START;
|
||||
joybusDevices[channel].controller.l = L;
|
||||
joybusDevices[channel].controller.r = R;
|
||||
joybusDevices[channel].controller.c_up = CUP;
|
||||
joybusDevices[channel].controller.c_down = CDOWN;
|
||||
joybusDevices[channel].controller.c_left = CLEFT;
|
||||
joybusDevices[channel].controller.c_right = CRIGHT;
|
||||
joybusDevices[channel].controller.joy_x = x;
|
||||
joybusDevices[channel].controller.joy_y = -y;
|
||||
void PIF::UpdateController(Controller value) {
|
||||
joybusDevices[channel].controller = value;
|
||||
|
||||
if (joybusDevices[channel].controller.joy_reset) {
|
||||
joybusDevices[channel].controller.start = false;
|
||||
|
||||
@@ -115,7 +115,7 @@ struct PIF {
|
||||
void CICChallenge();
|
||||
static void ExecutePIF(Mem& mem, Registers& regs);
|
||||
static void DoPIFHLE(Mem& mem, Registers& regs, bool pal, CICType cicType);
|
||||
void UpdateController(u32);
|
||||
void UpdateController(Controller);
|
||||
bool ReadButtons(u8*) const;
|
||||
void ControllerID(u8*) const;
|
||||
void MempakRead(const u8*, u8*);
|
||||
|
||||
@@ -13,12 +13,11 @@ KaizenQt::KaizenQt() noexcept : QWidget(nullptr) {
|
||||
std::move(mainWindow->view.vulkanWidget->windowInfo),
|
||||
mainWindow);
|
||||
|
||||
mainWindow->emuThread = emuThread;
|
||||
|
||||
ConnectMainWindowSignalsToSlots();
|
||||
|
||||
grabKeyboard();
|
||||
setAcceptDrops(true);
|
||||
setFocusPolicy(Qt::FocusPolicy::StrongFocus);
|
||||
setFocus();
|
||||
|
||||
mainWindow->show();
|
||||
}
|
||||
@@ -47,29 +46,4 @@ void KaizenQt::dropEvent(QDropEvent* event) {
|
||||
void KaizenQt::LoadROM(const QString& file_name) noexcept {
|
||||
emuThread->start();
|
||||
emuThread->core.LoadROM(file_name.toStdString());
|
||||
}
|
||||
|
||||
void KaizenQt::keyPressEvent(QKeyEvent* e) {
|
||||
u32 data = 0;
|
||||
emuThread->core.cpu->mem.mmio.si.pif.UpdateController(data);
|
||||
if (e->key() == Qt::Key::Key_X) data |= (1 << 31);
|
||||
if (e->key() == Qt::Key::Key_C) data |= (1 << 30);
|
||||
if (e->key() == Qt::Key::Key_Z) data |= (1 << 29);
|
||||
if (e->key() == Qt::Key::Key_Enter
|
||||
|| e->key() == Qt::Key::Key_Return) data |= (1 << 28);
|
||||
if (e->key() == Qt::Key::Key_I) data |= (1 << 27);
|
||||
if (e->key() == Qt::Key::Key_K) data |= (1 << 26);
|
||||
if (e->key() == Qt::Key::Key_J) data |= (1 << 25);
|
||||
if (e->key() == Qt::Key::Key_L) data |= (1 << 24);
|
||||
if (e->key() == Qt::Key::Key_A) data |= (1 << 21);
|
||||
if (e->key() == Qt::Key::Key_S) data |= (1 << 20);
|
||||
if (e->key() == Qt::Key::Key_8) data |= (1 << 19);
|
||||
if (e->key() == Qt::Key::Key_2) data |= (1 << 18);
|
||||
if (e->key() == Qt::Key::Key_4) data |= (1 << 17);
|
||||
if (e->key() == Qt::Key::Key_6) data |= (1 << 16);
|
||||
if (e->key() == Qt::Key::Key_Up) data |= 127;
|
||||
if (e->key() == Qt::Key::Key_Down) data |= -127;
|
||||
if (e->key() == Qt::Key::Key_Left) data |= u32(-127) << 8;
|
||||
if (e->key() == Qt::Key::Key_Right) data |= u32(127) << 8;
|
||||
emuThread->core.cpu->mem.mmio.si.pif.UpdateController(data);
|
||||
}
|
||||
@@ -29,8 +29,6 @@ public:
|
||||
void LoadROM(const QString& path) noexcept;
|
||||
void dropEvent(QDropEvent*) override;
|
||||
void dragEnterEvent(QDragEnterEvent*) override;
|
||||
protected:
|
||||
void keyPressEvent(QKeyEvent* event) override;
|
||||
private:
|
||||
void ConnectMainWindowSignalsToSlots() noexcept;
|
||||
MainWindowController* mainWindow;
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
#include <QFileDialog>
|
||||
#include <QMessageBox>
|
||||
#include <QKeyEvent>
|
||||
#include <MainWindow.hpp>
|
||||
|
||||
MainWindowController::MainWindowController() noexcept {
|
||||
@@ -9,6 +10,8 @@ MainWindowController::MainWindowController() noexcept {
|
||||
view.actionStop->setDisabled(true);
|
||||
view.vulkanWidget->hide();
|
||||
ConnectSignalsToSlots();
|
||||
setFocusPolicy(Qt::FocusPolicy::StrongFocus);
|
||||
setFocus();
|
||||
}
|
||||
|
||||
void MainWindowController::ConnectSignalsToSlots() noexcept {
|
||||
@@ -54,4 +57,33 @@ void MainWindowController::ConnectSignalsToSlots() noexcept {
|
||||
"Kaizen is licensed under the BSD 3-clause license.\n"
|
||||
"Nintendo 64 is a registered trademarks of Nintendo Co., Ltd."));
|
||||
});
|
||||
}
|
||||
|
||||
void MainWindowController::keyPressEvent(QKeyEvent* e) {
|
||||
n64::Controller data{};
|
||||
|
||||
data.z = (e->key() == Qt::Key::Key_Z);
|
||||
data.a = (e->key() == Qt::Key::Key_X);
|
||||
data.b = (e->key() == Qt::Key::Key_C);
|
||||
data.start = e->key() == Qt::Key::Key_Enter || e->key() == Qt::Key::Key_Return;
|
||||
data.dp_up = (e->key() == Qt::Key::Key_I);
|
||||
data.dp_down = (e->key() == Qt::Key::Key_K);
|
||||
data.dp_left = (e->key() == Qt::Key::Key_J);
|
||||
data.dp_right = (e->key() == Qt::Key::Key_L);
|
||||
data.l = (e->key() == Qt::Key::Key_A);
|
||||
data.r = (e->key() == Qt::Key::Key_S);
|
||||
data.c_up = (e->key() == Qt::Key::Key_8);
|
||||
data.c_down = (e->key() == Qt::Key::Key_2);
|
||||
data.c_left = (e->key() == Qt::Key::Key_4);
|
||||
data.c_right = (e->key() == Qt::Key::Key_6);
|
||||
data.joy_y = (e->key() == Qt::Key::Key_Up) ? 127 : 0;
|
||||
data.joy_y = (e->key() == Qt::Key::Key_Down) ? -127 : 0;
|
||||
data.joy_x = (e->key() == Qt::Key::Key_Left) ? -127 : 0;
|
||||
data.joy_x = (e->key() == Qt::Key::Key_Right) ? 127 : 0;
|
||||
|
||||
emuThread->core.pause = true;
|
||||
emuThread->core.cpu->mem.mmio.si.pif.UpdateController(data);
|
||||
emuThread->core.pause = false;
|
||||
QWidget::keyPressEvent(e);
|
||||
setFocus();
|
||||
}
|
||||
@@ -12,8 +12,10 @@ public:
|
||||
MainWindowController() noexcept;
|
||||
|
||||
Ui::MainWindow view;
|
||||
EmuThread* emuThread = nullptr;
|
||||
private:
|
||||
void ConnectSignalsToSlots() noexcept;
|
||||
void keyPressEvent(QKeyEvent* event) override;
|
||||
|
||||
bool textPauseToggle = false;
|
||||
|
||||
|
||||
@@ -53,12 +53,12 @@ public:
|
||||
return vec;
|
||||
}
|
||||
|
||||
VkSurfaceKHR create_surface(VkInstance instance, VkPhysicalDevice) override {
|
||||
VkSurfaceKHR create_surface(VkInstance, VkPhysicalDevice) override {
|
||||
window->show();
|
||||
return QVulkanInstance::surfaceForWindow(window);
|
||||
}
|
||||
|
||||
void destroy_surface(VkInstance instance, VkSurfaceKHR surface) override { }
|
||||
void destroy_surface(VkInstance, VkSurfaceKHR) override { }
|
||||
|
||||
uint32_t get_surface_width() override {
|
||||
return 640;
|
||||
|
||||
Reference in New Issue
Block a user