В.А. Тамазян (г. Джанкой)
Уже в нескольких номерах журнала печатались статьи о создании командных файлов на БК0010-01. Последняя программа "СОМ1" всем хороша, но использовать её в однофайловых программах не совсем выгодно как по количеству занимаемой памяти, так и по способу ввода текста файла.
Я хочу предложить более простой способ создания файла: в области стека в ячейке с адресом &O124 находится адрес ключа, который в данный момент исполняется, а в ячейке &O122 - его текущая длина.
Команда ЕМТ 6 рассматривает содержимое ячейки &O122: если там 0, то берет код с клавиатуры, иначе берет байт по адресу в ячейке &O124, увеличивает её содержимое на 1, а длину уменьшает на 1.
Программа реализующая командный файл может быть такой:
10 DATA &O016501,2,&O12702,<адр>,&O10237,&O124, &O12703,<длина>,&O10337,&O122,&O112122,&O77302,&O207 20 А% = &O37600 'адрес программы переноса (может изменяться) 30 DEF USR = А% 40 READ К 50 POKE А%, К 60 А% = А% + 2 70 IF К<>&O207 TH 40EL М$="..." 'задание текста файла 80 M$=USR(M$)
Здесь <адр> - адрес памяти, где может располагаться текст файла.
Вся эта программа нужна только для того, чтобы переместить содержимое символьной строки на фиксированное место в ОЗУ. Если у вас текст уже есть в памяти, то достаточно выполнить такие операторы:
POKE &O124,<адрес текста> POKE &O122,<адрес текста>
Чтобы ключ не выполнялся, когда в программе исполняются операторы типа INPUT, рекомендуется вставлять в программу операторы:
А% = PEEK(&O122) В% = PEEK(&O124) POKE &O122,0 <группа операторов> POKE &O122,А% POKE &O124,В%.
Моё второе предложение относится к составу клавиатуры БК0010-01.
Иногда бывает удобно нагрузить клавиши редактирования несколькими функциями. Такую возможность даёт предлагаемая ниже кодовая программа:
&O5037,&O37776,&O137,&O101136,&O12737,1,&O37776, &O137,&O101362
Эта программа перехватывает прерывания от верхнего и нижнего регистра клавиатуры и устанавливает флаг в ячейку &O37776 (можно использовать и любую другую ячейку, соответственно заменив в программе числа 37776 на другой адрес).
Пользоваться программой можно так:
- Занести программу в память машины (из БЕЙСИКА это можно сделать с помощью оператора DATA).
- Изменить векторы прерываний клавиатуры:
POKE &O60, <адр> POKE &O274, <адр> +&O10
Здесь <адр> - адрес загрузки программы в память.
- Результатом будет 0 в ячейке &O37776, если клавиша на клавиатуре нажата по верхнему регистру, и 1 в противном случае.
Теперь вы можете отличить <ВК> от АР2-<ВК>, просто нажатые клавиши управления, и их нажатие с АР2 и т.д.
Проиллюстрировать программу можно таким примером:
10 DATA ...
... загрузка программы изменение векторов
100 ?AT(0,0) ОСТ$(PEEK(&O177662)PEEK(&O37776) 110 GOTO 100