Радио-86РК/Радио 10,11-90/PK плюс PC: различия между версиями
Panther (обсуждение | вклад) (http://retro.h1.ru/RK86/RK_PC/rk2pc.php) |
Panther (обсуждение | вклад) м («Радио-86РК/Радио 10,11-90/PK plus PC» переименована в «Радио-86РК/Радио 10,11-90/PK плюс PC») |
(нет различий)
|
Текущая версия от 17:44, 5 декабря 2008
Данный материал защищён авторскими правами!
Использование материала заявлено как добросовестное, исключительно для образовательных некоммерческих целей. Автор: А. ДОЛГИЙ Источник: http://retro.h1.ru/RK86/RK_PC/rk2pc.php |
Мы уже рассказывали о том, как ввести в любой компьютер, снабженный стандартным интерфейсом, программы и данные, подготовленные на «Радио-86РК» и записанные им на магнитную ленту. Нередко возникает и обратная проблема — ввести в «Радио-86РК» данные, подготовленные на другом компьютере. Проблема легко разрешима, если «заставить» этот компьютер записать данные на магнитную ленту в формате «Радио-86РК», причем никакой аппаратной доработки этого компьютера не требуется, необходимо только соответствующее программное обеспечение и имеющийся в любом компьютере параллельный (обычно к нему подключен принтер) или последовательный интерфейс. Программы, приведенные ниже, разработаны и испытаны на компьютере ЕС-1840, работающем под управлением операционной системы MS DOS версия 3.3 с компилятором TURBO-PASCAL V3.02.
Напомним, что в «Радио-86РК» каждый бит данных в процессе записи заменяется двумя битами, причем логическая 1 заменяется на 01, а логический 0 — на 10. Для записи одного байта требуется передать через интерфейс 16 бит. Для вывода байта данных в нужном формате через параллельный интерфейс ИРПР-М («Centronics») можно воспользоваться процедурой, приведенной в табл.1. На компьютере ЕС-1840 эта процедура при указанном в ней значении константы Т формирует сигнал записи со стандартной для «Радио-86РК» скоростью. Магнитофон подключают, как показано на схеме рис.1, к соединителю А04.4, предназначенному для подключения принтера.
Таблица 1. (Вывод байта на магнитофон через параллельный интерфейс) Procedure OUTMAG(В:byte); const PMAG:lnteger=$378; (Адрес порта принтера.) BMAG:byte=1; (Вывод через младший разряд.) Т: lnteger=21; (Задает скорость вывода.) A, M:byte; I:Integer; begin M:=$80; Repeat If (B and M)<>0 then A:=0 else A:=BMAG; PORT[PMAG]:=A; for I:=0 to Т do; PORT[PMAG]:=A xor BMAG; for I:=0 to Т do; M:=M Shr 1; until M=0; end;
На компьютерах другого типа возможно понадобится
подобрать значение Т для получения заданной скорости. Адрес порта данных интерфейса,
использованный в процедуре, как правило, одинаков во всех компьютерах, совместимых
с IBM PC. Уточнить его можно, обратившись к техническому описанию конкретного
компьютера.
Для вывода данных на магнитофон можно использовать и последовательный интерфейс С2 (RS-232C). В компьютерах он организуется, как правило, с помощью универсального синхронно-асинхронного приемопередатчика (УСАПП) — БИС КР580ВВ51А или ее аналогов. УСАПП несложно запрограммировать так, что его выходной сигнал будет иметь нужную форму. Запись байта на магнитофон через последовательный интерфейс выполняет процедура, приведенная в табл.2. Магнитофон подключают к соединителю А04.2<a href="rrkpcp2.djvu"> компьютера ЕС-1840 по схеме, показанной на рис.2.</a> Размах сигнала на выходе данных интерфейса около 24В. До величины, необходимой для нормальной работы магнитофона, его уменьшают делителем напряжения. Сумма сопротивлений резисторов делителя не должны быть меньше 3кОм.
Таблица 2.
( Вывод байта на магнитофон через) ( последовательный порт СОM1 ЕС-1840.) Procedure OUTMAG(B:byte); const РНM: array[0..15] of integer = ($55. $95. $65. $А5, $59, $99, $69, $А9, $56, $96, $66, $А6, $5А, $9А, $6А, $АА) ; procedure SEND(C:byte); const CW51: integer=$3F9; (регистр состояния УСАПП. ) DAT31:integer=$3F8; (Регистр данных УСАПП.) begin repeat until(PORT[CW51] and 1)<>0; PORT[DAT51]:=C; end; begin SEND(PHM[B shr 4) and $0F]) ; SEND(PHM[B and $0F]) end;
Таблица 3.
( Настройка таймера и усапп канала сом1 ес-1840} procedure INIT(K:byte); (К - константа вывода РК.) const H1:real=2.16; (Константы для ) H2:real=6.61; (вычисления ) S9600:integer=8; (коэффициента деления.) (Адреса портов компьютера) CTRL:integer=$3FC; (управление интерфейсом) CW53:integer=$3FB; (peг. режима таймера) CTR:integer=$3F6; (счетчик таймера) CW51:integer=$3F9; (peг. управл./сост. УСАПП) DAT51:integer=$3F8; (peг. данных УСАПП.) TMODE:byte=$30; S:integer; begin PORT[CTRL]:=$88; (Работаем с таймером.) PORT[CW53]:=THODE; ( Уст. режим таймера.) S:=ROUND(S9600*(K*N1+N2)); PORT[CTR]:=L0(S); (Вычисляем и загружаем) PORT[CTR]:=HI(S); (коэФФ. деления.) PORT[CTRL]:=$48; (Сброс УСАПП.) PORT[CTRL]:=8; (Работаем с УСАПП.) PORT[CW51]:=$ОС; (Уст. синхрю режим.) PORT[CV51]:=0; (Загружаем байты) PORT[CW51]:=0; (синхронизации.) PORT[CV51]:=$27; (Разрешаем передачу) end;
Операция записи выполняется в два приема. Из байта
данных выделяются четыре старших разряда. Байт, соответствующий преобразованию
этих разрядов в нужную для записи форму, берется из таблицы РHМ и передается
процедуре SEND, которая загружает его в УСАПП. Затем те же действия повторяются
с четырьмя младшими разрядами байта данных. Используется синхронный режим работы
УСАПП. Не рассматривая всех его особенностей, отметим только, что в отличие
от обычно используемого асинхронного режима передаваемые данные не сопровождаются
стартовым и стоповым битами.
Таблица 4.
ЕС-1840 | Нейрон | |||
---|---|---|---|---|
COM1 | COM2 | COM1 | COM2 | |
CTRL | $3FC | $2FC | нет | нет |
CW53 | $3FB | $3FB | $3FB | $2FB |
CTR | $3F8 | $3F9 | $3F9 | $2F9 |
CW51 | $3F9 | $2F9 | $3FD | $2FD |
DAT51 | $3F8 | $2F8 | $3FC | $2FC |
THODE | $36 | $76 | $36 | $76 |
S9600 | 8 | 8 | 16 | 16 |
Настраивает УСАПП и устанавливает скорость записи
процедура INIT (табл.3), которую необходимо выполнить до первого обращения к
процедуре OUTMAG.
Процедуры передачи байта через интерфейс SEND и настройки интерфейса INIT машинозависимы. Указанные в них физические адреса регистров УСАПП КР580ВВ51А и таймера, задающего скорость записи, относятся к интерфейсному каналу СОМ1 компьютера ЕС-1840.
Рассмотрим изменения, которые придется внести в эти процедуры при использовании другого канала последовательного интерфейса или другого компьютера (например «Нейрон» И9.66). Прежде всего необходимо изменить адреса портов и некоторые другие константы, перечисленные в табл.4. В компьютере «Нейрон», например, отсутствует регистр управления интерфейсом, поэтому выполняемая часть процедуры INIT должна быть такой, как показано в табл.5.
Таблица 5.
begin PORT[CW53]:=TMODE; ( Уст. режим таймера. ) S:=ROUND(S9600*(K*N1+N2)); PORT[CTR]:=LO(S); (Вычисляем и загружаем) PORT[CTR]:=HI(S); (коэФФ. деления.) PORT[CW51]:=О; (Подготовка) PORT[CW51]:=0; (и сброс) PORT[CW51]:=$40 (УСАПП.) PORT[CW51]:=$OC; (Уст. синхр, режим.) PORT[CW51]:=0; (Загружаем байты) PORT[CW51]:=0; (синхронизадии) PORT[CW51]:=$27; (Разрешаем передачу) End;
К сожалению, эти примеры не исчерпывают всех возможных
вариантов. Поэтому перед адаптацией процедур, использующих последовательный
интерфейс, к конкретному компьютеру необходимо внимательно изучить его техническое
описание, выяснить тип УСАПП, адреса портов и другие подробности.
Проверить и отладить приведенные выше процедуры и установить нужную скорость записи позволяет программа, текст которой приведен в табл. 6. На указанные в ней места необходимо вставить описания одной из описанных выше процедур OUTMAG (в зависимости от используемого для записи интерфейса) и процедуры INIT (только для последовательного интерфейса). Программа выводит на магнитофон последовательность нулевых байтов длительностью 15 с (при номинальной скорости), а затем последовательность байтов 55Н такой же длительности, после чего сообщает длительность сформированного сигнала и скорость записи.
Таблица 6.
Type REGSET=record; АХ, ВХ, СХ, DX, ВР, SI, DI, DS, ES, FL: integer; I, N:integer; M, S, F:byte; T,Y:real; REGS:REGSET; End; (Здесь вставить описание одной из процедур OUTMAG) ((см. табл.1 и 2 в тексте статьи), а для последовательного) (интерфейса также описание процедуры INIT (см. табл.3).) begin CLRSCR; WRITELN('Проверка процедуры вывода данных 'на магнитофон в Формате "Радио-8бРК"'); N:=2085; WRITELN; WRITELN('Идет тест-сигнал. . . '); WRITELN;(При использовании для записи на магнитофон) (последовательного интерфейса здесь вставить) (оператор INIT(5D);) with REGS do begin AX:=$2COO;MSDOS(REGS); M:=LO(CX);S:=HI(DX);F:=LO(DX); ( См. текст статьи ) for I:=1 to N do OUTMAG(0); for I:=1 to N do OUTMAG($55); ( см. текст статьи ) AX:=$2COO;MSDOS(REGS); T:=(LO(CX)-M)*60.0+(HI(DX)-S)+(LO(DX)-F)/100.0; V:=2.0*H*8/(T+1E-6); WRITELN('Длительность сигнала ',Т:5:1,'с. скорость вывода ',V:l:0,' бит/с.'); end; end.
При работе с параллельным интерфейсом скорость
устанавливают, изменяя значение константы Т в процедуре OUTMAG. Качество сформированного
сигнала нужно обязательно проверить, наблюдая его на экране осциллографа. Не
должно быть заметных различий в длительности положительных и отрицательных полупериодов
сигнала, в противном случае испытываемая процедура непригодна для работы на
данном компьютере. Как правило, наблюдаются периодические «вздрагивания» осциллограммы,
связанные с тем, что операционная система компьютера прерывает работу программы
вывода для выполнения различных служебных операций. Для устранения этого явления
на время выполнения записи прерывания запрещают. В программе табл.6 прерывания
можно запретить, вставив в нее перед первым оператором for I:=… оператор
INLINE($FA).
После окончания вывода, то есть после второго оператора for I:=…, прерывания необходимо разрешить оператором INLINE($FB).
Такое изменение программы приводит к прекращению счета времени компьютером, поэтому значения длительности и скорости сигнала на экран дисплея будут выведены неправильные. В этом случае скорость можно проконтролировать, измеряя длительность сигнала секундомером или его частоту частотомером. «Нулевым» байтам при этом должна соответствовать частота сигнала 1100 Гц, а байтам 55Н — в два раза меньше. Так как разрешение и запрет прерываний мало влияют на величину скорости, то ее установку можно проводить, не внося в программу операторов INLINE, а затем ввести их и убедиться в отсутствии «вздрагиваний».
При работе с последовательным интерфейсом скорость задают параметром при вызове процедуры INIT. Он должен быть равен «константе вывода», задающей ту же скорость в «Радио-86РК». УСАПП выполняет все операции по передаче загруженного в него байта без участия процессора, у которого всегда имеется достаточно времени для подготовки очередных данных, обслуживания прерываний и других необходимых действий. По этой причине использование последовательного интерфейса для записи данных на магнитофон предпочтительнее. В запрещении прерываний на время вывода в данном случае нет необходимости.
Для проверки скорости и качества формируемого сигнала можно воспользоваться также программами для «Радио-86РК», описанными в журнале «Радио» № 4 за 1987 г.
Итак, мы научились записывать отдельные биты данных на магнитную ленту в формате «Радио-86РК». Однако блоки данных, хранящиеся на магнитных дискетах или в ОЗУ компьютера, перед записью необходимо преобразовать и снабдить необходимой служебной информацией, чтобы «Радио-86РК» мог принять их и поместить в нужное место своего ОЗУ. Такое преобразование и саму запись выполняет программа RSRK, текст которой приведен в табл.7. В зависимости от используемого интерфейса на указанное в программе место помещается одно из приведенных выше описаний процедуры OUTMAG. Для последовательного интерфейса необходима и процедура INIT. Если при проверке процедуры вывода оказалось необходимым запрещать прерывания, то в программу на места, указанные в комментариях, необходимо вставить соответствующие операторы INLINE.
Исходные данные для записи должны находиться в файлах на магнитных дискетах. В зависимости от типа данных они обрабатываются программой по-разному.
Текстовые файлы. Данные, находящиеся в таких файлах, могут представлять собой тексты документов, статей и т. п., а также исходные тексты программ на различных языках программирования, например на языке ассемблера микропроцессора серии КР580. В «Радио-86РК» тесты обычно обрабатываются программой редактором ED.МИКРОН. Подготавливая текстовые файлы к записи, RSRK преобразует их в формат, принятый в ED.МИКРОН: удаляет символы перевода строк (код ОАН), преобразует символы табуляции (код 09Н) в нужное число пробелов. Символы псевдографики, отсутствующие в знакогенераторе «Радио-86РК», заменяются символами подчеркивания (код 5FH).
Стандартный знакогенератор «Радио-86РК» содержит только прописные русские и прописные латинские буквы. Другой набор отображаемых символов, например, русские строчные и прописные буквы можно получить, переключая знакогенераторы. Одновременный вывод на экран символов из разных наборов имеющимся матобеспечением «Радио-86РК» не предусмотрен. Учитывая, что многие компьютеры позволяют готовить тексты, содержащие как русские, так и латинские прописные и строчные буквы, RSRK предлагает четыре варианта перекодировки символов перед записью:
- все строчные буквы заменить соответствующими прописными;
- сохранить латинские прописные буквы, все остальные заменить эквивалентными русскими прописными;
- сохранить вид русских букв, но латинские буквы заменить их русскими эквивалентами;
- сохранить вид латинских букв, но русские буквы заменить их латинскими эквивалентами.
Если в тексте встретится строка, в которой больше допустимых для ED.МИКРОН 62 символов, то все символы, начиная с 63-го, RSRK перенесет на новую строку.
Естественно, все преобразования происходят только в данных, записываемых на магнитофон. Никаких изменений в исходный файл на диске не вносится. Подготовленные данные снабжаются необходимой для ED.МИКРОН служебной информацией. Записи автоматически присваивается имя, совпадающее с именем исходного дискового файла. Если длина текста больше размера буфера редактора, RSRK запишет его по частям. Полученная запись ничем не отличается от выполненной самим редактором ED.МИКРОН и может быть прочитана по командам AP2-I или АР2-М.
Машинные коды. Программы в машинных кодах, обычно хранящиеся в файлах с расширениями СОМ и ЕХЕ, записывать на магнитофон не имеет смысла, так как в большинстве случаев они не могут быть выполнены на «Радио-86РК» из-за различий в системах команд и архитектуре компьютеров. Такие файлы RSRK не обрабатывает. Коды, предназначенные для записи, должны быть представлены в виде так называемого НЕХ — файла. Такой файл, например, является результатом работы стандартного ассемблера для микропроцессора серии КР580. Возможно представление данных в обычном текстовом файле в виде дампа, то есть таблицы кодов, аналогичной публикуемым в журнале.
Программа RSRK преобразует НЕХ — файл или таблицу кодов в вид, необходимый для записи, определяет и выводит на экран дисплея начальный и конечный адреса блока, его контрольную сумму. Алгоритм подсчета контрольной суммы аналогичен принятому в «Радио-86РК». Полученная запись идентична выполненной по директиве RSRK МОНИТОРа «Радио-86РК» и может быть введена по директиве I. Если адреса данных в исходном файле не образуют непрерывной последовательности, то запишет данные на магнитофон по частям, в каждой из которых адреса непрерывны.
А. ДОЛГИЙ, г. Москва
Отсканировано с журнала Радио № 10, № 11 1990 г.
Отредактировано Лесных Ю. 2001 г.