Прикладная графика 1992 г.

Приложение 3 - организация каналов пользователя для печати нестандартным шрифтом. Заключение.


ПРИЛОЖЕНИЕ 3

Организация каналов пользователя для печати
нестандартными шрифтами.

Прежде чем переити непосредственно к теме, вспомним о том.
какие системные переменные участвуют в организации канальной
информации в "Спектруме".

Системная переменная CHANS - "адрес канала данных". Ее ад-
рес - 5C4FH (£3631). В том случае, если отсутствует "БЕТА-диск"
интерфейс, значение этой системной переменной равно 5CB6H
(23734). Если "БЕТА-диск" подключен, то эта величина больше на
И2 байтов и равна, таким образом. 5D26H (23646). Если просмо-
треть содержимое (дамп) памяти с указанного адреса (в случае
магнитофонного варианта - 23734 - это сразу же за таблицей сис-
темных переменных), то можно увидеть, как располагается каналь-
ная информация существующих каналов.

После включения компьютера этих каналов - 4. При этом на
информацию о каждом канале отводится по 5 байтов памяти (см
Листинг.1).

листинг.1

Адрес Содержимое Значение

(дес. ) (шестн. > (шестн. )

г?734 5СВ6 F4 PRINT=09F4H Процедура ПЗУ

£3735 5СВ7 09 "PRINT-OUT"

£3736 5СВ8 AS INFUT=10A8H Процедура ПЗУ

£3737 5СВ9 10 v "KEY-INPUT"

£3738 5CBA 4B Символ "К" - канал клавиатуры

£3739 5СВВ F4 FRINT=09F4H Процедура ПЗУ

£3740 5СВС 09 "PRINT-OUT"

£3741 5CBD С4 INPUT=15C4H Процедура ПЗУ

£374£ 5СВЕ 15 RST 8

£3743 5CBF 53 Символ "S" - канал экрана

Адрес Содержимое Значение

(дес. ) шестн. ) шести. )

23744 5СС0 ei FRINT=09F4H Процедура ПЗУ

23745 5СС1 OF "PRINT-OUT"

23746 5СС2 С4 INPUT=15C4H Процедура ПЗУ

23747 5ССЗ 15 RST 6
23746 5СС4 52 Синвол "R" - внутренний канал

23749 5СС5 F4 PRINT=09F4H Процедура ПЗУ

23750 5СС6 09 "PRINT-OUT"

23751 5СС7 С4 INPUT=15C4H процедура ПЗУ

23752 5СС8 15 RST 8

23753 5СС9 50 Синвол "Р" - каиал принтера

23754 5ССА 80 наркер <КОНЕЦ>

23755 5ССВ ... Начало Бейсик-программы - (PROG)

из приведенной в Листинге.1 информации видим, что канал
"К" - клавиатура - обслуживается двумя процедурами, вывод
(PRINT) и ввод (INPUT). Их адреса соответственно равны 09F4H и
10А8Н.. Ввод - это опрос клавиш, а вывод - это печать в двух
нижних строках экрана. хотя физически нижние две строки при-
надлежат экрану, но по архитектуре "Спектрума" в режиме ввода
данных или редактирования Бейсик-строки нижние две строки отно-
сятся. вовсе не к экрану, а к клавиатуре там мы видим резуль-
тат нажатия на клавиши.

канал "S" - экран, а точнее, его основная часть, т. е. вер-
хние 22 строки - обслуживается только процедурой PRINT (той же,
что и д^я клавиатуры). А ввод (INPUT) для экрана невозможен -
вместо процедуры INPUT для экрана задан адрес 15С4Н - это вызов
процедуры ПЗУ для печати сообшения об ошибке с кодом перехвата
12Н, что.означает: "Invalid I/O device".

каиал "r" - является внутренним каналом "Спектрума", он слу-
жит для регенерации памяти и его практическое использование
требует особой осторожности. Касаться этой темы мы пока не бу-
дем.

Канал "Р" - принтер - изначально имеет тот же адрес проце-
дур PRIHT. что и экран. Так же. как и для экрана INPUT - невоз-
можен. Но в том случае, когда производится инициализация ин-
терфейса принтера, вместо адреса 09F4H для процедуры PRINT за-
дается другой адрес - в зависимости от используемого интерфей-
са. Например, в тон случае, если используется интерфейс
ZX-LPRINT III. то после инициализации его конандои LPRINT, для
канала принтера устанавливается адрес процедуры PRINT=OEFCH.

заканчивается канальная информация маркером конца - 80Н.
далее, с адреса 5ССВН (23755) располагается Бейсик-программа.
Этот адрес указан в систениои переменной PROG.

Для организации дополнительных пользовательских каналов,
позволяющих выполнять, скажем, вывод на экран при помоши проце-
дур. отличных от традиционной, можно пойти следующим путем.
Надо, используя процедуру ПЗУ. отодвинуть всю область БЕИСИК-
системы на 5 байтов вверх для каждого дополнительного канала.
При этом должны быть соответствующим образом скорректированы
все системные переменные - в первую очередь - PROG. Для этого
в ПЗУ имеется специальная процедура 1655Н (05717), которая ис-
пользуется. когда иадо вставить БЕИСИК-строку между уже имею-
щимися строками, раздвинув их. эта процедура называется
MAJCE_R00M Перед тем. как ее вызывать, задают в регистровой
паре HL адрес, указывающий на точку, следующую за нестом
вставки, а в регистровой паре ВС задают длину этой "вставки".

Не вдаваясь в подробности этого мероприятия, можен заме-
тить. что изменение PROG крайне нежелательно, так как часто в
нулевой строке расположены блоки кодов, которые не могут быть
загружены в иное место памяти или к иим происходит обращение
из Бейсика без учета установленного значения PROG. Всю "голов-
ную боль", которую доставляет изменение PROG, сполна могут оце-
нить владельцы "БЕТА-диск" интерфейсов. У* кто-кто. а они-то
сполна это прочувствовали, адаптируя программы под диск.

Между тем. существует способ, который позволяет создавать до
трех дополнительных пользовательских каналов, не изменяя PROG.
При этом "Спектрум" работает как обычно, совершенно ничего не
подозревая об "обмане".

Но. прежде, чем перейти к изложению этого приема, надо

вспомнить еше об одной системной переменной - STRHS - точнее

считать ее даже и не переменной, а таблицей длинои 36 байтов.

Ее адрес - 5С10Н (23566) - см. Листинг.2.

Листинг.2

Адрес Содержимое Поток Канал Рассчет адреса

(дес. ) (шестн. ) (шестн. )

23566 5С10 01 FD "К" 23734-1+1=23734

23569 5СИ 00

23570 5С12 06 FE "S" 23734-1+6=23739

23571 5С13 00

23572 5С14 ОБ FF "R" 23734-1+11=23744

23573 5С15 00

23574 5С16 01 00 "К" 23734-1+1=23734

23575 5С17 00

23576 5С18 01 01 "К" 23734-1+1=23734

23577 5С19 00

23576 5С1А 06 02 "S" 23734-1+6=23739

23579 5С1В 00

23560 5С1С 10 03 "Р" 23734-1+16=23750

23561 5C1D 00

23562 5С1Е 00

23563 5C1F 00

23604 5С34 00

23605 5С35 00

То. какой канал к какому потоку подключен, определяется
следующим образом. К значению, на единицу меньшему, чем систем-
ная переменная CHANS, прибавляется величина смешения, содержа-
щаяся в соответствующей данному потоку паре байтов системной
переменной STRHS. Например, для потока 02 видим величину смеше-
ния, равную 6. он подключен к тому каналу. 5-байтной блок ка-
нальной информации которого расположен с адреса 23739 (см. рас-
чет). По Ллистингу_1 можем определить, что это - "экран". Пото-
ки 00 и 01 - оба подключены к клавиатуре. Действительно, выпол-
нив PRINT #0; или PRINT #1; - печать будет произведена в двух
нижних строках, a PRINT #2; - в главной части экрана.

Из Листингам видим, что используется потоков всего 7 - с
fd по 03 (с минус третьего по третий), то есть по 2 байта на
каждый поток - 14 байтов. Остальное пространство переменной
STRHS не используется, так как не задано других потоков. При
организации новых потоков в этой системной переменной будут
задаваться новые пары байтов для каждого нового потока. Неста
столько, что можно задать целых 12 новых потоковi Конечно, сто-
лько новых потоков иам может не потребоваться, однако вот это
свободное место оказалось удобно использовать для хранения
совсем другой информации - канальной, как бы в продолжение
той. которая начинается с адреса 23734 (заданного в CHANS.
Листинг.1). Делается такой "обман" следующим образом.

Предположим, что мы хотим задать новые каналы для клавиа-
туры, экрана и принтера. Пусть новая процедура печати для кла-
виатуры и экрана имеет адрес АВООН. новая процедура опроса
клавиш - адрес АС60Н. а новая процедура печати для принтера -
адрес 5В20Н. Тогда информация, расположенная в системной пере-
менной STRHS будет иметь вид. представленный в Листинге.З.

Листинг.3

Адрес Содержимое Поток Канал Рассчет адреса
(дес. ) (шестн. > (шестн. >

23566 5С10 01 FD "К" 23734-1*1=23734

23569 5С11 00
13570 5С12 06 FE "S" 23734-1+6=23739

23571 5C13 00

23572 5C14 OB FF "R" 23734-1+11=23744

23573 5C15 00

23574 5C16 01 00 "K" 23734-1+1=23734

23575 5C17 00

23576 5C16 01 01 "K" 23734-1+1=23734
23577. 5C19 00

23576 5C1A 06 02 "S" 23734-1+6=23739

23579 5C1B 00

23560 5C1C 10 03 "P" 23734-1+16=23750

23561 5C1D 00

23562 5C1E 6F .- 04 "K" 23734-1+65391-

23563. 5C1F FF I -65536=23566

23J564 5C20 74 li- 05 "S" 23734-1+65396-

23565 5C21 FF I -65536=23593

23566 5C22 79 I p 06 "P" 23734-1+65401-

23567 5C23 FF I -65536=23596

Далее располагается канаАьная информация, продолжая Листинг.1.

23586 5С24 00 —' I PRINT=AB00H Процедура

23589 5С25 АВ I "PRINT-NEW"

23590 5С26 60 I INPUT=AC80H Процедура

23591 5С27 AC I "KEY-INPUT-NEW"
£3592 5С28 4В I Символ "К" - канал клавиатуры
23593 5С£9 00 —' PRINT=AB00H Процедура
£3594 5С2А АВ "PRINT-NEW"

23595 5С2В С4 INPUT=15C4H Процедура ПЗУ

23596 5С2С 15 RST 8

23597 5C2D 53 Символ "S" - канал экрана
£3596 5С2Е 20 -PRINT=5B20H Процедура

23599 5C2F 5В "PRINT-NEW"

23600 5СЗО С4 INPUT=15С4Н Процедура ПЗУ

23601 ' 5С31 15 RST 8

23602 5С32 50 Символ "Р" - канал принтера
£3603 5СЗЗ 00

23604 5С34 00 3 неиспользуемых байта.

23605 5С35 00

Здесь надо сказать, что совсем не обязательно задавать
новые процедуры и для клавиатуры, и для экрана, и для принтера.'
Это могут быть три любые новые процедуры, например, три новые
iразные) процедуры печати для экрана, которые подключаются к
потокам #4... #б. Кроме того, совсем не обязательно, чтобы их
было именно три. Можно задать, например, всего одну новую
процедуру печати (например, для потока #4). Тогда ячейки
£3584... £3587 и £3593... £3605 просто не будут использоваться.

Инициализация, то есть операция подключения нового канала
1Новой процедуры) к новому потоку может быть выполнена, напри-
мер. прямо из БЕИСИКа. изменением при помоши РОКЕ значений яче-
ек в соответствии с конкретными требованиями, •аналогично приме-
ру, приведенному в Листинге,3. При помоши БЕИСИКа инициализация
выполняется в демонстрационных программах плотной и качествен-
ной печати, приведенных в разделах £. 8. 1 и £. 8. £ данной книги

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

Для инициализации новых каналов (подключения их к новым
потокам) можно воспользоваться и более универсальным вариантом
в машинных кодах, который приводится ниже, в Листинге_4. Это
процедура инициализации трех новых пользовательских каналов.
Процедура может быть использована и теми, кто работает с маг-
ни-тоФоном и теми, кто работает с БЕТА-диском. - ее можно за-
гружать в любое место памяти, запуская с адреса загрузки. Для
примера дизассемблер этой программы дан с адреса FEDBH. но с
одинаковым успехом она будет работать и в других адресах.

листинг_4

Адрес Маш. код АССЕМБЛЕР Комментарий

FEDB ED5B4F5C LD DE. (W5C4F) ; В DE - значение * CHANS

FEDF £i£55C LD HL, #5С£5 ; Величина для расчета смешения.

FEE£ ED5£ SBC HL.DE ; Расчет смешения канальной ин-
, Формации.

FEE4 221Е5С LD (#5C1E).HL ; Запись значения смешения.

FEE7 010500 LD ВС. #0005 ; Расчет следуюшего

FEEA 09 ADD HL. ВС . значения смешения.

FEEB 22205С LD i#5C20).HL ; Запись следующего значения.

FEEE 09 ADD HL.ВС ,Повторение операции еше раз

FEEF 222250 LD (#5022).HL ; всего - для трех потоков.

FEF2 0D7C00 CALL #0070 ; Привязка к адресу

FEF5 зв DEO SP . загрузки. После этих

FEF6 ЗВ DEC SP ; действий в HL будет

FEF7 El POP HL .адрес, следующий за

FEF8 оиооо LD ВС. #0010 ; этой процедурой, т. е

FEFB 09 ADD HL. BO ,В ЭТОН примере - FF05H.

FEFC 11245С LD DE.#5С24 ; Адрес места назначения - 23566

FEFF OlOFOO ' LD ВС. #OOOF ;Длина перебрасываемого блока -

; 15 байтов.

FF02 EDBO LDIR ;Переброска канальной информа-

; ции.

FF04 С9 RET . Возврат из инициализирующей

; процедуры.

FF05 СЧ ;Здесь задана канальная

FF06 15 ; информация, в форнате,

FF07 СЧ .как в Листинге. 1, т.е.

FF06 15 . по 5 байтов на канал

FF09 чв , iвсего для трех каналов -

FF0A 04 ; - 15 байтов. )

FFOB 15 .Все значения 15С4Н

FFOC 04 .должны быть заменены

FFOD 15 .на адреса реальных

FF0E 53 .процедур, обслуживающих

FF0F Сч ;новые каналы.

FF10 15 .Изменены должны быть

FFH 04 ;и литеры "К". "S" и "Р".

FF12 15 обозначающие

FF13 50 .новые каналы.

Уважаеный читатель!

ны искренне благодарны Вам за то. что Вы смогли уделить
некоторую часть своего времени нашей книге. Ны надеемся, что и
первый тон серии "Элементарная графика" Вы тоже уже прочитали.

Если основной целью "Элементарной графики" было дать Вам
представление о технологии исполнения графических экранов из
БЕИСИКа и из машинного кода и снабдить вас необходимыми знания-
ми для дальнейшего самообразования путем исследования кода фир
менных программ, то по прочтении этой книги Вы безусловно
можете самостоятельно начинать практические эксперименты с
машинной графикой.

Достаточно ли того, что вы прочитали для самостоятельной
разработки конкурентоспособных программ? Возможно, да, но
скорее всего Ван не обойтись без анимации (мультипликации)
графических изображений и в этом Ван поможет следующий том
нашей серии - "Динамическая графика".

"ИНФОРКОМ" сейчас работает над широким спектром новых книг
для владельцев персонального компьютера систены "Синклер", в их
числе и книги для тех, кто хорошо знает свой компьютер и
нуждается в углубленной информации и книги для тех. кто только
что начал делать первые шаги с компьютером. Если Вы подписаны
на наше фирненное издание - "ZX-РЕВЮ". то всегда своевременно
узнаете о наших новых работах. Если же Вы не являетесь нашим
постоянным читателем, мы Вам рекомендуем периодически (один раз
в 3 - 4 месяца) посылать нам запрос с вложенным заполненным
конвертом, вы получите наш текущий БЛАНК-ЗАКАЗ с описанием
распространяемой нами литературы.

наш адрес: 1ЕЮ19. Носква. г-19. а/я 16.




СОДЕРЖАНИЕ:


  Оставте Ваш отзыв:

  НИК/ИМЯ
  ПОЧТА (шифруется)
  КОД



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

Похожие статьи:
Железо - подвключение модема "АЛЕГРО" (C-DOS) к спектруму.
Маразм - Я и мой компьютер.
Обратная связь - контакты редакции.
Помни - Я хочу вспомнить тех замечательных людей, которых уже нет с нами...
Отдохни - очепятки: очепятоки, допущенные в газетах и журналах.

В этот день...   29 марта