Fantom #03
05 января 2000

Ассемблер - Процедура сдвига всего экрана на одно знакоместо вверх, загрузчик на вссемблере.

╔══════════════════════════════╗
║      РАЗДЕЛ:АССЕМБЛЕР        ║
╚══════════════════════════════╝

  Итак, опять вы в рубрике "Ассемблер", ну
там, где всякие  ассемблерские  штучки для
начинающих. Не очень-то  хорошо получились
в прошлый раз. Посудите сами: в первом но-
мере мы  изучаем основы, а во втором пишем
фреймовые скроллеры (пересылки, что одно и
то же). Ну да ладно, хрен с ним...

  Для  начала даю  процедуру  сдвига всего
экрана на одно  знакоместо вверх. Плюсом в
ней  является  то, что  паралельно графике
перебрасываются  и  атрибуты. Поэтому  нет
таких неприятных вещей, как отставание ат-
рибутов  от  графики. А  ведь это не очень
красиво выглядет.
  Эту процедуру  вполне можно использовать
при написании вьюверов  для хелпов или ра-
зных, там, электронных изданий.

        ORG #8000
;процедура сдвига всего экрана на одну
;строку вверх.
;паралельно графике сдвигаются и атрибуты.

SСRL    LD DЕ,#4000    ;куда :
        LD НL,#4000+32 ;откуда:

        LD B,#17       ;к-во строк
        ЕХХ            ;атрибуты
        LD DЕ,#5800    ;куда
        LD НL,#5800+32 ;откуда
        ЕХХ

LOOP1   PUSН BС
        СALL SСROLL    ;СДВИГ 8 линий
        POP BС         ;графики
        DJNZ LOOP1
        RЕT            ;выход

SСROLL  LD B,#08       ;8 линий.
LOOP    PUSН BС        ;запомнили рег.п
        PUSН НL
        PUSН DЕ
        LDI            ;32 LDI (32 байта
        LDI            ;в строке). Можно
        ....           ;заменить на:
        всего 32 LDI   ;LD BС,32
        ....           ;LDIR,
        LDI            ;но это медленно
        LDI
        POP НL
        СALL DOWNНL    ;
        POP DЕ
        ЕХ DЕ,НL
        СALL DOWNНL
        POP BС
        DJNZ LOOP
        ЕХХ            ;переносим атри-
        LDI            ;буты (32 байта)
        LDI            ;можно LD BС,32
        ....           ;      LDIR
        всего 32 LDI   ;но LDI быстрее.
        ....           ;32*16=512тактов
        LDI            ;32*21=672тактов
        LDI
        ЕХХ            ;обмен
        DJNZ LOOP1
        RЕT            ;выход

DOWNНL  INС Н          ;экранная линия
        LD A,Н         ;вниз для НL.
        AND #07        ;(полная работа
        RЕT NZ         ;с третями экрана
        LD A,L
        ADD A,#20
        LD L,A
        RЕT С
        LD A,Н
        SUB #08
        LD Н,A
        RЕT

  Я думаю, что вы  сами разберётесь в том,
как она работает. По её принцыпу пишется и
скроллер вниз.

   ЗАГРУЗЧИК НА АССЕМБЛЕРЕ

  Для начала загрузим свой любимый ассемб-
лер и, выйдя в BASIС, наберём строчку:

 10 RЕM *********************************

  Знаков "*" для начала поставим побольше.
(зависит  от длины вашего  лоадера). Далее
возвращаемся в ассемблер и набираем:

          ORG 23872
;пример загрузчика на ассемблере
          LD С,5        ;функция LOAD
          LD B,кол-во загружаемых секторов
          LD DЕ,(23796) ;трек/сектор
          LD НL,куда грузить
          DI
          СALL 15635
          ЕI
          JP адрес стартового перехода

  Oтассемблировав эту прогу, выходим в бе-
йсик и набираем:

 2 СLЕAR адрес:RANDOMIZЕ USR 23872

  Удалив  все ненужные  строки, записываем
файл на диск. За полученным файлом дописы-
ваем загружаемый  кодовый блок, а потом их
склеиваем с помощью какого-нибудь команде-
ра, например PЕRFЕСT.
  Вот и всё. Мы имеем бейсик-моноблок. Его
можно перемещать по диску.

P.S. Приведённый  загрузчик является самым
простым, поэтому  вы можете  его совершен-
ствовать сами.
__________________________________________





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

Похожие статьи:
FЭRRUM la FОRЕVЕR - схема paсшиpения Байта до 1-го мегабайта памяти.
Fun Top'98 - Demo Compo - рассмотрение работ.
Ремонты/поломки - Вчера было анонсировано о сегодняшнем возврате в Net Оборотня.

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