1
0
mirror of https://github.com/TomHarte/CLK.git synced 2024-06-09 17:29:36 +00:00

Eject invalid specialisation.

This commit is contained in:
Thomas Harte 2024-04-28 22:20:26 -04:00
parent d480f9eae2
commit fa7fff86eb

View File

@ -12,6 +12,7 @@
#include "../../../Outputs/CRT/CRT.hpp" #include "../../../Outputs/CRT/CRT.hpp"
#include <array> #include <array>
#include <cassert>
#include <cstdint> #include <cstdint>
#include <cstring> #include <cstring>
@ -92,8 +93,6 @@ struct Video {
case 0xbc: vertical_timing_.cursor_end = timing_value(value); break; case 0xbc: vertical_timing_.cursor_end = timing_value(value); break;
case 0xe0: case 0xe0:
logger.error().append("TODO: video control: %08x", value);
// Set pixel rate. This is the value that a 24Mhz clock should be divided // Set pixel rate. This is the value that a 24Mhz clock should be divided
// by to get half the pixel rate. // by to get half the pixel rate.
switch(value & 0b11) { switch(value & 0b11) {
@ -387,6 +386,11 @@ private:
uint32_t clock_divider_ = 0; uint32_t clock_divider_ = 0;
Depth colour_depth_; Depth colour_depth_;
// A temporary buffer that holds video contents during the latency
// period between their generation and their output.
uint8_t bitmap_queue_[8];
int bitmap_queue_pointer_ = 0;
void set_clock_divider(uint32_t divider) { void set_clock_divider(uint32_t divider) {
if(divider == clock_divider_) { if(divider == clock_divider_) {
return; return;
@ -449,17 +453,19 @@ private:
} }
// Border lines: ignore display phases; also reset the border phase if the colour changes. // Border lines: ignore display phases; also reset the border phase if the colour changes.
const auto phase = horizontal_state_.phase(Phase::Border); if constexpr (vertical_phase == Phase::Border) {
if(phase != phase_ || (phase_ == Phase::Border && border_colour_ != phased_border_colour_)) { const auto phase = horizontal_state_.phase(Phase::Border);
set_phase(phase); if(phase != phase_ || (phase_ == Phase::Border && border_colour_ != phased_border_colour_)) {
set_phase(phase);
}
return;
} }
}
uint8_t bitmap_queue_[8]; if constexpr (vertical_phase != Phase::Display) {
int bitmap_queue_pointer_ = 0; // Should be impossible.
assert(false);
}
template <>
void tick_horizontal<Phase::Display>() {
// Some timing facts, to explain what would otherwise be magic constants. // Some timing facts, to explain what would otherwise be magic constants.
static constexpr int CursorDelay = 5; // The cursor will appear six pixels after its programmed trigger point. static constexpr int CursorDelay = 5; // The cursor will appear six pixels after its programmed trigger point.
// ... BUT! Border and display are currently a pixel early. So move the // ... BUT! Border and display are currently a pixel early. So move the