164 lines
3.8 KiB
C++
164 lines
3.8 KiB
C++
/*
|
|
DingusPPC - The Experimental PowerPC Macintosh emulator
|
|
Copyright (C) 2018-23 divingkatae and maximum
|
|
(theweirdo) spatium
|
|
|
|
(Contact divingkatae#1017 or powermax#2286 on Discord for more info)
|
|
|
|
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
|
|
(at your option) 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 <https://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
/** @file Apple Desktop Bus Keyboard definitions. */
|
|
|
|
#ifndef ADB_KEYBOARD_H
|
|
#define ADB_KEYBOARD_H
|
|
|
|
#include <core/hostevents.h>
|
|
#include <devices/common/adb/adbdevice.h>
|
|
#include <devices/common/hwcomponent.h>
|
|
|
|
#include <SDL.h>
|
|
|
|
#include <cinttypes>
|
|
#include <memory>
|
|
#include <string>
|
|
|
|
enum : uint8_t {
|
|
ADB_keycode_a,
|
|
ADB_keycode_s,
|
|
ADB_keycode_d,
|
|
ADB_keycode_f,
|
|
ADB_keycode_h,
|
|
ADB_keycode_g,
|
|
ADB_keycode_z,
|
|
ADB_keycode_x,
|
|
ADB_keycode_c,
|
|
ADB_keycode_v,
|
|
ADB_keycode_int1,
|
|
ADB_keycode_b,
|
|
ADB_keycode_q,
|
|
ADB_keycode_w,
|
|
ADB_keycode_e,
|
|
ADB_keycode_r,
|
|
ADB_keycode_y,
|
|
ADB_keycode_t,
|
|
ADB_keycode_1,
|
|
ADB_keycode_2,
|
|
ADB_keycode_3,
|
|
ADB_keycode_4,
|
|
ADB_keycode_6,
|
|
ADB_keycode_5,
|
|
ADB_keycode_eq,
|
|
ADB_keycode_9,
|
|
ADB_keycode_7,
|
|
ADB_keycode_min,
|
|
ADB_keycode_8,
|
|
ADB_keycode_0,
|
|
ADB_keycode_rb,
|
|
ADB_keycode_o,
|
|
ADB_keycode_u,
|
|
ADB_keycode_lb,
|
|
ADB_keycode_i,
|
|
ADB_keycode_p,
|
|
ADB_keycode_ret,
|
|
ADB_keycode_l,
|
|
ADB_keycode_j,
|
|
ADB_keycode_quote,
|
|
ADB_keycode_k,
|
|
ADB_keycode_semi,
|
|
ADB_keycode_bksl,
|
|
ADB_keycode_comma,
|
|
ADB_keycode_slsh,
|
|
ADB_keycode_n,
|
|
ADB_keycode_m,
|
|
ADB_keycode_per,
|
|
ADB_keycode_tab,
|
|
ADB_keycode_space,
|
|
ADB_keycode_bkqt,
|
|
ADB_keycode_del,
|
|
ADB_keycode_bunk_34,
|
|
ADB_keycode_esc,
|
|
ADB_keycode_ctrl,
|
|
ADB_keycode_appl,
|
|
ADB_keycode_shift,
|
|
ADB_keycode_caps,
|
|
ADB_keycode_opt,
|
|
ADB_keycode_left,
|
|
ADB_keycode_right,
|
|
ADB_keycode_down,
|
|
ADB_keycode_up,
|
|
ADB_keycode_bunk_3f,
|
|
ADB_keycode_bunk_40,
|
|
ADB_keycode_kp_per,
|
|
ADB_keycode_bunk_42,
|
|
ADB_keycode_kp_mul,
|
|
ADB_keycode_bunk_44,
|
|
ADB_keycode_kp_plus,
|
|
ADB_keycode_bunk_46,
|
|
ADB_keycode_kp_clr,
|
|
ADB_keycode_bunk_48,
|
|
ADB_keycode_bunk_49,
|
|
ADB_keycode_bunk_4a,
|
|
ADB_keycode_kp_div,
|
|
ADB_keycode_kp_enter,
|
|
ADB_keycode_bunk_4d,
|
|
ADB_keycode_kp_minus,
|
|
ADB_keycode_bunk_4f,
|
|
ADB_keycode_bunk_50,
|
|
ADB_keycode_bunk_51,
|
|
ADB_keycode_kp_0,
|
|
ADB_keycode_kp_1,
|
|
ADB_keycode_kp_2,
|
|
ADB_keycode_kp_3,
|
|
ADB_keycode_kp_4,
|
|
ADB_keycode_kp_5,
|
|
ADB_keycode_kp_6,
|
|
ADB_keycode_kp_7,
|
|
ADB_keycode_bunk_5a,
|
|
ADB_keycode_kp_8,
|
|
ADB_keycode_kp_9,
|
|
};
|
|
|
|
class AdbKeyboard : public AdbDevice {
|
|
public:
|
|
AdbKeyboard(std::string name);
|
|
~AdbKeyboard() = default;
|
|
|
|
static std::unique_ptr<HWComponent> create() {
|
|
return std::unique_ptr<AdbKeyboard>(new AdbKeyboard("ADB-KEYBOARD"));
|
|
}
|
|
|
|
uint8_t adb_translate(SDL_Keycode input);
|
|
|
|
void reset() override;
|
|
void event_handler(const KeyboardEvent& event);
|
|
|
|
bool get_register_0() override;
|
|
bool get_register_2() override;
|
|
void set_register_2() override;
|
|
void set_register_3() override;
|
|
|
|
|
|
private:
|
|
uint32_t flags = 0;
|
|
uint32_t key_code = 0;
|
|
uint16_t led_lights = 0;
|
|
uint8_t key_buffer[16] = {0xFF};
|
|
uint8_t key_state[128] = {0xFF};
|
|
uint8_t adb_code = 0;
|
|
bool key_pressed = false;
|
|
};
|
|
|
|
#endif // ADB_KEYBOARD_H
|