Buzz #16
26 сентября 1998

Ассемблер - Прицнип програм. подсчета колчества тактов в строке.

<b>Ассемблер</b> - Прицнип програм. подсчета колчества тактов в строке.
                                 __          --/ 
       · - = Ё  │<A│< Р\/ЛИ│Ь  8  ╫((ЕМБЛЕРЕ  /80  Ё = - ·
                       /                     /--
                    ▓▓░ ▓▓▓▓▓▓▓▓▓▓▓▓▓ ░▓▓
                   ▓▓▓▓░ ▓▓░         ░▓▓ ░▓▓
                  ▓▓░ ▓▓░ ▓▓▓▓▓▓▓▓▓ ░▓▓ ░▓▓▓▓
▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ ▓▓░   ▓▓░     ░▓▓ ░▓▓ ░▓▓ ░▓▓ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ ▓▓▓▓▓▓░ ▓▓░   ░▓▓ ░▓▓▓▓▓▓   ░▓▓ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
▀▀▀▀▀▀▀▀▀▀▀▀▀▀           ▓▓░ ░▓▓ ░▓▓ ░▓▓     ░▓▓ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
              ▓▓░         ▓▓░▓▓ ░▓▓   ░▓▓     ░▓▓
             ▓▓░  RULEZ!   ▓▓▓ ░▓▓     ░▓▓     ░▓▓

(C) J/C.I.C.

   В этой статье я кратко изложу принцип  программного  подсчета
количества тактов в строке (за  сколько тактов  видео-контроллер
перешлет 1 строку изображения  на монитор).  Для чего это  надо:
для создания крутых эффектов на бордюре, multicolor'а и т.п. Эти
эффекты будут правильно работать на всех компах кроме динозавров
с медленной памятью и машине, где количество строк  по вертикали
не 320 или 312. Програмный изврат, о котором я Вам  сейчас пове-
даю, будет автоматически настраиваться под любой  попавшийся ему
в руки комп, но надо будет только ему указать количесво строк по
вертикали и все !
   А теперь ближе к делу. Сначала немного  теории. Как, Вы дума-
ете, задается количество тактов между  прерываниями ? Может где-
то на плате запаян счетчик который и отсчитывает нужное количес-
тво ? Нет ! Все совсем проще. Как  известно, у нормального компа
312 или 320  вертикальных строк  изображения (вместе с экраном и
бордюром). Так вот, когда ULA (video-контроллер) эти  строки пе-
редаст монитору, приходит прерывание, а затем все опять по  цик-
лу. Но у компов разное  количество тактов между  прерываниями, а
количество строк совпадает. Значит, у них за разное время переб-
расывается 1 строка. Известно  также, что ULA за 1  такт при 3.5
мгц перебрасывает 2 точки на монитор (и это  константа). Значит,
на разных компьютерах разное количество точек по горизонтали !!!
   Теперь можно вывести формулу: количество строк  *  количество
тактов в строке = количество тактов между прерываниями  -  и это
со 100%-й точностью !!! Допустим,  что количество  тактов  между
прерываниями приблизительно можно  сосчитать.  Количество  строк
укажет user (или coder) при инсталяции,  и количество  тактов  в
строке неизвестное, которое можно найти опять же по формуле (это
математика): количество тактов между прерываниями / на количест-
во строк = неизвестное (если будет остаток при делении ,  то ре-
зультат нужно будет от-INC'рементить).
   А теперь программа:

        DI
        LD      A,#18
        LD      (#FFFF),A
        LD      A,#C3
        LD      (65524),A
        LD      HL,INT1
        LD      (65525),HL     ;адрес обработки  прерывания
        LD      HL,#BE00
        LD      DE,#BE01
        LD      (HL),255
        LD      A,H
        LD      I,A
        LD      BC,#0100       ;генерируем таблицу векторов
        LDIR                   ;прерывания
        IM      2              ;установка 2 режима прерывания
        LD      DE,0
        LD      HL,INT2
        EI
        HALT
        ......
INT1    LD      (65525),HL     ;новый адрес обработки прерывания
        LD      HL,INT3
        EI
        HALT
        ......
INT2    LD      (65525),HL     ;опять кладется новый адрес
        EI
        INC     DE             ;цикл подсчета тактов
        JP      $-1
;
INT3    POP     HL
        POP     HL             ;для того чтобы вернуться по RET
        EX      DE,HL          ;к первому HALT'у
        ADD     HL,HL          ;HL * 8
        ADD     HL,HL
        ADD     HL,HL
        LD      A,N            ;N=0 если 312 строк, иначе 320
        OR      A
        LD      BC,156         ;а вот догадайтесь сами, почему
        JP      Z,INT4         ;156 вместо 312 и 160 вместо 320
        LD      BC,160
        XOR     A
INT4    OR      A
        SBC     HL,DE          ;деление как по формуле ...
        INC     A
        JP      NC,INT4        ;теперь в A будет количество
                               ;тактов в строке.

   Поясню, что 3 раза я записывал разный адрес обработки  преры-
вания для того,  чтобы на некоторых  глючных компах  (на моем  к
примеру) все работало О.К., а если вместо 3 раз будет 2 раза, то
на выходе в A может запросто оказаться 1.

                           Пока !

P.S. Если читателю будет интересно, то в следующий раз цикл ста-
тей может быть продолжен. Например, как сделать бегушку на  бор-
дюре ...

                                                        J/C.I.C.
                                                        08.07..98



Другие статьи номера:

12TK info - О защиты игры 12 тайный книг-миссия.

ASCII графика - ASCII - вопросы и ответы.

ASH & Funtop - Впечатления о Fun Top от ASH'а.

ASM vs SNS - ASM и SNS - две большие разницы.

Bill Gilbert - Тихая сенсация или тайна Била Гилберта раскрыта.

Black Metal - Для фанатов Black Metal, лучшая десятка.

FAQ Programs - Коммерческие авторские разработки предлагаемые на распространение.

Happy Birthday - С днем рождения SPY!

PC News - Особенности Windows'98 for PC.

Rants & Raves - Greeting'S для Eternity Industry.

Rave - Впечатления о Fun Top'е.

TOP ZX - Лучшие игры, журналы, системки...

Windows' 95 info - Сообщение о Microsoft Windows BS extra.

ZX News - Состоялся Fun Top'98. Вышла полная верси игры: 12 Тайных книг.

Ассемблер - Прицнип програм. подсчета колчества тактов в строке.

История Speccy - ZX-Spectrum - прошлое и настоящее.

Новелла - Компьютерная новелла "Последний бой со злом" (по 3 уровню игры "Lord of Chaos").

Об авторах

Обзор игрушек - Обзор игровых программ: A Last Hero of Light force: Orcs lair, Операция Р.Р., Quadrax, Any Tank, Mobile Wars, Охота на кротов, Вторжение Писи.

Обзор системок - Обзор системных программ: Modern Word v1.00b, Global Commander v1.1s, Macro Adapter v1.1, ReTrick v1.3.

Программирование - А почему Spectrum и Amiga,а не PC.

Реклама - Реклама и объявления...

Содержание

У нас в гостях - О группе - Virtual Vision group.


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

Похожие статьи:
Введение - Здрaвствуйтe, увaжaeмыe читaтeли! Мы рaды прeдложить Вaшeму внимaнию 2й номeр гaзeты Sinc Re-Stared...
Fantasy - начало цикла статей о ФЕНТЕЗИ.
Железо - Статья об аудиоусилителях и прайс-лист (для желающих купить готовый усилитель или набор для сборки).
Приложение - приложение журнала.
Ассемблер - Индикатор для AY-8910 (12) - 3 процедуры.

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