Как работает команда MARK

Опубликованная в «ИНФО» серия статей Ю. Зальцмана по ассемблеру БК-0010 является хорошим пособием для работников нашего образования, которые чаще всего не имеют специальной подготовки в этой области. Одновременно эти материалы являются доступным для рядового учителя справочником по системе инструкций процессора К1801. Поэтому досадно, что в такой нужной и квалифицированной статье содержится ошибочное описание одной из машинных операций: речь идёт о команде MARK. Она действительно «применяется крайне редко» и в популярной литературе «нигде не описана достаточно понятно» [1]. Но в то же время она «входит составной частью в стандартное соглашение ЭВМ PDP-11 о возврате из подпрограммы» и заметно «облегчает выполнение очистки стека при выходе из подпрограммы» [2]. Так что рассматривать команду MARK стоит внимательно и не спеша.

В [1] при изучении MARK обсуждается стандартный вариант её применения (почти в том же виде он даётся в [2]), поэтому приводимый ассемблерный фрагмент безусловно правилен и будет работать. К сожалению, описание к нему не всегда соответствует действительности, а выполнение рекомендаций статьи по использованию MARK может вызвать непредсказуемые последствия при работе программы.

Как же реализуется эта команда?

Рассмотрение будем вести на основе приведённого в [1] примера. Для удобства читателей воспроизведём его с незначительными изменениями обозначений и комментариев.

;ПОДГОТОВИТЕЛЬНЫЕ ОПЕРАЦИИ
                            ; Записать в стек:
        MOV     R5, -(SP)   ;текущее значение R5,
        MOV     #101, -(SP) ;параметры
        MOV     #102, -(SP) ;для подпрограммы
        MOV     #103, -(SP) ;SBR,
        MOV     #6403,-(SP) ;код команды MARK 3
        MOV     SP, R5      ; Адрес команды MARK занести в R5 
                            ;для обеспечения перехода к ней
;ВЫЗОВ ПОДПРОГРАММЫ
        JSR     PC, SBR
        ;.......Текст дальнейшей
        ;.......программы.
;ПОДПРОГРАММА SBR
SBR:    ;.......Текст
        ;.......подпрограммы.
        RTS R5              ;Выход из SBR на команду MARK

Предположим, что начальное значение указателя стека SP0 (рис. 1) уже определено. Прежде чем использовать команду MARK, необходимо провести некоторые подготовительные операции: запомнить в стеке значение регистра R5 (этот РОН аппаратно использует команда); занести в стек параметры для подпрограммы SBR и метку конца для случая трёх параметров MARK 3; текущее положение SP (оно совпадает с адресом команды MARK и на рис. 1 обозначено РСМ) скопировать в R5.

Теперь из основной программы следует вызов подпрограммы SBR (рис. 2). При этом текущее содержимое PC, т.е. адрес следующей за JSR PC команды, автоматически попадёт в стек. Указатель принимает значение SP1 (см. рис. 1).

Выполнение подпрограммы завершается командой RTS R5 (а не RTS PC!), по которой процессор переписывает R5 в R7, а затем в R5 заносит из стека очередное значение. В рассматриваемом примере в PC попадёт подготовленный заранее в R5 адрес команды MARK, а в R5 - адрес возврата из подпрограммы. Новое положение указателя стека на рис. 1 обозначено SP2.

Теперь выполняется команда MARK 3, расположенная в стеке (не забывайте заглядывать на рис. 2). Это происходит следующим образом.

 

 

 

<------

SP0,

начальное положение указателя стека

******

Старое значение R5

<------

SP3,

положение указателя стека после удаления параметров (РСМ+2+2*3)

000101

Параметры

 

 

 

000102

для подпрограммы

 

 

 

 

000103

SBR

 

 

 

PCM

006403

Метка конца MARK

<------

SP2,

положение указателя перед исполнением команды MARK положение указателя после входа в подпрограмму

 

******

Адрес возврата

<------

SP1,

         

Рис. 1

 

Рис. 2

  1. Вычисляется новое значение указателя стека SP3 по формуле (PCM+2)+2*N, где РСМ+2 - текущее содержимое PC после выборки команды MARK, N - число параметров для подпрограммы. В результате стек освобождается от параметров и его указатель перемещается на исходное значение R5 (см. рис. 1). Обратите внимание на то, что величина SP3 вычисляется не через R6, а через программный счётчик R7. Из этого следует, что команда-метка MARK всегда должна быть расположена именно в стеке, а не внутри программы!
  2. Содержимое R5 (в нашем случае адрес возврата) помещается в регистр PC.
  3. В R5 выталкивается из стека первоначальное значение этого РОНа, указатель возвращается в исходное положение SP0.

Итак, в PC находится адрес следующей за обращением к подпрограмме команды, SP и R5 восстановлены. Возврат из подпрограммы завершён, стек очищен, и продолжается выполнение основной программы (см. рис. 2).

Обратите внимание на то, что описанные в п. 2 и 3 действия эквиваленты операции RTS R5, поэтому команду MARK можно рассматривать как сочетание своеобразной подстройки указателя стека (п. 1) и RTS R5.

Таким образом, описание команды MARK в [1] содержит две существенные неточности, которые в случае применения рекомендаций статьи приведут к потере управления программой. Во-первых, ошибочно утверждается, что регистр «под буфер адреса возврата» выбирается произвольно, в то время как процессор аппаратно может использовать для этой цели только R5. Если всё же попытаться применить для хранения адреса другой РОН, на втором этапе команды MARK произойдёт передача управления по не подготовленному для этого содержимому R5. Во-вторых, ни в коем случае нельзя «просто записать в тексте программы MARK X». Последствия этой ошибки будут ещё более тяжёлыми: помимо перехода по неопределённому адресу из R5 на первом этапе работы команды MARK указатель стека будет установлен на программу (см. формулу для SP3 на рис. 1).

Литература

  1. Зальцман Ю. Ассемблер БК // Информатика и образование. 1991. № 2. С. 60,-61.
  2. Лин В. PDP-11 - VAX-11. Архитектура ЭВМ и программирование на языке ассемблера. М.: Радио и связь, 1989.

Е. ЕРЕМИН


 

Диспетчер ОЗУ и операционная система RAMDOS для БК-128К

В этой статье речь пойдёт о БК-0010 без ПЗУ, с дополнительными 96 Кбайт ОЗУ и схемой управления ОЗУ (диспетчером). ОЗУ организовано в четыре страницы по 32 Кбайт, часть этого объёма может использоваться в качестве видеопамяти (максимум четыре страницы по 16 Кбайт). В качестве регистра состояния используется адрес 177616.

Диспетчер (рис. 1) представляет собой устройство, поддерживающее работу дополнительного ОЗУ БК-0010(01) со страничной организацией памяти - четыре страницы по 32 Кбайт, подключаемые по адресам 0 - 100000, причём верхние 16 Кбайт каждой страницы могут быть использованы в качестве видео-ОЗУ, обеспечивая многооконный режим работы. Однако следует иметь в виду, что активной является только текущая страница, т.е. подключённая в нижнюю область ОЗУ по адресам 0 - 100000; информация может быть записана только на неё. На отображение может быть подключена любая из четырёх имеющихся страниц, что позволяет, наблюдая одну картинку на экране, готовить в это время другую.

При разработке программного обеспечения о переключении экранов программист должен позаботиться сам. Переключение осуществляется занесением информации в 3-4-й биты регистра состояния (адрес 177616). При включении компьютера пользователю доступны (по умолчанию) нулевая страница ОЗУ и нулевой экран.

Кроме того, дополнительная память может использоваться в качестве электронных дисков.

Регистр состояния доступен только по записи, возможность прочитать его отсутствует.

Назначение битов регистра состояния следующее:

0-й и 1-й - номер активной страницы ОЗУ;

3-й и 4-й - номер активной видеостраницы;

5-й - включение таймера;

6-и - отключение монитора;

7-й - отключение ПЗУ с Бейсиком.

При отключении ПЗУ на его место включается четвертая страница ОЗУ, расширяя тем самым ОЗУ пользователя до 64 Кбайт.

Адреса 177600 - 177776 использованы для системных регистров.

После включения БК распределение памяти стандартное, т.е. 32 Кбайт ОЗУ и 32 Кбайт ПЗУ.

Диспетчер размещается на печатной плате размером 80x95 мм внутри корпуса БК-0010 (01). Печатная плата располагается на стойках в левой части БК, рядом с системным разъёмом.

Питание на диспетчер подаётся от компьютера: +5 В - от А12 системного разъёма, 0 - от А3 системного разъёма.

Для обеспечения при включении питания пуска процессора с адреса 100000 необходимо припаять диод КД522 согласно схеме, рис. 2 (номера микросхем приведены согласно принципиальной схеме БК).

 

Рис. 1

Рис. 2

Подключение диспетчера к БК производится следующим образом.

Отпаять вывод 17 микросхемы D17 на плате БК и соединить этот вывод с микросхемой К555ЛР4 диспетчера памяти.

Осторожно выпаять из платы 16 микросхем памяти К565РУ6 и на их место установить микросхемы К565РУ5(Б, В), предварительно проверив их на годность. Предварительно у микросхем К565РУ5 отогнуть выводы 9 и объединить их проводом, не впаивая в плату.

При пайке паяльник обязательно должен быть заземлён.

Отпаять вывод 23 микросхемы DS17 БК и в разрыв впаять резистор МЛТ-0,125 1 кОм. Эту же операцию проделать и с другими ПЗУ.

6. Подсоединить контроллер к БК согласно табл. 1.

 

Таблица 1

Диспетчер

Выводы микросхемы DS19

AD0

16

AD1

15

AD2

14

AD3

13

AD4

4

AD5

5

AD6

6

AD7

7

AD8

8

AD9

9

AD10

10

AD11

11

AD12

12

AD13

18

AD14

19

AD15

20

Таблица 2

Диспетчер

БК

RPLY

Вывод 13 D3.2

INT

В19 системного разъёма

DOUT

В21 системного разъёма

SYN

В22 системного разъёма

А7

Выводы 9 DS1-DS16

MON (монитор)

Вывод 23 DS17

ПЗУ (Бейсик)

Вывод 23 DS19

AD15 ВП37

Вывод 17 D17

+5 В

А12 системного разъёма

0

А2 системного разъёма

 

Правильно собранная схема не нуждается в наладке и начинает работать сразу после включения.

Микросхемы серии К555 могут быть заменены на микросхемы серии К155, однако при этом увеличится потребляемый от источника питания ток и возрастёт нагрузка на системный разъём. Микросхема К555КП15 может быть заменена на К155КП7, К580ИР82 - на К555ИР22. Резисторы - МЛТ 0,125 или 0,25, конденсаторы керамические типа КМ-5.

БК имеет вход прерывания таймера. Принцип работы таймера весьма прост: при поступлении на вход процессора ПРТ сигнала низкого уровня тот прекращает выполнение основной программы, запоминает в стеке слово состояния и адрес следующей команды и переходит на обработку прерывания по вектору 100, т.е. по адресу, который записан в ячейку памяти 100. После завершения программы обработки прерывания процессор возобновляет выполнение основной программы.

Плата диспетчера ОЗУ позволяет организовать такой таймер. Им можно управлять программным путём, записывая информацию в 5-й бит регистра состояния, т.е. по адресу 177616.

Нулевое значение соответствует включённому таймеру.

Для организации таймера необходимо на плате диспетчера ОЗУ собрать небольшой узел, схема которого приведена на рис. 3.

Рис. 3

В качестве временных меток можно использовать сигнал синхронизации видеосигнала, предварительно выделив из него кадровые импульсы, после чего подать их на вход процессора ПРТ, усилив по амплитуде.

Управление таймером производится по цепи эмиттера, который связан с выводом ТАЙМЕР микросхемы D10 диспетчера ОЗУ.

Для поддержки работы диспетчера памяти разработана ОС RAMDOS. Мнемоника её команд аналогична операционной системе RT-11.

Среди достоинств RAMDOS прежде всего возможность быстрого обмена информацией между электронными дисками и ОЗУ, что особенно важно при работе с системными программами, например ассемблером, когда программа состоит из модулей и приходится то и дело записывать или читать файлы с магнитофона, или при работе с большими текстами, когда документ имеет многофайловую структуру. Для тех, кто любит играть в многосерийные игры и знает, сколько времени занимает ввод очередной серии, система RAMDOS также будет очень полезна, поскольку считывание программ с электронного диска занимает доли секунды.

RAMDOS маскирует все прерывания, в том числе и таймерные, обрабатывая их соответствующим образом.

Распределение адресного пространства

177776

 

 

 

 

RAMDOS

 

 

 

 

 

 

 

160000

 

 

 

16К байт ОЗУ

Область программ пользователя

 

 

120000

Системный монитор БК

Монитор

 

 

100000

16К байт экрана.

32К байт

32К байт

 

 

 

 

40000

16К байт ОЗУ

Диск SY

Диск DK

 

 

1000

Векторы

512 байтов

 

0

 

 

 

 

 

Изменять информацию в адресном пространстве RAMDOS - начиная с адреса 160000 и выше - категорически запрещается: это может разрушить операционную систему.

Ниже приводится описание операторов.

QUIT - выход из системы в монитор БК с восстановлением таблиц и векторов.

EXIT - выход из системы в монитор БК с возможностью возвращения в систему по СТОП, программы на электронных дисках сохраняются.

RESET - перезапуск RAMDOS, восстановление таблиц системы и векторов прерываний, содержимое электронных дисков сохраняется.

LOAD [DEV:] NAME - чтение программы с магнитофона под именем NAME и занесение её на электронный диск; DEV: - имя устройства, на которое будет записан файл. По умолчанию файл записывается на устройство с логическим именем DK, при наличии на нём файла с указанным именем запись не производится и выдаётся диагностическое сообщение. Квадратные скобки здесь и далее обозначают необязательный параметр.

SAVE [DEV:] NAME - запись программы NAME с устройства с логическим именем DEV на магнитофон под тем же именем. При отсутствии файла с указанным именем выдаётся диагностическое сообщение.

ASSIGN DEV:DEVN: - назначение указанному устройству нового логического имени. По умолчанию в системе зарезервированы имена: системный диск - LD0, рабочий диск - LD1. Примеры:

ASSIGN МХ0: SY: - теперь системный электронный диск имеет имя МХ0:, ASSIGN DK: SY: - системный диск становится рабочим.

DELETE [DEV:]NAME - удаление файла с именем NAME с указанного устройства; при отсутствии файла выдаётся диагностическое сообщение. Все операции по удалению требуют подтверждения, поэтому на запрос: “Are you sure?” необходимо ввести Y для подтверждения и нажать ВК. Пример: DELETE SY:FOCAL - удалить с системного диска файл с именем FOCAL.

PRINT [DEV:] NAME- выдать содержимое файла с именем NAME на печатающее устройство. Драйвер печати позволяет работать с принтерами Д100, МС6312 и др. Для нормальной работы принтера необходимо контакт А30 порта БК замкнуть на контакт В11. Распайка кабеля приведена в табл. 3.

 

Таблица 3

Порт БК

Принтер

В31 (ВВ08)

Готовность

А16 (ВД00)

Данные

А13 (ВД01)

Данные

В12 (ВД02)

Данные

В10 (ВД03)

Данные

В05 (ВД04)

Данные

В07 (ВД05)

Данные

В06 (ВД06)

Данные

А07 (ВД07)

Данные

А28 (ВД08)

Строб

В11 (Общ.)

Общий

А30 (ВВ15)

Общий

INIT DEV: - инициализация каталога тома DEV:. Перед инициализацией выдаётся запрос на подтверждение, при положительном ответе указанный том очищается.

RENAME [DEV:] NAME NAME1 - переименование файла на указанном устройстве. Пример: RENAME RAMDOS DOS- файл RAMDOS, находящийся на диске DK:, будет переименован в DOS.

COPY N,K,A - копирование области памяти с адреса N по К в область, начинающуюся с адреса А. Команда полезна при перемещении программ в другую область памяти перед запуском.

TYPE [DEV:] NAME - выдать содержимое файла под именем NAME на терминал в символьном представлении (например, для просмотра). Приостанови текста для просмотра- клавиши СУ+@, их повторное нажатие - возобновление продвижения по экрану текстовой информации.

DIR [DEV:] -просмотр каталога указанного тома на терминале с выдачей числа файлов, объёмов занятой и свободной областей памяти.

START А - запуск программы с указанного адреса.

GET [DEV:] NAME - загрузка программы под именем NAME с указанного устройства в память без запуска на исполнение, с выдачей адреса загрузки и длины программы, автозапуск блокируется.

RUN [DEV:] NAME - загрузка и запуск программы под именем NAME с указанного устройства. Программы, имеющие автозапуск, запускаются по установленному в них адресу.

Е N[-К] - просмотр на терминале содержимого ячеек памяти в восьмеричном виде. Пример: Е 1000-2000 - вывод на терминал значений ячеек памяти с адреса 1000 по 2000.

D А=W[,W...] - запись в память информации, расположенной с адреса А. Попытка записать данные в область RAMDOS блокируется, на терминал выдаётся предупреждение. Пример: D 1000=12700,101,104016,137,1000.

Загрузка RAMDOS производится из монитора следующим образом (курсивные символы выводятся компьютером):

? М<ВК>
ИМЯ ? RAMDOS.WS<BK>
? S<BK>

После запуска RAMDOS производит самоинициализацию и перестройку монитора, экран очищается и на него выводится заставка системы. При нажатии любой клавиши происходит переход в RAMDOS, о чём свидетельствует надпись в служебной строке и знак «точка» - признак нахождения в редакторе командной строки.

Программа ожидает действий пользователя.

Команда SHOW подсказывает формат команд RAMDOS.

.SHOW<ВК>

Система распечатает список и формат команд.

Теперь в распоряжении пользователя имеется два электронных диска общим объёмом 64 Кбайт и 32 Кбайт свободной оперативной памяти при полном графическом экране.

Но диски пока пусты, в этом можно убедиться, «заглянув» в них с помощью команд

.DIR<BK>
.DIR SY:<BK>

Их можно заполнить, загрузив с магнитофона нужные программы. Для этого необходимо подать команду

.LOAD SY:ODT3.WS<BK>

Она введёт с магнитофона и загрузит на системный диск файл ODT3.WS. Посмотрите теперь каталог,

.DIR SY:<BK>

и вы убедитесь, что программа занесена в дисковую память.

Таким же образом загрузите остальные необходимые вам файлы.

Теперь можно приступить к работе. Например, вы хотите редактировать текстовые документы. Для этого необходимо запустить ранее записанный на диск текстовый редактор.

.RUN EDASP10<BK>

По этой команде произойдёт загрузка и запуск редактора.

Создав текстовый документ, вы можете сохранить его на указанном вами диске, причём практически мгновенно. По умолчанию запись производится на диск DK:.

При повторной записи текста старый файл на диске замещается новым (при условии совпадения имён).

Выходы из программ организованы по- разному. Очень часто программы не восстанавливают векторы прерываний, которые были до их запуска, поэтому, если вы при выходе из программы вдруг оказались в мониторе, следует дать команду

Т<ВК> 

или (если не был нарушен вектор 4) нажать клавишу СТОП.

Для аварийного выхода из программы и перехода в RAMDOS необходимо двукратное нажатие клавиши КТ - такая процедура выбрана потому, что некоторые пользовательские программы используют эту клавишу.

При выходе в систему по этой команде содержимое дисков сохраняется.

Редактор командной строки запоминает последнюю набранную команду. Её повторный вызов производится нажатием клавиши ВС.

Программы с автозапуском в рамках RAMDOS работают корректно.

Команды QUIT, EXIT, DELETE, INIT перед выполнением требуют подтверждения - например, при инициализации каталога диска LD0 произойдёт следующий диалог:

.INIT LD0:<BK>
Are you sure? Y<BK>

И только по команде пользователя диск будет очищен.

В. КОРЕНКОВ


 

Дополнительные сведения о системном таймере

О системном таймере БК-0010 уже сообщалось в «ИНФО» [1, 2]. В данной статье приводятся некоторые дополнительные сведения о нём.

Таймер состоит из следующих узлов:

Управляют работой таймера с помощью РКС путём установки соответствующих битов. РКС представляет собой шестнадцатиразрядный регистр ввода-вывода, в котором доступны разряды 0-7 (разряды 8-15 не используются и всегда установлены в единицу). Функции разрядов РКС следующие:

Приведём несколько примеров использования таймера.

Пример 1: работа в режиме одновибратора.

;Генератор ноты
; R0 - тон
; R1 - длительность * 42.9 мкс
BEEP:   MOV     R2,-(SP)        ;Сохранить R2
        MOV     R1,@#177706     ;Установка =
                                ;длительность
        MOV     #34,©#177712    ;Запуск
                                ;одновибратора
LOOP1:  MOV     R0,R2           ;1/2 периода
        BEQ     PAUSE           ;Если тон=0,
                                ;то пауза
        MOV     #320,@#177716   ;Вкл. звук
LOOP2:  SOB     R2,LOOP2        ;Положительный
                                ;полупериод 
        MOV     R0,R2           ;1/2 периода
        MOV     #220,@#177716   ;Выкл. звук
LOOP3:  SOB     R2,LOOP3        ;Отрицательный
                                ;полупериод 
PAUSE:  TSTB    @#177712        ;Конец счета
                                ;длительности 
        BPL     LOOP1           ;След. период
        MOV     (SP)+,R2        ;восстановить R2
        RTS     PC

Пример 2: программа с заданным времён нём исполнения.

        .                       ;Подготовительные
        .                       ;
        .                       ; действия
GAME:   MOV     #2331.,@#177706 ;10 раз в
        MOV     #24,@#177712    ; секунду
                                ;запуск таймера
        .                       ;Основной
        .                       ;цикл игры,
        .                       ;длительность
        .                       ;переменная
        .                       ;Т<0.1 сек
WAIT:   TSTB    @#177712        ;Конец цикла
                                ;0,1 сек?
        BPL     WAIT            ;Ожидать конца 
        JMP     GAME            ;Следующий цикл

Пример 3: фиксированная задержка, счётчик продолжает считать.

        .
        .
        MOV     #DELAY,@#177706 ;Величина ;задержки
        MOV     #24,@#177712    ;Запуск
WAIT:   TSTB    @#177712        ;Ожидание,
        BPL     WAIT            ;пока конец
                                ;счета <>1
        .       ;Содержимое 177710 можно
        .       ;использовать для коррекции
        .       ;времени, бит 3=1

Пример 4: фиксированная задержка, счётчик останавливается.

        .
        .
        MOV     #DELAY,@#177706 ;Величина задержки
        MOV     #34,@#177712.   ;Запуск
WAIT:   TSTB    @#177712        ;Ожидание,
        BPL     WAIT            ;пока конец
                                ;счета <>1
        .                       ;Счетчик=DELAY
        .                       ;Бит 3=0
        .

Из примеров видно, что использование бита 7 гораздо удобнее, чем попытка определения перехода счётчика через ноль. Особенно это заметно в интерпретаторах Бейсика и Фокала.

Если кому-либо известны более подробные сведения о таймере, прошу сообщить их мне или в редакцию «ИНФО». Заранее благодарен.

202020, Эстония, Йыхви, п/я 69. А. Подгорецкий

Литература

  1. Яковлев В. Отсчёт времени на БК-0010.01 // Информатика и образование. 1990. № 1.
  2. Зальцман Ю. Архитектура и ассемблер БК-0010 // Информатика и образование. 1990. № 6.

 

Многоформатный верификатор-каталогизатор

За последние годы ассортимент домашних компьютеров, доступных рядовому пользователю, значительно вырос, однако интерес к БК-0010 не упал ни у покупателей, ни у пользователей, ни у программистов; свидетельством тому является дефицитность этого компьютера и всё возрастающее количество разнообразного программного обеспечения для него.

Для систематизации, каталогизации и проверки качества записи программ для БК на магнитной ленте (МЛ) имеется ряд специальных программ, лучшая из которых - VERIFY 2.0 написана А. Тереховским (см.: ИНФО. 1990. № 3). Она имеет достаточно широкий набор функций и удобный интерфейс.

Однако сегодня этот верификатор-каталогизатор уже не может считаться универсальным хотя бы потому, что он не воспринимает записей файлов, сделанных методом модифицированной фазовой модуляции (МФМ). Этот очень перспективный метод записи файлов на МЛ предложен недавно А. Молчановым (Ленинград), причём сразу в двух модификациях - HELP4S и HELP7, и за короткое время получил широкое распространение из-за обеспечиваемой им почти абсолютной надёжности считывания записей с МЛ даже сильно изношенными и разъюстированными головками низкоклассных магнитофонов.

В последнее время были сделаны попытки объединения штатного метода записи и одной из модификаций метода МФМ в одном копировщике - MAG1A. Нет сомнений, что вскоре появятся и новые копировщики, ещё более универсальные. Таким образом, явно наметилась тенденция расширения форматов записей файлов на МЛ, а в связи с этим возникла и необходимость создания нового, многоформатного, верификатора-каталогизатора, усугублённая тем, что новый формат МФМ, помимо уже отмеченных достоинств, идеально подходит для создания очень плотных файловых архивов на МЛ. Между тем хорошо известно, что никакой архив без каталога обойтись не может.

Одновременно необходимо учитывать, что имеется и несколько текстовых редакторов, в формате которых хотелось бы записывать результаты проверки (верификации) файлов. Здесь особо следует отметить редактор, входящий в ассемблер-систему МИКРО.10К С. Кумандина (г. Коломна) и получивший самое широкое распространение среди профессионалов - пользователей БК. Следует упомянуть и конкурирующую с ним систему А. Сомова, ну и, конечно, ставший уже классическим текстовой редактор EDASP. Этими тремя подходами к созданию текстовых файлов вполне можно ограничиться сегодня, но никто не поручится за завтра!..

Именно по этим соображениям автор не рискнул назвать свой верификатор-каталогизатор «универсальным», хотя по универсализму он намного опережает уже упоминавшийся VERIFY2.0.

Верификатор, получивший название VERIFY PLUS (VERIFY+), вобрал в себя весь накопленный опыт в области верификации записей на МЛ, а также ряд новшеств: алгоритм верификации файлов, записанных на МЛ в трёх форматах (стандартный, Н4, Н7), алгоритм защиты процесса верификации от систематических помех (вероятность распознавания полезного сигнала доведена до 80%), алгоритм защиты от сбоев при длине тестируемого файла больше предельно допустимой (для стандартного и Н4 форматов - 40 000(8), для Н7 длина не ограничена), процедуру просмотра результатов верификации на экране монитора с возможностью перемещения по списку в обе стороны, просмотр списка сбойных файлов, встроенный редактор текущей строки списка, вывод результатов верификации на печать принтерами разных марок и запись каталожного файла на МЛ в различных форматах.

Программа может быть загружена и запущена с любого чётного адреса, причём адрес «тёплого» старта всегда на 2 больше адреса загрузки. Буфер программы располагается за ней, если адрес конца программы меньше 37 000(8), в противном случае буфер располагается с адреса 1000(8), что позволяет загружать VERIFY+ в область расширения ОЗУ (зашивка в ПЗУ недопустима!). После запуска программы на экран выводится её обложка, а при нажатии клавиши пробела происходит переход в главное меню. Вызов первого пункта меню «VERIFICATION» запускает процедуру проверки файлов на МЛ. После прочтения каждого файла выводится информация о его имени, адресе, длине, контрольной сумме или наличии ошибки. Если длина файла превышает допустимый предел, то чтение тела файла не производится, а вместо контрольной суммы (КС) выводится признак «long». Все атрибуты файла заносятся в буфер.

При вызове второго пункта меню - «NAMELIST» - чтение тела файла не производится. Этим режимом следует пользоваться для создания каталога кассеты без проверки качества записи: в нём меньше вероятность потери имён из-за сбоя при чтении. Выход из обоих режимов в главное меню по клавише СТОП, указатель режима меню устанавливается при этом на пункт «FINDINGS» (при ошибках в считанных файлах) или «LIST» (при их отсутствии). При повторном вызове режимов «VERIFICATION» или «NAMELIST» выводится запрос на начало нового списка. При положительном ответе буфер очищается и открывается новый список, в противном случае новые считанные имена будут подстыкованы к уже имеющимся в буфере. Одновременно метка границы (см. ниже) будет установлена на первое имя, считанное после повторного входа в режим.

Режим «NULL READING» предназначен для нахождения нужного участка на ленте для верификации или записи результатов. Имена, считанные в этом режиме, в буфер не заносятся.

Режим «FINDINGS» предназначен для вывода на экран списка файлов, в которых обнаружены ошибки. Если список не умещается на экране, то его вывод приостанавливается до нажатия любой клавиши. При отсутствии сбойных файлов режим блокируется.

В режиме «LIST» удобно просматривать список атрибутов считанных файлов. Выводится информация об имени, адресе, длине и КС. При наличии ошибки вместо КС выводится сообщение ERROR.

Если чтение тела файла не производилось (в режиме «NAMELIST» или при превышении по длине), то вместо КС выводится сообщение UNKNOWN. Если список не умещается на одном экране, то его можно просматривать в обоих направлениях клавишами ↑ и ↓, кроме того, с помощью клавиш СБР И КТ можно перейти к началу и концу списка соответственно. Выход в главное меню - по клавише ВВОД.

Режим «UNLOADING» открывает окно вспомогательного меню и окно параметров. Окно параметров содержит три строки: TYPE, FORMAT, PRINTER. В TYPE можно задать вид файла выходной информации. Первый вариант - STATEMENT - протокол верификации: каждому файлу отведена отдельная строка, выводится полный объём информации. Предполагается следующая структура каталога: (НОМЕР) (ИМЯ) (АДРЕС) (ДЛИНА) (АВТОР) (ГОД НАПИСАНИЯ, ПРИМ.). Второй вариант - CATALOGUE, каталог файлов: файлы с одинаковыми именами объединяются, длина имени урезается до 14-15 символов (в зависимости от адреса), кроме имени выводятся только адрес и длина. Четыре первые графы такой таблицы автоматически создаются каталогизатором, а три последние можно варьировать.

Третий вариант - ТАРЕ COVER, обложка кассеты. Он предназначен только для вывода на печать с помощью принтеров типа «Электроника МС 6312» и «Электроника МС 6313». Перед печатью необходимо установить метку на первое имя второй стороны кассеты (см. ниже). Если после проверки первой стороны выйти в меню, а затем снова войти в режимы «VERIFICATION» или «NAME LIST», то метка установится автоматически.

Параметр FORMAT задаёт формат записи файла: EDASP - формат редактора EDASP; MICRO#К - формат редактора МИКРО.10К, а также всех редакторов, использующих «естественный» формат кодирования (кодирование пробелов отсутствует, код перевода строки - 12(8)); MICRO#S - формат редактора ассемблер-системы MICRO (Сомов - Бакерин). Последний формат очень интересен для табличных форм представления информации.

PRINTER - выбор типа принтера: MS6312 - «Электроника МС6312»; MS6313 - «Электроника МС 6313», который может быть подключён как с инверторами по цепям STROBE и BUSY, так и без них (дополнительный выбор при этом не требуется); ANOTHER - любой другой принтер, подключённый по стандарту ИРПС в соответствии с паспортом БК (печать обложки кассеты в этом случае не гарантируется).

Меню режима «UNLOADING» состоит из следующих пунктов: SAVE - запись результирующего файла на МЛ в установленном формате, имя запрашивается, записываются две копии; PRINT - печать результирующего файла на принтере в установленном формате на выбранном типе принтера; TYPE, FORMAT, PRINTER - изменение параметров, описанных выше; MAIN MENU - выход в главное меню.

Режим «CORRECTION» основного меню предназначен для редактирования текущей строки каталожного списка. Текущая строка списка инвертируется на экране, её номер и КС выводятся в служебной строке. Коды, не имеющие графического отображения, выводятся в виде «забоев». Узнать, какой код за ними кроется, можно с помощью клавиши ИНД.СУ. При этом код символа, выделенного курсором, отображается в служебной строке. Редактор позволяет вводить большинство управляющих кодов по регистру СУ, а коды 0 и 32 клавишами ШАГ и СБР соответственно. Коррекция КС осуществляется по клавише БЛОК.РЕД. При этом новое значение КС запрашивается и после ввода шести символов или нажатия клавиши ВВОД отображается в служебной строке. Метка устанавливается нажатием СУ/М. Отмеченный файл будет печататься первым в списке второй стороны кассеты при печати её обложки. Удаление строки производится клавишей ВС, при этом делается запрос на подтверждение. Последняя оставшаяся строка списка не удаляется. Выход из редактора по клавише КТ.

Во всех режимах работы верификатора включён режим 32 символа в строке, что позволяет использовать цветной монитор. Выбор цветов осуществляется с помощью пункта COLOR основного меню.

Режим «EXIT» осуществляет выход в монитор БК. При этом запрашивается подтверждение. Возврат в верификатор без разрушения информации в буфере возможен по адресу «тёплого» старта, о чём уже говорилось выше.

 

С. КАРАГИОЗ


 

О «дребезге» клавиатуры БК-0010

Самым неприятным дефектом БК-0010.01 является выскакивание «чужого» символа при нажатии на какую-либо клавишу. Большинство пользователей винят в этом исключительно дребезг контактов и пытаются как-то исправить их либо увеличивают времязадающие цепи R3-C4 и R4-C3 (здесь и далее все обозначения соответствуют схеме БК). Причина дефекта, однако, глубже: разработчики компьютера механически перенесли типовую схему включения микросхемы К1801ВП1-014 на свою конструкцию, не учтя значительной паразитной ёмкости строк и столбцов матрицы клавиатуры. Паразитный заряд, не успевший исчезнуть после нажатия предыдущей клавиши, является причиной неверной идентификации следующей. Усугубляет ситуацию и то, что контакты работают в режиме микротоков, не разрешённом в технических условиях на кнопки.

Исправить ситуацию чрезвычайно просто - достаточно ускорить стекание паразитного заряда и увеличить ток через контакты клавиатуры, для чего заменить резисторную матрицу ЕЗ (7 резисторов по 180 кОм) на аналогичную с сопротивлениями резисторов по 4,7-5,6 кОм.

Поскольку замена матрицы трудоёмка и опасна (плата БК чувствительна к статическому электричеству), предлагается доработку произвести несколько другим способом.

Нужно отсоединить разъёмы ХТ1 и ХТ2 клавиатуры от платы БК, пометив их, чтобы потом не перепутать; расположить клавиатуру клавишами вниз и найти место распайки ленточного провода, идущего к разъёму ХТ2 (на плате клавиатуры - метка ХТ2). Семь резисторов с номиналом 4,7-5,6 кОм, 0,125-0,25 Вт припаять к точкам 1-7 распайки ленточного провода на плате так, чтобы их выводы располагались вплотную к плате, а корпуса находились за пределами платы (это облегчит последующую сборку). Между выводом резистора 1 и проводником печатной платы проложить кусочек изоленты.

Осталось объединить свободные выводы резисторов с помощью жёсткого провода. И припаять его второй конец к точке 8 на плате, подсоединить разъёмы ХТ1 и ХТ2 к плате БК и проверить работу клавиатуры.

Если стопроцентное избавление от «чужих» символов не достигнуто, можно точно так же уменьшить величины резисторов матрицы Е2 (9 резисторов по 22 кОм), припаяв резисторы с номиналом 4,7 - 10 кОм к точкам 1-4, 6, 7, 9-11 (ХТ1), а их свободные выводы соединив с точкой 16. Не забудьте подложить изоленту там, где это необходимо.

Борис Фролкин

 

От редакции. Ещё не купивших БК-0010.01 спешим обрадовать: теперь завод «Экситон» комплектует эти компьютеры (а также БК-0011) клавиатурой нового типа, более эргономичной и не подверженной «дребезгу». Покупайте БК!

 


 

Подключение термопринтера 15ВВП80-002 к БК

ТПУ 15ВВП80-002 принимает 7-битный код и печатает символы согласно таблицам КОИ-70 и КОИ-71. Первая включает цифры, латинские буквы (строчные и прописные) и специальные знаки, вторая - цифры, русские буквы (строчные и прописные) и специальные знаки. Выбор таблиц осуществляется ТПУ в соответствии с сигналом СИ4 (позиция). Его логический уровень. (0 или 1) определяет используемую таблицу. Логический уровень сигнала СИ3 (форма) должен быть равен нулю. Небольшое аппаратное дополнение позволяет использовать 15ВВП80-002 без специального драйвера, непосредственно с вильнюсским Бейсиком или EDASP10.1. Достаточно инвертировать сигнал ВД07 (контакт А7 разъёма МПИ БК) и соединить БК и ТПУ в соответствии с таблицей.

Разъём ТПУ

Разъём БК

Б

Сигнал

А

В

Сигнал

4

ГИ - ИБС

А18

В18

Общий

6

СТР - ИБС

А28

 

ВД08

7

ЗП - ТПУ

 

В31

ВВ08

8

СИ4 - ИБС

А7

 

ВД07

9

Д0 - ИБС

А16

 

ВД00

10

Д1 - ИБС

А13

 

ВД01

11

Д2 - ИБС

 

В12

ВД02

12

ДЗ - ИБС

 

В10

ВД03

13

Д4 - ИБС

 

В5

ВД04

14

Д5 - ИБС

 

В7

ВД05

15

Д6 - ИБС

 

В6

ВД06

18

СИ3 - ИБС

А18

В18

Общий

23

ОВ

А18

В18

Общий

 

 

А8

В8

+5 В

Примечание: Сигнал ВД7 подаётся на ТПУ не непосредственно, а после инвертирования.

А теперь об инвертировании сигнала ВД07. Оно производится очень просто, с помощью микросхемы 155ЛН1, размещённой в корпусе вилки разъёма ТПУ и распаянной, как показано на рисунке.

В. КОШЕЛЕВ


 

4УСЦТ - монитор

Цветные телевизоры практически невозможно использовать для отображения текста в режиме 64 символа в строке. Однако, если совершить небольшую переделку, телевизор можно будет переключать в режим «монитор», т.е. подавать сигнал с компьютера, непосредственно на субмодуль декодера. А так как с компьютера поступает чёрно-белый телевизионный сигнал, то телевизор автоматически перейдёт в режим черно-белого изображения, как и при приёме чёрно-белых передач.

Для переделки в субмодуль радиоканала СМРК1-6 впаивают R23 (33 кОм), R27 (10 кОм), VD1 (Д220); места для них предусмотрены на печатной плате. Необходимо также впаять резистор с сопротивлением 10 кОм между контактом 1 разъёма X1 и выводом 3 микросхемы D2. Это можно сделать на печатной плате, предварительно разрезав соответствующую токоведущую дорожку.

На фрагменте принципиальной схемы телевизора новые детали выделены утолщёнными линиями, на рисунке печатной платы показано их расположение.

 

Затем нужно распаять разъём СГ-5 и установить его вместо антенного гнезда ДМВ или XS1.

Последняя задача - изготовление кабеля.

Теперь, соединяя контакт 6 разъёма X1 через контакты 2 и 4 гнезда СГ-5 «монитор» с корпусом, можно заблокировать прохождение телевизионного сигнала и сигнала звукового сопровождения на субмодуль декодера.

Используя эту доработку вместе с опубликованной в «ИНФО» (1990. № 6. с. 72) и соединив БК с телевизором двумя кабелями, можно, работая в ассемблере в чёрно-белом варианте, нажатием кнопки S1 (см.: «ИНФО» 1990. № 6) перейти в режим «цвет» и посмотреть, как функционирует только что написанная программа.

Кстати, к новому разъёму «монитор» можно подключить и видеомагнитофон, имеющий отдельные выходы Video и Audio. Необходимо только изготовить соответствующий кабель.

Ю. ЛУЦКЕВИЧ


 

Цветной монитор как чёрно-белый

Большинство пользователей БК-0010 считают, что хорошее качество текста в режиме 64 символа в строке при использовании цветного монитора получить трудно. Мы же применяем способ, который позволяет достичь «читаемости», практически не уступающей черно-белым мониторам.

В БК есть два выхода телесигнала - для чёрно-белого (ТВ) и цветного (ЦТВ) мониторов. Если снять видеосигнал с выхода ТВ и подать его на G-линию шнура, подключённого к цветному телевизору, a R- и В-линии отключить от разъёма ЦТВ, цветной телевизор превратится в чёрно-белый (точнее, чёрно-зелёный). Совсем отключить шнур от разъёма ЦТВ нельзя: по нему идёт сигнал синхронизации.

Теперь «читаемость» текста будет определяться только масочной сеткой экрана и общим качеством монитора. Правда, из-за недостаточного выходного напряжения чёрно-белого видеосигнала может снизиться яркость. Не желающие мириться с этим, а также с потерей цвета могут добавить 6-контактный переключатель типа П2К и собрать простейший эмиттерный повторитель на транзисторе типа КТ315, питание которого можно взять с ножки 1 выхода ТВ.

А для тех, кто не боится покопаться во внутренностях БК, можно посоветовать ещё один способ подключения, позволяющий переходить из режима ЦТВ в ТВ переключением шнура в соответствующие гнезда. Доработка сводится к трём операциям: отключению напряжения +5B от ножки 1 гнезда ТВ; подаче на неё сигнала синхронизации с резистора R46; подаче сигнала с вывода 10 микросхемы D21 через конденсатор 0,1 - 1 мкФ на вывод 5 гнезда ТВ. В результате при подключении шнура (не переделанного!) к выходу ТВ на цветной телевизор подаются ТВ-сигналы (только для зелёного цвета) достаточной амплитуды вместе с сигналом синхронизации и сохраняется возможность подключать к этому же выходу чёрно-белый телевизор.

На рисунке выделены новые элементы схемы. Способ испытан на мониторах «Электроника 32ВТЦ-201».

Т. СУЛЕЙМАНОВ (преподаватель),
Р. САБИЕВ, И. ЧУМУТКИН, О. ИВАНОВ (учащиеся)

 

Performed by © gid, 2012-2022.