УДК 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 г.