Определился с распределением памяти и форматом вывода.
1. РАСПРЕДЕЛЕНИЕ ПАМЯТИ
---------------------------------
После долгих размышлений пришёл к выводу, что оптимальный размер массива тайлов это 227 штук в комплекте.
Почему? Потому что 36 байтов на 1 тайл. Итого 36х227=8172 байта массив тайлов. Это позволяет держать на той же самой странице карту 64х64=4096 байтов и там же буфер под волновой алгоритм трассера пути 64х64=4096. Последний буфер также по совместительству содержит туман войны в старшем бите. и он же является картой проходимости, т.е. базисом для отрисовки миникарты. Все чёрные точки - пройти нельзя, все белые - пройти можно. Таким образом, миникарта - стандартный монохром. Точки юнитов будут мигать с некоторой периодичностью.
Итого, в верхней странице памяти:
4096 - карта
4096 - туман
8172 - тайлы
---------------
16364 ИТОГО
При какой то важной необходимости можно эпизодически добавить тайлов в нижнюю память. т.к. разрядность для их присутствия на карте есть (до 255 разных).
2. ФОРМАТ ВЫВОДА
-----------------------
Также после долгих раздумий я перебрал все существующие реализации спрайтования и пришёл к внутреннему консенсусу (просто/эффективно). Будет теневой буфер размером 6912, т.е. стандартный экран. В него в центральной позиции печатаются тайлы, квадратом 12х12 тайлов. По бокам остаются полоски по 4 знакоместа без тайлов.
Чёрнобелое спрайтование стандартно переключает верх в банк со спрайтами, выводит их напрямую в этот теневой экран БЕЗ КЛИППИНГА. Монохромная графика рисуется по всему теневому экрану. В конце отрисовки центральная часть теневика (24х24 знакоместа) быстро перекидывается на видимый экран в 16384. Таким образом осуществляется автоклиппинг всего монохрома. При данном способе, очевидно, можно автоклиппировать спрайты до 4х4 знакоместа. В моём Варкрафте максимальные 3х3, так что хватит.
Итого расписание нижней памяти:
#4000,6912 - стандартный экран
#6000,6912 - теневой экран (буфер)
Средняя память:
32768...42000 - управляющая программа
42000...49152 - графическая библиотека низкого уровня
Да, знаю, что грёбаный ULA не благоволит к размещению видеобуфера в медленной странице памяти, но, как это обойти пока мыслей нет. Так что попытаюсь втиснуться в этот формат.
![]()





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