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