В.Д. БУРТЯНСКИЙ,
студент ДГУ г. Днепропетровск

MERGE для Бейсика БК0010

Выпускаемые ныне компьютеры БК-0010-01 оснащаются транслятором БЕЙСИКа версии 1986.07-24, которая обладает существенным недостатком: в ней не реализована команда MERGE, позволяющая объединять программы, записанные на магнитной ленте. Вследствие этого затрудняются создание и использование библиотеки подпрограмм.

Этот недостаток можно преодолеть: достаточно воспользоваться приводимой ниже короткой программой в кодах, включаемой в Бейсик-систему. Программу можно разместить в любом свободном участке адресного пространства длиной &O144 байта, например, в области стека с адреса &O400 (если есть уверенность, что не произойдёт взаимного перекрытия программы и стека) или вблизи верхней границы ОЗУ, выделив для этого свободный участок памяти оператором CLEAR с соответствующими параметрами.

После загрузки необходимо запустить программу с начального адреса. Можно объединить загрузку и запуск, пользуясь командой

BLOAD "имя", R.

После запуска появляется возможность использовать новую команду:

MERGE «спецификация файла», которая загружает с ленты программу на БЕЙСИКе, записанную в формате ASC, и объединяет её с программой, хранящейся в ОЗУ. Если номер какой-либо строки загруженной программы совпадает с номером одной из строк, хранящихся в памяти, то загруженная строка замещает старую.

Исключить рассматриваемую программу из Бейсик-системы можно командой:

РОКЕ &O30, &O100112

Принцип работы программы заключается в следующем. Будем считать, что начальный адрес равен 1000. После запуска вектор прерываний по команде ЕМТ устанавливается на адрес 1014 и производится останов. По адресам 1014-1050 расположен диспетчер команды ЕМТ, который обеспечивает обработку ЕМТ-прерываний и отлавливает прерывания по команде ЕМТ 6, при которых с клавиатуры был введён символ <ВК> (код &O12). Если такая ситуация возникла, то анализируется содержимое буфера ввода Бейсик-системы, расположенного с адреса 2422 (адреса 1060-1120). Если там не находится команда MERGE, то осуществляется возврат из прерывания. В противном случае символ <ВК> печатается и добавляется к содержимому буфера, восстанавливается указатель стека, гасится курсор и управление передаётся в ПЗУ по адресу 136116 - это другой вход в программу обработки команды LOAD.

Текст программы в кодах и на АССЕМБЛЕРе:

1000    010737      MOV R7,@#30
1002        30
1004    062737      ADD #12,@#30
1006        12
1010        30
1012    000000      HALT
1014    010546      MOV R5,-(R6)
1016    016605      MOV 2(R6),R5
1020         2
1022    014505      MOV -(R5),R5
1024    042705      BIC #177400,R5
1026    177400
1030    010546      MOV R5,-(R6)
1032    016505      MOV 100000(R5),R5
1034    100000
1036    004715      JSR R7,@R5
1040    022627      CMP (R6)+,#6
1042         6
1044    001402      BEQ A
1046    012605  B:  MOV (R6)+,R5
1050    000002      RTI
1052    120027  A:  CMPB R0,#12
1054        12
1056    001373      BNE В
1060    012705      MOV #2422,R5
1062      2422
1064    122527      CMPB (R5)+,#115
1066       115
1070    001366      BNE В
1072    122527      CMPB (R5)+,#105
1074       105
1076    001363      BNE В
1100    122527      CMPB (R5)+,#122
1102       122
1104    001360      BNE В
1106    122527      CMPB (R5)+,#107
1110       107
1112    001355      BNE В
1114    122527      CMPB (R5)+,#105
1116       105
1120    001352      BNE В
1122    104016      EMT 16
1124    110021      MOVВ R0,(R1)+
1126    062706      ADD #6,R6
1130         6
1132    010503      MOV R5,R3
1134    004737      JSR R7,@#124120
1136    124120
1140    000137      JMP @#136116
1142    136116

Комментарий рецензента на программу, реализующую возможности команды MERGE БЕЙСИКа БК0010.01

В версии БЕЙСИКа БК0010.01 отсутствует очень полезная команда MERGE, позволяющая в других версиях объединить программу, находящуюся в ОЗУ, с программой, загружаемой с внешнего устройства. Вследствие этого затрудняется накопление пользователями библиотек подпрограмм.

Предложенная автором программа позволяет выполнять команду MERGE "имя файла", объединяя программу в ОЗУ с программой на магнитной ленте. Команда должна вводиться в диалоговом режиме, обязательно без пробела между кавычкой и именем файла. По адресу 10768 в тексте авторской программы должен содержаться код 13658 После исправления этой неточности программа становится работоспособной.

Программа, повторяю, очень полезна для пользователей, однако у неё есть хороший аналог: программа И. Николаева из г. Москвы (журнал "Информатика и образование". - 1989. - №1). Программа-аналог существенно короче, реализована с использованием подмены того же прерывания ЕМТ 6 и выполняет те же самые функции, что и предлагаемая В.Д. Буртянским. О команде MERGE см. выпуски серии "Вычислительная техника и её применение", № 9 за 1988 г. и № 3 за 1989 г. (прим.gid: нету там ничего. Я не нашёл.)

 

Л.Н. Жариков

 

Performed by © gid, 2012-2022.