Орион ПРО система динамического распределения ОЗУ

Организация оперативной памяти в Орион ПРО

Продаю платы и наборы микросхем, куплю микросхемы Заказ запчастей ПК Орион-128, Орион ПРО, купить микросхемы

Организация оперативной памяти

BIOS описание программиста

Программы для Ориона ПРО

Описание режимов работы Ориона ПРО, руководство пользователя

Орион Про сборка

Орион ПРО тонкости сборки и натройки

E:010697         (C) 1997 ORIONSOFT

 СИСТЕМА ДИНАМИЧЕСКОГО РАСПРЕДЕЛЕНИЯ ОЗУ  ПК "ORION-PRO"

                         ОБЩИЕ СВЕДЕНИЯ

                              ==============

     Наличие относительно большого для  8-разрядных  компьютеров объема памяти  в  ПК "Orion-Pro" (32 сегмента по 16 Кбайт,  что соответствует суммарной емкости 512 Кбайт в  базовом  варианте) вызывает необходимость  централизованного  управления ей с тем, чтобы исключить конфликты программ пользователя между  собой  и операционной системой  PRODOS.  Для  этого  ресурсы  памяти  ПК должны  выделяться  и  освобождаться  в   процессе   выполнения программ (т.е. динамически) через единую систему  распределения ОЗУ, являющуюся частью  операционной  системы.

     Такая система  динамического  распределения  памяти  должна обеспечивать как минимум выполнение следующих функций:

     - инициализацию своих внутренних параметров;

    - проверку занятости указанной области памяти;

    - принудительное  выделение   указанной  области  памяти  с установкой признака ее занятости;

    - запрос на выделение  области  памяти  требуемого  объема, при этом система  сама  находит  первую  подходящую  область  и сообщает  ее  адрес  с   автоматической   установкой   признака занятости области;

    - освобождение ранее выделенной области памяти.

     Так как память в ПК "Orion-Pro"  имеет  страничную  (по  60 Кбайт) и сегментную (по 16 Кбайт) организацию,  при  разработке системы динамического распределения ОЗУ необходимо было  решить вопрос о том, на каком уровне выполнять  распределение  памяти: на страничном или сегментном.

     Выбор был сделан в пользу  последнего  способа,  поскольку, во-первых, при обращении к ОЗУ посегментно (через одно из  окон в  адресном  пространстве  процессора)  можно  получить  доступ практически ко  всей  памяти  компьютера,  а  при  постраничном обращении теряется 4 Кбайта на каждую страницу  (из-за  наличия непереключаемого   ОЗУ   0F000..0FFFFH).   Во-вторых,   драйвер дисплея TV-PRO взаимодействует с ОЗУ также  через  сегменты,  и целый ряд его функций для работы с  буфером  экрана  (например, сохранение  и  восстановление  окна,  вывод  спрайта  и   т.д.) требуют  указания  сегментных  адресов  памяти,  т.е.   номеров сегментов и адресов в пределах сегментов (0..3FFFH).

     Таким образом, рассматриваемую систему можно назвать системой сегментного динамического распределения памяти. Недостатком такого подхода можно считать то,  что система не может выделить область памяти,  находящуюся на границе двух сегментов, а также то, что  максимальный  объем  непрерывной  области  в  адресном пространстве процессора в общем случае не превышает 16 Кбайт.

     Система распределения  памяти  обеспечивает работу с многомерными областями памяти,  имеющими размерность от 1 до 4.  Под размерностью  области  памяти понимается количество "параллельных" плоскостей ОЗУ, размещенных в разных сегментах, но имеющих одинаковые адреса в пределах сегментов.  Данное условие необходимо для реализации функций драйвера TV-PRO, работающих с буфером  экрана.  Так,  при сохранении окна монохромного экрана используется буфер размерностью 1, а при сохранении окна 16-цветного экрана (EGA) - размерностью 4.

                 ТАБЛИЦА ОПИСАНИЯ ОБЛАСТИ ПАМЯТИ

                ===============================

     При  выполнении  функций  распределения  ОЗУ  должны   быть указаны параметры выделяемой  (освобождаемой)  области  памяти, включающие  ее  начальный  адрес   и   длину.   Эти   параметры представляются в виде специальной таблицы, называемой  ТАБЛИЦЕЙ ОПИСАНИЯ ОБЛАСТИ (ТОО) длиной от 6 до 9 байт:

     - размерность области 1..4 (число  плоскостей,  размещенных в разных сегментах,  но  имеющих одинаковые начальный  адрес  и длину) - 1 байт;

    - длина области (1..4000H) - 2 байта;

    - начальный адрес области в  пределах  сегмента  (0..3FFFH) без учета ее положения в странице ОЗУ, т.е.  два  старших  бита адреса всегда нулевые (такой адрес  будем  называть  сегментным адресом) - 2 байта;

    -  список  номеров  сегментов  ОЗУ,  в  которых   находятся плоскости области, при этом количество сегментов  соответствует размерности области - 1..4 байта.

     Программа пользователя должна сохранять параметры  ТОО  для каждой из задействованных  ею  областей  с  целью  последующего освобождения памяти по окончании своей работы.

                    ТАБЛИЦА ОПИСАНИЯ СИСТЕМЫ

                   ========================

     Для выполнения задач,  возлагаемых на систему распределения ОЗУ, она  должна  вести учет наличия свободной памяти.  В самом начале работы системы,  когда память еще не задействовалась,  в распоряжении системы находится исходный массив сегментов,  указанный в момент ее инициализации. При этом необязательно, чтобы в динамическую  память были включены все сегменты,  имеющиеся в компьютере: например, в нее можно не включать экранные сегменты и сегменты рабочей страницы ОЗУ.  Для указания системе допустимых к использованию сегментов используется СПИСОК НОМЕРОВ  СЕГМЕНТОВ (СНС).  Номера  сегментов в этом списке не должны повторяться. Под длиной СНС будем понимать количество сегментов, выделяемых под  динамическую память (для хранения номера сегмента используется 1 байт).

     По мере выделения и освобождения ОЗУ в процессе  выполнения программ  объем свободной динамической памяти будет изменяться, поэтому система ведет специальный  служебный  СПИСОК  СВОБОДНЫХ ОБЛАСТЕЙ (ССО).  Каждый элемент списка свободных областей называется ОПИСАТЕЛЕМ СВОБОДНОЙ ОБЛАСТИ и содержит 5 байт:

     - длина свободной области (1..4000H);

    - сегментный адрес начала свободной области (0..3FFFH);

    - номер сегмента, в котором находится свободная область.

     Под текущей длиной ССО будем  понимать  текущее  количество его элементов (описателей), а под максимальной длиной - их макимально допустимое  количество,  указанное  при  инициализации (соответствующий  максимальный объем ССО в байтах будет в 5 раз больше этой величины).

     При инициализации системы в ССО будет включено столько описателей,  сколько сегментов было задано в СНС (по одному описателю на каждый сегмент); начальные адреса всех свободных областей будут равны 0, а длины - 4000H (16 Кбайт).

     Итак, состояние системы распределения сегментной динамической памяти характеризуется двумя списками: СНС и ССО, параметры которых  постоянно  хранятся  в так называемой ТАБЛИЦЕ ОПИСАНИЯ СИСТЕМЫ (ТОС), содержащей 7 байт:

     - текущая длина ССО      - 1 байт;

    - максимальная длина ССО - 1 байт;

    - адрес размещения ССО   - 2 байта;

    - длина СНС              - 1 байт;

    - адрес размещения СНС   - 2 байта.

     Заметим,  что  адреса  размещения   списков   СНС   и   ССО указываются  в  пределах  рабочей  страницы   ОЗУ,   при   этом запрещается использовать адреса в области окна ROM2  -  2000H..

3FFFH.

                     ИНИЦИАЛИЗАЦИЯ СИСТЕМЫ

                    =====================

     Перед инициализацией системы распределения памяти необходимо выполнить следующие действия:

     - создать СНС, разместив его в рабочей странице ОЗУ;

    - зарезервировать память под ССО,  задавшись его максимальной длиной (количеством элементов) и учитывая, что один элемент ССО занимает 5 байт;

    - заполнить все байты ТОС, кроме первого.

     При инициализации  первый байт ТОС заполняется системой автоматически исходя из длины СНС.

                ВЫЗОВ ФУНКЦИЙ УПРАВЛЕНИЯ СИСТЕМОЙ

               =================================

     Все стандартные подпрограммы системы распределения  памяти, доступные для программ пользователя,  будем называть  функциями или операциями.  Набор базовых  функций низкого  уровня системы распределения  памяти находится в  ROM2 V2.00  и доступен через вектор ROM-BIOS  с адресом 0F82DH,  при этом  номер  вызываемой функции определяется значением регистра (A).  Операционная система  PRODOS  использует  указанные функции  низкого уровня (за счет чего сокращается ее объем) и имеет свои операции более высокого уровня, доступные через вызов расширенной BDOS  и позволяющие обращаться  программам пользователя  к уже инициализированной системной динамической памяти.

                      Функции низкого уровня

                     ----------------------

     Как уже  было  отмечено,  наличие функций низкого  уровня в ROM2 позволяет  упростить реализацию функций высокого уровня  в операционной системе PRODOS. Кроме того, наличие функций низкого уровня позволяет  создавать новые  подсистемы  распределения памяти, не пересекающиеся с основной системой. Для этого области ОЗУ,  используемые для подсистемы,  должны быть переведены в разряд занятых для основной системы, а по окончании работы подсистемы - освобождены.

     Итак, вектор  0F82DH  имеет следующий набор функций низкого уровня для распределения сегментной динамической памяти:

     A=0  - Инициализации динамической памяти (INIMEM)

           На входе:

              DE - адрес ТОС с заполненными данными, кроме первого байта;

                   должен быть создан СНС и зарезервирована память под ССО;

           На выходе:

              A  - код завершения:

                   0 - ССО инициализирован успешно;

                   2 - переполнение ССО;

                   3 - повторный сегмент в СНС;

                   4 - недопустимый номер сегмента в СНС;

                   5 - недопустимая длина СНС.

 

    A=1  - Проверка занятости области памяти (CHKMEM)

           На входе:

              DE - адрес ТОС;

              HL - адрес ТОО с параметрами области;

           На выходе:

              A  - код завершения:

                   0 - указанная область полностью свободна;

                   1 - указанная область  полностью  занята или   вообще отсутствует в системе;

                   2 - указанная область занята частично;

                   3 - недопустимое значение размерности облати в ТОО (вне диапазона 1..4).

 

    A=2  - Принудительное выделение области памяти (MRKMEM)

           (установка признака использования области)

           На входе:

              DE - адрес ТОС;

              HL - адрес ТОО с параметрами выделяемой области;

           На выходе:

              A  - код завершения:

                   0 - указанная область выделена успешно и переведена в разряд занятых;

                   1 - указанная область  уже  полностью занята   или вообще отсутствует в системе;

                   2 - указанная область уже занята частично;

                   3 - недопустимое значение размерности области в ТОО (вне диапазона 1..4);

                  -1 - фатальная ошибка системы (память  разрушена).

 

    A=3  - Запрос области памяти требуемой длины (GETMEM)

           На входе:

              DE - адрес ТОС;

              HL - адрес ТОО с первыми  тремя заполненными байтами:

                   (HL+0)        - требуемая  размерность выделяемой области 1..4;

                   (HL+1),(HL+2) - требуемая  длина  выделяемой

                                   области 1..4000H;        

           На выходе:

              A  - код завершения:

                   0 - требуемая область выделена успешно;

                   1 - нет  сегментной  памяти   для  выделения

                       требуемой области;

                   2 - переполнение ССО;

                   3 - недопустимое значение размерности области (вне диапазона 1..4);

                  -1 - фатальная ошибка системы (память  разрушена);

           Для A=0:

              HL указывает на ТОО со всеми параметрами выделен-

              ной области.

 

    A=4  - Освобождение указанной области памяти (FREMEM)

           На входе:

              DE - адрес ТОС;

              HL - адрес ТОО с параметрами области;

           На выходе:

              A  - код завершения:

                   0 - указанная область освобождена успешно;

                   1 - указанная область не была выделена (полностью или частично свободна);

                   2 - переполнение ССО;

                   3 - недопустимое значение размерности области в ТОО (вне диапазона 1..4);

                   4 - недопустимый номер сегмента в ТОО   (отсутствует в СНС);

                  -1 - фатальная ошибка системы (память  разрушена).

 

                      Операции расширенной BDOS

                    -------------------------

     Операции расширенной BDOS (XBDOS) вызываются через операцию C=50 BDOS, при этом регистровая пара DE указывает на адрес блока  параметров.  Блок параметров  содержит номер функции XBDOS, находящийся в интервале 128..255,  и адрес дескриптора операции (области памяти, в которой находятся все необходимые для данной операции параметры).  Формат блока параметров приведен ниже:

     XBDOSBP:DB      OPER   ;номер функции (128..255)       DW      ADDR   ;адрес дескриптора операции

     Кроме исполнения  операций расширенной BDOS,  операция C=50 обеспечивает исполнение функций BIOS.  Для этого в регистрах DE указывается адрес блока параметров, определяющего номер функции BIOS, и необходимые для ее исполнения параметры.  Блок параметров для вызова функций BIOS приведен ниже:

     BIOSBP: DB      FUNC   ;номер функции (0..127)

            DW      REGAF  ;содержимое регистров A,F (F-вых.)

            DW      REGBC  ;содержимое регистров B,C

            DW      REGDE  ;содержимое регистров D,E

            DW      REGHL  ;содержимое регистров H,L

        Номер функции в поле FUNC для вызова операций BIOS операционной системы PRODOS должен находиться в пределах 0..16,  а для вызова векторов ROM-BIOS  -  в пределах 50..83  (вектору 0F800H соответствует номер 50, вектору 0F803H - номер 51 и т.д.).

              Рассмотрим операции распределения памяти,  доступные  через

операцию C=50 BDOS:

     Операция 50/160 -Инициализация системы распределения памяти

                     На входе:

                     C    = 50;

                     DE   - адрес блока параметров:

                       OPER = 160;

                       ADDR = 0000H.

                     На выходе:

                     A    - код завершения:

                            0 - ССО инициализирован успешно;

                            2 - переполнение ССО;

                            3 - повторный сегмент в СНС;

                            4 - недопустимый номер сегмента в

                                СНС;

                            5 - недопустимая длина СНС.

     Операция 160 вызывается при холодной загрузке PRODOS и приводит к полной инициализации системы распределения динамической памяти (в том числе отключаются квазидиск E: и таблицы функциональных клавиш). Если в системе использован нестандартный  знакогенератор с размещением в  динамической памяти,  а также нестандартный курсор или указатель мыши, шаблоны которых размещены в динамической памяти,  после вызова данной операции память для их хранения должна быть перезапрошена для исключения их порчи.

     Операция 50/161 -Проверка занятости области памяти

                     На входе:

                     C    = 50;

                     DE   - адрес блока параметров:

                       OPER = 161;

                       ADDR - адрес ТОО с параметрами области;

                     На выходе:

                     A    - код завершения:

                            0 - указанная   область   полностьюсвободна;

                            1 - указанная   область   полностьюзанята или вообще отсутствует всистеме;

                            2 - указанная  область  занята частично;

                            3 - недопустимое  значение  размерности области в ТОО (вне диапазона 1..4);

 

    Напомним, что ТОО имеет следующий формат:

 

    TOO:    DB      DIM    ;размерность области 1..4

            DW      LEN    ;длина области 1..4000H

            DW      ADDR   ;начальный адрес области 0..3FFFH

            DB      SEG1   ;номер сегмента для 1-й плоскости

            DB      SEG2   ;номер сегмента для 2-й плоскости

            DB      SEG3   ;номер сегмента для 3-й плоскости

            DB      SEG4   ;номер сегмента для 4-й плоскости

 

       Операция 50/162 -Установка  признака использования  области

                     памяти

                     На входе:

                     C    = 50;

                     DE   - адрес блока параметров:

                       OPER = 162;

                       ADDR - адрес ТОО с параметрами области;

                     На выходе:

                     A    - код завершения:

                            0 - указанная  область переведена вразряд занятых;

                            1 - указанная область уже полностьюзанята или вообще отсутствует всистеме;

                            2 - указанная  область  уже  занята    частично;

                            3 - недопустимое  значение  размерности области в ТОО (вне диапазона 1..4);

                           -1 - фатальная  ошибка  системы (память разрушена).

   

    Операция 50/163 -Запрос области  памяти требуемого объема

                     На входе:

                     C    = 50;

                     DE   - адрес блока параметров:

                       OPER = 163;

                       ADDR - адрес 9-байтовой ТОО с  заполненными  первыми тремя байтами:   размерностью  (1..4)   и  длиной  (1..  4000H);

                     На выходе:

                     A    - код завершения:    

                            0 - требуемая область  выделена успешно,  при этом ADDR указывает на 9-байтовую ТОО с полным описателем выделенной области;

                            1 - нет сегментной памяти для выделения требуемой области;

                            2 - переполнение ССО;

                            3 - недопустимое  значение  размерности области в ТОО (вне диапаона 1..4);

                           -1 - фатальная  ошибка  системы (память разрушена).

           

    Операция 50/164 -Освобождение занятой области памяти

                     На входе:

                     C    = 50;

                     DE   - адрес блока параметров:

                       OPER = 164;

                       ADDR - адрес ТОО  с параметрами освобождаемой области;

                     На выходе:

                     A    - код завершения:

                            0 - указанная  область  освобождена

                                успешно;

                            1 - указанная область не была выделена (она полностью или частично свободна);

                            2 - переполнение ССО;

                            3 - недопустимое  значение  размерности области в ТОО (вне диапа-зона 1..4);

                            4 - недопустимый  номер  сегмента в     ТОО (отсутствует в СНС);

                           -1 - фатальная  ошибка  системы (память разрушена).

              Операция 50/165 -Получение адреса ТОС

                     На входе:

                     C    = 50;

                     DE   - адрес блока параметров:

                       OPER = 165;

                       ADDR = 0000H;

                     На выходе:

                     HL   - адрес ТОС.

     Таблица описания системы распределения памяти  имеет следующий формат:

     TOS:    DB      SSOLEN ;текущая длина ССО (число элементов)

            DB      SSOMAX ;максимальная длина ССО

            DW      SSOADR ;адрес размещения ССО

            DB      SNSLEN ;длина СНС (число сегментов)

            DW      SNSADR ;адрес размещения списка сегментов

            DB      SSOSEG ;сегмент ОЗУ для хранения ССО

 

    Данная операция позволяет получить доступ к СНС и ССО.  Заметим,  что ССО хранится в теневой области сегмента 11 (страница 2)  и для доступа к ССО операционная система  открывает этот сегмент  в окне RAM1,  вследствие  чего адрес начала  ССО в ТОС находится в пределах адресов окна RAM1.  Дополнительной особенностью  использования  ССО  является  наличие  вспомогательного внутреннего буфера для сохранения конфигурации памяти. Этот буфер располагается за ССО  и имеет такую же длину плюс 1.  Длина ССО в байтах определяется как 5*(SSOLEN).

  

    Операция 50/166 -Получение объема свободной памяти в байтах

                     На входе:

                     C    = 50;

                     DE   - адрес блока параметров:

                       OPER = 166;

                       ADDR = 0000H;

                     На выходе:

                     A,H,L - 3-байтовый результат.

 

 

    Операция 50/167 -Сохранение конфигурации памяти

                     На входе:

                     C    = 50;

                     DE   - адрес блока параметров:

                       OPER = 167;

                       ADDR = 0000H;

 

    При вызове  операции 167  состояние  памяти  сохраняется во внутреннем буфере. Данная операция вызывается при холодной загрузке PRODOS, а также может быть вызвана в программе  пользователя  для сохранения состояния памяти, которое было установлено программой,  после  выхода  в  PRODOS.   Если  в  конце  работы программы операция 167 не будет вызвана, то при выполнении процедуры теплого старта (WBOOT) автоматически выполнится операция 168, и вся память, занятая программой, освободится.

 

    Операция 50/168 -Восстановление конфигурации памяти

                     На входе:

                     C    = 50;

                     DE   - адрес блока параметров:

                       OPER = 168;

                       ADDR = 0000H;

 

    При вызове  функции 168 состояние памяти  восстанавливается из внутреннего буфера.  Эта  функция  автоматически  вызывается при теплом старте  PRODOS, т.е. каждый  раз по завершении программы передачей управления по адресу 0000H. Таким образом обеспечивается освобождение  всей памяти,  используемой программой, если в ней не была вызвана операция 167.

 

    Операция 50/169 -Пересылка данных из сегмента в сегмент

                     На входе:

                     C    = 50;

                     DE   - адрес блока параметров:

                       OPER = 169;

                       ADDR - адрес дескриптора:

   

    MOVDSC: DB      SOURSEG ;номер сегмента-источника

            DB      TARGSEG ;номер сегмента-приемника

            DW      SOURADR ;адрес в источнике (0..3FFFH)

            DW      TARGADR ;адрес в приемнике (0..3FFFH)

            DW      LENGTH  ;число байтов (1..4000H)

  

    Операция  пересылки 169  является вспомогательной  и  может быть использована  для записи или чтения данных,  размещаемых в сегментной динамической памяти (например, таблиц функциональных клавиш, знакогенераторов, спрайтов).  Входные параметры при вызове данной  операции должны  удовлетворять следующему условию: пересылаемая область не должна выходить за пределы сегмента-источника и сегмента-приемника.  Например, приведенный ниже дескриптор будет некорректным, так как конечный адрес для сегментаприемника (3800H+1000H-1) будет превышать 3FFFH:

 

    MOVDSC: DB      8

            DB      30

            DW      3000H

            DW      3800H

            DW      1000H

         

*** ORIONSOFT ***

 

Возможная замена платы расширения ОЗУ (3 и 4 страница) до 128 кбт, это замена платы на микросхему статики Dallas DS1250Y

Новинка КроссШина на Орион 128, Орион Восточный Экспресс 512

Орион POWER сборка и наладка

Сборка Мультикарты EGA

Сборка платы музпроцессора и компортов

 

 

Купить платы, наборы микросхем на Орион-128, КР565РУ5В, КР565ру7В, к565ру5г AU, к565ру7г Au в позолоте, куплю микросхемы

 

Полезные и интересные статьи

На предыдущую страницу  На главную страницу  На следующую страницу