summaryrefslogtreecommitdiffstats
path: root/gearboy/src/Input.h
diff options
context:
space:
mode:
authorLouis Burda <quent.burda@gmail.com>2022-06-02 15:28:40 +0200
committerLouis Burda <quent.burda@gmail.com>2022-06-02 15:28:40 +0200
commit5bc16063c29aa4d3d287ebd163ccdbcbf54c4f9f (patch)
treec131f947a37b3af2d14d41e9eda098bdec2d061c /gearboy/src/Input.h
parent78a5f810b22f0d8cafa05f638b0cb2e889824859 (diff)
downloadcscg2022-gearboy-master.tar.gz
cscg2022-gearboy-master.zip
Added submodule filesHEADmaster
Diffstat (limited to 'gearboy/src/Input.h')
-rw-r--r--gearboy/src/Input.h76
1 files changed, 76 insertions, 0 deletions
diff --git a/gearboy/src/Input.h b/gearboy/src/Input.h
new file mode 100644
index 00000000..c15b2711
--- /dev/null
+++ b/gearboy/src/Input.h
@@ -0,0 +1,76 @@
+/*
+ * Gearboy - Nintendo Game Boy Emulator
+ * Copyright (C) 2012 Ignacio Sanchez
+
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * any later version.
+
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see http://www.gnu.org/licenses/
+ *
+ */
+
+#ifndef INPUT_H
+#define INPUT_H
+
+#include "definitions.h"
+
+class Memory;
+class Processor;
+
+class Input
+{
+public:
+ Input(Memory* pMemory, Processor* pProcessor);
+ void Init();
+ void Reset();
+ void Tick(unsigned int clockCycles);
+ void KeyPressed(Gameboy_Keys key);
+ void KeyReleased(Gameboy_Keys key);
+ void Write(u8 value);
+ u8 Read();
+ void SaveState(std::ostream& stream);
+ void LoadState(std::istream& stream);
+
+private:
+ void Update();
+
+private:
+ Memory* m_pMemory;
+ Processor* m_pProcessor;
+ u8 m_JoypadState;
+ u8 m_P1;
+ int m_iInputCycles;
+};
+
+inline void Input::Tick(unsigned int clockCycles)
+{
+ m_iInputCycles += clockCycles;
+
+ // Joypad Poll Speed (64 Hz)
+ if (m_iInputCycles >= 65536)
+ {
+ m_iInputCycles -= 65536;
+ Update();
+ }
+}
+
+inline void Input::Write(u8 value)
+{
+ m_P1 = (m_P1 & 0xCF) | (value & 0x30);
+ Update();
+}
+
+inline u8 Input::Read()
+{
+ return m_P1;
+}
+
+#endif /* INPUT_H */