Программирование на БК-0010-01/Глава 2
Данный материал защищён авторскими правами!
Использование материала заявлено как добросовестное, исключительно для образовательных некоммерческих целей. |
2.1. Краткий обзор программного обеспечения БК Как уже говорилось, в БК имеется 32К ПЗУ, в котором хранится системное программное обеспечение (ПО). Оно является встроенным в микроЭВМ и не может быть простыми средствами изменено. В БК-0010-01 встроен управляющий МОНИТОР (операционная система) и транслятор с языка Бейсик. Прикладываемый в комплекте блок МСТД позволяет заменить Бейсик сразу на две системные программы: интерпретатор языка Фокал и тестовую систему, включающую в себя тесты для проверки работоспособности БК и пультовый отладчик. Заводы-изготовители БК давно намеревались изготавливать также аналогичные МСТД блоки с трансляторами языков PASCAL, C, FORTH, с ассемблерами и отладчиками, но до сих пор эти благие пожелания не реализованы. Показательно, что практически никакой информации по БК и различным внешним устройствам найти обычно не удается и часто приходится ориентироваться на слухи. Например, авторам известно, что в Казани продаются подключаемые к БК блоки ПЗУ с комплектами популярных игровых программ. Огромное количество программ может быть загружено в БК с магнитофона. Их можно разделить на три большие группы: системные, прикладные и игровые. К системным программам относятся: 1) Трансляторы с языков программирования, таких, как FORTH, T-язык, Бейсик (кстати, последняя Вильнюсская разработка Бейсика значительно превосходит встроенный Бейсик БК - например, допускается много строк продолжения, и работает он на порядок быстрее из-за того, что в нем реализована вещественная арифметика одинарной точности). 2) Расширители возможностей встроенных трансляторов. Для Бейсика создан С.Зильберштейном SBASIC (структурный Бейсик), позволяющий писать много операторов в строку, использовать при программировании различные структурные конструкции и процедуры, исполнять музыку и многое другое [14]. Для Фокала таких расширителей множество: - семейство однотипных примитивных ФОКОДов, каждый из которых был написан своим автором для решения конкретных задач (например, FOCOD/Alek А.Донского позволял вызывать подпрограммы в кодах для рисования дуг, спиралей и генерации простейших звуков). Сегодня все подобные системы можно считать устаревшими; - ИВФ (Интерфейс Внешних Функций) П.Полянского позволяет включать подпрограммы в кодах и обращаться к ним, как к функциям Фокала. Наибольшее распространение из программ ИВФ имеет ИВФ МАССИВЫ, содержащая удобные средства работы с целыми, вещественными и текстовыми массивами, что невозможно или крайне неэффективно в "чистом" Фокале; - XFOCAL С.Зильберштейна - удобный универсальный расширитель, имеющий экранный редактор Фокал-программы, операторы программирования музыки, графики, спрайтов; - ФОНД (ФОртран На Дому) Г.Приса дает возможность повышения точности вещественной арифметики, операций с массивами и многое другое. Популярная версия МИФ (Мини-ФОНД) позволяет программисту собрать МИФ только из нужных в данной программе функций; он удобен в обращении и позволяет подключать новые функции. В МИФе уже реализованы подпрограммы исполнения музыки, вывода спрайтов и символов произвольного размера, сборка Фокал-программ из отдельных частей, экранный и графический редакторы и многое другое. 3) Сервисные системные программы: - копировщики программ (например, COPY6, UNIC, КУВТ-Копир/Alek, КОПИРАК, HELP и др.). Современные копировщики выполняют такие функции, как загрузка первого попавшегося файла, контроль процесса загрузки в экранном ОЗУ, несколько скоростей копирования, установка самозапуска для программ в кодах (а КОПИРАК Радченко приделывает блок самозапуска к программам на Фокале). КУВТ-Копир/Alek А.Донского предназначен для работы на БК в составе КУВТ с центральной ЭВМ типа ДВК и позволяет загружать программы с магнитофона и с дисковода ДВК, копировать и запускать на выполнение. Кроме того, он позволяет автоматически копировать целые наборы файлов с дисковода на магнитофон; - каталогизаторы (TSTF5M, KATALM и др.), составляющие каталог магнитных кассет и заодно проверяющие качество записи программ; - экранные редакторы текстов (EDASP, ГРАТРС, РЕДТ и др.), предназначенные для создания и редактирования текстовых файлов. Некоторые из них позволяют использовать изменяемые символы псевдографики. Наиболее мощным и удобным редактором следует признать EDASP (ASP corp.). Поскольку EDASP-овские тексты используются многими прикладными системами (BASE и др.), EDASP сегодня можно считать стандартным текстовым редактором для БК. Есть также его версия для работы с КУВТ; - графические редакторы ГРЕД, ГРАФРЕД, PAINT и ряд других предназ- начены для редактирования спрайтов, и, соответственно, используются преимущественно программирующими в кодах. Некоторые редакторы исполь- зуют подключаемую к БК "мышь" или джойстик. На уроках информатики в школах может быть применен редактор PAINT, демонстрирующий великолеп- ный графический интерфейс в стиле IBM PC и работающий с КУВТОМ, а так- же редакторы REDA (А.Донского) и GRAF1M, оперирующие понятиями "графи- ческий примитив", "объект", "каталог объектов", "протокол рисования объекта", "иерархия объектов в рисунке". REDA удобен для рисования сложных картин для использования в прикладных программах и позволяет сохранять на дисках КУВТа протоколы рисования, а также генерировать текст на ассемблере MACRO-11, что удобно для программистов, использую- щих ДВК в качестве инструментальной машины; - драйверы печатающих устройств и прочие сервисные программы. 4) Программы для работы в кодах (подробнее см. гл.4 и 5): - отладчики (ГРОТ, ПРОТ, MIRAGE), позволяющие дизассемблировать отлаживаемую программу, редактировать ее (вводить новые команды в мнемонике ассемблера), производить пошаговую отладку программы с распечаткой текущих значений регистров, устанавливать контрольные точки и т.п.; - транслятор МИКРО (МИКРО9, МИКРО10 и т.д.) А.Сомова, С.Шмытова и С.Кумандина, включающий редактор текста программы на ассемблере, транслятор, создающий объектные модули, и компоновщик, собирающий загрузочный модуль из нескольких объектных; - дизассемблеры (стоит отметить лишь ДИЗАКС С.Кумандина, который выдает дизассемблированный текст в формате системы МИКРО); - ряд вспомогательных программ, используемых отдельными любителями; - системы и программы для программистов, работающих на КУВТ, например, эмулятор EMT RT-11 для исполняющей системы PASCAL. К прикладным программам относятся все программы, предназначенные для решения какой-либо определенной задачи из области быта, образования, науки и техники. Здесь и программы раскроя брюк, и тренажер по Правилам дорожного движения, и психологические тесты, и программа управления елочной гирляндой, и цветомузыка, и даже телефонный автоответчик. Особо следует выделить универсальные прикладные программы: - BASE (ASP corp.) - программа ведения базы данных. Это может быть телефонный справочник, словарь, каталог библиотеки и т.п. Программа позволяет добавлять и корректировать записи в базе данных и осуществлять поиск по различным признакам, ключевым словам; - CALC (А. Бакерин) - электронная таблица, позволяющая в удобной и наглядной форме производить расчеты различной сложности, от начисления зарплаты по коэффициенту трудового участия до расчета лабораторных работ по физике в университете. Упомянем также музыкальные редакторы (например, МЕЛОМАН, КЛАВЕСИН), позволяющие набрать и отредактировать музыкальное произведение, а потом встроить его в свою программу (для тех, кто программирует в кодах, конечно). Игровые программы - самый популярный класс на БК. Одно их перечисление займет чуть ли не полкниги. Особенно ценятся игровые программы в кодах, потому что на Бейсике или Фокале, даже с использованием перечисленных расширений, невозможно сделать то, что удается выжать из машины талантливым авторам этих программ - ASP corp., В.Савину, А.Маркову и многим другим. Конечно, БК уступает всем зарубежным компьютерам по объему памяти, поэтому и игровые программы здесь примитивнее и менее ярки, но это не повод отказываться от БК ! Ряд фирм, занимающихся продажей программ для БК, например, НПК "СБИС" (167024, г.Сыктывкар, а/я 429), периодически печатают каталоги программ для БК, а также "Бюллетень БК", в котором делается обзор новых аппаратных и программных средств и приводится много полезных советов как для начинающих, так и для опытных программистов. Еще одним надежным источником информации может служить журнал "Информатика и образование", а также брошюры серии "Вычислительная техника и ее применение" общества "Знание". Упомянутые выше программы можно приобрести в НПК "СБИС", в других аналогичных предприятиях, а также в фирменных магазинах-салонах "Электроника". Следите за рекламой в журнале "Информатика и образование" ! В следующих пунктах будет кратко описано встроенное программное обеспечение БК. 2.2. Бейсик Бейсик считается языком высокого уровня, легким в освоении, и предназначается для начинающих программистов-непрофессионалов. Но, по мнению классиков, создание Бейсика - это яркий пример профанации программирования. Бейсик имеет ряд недостатков, главный из которых - невозможность структурирования программы, что навязывает программисту "плохой стиль" работы. Человеку, начинающему осваивать вычислительную технику с Бейсика, будет труднее воспринять современные технологии программирования. Те, кто стоит "за" Бейсик, приводят такой неотразимый аргумент, что "Бейсик есть на всех марках ЭВМ, следовательно, это основа компьютерной грамотности". На это им можно ответить: "И на всех ЭВМ он разный, похожий на своих собратьев лишь основными чертами". Мнения авторов на этот счет также разделились, но, видимо, жизнь диктует свои условия. На IBM PC с Турбо-Прологом и Турбо-Паскалем у наших читателей вряд ли хватит долларов, а тем более рублей, а БК с Бейсиком уже стоит на Вашем столе. Итак, встроенный Бейсик БК совместим со стандартом MSX [13], но имеет по сравнению с ним ряд ограничений: например, в нем можно записывать только один оператор в строке программы. Нет также операторов типа "PLAY" для программирования музыки и многих других. Многие из этих недостатков преодолеваются с использованием расширителя SBASIC (см.выше). Однако сам SBASIC занимает немало места в и без того ограниченном ОЗУ. Встроенная в БК Бейсик-система запускается автоматически при включении питания. Бейсик-система хранит в ОЗУ текст Вашей программы на языке Бейсик и позволяет записать его на магнитофон и прочитать его с магнитофона. При запуске программы на выполнение производится компиляция текста с языка Бейсик в шитый код. Шитый код Бейсик-системы представляет собой последовательность адресов вызываемых подпрограмм и данных для них. После успешной трансляции управление передается исполняющей системе Бейсика, которая последовательно вызывает нужные подпрограммы. Если учесть, что в ОЗУ одновременно хранятся исходный текст программы на Бейсике, ее шитый код (который обычно не короче исходного текста), данные программы и служебные переменные Бейсика (которые, будем считать, занимают адреса с 1000 по 4000), то видно, что Бейсик использует память крайне неэффективно. Поэтому написать на Бейсике большую программу невозможно, а хорошую маленькую - проблематично. По сравнению с обычной программой в машинных кодах шитый код Бейсика выполняется в несколько раз медленнее (хотя и на порядок быстрее, чем простая интерпретация Фокала). Особенностью встроенного Бейсика БК является также программная реализация вещественной арифметики двойной точности. Это очень сильно замедляет программу, где есть какие-либо арифметические расчеты. А сейчас давайте познакомимся с двумя командами Бейсика. Предположим, Вы включили БК и хотите загрузить игровую программу в кодах. Для этого Вам необходимо перейти из Бейсика в пусковой монитор БК с помощью команды MONIT (достаточно набрать три буквы: MON и нажать клавишу "ВК"). Еще одна команда пригодится Вам, если Вы хотите загрузить расширитель Бейсика. Он должен быть записан на Вашем магнитофоне под именем "SBASIC.BIN". В этом случае после включения питания БК введите команду BLOAD"SBASIC",R . Эта команда загрузит в ОЗУ программу SBASIC и сразу же запустит ее на выполнение. Возможности SBASICа описаны в [14]. Хотя литературы по Бейсику вообще очень много, но конкретно по Бейсику БК практически нет, поэтому в следующей главе приведено описание основных операторов и функций Бейсика БК, а также некоторых его особенностей, не видных с первого взгляда. Эти советы помогут Вам сделать Ваши программы на Бейсике более эффективными. 2.3. Фокал Язык Фокал считается языком высокого уровня. Все претензии, высказываемые Бейсику, справедливы также и для Фокала. Фокал несколько проще Бейсика, но, пожалуй, сложнее в изучении. Не чужда ему и некоторая элегантность по сравнению с Бейсиком (например, понятие групп строк рождает целую серию интересных программистских приемов). Фокал также имеет неплохие изобразительные возможности, а с использованием ряда вышеописанных расширителей вполне конкурентоспособен с Бейсиком. Для того, чтобы работать с Фокалом, необходимо подключить к БК блок МСТД. Подключение и отключение блока можно производить только при выключенном питании ! При включении БК с МСТД автоматически будет запущен Фокал. Интерпретатор Фокала занимает в ПЗУ в три раза меньше места, чем транслятор Бейсика - это одно из преимуществ такого типа исполняющих систем. Что же такое "интерпретатор" ? Транслятор компилирующего типа (компилятор) один раз переводит программу с исходного языка (например, Бейсика БК) в машинные коды или в шитый код, как у Бейсика, и потом полученная программа выполняется сама или с участием исполняющей системы. Интерпретатор же хранит в ОЗУ исходный текст программы (например, на Фокале), и переводит его по мере выполнения буквально по буковке. Поскольку задача анализа текста программы достаточно сложна, интерпретаторы выполняют программу чрезвычайно медленно. Это их основной недостаток. Достоинства часто бывают продолжением недостатков. Так и в данном случае. Фокалу не нужна дополнительная память для размещения шитого кода, как у Бейсика, поэтому текст программы на Фокале может занять почти все ОЗУ. Такие длинные программы, как игры PRESIDENT, MANAGER, KLINGI, на БК можно было реализовать только на Фокале. Итак, если Вам не нужно быстродействие, но нужна большая и сложная программа, выбирайте Фокал. Язык Фокал исчерпывающе описан в [10], поэтому здесь мы упомянем лишь две команды Фокала: P M - переход в пусковой монитор; P T - переход в командный режим тестовой системы. Интерпретатор Фокала занимает в ПЗУ адреса с 120000 по 137777. 2.4. Пусковой монитор Как Вы уже знаете, в ПЗУ с адреса 100000 по 117777 записана операционная система БК - мы назвали ее МОНИТОРом. МОНИТОР содержит в себе пусковой монитор, EMT-диспетчер и драйверы внешних устройств: клавиатуры, дисплея и магнитофона. EMT-диспетчер предназначен для удобства обращения программ к драйверам с помощью команды процессора EMT. Драйверы же представляют собой набор подпрограмм, выполняющих те или иные действия с внешними устройствами. Подробное описание этих подпрограмм и способов их вызова приведено в гл.4. Пусковой монитор предназначен для инициализации системы при включении питания БК. Кроме этого, пусковой монитор имеет командный режим, в котором Вы можете загрузить с магнитофона программу в кодах и запустить ее на выполнение. Инициализация при включении питания заключается в установке указателя стека, векторов прерываний и служебных ячеек, используемых драйверами. После этого производится очистка экрана и управление передается программе, находящейся в системном ПЗУ по адресу 120000. В БК-0010-01 управление получает Бейсик, а при подключенном блоке МСТД - Фокал. Как из Бейсика, так и из Фокала можно перейти в командный режим пускового монитора. Обычно это необходимо для работы с программами в кодах. Признаком командного режима пускового монитора является знак "?" на экране. Допустимы следующие команды: М - загрузка программы с магнитофона по адресу, указанному в оглавлении файла на ленте; М2000 - загрузка по указанному восьмеричным числом адресу (в данном примере - с адреса 2000); S - запуск программы с адреса ее загрузки; S12700 - запуск с указанного восьмеричным числом адреса (в данном примере - с адреса 12700); Т - переход в командный режим тестовой системы (адрес запуска тестов 160100; тесты находятся в блоке МСТД); любая буква от "А" до "К" вызовет перезапуск системной программы (Бейсика либо Фокала). 2.5. Тестовая система Тестовая система включает в себя набор тестов для проверки работоспособности БК и пультовый отладчик, позволяющий просматривать и изменять содержимое памяти и выполнять ряд других операций. Для работы с тестовой системой необходимо подключить блок МСТД и с помощью команды P T перейти из Фокала в тестовую систему. Признаком командного режима тестовой системы является знак "+". Вводимые цифры от 1 до 5 являются командами запуска тестов ОЗУ и ПЗУ, клавиатуры (этот тест расчитан на клавиатуру БК-0010), порта ввода-вывода, знакогенератора и магнитофона. Для выхода из тестовой системы в Фокал надо нажать букву "К". Для перехода в пультовый отладчик нужно включить русский шрифт клавишей "РУС" и набрать команду ТС. Появится признак командного режима отладчика - символ "$". Отладчик позволяет просматривать и изменять содержимое памяти, а также выполнять рад операций с массивами данных в памяти. В нем используются понятия: "текущий адрес" - это адрес, установленный командой "А", с ним работают команды чтения и записи слова (байта); "длина массива" - используется для команд работы с массивами, при этом началом массива считается текущий адрес. Все числа и адреса в отладчике записываются в восьмеричной системе счисления. Перечислим команды отладчика: А - проконтролировать значение текущего адреса; адресА - установить новое значение текущего адреса (последовательно набираются значение адреса и буква "А"); Д - проконтролировать значение длины массива; длинаД - установить значение длины массива; числоР - записать "число" в память в диапазоне, определяемом текущим адресом (А) и длиной массива (Д); адресС - сравнить массив, начинающийся с адреса "адрес", с массивом, начинающимся с адреса А. Оба массива имеют длину Д; Х - подсчитать контрольную сумму массива А длиной Д; адресП - переписать массив А длиной Д с адреса "адрес" (скопировать массив); количествоЛ - сделать дамп памяти (распечатать по словам "количество" байт памяти с адреса А; И - прочитать слово по адресу А; числоИ - записать слово по адресу А; Б - прочитать байт по адресу А; числоБ - записать байт по адресу А; Ц - циклическое чтение - запись слова по адресу А; Щ - снять защиту системной области (адреса меньше 1000); , - чтение слова и увеличение текущего адреса А (удобно для последовательного просмотра содержимого памяти); число, - запись слова и увеличение текущего адреса А (удобно для последовательной записи слов в память - например, при наборе небольшой программы в кодах); . - аналогично ",", но для байтов; - - чтение или запись слова, аналогично ",", но с уменьшением адреса А; : - то же для байтов; МЧ, МЗ, МФ - чтение, запись и поиск файла на ленте; адресG - запуск программы с "адреса"; К - выход из тестовой системы в Фокал.