Главная Дока Микро-80 Радио-86РК ЮТ-88 Орион-128 Ссылки Новости Письмо

Описание компьютера Радио-86РК
Журнал РАДИО

ОРГАНИЗАЦИЯ “ОКОН” В ПРОГРАММАХ НА БЕЙСИКЕ

При описании драйвера оконного интерфейса в предыдущей статье упоминалось, что его можно использовать совместно с программами на языке БЕЙСИК. К сожалению, непосредственно из БЕЙСИК - программ обращаться к оконному драйверу нельзя, так как, во-первых, в интерпретаторе не был решен вопрос передачи параметров подпрограммам в кодах, а во-вторых, при разработке МОНИТОРа не была предусмотрена возможность перехвата обращений к подпрограммам МОНИТОРа по основным точкам входа. Поэтому для практического использования драйвера разработано несколько вспомогательных подпрограмм на АССЕМБЛЕРе для сопряжения БЕЙСИК - программ с драйвером. Исходный текст этих подпрограмм приведен в табл.1.

Рассмотрим подробнее, как они работают и как можно организовать совместное выполнение программ на БЕЙСИКе с программами в кодах.

Для выполнения нескольких подпрограмм, написанных на АССЕМБЛЕРе, передачи им параметров и для получения результатов их работы на практике обычно применяют следующий прием: в части ОЗУ, не занятой интерпретатором и не используемой программой на БЕЙСИКе, выделяется специальная область, называемая областью связи. Положение этой области в ОЗУ и ее структура определяются при разработке ассемблерных и БЕЙСИК - программ. Область связи может включать точки перехода на различные подпрограммы, например, так, как это сделано в МОНИТОРе. Несколько байтов в области связи может быть выделено для передачи параметров подпрограмм, а при необходимости и для возврата результатов. В программах на БЕЙСИКе до перехода на подпрограмму при помощи оператора РОКЕ записывают значения передаваемых параметров в заданные ячейки области связи. Переход на подпрограмму осуществляется при выполнении функции USR. Результат работы подпрограмм либо возвращается функцией USR, либо его можно прочитать функцией РЕЕК, из заданных ячеек области связи. Благодаря тому, что интерпретатор “МИКРОН” обрабатывает шестнадцатиричные числа, все операции по передаче параметров и переходу на подпрограммы осуществляются достаточно просто.

Чтобы уменьшить зависимость программы на БЕЙСИКе от расположения области связи и подпрограмм в ОЗУ, абсолютное значение адреса можно задавать только для начала области связи, а все остальные адреса различных полей области связи смещением от ее начала (см. комментарии к области связи и пример программы на БЕЙСИКе в табл.4).

Часто для решения поставленной задачи может оказаться недостаточно написания части программы в кодах или на АССЕМБЛЕРе, а требуется расширение возможностей или изменение алгоритма работы самого интерпретатора. В этих случаях прибегают к временной модификации кодов интерпретатора таким образом, что выполняемая программа заменяет одни команды интерпретатора на другие, а по окончании работы вновь восстанавливает их. Такой прием применяется, например, в программе RAMDOS (см. [1]), такой же прием использован и для подключения оконного драйвера.

Следует отметить, что модификация кодов интерпретатора является вынужденной мерой, и такое решение имеет много недостатков: подпрограммы, использующие этот прием, могут работать только с данным интерпретатором БЕЙСИКа и перестают работать при смене его версии. Даже с этой же версией интерпретатора, но помещенной в ПЗУ, применить такой прием невозможно.

При отсутствии накопителя на гибком магнитном диске программисты любую часто используемую программу стремятся поместить в ПЗУ, чтобы иметь ее постоянно доступной. А интерпретатор БЕЙСИКа, работающий в ПЗУ,— это вдвойне удобно. Если, например, в ПЭВМ “Партнер 01.01”, сходной по архитектуре и программному обеспечению с РК-86, интерпретатор БЕЙСИКа поместить в ПЗУ, то можно освободить 8 кБ в младших адресах ОЗУ и, следовательно, увеличить допустимый объем программ на БЕЙСИКе. Однако в этом случае подключить оконный драйвер описанным выше способом уже невозможно, но благодаря тому, что в МОНИТОРе “Партнера 01.01” предусмотрены так называемые “крюки” для перехвата обращений к МОНИТОРу, подключить оконный драйвер удается уже без модификации интерпретатора. Такой прием не зависит от версии интерпретатора и методологически более правилен.

Тексты подпрограмм оконного драйвера и подпрограмм для его сопряжения с программами на БЕЙСИКе даны на языке АССЕМБЛЕРа и, очевидно, будут больше полезны подготовленным читателям. Для тех, кого интересуют возможности создания окон только в программах на БЕЙСИКе, в табл.2 приведены коды области связи и всех подпрограмм оконного драйвера, оттранслированные с адреса 6800Н. Область связи занимает первые 13 байт.

Команда перехода на подпрограмму инициализации оконного драйвера дана со смещением ( +0): в этой подпрограмме производится восстановление кодов интерпретатора, поэтому с ее выполнения рекомендуется начинать и заканчивать работу с оконным драйвером. Со смещением ( +3) дана команда перехода на подпрограмму открытия очередного окна. Предварительно в ячейки области связи со смещением (+9) и ( +10) необходимо записать координаты левого верхнего угла окна. Начало координат находится в левом нижнем углу, поэтому координаты задаются так же, как и в операторе БЕЙСИКа CUR. В ячейки со смещением ( +11) и (+12) записываются размеры открываемого окна. Во время открытия первого окна коды интерпретатора модифицируются так, чтобы обеспечивались работа оконного драйвера и полное восстановление интерпретатора после его рестарта по команде МОНИТОРа GO.

Команда перехода на подпрограмму стирания активного окна дана со смещением ( +6). Параметров у этой подпрограммы нет. При стирании последнего активного окна восстанавливаются коды интерпретатора. Подпрограммы открытия и стирания окна возвращают номера активного окна.

Коды подпрограмм расположены с адреса 681ЗН по 684FH. С адреса 6850Н начинается рабочая область оконного драйвера. Для перемещения кодов подпрограмм и области связи в табл.3 приведена соответствующая таблица коррекции BITMAP. Контрольные суммы и кодов программ и таблицы BITMAP нулевые.

С помощью программы “DATA — ТРАНСЛЯТОР” вы можете получить коды подпрограмм в виде набора данных DATA и включать их непосредственно в текст программ на БЕЙСИКе.

В табл.4 приведена программа на языке БЕЙСИК, которая с интервалом в 2С строит на экране пять одинаковых окон, а затем с интервалом в 1С стирает их. Чтобы лучше усвоить работу оконного драйвера, попробуйте выполнить эту программу несколько раз: прервав ее нажатием на клавишу F4 и выполнением оператора LIST, перезапуском интерпретатора после сброса компьютера и т. д.

Очень часто окна используют в диалоговых программах для организации ветвящихся многоуровневых меню. На каждом уровне, как правило, предлагается выбрать один из нескольких возможных пунктов меню. На БЕЙСИКЕ организовывать подобные многоуровневые меню несложно. Для включения их в программы на АССЕМБЛЕРе в табл.5 предлагается текст двух вспомогательных модулей СНТАВ и UPDOWN и пример их использования совместно с оконным драйвером в реальной диалоговой, программе.

Модуль СНТАВ осуществляется поиск по таблице вида символ/адрес, располагаемой сразу же за командой обращения к модулю. При совпадении аккумулятора с символом из таблицы осуществляется переход по соответствующему адресу. Один из символов может быть зарезервирован под признак конца таблицы, если предполагается, что поиск может не увенчаться успехом.

Второй модуль — UPDOWN — позволяет осуществить выбор пункта меню, пользуясь только клавишами “Курсор вверх”, “Курсор вниз” и “ВК”. Предварительно курсор должен быть установлен в строку с первым пунктом меню. В регистр D загружается число пунктов меню, в регистр Е — начальный номер пункта меню. Этот пункт меню помечается указателем, который может перемещаться вверх и вниз, с помощью клавиш управления курсором. После нажатия на клавишу “ВК” в регистре А возвращается номер выбранного пункта.

Модуль ЕХАМР включает пример комплексного использования подпрограмм оконного драйвера и организации меню в интерактивной системе. (Вместо модулей обработки стоят “заглушки”.) В первом окне меню содержит три пункта. Один из пунктов разворачивается во втором окне в меню из семи пунктов.

Г. ШТЕФАН

г. Москва

ЛИТЕРАТУРА

1. Лукьянов Д. RAMDOS для “Радио-86РК”.— Радио, 1989, № 9, 10.
2. Дмитриев А., Игнатьев Ю. Программа “DATA - ТРАНСЛЯТОР”.- Радио, 1989, № 7, с. 50-52.
3. Барчуков В., Фадеев Е. Бейсик “МИКРОН”.— Радио, 1988, № 8, с. 37—43.
4. Штефан Г. О перемещении программ в машинных кодах.— Радио, 1989, № 3, с. 51—54.

Отсканировано с журнала Радио №4 1990 г.
Отредактировано Лесных Ю. 2001 г.

Описание компьютера Радио-86РК
Журнал РАДИО



(C) 2003-2010 www.danbigras.ru Наш адрес: info@danbigras.ru
Всё о старых компьютерах