УДК 681.3.068
В.И. Завилов, М.Ю. Константинов, М.В. Померанец
ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ ПАСКАЛЬ ДЛЯ МИКРО-ЭВМ «ЭЛЕКТРОНИКА БК0010»
Разработка программного обеспечения бытовой персональной микро-ЭВМ «Электроника БК0010 [1] (далее - «БК0010») ограничивается возможностями имеющегося в её составе ПЗУ интерпретатора языка Фокал. В этом языке не нашли отражения идеи современной технологии программирования [2], существенно облегчающие разработку, отладку и сопровождение программ. Кроме того, в ряде случаев разработка прикладных программ оказывается затруднительной вследствие ограниченного быстродействия интерпретатора. Устранить эти недостатки позволяет язык Паскаль [3]. Однако, поскольку такой компилятор отсутствует в ПО «БК0010», для программирования на этом языке необходимо использовать другую ЭВМ (кросс-ЭВМ), а затем перенести готовую программу на «БК0010».
Система команд «БК0010» совпадает с системой команд ЭВМ типа «Электроника 60», ДВК-2М, СМ-3, СМ-4. Это создаёт хорошие предпосылки для простой реализации процесса такого переноса. В данной статье рассматривается применение ДВК-2М в качестве кросс-ЭВМ для программирования «БК0010» на языке Паскаль. Чтобы программа для операционной среды могла выполняться на «БК0010», необходимо и достаточно обеспечить физический процесс перехода программы с ДВК-2М на «БК0010» и выполнение её под управлением монитора «БК0010».
Второе из этих требований реализуется приводимой программой BKPMON, которая хранится на ДВК-2М в объектном виде (файл BKPMON.OBJ). Пользователь разрабатывает и отлаживает свою программу на ДВК-2М в операционной среде ОС ДВК (SJ-монитор [4]), используя компилятор Паскаль ОС ДВК.
.TITLE BKPMON
.ENABL LC
; АССЕМБЛЕР MACRO-11/ РАФОС (ОС ДВК , ФОДОС )
.GLOBL $START ; ТОЧКА ВХОДА ИСПОЛНЯЮЩЕЙ СИСТЕМЫ
; OMSI PASCAL RT-11.V1.1G
; КОНСТАНТЫ
V4 = 4 ; ВЕКТОР ОБРАБОТКИ ПРЕРЫВАНИЯ ПО
; ЗАВИСАНИЮ,КЛАВИШЕ "СТОП" И КОМАНДЕ
;"HALT" В МИКРО ЗВМ БК0010.
EMT = 30 ; ВЕКТОР ПРЕРЫВАНИЯ ПО КОМАНДЕ EMT
ADRMAX = 37776 ; ГРАНИЦА ОБЛАСТИ ОЗУ (16 КБАЙТ),
; ДОСТУПНОЙ ПОЛЬЗОВАТЕЛЮ БК-0010.
MASK = 177400 ; МАСКА ДЛЯ ВЫДЕЛЕНИЯ МЛАДШЕГО БАЙТА
TTIN = 6 ; EMT БК-0010 - ВВОД КОДА С КЛАВИАТУРЫ
TTOUT = 16 ; EMT БК-0010 - ВЫВОД СИМВОЛА НА ЭКРАН
SIZE = 64. ; РАЗМЕР БУФЕРА ВВОДА (БАЙТ)
LETTER = 100 ; БИТ 06 БАЙТА - ПРИЗНАК КОДА БУКВЫ
BIT7 = 200 ; СТАРШИЙ БИТ БАЙТА
LF = 12 ; "ПЕРЕВОД СТРОКИ"
RUS = 16 ; "РУССКИЙ АЛФАВИТ"
LAT = 17 ; "ЛАТИНСКИЙ АЛФАВИТ"
CAN = 30 ; "ЗАБОЙ" В БК-0010
BLANK = 40 ; "ПРОБЕЛ"
BKPMON::
; МОДУЛЬИНИЦИАЛИЗАЦИИ EMT-ДИСПЕТЧЕРА
MOV @#EMT,OLDEMT ; СОХРАНИЛИ EMT-ДИСПЕТЧЕРБК-0010
CLR REG ; УСТАНОВИЛИ АЛФАВИТ ЛАТИНСКИЙ
CLR SWITCH ; УСТАНОВИЛИ БУФЕР ВВОДА = ПУСТ
MOV #DIEMT,@#EMT ; УСТАНОВИЛИ НОВЫЙ EMT-ДИСПЕТЧЕР
MOV @#V4,OLDTIM ; ЗАМЕНИЛИ АДРЕС ПОДПРОГРАММЫ
MOV #TIMOUT,@#V4 ; ОБРАБОТКИ ПРЕРЫВАНИЯ ПО ОШИБКЕ
; КАНАЛА И КЛАВИШЕ "СТОП"
JMP $START ; ПЕРЕДАЛИ УПРАВЛЕНИЕ МОДУЛЮ PASMON
DIEMT::
; МОДУЛЬ ЭМУЛЯЦИИ EMT -ЗАПРОСОВ ИСПОЛНЯЮЩЕЙ
; СИСТЕМЫ PASCAL К SJ-МОНИТОРУ ОС ДВК
MOV OLDEMT,@#EMT ; ВОССТАНОВИЛИ EMT-ДИСПЕТЧЕРБК-0010
MOV R4,-(SP) ; ..
MOV 2(SP),R4 ; . ВЫДЕЛИЛИ КОД EMT
MOV -(R4),R4 ; .
BIC #MASK,R4 ; ..
CMP #340,R4 ; ..
BEQ EMT340 ; .
CMP #341,R4 ; .
BEQ EMT341 ; . ВЫБОР ЭМУЛИРУЕМОГО EMT
CMP #350,R4 ; .
BEQ EMT350 ; .
CMP #354,R4 ; .
BEQ EMT354 ; .
CMP #375,R4 ; .
BNE ILLEMT ; ..
EMT375:
BR END$
EMT350:
MOV (SP)+,R4 ; ВОЗВРАТ В МОНИТОР БК-0010
HALT ;
EMT354:
MOV #ADRMAX,R0 ; УСТАНОВКА ГРАНИЦЫ ОБЛАСТИ ПАМЯТИ,
BR END$ ; ДОСТУПНОЙ ПОЛЬЗОВАТЕЛЮ
EMT341:
; ВЫВОД СИМВОЛА НАЭКРАН
CMP #RUS,R0 ;
BNE 1$ ;
MOV #BIT7,REG ; РУССКИЙ АЛФАВИТ ПРИ ВЫВОДЕ
BR END$ ;
1$:
CMP #LAT,R0 ;
BNE 2$ ;
CLR REG ; ЛАТИНСКИЙ АЛФАВИТ ПРИ ВЫВОДЕ
BR END$ ;
2$:
BIT #LETTER,R0 ; БУКВА?
BEQ 3$ ;
BIS REG,R0 ; КОРРЕКЦИЯ КОДОВ БУКВ РУС.АЛФАВИТА
3$:
EMT TTOUT
BR END$
EMT340:
; ВВОД СИМВОЛА С КЛАВИАТУРЫ
TST SWITCH ; ЕСЛИ БУФЕР ВВОДА НЕ ПУСТ,
BNE GETBUF ; ВЫБИРАЕМ СИМВОЛ ИЗ БУФЕРА ВВОДА.
GETKEY:
; ЗАПОЛНЕНИЕБУФЕРА ВВОДА С КЛАВИАТУРЫ
MOV #BUFFER,POINTER
1$:
EMT TTIN ; ВВОДИМ СИМВОЛ С КЛАВИАТУРЫ
MOVB R0,@POINTER ; ПОМЕЩАЕМ КОД СИМВОЛА В БУФЕР
CMPB #CAN,R0 ;
BEQ 2$ ;
CMPB #LF,R0 ;
BEQ 3$ ;
CMPB #BLANK,R0 ;
BHI 1$ ; УПРАВЛЯЮЩИЕ СИМВОЛЫ (КРОМЕ LF И САN)
; НЕ ВВОДЯТСЯ
CMP POINTER,#LIMIT-1; НЕТ ЭХО-ПЕЧАТИ ПРИ ПЕРЕПОЛНЕНИИ
BEQ 1$ ;
EMT TTOUT ; ЭХО-ПЕЧАТЬ
INC POINTER ;
BR 1$ ;
2$:
;УДАЛЕНИЕ СИМВОЛА
CMP POINTER,#BUFFER
BLOS GETKEY
EMT TTOUT
DEC POINTER
BR 1$
3$:
; КОНЕЦ ВВОДАСИМВОЛОВ С КЛАВИАТУРЫ
INC SWITCH
EMT TTOUT
MOV #BUFFER,POINTER
GETBUF:
; ВЫБОР ОЧЕРЕДНОГОСИМВОЛА ИЗ БУФЕРА ВВОДА
MOVB @PGINTER,R0
CMP #LF,R0
BEQ 1$
BIC #MASK,R0
INC POINTER
BR END$
1$:
; КОНЕЦ СТРОКИ вБУФЕРЕ
CLR SWITCH
BR END$
ILLEMT:
MOVB R1,EMT$
MOV (SP)+,R4
EMT$:
EMT 0 ; ОБРАБОТКА EMT БК-0010
BR END1$
END$:
MOV (SP)+, R4
END1$: ; ВОЗВРАТ В ПРОГРАММУ
MOV #DIEMT,@#EMT
RTI
; ОБРАБОТКАПРЕРЫВАНИЯ ПО ВЕКТОРУ 4
TIMOUT:
MOV OLDTIM,@#V4
MOV OLDEMT,@#EMT
JMP @#V4
;----- ОБЛАСТЬ ПЕРЕМЕННЫХ------------------------------------
OLDTIM: .WORD 0 ; АДРЕС ОБРАБОТКИ ПРЕРЫВАНИЯ ПО ОШИБКЕ
; И КЛАВИШЕ "СТОП" МОНИТОРА БК-0010
OLDEMT: .WORD 0 ; АДРЕС EMT-ДИСПЕТЧЕРАМОНИТОРА БК-0010
SWITCH: .WORD 0 ; ПРИЗНАК НАЛИЧИЯ ИНФОРМАЦИИ В БУФЕРЕ
REG: .WORD 0 ; ИСПОЛЬЗУЕМЫЙ АЛФАВИТ ПРИ ВЫВОДЕ
POINTER:.WORD 0 ; УКАЗАТЕЛЬ ПОЗИЦИИ В БУФЕРЕ ВВОДА
BUFFER: .BLKB SIZE ; БУФЕР ВВОДА.
LIMIT::
.END
После завершения отладки программа компонуется вместе с BKPMON в файл типа SAV и затем переносится на «БК0010». Типовой процесс трансляция такой программы (WORK.PAS) для переноса её на «БК0010» может выглядеть, например, так:
.R PASCAL *WORK.MAC=WORK.PAS/F .R MACRO *WORK.OBJ=WORK.MAC *^C .R LINK *WORK.SAV,LP:=BKPMON.OBJ,WORKOBJ,PASCAL.OBJ *^C
Функционально программа BKPMON состоит из двух частей: модуля инициализации (точка входа - BKPMON) и модуля эмуляции ЕМТ-запросов исполняющей системы Паскаль к SJ-монитору ОС ДВК (точка входа - DIEMT).
Реализованные в программе BKPMON ЕМТ-запросы к SJ-монитору позволяют без изменений переносить любые программы, разработанные на языке Паскаль ОС ДВК. Единственное ограничение для таких программ - использование из всех операций ввода-вывода только операций с терминала (операторы READ, READLN, WRITE, WRITELN с применением стандартных файлов INPUT, OUTPUT). Программа BKPMON позволяет также использовать ЕМТ-запросы к монитору «БК0010» (в фрагментах на макроассемблере), однако в этом случае отладка программы должна производиться только на «БК0010».
При физическом переносе программы на «БК0010» необходимо:
- удалить начальный (нулевой) блок файла WORK.SAV (он содержит служебную информацию для монитора ОС ДВК, не используемую монитором «БК0010»);
- загрузить оставшуюся часть файла WORK.SAV, содержащую собственно коды программы, в ОЗУ «БК0010», начиная с адреса 1000, и с этого же адреса запустить на выполнение.
Наиболее простой и эффективный способ переноса программ - загрузка программы в ОЗУ «БК0010» через канал связи с бытовым магнитофоном. Для реализации переноса программ разработан программно-аппаратный интерфейс связи ДВК-2М с магнитофоном, аналогичный имеющемуся в «БК0010» и включающий контроллер и программу обмена данными с магнитофоном (MAG.SAV). Преимущество такого способа - дополнительная возможность использования магнитофона в качестве внешнего устройства ДВК-2 и создания архива файлов на ленте.
Контроллер (см. рисунок) выполнен непосредственно на плате микро-ЭВМ «Электроника МС 1201.01» (имеющей свободные позиции для установки микросхем) и с помощью кабеля подключается либо к магнитофону (при вводе-выводе файла на ленту), либо к «БК0010» (для загрузки программ в её ОЗУ). Обращение к контроллеру осуществляется через регистр расширения процессора SEL2 с адресом 177714.
При записи триггер D45 фиксирует два разряда передаваемых данных: 05 и 06. Это позволяет программно формировать на делителе R44...R46 два уровня переменного напряжения (для компенсации нелинейности АЧХ-тракта магнитофона). При непосредственной передаче данных на «БК0010» выходной сигнал дифференцируется с помощью конденсатора С1. По чтению в регистре SEL2 доступен только разряд 05, текущее значение которого представляет полярность напряжения на линейном выходе магнитофона («0» - минус, «1» - плюс).
Программа обмена данными MAG, исходный текст которой написан на языке Паскаль с фрагментами на макроассемблере, состоит из двух компонент: модуля управления, обеспечивающего диалог с оператором и работу с файлами ОС ДВК (в том числе необходимые операции с файлами типа SAV); драйвера магнитофона (аналогичен драйверу магнитофона «БК0010» и обеспечивает формирование данных на ленте в том же формате).
Загрузка файла с дискового накопителя ДВК-2М в ОЗУ «БК0010» выполняется в следующей последовательности: монитор «БК0010» переводится в режим загрузки файла с магнитофона командой М; на ДВК выполняется программа MAG; командой S загруженная в БК программа запускается на выполнение (с адреса загрузки).

Аппаратный интерфейс (контроллер) связи ДВК-2М с магнитофоном типа «Электроника 302» или микро-ЭВМ «Электроника БК-0010»
ЛИТЕРАТУРА
- Косенков С.М. и др. Бытовая персональная микро-ЭВМ «Электроника БК 0010» // Микропроцессорные средства и системы. - 1985. - № 1. - С. 22-25.
- Зиглер К. Методы проектирования программных систем. - М.: Мир, 1985.
- Йенсен К., Вирт Н. PASCAL. - М.: Финансы и статистика, 1982.
- Валикова Л.Н., Вигдорчик Г.В., Воробьев А.Ю. и др. Операционная система СМ ЭВМ РАФОС. - М.: Финансы и статистика. 1984.
Статья поступила 2 июня 1986 г.