Public Spirit
#01
17 мая 1997 |
|
Кодерам - переброска экрана за прерывание, Паковщики.
музыка: автор: (с) 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
Другие статьи номера:
Похожие статьи:
В этот день... 4 ноября