1
0
mirror of https://github.com/TomHarte/CLK.git synced 2024-11-26 23:52:26 +00:00

Merge branch '8255Modes'

This commit is contained in:
Thomas Harte 2017-08-08 07:44:56 -04:00
commit dbf9927caf

View File

@ -18,12 +18,15 @@ class PortHandler {
uint8_t get_value(int port) { return 0xff; } uint8_t get_value(int port) { return 0xff; }
}; };
// TODO: most of the implementation below. Right now it just blindly passes data in all directions, // TODO: Modes 1 and 2.
// ignoring operation mode. But at least it establishes proper ownership and hand-off of decision making.
template <class T> class i8255 { template <class T> class i8255 {
public: public:
i8255(T &port_handler) : control_(0), outputs_{0, 0, 0}, port_handler_(port_handler) {} i8255(T &port_handler) : control_(0), outputs_{0, 0, 0}, port_handler_(port_handler) {}
/*!
Stores the value @c value to the register at @c address. If this causes a change in 8255 output
then the PortHandler will be informed.
*/
void set_register(int address, uint8_t value) { void set_register(int address, uint8_t value) {
switch(address & 3) { switch(address & 3) {
case 0: case 0:
@ -53,6 +56,10 @@ template <class T> class i8255 {
} }
} }
/*!
Obtains the current value for the register at @c address. If this provides a reading
of input then the PortHandler will be queried.
*/
uint8_t get_register(int address) { uint8_t get_register(int address) {
switch(address & 3) { switch(address & 3) {
case 0: return (control_ & 0x10) ? port_handler_.get_value(0) : outputs_[0]; case 0: return (control_ & 0x10) ? port_handler_.get_value(0) : outputs_[0];