English, French, German
Pocket-Viewer.ru for users and developers
Google
 
Web pocket-viewer.ru
Главная · Программы · Пользователям · Разработчикам · Конкурсы · Партнерство · Информация · Форум   
  Разработчику
Программирование
Периферия
Р-Документация
Р-БРАВО
Клуб разработчиков
Пожелания

Реклама :: NAEM.ru - всероссийский портал найма

Библиотека РАзных ВОпросов разработчику

Маленькие ценности PVOS - Add-Ins.

J. Steingraber
27 февраля 2001

перевод Олега Шаталова, sov-dusik@mail.ru



Add-Ins используют специальный метод взаимодействия (коммутации) банков. Эта статья описывает, как использовать этот тип коммутации банков и как преодолеть необходимость выравнивания размеров Add-Ins по 64kB границе.

ADD-In и коммутация Банков.

Add-in размещаются в (виртуальном 32-Бит) адресном пространстве с адреса 0x01100000 до 0x011FFFFF. Переключение Банков 128kB-блоками возможно только по 128kB границам.
Таким образом Если Add-in должен быть вставлен в адресное пространство CPU, только 8 ADD-ins могли бы быть размещены по адресам 0x01100000, 0x01120000, 0x01140000..., 0x011E0000.
В действительности Add-in могут находиться и по адресам 0x01130000, 0x01150000...0x011F0000. Следовательно, максимально 16 Add-ins могут быть загружены (сохранены).
Поскольку Add-ins не всегда находятся по 128kB-границам, имеются аппаратные средства для включения (подключения) нужного Add-ins.

Переключение 16 кБ банков.

Можно включать (вставлять, подключать) Add-in при помощи двух портов, которые позволяют включать и выключать 16kB области памяти. В байтовый порт 0x6C должно записываться смещение с 8 по 15 биты, в Word порт 0x6E записываются биты с 14 по 29 (виртуального 32-бит) адреса источника. В случае 64кБ Add-ins, который находиться по адресу 0x01120000, чтобы вставить его по адресу 8000:0000, должны быть проделаны следующие операции:

OUT 0x6C,0x80 ; destination 8000:0000
OUT 0x6E,0x0448+0x8000 ; set highest bit to enable bank
OUT 0x6C,0x84 ; destination 8400:0000 = 8000:4000
OUT 0x6E,0x0449+0x8000
OUT 0x6C,0x88
OUT 0x6E,0x044A+0x8000
OUT 0x6C,0x8C
OUT 0x6E,0x044B+0x8000


Примечание: в качестве адресов назначения возможны только области от 8000:0000 до 9FFF:FFFF и от E000:0000 до E000:FFFF. Перекрытие с 128kB-банков не допустимо.



ADD-in внутри ADD-in.

Факт того, что коммутация Банков поддерживается 16kB блоками, может быть использован для хранения в памяти более, чем 16 приложений (Add-ins). AddInPack соединяет (слепливает) несколько небольших Add-in по 16kB границе в новый Add-in. Чтобы PVM могла работать с таким "сборником", должен настраиваться указатель длины в заголовке первого Add-in. К тому же необходимо установить второй байт всех добавленных Add-in в 0. Таким образом, они будут проигнорированы PVOS и PVM.

Таким образом, созданный "сборник" станет для PVM и PVOS одним целым, как обычный Add-in. То есть может быть установлен или удален при помощи PVM, и первый Add-in будет отображается в меню PV и может запускаться в PVOS.

Чтобы видеть "дополнительные" Add-ins и запускать их, нужна собственная программа, поскольку они невидимы для PVOS. Для этой цели служит PackMenu.
PackMenu использует переключение 128 КБт банков, чтобы исследовать Add-In память. В каждом обычном Add-in ищутся дополнительные Add-in.
Специальная запускающая программа, которая работает в стеке, отображает "упакованный" Add-in по адресу 8000:0000 и запускает его там. Перед этим в определенных переменных PVOS сообщается, какая область памяти должна отображаться после включения.

посмотреть исходник программы


Надеюсь, что эта маленькая подпрограмма будет так или иначе полезна...

продолжение следует ;-)

Идея принадлежит Michael D. (OrganiZer), www.pocket-viewer.de
Все права связанные с торговыми марками, упоминаемыми на страницах этого ресурса, принадлежат их владельцам.
Полное или частичное воспроизведение любых материалов, содержащихся на этом сайте, допускается только с условием размещения ссылки на этот сайт.
Пишите нам: admin@pocket-viewer.ru © Алексей Ананьев-Миляр, 2001
www.melar.ru
Hosted by valueHOST: Лидер Вэб-Хостинга



Rambler's Top100 Rambler's Top100 Информационная Деловая Сеть