mirror of
https://github.com/TomHarte/CLK.git
synced 2024-11-25 16:31:42 +00:00
Eject invalid specialisation.
This commit is contained in:
parent
d480f9eae2
commit
fa7fff86eb
@ -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.
|
||||||
|
if constexpr (vertical_phase == Phase::Border) {
|
||||||
const auto phase = horizontal_state_.phase(Phase::Border);
|
const auto phase = horizontal_state_.phase(Phase::Border);
|
||||||
if(phase != phase_ || (phase_ == Phase::Border && border_colour_ != phased_border_colour_)) {
|
if(phase != phase_ || (phase_ == Phase::Border && border_colour_ != phased_border_colour_)) {
|
||||||
set_phase(phase);
|
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
|
||||||
|
Loading…
Reference in New Issue
Block a user