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







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

Похожие статьи:
Боги - интервью с известным Краснодарским музыкантом nq (nik-o).
Обратная связь - контакты редакции.
Demoz - Демки кодить я хочу - пусть меня научат. Основные требования предъявляемые к Eurodemo.

В этот день...   25 сентября