1
0
mirror of https://github.com/TomHarte/CLK.git synced 2024-08-01 05:29:09 +00:00
CLK/Machines/Enterprise/Nick.hpp

52 lines
1.1 KiB
C++
Raw Normal View History

2021-06-15 02:19:25 +00:00
//
// Nick.hpp
// Clock Signal
//
// Created by Thomas Harte on 14/06/2021.
// Copyright © 2021 Thomas Harte. All rights reserved.
//
#ifndef Nick_hpp
#define Nick_hpp
#include <cstdint>
#include "../../ClockReceiver/ClockReceiver.hpp"
2021-06-15 03:11:48 +00:00
#include "../../Outputs/CRT/CRT.hpp"
2021-06-15 02:19:25 +00:00
namespace Enterprise {
class Nick {
public:
Nick(const uint8_t *ram);
2021-06-15 03:11:48 +00:00
2021-06-15 02:19:25 +00:00
void write(uint16_t address, uint8_t value);
uint8_t read(uint16_t address);
void run_for(HalfCycles);
2021-06-15 03:11:48 +00:00
void set_scan_target(Outputs::Display::ScanTarget *scan_target);
Outputs::Display::ScanStatus get_scaled_scan_status() const;
private:
Outputs::CRT::CRT crt_;
const uint8_t *const ram_;
// CPU-provided state.
uint8_t line_parameter_control_ = 0xc0;
uint16_t line_parameter_base_ = 0x0000;
// Ephemerals, related to current video position.
int horizontal_counter_ = 0;
uint16_t line_parameter_pointer_ = 0x0000;
uint8_t line_parameters_[16];
bool should_reload_line_parameters_ = false;
// Current mode line parameters.
uint8_t lines_remaining_ = 0x00;
2021-06-15 02:19:25 +00:00
};
}
#endif /* Nick_hpp */