В.Д. БУРТЯНСКИЙ,
студент ДГУ г. Днепропетровск
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: нету там ничего. Я не нашёл.)
Л.Н. Жариков