GB: Improve accuracy of video timings

This commit is contained in:
Jeffrey Pfau 2016-05-11 23:05:24 -07:00
parent 273d2db575
commit 98922b7a87
2 changed files with 5 additions and 5 deletions

View File

@ -179,11 +179,11 @@ int32_t GBVideoProcessEvents(struct GBVideo* video, int32_t cycles) {
video->dotCounter = 0;
video->nextEvent = GB_VIDEO_HORIZONTAL_LENGTH;
video->x = 0;
video->nextMode = GB_VIDEO_MODE_3_LENGTH_BASE + video->objMax * 8;
video->nextMode = GB_VIDEO_MODE_3_LENGTH_BASE + video->objMax * 12;
video->mode = 3;
break;
case 3:
video->nextMode = GB_VIDEO_MODE_0_LENGTH_BASE - video->objMax * 8;
video->nextMode = GB_VIDEO_MODE_0_LENGTH_BASE - video->objMax * 12;
video->mode = 0;
if (GBRegisterSTATIsHblankIRQ(video->stat)) {
video->p->memory.io[REG_IF] |= (1 << GB_IRQ_LCDSTAT);

View File

@ -19,9 +19,9 @@ enum {
GB_VIDEO_VERTICAL_TOTAL_PIXELS = GB_VIDEO_VERTICAL_PIXELS + GB_VIDEO_VBLANK_PIXELS,
// TODO: Figure out exact lengths
GB_VIDEO_MODE_2_LENGTH = 85,
GB_VIDEO_MODE_3_LENGTH_BASE = 167,
GB_VIDEO_MODE_0_LENGTH_BASE = 204,
GB_VIDEO_MODE_2_LENGTH = 80,
GB_VIDEO_MODE_3_LENGTH_BASE = 176,
GB_VIDEO_MODE_0_LENGTH_BASE = 200,
GB_VIDEO_HORIZONTAL_LENGTH = GB_VIDEO_MODE_0_LENGTH_BASE + GB_VIDEO_MODE_2_LENGTH + GB_VIDEO_MODE_3_LENGTH_BASE,