ZX Review #7-8-9-10
08 ноября 1997

Этюды - Скроллинг строк текста в заданном окне. Атрибутный скроллер. Диагональный скроллинг.

(c) Командин И.Г., г.Калуга

   Хочу предложить на ваше  рас-
смотрение  свои  программки, над
которыми  я  работал   последнее
время.

   1. Эта  программа   выполняет
скроллинг в заданном окне  целых
строк текста (словом, как в тит-
рах к фильмам).
144.
10 ;UP-SCROLLER
20 ;(C) ZX-MANIACS
30        ORG     40000
40        ENT
50 INIT   LD      HL,TEXT
60        LD      (TEXTP),HL
70 SCROLL LD      HL,(TEXTP)
80        XOR     A
90        LD      (LINE),A
100       LD      A,(HL)
110       OR      A
120       JR      Z,INIT
130       LD      B,8
140 M1    PUSH    BC
150       PUSH    HL
160       LD      DE,22506
170       LD      B,12
180 M2    PUSH    HL
190       LD      A,(HL)
200       LD      H,0
210       LD      L,A
220       ADD     HL,HL
230       ADD     HL,HL
240       ADD     HL,HL
250       PUSH    DE
260       LD      DE,(23606)
270       ADD     HL,DE
280       LD      A,(LINE)
290       LD      D,0
300       LD      E,A
310       ADD     HL,DE
320       POP     DE
330       LD      A,HL
340       LD      (DE),A
350       INC     DE
360       POP     HL
370       INC     HL
380       DJNZ    M2
390       CALL    SRL_UP
400       POP     HL
410       POP     BC
420       LD      A,(LINE)
430       INC     A
440       LD      (LINE),A
450       DJNZ    M1
460       LD      HL,(TEXTP)
470       LD      DE,12
480       ADD     HL,DE
490       LD      (TEXTP),HL
500       RET
510SRL_UP LD      DE,#400A
520       LD      H,D
530       LD      L,E
540       INC     H
550       LD      BC,#0CBF
560 UPS1  PUSH    BC
570       PUSH    HL
580 UPS2  LD      A,(HL)
590       LD      (DE),A
600       INC     HL
610       INC     DE
620       DJNZ    UPS2
630       POP     DE
640       LD      H,D
650       LD      L,E
660       INC     H
670       LD      A,H
680       AND     7
690       JR      NZ,NXT_U
700       LD      BC,#00E0
710       SBC     HL,BC
720       LD      A,H
730       AND     7
740       JR      Z,NXT_U
750       LD      BC,#0700
760       SBC     HL,BC
770 NXT_U POP     BC
780       DEC     C
790       RET     Z
800       JR      UPS1
810 LINE  DEFB    0
820 TEXTP DEFW    TEXT
830 TEXT  DEFM    "**** UP ****"
840       DEFM    "* SCROLLER *"

850       DEFM    "*IS WRITTEN*"
860       DEFM    "**** BY ****"
870       DEFM    "* KOMANDIN *"
880       DEFM    "*** ILYA ***"
890       DEFM    "*ZX-MANIACS*"
900       DEFM    "*****  *****"
910       DEFM    "            "
920       DEFM    "            "
930       DEFM    "            "
940       DEFB    0
2
   Теперь  расскажу  о  том, как
изменить окно вывода.  В  строке
160 задается адрес нижнего лево-
го  угла  окна, в  строке  510 -
верхнего левого. Ширина окна за-
дается в строках 170  и  480  (в
знакоместах). В строке 550 в ре-
гистр B заносится ширина окна (в
знакоместах), а  в  регистр  C -
высота   окна-1  (в   пикселах).
Текст программа считывает из па-
мяти по  строкам, равным  ширине
окна, так что и заносить его ту-
да надо таким же образом.
   В программе почти без измене-
ний используется процедура Кули-
кова Вадима  SRL_UP (строки 510-
800  ZX-РЕВЮ N3'96, стр.34).  По
ходу дела в  вышеназванной  про-
цедуре  нашлась  одна  ошибочка.
Строка 60 должна выглядеть  сле-
дующим образом:

          LD      BC,#20BF

иначе на экран вытягивается пер-
вая строка из области атрибутов.

   2. Следующая программа - нес-
колько экстравагантный  атрибут-
ный скроллер  ("поставленный  на
попа").
140.
INIT      LD      HL,TEXT
          LD      (TEXTP),HL
          LD      HL,BUFF
          LD      DE,BUFF+1
          LD      BC,7
          LD      (HL),0
          LDIR
          XOR     A
          LD      (COL),A
          LD      A,48
          LD      (COLOUR),A
SCROLL    LD      A,(COL)
          OR      A
          JR      Z,LDIRB
          LD      HL,22528   ;!
          LD      DE,22529   ;!!
          LD      BC,7
          LD      (HL),0
          LDIR
          LD      B,8
          LD      DE,22528   ;!
          LD      HL,BUFF
L1        AND     A
          SLA     (HL)
          JR      NC,NEXT
          LD      A,(COLOUR)
          LD      (DE),A
NEXT      INC     HL
          INC     DE
          DJNZ    L1
          LD      B,23    ;!!!!!
          LD      HL,23232;!!!!
          LD      DE,23264;!!!
L2        PUSH    BC
          PUSH    HL
          PUSH    DE
          LD      BC,8
          LDIR
          POP     DE
          POP     HL
          LD      D,H
          LD      E,L
          LD      BC,32
          SBC     HL,BC
          POP     BC
          DJNZ    L2

          LD      A,(COL)
          DEC     A
          LD      (COL),A
          RET
LDIRB     LD      A,8
          LD      (COL),A
          LD      HL,(TEXTP)
          LD      A,(HL)
          OR      A
          JR      Z,INIT
          INC     HL
          LD      (TEXTP),HL
          CP      16
          JR      NZ,PASS
          LD      A,(HL)
          LD      (COLOUR),A
          INC     HL
          LD      (TEXTP),HL
          JR      LDIRB
PASS      LD      H,0
          LD      L,A
          ADD     HL,HL
          ADD     HL,HL
          ADD     HL,HL
          LD      DE,(23606)
          ADD     HL,DE
          LD      DE,BUFF
          LD      BC,8
          LDIR
          JR      SCROLL

BUFF    DEFS 8
COL     DEFB 0
COLOUR  DEFB 48
TEXTP   DEFW TEXT
TEXT    DEFB 16,120,127,32,16,16
        DEFM "ZX-MANIACS "
        DEFB 16,32
        DEFM "(KALUGA'"
        DEFB 16,48
3        DEFM "1996"
        DEFB 16,32
        DEFM ")                "
        DEFB 0
2
   Как всегда, о том, как менять
окно вывода скроллера. В строки,
помеченные восклицательным  зна-
ком, надо занести  адрес  в  об-
ласти атрибутов, соответствующий
верхнему  левому  углу  окна.  В
строку с двумя  восклицательными
знаками  надо  внести  адрес  на
единицу больший. В строку с тре-
мя знаками - адрес нижнего лево-
го угла окна, в строку с четырь-
мя знаками - адрес, на 32 меньше
предыдущего. В строку же с пятью
восклицательными  знаками  зано-
сится высота окна  (в  знакомес-
тах).
   Вы можете по ходу строки  ме-
нять цвет  выводимых  атрибутов.
Для этого  в  текст  вставляется
код 16, а за ним значение  необ-
ходимого атрибута. Значение это,
как  известно,  вычисляется   по
формуле

FLASH*128+BRIGHT*64+PAPER*8+INK

Только не забудьте, что  в  этом
скролле цвет букв - это PAPER, а
цвет фона - INK.

   3. Данная  программа  -  диа-
гональный  скроллинг.  Точнее  -
псевдодиагональный  (не  как   у
IWAMOTO  в  STEG'е), но смотрит-
ся тоже неплохо. Правда, советую
специально для SCROLL'а  сделать
знакогенератор с удлиненной вер-
хней частью (когда символ  зани-
мает в высоту  семь  пикселов, и
пустой  в  знакоместе   остается
только нижняя строка).
140.
INIT      LD      HL,TEXT
          LD      (TEXTP),HL
          XOR     A
          LD      (COL),A
          LD      HL,BUFF
          LD      DE,BUFF+1
          LD      BC,7
          LD      (HL),0
          LDIR
SCROLL    LD      A,(COL)
          OR      A
          JR      NZ,LDIRB
          XOR     A
          LD      HL,BUFF
          LD      DE,22523
          LD      B,8
M1        SLA     (HL)
          RRA
          INC     HL
          DJNZ    M1
          LD      (DE),A
          LD      HL,16389
          LD      B,24
M2        PUSH    BC
          LD      B,8
M3        LD      D,H
          LD      E,L
          CALL    DOWN
          PUSH    HL
          PUSH    DE
          LD      A,(HL)
          SLA     A
          LD      (DE),A
          DEC     HL
          DEC     DE
          LD      A,(HL)
          RLA
          LD      (DE),A
          DEC     HL
          DEC     DE
          LD      A,(HL)
          RLA
          LD      (DE),A
          POP     DE
          POP     HL
          DJNZ    M3
          POP     BC
          INC     HL
          DJNZ    M2
          LD      A,(COL)
          DEC     A
          LD      (COL),A
          LD      HL,22522
          LD      DE,22523
          LD      BC,2
          LD      (HL),0
          LDIR
          RET
LDIRB     LD      HL,(TEXTP)
          LD      A,(HL)
          OR      A
          JR      Z,INIT
          INC     HL
          LD      (TEXTP),HL
          LD      H,0
          LD      L,A
          ADD     HL,HL
          ADD     HL,HL
          ADD     HL,HL
          LD      DE,(23606)
          ADD     HL,DE
          LD      DE,BUFF
          LD      BC,8
          LDIR
          LD      A,8
          LD      (COL),A
          JR      SCROLL
COL    DEFB 0
BUFF   DEFS 8
TEXTP  DEFW TEXT
TEXT   DEFM "45 - ANGLE SCROLL "
       DEFM "IS WRITTEN BY "
       DEFM "KOMANDIN ILYA "
       DEFM "(ZX-MANIACS) "
3       DEFM "KALUGA' 1996"
       DEFM "                  "
       DEFM "                  "
       DEFB 0
2
   Эта программа довольно  замо-
рочена и не делает никаких  про-
верок, так что  лучше  ничего  в
ней не менять. Кстати, необходи-
мо оставлять по бокам от бегущей
строки пустоту шириной в  знако-
место, т.к. скроллируется полоса
шириной в три знакоместа.
   Ну и  напоследок  о  том, как
запускать эти программы. В прин-
ципе, для всех трех подходит од-
на и та же процедура:
140.
          CALL    INIT
LOOP      HALT
          CALL    SCROLL
          LD      A,127
          IN      A,(254)
          RRA
          JR      C,LOOP
          RET2

           *   *   *




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

TR-DOS для начинающих - Окончание.

Компьютерная новелла - Prince of Persia.

Компьютерная новелла - Лазерная бригада (по игре Laser Squad).

Перекресток драконов - Игра Rapscallion.

Перекресток драконов - Игра The Runes of Zendos.

Перекресток драконов - Игра The Saga.

Перекресток драконов - Игра Witch's Cauldron.

Перекресток драконов - Создаём Адвентюру. Обзор редакторов.

Перекресток драконов - Создаём словарь к Адвентюрной игре.

Программы, которые мы выбираем - Возможные последствия использования недокументированных команд.

Программы, которые мы выбираем - О замеченных шероховатостях в работе некоторых программ и пожелания к следующим версиям.

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

Программы, которые мы выбираем - Несколько предложений по усовершенствованию ассемблера.

Программы, которые мы выбираем - Предложения по доработке ZX Word v2.5.

Программы, которые мы выбираем - Программа "Эмулятор Спектрума" v1.2.

Программы, которые мы выбираем - Что хотелось бы иметь в идеальном ассемблере.

Ретро - 40 лучших процедур: Копирование данных в памяти.

Ретро - 40 лучших процедур: Обмен токена.

Ретро - 40 лучших процедур: Определение адреса БЕЙСИК-строки.

Ретро - 40 лучших процедур: Определение длины БЕЙСИК-программы.

Ретро - 40 лучших процедур: Определение размера свободной памяти.

Ретро - 40 лучших процедур: Поиск и замещение строки.

Ретро - 40 лучших процедур: Поиск подстроки.

Ретро - 40 лучших процедур: Поиск строки.

Ретро - 40 лучших процедур: Составление списка переменных.

Ретро - 40 лучших процедур: увеличение и копирование экрана.

Ретро - 40 лучших процедур: Удаление REM-строк.

Ретро - 40 лучших процедур: Удаление блока программы.

Советы экспертов - Игра Fredloader.

Советы экспертов - Игра Robin of Sherwood: The Touchstones of Rhianon.

Советы экспертов - Игра Scorpions: Die Machines.

Советы экспертов - Игра Terropods.

Страничка iS-DOS - Описание рестартов системы IS DOS.

Форум - Алгоритм распознавания символов.

Форум - Время выполнения недокументированных команд процессора Z80.

Форум - Концепция экрана высокого цветового разрешения.

Форум - Несколько Pokes к играм. Программа Hacman96.

Форум - По поводу новых DOS и BIOS для Спектрума.

Форум - Программа Multicolor на любой модели компьютера. Использование 2-го экрана для Multicolor'а. Демонстрация текста. Электронные журналы.

Форум - Проект ZX Config.

Форум - Усовершенствование Art Studio. Идеи относительно компрессии файлов.

Форум - Эмулятор ZX Spectrum на IBM. По поводу шестнадцатеричной системы счисления. Программа ZX-Stars. Странности в Elita

Форум - Эффекты на бордюре и Multicolor.

Читатель-читателю - ZX Spectrum 128 - новые возможности, новые проблемы.

Читатель-читателю - Группа 'Light'. Спектрум и экспертная система.

Читатель-читателю - Драйвер принтера для Scorpion'а.

Читатель-читателю - Печать чисел в различных системах счисления.

Читатель-читателю - Программирование аркадной игры со скроллингом экрана.

Читатель-читателю - Процедура печати меток ассемблера XAS для монитора-отладчика STS 4.3.

Этюды - Атрибутная бегущая строка. "Гасилка" экрана. Упрощенный вариант процедуры "Занавес". Процедура гащения картинки. Процедура проявления картинки по точкам.

Этюды - Графический эффект "цветные полосы".

Этюды - Драйвер экрана для печати по 64 символа в строке.

Этюды - Комплект защит загрузчиков.

Этюды - Обращение к диску в режиме IM 2. Работа с диском нестандартного формата.

Этюды - Печать символа, увеличенного в 8 раз. Программа "наливания" экрана. Процедура гашения экрана по точкам. Очистка экрана как в Terminator'е. Поиск последовательности символов в памяти. Система перекодировки символьного набора.

Этюды - Программа - каталогизатор дисков.

Этюды - Программа вывода значений амплитуды каналов муз. сопроцессора на бордюр.

Этюды - Программа вывода картинки.

Этюды - Программа зажигания спрайта.

Этюды - Программа очистки заданного окна экрана.

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

Этюды - Процедура печати чисел.

Этюды - Процедура прорисовки символа с помощью атрибутов.

Этюды - Процедура проявления картинки. Fade-OUT эффект (картинка уходит за края экрана). Графический эффект "Фонтан". Fade-OUT эффект, имитирующий выключение телевизора. Процедура "зажигания" картинки. Программа плавной прорисовки картинки.

Этюды - Процедура рисования линии.

Этюды - Процедура составления оптимальной таблицы символов.

Этюды - Скроллинг строк текста в заданном окне. Атрибутный скроллер. Диагональный скроллинг.

Этюды - Спрайтовый скроллер. Процедуры проявления экрана.

Этюды - Укороченная процедура индикации амплитуды каналов муз. сопроцессора. Способ вычитания константы из регистровой пары HL.

Этюды - Формула для вычисления дня недели.


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

Похожие статьи:
Новости - Ребята из группы Spark почти доделали свою гейму под названием Городки.
Номер 17 - Егор ЕЛАТОМЦЕВ (часть 4).
Реклама - Пpиобpету pазличную инфоpмацию по "железу" ZX Spectrum.

В этот день...   25 августа