diff --git a/Source/Core/Core/CMakeLists.txt b/Source/Core/Core/CMakeLists.txt
index 788269a729..ab0eff73f3 100644
--- a/Source/Core/Core/CMakeLists.txt
+++ b/Source/Core/Core/CMakeLists.txt
@@ -97,6 +97,8 @@ set(SRCS ActionReplay.cpp
HW/EXI_DeviceIPL.cpp
HW/EXI_DeviceMemoryCard.cpp
HW/EXI_DeviceMic.cpp
+ HW/GCKeyboard.cpp
+ HW/GCKeyboardEmu.cpp
HW/GCMemcard.cpp
HW/GCMemcardDirectory.cpp
HW/GCMemcardRaw.cpp
@@ -116,6 +118,7 @@ set(SRCS ActionReplay.cpp
HW/SI_DeviceGBA.cpp
HW/SI_DeviceGCController.cpp
HW/SI_DeviceGCSteeringWheel.cpp
+ HW/SI_DeviceKeyboard.cpp
HW/Sram.cpp
HW/StreamADPCM.cpp
HW/SystemTimers.cpp
diff --git a/Source/Core/Core/Core.cpp b/Source/Core/Core/Core.cpp
index 4756659b36..9d5c2db2b2 100644
--- a/Source/Core/Core/Core.cpp
+++ b/Source/Core/Core/Core.cpp
@@ -39,6 +39,7 @@
#include "Core/HW/CPU.h"
#include "Core/HW/DSP.h"
#include "Core/HW/EXI.h"
+#include "Core/HW/GCKeyboard.h"
#include "Core/HW/GCPad.h"
#include "Core/HW/GPFifo.h"
#include "Core/HW/HW.h"
@@ -360,7 +361,14 @@ void EmuThread()
return;
}
- Pad::Initialize(s_window_handle);
+ for (unsigned int port_num = 0; port_num < 4; port_num++)
+ {
+ if (SConfig::GetInstance().m_SIDevice[port_num] == SIDEVICE_GC_KEYBOARD)
+ Keyboard::Initialize(s_window_handle);
+ else
+ Pad::Initialize(s_window_handle);
+ }
+
// Load and Init Wiimotes - only if we are booting in Wii mode
if (core_parameter.bWii)
{
@@ -475,7 +483,13 @@ void EmuThread()
INFO_LOG(CONSOLE, "%s", StopMessage(false, "Shutting down HW").c_str());
HW::Shutdown();
INFO_LOG(CONSOLE, "%s", StopMessage(false, "HW shutdown").c_str());
- Pad::Shutdown();
+ for (unsigned int port_num = 0; port_num < 4; port_num++)
+ {
+ if (SConfig::GetInstance().m_SIDevice[port_num] == SIDEVICE_GC_KEYBOARD)
+ Keyboard::Shutdown();
+ else
+ Pad::Shutdown();
+ }
Wiimote::Shutdown();
g_video_backend->Shutdown();
AudioCommon::ShutdownSoundStream();
diff --git a/Source/Core/Core/Core.vcxproj b/Source/Core/Core/Core.vcxproj
index ae775bcc5a..bf34fbabbe 100644
--- a/Source/Core/Core/Core.vcxproj
+++ b/Source/Core/Core/Core.vcxproj
@@ -128,6 +128,8 @@
+
+
@@ -147,6 +149,7 @@
+