C2p — различия между версиями

Материал из SpeccyWiki
Перейти к: навигация, поиск
м
 
(не показаны 4 промежуточные версии этого же участника)
Строка 1: Строка 1:
'''c2p''' (chunky 2 planar) - процедура, выводящая [[чанки]] из чанкового буфера в экранный буфер.
+
'''c2p''' (chunky 2 planar) - процедура, выводящая [[чанки]] из чанкового буфера в экран.
  
 
Основные разновидности:
 
Основные разновидности:
*Отсутствие c2p - вывод чанков непосредственно на экран, иногда с использованием не всех линий на каждом кадре
+
*Отсутствие c2p - вывод чанков непосредственно на экран, иногда с использованием не всех линий на каждом кадре ([[Power Up (демо)|Power Up]], [[Technogen (demo)|Technogen]])
*Классический вывод по таблицам пересчёта ([[Refresh]], демы от [[Placebo]])
+
*Классический вывод по таблицам пересчёта ([[Refresh (демо)|Refresh]], демы от [[Placebo]])
*Вывод выбором процедур через стек ([[Monster]], [[Born Dead]] #5)
+
*Вывод выбором процедур через стек ([[Monster]] - [[Born Dead]] #5)
*Вывод с интерполяцией ([[JTN]] & [[Cyberjack]], [[Adventurer]] #14)
+
*Вывод с интерполяцией ([[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) или сократить число цветов.