1
0
mirror of https://github.com/TomHarte/CLK.git synced 2024-10-07 06:57:15 +00:00

Ensured that resetting the horizontal timer affects phase.

This commit is contained in:
Thomas Harte 2016-05-22 16:29:53 -04:00
parent df93d7849d
commit 4c6d4d899d

View File

@ -378,6 +378,7 @@ unsigned int Machine::perform_bus_operation(CPU6502::BusOperation operation, uin
uint8_t returnValue = 0xff; uint8_t returnValue = 0xff;
unsigned int cycles_run_for = 1; unsigned int cycles_run_for = 1;
unsigned int additional_pixels = 0;
// this occurs as a feedback loop — the 2600 requests ready, then performs the cycles_run_for // this occurs as a feedback loop — the 2600 requests ready, then performs the cycles_run_for
// leap to the end of ready only once ready is signalled — because on a 6502 ready doesn't take // leap to the end of ready only once ready is signalled — because on a 6502 ready doesn't take
@ -386,9 +387,10 @@ unsigned int Machine::perform_bus_operation(CPU6502::BusOperation operation, uin
if(operation == CPU6502::BusOperation::Ready) { if(operation == CPU6502::BusOperation::Ready) {
unsigned int distance_to_end_of_ready = horizontalTimerPeriod - _horizontalTimer; unsigned int distance_to_end_of_ready = horizontalTimerPeriod - _horizontalTimer;
cycles_run_for = distance_to_end_of_ready / 3; cycles_run_for = distance_to_end_of_ready / 3;
additional_pixels = distance_to_end_of_ready % 3;
} }
output_pixels(cycles_run_for * 3); output_pixels(additional_pixels + cycles_run_for * 3);
// printf("/%d/", _horizontalTimer); // printf("/%d/", _horizontalTimer);
@ -471,8 +473,8 @@ unsigned int Machine::perform_bus_operation(CPU6502::BusOperation operation, uin
if(_horizontalTimer) set_ready_line(true); if(_horizontalTimer) set_ready_line(true);
break; break;
case 0x03: case 0x03:
_horizontalTimer = 0; // TODO: this should be delayed by four cycles, affecting phase; // Reset is delayed by four cycles.
// need to fix wait logic. _horizontalTimer = horizontalTimerPeriod - 4;
break; break;
case 0x04: case 0x04:
@ -699,7 +701,7 @@ unsigned int Machine::perform_bus_operation(CPU6502::BusOperation operation, uin
_piaTimerStatus |= 0xc0; _piaTimerStatus |= 0xc0;
} }
// output_pixels(cycles_run_for * 3); // output_pixels(additional_pixels + cycles_run_for * 3);
return cycles_run_for; return cycles_run_for;
} }