1
0
mirror of https://github.com/TomHarte/CLK.git synced 2025-02-18 16:30:29 +00:00

Fixed: was off by one on pixels, allowing four extra pixel output cycles per line.

This commit is contained in:
Thomas Harte 2016-05-17 19:02:32 -04:00
parent c96674b341
commit ad6f405483

View File

@ -96,6 +96,7 @@ void Machine::update_upcoming_event()
_upcomingEvents[upcomingEventsPointerPlus4].updates |= Event::Action::Ball; _upcomingEvents[upcomingEventsPointerPlus4].updates |= Event::Action::Ball;
} }
_objectCounter[4] = (_objectCounter[4] + 1)%160; _objectCounter[4] = (_objectCounter[4] + 1)%160;
// printf("-%d- ", _objectCounter[4]);
// the players and missles become visible only upon overflow to zero, so schedule for // the players and missles become visible only upon overflow to zero, so schedule for
// 5/6 clocks ahead from 159 // 5/6 clocks ahead from 159
@ -219,8 +220,9 @@ void Machine::output_pixels(unsigned int count)
case 227: case 0: case 1: case 2: state = OutputState::Blank; break; case 227: case 0: case 1: case 2: state = OutputState::Blank; break;
case 3: case 4: case 5: case 6: state = OutputState::Sync; break; case 3: case 4: case 5: case 6: state = OutputState::Sync; break;
case 7: case 8: case 9: case 10: state = OutputState::ColourBurst; break; case 7: case 8: case 9: case 10: state = OutputState::ColourBurst; break;
case 11: case 12: case 13: case 14: case 15: state = OutputState::Blank; break; case 11: case 12: case 13:
case 16: case 17: state = _vBlankExtend ? OutputState::Blank : OutputState::Pixel; break; case 14: case 15: case 16: state = OutputState::Blank; break;
case 17: case 18: state = _vBlankExtend ? OutputState::Blank : OutputState::Pixel; break;
default: state = OutputState::Pixel; break; default: state = OutputState::Pixel; break;
} }
@ -235,6 +237,7 @@ void Machine::output_pixels(unsigned int count)
// grab pixel state if desired // grab pixel state if desired
if(state == OutputState::Pixel) if(state == OutputState::Pixel)
{ {
update_upcoming_event(); update_upcoming_event();
} }
@ -259,7 +262,7 @@ void Machine::output_pixels(unsigned int count)
if(_hMoveCounter) _hMoveCounter--; if(_hMoveCounter) _hMoveCounter--;
_upcomingEvents[(_upcomingEventsPointer+4)%number_of_upcoming_events].updates |= Event::Action::HMoveCompare; _upcomingEvents[(_upcomingEventsPointer+4)%number_of_upcoming_events].updates |= Event::Action::HMoveCompare;
_upcomingEvents[(_upcomingEventsPointer+2)%number_of_upcoming_events].updates |= Event::Action::HMoveDecrement; _upcomingEvents[(_upcomingEventsPointer+2)%number_of_upcoming_events].updates |= Event::Action::HMoveDecrement;
} else printf("\n"); } //else printf("\n");
} }
if(_upcomingEvents[_upcomingEventsPointer].updates & Event::Action::HMoveDecrement) if(_upcomingEvents[_upcomingEventsPointer].updates & Event::Action::HMoveDecrement)
@ -269,11 +272,16 @@ void Machine::output_pixels(unsigned int count)
if(_hMoveFlags & (1 << c)) if(_hMoveFlags & (1 << c))
{ {
_objectCounter[c] = (_objectCounter[c] + 1)%160; _objectCounter[c] = (_objectCounter[c] + 1)%160;
if(c == 4)
{
// printf("[%d] ", _objectCounter[4]);
_pixelCounters.ball++; // TODO: generalise this, obviously.
} }
} }
printf("[%d] %d ", _objectMotion[4], _objectCounter[4]);
} }
// if(_hMoveFlags & (1 << 4))
// printf("%d ", _objectCounter[4]);
}
_upcomingEvents[_upcomingEventsPointer].updates = 0; _upcomingEvents[_upcomingEventsPointer].updates = 0;
// read that state // read that state
@ -366,6 +374,7 @@ void Machine::output_pixels(unsigned int count)
{ {
_vBlankExtend = false; _vBlankExtend = false;
set_ready_line(false); set_ready_line(false);
// printf("\n");
} }
} }
} }
@ -599,6 +608,8 @@ unsigned int Machine::perform_bus_operation(CPU6502::BusOperation operation, uin
_hMoveFlags = 0x1f; _hMoveFlags = 0x1f;
_hMoveCounter = 15; _hMoveCounter = 15;
_upcomingEvents[(_upcomingEventsPointer + 15)%number_of_upcoming_events].updates |= Event::Action::HMoveCompare; _upcomingEvents[(_upcomingEventsPointer + 15)%number_of_upcoming_events].updates |= Event::Action::HMoveCompare;
// _objectCounter[4] = (_objectCounter[4] + 8)%160;
printf("%d: ", _objectMotion[4]);
break; break;
case 0x2b: case 0x2b:
_objectMotion[0] = _objectMotion[0] =