Важная информация

User Tag List

Показано с 1 по 4 из 4

Тема: Расширение ПЗУ РК86

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

    По умолчанию Расширение ПЗУ РК86

    В этой теме речь пойдёт о расширении ПЗУ РК86 и программах, которые разумно туда прошить.

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

    Благодаря тому, что в адресном пространстве РК86 можно выделить много "дыр" между адресами портов и тому, что каждый порт занимает всего несколько смежных адресов, то можно придумать тысячу вариантов расширения ПЗУ. К тому же ПЗУ не обязано быть в виде единой сплошной области (что желательно для ОЗУ), так что теоретически при сохранении совместимости можно расширить ПЗУ до 32 кб минус 17 байтов, расположив его в неиспользуемых "дырах" адресного пространства.

    Первым самым тупым лобовым вариантом расширения ПЗУ является введение нескольких страниц ПЗУ в окне F800...FFFF. Для этого проще всего напаять на имеющуюся РФ2 панельку, куда устанавливается вторая ПЗУ РФ2. Для выбора текущей страницы ПЗУ удобно использовать бит PB0 запасного ППА D14 (PC0 обычно тратят на выбор альтернативного фонта). Расход деталей составляет один инвертор, панелька и, естественно, РФ2. Это простейший способ расширить ПЗУ до 4 кб. Например, можно иметь два ROM-BIOS (например, один м.быть совместимым с МИКРОШЕЙ). Если хочется получить много страниц ПЗУ в окне F800...FFFF, то можно заменить панельку на 24 ноги на 28-ми-ногую и применить 27256.

    Второй способ расширения ПЗУ был использован в плате РК-КНГМД от Е.Седова. При этом используется тот факт, что в ПДП, т.е по адресу E000...E008 процессор только пишет, но никогда не читает. Поэтому в адресах E000...EFFF может стоять ПЗУ, что и сделано в плате РК-КНГМД. Это даёт в системе 4 кб сплошного ПЗУ (не считая ПЗУ F800).

    Легко сообразить, что ПЗУ может занимать всё окно E000...FFFF, которое в базовой схеме занимает ПДП. А это даёт уже 8 кб сплошного ПЗУ, хотя и конфликтует с адресом F000, что использует РК-КНГМД. Если РК-КНГМД не нужен или, если использовать для РК-КНГМД другой адрес, то полученные 8 кб ПЗУ очень удобны для резидентного ПО. Можно также организовать 4 страницы ПЗУ по 8 кб, используя 27256, переключая страницы битами PB0, PB1 запасного ППА D14. Панельку для 27256 в оригинальной плате РК86 удобно ставить в уже имеющиеся отверстия около ПЗУ с фонтом. Будем считать это третьим вариантом расширения ПЗУ, дающим 8 кб сплошного ПЗУ.

    Но самый грамотный вариант расширения ПЗУ до 15 кб сплошного ПЗУ получается, если для адресации ВГ75, стоящего по адресам C000...DFFF, оставить только 1 кб в области C000...C3FF. Совместимости это не нарушит, т.к процессор пишет только в адреса C000...C0C0, C1C1, C2C2 и C3C3, т.е всё в пределах оставленной для адресации области. Тогда ПЗУ может занимать сплошную область размером в 15 кб, а именно C400...FFFF. При этом напрашивается применение ПЗУ 27128, или же 27256 с двухстраничной организацией (управление, например, битом PB0 D14).

    Такой вариант расширения ПЗУ не совмещается с расширением ОЗУ до 56 или 60 кб, но совмещается с вариантом расширения ОЗУ до 48 кб (за счёт переноса порта клавиатуры 8000 в другое место). Тогда при 48 кб ОЗУ в ПЗУ 15 кб прекрасно влезет CP/M, что даст область TPA до C000, чего достаточно для использования языков высокого уровня из CP/M.

    Но в данной теме речь только про ПЗУ. Потому прилагаю схему расширения ПЗУ до 15 кб. Возможно, используя 556 РТ4 можно чуть сократить схемотехнику, но вряд-ли за счёт этого удастся выиграть хоть один TTL-корпус (зато добавит проблему прошивки РТ4).

    Интересно, что благодаря тому, что в этой схеме ИД7 выбирается в области C000...DFFF и из её выходов использована только выборка C000...C3FF и, т.к РК не пишет в область C400...DFFF, то остальные формируемые этим ИД7 чип-селекты с шагом в 1 кб можно задействовать под устройства вывода (например, ВИ53 только для звуков, без чтения).

    Последний раз редактировалось barsik; 09.04.2018 в 13:14.

  2. #1
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  3. #2
    Guru Аватар для Vladimir_S
    Регистрация
    12.12.2011
    Адрес
    г. Иркутск
    Сообщений
    2,507
    Спасибо Благодарностей отдано 
    8
    Спасибо Благодарностей получено 
    21
    Поблагодарили
    19 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    barsik, А почему только 15Кб? А не с адреса 8400?

    - - - Добавлено - - -

    Это я к тому, что у меня например 8400-9FFF это ОЗУ, А400-BFFF при включении и после сброса ПЗУ, но программно переключается на ОЗУ и обратно. С400-EFFF ПЗУ и F800-FFFF естественно ПЗУ. Но легко можно сделать любой участок ПЗУ/ОЗУ.

  4. #3
    Master
    Регистрация
    12.04.2017
    Адрес
    г. Тольятти
    Сообщений
    904
    Спасибо Благодарностей отдано 
    200
    Спасибо Благодарностей получено 
    144
    Поблагодарили
    68 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Видимо, чтобы сохранить возможность расширения ОЗУ до 48к и совместимость с CP/M. Ваш подход более универсальный. С РК всегда так сложно...
    Последний раз редактировалось Xrust; 01.12.2017 в 21:44.

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

    По умолчанию

    Цитата Сообщение от Vladimir_S
    barsik, А почему только 15Кб? А не с адреса 8400?
    Как же можно сделать столь большое ПЗУ?

    Я признаю только совместимые доработки. А на C000 у нас адресуется ВГ75, потому в РК86 сплошной кусок ПЗУ более 15 кб совместимо никак не сделать. И к тому же, раз речь о монтаже проводочками вторым этажом, то переделки должны быть предельно простыми.

    Конечно можно занять под ПЗУ и второе окно 8400...BFFF, но это не даст никаких преимуществ. И если уж требуется поставить много ПЗУ, то окно ПЗУ лучше наоборот сократить, с целью сделать его кратным и более пригодным для страничной коммутации. Окно ПЗУ в 8 кб (E000...FFFF) в общем-то даже выгоднее и с точки зрения расширения ОЗУ.

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

    А ПЗУ ограниченного размера, зато, даёт возможность удобно расширить ОЗУ до 56 кб, хотя и с использованием двухрежимной коммутации. Здесь же идёт речь лишь о случае когда в РК требуется иметь максимально большое сплошное ПЗУ, а не о какой-то иной несовместимой архитектуре.

    Xrust прав в том, что участок 8000...BFFF гораздо разумнее, так же как и в МИКРОШЕ, истратить на дополнительнок ОЗУ, а не ПЗУ. Окно 8400 (где в отличие от области E000, допустимо ОЗУ) пригодится при доработке РК86 до полной графики (на базе идей от freddy), а также для CP/M и т.п.

    Нескольно слов о том, что удобно прошивать в сплошное ПЗУ 15 кб. Понятно, что 2 кб из этого размера "открызает" базовый ROM-BIOS РК86. Вообще в ПЗУ в первую очередь хранят ROM-BIOS. Например, в ещё 1 кб можно разместить небольшой набор подпрограмм для поддержки оконного интерфейса РК86 имеющего альтернативный фонт (переключаемый PC0). Такой фонт даёт инверсию знакомест и нормальные рамки, что и позволяет открывать на экране инверсные окна. К сожалению неперекрывающиеся, как делают с цветными окнами (т.е с глубиной вложенности 1).

    Хотя конечно, никто не мешает добавить цвет и иметь многооконность. Я об этом не пишу, т.к не имел цвета и опыта его использования нет. Потому что бросить один проводок к ПЗУ фонта намного проще, чем сделать схему Толкалина из ж.Радиолюбитель 04.1992 или схему цвета из АПОГЕЯ. Да и программирование без цвета на порядок проще.

    Так вот, в 1 кб можно уместить простейшие оконные подпрограммы OPEN и CLOSE. По OPEN в подпрограмму передаются координата верхнего левого угла окна X,Y и размер окна dX,dY. Тогда эта процедура сливает старое содержимое окна в оконный буфер (вот для чего в графических системах надо дохрена ОЗУ). Затем рисует на экране белое окно с рамкой по краю окна и заголовком. К сожалению ROM-BIOS РК86 не оконный (что как раз наличие второй страницы ПЗУ в 8 кб позволяет исправить). А для оконного драйвера вывода при открытии окна и размер экрана вывода устанавливается в это "открытое" окно. Т.е, если ранее координата 0,0 была в левом верхнем углу экрана, то теперь координата 0,0 это правый верхний угол окна. Это к слову (о том как работает нормальный графический BIOS). В РК86 такого нет, да и при однооконности не особо и надо, тут отслеживание, чтобы вывод попадал в открытое окно а не мимо, возлагается на программиста.

    Закончив работу с окном, вызывается п/п-мма CLOSE, которая как бы закрывает окно, просто восстанавливая старое содержимое окна из буфера. Можно открыть 2 и более окна, но чтобы они не перекрывались. Понятно, что поддержка неперекрывающихся окон в инверсии проста и имеет малый объём, отчего легко может встраиваться в сами программы. Но наличие стандартных процедур в ПЗУ даёт единообразие и экономит объём кода. Вот иллюстрации

    Далее, в ПЗУ обычно хранят драйверы внешних устройств. Так, встроив в ПЗУ подпрограммы чтения, записи сектора и процедуру формат трека мы избавляемся от зависимости от конкретного железа. Тогда DOS (а к железу в нормальных системах лезет только DOS, прикладные программы никогда не лезут к железу на низком уровне) поддерживает все имеющиеся у разных пользователей носители, например, винчестер, дисковод, RAM-диск и различные флэш-накопители с микроконтроллерами. И соответственно все программы для этой DOS без всякого изменения кода будут работать на всех носителях независимо от их физической природы.

    В ПЗУ полезно иметь мелкие сервисные программы и драйвера. В частности, программу обслуживания прошивателя УФ-ПЗУ, программу обслуживания ROM-диска (ROM-Service), драйвер принтера, драйвер и программу обмена по проводной линии с IBM PC и т.п.

    А в самом простейшем случае, для РК86 без внешних носителей в такое ПЗУ 15 кб можно прошить бейсик и ассемблер, работающие уже непосредственно из старших адресов, а не с 0. Это увеличивает объём исходного текста могущего быть странслированным и максимальный размер бейсик программы (а размер бейсик программы написанной для бейсик-интерпретара с вкраплением ассемблера может быть большим, т.к операторы DATA сжирают много места).

    Учтите, что бейсик нельзя просто перетранслировать, указав иной адрес трансляции. Т.к в этом бейсике "уши растут" от бейсика Билла Гейтса из 1975, который активно использует RST-команды, отчего может работать только с 0. Поэтому для перемещения кода на другой адрес Вам придётся все вызовы RST переделать на CALL, отчего объём кода немного разбухнет на 50 байт (но всё равно, думаю, влезет в 8 кб, а если нет, то можно забить какие-то малонужные операторы).

    Какой-нибудь РК-Бейсик я собираюсь позднее попробовать перетранслировать на работу без RST, а также странслирую свой текстов редактор для РК86 и макроассемблер для прошивки в ПЗУ C400.
    Последний раз редактировалось barsik; 09.04.2018 в 11:44.

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

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

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

Похожие темы

  1. Ответов: 76
    Последнее: 22.08.2019, 21:33
  2. Маленькие поэтапные доработки РК86
    от barsik в разделе Радио-86РК
    Ответов: 18
    Последнее: 24.08.2017, 10:41
  3. РК86 с статическим ОЗУ
    от Vladimir_S в разделе Новодел
    Ответов: 1
    Последнее: 05.07.2012, 07:15
  4. Платы Радио РК86
    от Павел Рябцов в разделе Барахолка (архив)
    Ответов: 136
    Последнее: 20.01.2012, 14:38
  5. продам корпус рк86
    от oracleua в разделе Барахолка (архив)
    Ответов: 10
    Последнее: 29.01.2011, 00:51

Ваши права

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