Принципы работы БК-0010

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

БК-0010, как и любой современный микрокомпьютер, состоит из следующих основных узлов: микропроцессора, запоминающего устройства и устройств ввода-вывода информации. В БК-0010 использован однокристальный микропроцессор типа К1801ВМ1А. Это вполне современный микропроцессор, имеющий 16-раз рядную мультиплексированную шину «адрес-данные», производительность порядка 500 000 элементарных операций в секунду, развитую систему команд. Он предоставляет пользователю широчайшие возможности создания на его основе систем для решения самых различных задач - от телеигр до автоматизированного управления небольшими промышленными и сельскохозяйственными предприятиями.

Назначение выводов микропроцессора К1801ВМ1А

Обозначение

Функциональное назначение

1

CLC

Вход тактовых импульсов (от 100 кГц до 5 МГц)

2

SACK

Вход поддержания прямого доступа к памяти (ПДП)

3

SP

Вход резервный

4

DMGO

Выход: разрешение ПДП (процессор отключён)

5

DMR

Вход: запрос внешнего устройства на ПДП

6

SP

Вход резервный

7

SEL1

Выход: низкий уровень при обращении по адресу 177716

8

SEL2

Выход: низкий уровень при обращении по адресу 177714

9

AD0

Вход/выход: адрес-данные 0

10

AD1

Вход/выход: адрес-данные 1

11

AD2

Вход/выход: адрес-данные 2

12

AD3

Вход/выход: адрес-данные 3

13

AD4

Вход/выход: адрес-данные 4

14

AD5

Вход/выход: адрес-данные 5

15

AD6

Вход/выход: адрес-данные 6

16

AD7

Вход/выход: адрес-данные 7

17

AD8

Вход/выход: адрес-данные 8

18

AD9

Вход/выход: адрес-данные 9

19

AD10

Вход/выход: адрес-данные 10

20

AD11

Вход/выход: адрес-данные 11

21

OV

Общий вывод

22

AD12

Вход/выход: адрес-данные 12

23

AD13

Вход/выход: адрес-данные 13

24

AD14

Вход/выход: адрес-данные 14

25

AD15

Вход/выход: адрес-данные 15

26

SP

Вход резервный

27

SP

Вход резервный

28

BSY

Выход: признак занятости канала

29

DCLO

Вход: авария источника питания

30

ACLO

Вход: пропадание сетевого напряжения

31

IRQ1

Вход: запрос на прерывание

32

IRQ2

Вход: запрос на прерывание по таймеру (адрес 100)

33

IRQ3

Вход: запрос на прерывание (адрес 270)

34

INIT

Вход/выход: установка исходного состояния

35

VIRQ

Вход: запрос на прерывание

36

IAKO

Выход: подтверждение прерывания

37

DOUT

Выход: вывод данных из процессора

38

DIN

Выход: признак ввода данных в процессор

39

RPLY

Вход: ответ внешнего устройства на DOUT и D1N

40

WTBT

Выход: признак вывода байта

41

SYNC

Выход: синхронизация адреса на шине А

42

+VCC

Питание +5B, 240 мА

Примечание; низкий уровень - активный (логическая 1).

Системная шина БК-0010 (разъём МПИ)

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

Микропроцессор К1801ВМ1А, использованный в БК-0010, формирует системную шину с протоколом обмена, соответствующим стандартному межмодульному параллельному интерфейсу (МПИ).

Контакт

Обозначение

Функциональное назначение

А31

AD0

Адрес-данные 0

В31

AD1

--»-- 1

В29

AD2

--»-- 2

В30

AD3

--»-- 3

В28

AD4

--»-- 4

А28

AD5

--»-- 5

В27

AD6

--»-- 6

В32

AD7

--»-- 7

В26

AD8

--»-- 8

А27

AD9

--»-- 9

В25

AD10

--»-- 10

А26

AD11

--»-- 11

В24

AD12

--»-- 12

А25

AD13

--»-- 13

В23

AD14

--»-- 14

В07

AD15

--»-- 15

В22

SYNC

Синхронизация адреса

А23

DIN

Ввод данных

В21

DOUT

Вывод данных

В20

RPLY

Подтверждение ввода/вывода

В11

WTBT

Запись байта

А4, А12, В12

+5B

Питание +5В, 150 мА

А2, В2,
А3, В3

GND

Общий вывод

Запуск микропроцессора К1801ВМ1А

В момент включения питания на входах DCLO и ACLO должен быть низкий уровень. На выходе INIT сразу после подачи +5B устанавливается низкий уровень. Не менее чем через 5 мс после включения питания на входе DCLO должен быть установлен внешним устройством высокий уровень, и ещё через 70 мс или более высокий уровень должен быть установлен на входе ACLO. В этот момент на выходе INIT устанавливается низкий уровень, при этом происходит установка внешних устройств в исходное состояние. После перевода DCLO в неактивное состояние разряды 0-7 счётчика команд микропроцессора очищаются, а разряды 8-15 загружаются содержимым соответствующих разрядов регистра 177716. В слово состояния (PS) заносится константа 340. Далее анализируются запросы на прерывания. Если их нет, происходит выполнение команды в соответствии с содержимым счётчика команд.

Обмен данными

Возможны три вида обмена: ввод, вывод, ввод-пауза-вывод (считывание-модификация-запись).

  1. Ввод. Процессор устанавливает BSY и выдаёт адрес на шину AD. После установки адреса процессор выдаёт отрицательный перепад напряжения (скачкообразный переход от высокого уровня к низкому) на выход SYNC. По этому перепаду внешнее устройство должно защёлкнуть адрес. Затем процессор снимает адрес[*] и устанавливает DIN. По этому сигналу внешнее устройство должно установить данные на AD и после этого установить RPLY. Если RPLY не будет установлен в течение 64 тактовых импульсов после установки D1N, произойдёт прерывание по зависанию (адрес 4). Приняв RPLY, процессор вводит данные и снимает DIN. В ответ на снятие DIN внешнее устройство должно снять RPLY. После снятия RPLY процессор снимает SYNC и BSY. WTBT не вырабатывается.
  2. Вывод. Аналогично, только вместо DIN устанавливается DOUT после предварительной выдачи данных на AD. Внешнее устройство после приёма данных должно установить RPLY. Приняв RPLY, процессор снимает данные и DOUT; далее - как в цикле «ввод». Сигнал WTBT вырабатывается при записи байта.
  3. Ввод-пауза-вывод. Производятся ввод, обработка данных и их вывод без изменения адреса. Адрес и SYNC выдаются только в начале цикла, при вводе данных.

Прямой доступ к памяти

Для достижения высокой скорости обмена данными между внешним устройством и оперативной памятью компьютера используется режим прямого доступа к памяти (ПДП). При этом микропроцессор отключается от системной шины компьютера и обмен данными производится под управлением внешнего устройства, обычно. контроллера ПДП.

В начале цикла ПДП внешнее устройство устанавливает низкий уровень на входе DMR (требование ПДП), в ответ микропроцессор устанавливает низкий уровень на выходе DMGO (предоставление ПДП). В ответ на DMGO внешнее устройство должно установить SACK и снять DMR. После этого внешнее устройство производит обмен данными, самостоятельно генерируя управляющие сигналы SYNC, DIN, DOUT. По окончании цикла ПДП внешнее устройство снимает SACK, после чего управление системной шиной возвращается к микропроцессору.

Прерывания от внешних устройств

Ввод в компьютер данных от внешних устройств может производиться методом программного периодического опроса этих устройств, а также но прерыванию. Второй способ эффективнее, поскольку при этом микропроцессор не «отвлекается» от выполнения основной задачи на опрос внешних устройств. После получения команды (запроса) прерывания выполнение основной программы прекращается и микропроцессор переходит к выполнению программы, адрес которой находится в специальной ячейке памяти, называемой адресом вектора прерывания (см. таблицу назначения выводов K1801BM1). Микропроцессор К1801ВМ1 имеет пять входов для запросов прерываний от внешних устройств: IRQ1, IRQ2, IRQ3, VIRQ, ACLO. Установка седьмого разряда регистра состояния (PS) запрещает (маскирует) прерывания по VIRQ, IRQ2, IRQ3.

На входы IRQ2, IRQ3 запросы на прерывания подаются путём подачи на них отрицательного перепада (динамические входы), на остальные - путём установления на них низкого уровня.

Прерывание по VIRQ производится следующим образом: внешнее устройство устанавливает низкий уровень на этом входе. В ответ микропроцессор запоминает в стеке содержимое счётчика команд и регистра состояния, затем последовательно устанавливает низкий уровень на выходах DIN и IAKO. Внешнее устройство в ответ на IAKO снимает запрос на входе VIRQ, устанавливает на шине «адрес-данные» адрес вектора прерывания (по выбору пользователя), устанавливает RPLY. В ответ на RPLY микропроцессор снимает DIN и IAKO, после чего внешнее устройство освобождает шину «адрес-данные» и снимает RPLY. Микропроцессор переходит к обработке прерывания.

Вход IRQ1 использован в БК-0010 для прерывания по клавише СТОП. Адрес вектора прерывания - 4.

Вход IRQ2 имеет специальное назначение - это вход прерывания по таймеру. Пользователи БК-0010 могут использовать этот вход для привязки выполняемой программы к реальному времени, например ввести часы в программу. Для этого следует подать прямоугольные импульсы ТТЛ-уровня на контакт В1 разъёма внешнего порта от внешнего генератора секундных импульсов. В ячейку 100 предварительно нужно занести адрес программы обработки прерывания, которую лучше составить на языке ассемблера.

Вход IRQ3 в БК-0010 не используется и соединён с шиной питания.

Запоминающее устройство БК-0010

Запоминающее устройство БК-0010 состоит из оперативного запоминающего устройства (ОЗУ) и постоянного запоминающего устройства (ПЗУ). ОЗУ доступно как по записи, так и по чтению, а ПЗУ - только по чтению. ОЗУ БК-0010 имеет информационную ёмкость 32К байт, при этом область от 0 до 377 используется для системных программ, от 400 до 1000 - для стека, от 1000 до 40000 - для программ пользователя. Область ОЗУ от 40000 до 100000 называется экранной областью, каждый её бит отображается на экране в виде точки. В области от 100000 до 120000 расположено системное ПЗУ с драйвер-мониторной системой, от 120000 до 177600 - ПЗУ с Бейсиком. Область от 177600 до 177777 включительно предназначена для системных регистров. Здесь следует отметить, что возможности БК-0010 можно значительно расширить, подключив внешнее ОЗУ в область от 120000 до 177600 вместо имеющегося ПЗУ.

ОЗУ БК-0010 реализовано на 16 микросхемах типа КР565РУ6Г. Эти микросхемы являются динамическими, т.е. могут сохранять записанную в них информацию только в течение двух миллисекунд, после чего необходимо восстановление (регенерация) информации. В БК-0010 регенерация информации производится во время вывода изображения на экран. Эту сложную функцию выполняют специальная большая интегральная микросхема (БИС) типа К1801ВП1-037, называемая контроллером ОЗУ и видеомонитора, и 16-разрядный регистр, составленный из двух микросхем типа К589ИР12.

ПЗУ БК-0010 реализовано на БИС КР1801РЕ2Б. На корпусе БИС, содержащей драйвер-мониторную систему, стоит номер 017, Фокал - 018, мониторную систему диагностики - 019, Бейсик размещён в трёх микросхемах с номерами 106, 107, 108. ПЗУ с номерами 018 и 019 расположены в подключаемом блоке МСТД.

Устройства ввода-вывода (УВВ)

К УВВ БК-0010 относятся: клавиатура (ввод), видеомонитор (вывод), магнитофон (ввод-вывод). Кроме того, конструкцией предусмотрен внешний порт, позволяющий производить обмен информацией с другими внешними устройствами, например с принтером, джойстиком, АЦП и ЦАП, дисководом, бытовым радиокомплексом и др.

Клавиатура БК-0010 представляет собой матрицу 10x7 линий, на пересечении которых стоят замыкающие кнопки. Имеются также кнопки, подключённые отдельно (соответствуют клавишам ЗАГЛ, СТР, ПРОБЕЛ, СУ, ПР, НР, ИНД СУ, СТОП), в БК-0010 имеется специальная БИС типа К1801ВП1-014, называемая контроллером клавиатуры. Эта БИС в ответ на нажатие любой клавиши формирует семиразрядный код КОИ-7, соответствующий нажатой клавише, и помещает его в свой регистр с адресом 177662, называемый регистром данных клавиатуры. БИС содержит ещё один адресуемый регистр с адресом 177660, называемый регистром команд клавиатуры. Одновременно с записью кода клавиши в регистр данных клавиатуры БИС устанавливает запрос на прерывание на входе VIRQ микропроцессора. Адрес вектора прерывания - 60 (274 по АР2). Прерывания от клавиатуры можно программно запрещать. Внимание: БИС К1801ВП1-014 чувствительна к статическому электричеству, поэтому, садясь за компьютер, прежде чем прикоснуться к клавишам, необходимо разрядиться об трубу отопления или водопроводную трубу!

Вывод изображения на экран видеомонитора осуществляется при помощи контроллера видеомонитора, содержащего БИС К1801ВП1-037 и 16-разрядный регистр сдвига, реализованный на двух микросхемах типа К155ИР13. Содержимое ячеек экранного ОЗУ поочерёдно записывается в регистр в параллельном коде, затем происходит сдвиг этой информации с частотой 6 МГц и она побитно поступает на вход видеоусилителя видеомонитора. Вывод этой информации синхронизируется строчными и кадровыми синхроимпульсами, генерируемыми БИС К1801ВП1-037.

Сигнал с магнитофона при чтении поступает на вход двухтранзисторного усилителя-ограничителя, а затем на вход А1 микросхемы К531АП2 (шинный формирователь), которая передаёт его на системную шину при чтении процессором адреса 177716. Вход А0 (вывод 4) этой микросхемы предназначен для ввода информации с телеграфной линии. В БК-0010 первых выпусков он был выведен на контакт В2 разъёма внешнего порта, с 1986 г. это соединение отсутствует, но его легко восстановить самостоятельно. Сигнал на магнитофон при записи выдаётся с микросхемы К155ИР1 в двоичном коде в виде последовательности «длинных» и «коротких» импульсов, подобно точкам и тире азбуки Морзе. При этом комбинация «тире-точка» соответствует единице, а «три точки» - нулю. Одновременно с выводом на магнитофон происходит вывод на внутреннюю «пищалку» ЗП-1. Вывод 13 К155ИР1 предназначен для вывода на телеграфную линию. Его желательно соединить с контактом В3 разъёма внешнего порта, как это было сделано в БК-0010 первых выпусков.

А. СОКОЛОВ



[*] Т.е. отключает шину, в результате чего на ней оказывается некий неопределённый сигнал.


 

Конвертор Бейсик-ассемблер для БК

Создатели ПЗУ с интерпретатором Бейсика для БК-0010.01, тщательно засекретив «начинку» своего изделия, вынудили пользователей дублировать зашитые в Бейсик-ПЗУ функции в мизерном адресном пространстве доступной им памяти. Между тем пользователи, программирующие в кодах или на ассемблере, уже давно ищут ключ к этим пэзэушкам, съедающим почти половину всей памяти: ведь если научиться использовать хранящуюся в них информацию в качестве подпрограмм, то можно существенно сократить объём своей программы, что для БК немаловажно.

Постепенно общими усилиями Бейсик-ПЗУ становится все более доступным - свидетельством тому является статья Авсеевых «Особенности транслятора с языка Бейсик для БК-0010.01», напечатанная в «ИНФО» № 2 за 1990 г. Авторы приводят очень интересную информацию о методике поиска адресов подпрограмм Бейсик-ПЗУ. Подобная методика была разработана и мной; разными были только цели поиска. Если у авторов статьи конечной целью поиска адресов является «ручное» составление шитых кодов обращения к Бейсик-подпрограммам, то моей целью было по возможности «автоматизировать» этот трудоёмкий процесс. Ведь в конечном счёте пользователю вовсе не нужно знать адреса подпрограмм, нужно лишь получить цепочку шитых кодов, исполнение которых даст тот же результат, что и написанный на Бейсике фрагмент.

С этой целью была написана программа COD.ASC, позволяющая получить на внешнем носителе шитый код введённой Бейсик-программы в формате MICRO10 (MICRO11). В исходной программе разрешается использовать любые переменные, однако на идентификаторы целочисленных переменных накладывается ограничение: они могут быть только однобуквенными. Это вызвано тем, что в диалоге между кодовой программой и подпрограммой на Бейсике для передачи параметров удобно использовать именно такой тип переменных. Программа распознает обращения к ним и заменяет адреса переменных в рабочей памяти Бейсика на идентификаторы. При трансляции программы произойдёт увязка ссылок на эти переменные с одноименными полями основной ассемблерной программы. Все двух- и более символьные целочисленные идентификаторы будут усечены до одного символа. Переменные других типов могут быть любыми, допустимыми Бейсиком.

Программа COD.ASC приведена в традиционной Бейсик-кодовой форме и рассчитана на работу в составе КУВТ-86. Если предполагается использование магнитофона в качестве внешнего носителя, то строку 1280 следует заменить

1280 DATA &O104036,&О240,&О207,&О117224, &O106221, &О214

Порядок работы с программой приводится ниже.

После ввода директив

NEW
CLEAR,&О37000

введите с клавиатуры текст программы, тщательно проверьте его и запишите на внешний носитель командой SAVE «(имя)». Теперь начиная со строки 30 введите текст Бейсик-программы, код которой хотите получить. Программа не должна содержать операторов CLS. Если нужно очистить экран, используйте команду PRINT CHR$(12). Запустите программу командой RUN. Экран очистится, и в левом верхнем углу появится угольник - приглашение к вводу шифра фрагмента. В качестве этого шифра может выступать любой алфавитно-цифровой символ. Он будет последним символом имени полученного модуля и внутренних меток. Подготовьте устройство вывода. Нажмите клавишу, соответствующую выбранному шифру фрагмента. Экран опять очистится, и в верхней его части появится полоса - это в экранной области памяти создаётся исходный модуль ассемблера, содержащий шитый код программы. Он выводится на внешний носитель с именем IJQCD*.BIN (* - шифр фрагмента), и работа COD.ASC на этом заканчивается.

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

Пример: составить программу на ассемблере, выводящую на экран в восьмеричном виде содержимое области памяти с адреса 0 до адреса &О400. Для печати восьмеричного представления чисел использовать фрагмент Бейсик-ПЗУ.

Пример приводится для варианта с КУВТ-86.

Здесь с начала строки идут приказы оператора, с 16-й позиции ответы БК, с 20-й - комментарии автора.

NEW
                Ok
CLEAR,&О37000
                Ok
LOA"TT:COD
                COD   .ASC 008
30 PRINT OCT$(N%);TAB(8%);OCT$(PEEK(N%)
RUN
                    очистка экрана
                >
A
                    на МД записан файл IJQCDA.BIN
BL"TT:MICR11",R
                Micro11 >
SC
                    вошли в текстовый редактор
BEGIN:  CLR N
10:     JSR PC,PRINOC
        ADD #2,N
        CMP N,#400
        BLE 10
        HALT
N:      .E
СУ+ъ
                Micro11>
LF
                ИМЯ?
IJQCDA
                length=000305
SC
                    к тексту добавилось:
                            MOV #JWA,R4
                            JMP @(R4)+
                    JZA:    RTS PC
                    JWA:    .#156232
                            .#N
                            .#160556
                            .#161624
                            .#156460
                            .#156700
                            .#JZA
 
                    меняем первую строку
                    добавленного
                    фрагмента:
PRINOC: MOV #JWA,R4
СУ*ъ
                Micro11>
CN
LS14000
СТОП
                    вышли в монитор 
ВВОД

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

В заключение - несколько наблюдений и рекомендаций для тех, кто пользуется кодами Бейсика.

  1. Бейсик при своей работе широко использует стек. Особенно «агрессивна» в этом отношении команда PAINT. Старайтесь по возможности выделять под стек больше памяти.
  2. Для нормальной работы Бейсика не забудьте в начале программы занести в ячейку 34 значение 146404. Этот адрес программы обработки прерываний позволит запустить вашу программу не только из Бейсика функцией USR, но и из монитора.
  3. Постарайтесь расположить свою программу «пониже» в памяти. Младшие адреса (до 3500) могут использоваться Бейсиком.
  4. Интересные результаты можно получить, если предусмотреть в цепочке кодов Бейсика обращение к своим подпрограммам на ассемблере. Для этого в желаемом месте цепочки укажите адрес своей подпрограммы. Выход из неё осуществляйте по команде JMP @(R4)+.

Тем, кого эта публикация побудила к творчеству, автор желает больших успехов. А людей, небезразличных к программированию на ассемблере, и, в частности, с использованием Бейсик-ПЗУ, приглашаю к переписке. Мой адрес: 244004, Сумы, ул. Горького, 36, кв. 97. Ингорь А. И.

10 GOTO 1000
20 QQ%=0%
1000 CLS
1010 N%=&O37000
1020 READ S%
1030 POKE N%,S%
1040 N%=N%+2
1050 IF N%<>&O37672 THEN 1020
1060 DEF USR=&O37000
1070 A=USR(A)
1080 END
1090 DATA &O12700,&O76,&O104016,&O104006,&O0110067,&O547
1100 DATA &O110067,&О576,&О110067,&O616,&O110067,&O0632
1110 DATA &O110067,&O277,&O12701,&O37352,&O5002,&O104020
1120 DATA &O5067,&O464,&O12767,&O40000,&O0462,&O12701
1130 DATA &O37546,&O4767,&O430,&O12701,&O37572,&O4767
1140 DATA &O420,&O12701,&O037614,&O4767,&O410,&O12701
1150 DATA &O037640,&O4767,&O400,&O12703,&O37232,&O12367
1160 DATA &O414,&O11367,&O412,&O12713,&O240,&O12743
1170 DATA &O240,&O13705,&O2002,&O32705,1,&O1401
1180 DATA &O5205,&O62705,&O14,&O10504,&O14467,&O346
1190 DATA &O22715,&O156776,&O1432,&O26727,&O332,&O156232
1200 DATA &O1465,&O26727,&O322,&O156350,&O1461,&O12567
1210 DATA &O310,&O16767,&O304,&O304,&O10546,&O4767
1220 DATA &O162,&O4767,&O176,&O12703,&O37232,&O16723
1230 DATA &O270,&O16713,&O266,&O12605,&O743,&O12701
1240 DATA &O37654,&O4767,&O224,&O12702,&O320,&O10201
1250 DATA &O12722,2,&O12722,&O40000,&O16712,&O224
1260 DATA &O162722,&O40000,&O12722,&O45111,&O12722,&O41521
1270 DATA &O12722,&O25104,&O12722,&O41056,&O12722,&O47111
1280 DATA &O4737,&O124650,&O207,&O117224,&O106221,&O214
1290 DATA &O4767,&O34,&O11501,&O114100,&O4767,&O110
1300 DATA &O12700,&O12,&O4767,&O100,&O12567,&O122
1310 DATA &O16767,&O116,&O116,&O664,&O12701,&O37432
1320 DATA &O4767,&O66,&O207,&O20007,&O21456,0
1330 DATA &O12704,&O37474,&O134,&O12602,&O12601,&O112100
1340 DATA &O4767,&O24,&O77204,&O12700,&O12,&O4767
1350 DATA &O12,&O207,&O156232,&O37532,&O161624,&O37446
1360 DATA &O110077,&O30,&O5267,&O24,&O207,&O112100
1370 DATA &O1403,&O4767,&O177756,&O773,&O207,0
1380 DATA 0,0,0,0,0,&O20007
1390 DATA &O47515,&O20126,&O20040,&O20040,&O45043,&O25127
1400 DATA &O51054,&O5064,0,&O20007,&O46512,&O20120
1410 DATA &O20040,&O20040,&O24100,&O32122,&O25451,&O12
1420 DATA &O55112,&O35052,&O20040,&O20040,&O52122,&O20123
1430 DATA &O20040,&O20040,&O41520,&O12,&O53512,&O35052
1440 DATA &O20040,&O20040,&O21456,0,&O20007,&O21456
1450 DATA &O55112,&O5052,0,&O25132,&O12

А. ИНГОРЬ


«Электронный диск» для БК-0010

sch.png


Есть несколько способов увеличения оперативной памяти БК: можно разместить дополнительное ОЗУ в области адресов, занимаемых встроенным ПЗУ с интерпретаторами Бейсика или Фокала (адреса с 120 000 до 177 600), или организовать дополнительную память в виде внешнего накопителя - электронного квазидиска. Авторами разработаны такой квазидиск и его программное обеспечение.

Электронный квазидиск подключается к порту ввода-вывода БК и состоит из 32 микросхем К537РУ8 и схемы обрамления на пяти микросхемах средней степени интеграции. Его ёмкость - 64К байта, она может быть увеличена до 128К байт простым увеличением количества микросхем ОЗУ. При разработке электрической схемы квазидиска ставилась задача максимально упростить аппаратную часть.

Микросхемы DD2 и DD3 образуют регистр адреса выбираемой ячейки памяти. Микросхема DD1 - буфер данных при записи информации. Микросхемы DD4, DD5 образуют дешифратор адреса для выбора нужной микросхемы ОЗУ. Устройство, собранное на транзисторах VT1 и VT2, служит для перехода на резервное питание от аккумулятора (3 В) при отключении компьютера.

Конструктивно квазидиск выполнен на двухсторонней печатной плате размером 95x178 мм. Ток, потребляемый от автономного питания в режиме хранения информации, не превышает 600 мкА.

Для поддержки работы с квазидиском была разработана специальная операционная система КДОС, позволяющая любым программам работать с квазидиском, как с обычным магнитофоном, и выполняющая следующие функции:

Объём, занимаемый операционной системой, не превышает 2К байт. В системное обеспечение входят также текстовый редактор, микроассемблер, дизассемблер, микроотладчик, графический редактор.

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

С. КУМАНДИН, А. СОКОЛОВ


 

Содержание «Клуба БК» за прошлый год.

Для владельцев БК, впервые выписавших наш журнал в этом году, сообщаем содержание «Клуба БК» за прошлый год.

В. Авсеев, А. Авсеев. Особенности транслятора с языка Бейсик для БК-001.01
использование зашитых в ПЗУ подпрограмм, реализующих операторы Бейсика

2

Д. Антонов. Увеличение тактовой частоты
простейшая переделка, вдвое увеличивающая быстродействие БК

2

А. Барсуков. Убыстрение поиска файла

3

А. Бочаров. Хитрости Бейсика БК

2

В. Булитко. Вмешательство в работу программы
о методах введения данных в программу на Фокале «параллельно» её работе

2

А. Бунцельман. Программа «Музыкальная заставка»

3

В. Василенко. Спасение программ при зависании
описание способа восстановления текста Фокал-программы после зависания

6

С. Гвоздев, Г. Эрнстсонс. Ещё раз о плавающей арифметике Фокала

3

Ю. Зальцман. Архитектура и ассемблер БК

(прим.gid: эта книга была распознана из журнала ПК БК, там она в более расширенном виде публиковалась)

4-6

С. Ивашинников. Многоголосие па БК-0010
музыкальная программа в кодах

4

Ингорь. Использование квазиподпрограмм
оригинальный подход к оформлению повторяющихся частей программы, экономящий ОЗУ

6

Калейдоскоп
объявления; повышение устойчивости синхронизации телевизора «Электроника Ц401М»; «маленькие хитрости» (прим.gid: в номере №1 не распознавалось за незначительностью)

1, 4, 5

И. Канивец. Знаете ли вы, что...
о системных ячейках БК

3

С. Комаров. Строки вместо матриц
об использовании псевдоцветов

2

А. Кузнецов. Ещё раз о восьмицветном БК
использование псевдоцветов путём простейшей переделки БК

1

Кумандин. Новый подход к построению баз данных

6

М. Ларкин. Экономия памяти БК-0010.01

3

Ю. Луцкевич. Подключение БК к телевизорам 4УСЦТ

6

И. Панченков. Приручение БК
советы для начинающих (но не только!) пользователей БК, схема БК

4-5

С. Смирнов. Восьмицветная приставка
реализация реального многоцветия без изменений в схеме БК

1

Советы и наблюдения

2

А. Тереховский. Универсальный каталогизатор

3

Е. Умников. Спрайты для БК

2

П. Чирков. Подключение БК к телевизорам ЗУСЦТ

1

В. Яковлев. Отсчёт времени на БК-0010.01 (поправка в № 2 на с. 53 (прим.gid: учтено))
использование встроенного таймера БК; методика оценки эффективности программ по критериям времени исполнения и занимаемой памяти

1

 


 

Защита программ от несанкционированного доступа

Известно, что Бейсик БК-0010 позволяет записывать в любую строку программы управляющие коды в виде строки комментариев.

Эту особенность языка можно положить в основу методики защиты текста программ от несанкционированных просмотра и изменений.

Защита текста программы от просмотра посторонними лицами начинается с того, что в начале программы размещается длинная строка комментариев типа:

10 REM JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJ

Эта строка образует в памяти БК область, содержащую коды символа J (число &O45112 в слове), в которую можно записать любые управляющие коды, в том числе и способные воспрепятствовать просмотру текста программы при подаче команды LIST.

Ниже будет показано, как это сделать, а сейчас объясним, как найти в памяти БК эту созданную в строке 10 область для записи управляющих кодов. Проще всего это сделать, добавив в конце программы такие строки:

1000 FOR I%=&O1000 TO &O40000 STEP 2%
1010 IF PEEK(I%)=&045112 THEN ? OCT$(I%)
1020 NEXT I%

Результатом их выполнения (запуск командой RUN 1000) будет перечень тех адресов, где расположены символы J в памяти БК. Остаётся, начав с первого найденного адреса, записать сюда необходимые управляющие коды. Какими же они должны быть?

Следует отметить, что при выполнении команды LIST на экран выводятся те символы, коды которых последовательно записаны в памяти БК. Избавиться от «лишних» символов можно, записав с помощью оператора РОКЕ в начало зарезервированной области памяти 5-6 раз код забоя (число &Н18). Теперь по команде LIST распечатка ненужных кодов сразу же уничтожится забоями, а на экран выведутся только символы J и текст программы. Тем же оператором РОКЕ вместо символов J можно записать какой-нибудь текст, например имя автора программы или предупреждение о защите программы. Вслед за этим нужно ввести код изменения цвета букв на чёрный и кода перевода БК в графический режим: &Н94 и &Н95.

Защита готова: теперь просто по команде LIST текста программы не просмотреть!

Но... Это можно сделать при помощи команды LIST 11-или по команде LIST после нажатия клавиши БЛР...

Как же усилить защиту? Можно порекомендовать два подхода: защищать лишь наиболее важные участки текста программы или же применять различные комбинации кодов чёрного цвета, графического режима и клавиши БЛР (код &Н84).

Попутно следует отметить, что текст в зарезервированную область памяти можно заносить не только с помощью оператора РОКЕ, но и в режиме модификации строки комментария, для чего надо нажать клавишу БЛР, дать команду LIST 10, вызвать строку 10 командой «.10», забить лишние символы J и набрать нужный текст.

Обратите внимание: операторы РОКЕ, служащие для ввода в зарезервированную область памяти кодов забоя (&Н18), чёрного цвета (&Н94), графического режима (&Н95), БЛР (&Н84) не должны входить в состав программы. «Защищённое» состояние программы сохраняется при записи на диск.

При записи программ, имеющих такую защиту, на магнитный носитель их имена должны иметь расширение .COD, так как управляющие коды по сети не передаются.

Описанный выше способ может быть применён и для включения подпрограмм, написанных в машинных кодах, в программы, написанные на Бейсике. Это можно сделать с помощью все того же оператора РОКЕ, но удобнее всего заранее записанную на магнитный носитель подпрограмму загрузить в зарезервированную ремаркой область командой BLOAD с соответствующими аргументами. Проводить подобную процедуру лучше всего, полностью написав всю основную программу и зарезервировав места для подпрограмм как можно раньше, поскольку в памяти БК строки программы располагаются не в порядке их нумерации, а в порядке времени их занесения или редактирования и, следовательно, чем раньше в память будет занесена строка, тем скорее она будет исполнена при работе программы. Отсюда следует, что редактирование любой строки программы, предшествующей подпрограмме, приведёт к изменению адреса подпрограммы в памяти БК и необходимости нового поиска его.

Однако у такого способа есть важное ограничение: ни в одном из байтов подпрограммы не должно находиться число &O12, интерпретируемое компилятором как код окончания строки: все находящееся после этого байта будет проигнорировано.

Зависимость положения адреса кодовой программы, записанной в ремарку, от процедуры редактирования любой предшествующей ей строки может быть использована для защиты программ от несанкционированных исправлений или изменений.

Защищать программу имеет смысл только после её окончательной отладки, и первым шагом к этому является ввод в начало программы обращения к подпрограмме в кодах, например:

1 DEF USR=9999
2 X=USR(X)

Затем уже описанным способом резервируется в памяти место для подпрограммы, а в конец программы добавляются три строки для определения зарезервированной области. После определения этой области туда записывается код &О207 (т.е. команда RTS PC), удаляются три последние строки программы, введённые для определения зарезервированной области памяти, и программа пересылается на ДВК с расширением .COD, где с помощью программы DESS девятки в строке 1 исправляются на действительный адрес подпрограммы. Теперь любая попытка редактирования текста программы неизбежно приведёт к изменению начального адреса подпрограммы и, следовательно, к отказу в её работе.

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

Описанная здесь методика защиты Бейсик-программ носит общий характер и может быть (с точностью до незначащих технических деталей) распространена на компьютеры любых других типов.

О. ПАРСАДАНОВ, А. ЯНУШКО


 

Калейдоскоп

Хотел бы переписываться и обмениваться программами с владельцами БК. Имею 250 различных программ.

232007, Вильнюс, ул. Маргитес, 29, кв. 13. П.И. Дейчко.

Сенсация!

По мнению А. Куликова (г. Курган), полной очистки памяти БК не происходит ни в каких случаях, кроме выключения питания! Ни оператор NEW, ни перезапуск процессора, ни переходы в монитор и обратно - ничто не способно «обеспамятить» БК.

Но что же делать, если БК завис и был перезапущен процессор? Не теряться! Если программа была в машинных кодах и располагалась в диапазоне адресов 4000-40000, смело запускайте её. Если же программа была на Бейсике, то некоторые повреждения она получила, но основную часть спасти можно. Для этого сперва нужно восстановить значение ячейки 2002, где хранился адрес последнего байта текста программы. Затем нужно восстановить ячейку 2024, являющуюся счётчиком строк: для этого в неё нужно поместить число 36756-6*N, где N - число строк, а 36756 - содержимое ячейки 2024 при верхней границе памяти 40000. При этой процедуре возможна утрата части текста программы, вызванная тем, что при восстановлении ячейки оператором РОКЕ транслятор создаёт соответствующий ему объектный код, попадающий на текст программы. Если возникают проблемы с восстановлением ячейки 2002, то восстановите ячейку 2024, наберите

DEF USR=&O140716

и

?USR(0)

- восстановление произойдёт автоматически.

Доработаем наши магнитофоны (обзор предложений читателей)

Преимущества работы с магнитофонами, имеющими дистанционное управление, уже обсуждались на страницах журнала. Сегодня от их констатации мы переходим к публикации конкретных рекомендаций.

 

 

С. К. Максимов (г. Североморск) предлагает произвести в магнитофоне «Протон 402» и компьютере БК-0010(-01) достаточно простые и ясные из приводимых рисунков изменения (на схеме новые соединения показаны жирными линиями, ненужные старые зачёркнуты). Они обеспечат малый ток управления (3 мА), щадящий контакты реле, и возможность работы с магнитофоном в автономном режиме без каких-либо дополнительных заглушек или переключателей, восстанавливающих штатный режим работы.

 

 

 

Р. Аскеров (г. Брянск) предлагает в магнитофоне «Электроника 302-2» разорвать цепь питания двигателя магнитофона, перепаяв провод, идущий к контакту 2 микропереключателя SA1 (от контакта переключателя SA2) на контакт 4 стандартной 5-штырьковой розетки, установленной вместо гнезда подключения внешних громкоговорителей, а контакт 5 этой розетки соединить с контактом 2 SA1. Теперь цепь питания двигателя магнитофона замкнётся только при срабатывании пускового реле БК. Для работы магнитофона в автономном режиме параллельно контактам 4 и 5 розетки нужно подключить какой-либо выключатель. Для этого удобно использовать микропереключатель типа МТ-1, расположив его за декоративной решёткой встроенного микрофона.

Рекомендации по оформлению программного обеспечения ПЭВМ БК-0010/0010.01

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

И. ПАНЧЕНКОВ

  1. При написании программ
    1. Программы, написанные на любом языке, должны автоматически устанавливать необходимый режим работы: 32/64, РП, КУРСОР и т.п. Для написания и модификации программ на Фокале используйте программу начальной установки STARTF.
    2. Программы в машинных кодах должны иметь автозапуск (исключение допускается для инструментальных программ). При этом должен осуществляться контроль правильности загрузки.
    3. Для программ в машинных кодах обязательно должен быть возможен запуск из пускового монитора.
    4. Обращение к мониторам разрешается только через запросы ЕМТ (для обеспечения переносимости на другие машины семейства). Программы должны одинаково работать как при наличии МСД-монитора, так и без него.
    5. Программы в машинных кодах должны обрабатывать прерывание по клавише СТОП (вектор 4).
    6. При использовании блокировки клавиши СТОП должен быть предусмотрен выход в систему по команде СУ/С (код 3).
    7. По окончании (прерыванию) программы должен осуществляться возврат в исходную систему, из которой она была запущена.
    8. Номер версии или дата её создания должны выводиться на экран при запуске программы. Желательно наличие в программе ФИО автора (авторов) или названия авторского коллектива, телефона, адреса или других координат для связи.
    9. Программы должны иметь инструкцию по пользованию (документацию) либо диалог, позволяющий работать с программой без документации.
    10. Документация на программу должна содержаться:
      • в самой программе (для программ, рассчитанных на работу с цветным изображением, она должна быть написана в режиме 32 символа в строке);
      • или в отдельном файле на том же языке, что и документируемая программа;
      • или в непосредственно исполняемом файле в машинных кодах (пользуйтесь такими инструментальными программами, как FORMAT, DOCUM, MON STR).
    11. При задании клавиш управления необходимо учитывать удобство их использования в машинах как с плёночной, так и с «высокой» клавиатурой.
    12. Подключение внешних устройств к порту параллельного ввода-вывода производится в соответствии с прилагаемым стандартом интерфейса.
    13. При написании игровых программ рекомендуется использование унифицированного блока установки управления STAND или аналогично ему (например, как в LODE RUNNER).
  2. При присвоении имён
    1. Имена файлов пишутся заглавными латинскими буквами.
    2. Длина присваиваемого имени не должна превышать шести знаков, после которого через точку могут следовать три символа расширения. Имя в возможно большей степени должно отражать содержание программы.

Не следует пренебрегать названиями программ на английском языке - они зачастую бывают информативнее русских. Используйте предлагаемый набор стандартных расширений.

.APL

прикладная программа

.ASC

стандартный Бейсик (Вильнюс 24.07.86): блоки ASCII кодов

.В27

ленточная версия Бейсик 27

.В85

ленточная версия Бейсик 85

.В87

ленточная версия Бейсик 87

.BIN

стандартный Бейсик (Вильнюс 24.07.86): двоичный формат

.BSE

файл в формате программы BASE (ASP corp.)

файл в формате С

.COD

стандартный Бейсик (Вильнюс 24.07.86): внутренний формат

.DAT

файл данных

.DCM

файл с системой просмотра DOCUM (ASP corp.)

.DEM

демонстрационная программа

.DOC

документация

.EDP

текст в формате редактора EDASP (ASP corp.)

.FCD

файл с системой FOCOD

.FND

файл с системой FOND

.FOC

файл в формате FOCAL

.FRM

файл с системой просмотра FORMAT/FORMAT2

.FRT

файл в формате FORTH

.G..

игровая программа (общий признак семейства)

.GD.

игровая программа динамическая

.GG.

игровая программа графическая

.GL.

игровая программа логическая

.GM.

игровая программа музыкальная

...К

игровая программа с управлением от клавиатуры

...J

игровая программа с управлением от джойстика

...U

игровая программа с унифицированным управлением

.INF

информационная программа

.IWF

файл с системой «Интерфейс Встроенной Функции»

.MAN

управляющая программа

.MBS

файл в формате программы MICROBASE (ASP corp.)

.MEL

файл в системе MELOMAN/MELOMAN2

.MIC

исходный текст программы в формате MICRO#-S

.MIK

исходный текст программы в формате MICRO#...к

.MST

файл с системой просмотра MONSTR (В. Прохоров)

.MLS

музыкальная программа

.OBM

объективный модуль MICRO

.RED

файл с неизвестной системой просмотра

.RID

файл с системой просмотра READER

.RIG

файл с системой RIGA

.SAN

загрузочный модуль MICRO

.SCH

учебная программа

.SPH

речевая программа

.SYS

системная программа

.TCH

обучающая программа

.TST

тестирующая программа

.TXT

текстовая программа

.VSR

пользовательская программа в кодах

.WOR

рабочая версия для всех типов файлов

.XFC

файл с системой XFOCAL (OS0010F)

Расширения различных версий Фокала пишутся без разделительной точки сразу после имени файла. Расширений для стандартных версий Фокала БК-0010 не предусматривается.

 

Performed by © gid, 2012-2022.