Радио-86РК/Радио 10,11-90/PK плюс PC

Материал из Emuverse
Данный материал защищён авторскими правами!

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

Автор: А. ДОЛГИЙ

Источник: 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 г.