C2p — различия между версиями
Alone (обсуждение | вклад) (Новая страница: «'''c2p''' - процедура, выводящая чанки из чанкового буфера в экранный буфер. Основные разнов…») |
Alone (обсуждение | вклад) м |
||
(не показано 7 промежуточных версии этого же участника) | |||
Строка 1: | Строка 1: | ||
− | '''c2p''' - процедура, выводящая [[чанки]] из чанкового буфера в | + | '''c2p''' (chunky 2 planar) - процедура, выводящая [[чанки]] из чанкового буфера в экран. |
Основные разновидности: | Основные разновидности: | ||
− | *Отсутствие c2p - вывод чанков непосредственно на экран | + | *Отсутствие c2p - вывод чанков непосредственно на экран, иногда с использованием не всех линий на каждом кадре ([[Power Up (демо)|Power Up]], [[Technogen (demo)|Technogen]]) |
− | *Классический вывод по таблицам пересчёта ([[Refresh]], демы от [[Placebo]]) | + | *Классический вывод по таблицам пересчёта ([[Refresh (демо)|Refresh]], демы от [[Placebo]]) |
− | *Вывод через стек ([[Monster]] | + | *Вывод выбором процедур через стек ([[Monster]] - [[Born Dead]] #5) |
− | *Вывод с интерполяцией ([[JTN]] & [[Cyberjack]] | + | *Вывод с интерполяцией ([[JTN]] & [[Cyberjack]] - [[Adventurer]] #14) |
+ | |||
+ | Самый простой вывод чанков по таблицам пересчёта выглядит так: | ||
+ | pop hl ;взяли 2 чанка l=%111cccс1, h=%111cccс1 (можно разместить в экранной странице) | ||
+ | ldd ;вывели верхнюю линию | ||
+ | ld a,(hl) | ||
+ | ld (bc),a ;вывели нижнюю линию | ||
+ | |||
+ | Получаются чанки 4x2 (9 цветов), 40 тактов на пару чанков. Чтобы получить чанки 4x4, можно продублировать строки (примерно 25 тактов на пару чанков): | ||
+ | ld sp,source | ||
+ | pop hl:ld (destination),hl | ||
+ | pop af,bc,de,hl | ||
+ | exx | ||
+ | pop bc,de,hl | ||
+ | ld sp,destination+16 | ||
+ | push hl,de,bc | ||
+ | exx | ||
+ | push hl,de,bc,af | ||
+ | |||
+ | Вывод чанков 4x4 (16 цветов) выбором процедур через стек (68..80 тактов на пару чанков): | ||
+ | ld h,a ;старший адрес экрана для текущей строки | ||
+ | ld (hl),b/c/d/e или число | ||
+ | inc h | ||
+ | ld (hl),b/c/d/e или число | ||
+ | inc h | ||
+ | ld (hl),b/c/d/e или число | ||
+ | inc h | ||
+ | ld (hl),b/c/d/e или число | ||
+ | inc l | ||
+ | ret ;взяли два чанка l=%11cccccс, h=%11cccccс (%cccccc=#fd,#fa,#f7,...,#d0) | ||
+ | ;переходим на jp к нужной процедуре | ||
+ | |||
+ | В конце строки чанков должен лежать адрес процедуры перехода на следующую строку. Если прерывания включены, то эти адреса надо восстанавливать в обработчике прерываний или после вызова c2p. В b,c,d,e константы #00, #ff, #55, #aa - самые частые байты. Чтобы процедуры вывода чанков уместились в экранную страницу, можно использовать jr вместо jp (тогда %cccccc=#fe,#fc,#fa,...,#e0) или сократить число цветов. | ||
[[Категория:Термины]] | [[Категория:Термины]] | ||
[[Категория:Видеорежимы]] | [[Категория:Видеорежимы]] |
Текущая версия на 12:31, 26 июня 2011
c2p (chunky 2 planar) - процедура, выводящая чанки из чанкового буфера в экран.
Основные разновидности:
- Отсутствие c2p - вывод чанков непосредственно на экран, иногда с использованием не всех линий на каждом кадре (Power Up, Technogen)
- Классический вывод по таблицам пересчёта (Refresh, демы от Placebo)
- Вывод выбором процедур через стек (Monster - Born Dead #5)
- Вывод с интерполяцией (JTN & Cyberjack - Adventurer #14)
Самый простой вывод чанков по таблицам пересчёта выглядит так:
pop hl ;взяли 2 чанка l=%111cccс1, h=%111cccс1 (можно разместить в экранной странице) ldd ;вывели верхнюю линию ld a,(hl) ld (bc),a ;вывели нижнюю линию
Получаются чанки 4x2 (9 цветов), 40 тактов на пару чанков. Чтобы получить чанки 4x4, можно продублировать строки (примерно 25 тактов на пару чанков):
ld sp,source pop hl:ld (destination),hl pop af,bc,de,hl exx pop bc,de,hl ld sp,destination+16 push hl,de,bc exx push hl,de,bc,af
Вывод чанков 4x4 (16 цветов) выбором процедур через стек (68..80 тактов на пару чанков):
ld h,a ;старший адрес экрана для текущей строки ld (hl),b/c/d/e или число inc h ld (hl),b/c/d/e или число inc h ld (hl),b/c/d/e или число inc h ld (hl),b/c/d/e или число inc l ret ;взяли два чанка l=%11cccccс, h=%11cccccс (%cccccc=#fd,#fa,#f7,...,#d0) ;переходим на jp к нужной процедуре
В конце строки чанков должен лежать адрес процедуры перехода на следующую строку. Если прерывания включены, то эти адреса надо восстанавливать в обработчике прерываний или после вызова c2p. В b,c,d,e константы #00, #ff, #55, #aa - самые частые байты. Чтобы процедуры вывода чанков уместились в экранную страницу, можно использовать jr вместо jp (тогда %cccccc=#fe,#fc,#fa,...,#e0) или сократить число цветов.