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

После завершения отладки программа компонуется вместе с 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» необходимо:

Наиболее простой и эффективный способ переноса программ - загрузка программы в ОЗУ «БК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»

ЛИТЕРАТУРА

  1. Косенков С.М. и др. Бытовая персональная микро-ЭВМ «Электроника БК 0010» // Микропроцессорные средства и системы. - 1985. - № 1. - С. 22-25.
  2. Зиглер К. Методы проектирования программных систем. - М.: Мир, 1985.
  3. Йенсен К., Вирт Н. PASCAL. - М.: Финансы и статистика, 1982.
  4. Валикова Л.Н., Вигдорчик Г.В., Воробьев А.Ю. и др. Операционная система СМ ЭВМ РАФОС. - М.: Финансы и статистика. 1984.

Статья поступила 2 июня 1986 г.

 

Performed by © gid, 2012-2024.