Перевод строки 22 такта это LD BC,NN:ADD HL,BC (т.к. копируем 80 байт - DE не трогаем, оно всегда правильное)
При таком варианте и получается указанное у меня число =) Проще копировать 80, чем 78.
Формат примерно тот же, но с нюансами. Сейчас у нас карта разложена экранами по страницам, от края до края экрана.
А можно сделать с перекрытием экранов. Что увеличит расход памяти, но избавит от вывода по половинкам.
То есть в первой странице лежит (пока пишу условно) карта с 1 по 200 столбик, а во второй не с 201, а со 122 (201-ширина)
Получается что: когда в 1-й странице доходим до столбика 121 - "упираемся" в край страницы.
Дальше вместо склеивания страниц просто переключаемся на следующую и выводим со 122 столбика.
Надеюсь, суть понятна: края экранов перекрывают друг друга в соседних страницах.
Проблема в том, что нужно "удлинять" экраны путем дробления их по горизонтали на 2 или даже 4 части.
Потому что при полной высоте экрана (160) получаем в странице 16384/160=102 столбца. А у нас ширина окна 80.
То бишь при таком хранении будет огромный расход памяти на перекрытие краев.
Можно разбить карту на горизонтальные куски, скажем, 4. Тогда в страницу влезет уже 16384/40=409 столбцов.
Соответственно, распухание карты составит примерно 1/5 от исходного размера (409/80 будет 5 если грубо).
Это уже вполне терпимо, и даже при удвоенном расходе памяти на "попиксельный" скролл ее хватит.
Надеюсь, суть понятна. Остается переписать генерацию карты под такой формат выкладки =)
- - - Добавлено - - -
Да, там при подсчете с LDIR обсчитался по запаре, получается больше моих 197 тысяч. Бывает...





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