[an error occurred while processing this directive]
3.6 Организация ошибок
3.6.1 Общие слова
В BForth НЕ предусмотрено другой обработки ошибок, кроме
исполнения системным словом ERROR процедуры, адрес кото-
рой находиться в слове DEVPROC. Но ввиду необходимости
системы многозначно реагировать на ошибки системы
в BForth библиотеках активно используется исполнение
по цепочке.
3.6.2* Организация реакции на ОШИБКИ в BForth
Каждая библиотека, работающая с устройствами или со сте-
ком должна реагировать на ошибки системы( например: сбро-
сить свой стек, выключить устройство и т.д. ). Ввиду то-
го, учесть все возможные действия при ошибке не представ-
ляется возможным, то есть возможность организовать цепо-
чечное выполнение ошибок. Для этого слово, претендую-
щае перехватывать ошибки должно выставить на стек:
NEWERRPROC- адрес своей процедуры обработки ошибок
FORNEXTERR- адрес переменной для хранения адреса
следующего слова обработки.
И выполнить слово MAKEMYERR, которое заставит оператор
ERROR выполнять первой ВАШУ процедуру. Дальнейшие дейст-
вия слова- обработчика ошибок зависит только от ВАС.
ВЫ можете не передавать управление следующему слову
обработчику( NEXTERR ), а обойтись без этого и оставив
управление в своем ЗАДАНИИ, НО при этом системой НЕ га-
рантируется устранение возможной причины возникновения
ошибки( сбой устройства, переполнение стека и т.д. ).
3.6.3 Системная реакция
В системе на ошибки реагируют следующие модули:
TEAC - выключает дисковод.
CRT - сбрасывает экранный стек.
MEM - восстанавливает основную конфигурацию памяти и
сбрасывает стек памяти.
ERROR- Печатает сообщение об ошибке и блокирует
вывод системы об ошибке( ошибка с кодом FF
игнорируется системой ).
После обхода всех звеньев обработки ошибок управление
передается системному слову обработки, которое сбрасывает
стеки ВОЗВРАТОВ и АРИФМЕТИЧЕСКИЙ, печатает сообщение
ОШИБКА N xx( если код ошибки <>FF ), и выполняет вызов
слова QUIT.
3.7 Организация словаря BForth
3.7.1 Общие слова
В BForth используется стандартный формат форт- слов, но
немного нестандартное исполнение словаря, который для
ускорения поиска по словарю был разбит на группы по дли-
не слов( хеширование по длине ). Данный принцип исполь-
зуется также и в MMS-FORTH.
3.7.2* Организация слов
Для тех, кто не знаком с организацией слов форта, пред-
лагаю прочитать[ 3 ]. В BForth используются слова сле-
дующей конструкции:
1 байт: 7 6 5 4 3 2 1 0 биты
^ ^ ^ ^ ^ ^ ^ ^
! ! ! !--+----!
! ! ! !
! ! ! Остальные биты - длина названия слова L
! ! !
! ! +-Признак незавершенности компиляции
! +---Признак непосредственного исполнения
+-----Признак начала названия
2-(L-1) байты: название слова без последней буквы
L байт: последняя буква названия с установленным стар-
шим битом
L+1- L+2 байты: Поле LFA ( поле связывания )
L+3- L+5 байты: Поле CFA ( поле исполнения )
L+6- ??? байты: Поле PFA ( поле команд )
Рассмотрим подробнее поле CFA:
Для слов, не написанных на ассемблере в поле CFA нахо-
дится команда JSR xxxx( вызов процедуры обработки сло-
ва ). Для ассемблерных слов такая команда не нужна и
поэтому в данном поле начинается сам код.
3.7.3 Организация связей в словаре
Как было написано выше словарь BForth хеширован по дли-
не имени слова, поэтому слова в нем не просто ссылаются
на предыдущее слово( поле LFA ), а ссылаются на послед-
нее слово, имеющее такую же длину как и текущее.
Так например словарь может выглядит так:
VocabAdr
0
1+
dup
drop
......
T.e. первая ячейка массива VocabAdr ссылается на слово
вторая ссылается на слово 1+
третья на слово DUP и т.д.
[an error occurred while processing this directive]