ПРИЛОЖЕНИЯ
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)-
При работе в среде 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Р будет изменять содержимое ячеек памяти за пределами таблицы «оконных» переменных. Это может привести к чему угодно, вплоть до сброса компьютера.