Сообщение от
bigral
fps поднимается если игра "не висит на прерывании", но это зло, потому что играть уже не сможешь в такую игру например в boulder dash (исключение 3D игры, там это как раз хорошо изза того что они дико тормозят на 3.5), да и вообще в такие игры играть противно изза мигания спрайтов и "разрыва кадров", это все старые игры которые лепили поначалу
Нормальная же т.е. типичная игра ждет прерывания которое в zx идет от кадровой развертки и начинает вычисления изменений игровой ситуации (это чтобы луч на мониторе спустился пониже), а потом после того как данные модели игрового процесса обновленны и луч ушел ниже какойто части экрана переключается на обновление экрана сверху-вниз вслед за лучем пока не отрисует весь новый кадр и в конце просто ждет следующего прерывания. Главное тут не перестараться как это в демах под pentagon, изза того что у pentagon-a больше тактов между прерываниями прога используящая 99.9% тактов для pentagon-a будет не успевать все отрисовать на ленинграде с wait сигналом и в какой-то части экрана обычно спрайты просто исчезают наполовину, потому надо рассчитывать на (3500000/50)-3% ~67900 тактов на frame. Ну в turbo 7mhz (7000000/50)-10% ~126000 тактов (может 128000 надо собрать статистику по клонам чтоб знать скоко у кого в turbo тактов).
Вообще конечно для полной оптимизации надо понимать что во время прерывания от кадровой развертки луч находится в верхнем углу экрана и пока он идет по верхней части border можно еще "дорисовать" кадр который начал рисоваться еще на прошлом прерывании, ну и рисовать нужно закончить до того момента как луч дойдет до места рисования, а новый кадр можно начать рисовать сразу после того как луч прошел то место где нужно рисовать...
В 128-м есть 2 экрана и там надо рисовать в тот экран который сейчас не высвечивается не обращая особо внимания на то где луч, а по прерыванию нужно просто переключить высвечивание экранов и начать рисовать в другой экран.