В оригинале вывод работает так:
1 На теневом экране рисуются спрайты (Пули, Рекс, дроны, противники)
2 На теневом-же экране рисуется вся статика, о ней ниже поподробнее.
3 Теневой экран переносится в видимый.
4 Теневой экран стирается.
При входе Рекса на экран, формируется список того, что нужно сделать чтобы нарисовать статику. Там команды "печати значка", адреса куда и откуда переносить из набора значков в теневой экран. И в конце код завершения #FF.
Порядок переноса - блоками 3х3
Код:
01 02 03 10 11 12 19 20 21 ...
04 05 06 13 14 15 22 23 24 ...
07 08 09 16 17 18 25 26 27 ...
...
Всякие крутилки в статике реализуются изменением, на каждом игровом цикле, прямо в наборе значков.
Видно, что проделывается много лишней работы. Больший процент статики не меняется, однако печатается в теневой экран, потом переносится в основной-видимый, а потом стирается.
У меня идея этапы 2 и 3, а может и 4, делать сразу, за один проход.
Для начала изменить порядок перебора знакомест с блоков 3х3 на линейную
Код:
01 02 03 04 ...
31 32 33 34 ...
...
Всю неподвижную статику рисовать один раз, сразу на экране, чтобы потом в игровом цикле её вообще не трогать.
Список команд разнообразить.
Сделать команду печати подвижной статики, прямо на основной экран, а не в теневой.
Сделать команду переноса из теневого экран в основной, участков со спрайтами.
Ну и, конечно, команду завершения, как же без неё?
Вход в команду, через стек, по RET. Далее POP-ами берём аргументы, откуда, куда и сколько. Переносим. При выходе восстанавливаем указатель стека.
Чтобы включить прерывания, просто продублируем этот список команд, чтобы можно было быстро восстановить подпорченное.
Со стиранием теневого экрана ещё не решил. Думаю попробовать оставить как есть, стирать целиком PUSH 0; и попробовать другой вариант, стирать только то, что перенесли. Пуши, они быстрее, но стирают лишнее.
[свернуть]