User Tag List

Показано с 1 по 10 из 311

Тема: РАДИО-86РК на Z80

Древовидный режим

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #11

    Регистрация
    05.10.2016
    Адрес
    г. Санкт-Петербург
    Сообщений
    1,080
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    5
    Поблагодарили
    5 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Vladimir_S
    Не понял как будет использоваться память в 1Мб если речь идет о кусочке 8400...BFFF? Как память для хранения софта или как оперативная?
    Ответов на этот вопрос много. Каждый использует так, как хочет и может. Моя же концепция использования доп.ОЗУ следующая. Мне доп.ОЗУ нужно не только для загрузки программ в ОЗУ выше 8000, но и для организации из доп.ОЗУ RAM-диска.

    Область 8400...BFFF - это окно, через которое CPU получает доступ к памяти значительно больше его адресного пространства. Это архитектура с диспетчером памяти (в противовес архитектуре цельно банковой коммутации, которая тоже имеет свои плюсы).

    Но одновремено, это не только окно, но и область где работают ДОС и все те программы, что не должны портить основное ОЗУ. В частности отладчики в этой области позволяют отлаживать любые программы РК86, тогда как отладчики в основном ОЗУ это делать не могут. Текстовый редактор и ассемблер могут иметь всё основное ОЗУ для хранения исходника. А Вы видели, что редактор с макро-ассемблером имеют размеры более 12 кб и если их загрузить в основное ОЗУ, то можно транслировать исходник лишь крошечного размера, что делает макроассемблер бессмысленным.

    Программа в области 8400 может занимать своим кодом несколько сегментов по 15К. Но пока это не требуется. Я исхожу из того, что для работы программ из области 8400 отводится только один сегмент в 15 кб. Номер этого сегмента не важен (это первый сегмент, что не из основного ОЗУ). Если ОЗУ раздельные, то это сегмент 0, а если совмещённые, то 2 (тогда сегменты 0 и 1 это куски основного ОЗУ). ДОС при старте
    грузится на 8400 и узнает номер текущего сегмента считывая байт из адреса F102. А затем все последующие сегменты использует под RAM-диск. Поэтому ROM-BIOS при сбросе должен инициализировать порт F102.

    Из-за того, что для доступа к доп.ОЗУ используется тот же самый участок памяти (8400...BFFF), где работает ДОС, то возникают сложности программирования. Программа работающая в окне 8400 не может сама переключать ОЗУ в этом же окне (иначе при переключении, код самой программы исчезнет из адресного пространства и произойдёт улёт). Подпрограммы чтения/записи из доп.ОЗУ могут располагаться только в некоммутируемой памяти. Именно поэтому так необходимы две подпрограммы в ПЗУ позволяющие читать и писать в любое место ОЗУ, а не только в текущий сегмент, включённый в окне. В крайнем случае, некоммутируемый участок можно программно имитировать в коммутируемом ОЗУ.

    П/п-ммы F836/39 не обязаны быть прошитыми в ПЗУ целиком. Достаточно иметь только входы и вектора (заглушенные по сбросу). Тогда для любой внешней памяти можно загрузить драйвер, что сделает входы F836/39 рабочими. Только грузить драйверы расширенной памяти придётся в основное ОЗУ (т.к эти драйверы переключают окно и не могут сами работать в окне 8400).

    Пока я стремился сделать эти подпрограммы аналогичными орионовским, т.к тогда мне не требуется переделывать модули VDISK.INC во всех ДОС. Но видимо для такой архитектуры это не оптимально. Процедуры в ПЗУ получились слишком медленными и огромного размера. Это для 256К, а для 1 мб размер кода увеличится. Изменив программный интерфейс (т.е идеологию) можно в те же 75 байт засунуть вместо обмена по 1 байту, обмен целым сектором в 512 байт. Что раза в 3-4 ускорит работу с эл.диском.

    Есть ещё один способ организовать доступ к эл.диску при такой архитектуре. При этом даже не требуется менять базовое ПЗУ. Суть в следующем. В каждом сегменте в адресах BFC0...BFFF программно имитируется непереключаемый участок. Для этого в каждый сегмент (программой из основного ОЗУ) в эти адреса записывается один и тот же код. Тогда при включении в окне любого сегмента по адресам BFC0...BFFF остаётся один и тот же код. Т.е этот участок стал как бы некоммутируемым. Где и располагаются две подпрограммы чтения/записи байта или сектора.

    ОЗУ размером больше чем 32+16 кб нужно только для ДОС, точнее для эл.диска ДОС. Если же ДОС имеет другой массовый носитель, например "micro-SD"-карточку в 2 Гб, или плату внешнего эл.диска 512К, то доп.ОЗУ более, чем 15 кб не нужно. Для ДОС 15 кб как раз достаточно. Это 10-12 кб для самой ДОС, а остальное под дисковые буфера и системные таблицы (т.к при больших дисках очень большие 'Allocation Tables', VTOC или FAT).
    Последний раз редактировалось barsik; 21.02.2017 в 11:31.

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Радио-86РК: Видеовыход
    от m.d. в разделе Радио-86РК
    Ответов: 13
    Последнее: 21.05.2015, 08:19
  2. Радио-86РК: По страницам журнала "Радио"
    от Viktor2312 в разделе Радио-86РК
    Ответов: 79
    Последнее: 13.02.2014, 08:34
  3. эмулятор радио-86рк
    от sergey2b в разделе Эмуляторы отечественных компьютеров
    Ответов: 4
    Последнее: 09.06.2011, 15:59
  4. Радио 86РК
    от Shnurkov в разделе Барахолка (архив)
    Ответов: 1
    Последнее: 02.01.2009, 12:52

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •