1
0
mirror of https://github.com/TomHarte/CLK.git synced 2024-06-26 10:29:31 +00:00
CLK/Components/6850/6850.hpp

57 lines
1.2 KiB
C++
Raw Normal View History

2019-10-11 00:54:29 +00:00
//
// 6850.hpp
// Clock Signal
//
// Created by Thomas Harte on 10/10/2019.
// Copyright © 2019 Thomas Harte. All rights reserved.
//
#ifndef Motorola_ACIA_6850_hpp
#define Motorola_ACIA_6850_hpp
#include <cstdint>
#include "../../ClockReceiver/ClockReceiver.hpp"
namespace Motorola {
namespace ACIA {
class ACIA {
public:
2019-10-12 04:04:02 +00:00
/*!
Reads from the ACIA.
Bit 0 of the address is used as the ACIA's register select line
so even addresses select control/status registers, odd addresses
select transmit/receive data registers.
*/
2019-10-11 00:54:29 +00:00
uint8_t read(int address);
2019-10-12 04:04:02 +00:00
/*!
Writes to the ACIA.
Bit 0 of the address is used as the ACIA's register select line
so even addresses select control/status registers, odd addresses
select transmit/receive data registers.
*/
2019-10-11 00:54:29 +00:00
void write(int address, uint8_t value);
void run_for(HalfCycles);
2019-10-12 04:04:02 +00:00
private:
int divider_ = 1;
uint8_t status_ = 0x00;
enum class Parity {
Even, Odd, None
} parity_ = Parity::None;
int word_size_ = 7, stop_bits_ = 2;
bool receive_interrupt_enabled_ = false;
bool transmit_interrupt_enabled_ = false;
void set_ready_to_transmit(bool);
2019-10-11 00:54:29 +00:00
};
}
}
#endif /* Motorola_ACIA_6850_hpp */