1
0
mirror of https://github.com/TomHarte/CLK.git synced 2025-04-02 14:31:20 +00:00

Made a very basic attempt at getting something that at least demarcates proper graphics output.

This commit is contained in:
Thomas Harte 2017-06-05 23:32:49 -04:00
parent 4983718df7
commit 2fbc7a2869
2 changed files with 33 additions and 8 deletions
Machines/ZX8081

@ -73,11 +73,11 @@ int Machine::perform_machine_cycle(const CPU::Z80::MachineCycle &cycle) {
}
void Machine::setup_output(float aspect_ratio) {
crt_.reset(new Outputs::CRT::CRT(207, 1, Outputs::CRT::DisplayType::PAL50, 1));
crt_.reset(new Outputs::CRT::CRT(210, 1, Outputs::CRT::DisplayType::PAL50, 1));
crt_->set_rgb_sampling_function(
"vec3 rgb_sample(usampler2D sampler, vec2 coordinate, vec2 icoordinate)"
"{"
"return vec3(1.0);"
"return vec3(float(texture(texID, coordinate).r) / 255.0);"
"}");
}
@ -134,6 +134,10 @@ void Machine::update_sync() {
bool is_sync = hsync_ || vsync_;
if(is_sync == is_sync_) return;
if(line_data_) {
output_data();
}
if(is_sync_) {
crt_->output_sync(cycles_since_display_update_);
} else {
@ -149,9 +153,29 @@ void Machine::output_level(unsigned int number_of_cycles) {
crt_->output_level(number_of_cycles);
}
void Machine::output_byte(uint8_t byte) {
if(!line_data_) {
}
// printf("%d\n", cycles_since_display_update_);
// cycles_since_display_update_ = 0;
void Machine::output_data() {
unsigned int data_length = (unsigned int)(line_data_pointer_ - line_data_) * 4;
crt_->output_data(data_length, 4);
line_data_pointer_ = line_data_ = nullptr;
cycles_since_display_update_ -= data_length;
}
void Machine::output_byte(uint8_t byte) {
if(line_data_) {
if(cycles_since_display_update_ > 4) {
output_data();
}
}
if(!line_data_) {
line_data_pointer_ = line_data_ = crt_->allocate_write_area(320);
}
if(line_data_) {
line_data_pointer_[0] = byte;
line_data_pointer_[1] = byte;
line_data_pointer_[2] = byte;
line_data_pointer_[3] = byte;
line_data_pointer_ += 4;
}
}

@ -52,7 +52,7 @@ class Machine:
bool vsync_, hsync_;
bool is_sync_;
uint8_t *line_data_;
uint8_t *line_data_, *line_data_pointer_;
unsigned int cycles_since_display_update_;
void update_display();
@ -61,6 +61,7 @@ class Machine:
void update_sync();
void output_level(unsigned int number_of_cycles);
void output_byte(uint8_t byte);
void output_data();
};
}