[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]