Радио-86РК/Радио 05-89/Печать

Материал из Emuverse
Перейти к: навигация, поиск
Red copyright.png Данный материал защищён авторскими правами!

Использование материала заявлено как добросовестное, исключительно для образовательных некоммерческих целей.

Автор: Г. ЗЕЛЕНКО, Д. ГОРШКОВ

Источник: http://retro.h1.ru/RK86/Print/Printer.html

МОНИТОР «Радио-86РК» не содержит подпрограммы для вывода информации на печатающее устройство, так как подключение устройства какого-либо определенного типа не предусматривалось при разработке этого компьютера, а создание универсальной программы для обслуживания устройств с разными интерфейсами не возможно. Однако в таблице переходов, предназначенных для вызова стандартных подпрограмм МОНИТОРа, по адресу F80FH можно расположить команду перехода на подпрограмму печати символа, соответствующего коду в регистре С микропроцессора. Саму подпрограмму можно разместить в ОЗУ, в области рабочих ячеек МОНИТОРа, и перед началом работы с печатающим устройством загружать ее в память с магнитной ленты. Адрес начала подпрограммы — 7654Н или 3654Н (в зависимости от общего объема памяти). Подпрограмма вывода кода на печать перед выполнением команды возврата должна восстанавливать исходное содержимое всех используемых ею внутренних регистров микропроцессора. Размер подпрограммы не должен превышать 70 байтов. Возможно размещение подпрограммы печати и непосредственно в любой прикладной программе пользователя. Для этого по адресу 7654Н (3654Н) эта программа должна заносить коды трехбайтовой команды безусловного перехода на начало подпрограммы печати.

В любом случае вызов подпрограммы печати должен осуществляться по стандартному адресу — F80FH. Это позволит использовать вашу программу на любых микроЭВМ с монитором, имеющим такие же таблицы переходов для вызова стандартных подпрограмм.

ТАБЛИЦА 1

F810: 54 76 
F84A: 1A FC 
FC0F: 2A
FC10: 00 76 3А 2Е 76 A9 F5 C3 85 FC 3E C9 32 53 76 CD 
FC20: ED F9 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
FC30: 00 00 00 C9 
FCBF: 53 76 

В табл. 1 приведены изменения, которые необходимо внести в ПЗУ с монитором для 32-килобайтной версии микроЭВМ. Чтобы получить модификацию для 16-килобайтной версии компьютера, следует заменить все коды 76Н на 36Н. Вместо нулевых кодов (пустая операция — NOP) по адресам с FC22H по FC32H (включительно) можно записать коды команд для начальной настройки интерфейса печатающего устройства. В этом случае программа настройки интерфейса будет выполняться автоматически при запуске МОНИТОРа.

Кроме вызова подпрограммы печати, данная модификация МОНИТОРа обеспечивает печать информации, выводимой на экран. Для управления режимом дублирования используется рабочая ячейка по адресу 7653Н (3653Н), первоначально содержащая код С9Н. Чтобы включить дублирование, нужно занести в эту ячейку нулевой код, чтобы выключить — восстановить прежнее значение, С9Н. Запись кодов в эту ячейку можно производить «вручную» с помощью директивы МОНИТОРа (М7653) или из любой программы пользователя. Запись других кодов в ячейку 7653Н недопустима. Будьте осторожны! Перед использованием вывода на печать следует убедиться в том, что в ОЗУ загружена подпрограмма обслуживания печатающего устройства.

Рассмотрим пример подпрограммы вывода кода для параллельного интерфейса «Centronics», подключенного к ППА КР580ВВ55 следующим образом:

РА0 - DATA1        PC7 - Strobe 
PA1 - DATA2        PC3 - BUSY 
PA2 - DATA3        РАЗ - DATA4
PA4 - DATA5        PA5 - DATA6
PA6 - DATA7        PA7 - DATA8

Подключение остальных сигналов интерфейса необязательно. ППА должен быть настроен в нулевом режиме таким образом, чтобы линии С порта А и старшая половина порта С работали на вывод, а младшая половина порта С — на ввод.

Сразу после настройки ППА на линии РС7 (сигнал STROBE) следует установить лог. «1». В табл. 2 приведена программа настройки ППА, заносимая в ПЗУ с монитором, в табл. 3 — подпрограмма печати кода регистра С, хранимая в ОЗУ.

ТАБЛИЦА 2 

FC22 3е 83        MVI А,83Н 
FC24 32 03 А0     STA 0А003Н 
FC27 32 02 А0     STA 0A002H

ТАБЛИЦА 3

7654 F5           PUSH PSW 
7655 3А 02 А0     LDA 0A002H 
7658 E6 08        ANI 1000В 
765A C2 55 76     JNZ 7655H 
765D 79           MOV A,C 
765E 32 00 А0     STA 0A000H 
7661 3E 0E        MVI A,0EH 
7663 32 03 А0     STA 0А003Н
7666 3С           INR A 
7667 32 03 А0     STA 0А003Н 
766А F1           POP PSW 
766В C9           RET 

ТАБЛИЦА 4

; ПОДПРОГРАММА ПЕЧАТИ СООБЩЕНИЯ
2100 E1        PRINT: POP H
2101 4E               MOV C,M
2102 CD 0F F8         CALL 0F80FH
2105 23               INX H
2106 7E               MOV A,W
2107 B7               ORA A
2108 C2 01 21         JNZ PRINT+1 
210В E9               PCHL 

ТАБЛИЦА 5
;ВЫЗОВ ПОДПРОГРАММЫ PRINT
0100 CD 00 21         CALL PRINT 
0103 70 72 69 60 65   DB 'ПРИМЕР ВЫЗОВА ' 
0108 72 20 77 79 7A 
010D 6F 77 61 20
0111 70 6P 64 70 72   DB 'ПОДПРОГРАММЫ ' 
0116 6P 67 72 61 60 
011B 60 79 20
011E 50 52 49 4E 54   DB 'PRINT.',00H,0AH 
0123 2E 00 0A
0126 6В 6F 6E 65 63   DВ 'КОНЕЦ СООБЩЕНИЯ -'
012В 20 73 6F 6F 65 
0130 56 6E 69 71 20
0135 20
0136 20 30 30 00 0A   DВ ' 00',00Н,0AH 
013В 00               DВ 0 

В табл. 4 и 5 приведены примеры подпрограммы PRINT для печати сообщения и вызова этой подпрограммы. Коды выводимого сообщения должны располагаться непосредственно за командой вызова подпрограммы PRINT. Конец сообщения определяется кодом 0.

Г. ЗЕЛЕНКО, Д. ГОРШКОВ, г. Москва