ZXNet эхоконференция «code.zx»


тема: Fast chunky gouraud shadin inner loop.



от: Aleksey Malov
кому: All
дата: 27 Mar 2000
Приветствую тебя, All!

Subj выглядит на удивление элегантно и просто:

;hl-адрес в таблице яркостей chunk'ов (256 байт 0 яркость ... 256 байт 15
яркость)
;de - chunky screen
;bc - 8.8 шаг яркости

ldi
add hl,bc
27 тактов на chunk

можно сделать и так
hl- яркость
bc,de - см выше
ld a,h
ld (de),a
inc e
add hl,bc
26 тактов/chunk
однако последдний способ не может быть применен с 82 тактовым выводом chunk'ов
на экран.

Желаю вам здоровья, счастья и творческих узбеков.
Aleksey Malov aka VIVID/Brainwave.

от: Aleksandr Majorov
кому: Vyacheslav Kalinin
дата: 03 Apr 2000

Хаюшки, Vyacheslav!

Как-то 01-04-00 примерно в 22:14:00 некто Vyacheslav Kalinin сообщил(а/о)
для Aleksey Malov о том, что "Fast chunky gouraud shadin inner loop."

[ ]
VK> Просто в демо ор дие написано мол неиспользуйте индексные
VK> регистры,а вот я например не представляю как вычислять мат

поменьше читай всякое :-))))
И по больше думай головой.
Для ДЕМОК неюзание ix/iy - это да,
это будет несколько быстрее.
Для любой нормальной более-менее большой
программы (а уж особенно для работы с массивами)
индексные регистры пригодяться.
Хотя было-бы желание, можно и без ix/iy обойтись.

Hе можешь представить как вычислять? - Легко!
Загрузи адрес в HL и работай!
Юзая INC HL / DEC HL

VK> рицы без IX,IY ,да и еще в матрицах надо делить,а как например
VK> можно число на 9 разделить ,чтобы это еще и быстро работало?

Вот тебе сорец, что мне FK0 прислал когда-то.

===================================================
; bc=bc/de hl=bc%de

DIV LD A,D: OR E: SCF: RET Z
LD HL,0
LD A,B
LD B,16
DIV1 SLA C: RLA
ADC HL,HL
SBC HL,DE: JR NC,DIV2
ADD HL,DE
DEC C
DIV2 INC C
DJNZ DIV1
LD B,A
XOR A
RET

; 28 байт, 1346 тактов макс.
===================================================

VK> И если можешь подскажи есче как можно побыстрому овеличить
VK> чанковый экран не ровно в 2 или 4 или 6 раз,а на чуть чуть

на пол пикселя :-)))))))))))

[ ]
VK> сь к тебе,да и разясни плиз как у вас там в демки чанки выводя
VK> тся,я там покапался но обнаружил тока конструкцию такого
VK> вида:
VK> . . .
VK> .. ..
VK> POP HL
VK> ADD HL,BC aRTYY6TYGG
VK> LDD

Между прочим именно так и выводиться!
То что ты не смог понять - это скорее всего в связи
с отсутствием коментов? ;)

Принцип прост:
взяли из таблицы (вычисленной давно) начальный
АДРЕС, прибавили к нему СМЕЩЕHИЕ ==> получили
адрес для вывода, вывели по этому адресу.

Хотя в данном случае несколько другой вариант:
В памяти лежит полный образ выводимой картинки.
Поскольку мы что-то там маштабируем/поворачиваем,
то выводить нужно не один к одному, а с коррекцией.
Так вот DE указывает на "куда будем выводить
на экране". Со стека сняли начальный адрес
"откуда выводить" и прибавили смещение.
Причем очень часть в [C] храним смещение по
горизонтали, а в [B] смещение по вертикали.

Сложили и получили реальный адрес точки, которая должна
быть выведена в текущую точку на экране.
Вывели ее по LDD и перешли к следующей точке
в данной строке.

Это, кстати, словами и не объяснишь :)
Это надо самому почувствовать, самому
сообразить и увидеть :))))

Hу вот и все *MAS* с кувалдой




Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
Открытые письма Nemo №8.4
Железо - описание на подключение Kempston MOUSE (простая и маленькая схема).
Pentagon - Инструкция по переделке Спектрума для использования всей площади экрана.
ОС - Нecколько cлов об ОС для Спектрума.
Music scene - обзор музыкального альбома "Don't stop my clock" by Scalesmann/March cats.

В этот день...   19 апреля