Поглядим дамп памяти:

Да, теперь в списке AllPoints (уже "окончательно обнаруженные пятна", указатель по адресу 0x9C) лежит 4 пятна, их я нарисую зелёным. И ещё два текущих пятна в списке ActivePoints, адрес 0x9B, их я нарисую красным. Ну и текущая линия - голубым:

Ну что, можно рискнуть уже прошиться и посмотреть на макете. Не забыть только заменить 720 строк на 748, потому как счёт ведётся сразу после кадрового синхроимпульса, иначе в самом низу, когда счётчик строк дойдёт до нуля и застрянет в нём, у нас опять результаты начнут выкидываться... Прямо талант самому себе придумывать неприятности.
PS. Попробовал синтезировать проект для макета, но там опять выскочил Critical Warning - timing requirements not met, всего 21,8 МГц вместо 25. Это чего-то стрёмно. Попробую его "умаслить", но уже в понедельник, пойду что ль домой...