1
0
mirror of https://github.com/TomHarte/CLK.git synced 2024-11-25 16:31:42 +00:00
CLK/Machines/Apple/AppleIIgs/ADB.hpp

86 lines
1.7 KiB
C++
Raw Normal View History

2020-11-01 01:00:15 +00:00
//
// ADB.hpp
// Clock Signal
//
// Created by Thomas Harte on 31/10/2020.
// Copyright © 2020 Thomas Harte. All rights reserved.
//
#pragma once
2020-11-01 01:00:15 +00:00
#include <cstdint>
#include <vector>
#include "../../../InstructionSets/M50740/Executor.hpp"
2021-02-11 02:24:31 +00:00
#include "../ADB/Bus.hpp"
#include "../ADB/Mouse.hpp"
2021-02-14 04:16:45 +00:00
#include "../ADB/Keyboard.hpp"
2020-11-01 01:00:15 +00:00
2023-05-10 21:02:18 +00:00
namespace Apple::IIgs::ADB {
2020-11-01 01:00:15 +00:00
class GLU: public InstructionSet::M50740::PortHandler {
2020-11-01 01:00:15 +00:00
public:
GLU();
2020-11-01 01:00:15 +00:00
uint8_t get_keyboard_data();
uint8_t get_mouse_data();
uint8_t get_modifier_status();
uint8_t get_any_key_down();
2020-11-01 01:00:15 +00:00
uint8_t get_data();
uint8_t get_status();
void set_command(uint8_t);
void set_status(uint8_t);
void clear_key_strobe();
void set_microcontroller_rom(const std::vector<uint8_t> &rom);
void run_for(Cycles cycles);
2021-02-15 02:15:31 +00:00
bool get_command_button() const;
bool get_option_button() const;
void set_vertical_blank(bool);
2021-02-16 01:49:16 +00:00
bool get_vertical_blank() {
return vertical_blank_;
}
2021-02-15 20:00:12 +00:00
Apple::ADB::Keyboard &keyboard() {
return keyboard_;
}
2021-02-16 01:49:16 +00:00
Inputs::Mouse &get_mouse() {
return mouse_;
}
2021-02-15 20:00:12 +00:00
private:
InstructionSet::M50740::Executor executor_;
void run_ports_for(Cycles) override;
void set_port_output(int port, uint8_t value) override;
uint8_t get_port_input(int port) override;
uint8_t registers_[16]{};
uint8_t register_address_;
uint8_t register_latch_ = 0xff;
bool register_strobe_ = false;
uint8_t status_ = 0x00;
2021-02-11 02:24:31 +00:00
Apple::ADB::Bus bus_;
size_t controller_id_;
2021-02-15 02:15:31 +00:00
uint8_t modifier_state_ = 0;
2021-02-16 01:49:16 +00:00
bool vertical_blank_ = false;
int visible_mouse_register_ = 2;
2021-02-14 04:16:45 +00:00
// For now, attach only a keyboard and mouse.
Apple::ADB::Mouse mouse_;
2021-02-14 04:16:45 +00:00
Apple::ADB::Keyboard keyboard_;
2020-11-01 01:00:15 +00:00
};
}