[an error occurred while processing this directive]
3. Характерные особенности BForth
-------------------------------------------------------------
Введение: В данной главе будут описаны особенности BForth,
которые не входят в стандарт и являются, в основе,
авторской разработкой. Именно эти особенности и
придают BForth статус ЯЗЫКА.
ПРИМЕЧАНИЕ: Полный список слов не вошедших в
стандарт ВЫ найдете в ГЛОССАРИИ.
3.1 Организация потоков ВВОДА/ВЫВОДА( IN/OUT )
3.1.1 Общие слова
В BForth не существует никаких специальных слов для
работы с принтером, сетью и т.д. Все это компенсирует-
ся ОБРАБОТКОЙ ПО ЦЕПОЧКЕ с едиными словами IN и OUT.
Каждое из этих этих слов представляет
из себя ЦЕПОЧКУ слов, которые могут обрабатывать
свои устройства( память, сеть, принтер и т.д. ). Причем
каждое слово в ЦЕПОЧКЕ "знает" только о следующем за ним
слове, которому и будет передано управление после завер-
шения работы этого слова. Также каждое звено цепочки мо-
жет информировать все последующие звенья о свой работе.
Понятно, что о первом слове "знает" сам IN или OUT.
3.1.2* Особенности слов IN и OUT
OUT: 1. Данные для вывода( байт ) находятся в ячейке
OUTCHR.
2. Ячейка для информирования след. звеньев: OUTWAS
ПРИМЕЧАНИЕ: На время работы цепочки OUT запреща-
ются ВСЕ прерывания системы.
IN: 1. Если звено получает данные из своего устройства,
то оно обязано: а) Поместить эти данные на стек
б) Установить ячейку INWAS
2. Если в результате каких- либо действий пре-
дыдущие звенья цепочки установили INWAS, то
любое звено цепочки может игнорироваться( т.е.
добровольно прервать свое исполнение ), испол-
нив слово INWAS? в результате выполнения данного
слова процедура будет продолжена, если не была
установлена INWAS и будет совершен переход к
следующему звену цепочки в обратном случае.
3. После завершения последнего звена цепочки IN
на стек выдается содержимое INWAS.
Понятно, что подключив к IN и OUT нужные ВАМ процедуры
можно работать даже и на другом компьтере( с ВАШЕЙ клави-
атуры разумеется ), а также работать в графике как в тек-
сте поскольку все операторы в/в( OUTS, GETS, . и т.д. )
работают только через IN и OUT.
ПРИМЕЧАНИЕ: Удалить обработчик можно, только используя
знания о структуре обработчиков, которая
будет рассматриваться в примерах.
3.1.3* Создание слов обработчиков IN/OUT
Данные слова особые и создаются с помощью
:dev <WName> ..... ;dev
Понятно, что о содержимом внутри слова заботитесь
только ВЫ.
3.1.4 Системные установки IN/OUT
В системе инициализация происходит примерно так:
для OUT
OUTRESET ( Сбросим весь ВЫВОД
' CONOUT ( Получим адрес CFA процедуры вывода на
( консоль
OUTSET ( Установим первое звено для OUT
для IN
INRESET ( Сбросим весь ВВОД
' KBDIN ( Получим адрес CFA процедуры ввода с
( клавиатуры
INSET ( Установим первое звено для IN
ПРИМЕР:
МЫ ХОТИМ
Чтобы вывод с экрана шел также и на
принтер и у нас есть слово, которое может посы-
лать байт на принтер( пусть OUTPRN ). Тогда
цепочка вывода будет выглядеть:
OUT Единое слово для вывода
!
!
V
OUTPRN Вывод на принтер
!
!
V
CONOUT Вывод на консоль
!
!
V
Выход_из_цепочки_OUT
КАК ЭТО СДЕЛАТЬ?
В диалоговом режиме: ' OUTPRN SETOUT
ЧТО ДАЛЬШЕ БУДЕТ?
После этого все символы, которые посылаются
на консоль будут сначала приходить в OUTPRN, а
потом CONOUT, причем вывод на экран будет идти
вне зависимости от того, был или нет вывод на
принтер( вне зависимости от OUTWAS ).
ПРИМЕЧАНИЕ: Из ПРИМЕРА видно, что одно и то же слово
НЕ может быть, ни два раза в цепочке,
ни в какой- либо другой цепочке.
3.2 Организация устройств
В BForth для работы с внешними устройствами применяется
обозначение УСТРОЙСТВО. Основной принцип- это абстра-
гирование от природы УСТРОЙСТВА посредством стандартиза-
ции операций УСТРОЙСТВА. Т.е. ВЫ можете не знать с ка-
ким устройством ВЫ сейчас работаете, но это будет знать
за ВАС система, которая будет работать с внешним устрой-
ством так, чтобы ВАМ не приходилось задумываться о том,
как работать с ним.
Теперь по делу. Примем постулаты:
а) Есть УСТРОЙСТВО, т.е. абстрактная
вещь.
б) Есть устройство, т.е. конкретная вещь
( например дисковод )
в) Есть ОБРАБОТЧИК, т.е. программа, ко-
торая знает свое устройство, и умеет:
0) Опознать устройство
1) Включить устройство
2) Выключить устройство
3) Считать блок с устройства
4) Записать блок на устройство
5) Оперировать функциями чт. файлов
6) Оперировать функциями зп. файлов
7) Считать байт с устройства
8) Записать байт на устройство
9) Инициализировать устройство
( форматировать )
10) Установить свои параметры
в рабочую область
3.2.1 Описание каждой функции
3.2.1.0 Функция 0- Опознать устройство
3.2.1.0.1 Общие слова
При начальной загрузке система проверяет все
слоты машины на наличие в них устройств. Для этого
система выдает в стек номер слота и поочередно
запускает ОБРАБОТЧИКИ из системного набора
с 0 на стеке( т.е. 0- функция ).
Если ОБРАБОТЧИК по 0- функции опознал в сло-
те, номер которой на стеке, "свое" устройство, то
ему предоставляется на "свои"
нужды 256 байт в области, которая отведена системой
для этой слоты( см. 0.3 ).
3.2.1.0.2 Системный набор ОБРАБОТЧИКОВ
ЧТО ЭТО ТАКОЕ?
В системе предусмотрена область для хранения адре-
сов ОБРАБОТЧИКОВ. Другими словами система хранит
в себе "знания" о том, как обрабатывать какие- либо
внешние устройства. Причем она не должна заботиться
о том, чтобы знать где и в какой слоте то или иное
устройство, система предоставляет ОБРАБОТЧИКАМ
самим опознавать "свое" устройство.
ГДЕ ЭТО НАХОДИТСЯ?
Итак переменная, в которой хранятся адреса ОБРАБОТ-
ЧИКОВ: TREATERS
КАК ЗАРЕГИСТРИРОВАТЬ СВОЙ ОБРАБОТЧИК?
Необходимо выдать в стек адрес CFA своего ОБРАБОТЧИ-
КА и выполнить слово REGTREAT. При этом адр. ОБРАБ.
будет занесен в системный набор на первую свободную
позицию, если же место в наборе исчерпано, то
будет удален адрес последнего в наборе ОБРАБОТЧИКА
и на его место записан адрес нового.
След. файл-->bffeatr2.doc
[an error occurred while processing this directive]