Принципы работы БК-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, |
GND |
Общий вывод |
Запуск микропроцессора К1801ВМ1А
В момент включения питания на входах DCLO и ACLO должен быть низкий уровень. На выходе INIT сразу после подачи +5B устанавливается низкий уровень. Не менее чем через 5 мс после включения питания на входе DCLO должен быть установлен внешним устройством высокий уровень, и ещё через 70 мс или более высокий уровень должен быть установлен на входе ACLO. В этот момент на выходе INIT устанавливается низкий уровень, при этом происходит установка внешних устройств в исходное состояние. После перевода DCLO в неактивное состояние разряды 0-7 счётчика команд микропроцессора очищаются, а разряды 8-15 загружаются содержимым соответствующих разрядов регистра 177716. В слово состояния (PS) заносится константа 340. Далее анализируются запросы на прерывания. Если их нет, происходит выполнение команды в соответствии с содержимым счётчика команд.
Обмен данными
Возможны три вида обмена: ввод, вывод, ввод-пауза-вывод (считывание-модификация-запись).
- Ввод. Процессор устанавливает BSY и выдаёт адрес на шину AD. После установки адреса процессор выдаёт отрицательный перепад напряжения (скачкообразный переход от высокого уровня к низкому) на выход SYNC. По этому перепаду внешнее устройство должно защёлкнуть адрес. Затем процессор снимает адрес[*] и устанавливает DIN. По этому сигналу внешнее устройство должно установить данные на AD и после этого установить RPLY. Если RPLY не будет установлен в течение 64 тактовых импульсов после установки D1N, произойдёт прерывание по зависанию (адрес 4). Приняв RPLY, процессор вводит данные и снимает DIN. В ответ на снятие DIN внешнее устройство должно снять RPLY. После снятия RPLY процессор снимает SYNC и BSY. WTBT не вырабатывается.
- Вывод. Аналогично, только вместо DIN устанавливается DOUT после предварительной выдачи данных на AD. Внешнее устройство после приёма данных должно установить RPLY. Приняв RPLY, процессор снимает данные и DOUT; далее - как в цикле «ввод». Сигнал WTBT вырабатывается при записи байта.
- Ввод-пауза-вывод. Производятся ввод, обработка данных и их вывод без изменения адреса. Адрес и 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 и т.д.). Кроме того, не всегда происходит распознавание целочисленных переменных. Поэтому лучше считать эту программу не частью самостоятельной методики, а инструментом для облегчения ручного создания программ в кодах Бейсика.
В заключение - несколько наблюдений и рекомендаций для тех, кто пользуется кодами Бейсика.
- Бейсик при своей работе широко использует стек. Особенно «агрессивна» в этом отношении команда PAINT. Старайтесь по возможности выделять под стек больше памяти.
- Для нормальной работы Бейсика не забудьте в начале программы занести в ячейку 34 значение 146404. Этот адрес программы обработки прерываний позволит запустить вашу программу не только из Бейсика функцией USR, но и из монитора.
- Постарайтесь расположить свою программу «пониже» в памяти. Младшие адреса (до 3500) могут использоваться Бейсиком.
- Интересные результаты можно получить, если предусмотреть в цепочке кодов Бейсика обращение к своим подпрограммам на ассемблере. Для этого в желаемом месте цепочки укажите адрес своей подпрограммы. Выход из неё осуществляйте по команде 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
Есть несколько способов увеличения оперативной памяти БК: можно разместить дополнительное ОЗУ в области адресов, занимаемых встроенным ПЗУ с интерпретаторами Бейсика или Фокала (адреса с 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 |
Калейдоскоп |
|
И. Канивец. Знаете ли вы,
что... |
3 |
С. Комаров. Строки вместо
матриц |
2 |
А. Кузнецов. Ещё раз о восьмицветном
БК |
1 |
6 |
|
3 |
|
6 |
|
И. Панченков. Приручение БК |
|
С. Смирнов. Восьмицветная
приставка |
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
Продолжая тему «приручения БК», предлагаем вниманию читателей рекомендации по стандартизации оформления программного обеспечения и (в следующем номере) интерфейса БК. Рекомендации составлены на основе опыта многих пользователей: хотелось бы узнать мнение наших читателей.
И. ПАНЧЕНКОВ
- При написании программ
- Программы, написанные на любом языке, должны автоматически устанавливать необходимый режим работы: 32/64, РП, КУРСОР и т.п. Для написания и модификации программ на Фокале используйте программу начальной установки STARTF.
- Программы в машинных кодах должны иметь автозапуск (исключение допускается для инструментальных программ). При этом должен осуществляться контроль правильности загрузки.
- Для программ в машинных кодах обязательно должен быть возможен запуск из пускового монитора.
- Обращение к мониторам разрешается только через запросы ЕМТ (для обеспечения переносимости на другие машины семейства). Программы должны одинаково работать как при наличии МСД-монитора, так и без него.
- Программы в машинных кодах должны обрабатывать прерывание по клавише СТОП (вектор 4).
- При использовании блокировки клавиши СТОП должен быть предусмотрен выход в систему по команде СУ/С (код 3).
- По окончании (прерыванию) программы должен осуществляться возврат в исходную систему, из которой она была запущена.
- Номер версии или дата её создания должны выводиться на экран при запуске программы. Желательно наличие в программе ФИО автора (авторов) или названия авторского коллектива, телефона, адреса или других координат для связи.
- Программы должны иметь инструкцию по пользованию (документацию) либо диалог, позволяющий работать с программой без документации.
- Документация на программу должна содержаться:
- в самой программе (для программ, рассчитанных на работу с цветным изображением, она должна быть написана в режиме 32 символа в строке);
- или в отдельном файле на том же языке, что и документируемая программа;
- или в непосредственно исполняемом файле в машинных кодах (пользуйтесь такими инструментальными программами, как FORMAT, DOCUM, MON STR).
- При задании клавиш управления необходимо учитывать удобство их использования в машинах как с плёночной, так и с «высокой» клавиатурой.
- Подключение внешних устройств к порту параллельного ввода-вывода производится в соответствии с прилагаемым стандартом интерфейса.
- При написании игровых программ рекомендуется использование унифицированного блока установки управления STAND или аналогично ему (например, как в LODE RUNNER).
- При присвоении имён
- Имена файлов пишутся заглавными латинскими буквами.
- Длина присваиваемого имени не должна превышать шести знаков, после которого через точку могут следовать три символа расширения. Имя в возможно большей степени должно отражать содержание программы.
Не следует пренебрегать названиями программ на английском языке - они зачастую бывают информативнее русских. Используйте предлагаемый набор стандартных расширений.
.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 не предусматривается.