Пара слов про самый быстрый вариант вывода тайлов - lxi + push. К роботам это вряд ли применимо, но как минимум в одной векторовской игре используется.
В принципе и это можно совместить с разрешенными прерываниями. В обработчике проверяем код команды, на которую будет возврат. Если это push - ничего не делаем, если не push - заменяем адрес возврата на вершине стека на содержимое регистровой пары (скорее всего bc) в которую был lxi. Небольшая проблемка есть с самыми нижними строками:
1. Если сначала рисуются верхние тайлы, потом нижние и используется двойная буферизация, то можно просто после цикла вывода тайлов "зарисовать" две строки примыкающие к нижнему ряду тайлов.
2. Чуть медленнее, но более универсально - выводить 2 нижние строки примерно так, как выводятся первые два байта в оригинале Медноногова, приведенном jerri.
Причем этот подход к совмещению с разрешенными прерываниями можно применить и к оптимизированной версии lxi+push, когда часть lxi заменяется на mvi, часть lxi/mvi/... пропускается (и т.п.). Но все же ограничение накладывается - нельзя использовать для задания графики две регистровые пары, что в некоторых случаях (регулярные паттерны размером 4x8) позволяет еще немного ускорить вывод.
Еще вариант, но менее удачный и универсальный - использовать определенное выравнивание процедур вывода и в обработчике прерывания проверять несколько младших бит адреса возврата.
---------- Post added at 14:42 ---------- Previous post was at 14:02 ----------
Момент, касающийся вывода первых 2х байтов, про который забыл написать. Там м.б. что-то типа такого: lxi b,d16; sphl; push b; lxi b, d16; push b и т.д.
Еще одна вещь - в обработчике нужно проверять, куда сейчас указывает sp. Если в экран - действуем, как написано выше.
Ну и, конечно, можно просто использовать таймер, если не жалко одного канала.
---------- Post added at 14:48 ---------- Previous post was at 14:42 ----------
Еще вариант - вместо sphl здесь может быть shld, меняющий адрес обработчика прерывания. Тогда в обработчике можно не проверять, куда указывает sp.
---------- Post added at 16:03 ---------- Previous post was at 14:48 ----------
Проще не трогать в указанном фрагменте sphl и менять обработчик один раз - перед выводом тайлов (не каждого отдельного). И пока выводим тайлы sp всегда "в экране".





Ответить с цитированием