ПРИЛОЖЕНИЯ
1. Алфавитный перечень операторов PRO-DOS*
Таблица 7.
0<!*р*Г6р
|
Параметры
|
Д<?йсТ*йе
|
стр.
|
АД *>*<
|
♦BOX
|
Xl. yl,
x2, y2
|
Рисует прямоугольник с координатами вершин (х1, у1) и (х2, у2)
|
135
|
62984
|
♦CCHR
|
—
|
Переключает шрифт с нормального на узкий
|
145
|
62535
|
♦CHR
|
—
|
Переключает шрифт с узкого на нормальный
|
146
|
62544
|
♦CLEAR
|
n
|
Очистка/заливка окна. Параметр устанавливает режим очистки/заливки
|
144
|
61559
|
♦CLS
|
—
|
Очистка/заливка окна. Эквивалентен ♦CLEAR 3
|
145
|
61643
|
♦CSIZE
|
n1, n2
|
Устанавливает размер символов графического шрифта
|
146
|
62605
|
♦DIR
|
n
|
Устанавливает направление печати для графического шрифта
|
147
|
62242
|
♦DRAW
|
x. У
|
Рисует отрезок от текущей точки до точки с координатами (х, у)
|
135
|
62752
|
♦ELLIPSE
|
x, у, a, b
|
Рисует эллипс с координатами центра (х, у) и полуосями а и b
|
136
|
63023
|
♦FBOX
|
xl, y1, x2, y2
|
Рисует прямоугольник с текстурной заливкой и координатами вершин (х1, у1) и (х2, у2)
|
138
|
62841
|
♦FILL
|
x, У
|
Осуществляет сплошную заливку замкнутого контура вокруг точки с координатами (х, у)
|
139
|
62320
|
♦GPAT
|
n
|
Устанавливает шаблон для рисования графических объектов прерывистыми линиями и текстуру для оператора ♦FBOX
|
137
|
62577
|
♦HATCH
|
X, у, addr
|
Осуществляет заливку замкнутого контура вокруг точки с координатами (х, у) изображениями символа, закодированными по адресу addr
|
139
|
62266
|
♦LARGE
|
-
|
Включает режим графического шрифта
|
147
|
62559
|
* В таблице приведен адрес подпрограммы PRO-DOS, реализующей действие оператора.
Оператор
|
|
Действие
|
Стр>
|
Адрес
|
*L!NE
|
x2, y2
|
Рисует отрезок прямой пинии с координатами концов (х1, у1) и (х2, у2)
|
135
|
62896
|
♦MATCH
|
addr
|
Заменяет заливку, полученную последним оператором ♦HATCH, на изображение символа, закодированное по адресу addr
|
141
|
62478
|
♦NEW
|
—
|
Устанавливает стандартные параметры для всех окон
|
142
|
60272
|
♦NOWRAP
|
—
|
Разрешает скроллинг при заполнении окна
|
143
|
62526
|
♦NORMAL
|
-
|
Выключает режим графического шрифта
|
147
|
62568
|
♦PAINT
|
У
|
Производит текстурную заливку замкнутого контура вокруг точки с координатами (х, у)
|
139
|
62622
|
♦PLOT
|
У
|
Рисует точку с координатами (х, у) и устанавливает в ней позицию печати для графических шрифтов
|
135
|
61321
|
♦ROLL.
|
m, n
|
Осуществляет циклический скроллинг окна на одно знакоместо, если m отлично от нуля. Параметр п определяет направление скроллинга
|
143
|
62090
|
♦SCREEN
|
addr
|
Устанавливает адрес addr начала теневого экрана
|
148
|
60255
|
♦SCROLL
|
m, n
|
Осуществляет нециклический скроллинг окна
на одно знакоместо, если m отлично от нуля. Параметр п определяет
направление скроллинга
|
143
|
62096
|
♦SWAP
|
—
|
Копирует содержимое теневого экрана в экранную область
|
149
|
60236
|
♦TPAT
|
л
|
Устанавливает шаблон для текстурной заливки окон с помощью операторов ♦CLEAR и +CLS
|
144
|
62591
|
♦TRIANGLE
|
x1, yt, x2, y2, хЗ, y3
|
Рисует треугольник с указанными координатами вершин (xl, у1), (х2, у2) и (хЗ, уЗ)
|
136
|
62931
|
♦WINDOW
|
n
|
Устанавливает текущим окно с номером п
|
141
|
60481
|
♦WPOKE
|
nl, n2
|
См. Приложение 4
|
153
|
60217
|
♦WRAP
|
—
|
Блокирует скроллинг при заполнении окна
|
143
|
62517
|
♦WSIZE
|
XI, Y1,
X2, Y2
|
Устанавливает границы текущего окна: (Х1,
Y1) — координаты левого верхнего угла; (Х2, Y2) — правого
нижнего (в знакоместах)
|
141
|
62693
|
2. Распределение памяти при работе с PRO-DOS
P_RAMT (23732)41-
Символы, определяемые пользователем
UDG (23675)-
Свободная область
- 63788
Интерпретатор PRO-DOS
- 60000
Свободная область RAMTOP (23730)-
EJJNE (23641)-
Переменные Бейсика
VARS (23627)-
Бейсик-программа PROG (23635)-
3. Вывод на принтер
При работе в среде PRO-DOS возникают
определенные сложности с выводом на принтер. Выполняемая при
инициализации PRO-DOS модификация канала "P" (см. стр. 133) дает о себе
знать при попытке обращения к принтеру: вместо бумаги вывод идет на
экран.
PRO-DOS обычно используют для написания
демонстрационных программ, как правило, не требующих работы с
принтером. Но в некоторых случаях, например, при отладке программы
бывает полезно распечатать ее листинг или значения переменных. Листинг
проще всего получить, воспользовавшись командой LUST в момент, когда
PRO-DOS еще не инициализирована оператором RANDOMIZE USR 60000.
Например, для распечатки текста фирменной демонстрационной программы
PRODOSDEMO можно загрузить ее в память с помощью оператора MERGE (во
избежание автоматического запуска программы) и выполнить LUST.
Однако описанный метод не позволяет выводить
информацию на принтер непосредственно в процессе работы программы. Эту
проблему можно решить, если перед операцией вывода на принтер
модифицировать две ячейки памяти, отвечающие за работу канала "Р", так,
чтобы перенаправить действие операторов печати LPRINT и LLIST с экрана
на принтер. А затем, сразу после печати, вернуть содержимое этих ячеек
в исходное (характерное для PRO-DOS) состояние. Указанные ячейки
располагаются в области информации о каналах42
по адресам 23749 и 23750 (если подключен и инициализирован Beta-Disk
Interface, то по адресам 23861 и 23862). В этих ячейках должен
содержаться адрес процедуры (драйвера), обслуживающей канал "Р". При
инициализации PRO-DOS в них записывается значение 60514. Перед работой
с принтером это значение надо заменить на адрес применяемого драйвера
(первая ячейка должна содержать младший байт адреса, а вторая —
старший).
Если Вы владелец фирменного ZX Spectrum с
«родным» для него принтером ZX-Printer, то нужный драйвер
«зашит» в ПЗУ по адресу 2548 (#09F4). В этом случае
программа, использующая вывод на принтер, может выглядеть так
(предположим, что дисковый интерфейс отсутствует):
10 RANDOMIZE USR 60000 20 OPEN #2, "Р"
100 LET а=100: LET Ь=200
200 POKE 23749,244: POKE 23750,9: REM Размещаем младший и
старший байты числа 2548 210 LPRINT a: LPRINT b: REM Любые операции вывода на принтер 220 РОКЕ 23749,98: РОКЕ 23750,236: REM Размещаем младший и старший байты числа 60514
Программа выведет значения переменных а и b на принтер.
Если у Вас самодельный Spectrum-совместимый
компьютер с нестандартным принтером, то нужно вместо значения 2548
подставить адрес размещения этого драйвера. Чаще всего драйверы
располагают в ОЗУ в области буфера принтера по адресу 23296. Если это
так, то достаточно заменить строку 200 в приведенном примере на
следующую (для разнообразия примем, что Вы еще и обладатель интерфейса
Beta-Disk, тогда изменится и 220-я строка):
200 РОКЕ 23861,0: РОКЕ 23862,91: REM Размещаем младший и
старший байты числа 23296 220 РОКЕ 23861,98: РОКЕ 23862,236
Разумеется, строки с номерами 200 и 220 можно
оформить в виде двух подпрограмм и вызывать их каждый раз при
необходимости вывода на принтер.
4. Дополнительные сведения об окнах
Внутренние системные переменные расположены в
области ОЗУ, начиная с адреса 60321. Для каждого окна, включая нулевое,
в этой области отведено по 20 байтов. Объем всей области переменных
равен 8x20=160 байт.
Оператор
♦WPOKE 20*w+(v—1), к
запишет число к в v-ю ячейку области системных переменных w-ro окна.
Назначение ячеек:
I 4 — размеры окна Устанавливаются оператором +WSIZE Начальные значения - 0, 0, 31 и 2^;
5 и 6 - координаты текущей позиции печати (номер столбца, номер строки). Начальные значения - 0 и 0;
7 и 8 — координаты последней выставленной
точки Изменяется только при выполнении графических операторов PRO-DOS
Начальные значения — 0 и 191;
9 — тип заливки окна Устанавливается оператором *ТРАТ Начальное значение — 0;
10 —тип линии Устанавливается оператором *GPAT Начальное значение — 255,
II и 12 - размер символов графического шрифта Изменяются оператором +CSIZE Начальные значения - 1 и 1,
13 - тип шрифта и разрешение/запрет
скроллинга, если установлен режим *NOWRAP, то значение байта равно 128
для стандартного шрифта, 160 — для графического и 192 — для
узкого Если установлен режим *WRAP, приведенные значения увеличиваются
на 4. Начальное значение — 128 (Не следует помещать в эту ячейку
неспецифицированные значения — это приводит к непредсказуемым
результатам);
14 -
направление печати Устанавливается оператором *DIR Содержимое ячейки не
совпадает со значениями параметра *DIR. 1 — вправо, 2 —
вниз, 4 — вверх и 8 — влево, диагональные направления
указываются суммой соответствующих значений горизонтального и
вертикального Начальное значение — 1,
15 — постоянные цветовые атрибуты
окна. Значение определяется по формуле, приведенной на стр 55 Начальное
значение - 56 (INK 0, PAPER 7, BRIGHT 0; FLASH 0);
16 — не используется;
17 — атрибуты OVER и INVERSE. Значение определяется по формуле k = <OVER> + 4 *<INVERSE> +32 *G
- гдев = 1, если атрибуты после инициализации окна хотя бы раз изменялись, иначев = 0. Начальное значение — 0;
18 и 19 — адрес размещения теневого
экрана; устанавливается оператором *SCREEN; первоначальное значение
— 16384 (стандартная экранная область);
20 — не используется
Недостатком оператора +WPOKE является
отсутствие «защиты от дурака»: если первый аргумент
превышает 159, то *WRAР будет изменять содержимое ячеек памяти за
пределами таблицы «оконных» переменных. Это может привести
к чему угодно, вплоть до сброса компьютера.