[an error occurred while processing this directive]
( ПРОДОЛЖЕНИЕ )
3.2.1.7 Чтение байта с устройства
3.2.1.7.1 Общие слова
Данная функция введена для устройств с побайтовым
обменом( принтер, сеть и т.д. ), она не реализо-
вана в базовом комплекте библиотеки SYSTEM, но
может быть без проблем написана по ВАШЕМУ желанию.
3.2.1.8 Запись байта на устройство
3.2.1.8.1 Общие слова
То же, что и при чтении.
3.2.1.9* Инициализация устройства
3.2.1.9.1 Общие слова
Данная функция введена для устройств, обладающих
памятью( дисковод, RAMDisk и т.д. )для полного уни-
чтожения ВСЕЙ информации на них. Для устройств дру-
гого типа может игнорироваться.
Приношу свои извинения за непродуманность данного
пункта т.к. эта функция не реализована пока в
библиотеке SYSTEM.
3.2.1.10* Установка параметров "своего" устройства
3.2.1.10.1 Общие слова
Эта функция устанавливает необ-
ходимые ячейки системы для того, чтобы система
смогла вообще работать с логическим УСТРОЙСТВОМ.
Данная функция выполняется только при смене актив-
ного УСТРОЙСТВА.
3.2.1.10.2 Входные параметры
WorkSltAdr- адрес слотовой области.
3.2.1.10.3 Ячейки для установки
Для системы необходимо установить только ячейку
WorkSlt( адрес рабочей слотовой области ),
все остальные ячейки нулевой страницы,
отведенные под рабочие параметры УСТРОЙСТВА( SW+ )
могут быть установлены по желанию разработчика
УСТРОЙСТВА.
3.3 Организация прерываний
3.3.1 Общие слова
В BForth существует возможность написать свои собственные
обработчики прерываний, причем, как и при организации
ВВОДА/ВЫВОДА прерывания имеют структуру цепочки и свои
слова, создающие слова- прерывания. Также имеется раз-
личие между прерываниями типа NMI и IRQ.
3.3.2 Особенности слов- прерываний
Слова- прерывания могут быть написаны только на ассемб-
лере, что связано с критичностью времени выполнения слов
обработчиков. Ввиду этого слова- прерывания нельзя на-
писать в форт- системе, но для этого существует такая
вещь как БИБЛИОТЕКА. Подробно о написании библиотек см.
главу 5.
3.3.3* Создание слов- прерываний
Здесь не все так просто, как в пункте 3.1.3( создание
слов- обработчиков IN/OUT ). Т.к. слово- обработчик
прерывания пишется на ассемблере, то здесь не будет при-
ведена структура слова- обработчика прерывания( она бу-
дет рассмотрена в ПРИМЕРЕ к этому пункту ).
3.3.4 Системные установки прерываний
Для прерывания NMI системные установки выглядят:
NMIRESET ( сброс всей цепочки прерываний NMI )
' KBDINT ( на стек адрес процедуры обработки прерыва-
ний клавиатуры )
NMISET ( установим первый элемент цепочки )
' CURSORNMI ( на стек адрес процедуры обработки мерцаний
курсора )
NMISET ( установим эту процедуру первой в цепочке)
Для прерывания IRQ системных установок не предусмотрено
3.4 Организация памяти
3.4.1 Общие слова
Память в BForth организована в виде страниц, каждая из
которых представляет собой сегменты ( 8..f ) основ-
ной памяти и все сегменты ДОП памяти, которые подключают
ся на адреса A000..BFFF( т.е. на 5 банк ). В BForth также
существует такое понятие как ЗАДАНИЕ, имеющее ID( иденти-
фикационный номер ). Все это введено потому, что в форте
в любой момент времени может находиться несколько прог-
рамм, которые хотят сохранить свои данные за собой( нап-
ример EDITOR, GRAPHICS и т.д. ).
3.4.2* Как использовать память системы
Для того, чтобы ВАША программа могла использовать память
системы необходимо "зарегистрироваться", для того, чтобы
система могла "знать" кому она будет выделять память.
РЕГИСТРАЦИЯ: состоит в выдаче на стек ID своего ЗАДАНИЯ
и вызова слова SETID( ID ЗАДАНИЯ- слово в диапазоне
1- ff, но для ЗАДАНИЙ пользователя рекомендуются ID
80- ff, для того, чтобы не возникало конфликтов с систем-
ными ЗАДАНИЯМИ ). При выполнении слова SETID с стеке
будет запомнено текущее состояние памяти системы и
номер текущего ЗАДАНИЯ. После этого текущим ЗАДАНИЕМ
будет объявлено то, номер которого на стеке.
После этого все слова, работы с памятью будут относиться
к ВАШЕМУ ЗАДАНИЮ.
ЗАХВАТ: состоит в том, что ВАШЕ ЗАДАНИЕ выставляет на
стек число необходимых ему блоков по 8 кб. и вызывает
слово ALLOC. Слово ALLOC возвращает число захваченных
у системы блоков.
ИСПОЛЬЗОВАНИЕ: состоит в выдаче номера требуемого блока
памяти на стек и исполнения слова SETMEM. После этого
на адреса A000..BFFF( 5 банк ) будет подключен нужный ВАМ
кусок памяти( сегмент ). Если же ВЫ попросили систему
подключить несуществующий сегмент( например: ВЫ зарезер-
вировали у системы 3 блока, а просите включить 4 блок ),
то будет выдано сообшение об ошибке.
ВЫХОД_ИЗ_ЗАДАНИЯ: состоит из двух возможных альтернатив:
ВЫХОД_С_СОХРАНЕНИЕМ- выполняется словом NOFREE.
ВЫХОД_БЕЗ_СОХРАНЕНИЯ- выполняется словом FREE.
при выходе из задания системой автоматически восстанав-
ливается предыдущая конфигурация памяти и предыдущее
ЗАДАНИЕ.
ПРИМЕЧАНИЕ: 1. Полный список слов для работы памяти см.
ГЛОССАРИЙ.
2. Особый статус имеет ID= 1, этот ID
принадлежит графике, поэтому память при
использовании этого ID используется бло-
ками по 16 кб. и подключается по адресам
8000.. BFFF( т.к. графике 512*256 необхо-
мо 16 кб. памяти ). Поэтому, если ВЫ не
планируете работу с графикой, а хотите
иметь не 8, а 16 кб., то МОЖЕТЕ исполь-
зовать ID= 1.
3.5 Организация экранного стека модуля CRT
3.5.1 Общие слова
Экранный стек модуля CRT представляет из себя всего-
навсего 4 кб. памяти, находящихся на адресах D000..DFFF.
Но напрямую к этим адресам обратиться( @, c@, cmove и
т.д. )нельзя т.к. эти же адреса занимает верх BForth,
а стек подключается лишь на время обращения к нему.
Данный стек используется в модуле CRT для сохранения
параметров текущего окна, содержимого экрана под окном
и для других целей.
3.5.2* Использование экранного стека
Напрямую экранный стек использовать нельзя. Но набор
слов, оперирующих экранным стеком приведен в ГЛОССАРИИ.
ПРИМЕЧАНИЕ: Данный вид стека был позаимствован из форта,
реализованного на IBM, пиплом из Москвы. За
идею ОГРОМНОЕ СПАСИБО.
След. файл->bffeatr4.doc
[an error occurred while processing this directive]