В.А. Тамазян (г. Джанкой)

Уже в нескольких номерах журнала печатались статьи о создании командных файлов на БК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 на другой адрес).

Пользоваться программой можно так:

  1. Занести программу в память машины (из БЕЙСИКА это можно сделать с помощью оператора DATA).
  2. Изменить векторы прерываний клавиатуры:
    POKE &O60, <адр>
    POKE &O274, <адр> +&O10

    Здесь <адр> - адрес загрузки программы в память.

  3. Результатом будет 0 в ячейке &O37776, если клавиша на клавиатуре нажата по верхнему регистру, и 1 в противном случае.

Теперь вы можете отличить <ВК> от АР2-<ВК>, просто нажатые клавиши управления, и их нажатие с АР2 и т.д.

Проиллюстрировать программу можно таким примером:

10 DATA ...

... загрузка программы изменение векторов

100 ?AT(0,0) ОСТ$(PEEK(&O177662)PEEK(&O37776)
110 GOTO 100

 

Performed by © gid, 2012-2022.