ZX Format #03
29 февраля 1996
  IS-DOS  

IS-DOS - "Оконная система IS-DOS".

<b>IS-DOS</b> -

Рубрика "IS-DOS - программистам". No 3

              Елисеев В. А.
        "Оконная система IS-DOS"
          (журнальный вариант)

(C) PENCRAFT 1995
(C) IskraSoft 1995

Окончание, начало в No 1, 2.

        Вспомогательные рестарты.
_________________________________________

               wtpos (#6B)

    К двум последним рестартам печати не-
посредственно    примыкает        рестарт
wtpos(#6B),  позволяющий   модифицировать
текущие координаты печати  для  рестартов
lnstr и str.

    Рестарт  wtpos  вычисляет  абсолютные
логические координаты  печати  по  значе-
ниям Y-coord и Print pos. из вектора  ок-
на, на который указывает  содержимое  ре-
гистра IX, с учетом смещения по Y,  зада-
ваемого в регистре H и по X,  задаваемого
в регистре L, и помещает их  в  системную
переменную XYPOS, находящуюся  в  векторе
символьного устройства вывода.  Эта  сис-
темная  переменная  активно  используется
рестартом ttyout(#0A), на основе  которо-
го созданы  многие  из  рестартов  печати
уровня WIND.SYS.

    Следует упомянуть о том, что для  за-
дания  координат  печати  можно   пользо-
ваться также и  рестартом  prapd(#0C)  из
уровня DOS.SYS, который помещает  в  сис-
темную переменную XYPOS  значения  регис-
тров H (Y-coord в строках) и L (X-coord в
знакоместах 6*8).

   Пример с использованием prapd:

;****************************************

;Листинг 13 Установка координат
;           для lnstr(#6D)

       ORG  #5D64


       CALL CLS       ;очистка экрана

       LD   H,5       ;Y-coord
       LD   L,2       ;X-coord
       LD   C,#0C     ;код рестарта #0С
                      ;из уровня DOS.SYS
       RST  #10

       LD   HL,TEXT   ;адрес текста
       LD   C,#6D     ;код рестарта lnstr
       LD   B,37      ;кол-во символов
       RST  #10       ;печать строки

       CALL WAIT
       JP   EXIT

;текстовый буфер

TEXT   DEFM "Печать строки "
       DEFM "с координатами "
       DEFM "X=2, Y=5"

;дополнительные процедуры

CLS    LD   C,#73     ;рестарт cls
       RST  #10       ;для очистки экрана
       RET

WAIT   LD   C,#07     ;рестарт ttyin
       RST  #10       ;для ожидания нажа-
       RET            ;тия клавиши

EXIT   XOR  A         ;стандартный выход
       LD   A,#F4     ;в IS-DOS
       RET

;****************************************

   То же с использованием wtpos:

;****************************************

;Листинг 14 Установка координат  wtpos
;           для lnstr(#6D)

       ORG  #5D64

;исходные данные:

;      Y-coord окна =3
;      X-coord окна =0
;      Print pos    =1

;требуемые координаты печати:

;      X=2
;      Y=5

;следовательно:

;      H=2 (смещение по Y)
;      L=1 (смещение по X)

       CALL CLS       ;очистка экрана

       LD   IX,WIND   ;вектор окна
       LD   A,2       ;открытие окна
       LD   C,#61
       RST  #10

       LD   H,2       ;Y-смещение
       LD   L,1       ;X-смещение
       LD   C,#6B     ;код рестарта wtpos
       RST  #10

       LD   HL,TEXT   ;адрес текста
       LD   C,#6D     ;код рестарта lnstr
       LD   B,37      ;кол-во символов
       RST  #10       ;печать строки

       CALL WAIT
       JP   EXIT

;вектор окна

WIND   DEFB 0
       DEFB 3
       DEFB 7
       DEFB 30
       DEFB %00001111
       DEFB %00000001
       DEFB 1
       DEFB 40

;текстовый буфер

TEXT   DEFM "Печать строки "
       DEFM "с координатами "
       DEFM "X=2, Y=5"

;дополнительные процедуры

CLS    LD   C,#73     ;рестарт cls
       RST  #10       ;для очистки экрана
       RET

WAIT   LD   C,#07     ;рестарт ttyin
       RST  #10       ;для ожидания нажа-
       RET            ;тия клавиши

EXIT   XOR  A         ;стандартный выход
       LD   A,#F4     ;в IS-DOS
       RET

;****************************************

               scrol (#70)

    Еще один чрезвычайно полезный при ра-
боте с текстами рестарт - scrol(#70).  Он
позволяет смещать содержимое рабочей  об-
ласти окна на строку вверх или вниз.

    При  работе  рестарта   предусмотрено
программирование заполнения крайнего  ле-
вого и крайнего правого знакомест в осво-
бодившейся строке  (нижней  при  движении
вверх и наоборот).

   Входные параметры:

  IX - вектор окна

  HL - значение крайних байтов заполнения
       освободившейся строки (образ коди-
       руется в  двоичном  представлении,
       например: одинарная линия по  краю
       кодируется как 10000000 00000001 и
       т. п. )

  A  - режим работы:

       A=0 - настройка рестарта на вектор
       окна  -  вызывается один раз перед
       началом   работы  в  данном  окне.
       Настройка сохраняется на все время
       работы  до следующего вызова scrol
       c нулевым значением в регистре A.

       A=1 - скроллинг на строку вверх
       A=2 - скроллинг на строку вниз

    Для нормальной работы scrol необходи-
мы еще два параметра, добавляемые к стан-
дартному вектору окна  и  располагающиеся
непосредственно перед ним:

  IX-1 скорость   скроллинга  - возможные
       значения  -  1, 2, 4, 8 определяет
       время,  в  течение которого строка
       перемещается на 8 пикселей по вер-
       тикали

  IX-2 задержка   скроллинга  - возможные
       значения от 0 до  255 - регулирует
       время паузы между последовательны-
       ми вызовами рестарта

    Подбором этих двух параметров  дости-
гается наибольшая плавность движения  при
требуемой скорости скроллинга.

   Пример:

;****************************************

;Листинг 15 Применение scrol(#70)

       ORG  #5D64

;открытие окна

       CALL CLS
       LD   IX,WIND
       LD   C,#61
       LD   A,2
       RST  #10

;настройка процедуры scroll
;на вектор окна:

       LD   IX,WIND   ;вектор окна
       LD   C,#70     ;код рестарта
       LD   HL,#0000  ;заполнение
       XOR  A         ;в рег. A - 0
       RST  #10

;печать строки prstr подфункция 3

       LD   IX,WIND
       LD   HL,TEXT
       LD   C,#68
       LD   E,3
       LD   A,%00001010
       LD   B,1
       RST  #10

;скроллинг окна вверх в цикле на 5 строк

       LD   B,5

M1     PUSH BC
       LD   C,#70     ;код рестарта
       LD   A,1       ;скроллинг вверх
       LD   IX,WIND   ;вектор окна
       LD   HL,#0000  ;заполнение
       RST  #10
       POP  BC
       DJNZ M1

       CALL WAIT
       JP   EXIT

;вектор окна + 2 байта для рестарта
;scrol(#70)

       DEFB 25        ;задержка
       DEFB 01        ;скорость
WIND   DEFB 0
       DEFB 5
       DEFB 12
       DEFB 25
       DEFB %00000111
       DEFB %00000001
       DEFB 2
       DEFB 25

;текст для печати

TEXT   DEFM "Так работает scrol(#70) "
       DEFB #0D
       DEFB #03

;Дополнительные процедуры:

CLS    LD   C,#73     ;рестарт cls
       RST  #10       ;для очистки экрана
       RET

WAIT   LD   C,#07     ;ожидание клавиши
       RST  #10
       RET

EXIT   XOR  A         ;выход в IS-DOS
       LD   A,#F4
       RET

;****************************************

    Применение рестарта  scrol  вместе  с
рестартами печати (например prstr) позво-
ляет организовать на экране режим  "бегу-
щего текста".

   Рассмотрим еще один пример:

;****************************************

;Листинг 16 Программа "бегущий текст"

       ORG  #5D64

;процедура открытия окна

       CALL CLS
       LD   IX,WIND
       LD   C,#61
       LD   A,2
       RST  #10

;настройка процедуры scrol
;на вектор окна:

       LD   IX,WIND
       LD   C,#70
       LD   HL,0
       XOR  A
       RST  #10

;входные параметры для процедуры печати

       LD   A,%00001010

;в рег. A - биты 7 и 6 определяют режим
;                      выравнивания
;           биты 5...0 определяют отступ
;                      от верхнего края
;                      окна

       LD   B,1       ;номер строки в
                      ;тексте (строки
                      ;отделяются друг
                      ;от друга символом
                      ;с кодом #0D)

M1     PUSH AF        ;сохранить рег. A
       PUSH BC        ;сохранить BC

;печать строки по номеру ее в тексте

       LD   IX,WIND   ;адрес вектора окна
       LD   HL,TEXT   ;адрес нач. текста
       LD   C,#68     ;код prstr
       LD   E,3       ;код подфункции
       RST  #10

       CALL SCROLL    ;вызов scrol

       POP  BC        ;восстановить BC
       INC  B         ;увеличить номер
                      ;строки в тексте

       LD   A,B       ;проверка на число
       CP   9         ;напечатанных строк
       JP   Z,END     ;выход, если все
                      ;строки напечатаны
       POP  AF        ;восстановить A
       JR   M1        ;переход к печати
                      ;следующей строки

;вектор окна + 2 байта для рестарта
;scrol(#70)

       DEFB 25        ;задержка
       DEFB 01        ;скорость
WIND   DEFB 1
       DEFB 1
       DEFB 12
       DEFB 28
       DEFB %00000111
       DEFB %00000001
       DEFB 4
       DEFB 35

;текст для печати

TEXT   DEFM "     Эта программа "
       DEFB 13
       DEFM " представляет собой пример"
       DEFB 13
       DEFM "   организации в системе "
       DEFB 13
       DEFM "  IS-DOS работы с экраном "
       DEFB 13
       DEFM "  в режиме 'бегущий текст'"
       DEFB 13
       DEFM " Вывод текста организуется"
       DEFB 13
       DEFM  "   при помощи рестартов"
       DEFB 13
       DEFM "  scrol(#70) и prstr(#68)"
       DEFB 13

;Дополнительные процедуры:

CLS    LD   C,#73     ;рестарт cls
       RST  #10       ;для очистки экрана
       RET

SCROLL LD   C,#70     ;процедура скрол-
       LD   A,1       ;линга окна на
       LD   IX,WIND   ;строку вверх
       LD   HL,#0000
       RST  #10
       RET

END    POP  AF        ;завершение работы
       CALL WAIT
       JR   EXIT

WAIT   LD   C,#07     ;ожидание клавиши
       RST  #10
       RET

EXIT   XOR  A         ;выход в IS-DOS
       LD   A,#F4
       RET

;****************************************

                                     ...



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

IS-DOS - "IS-DOS - начинающим" No 3

IS-DOS - "Оконная система IS-DOS".

IS-DOS - "Формат объектных модулей *.obj IS-DOS Ассемблера".

IS-DOS - "Формат таблицы локальных символов IS-DOS Ассемблера".

Авторы журнала - ZX-Format No.3

Железо - Исправление ошибки TR-DOS.

Железо - новая звуковая карта: General Sound.

Железо - новая модель Спектрума: Scorpion ZS 256 Turbo+.

Железо - о турбировании Спектрум-машин.

Железо - обзор модемов для ZX Spectrum.

Железо - Шинная архитектура Спектрума (концептуальная разработка).

Игрушки - "Last battle" (Последняя битва) подробное описание.

Игрушки - 48 утюгов (второй уровень).

Игрушки - десятка наиболее продаваемых в С.-Петербурге.

Игрушки - описание игры BATMAN-II.

Игрушки - что новенького: The Light Corridor, Jonny Quest in Doctor Zins, Bedlam, Bubble Dizzy, Navy Seals, Пираты.

Конкурс - конкурс на компьютерный анекдот.

Лотерея - лотерея для читателей журнала.

От авторов - о третьем выпуске журнала.

Отдохнём - HУ, ЮЗЕР, ПОГОДИ!

Отдохнём - глюкодром: Самые ОПЕЧАТКИ.

Помощь - Очередной трактат об очердной оболчке и не только.

Почтовый ящик - дискуссия.

Почтовый ящик - доска обьявлений.

Почтовый ящик - письма читателей.

Премьера - TASM 4.0 (Turbo ASseMbler for ZX-Spectrum 128k)

Премьера - Приключения ВИННИ ПУХА.

Программистам - Basic для всех №3.

Программистам - Адаптация игр: адаптация программ на диск.

Программистам - Адаптация игр: зыкрытые коды.

Программистам - адаптцация игр: бессмертия.

Программистам - ассемблер: Экскурс в анатомию ZX

Разное - Amiga: вопросы и ответы.

Разное - Амига: новости.

Разное - Перспективы П/О.


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

Похожие статьи:
Дискуссия - Письмо от IMPERIO: о "продуктах" творческой деятельности синклеристов.
Перспективы ПО - новая игрушка Citadel и навороты журнала.
Вечный думатель - Любовь к заводным апельсинам.
Отдых - известные на весь мир законами Мерфи.
Interface - интервью с рыбинским кодером и музыкантом Moran/CPU.

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