музыка: автор:
(с) Dave (с) DEX&
(c) SEM
В ZX-POWER #1 шли дебаты
по поводу того, можно-ли
перекинуть экран из ОЗУ в видео
менее чем за одно прерывание.
Давайте разберемся получше
и проведем некоторые расчеты :
итак известно, что наиболее
оптимальным способом переброски
данных является т.н. 'стековый'
способ. суть его заключается в
следующем :
Стек устанавливается на
последний байт области куда
будет перебрасываться
информация. Потом в HL
загружается пара байт для
переброски и делается PUSH
HL.Таким образом за 11 тактов
(PUSH HL) перекидывается сразу
2 байта. Эта-же операция
выполняется для оставшейся
информации. Безусловное
преимущество этого метода
в скорости переброски,
но главным недостатком
способа являются жесткие
требования предъявляемые к
количеству свободной памяти
(короче, жрет много памяти).
Теперь от теории к практике :
Способ с использованием
цикла отметаем сразу как не
самый быстрый. Остается только
развернуться во всю память
заполнив ее многочисленными
блоками типа :
LD HL,#NNNN ;перебрасываемые
;байты (1)
PUSH HL ;собственно,
;переброска
Количество этих блоков
определяется длиной
перекидываемого блока кодов
деленного на два (т.к.
перекидывается по два байта за
раз).
Теперь вернемся собственно
к теме статьи : нам необходимо
перекинуть экран (6912
байт). Следовательно необходимо
раскрунчиться в 13827 байт
(6912/2 -количество конструкций
типа (1)=3456 и умноженное на 4
(количество байт занимаемых
конструкцией). =13824 и плюс 3
байта на команду LD SP,#5B00).
Подсчитаем теперь
количество тактов занимаемых
всей процедурой.
(10+11)*3456=72576 тактов.
10-количество тактов LD HL,NNNN
11- ------//-------- PUSH HL
3456-количество повторений.
Делаем вывод :
НА ФИРМЕНОЙ МАШИНЕ НЕВОЗМОЖНО,
Т.К. ТАМ МЫ ИМЕЕМ 70000 ТАКТОВ.
НО МОЖНО ПЕРЕКИНУТЬ НА
МАШИНАХ ИМЕЮЩИХ БОЛЕЕ 72650
ТАКТОВ. Т.К. НАДО ЕЩЕ
ЗАПОМНИТЬ, УСТАНОВИТЬ И
ВОССТАНОВИТЬ СТЕК, И САМОЕ
ГЛАВНОЕ ВЫЗВАТЬ ПРОЦЕДУРУ И
ВЕРНУТЬСЯ ИЗ НЕЕ.
Вот мы здесь считали, считали,а
теперь задумаемся, нужна ли нам
такая переброска ?
Практической выгоды из
этого никакой. Ведь нам еле-еле
хватает тактов на переброску, а
кому нужно перебрасывать
статическое изображение 50 раз
в секунду ?
Но ведь нам надо его еще
изменять, а это уже второе
прерывание (если не третье). За
сим делаем окончательный вывод:
ПЕРЕКИНУТЬ МОЖНО,НО НЕ НУЖНО!
Вопрос просим считать
закрытым.
Спасибо за внимание, DSEEMX.
то бишь
SEM И DEX.
или
DEX И SEM.
(C) CODERS' ACADEMY
4:44:35 AM 21/04/97. AD