![]() |
Вывод тайлового бэкграунда
Где можно почитать примеры процедур заполнения экрана тайловым бэкграундом?
Размеры тайлов классические - 2x2. Интересуют как готовые примеры, так и общие принципы и сравнения методик. У меня сейчас вывод одного тайла 2x2 в линейный буфер (не напрямую на экран) занимает примерно 700 тактов (без вывода аттрибутов), это много или нормально? |
лучше кусок кода кинь... нагляднее будет....
|
да код недописан слегка, там один и тот же тайл выводится, то есть работы с картой пока нету попросту.
а так - буфер заполняется одним и тем же тайлом, лежащим по адресу #c000. Code:
TILESHORIZONTAL EQU 16 ;TILES COUNT (HORIZONTAL) |
А чего не напрямую в экран? Если два экрана юзать должно быть очень даже ничего
|
Quote:
Самый быстрый из известных мне вариантов "down hl" тратит в среднем 36 тактов на линию (http://zxdn.narod.ru/coding/n125dnhl.txt). Если подсчитать, то, избавившись от неё, в моём случае можно сэкономить: ((2*8)*10*16)*36 = 92160 тактов на отрисовке бэкграунда плюс на отрисовку четырех спрайтов (4*6 знакомест в моём варианте): ((6*8)*4)*36 = 6912 тактов в целом - 99 тысяч тактов на одну только down_hl. процедура вывода буфера на экран у меня развернута и работает через стек, что при моём размере буфера (32*20 знакомест) выполняется за 65347 тактов. Итого, чистый выигрыш в моём варианте - почти 35000 тактов на кадр, чего мне хватило, чтобы решить заморачиваться на отдельный буфер. Хотя изначально всё на 2 экрана и было сделано. |
если позволяет место, то развернуть ЦЕЛИКОМ программу вывода на экран... и в неё уже подставлять значения..... у мну примерно похожее используется кое где....
Добавлено через 1 минуту ... если интересно покажу/кину исходник/ в понедельник... так как исход наработе... |
Quote:
|
Quote:
а запал не пропадёт, я уже почти пять лет обучаюсь, переделываю, переписываю заново, и только сейчас начало выходить что-то, чем я доволен. |
Quote:
Плюс процедуру downhl можно развернуть и не мучаться. в частности, она будет выглядеть примерно так: dup tileh ld a,h dup 4 pop de ld (hl),e inc l ld (hl),d inc h pop de ld (hl),d dec l ld (hl),e inc h edup ld h,a ld a,l add a,32 ld l,a edup Это неполная версия downhl- переход через границу трети надо обрабатывать отдельно, желательно между циклами вывода тайлов по вертикали Плюс можно соптимизировать хвост развернутого цикла, если дальнейший адрес не нужен (обычно нужен) |
интересно а почему все примеры "зациклены" на использовании стёка? ведь две команды ldi по тактам занимают то-же самое, занимают меньше места и "не обидятся" на прерывание во время работы? :v2_wink2:
p.s. ещё можно использовать особенность этой команды для возврата из цикла прорисовки по ret po. :v2_wink2: |
| All times are GMT +4. The time now is 21:34. |
Powered by vBulletin® Version 3.8.3
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.