Netus News #07
03 января 1999

Шкатулка знаний - Процедура построения окон на ассемблере для ZX spectrum.

<b>Шкатулка знаний</b> - Процедура построения окон на ассемблере для ZX spectrum.

          ─── Шкатулка знаний ───

       Процедура построения окон.

          Маленькое вступление.

     Недавно,  на  днях,  позвонив  Рулезу
(он-же R.S.он-же Шурик Рагозин), я услушал
в трубке горестный плачь о том, какой нап-
ряг в NETUS NEWS с материалом(*).

     И вот я уже спешу на помощь.
     В  общем, люди, отдаю Вам свои окошки
и  несколько  прогов  в пакете с ними. Все
это  было  написано  в декабре 97 года и с
тех  пор  не  менялось, не пытайтесь найти
там навороченого кода: его там просто нет,
но в целом все работает.

     Итак,  сначала изложу все плюсы и ми-
нусы  проги,  а  затем  переползу к самому
описанию.

  Плюсы:
 1 - довольно быстрая;
 2 - относительно много умеет.

  Минусы:
 1 - довольно тормозная;
 2 - относительно мало умеет;
 3 - несколько напряжный формат данных для
печати.
 4 - большая по обьему (около кила).

     Ну-с, хотя минусов и больше, чем плю-
сов, это все-же лучше, чем ничего и к тому
же работает (наверно).

     Ну вот и описалово самого пакета.
     Сначала  пройдемся  по  сопутствующим
прогам.  Процедура  печати  -  PRINT юзает
шрифт 64 символа, размеры матрицы 4*6, 256
символов. Довольно быстра, хотя не фонтан.

  Обращение к ней:
 в HL - адрес текста;
 в DE - адрес на экране;
 в A  - количество букв деленное на 2.

     Использует  фонт  длинной в 4096 байт
находящийся с адреса #B000. Сам фонт длин-
ной  в  1536 байт грузится на любой адрес,
затем  распаковывается  прогом  DECHR IX -
адрес загрузки фонта. Прог RAMPAGE щелкает
страницами,  в  A - логический номер стра-
ниц.  Оопс,  забыл,  RAMPAGE  пофиксен  на
Скорпион и ему подобные компы. Подпрограм-
ма ADDR_AT - считает адреса в экрам% и ат-
рибутах.

  Вход:
  D - X координата.
  E - Y координата.

  Выход:
 HL - адрес в экране.
 DE - адрес в атрибутах.

  Теперь переходим к самим окнам.
 1 - число вложеных окон не ограничено.
 2  - буфер под сохраненный фон начинается
с  метки  WIND_BU в этом варианте с адреса
#C121,  если  конкретней  то,  в  14 банке
скорповской памяти.
 3  - буфер под адреса данных виндов начи-
нается с метки WIND_ST т.е. с адреса #C120
и  идет вниз. буфера в 32 байта хватает на
16 вложеных окон.
 4  -  рамочки  живут в файле "BOX_SPR". В
памяти  они  должны  находиться  с  адреса
#C000 в 14 банке.

  Как инициализировать винды:
 Поюзать прог INITWIN.

 Как открыть окно:
 в IX -адрес описателя, затем CALL OP_WIND
если  окно  не сохраняет под собой фон, то
лучше  не забивать буфер адресов и исполь-
зовать не OP_WIND, а CALL WIND

 Как закрыть окно:
 CALL  CL_WIND  -  последнее открытое окно
закрывается.   Закрываются  окна  открытые
только по оп_винд.

 Описание формата заголовка:
 Длинна описателя может быть разной от
 минимальной  -  6 байт ,до максимальной -
21  баит. Координаты считаются начиная с 0
т.е. 0-31 по X и 0-23 по Y

 1 - начальная координата по горизонтали;
 2 - начальная координата по вертикали;
 3 - высота окна;
 4 - ширина окна;
 5 - системный байт;
 6 - цвет рамки;
 7 - цвет самого окна;
 8,9,10,11 - байты заливки окна;
 12,13 - адрес заголовка;
 14,15 - адрес данных для печати;
 16,17 - адрес текста для печати;
 18,19  -  адрес данных для горизонтальных
линий;
 20,21 - адрес данных для вертикальных ли-
ний.

 Описатель системного байта:
биты считаются с 0 до 7;
бит установлен - да,сброшен - нет.

 7 - сохранение фона под окном;
 6  - заливка. если бит сброшен то окно не
будет заливаться не только байтами заливки
но  и  атрибутом.  Если  вы  хотите просто
очистить  окно  то  тогда его нужно залить
установив байты заливки в 0;
 5 - заголовок;
 4 - вертикальные линии;
 3 - горизонтальные линии;
 2 - печать текста;
 1 и 0 - неиспользуются.

  Заливка:
  Стандарттный  вариант  - #55,#55,#AA,#AA
хотя можно любой другой.

  Заголовок:
  Только  английские  буквы, в связи с тем
что  используется  пзушный  фонт,окончание
заголовка - код больше 128.

  Данные для печати:
 1  байт - количество слов (строк) затем 3
байта  описателя╛╛  слова (строки) описатель
слова:

 1 байт - старший байт экранного адреса;
 2 байт - младший байт экранного адреса;
 3 байт - количество букв поделенное на 2;

 Пример:
           ┌─ количество слов
           │      ┌─ описатель 1 слова
           │      │         ┌─ 2 слова
           │   ┌──┼──┐   ┌──┼──┐
DATA    DB 2,#40,#01,9,#40,#21,9
TEXT    DB "данные для печати "
        DB "фонтом 4*6 в окне "

 Данные для горизонтальных линий:
 1 байт - количество линий,
 затем 3 баита описателя линии

  Описатель линии:
X и Y координаты в знакоместах.

 1 байт - X координата;
 2 байт - Y координата;
 3 байт - длинна линии.

  Данные для вертикальных линий:
  Описатель  такой-же  как  и для горизон-
тальных.

  Ну вот и все.

With best wishes, Олег Докукин aka
                          Light - D.C.G.

  Коментарий R.S.
  Исходняк  программы в формате ассемблера
STORM находится в приложении к газете. Там
же находятся фонт и таблица с рамками.

P.S. Перепечатка данного материала и опуб-
ликование  данной программы в любых других
изданиях  разрешается  только с разрешения
автора.

По всем возникшим вопросам обращаться
по адресу VEC-04.00

-------------------------------------------
* с хорошим материалом. Примечание главно-
го редактора.



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

Дела сисопские - ZXNet под бой курантов...

Упаковщики - полное и исчерпывающие описание упоковщика и распаковщика данных ZXZIP и ZXUNZIP.

Шкатулка знаний - Процедура построения окон на ассемблере для ZX spectrum.

Hobetta - Краткое описание Hobetta.

Технодром - схема расширения ОЗУ дл 512 в копмьютера с общем полем памяти.

АнтиСказки - с моралью на пути к рынку.

Частотный регламент - Частотный регламент радиостанций в г.Санкт-Петербурге.

NETUS - Список станций сети NETUS.

Реклама - aвторы, соавторы, сосоавторы и т.д.


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

Похожие статьи:
Short Story: Бизнec Джoрджa - Глyбoкo в cвoem лoгoвe, oбвив длиннoe, зoлoтиcтo-зeлeнoe тeлo вoкрyг нeбoльшoгo cтaдa oвeц, Дaрт cпaл бecпoкoйныm, трeвoжныm cнom...
Scene - интервью с Screamer'om взятое на CAFe'2002.
Война за феньки - Хроника однодневной войны (Игровая секция Толкиновского Общества в действии).
Программистам - Конверсия чисел в десятичный формат.
Вступление - Описание возможностей оболочки.

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