mirror of
https://github.com/TomHarte/CLK.git
synced 2024-08-24 23:29:00 +00:00
Retrenches temporarily to full 8bpp output; introduces extra half a colour cycle of pause.
This commit is contained in:
parent
cd26f11818
commit
335c633884
@ -18,8 +18,11 @@ Video::Video() :
|
|||||||
"float composite_sample(usampler2D sampler, vec2 coordinate, vec2 icoordinate, float phase, float amplitude)"
|
"float composite_sample(usampler2D sampler, vec2 coordinate, vec2 icoordinate, float phase, float amplitude)"
|
||||||
"{"
|
"{"
|
||||||
"uint texValue = texture(sampler, coordinate).r;"
|
"uint texValue = texture(sampler, coordinate).r;"
|
||||||
"texValue <<= int(icoordinate.x * 7) % 6;"
|
"texValue <<= int(icoordinate.x * 8) & 7;"
|
||||||
"return float(texValue & 128u);"
|
"return float(texValue & 128u);"
|
||||||
|
// "uint texValue = texture(sampler, coordinate).r;"
|
||||||
|
// "texValue <<= uint(icoordinate.x * 7.0) % 7u;"
|
||||||
|
// "return float(texValue & 128u);"
|
||||||
"}");
|
"}");
|
||||||
|
|
||||||
// Show only the centre 75% of the TV frame.
|
// Show only the centre 75% of the TV frame.
|
||||||
@ -50,6 +53,9 @@ void Video::run_for(const Cycles cycles) {
|
|||||||
} else {
|
} else {
|
||||||
const int ending_column = column_ + cycles_this_line;
|
const int ending_column = column_ + cycles_this_line;
|
||||||
|
|
||||||
|
// The first 40 columns are submitted to the CRT only upon completion;
|
||||||
|
// they'll be either graphics or blank, depending on which side we are
|
||||||
|
// of line 192.
|
||||||
if(column_ < 40) {
|
if(column_ < 40) {
|
||||||
if(row_ < 192) {
|
if(row_ < 192) {
|
||||||
if(!column_) {
|
if(!column_) {
|
||||||
@ -60,7 +66,7 @@ void Video::run_for(const Cycles cycles) {
|
|||||||
|
|
||||||
if(ending_column >= 40) {
|
if(ending_column >= 40) {
|
||||||
for(int c = 0; c < 40; ++c) {
|
for(int c = 0; c < 40; ++c) {
|
||||||
pixel_pointer_[c] = 0xaa;
|
pixel_pointer_[c] = static_cast<uint8_t>((c * 6) ^ row_);
|
||||||
}
|
}
|
||||||
crt_->output_data(280, 7);
|
crt_->output_data(280, 7);
|
||||||
}
|
}
|
||||||
@ -71,6 +77,11 @@ void Video::run_for(const Cycles cycles) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
The left border, sync, right border pattern doesn't depend on whether
|
||||||
|
there were pixels this row and is output as soon as it is known.
|
||||||
|
*/
|
||||||
|
|
||||||
const int first_blank_start = std::max(40, column_);
|
const int first_blank_start = std::max(40, column_);
|
||||||
const int first_blank_end = std::min(first_sync_column, ending_column);
|
const int first_blank_end = std::min(first_sync_column, ending_column);
|
||||||
if(first_blank_end > first_blank_start) {
|
if(first_blank_end > first_blank_start) {
|
||||||
@ -95,6 +106,10 @@ void Video::run_for(const Cycles cycles) {
|
|||||||
column_ = (column_ + cycles_this_line) % 65;
|
column_ = (column_ + cycles_this_line) % 65;
|
||||||
if(!column_) {
|
if(!column_) {
|
||||||
row_ = (row_ + 1) % 262;
|
row_ = (row_ + 1) % 262;
|
||||||
|
|
||||||
|
// Add an extra half a colour cycle of blank; this isn't counted in the run_for
|
||||||
|
// count explicitly but is promised.
|
||||||
|
crt_->output_blank(1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user