RUЭВМ
Вы хотите отреагировать на этот пост ? Создайте аккаунт всего в несколько кликов или войдите на форум.
Сентябрь 2020
ПнВтСрЧтПтСбВс
 123456
78910111213
14151617181920
21222324252627
282930    

Календарь Календарь

Последние темы
» Тема для вопросов, консультаций и т. д...
автор Atari1974 Вчера в 16:12

» ZX Microdrive
автор barsik Вчера в 02:44

» Флейм только по теме "Радио-86РК".
автор barsik Пн Сен 28 2020, 09:24

» Трансформатор электронный Taschibra 230/12В 60Вт для галогенных ламп. Перестал работать.
автор Viktor2312 Ср Сен 23 2020, 15:05

» Купил с али БП 12в 100w для питания LED лент подсветки. Проблема
автор Viktor2312 Вс Сен 20 2020, 18:07

» Жалобы/пожелания по работе форума
автор Viktor2312 Вс Сен 20 2020, 11:54

» Стабилизированный преобразователь напряжения.
автор Viktor2312 Пн Сен 14 2020, 23:12

» Простые доработки ZX-48К: RAM-монитор в ПЗУ и экран на E000
автор barsik Сб Сен 12 2020, 23:47

» Применение КР580 ВИ53 для генерации музыки
автор Viktor2312 Сб Сен 12 2020, 20:09

» STM32. Статьи, заметки, очерки, разное...
автор Viktor2312 Чт Сен 03 2020, 12:09

» STM32G0. Документация (Datasheet, разное).
автор Viktor2312 Чт Сен 03 2020, 11:52

» Новинки. Книги. Часть 1.
автор Viktor2312 Ср Сен 02 2020, 14:21

» STM32F4. Статьи, заметки, очерки, разное...
автор Viktor2312 Вт Сен 01 2020, 14:44

» Ленинград-0,-1,-2,-3. Статьи, заметки, очерки, разное...
автор barsik Вс Авг 30 2020, 08:32

» Ленинград-0
автор barsik Вс Авг 30 2020, 08:01

» STM32F4. Изучение.
автор Viktor2312 Пт Авг 28 2020, 00:07

» Орион-128: Полезные доработки ПЭВМ
автор barsik Чт Авг 27 2020, 11:21

» STM32H7. Статьи, заметки, очерки, разное...
автор Viktor2312 Вт Авг 25 2020, 10:43

» Радио-86РК: По страницам журнала "Радио" и не только...
автор barsik Вт Авг 25 2020, 01:28

» STM32L0. Документация (Datasheet, разное).
автор Viktor2312 Вс Авг 23 2020, 10:10

» STM32L0. Отладочные платы.
автор Viktor2312 Сб Авг 22 2020, 20:22

» STM32L0. Программное обеспечение, разное...
автор Viktor2312 Сб Авг 22 2020, 17:24

» STM32L0. Статьи, заметки, очерки, разное...
автор Viktor2312 Чт Авг 20 2020, 19:37

» STM32H7. Документация (Datasheet, разное).
автор Admin Чт Авг 20 2020, 13:33

» STM32F7. Документация (Datasheet, разное).
автор Admin Чт Авг 20 2020, 13:32

Самые активные пользователи за месяц
Viktor2312
Радио-86РК: Расширение ПЗУ Vote_l10Радио-86РК: Расширение ПЗУ Voting10Радио-86РК: Расширение ПЗУ Vote_r10 
barsik
Радио-86РК: Расширение ПЗУ Vote_l10Радио-86РК: Расширение ПЗУ Voting10Радио-86РК: Расширение ПЗУ Vote_r10 
Atari1974
Радио-86РК: Расширение ПЗУ Vote_l10Радио-86РК: Расширение ПЗУ Voting10Радио-86РК: Расширение ПЗУ Vote_r10 

Поиск
 
 

Результаты :
 


Rechercher Расширенный поиск


Радио-86РК: Расширение ПЗУ

Перейти вниз

Радио-86РК: Расширение ПЗУ Empty Радио-86РК: Расширение ПЗУ

Сообщение  barsik в Ср Ноя 22 2017, 23:41

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

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

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

Если РК-КНГМД не используется, то проще и удобнее всего поставить вторую РФ2 на адрес F000, как сделано в некоторых клонах, что хорошо тем, что возникает сплошной участок в 4 кб. Для этого можно поставить дешифратор (см.ж.Радио 02.1993), что даёт 4 чип селекта в области E000...FFFF. Тогда выборка E000 отдаётся ПДП, выборка E800 не используется, а выборки F000 и F800 подключаются к входам /CS двух ПЗУ РФ2. Можно использовать и более простой вариант без дешифратора.


Радио-86РК: Расширение ПЗУ PZUF000dlyaRK86.1546101965


Если же используется РК-КНГМД, то увы, для расширения ПЗУ остаётся только родное окно ПЗУ в области F800. В этом случае для расширения ПЗУ можно ввести две или более страниц ПЗУ в двух-килобайтовом окне F800...FFFF. Для этого проще всего напаять на имеющуюся РФ2 панельку, куда устанавливается вторая ПЗУ РФ2. Для выбора текущей страницы ПЗУ, если используется РК-матрица клавиш, то для переключения страниц можно использовать свободный бит ППА D20. Если же использована клавиатура MS7007, где нет свободных битов ППА, то для коммутации можно применить бит PB0 запасного ППА D14 (PC0 обычно тратят на выбор альтернативного фонта).

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


Радио-86РК: Расширение ПЗУ 2bankiRF2dlyaRK86.1546102937


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

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

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


Радио-86РК: Расширение ПЗУ PZUE000.1546092804


В вышепоказанном варианте за счёт использования большой ПЗУ на 32 кб организовано 4 коммутируемые портом F000 страницы ПЗУ. По сбросу, естественно, устанавливается страница 0. Установка страницы ПЗУ в окне 8 кб производится записью номера страницы (0...3) в порт F000. Естественно такого порта в базовом РК нет. В данной схеме он организуется с помощью разделения области E000...FFFF на две половинки - E000...EFFF, которая остаётся для выбора ПДП, и область F000...FFFF, которая читается как ПЗУ, а запись в эту область управляет страницей ПЗУ.

Кстати, ещё один интересный вариант получения строба для записи в регистр страниц ПЗУ - это использование 4-х ЛЛ1 (или одного 4-х входового ИЛИ, типа ЛЕ7). Которые объединяют /CS ППА клавиатуры, адреса CPU А0, А1 и сигнал /WR. На выходе формируется строб при записи в порт А клавиатуры. Сам РК в этот порт не пишет и запись в этот порт ППА не вредит, т.к порт А ППА клавиатуры всегда запрограммирован на ввод.

Теоретически при РК-матрице клавиатуры 8*8 для управления страницами ПЗУ можно использовать PC1 и PC2 порта клавиатуры. Однако это не очень правильный выбор, т.к тогда не будет совместимости с пользователем имеющим клавиатуру MS7007 (с матрицей 8*11), которому придётся для управления ПЗУ придумать какой-то иной порт.

Вариант со страничным ПЗУ в окне 8 кб, на мой взгляд, самый выгодный для расширения ПЗУ. Хотя если нужно, чтобы из ПЗУ работала программа объёмом более 8 кб, то можно применить схему получения 15-ти килобайт сплошного ПЗУ.

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

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

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

Радио-86РК: Расширение ПЗУ RasshireniePZUvRK86.1523267512

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

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

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

Спойлер:

Нескольно слов о том, что удобно прошивать в сплошное ПЗУ 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 и более окна, но чтобы они не перекрывались. Понятно, что поддержка неперекрывающихся окон в инверсии проста и имеет малый объём, отчего легко может встраиваться в сами программы. Но наличие стандартных процедур в ПЗУ даёт единообразие и экономит объём кода.
[/url]Вот иллюстрации.

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

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

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

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



Последний раз редактировалось: barsik (Пн Янв 06 2020, 15:05), всего редактировалось 1 раз(а)
barsik
barsik
Мастер++

Сообщения : 701
Дата регистрации : 2016-11-10
Откуда : С-Петербург

Вернуться к началу Перейти вниз

Радио-86РК: Расширение ПЗУ Empty ROM-BIOS РК86 с функциональными клавишами

Сообщение  barsik в Сб Дек 29 2018, 20:07

2
Это не новый пост, а лишь восстановленный после редактирования предыдущего.

После расширения ПЗУ в РК86 разумно сделать хоть какую-то его поддержку ROM-BIOS-ом. Т.к в противном случае, чтобы воспользоваться ПЗУ придётся с МГ-ленты грузить какую-то программку, которая предоставит Вам доступ к этому резидентному ПЗУ, что явно неудобно.

В предыдущем посте рассказано о возможных методах установки дополнительного ПЗУ в РК86. Из чего ясно, что в РК наиболее удобно ввести или ПЗУ 15 кб в адресах C400...FFFF или в окне в 8 кб по адресам E000...FFFF. Последний вариант более выгодный, т.к кратное окно позволяет организовать страницы (размером по 8 кб) и использовать ПЗУ бОльшего размера. Например, удобно применить ПЗУ 27256 с 4-мя страницами по 8 кб, что даёт 30 кб для резидентных программ.

ПЗУ стоящее в адресном пространстве имеет неоспоримые преимущество перед ROM-диском, т.е ПЗУ считываемым через интерфейс ППА D14, т.к программа может работать прямо из окна ПЗУ в адресном пространстве процессора не нуждаясь в перегрузке в ОЗУ (это экономит ОЗУ, что важно, например, для DOS или бездисководного ассемблера).

С другой стороны, при наличии неизвестного старым программам ОЗУ в области A000...BFFF, ROM-диск тоже удобен, например, для загрузки оттуда ОС. Т.к ROM-диски можно оперативно переставлять, имея несколько ROM-дисков. Базовое ПЗУ РК имеет рудиментарную поддержку ROM-диска в виде директивы R. Более удобно ROM-диск поддержан в ОРИОНЕ. Использованный там метод размещения файлов в виде сплошного связанного списка удобен для ПЗУ, и хорошо себя зарекомендовал.

Исходя из вышеизложенного я странслировал модифицированный ROM-BIOS РК86 (для клавиатуры с матрицей РК86, не MS7007). В него внесены следующие доработки:

Как всегда обеспечил совместимость. Причём в данном случае не только по стандартным и нестандартным внутренним точкам ПЗУ, а также и по 4-м внутренним точкам перехвата, которые используют эмуляторы EMU и EMU80 (что не нужно для реала, но на что впустую приходится тратить память).

Добавлена директивы K и H - подсчёт контрольной суммы блока и HEX-арифметика, подсчёт суммы и разности 16-ти ричных чисел

Удалена директива X (печать содержимого регистров). Для этого предназначен полноценный отладчик.

Удалена директива R (чтение блока ROM-диска). Это была неудобная директива, вместо этого теперь файл из ROM-диска грузится и стартует по нажатию клавиш СС+F5 (правила оформления ROM-диска см.ниже).

Директива G теперь не имеет второго параметра - стоп точки. Зато теперь введён возврат из запуска по G по RET, т.е теперь G работает по CALL, а не по JMP (как во всех компютерах в мире). И что важно, введена возможность передавать два параметра (второй и третий, они передаются в регистрах DE и BC, первый параметр в команде G это адрес запуска).

Звук выдается не только по DI/EI, но и по PC0 ППА клавиатуры (это сделано для тех у кого Z80 или HD64180).

Поддерживается расширение ОЗУ на 32 кб самым примитивным способом - цельно полубанковой коммутацией. Для чего введены две новые стандартные подпрограммы, аналогичные подпрограммам ОРИОНА, - подпрограммы для чтения/записи байта - F836/39. Работа этих п/п-мм идентична аналогичным п/п-мам ОРИОНА.

В данной версии регистр управления полу банками - бит PC1 в ППА РК-клавиатуры. При записи 1 в ППА по биту PC1 в окне 0...7FFF должна включаться вторая половина банки РУ5. Т.е это самый простой вариант дополнительного ОЗУ для тех у кого ОЗУ на РУ5. В данной версии есть доступ только к 32-м дополнительным килобайтам (а содержимое рег.A в этих подпрограммах не важно). Для интереса посмотрите, что делают эти подпрограммы. Несложно их изменить, если у Вас доп.ОЗУ 1 МБ, коммутируется в окне A000...BFFF.

По сбросу инициализируется и запасной ППА. Это важно, т.к при этом выходы его порта C программируются на вывод, что позволяет использовать этот ППА для управления режимами РК86. Тогда, используя свойство ППА, что по инициализации его выходы ставятся в  0, устанавливается стандартный режим, т.е - базовый фонт, режим монохром, банк ROM-диска 0, текущая страница ПЗУ E000...FFFF - тоже 0.

Введены, так называемые программные клавиатурные прерывания, подобно тому, как были клавиатурные прерывания на D000,D003,D006... в Специалисте (по нажатию НР+Fn) или в М3 ОРИОНА по нажатию УС+СС+симв.клавиша в ОРИОНЕ. Т.е программные переходы по нажатию на клавиатуре определённого сочетания клавиш на какой-то адрес, причём по команде CALL, а не JMP (потому правильное название клавиатурные прерывания, а не переходы). Если по этому адресу стоит процедура, сохраняющая регистры и выполняющая возврат по RET, то по RET происходит возврат в первоначальную программу в то же самое место из которого было вызвано клавиатурное прерывание.

Контроль на сочетание клавиш происходит при выполнении основных подпрограмм ПЗУ - F803, F809, F812 и F81B. Т.е клавиатурное прерывание срабатывает всегда, когда программа использует стандартные функции ввода/вывода.

Если в Специалисте клавиатурные прерывания были фиксированными (т.е по навсегда фиксированному адресу), а в ОРИОНЕ, наоборот, требовалась загрузка внешнего обработчика таких прерываний (что, как бы добавляло клавишу АЛЬТ=УС+СС и загружаемые функции), то в данном ПЗУ РК86 использованы оба способа.

В ОРИОНЕ, где тоже РК-клавиатура, используется сочетание клавиш УС+СС. В данном ПЗУ переходы вызываются по нажатию клавиш F1...F5, если заранее нажата и удерживается клавиша СС (что тоже самое, что НР или Shift). Это не сокращает  объём кода (но так нажимать проще), а возможным это стало потому, что символьные клавиши не используются, только F1...F5. В эмуляторах обычно роль клавиши СС играет клавиша Shift.

Есть две версии. В одной пользователь может, как изначально настроить адреса переходов на конкретные адреса ПЗУ (например E000), так и оперативно изменить адреса обработки всех пяти клавиатурных прерываний, т.к адреса переходов расположены в ОЗУ. Это удобно, например загрузка ОС может изменить работу клавиатурных прерываний. В альтернативной версии, адреса переходов оперативно не меняются (что прошито в ПЗУ в табличке на FFF6, туда и переход по CALL).

7614 - адрес куда происходит CALL по Shift+F1 (по умолчанию адрес из FFF6)
7616 - адрес куда происходит CALL по Shift+F2 (по умолчанию адрес из FFF8)
7618 - адрес куда происходит CALL по Shift+F3 (по умолчанию адрес из FFFA)
761A - адрес куда происходит CALL по Shift+F4 (по умолчанию адрес из FFFC)
761C - адрес куда происходит CALL по Shift+F5 (по умолчанию адрес из FFFE)

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

Клавиатурные прерывания также дают возможность ввода так называемых ключевых команд, по типу того как это было на Роботроне-1715. Там можно было задать в соответствие функциональной клавише определённой строки. Например, можно задать по нажатию <F2> выдачу на консоль команды DIR B:<ВК>. Т.е клавитурные прерывания позволяют программировать команды в DOS.

Как выше указано, по сбросу адреса переходов устанавливаются в соответствии с прошитой в ПЗУ табличкой, которую перед прошивкой может изменить каждый пользователь самостоятельно. Эта табличка имеет размер 2*5= 10 байт и расположена в самом конце ПЗУ по адресу FFF6.

В данной прошивке ПЗУ в табличке такие адреса:

Shift+F1 - E000
Shift+F2 - Pause
Shift+F3 - F86C (Warm Boot монитора)
Shift+F4 - F86C (Warm Boot монитора)
Shift+F5 - старт самого первого файла из ROM-диска

Т.е по нажатию Shift+F1 стартует RK-DOS (или что-то ещё, что находится по E000). По нажатию Shift+F2 происходит зацикливание до нажатия клавиши <ВК>, что удобно для останова для просмотра текста при его ролике, например по TYPE в DOS. Сочетание Shift+F3 я чуть позднее сделаю CLS, а Shift+F4 это очень полезное свойство - выход в монитор на WARM START из любой программы (экран не очищается).

Сочетание Shift+F5 предназначена для загрузки ОС с ROM-диска (удобно ОС из ROM-диска грузить в доп.ОЗУ, например, на A000). При этом в отличие от ORDOS ОРИОНА грузится не фиксированный объём кода в фиксированные места. Размер ОС задаётся в самом файле расположенном в ПЗУ по адресу 0, а адрес загрузки можно задать в коде ПЗУ (сейчас там 7000/A000).

Т.е адрес загрузки определяется не меткой ORDOS-файла в ROM-диске, а прошивкой данного ROM-BIOS, т.к адрес загрузки одновременно является признаком наличия ROM-диска (по типу того, как ORDOS определяла наличие ROM диска байтом C3 по адресу с оффсетом 7FD). Стартовый файл ROM-диска должен располагаться в ROM-диске с адреса 0 и быть в обычном формате ORDOS, т.е это код файла снабжённый ORDOS-заголовком в 16 байт. Никакого специального кода ОС в 800 байтов, как в ORDOS ОРИОНА нет. Это удобнее, т.к не ограничивает адрес и размер ОС.  Адрес загрузки (оффсет 8 ) должен совпадать с адресом прошитым в ROM-BIOS, а длина в ячейке с оффсетом 10 может быть любой. По нажатию Shift+F5 данный файл грузится и стартует. Формат всех остальных файлов в ROM-диске может быть любым и определяется уже самой загруженной ОС, хотя и нет особых поводов менять хорошо себя зарекомендовавший формат файлов квази-дисков ОРИОНА.

Позднее выложу микро-ОС (аналог ORDOS, но в 4 раза короче), позволяющую запускать файлы из ROM-диска и RAM-диска в 32 кб из верхнего ОЗУ РУ5-тых, а также Changer позволяющий загружать RAM-диск  с МГ-ленты или проводной линии. При установке одной 62256 в окно A000...BFFF, общий размер RAM-диска достигает 64 кб (при этом, естественно, и п/п-ммы F836/39 немного меняются). Эта микро-ОС не аналог ORDOS, т.к содержит всего 4 функции - считать/записать/удалить файл и считать каталог, причём в варианте для базового РК эти функции оверлейные, отчего микро-ОС сокращает доступное ОЗУ всего на 200 байт, а не на 2 кб.

Удобно иметь ПЗУ на E000 (всё-равно на E000 обычно стоит RK-DOS). Если же такого ПЗУ нет, то разумно иметь ROM-диск и ОЗУ на A000, куда могут грузиться системные программы из ROM-диска (отдадчик и DOS, в т.числе и RK-DOS перетранслированная на A000 и CP/M).

Так как все исполнительные адреса клавиатурных прерываний всё-же не в ПЗУ, а в ОЗУ (7614...761D), то в ходе работы любое клавиатурное прерывание можно изменить. Если же это не делать, то работают те адреса, что прошиты в ПЗУ.

А чтобы Вам более детально понять, что делает загрузчик ОС из ROM-диска привожу полный код этого загрузчика:

Спойлер:


ROMDOS: LD      A,90H
       LD      (PDU),A

       LD      DE,0A000H
       LD      HL,9
       CALL    RDROM
       CP      D
       JP      NZ,WARMST       ; НЕТ ROM-ДИСКА
       CALL    RDROM
       LD      C,A
       CALL    RDROM
       LD      B,A
       
       PUSH    HL
L30:   CALL    RDROM
       LD      (DE),A
       INC     DE
       LOOP    L30
       POP     HL
       JP      (HL)

RDROM: LD      (PDB),HL
       LD      A,(PDA)
       INC     HL
       RET


Таким образом, чтобы грузить Вашу ОС в другие адреса замените параметр в команде LD DE,0A000H на тот адрес? куда должна грузиться Ваша ОС.

Можно также посмотреть как устроены п/п-ммы чтения/записи байта из второй половины РУ5-тых. Видно, что здесь упрощённый доступ (т.е не к 1 мб на SIMMS-30, а только к 32 кб в верхних адресах РУ5-тых).

Спойлер:


RRAM:  LD      A,RAMBYT shl 1 + 1
       LD      (PU),A
       LD      C,(HL)
RAMRET: DEC     A
       LD      (PU),A
       RET

WRAM:  LD      A,H
       RLCA
       RET     C
       LD      A,RAMBYT shl 1 + 1
       LD      (PU),A
       LD      (HL),C
       JP      RAMRET

Вопросы и просьбы изменить что-то (например, автостарт ОС из ROM-диска или E000, как в ОРИОНЕ), помочь настроить код под иные адреса - пишите в личку. Кстати, как всегда, это не последняя версия ПЗУ, это будет меняться по мере доработки и моих потребностей (периодически смотрите дату упаковки RAR-архива).

Выложенная здесь версия странслирована под самый общий случай, т.е для случая когда и ППА D14 ещё стоит по базовому адресу A000 (и соответственно, ОЗУ на A000 нет), а полубанково-коммутируемое дополнительное ОЗУ самое минимальное - 32К, всего одна дополнительная полу-банка из верхней части РУ5-тых.

Если же у Вас запасной ППА переставлен на 8400, чтобы в области A000...BFFF поставить ОЗУ (любое, открытием верхней памяти РУ5-тых, или, что приятнее, - сделано из двух 62256, что даёт прокачку в окне 8 кб дополнительных 64 кб, коммутируемых битами запасного ППА по адресу 8400), то используйте версию для ППА D14 на 8400, что также включена в архив. Не перепутайте, т.к версия ПЗУ для D14 на 8400 не будет работать на базовом РК86, где нет дешифратора ИД7 на область 8000...9FFF. Т.к тогда обращения на 8400 будут попадать на 8000 (т.е не в D14, а в ППА клавиатуры на 8000), что приведёт к ужасному завису...

PS. Учтите, что для РК86 я встречал несколько универсальных игр, что контроллируют команду LD SP,76CF (или LD SP,36CF) по адресу F836, определяя по байту 76 или 36 размер ОЗУ и соответственно корректируя код игры. Правильнее было бы проконтроллировать старший байт регистра SP при запуске игры. В данном ПЗУ, т.к число входов увеличено (да и код начала совсем иной), на адресе F836 находится совсем другой код, потому эти игры вероятно будут улетать. Если обнаружите такие игры, пришлите мне, исправить их - дело нескольких минут.

В выложенный по ссылке архив вложен отладчик, странслированный на адрес E000, что позволяет установить ПЗУ с ним в панельку ROM-диска и выходить в него по Shift+F1. Это обычный отладчик, он не предназначен для входа в него по CALL и возврата из него по RET. Так что после прерывания программы по Shift+F1 с целью отладки возврата не будет. Чуть позднее я переделаю отладчик, чтобы он работал в более удобной мнемонике (Z80) и введу вход/выход в отладчик по CALL.

Обращаю внимание, что эмуляторы EMU и EMU80 содержат ошибку. С моими модификациями мониторов РК86 с большим курсором в этих эмуляторах неверно отображается курсор. На реале всё нормально. Потому в архиве есть версии странслированные как для большого курсора, так и для обычного курсора в виде чёрточки, что нормально отображаются в эмуляторах.

Чтобы использовать эти файлы ПЗУ в эмуляторе переименуйте файл ПЗУ в то имя, что указано в конфиг-файле конкретного эмулятора. Или отредактируйте конфиг файл, указав там имя данного файла в качестве файла ПЗУ, вместо ранее указанного.

Скачать ПЗУ F800
barsik
barsik
Мастер++

Сообщения : 701
Дата регистрации : 2016-11-10
Откуда : С-Петербург

Вернуться к началу Перейти вниз

Радио-86РК: Расширение ПЗУ Empty как устранить конфликт большого ПЗУ на E000 и РК-КНГМД

Сообщение  barsik в Вс Янв 05 2020, 23:51

3
Теоретически архитектуру РК86 можно доработать множеством способов. Но сейчас уже нет никакого смысла в изменении самой платформы, т.к ясно, что для этого нет и не придвидится программ. И всё-же некоторые несложные дополнения к базовой архитектуре, которые служат лишь цели улучшения сервиса и удобства пользования и делаются вручную на базовой плате, имеют смысл.

В частности дополнительное ПЗУ, если в нём помещён не ROM-BIOS, а только резидентные программы, не меняет архитектуру для программ, а лишь освобождает пользователя от длительной загрузки с МГ-ленты. Например, очень удобно иметь в области E000...EFFF или 9000...9FFF отладчик, а в области F000...F7FF загрузчики  с дискеты и из ROM-диска. А небольшое дополнительное ОЗУ в 8 или 12 кб, что используется только для целей DOS и системы, также не меняет ничего для прикладных программ.

Под ПЗУ полезно занять всю область в 8 кб выделенную дешифратором D11 для ПЗУ, что достигается заменой панельки на 28-ми ногую. Но так просто расширить ПЗУ до 8 кб можно только в машине, где не используется РК-КНГМД с RK-DOS от Е.Седова (см. журнал Радио 01.1993). Потому, что для этой ДОС в плату РК дополнительно монтируется дешифратор ИД7 и область F000...F7FF занимается под обращение в РК-КНГМД. А это, естественно, конфликтует с большим ПЗУ 2764 в окне E000...FFFF.

Ещё надо учесть, что при добавлении окна ОЗУ занимающего адрес запасного ППА D14 на A000 нужно монтировать второй дешифратор (например разделяя им какой либо участок в 8 кб на фрагменты, чтобы поиметь хоть один доп.чип-селект, чтобы использовать его для перемещённого ППА D14). Т.о второй дешифратор нужен чтобы получить новый чип-селект для ППА переносимого с адреса A000.

А добавлять ОЗУ выше 8000 необходимо для CP/M или любой другой DOS с размером более 4 кб. Такая DOS может располагаться только вне основного ОЗУ, т.е в ОЗУ или ПЗУ выше 8000, т.к если CP/M при работе размещается ниже 7600, то из-за большого размера самой DOS в ней можно будет запускать только программы маленького размера, что лишает такую DOS всякого смысла.

Таким образом возникает необходимость иметь два дешифратора - один для РК-КНГМД, второй, чтобы поиметь новый чип-селект для ППА D14 при совместимом расширении ОЗУ в окне A000...BFFF. Учитывая, что убрав дешифратор введённый Е.Седовым на области E000, мы тем самым разрешаем расширение окна ПЗУ до 8 кб, то становится совершенно ясно, что логично иметь лишь один общий (для ППА D20, РК-КНГМД, ППА D14) дополнительный дешифратор в области 8000 (вместо двух), формируя с его помощью чип-селекты как для нового адреса ППА D14, так и для РК-КНГМД. Адрес РК-КНГМД не принципиален и его можно менять, т.к его используют только две программы - форматёр дискеты и сама RK-DOS, заменить в которых адрес не проблема. Адрес ППА D14 также не принципиален, т.к используется только в директиве U монитора и в программе прошивателя УФ-ПЗУ.

Перенеся адрес РК-КНГМД из области F000 мы решаем сразу две задачи - экономим один дешифратор ИД7 и устраняем фатальное препятствие для расширения ПЗУ за счёт монтажа более много_выводной панельки для него. В итоге, если удовлетвориться окном доп.ОЗУ всего в 8 кб (используя для него лишь базовую область адресации ППА D14 на A000), то для расширения ОЗУ до 8 кб и ПЗУ до 8 кб, вообще не тратятся доп.детали (учитывая наличие уже ранее установленного для RK-DOS дешифратора E000, теперь он просто переносится на 8000).

Учитывая, что есть программы, которые используют команды IN/OUT, для портов требуется иметь участок адресации не менее, чем в 1 кб, разумно ввести 4 доп.порта в области 8000...8FFF с шагом в 1 кб. Например при обращении в порт 8000+3 используют команду OUT (83),A, отчего реальное обращение происходит в адрес 8383. Потому отдавать портам для БИС менее, чем 1 кб в РК нельзя.

Тогда, например можно так: на 8000 - клавиатура, на 8400 - ППА D14, на 8800 - РК-КНГМД и адрес 8C00 остаётся для винчестера или контроллера microSD. А область 9000...BFFF размером в 12 кб удобно остаётся для доп.ОЗУ или доп.ПЗУ. Доп.ОЗУ выше $8000 при ОЗУ 565 РУ5 делается просто логикой, а если ОЗУ на двух банках 565 РУ3, то доп.ОЗУ выше $8000 удобно выполнить на статике 6264 или 62256.

При выделении для адресации РК-КНГМД участка 8400...87FF, т.е размером всего в 1 кб, нельзя просто перетранслировать оригинал RK-DOS под другой адрес порта. Т.к из-за команд IN/OUT в регистр по адресу PORT+4 (в оригинале F004) оригинальная RK-DOS обращается командами IN A,(0F4H), что из-за особенностей КР580 приводит к обращению в адреса F4F4, т.е уже за пределы одного килобайта. Потому с новой адресацией РК-КНГМД должна использоваться переделанная версия RK-DOS в которой команды IN/OUT заменены на LD. Например, версия RK-DOS, что приведена здесь, а лучше вот здесь.

http://ipic.su/img/img7/fs/MAP_RAM_9000_ROM_E000.1578315665.png

После расширения ПЗУ до 8 кб по сбросу компьютер стартует с кода ПЗУ E000, а не с адреса F800, что при ПЗУ на РФ2. Т.е если в 2764 прошить стандартное ПЗУ F800 (в старшую четверть), то надо обеспечить, чтобы первой командой в ПЗУ (которая при сбросе читается с адреса 0), т.е по адресу E000 стоял JMP F800.

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

Представленное выше расширение является самым оптимальным из не меняющих платформу. Для программ, расширение ПЗУ до 8 кб без разницы. РК-программы волнует только, чтобы клавиатура была на 8000, ВГ75 - на C000, ВТ57 - на E000 (только запись), чтобы на F800 было ПЗУ и адрес экрана был запрограммирован на 76D0. Если это выполнено, то совместимость остаётся.

А расширение ОЗУ на 12 (или на 8 ) кб в окне 9000...BFFF (или A000...BFFF) в основном необходимо для CP/M. Для РК-ДОС достаточно оставить входной JMP на E001 и расширенного ПЗУ и для неё после смены адреса РК-КНГМД теперь можно истратить аж 6 кб ПЗУ (E000...F7FF), что на 2 кб больше, чем ранее, да и дешевле (т.к одно ПЗУ 2764 или 27256 стоит дешевле, чем три штуки 573 РФ2). Т.о расширив ПЗУ до 8 кб мы имеем возможность поиметь RK-DOS улучшенного качества.

А в случае использования CP/M (что размещается и работает в доп.ОЗУ выше 8000) в добавленных 6 кб ПЗУ (E000...F7FF) удобно разместить CP/M-BIOS (или 2 кб загрузчик DOS с дискеты и отладчик в 4 кб).

Что касается размера окна доп.ОЗУ вводимого выше 8000. Если это доп.ОЗУ некоммутируемое, т.е нестраничное, то выгоднее его размер в 12 кб (9000...BFFF). Но если это доп.ОЗУ сделано страничным, т.е в этом окне прокачивается огромное дополнительное ОЗУ, то размер этого окна доп.ОЗУ должен быть кратным двойке, т.е иметь размер всего в 8 кб, т.е занимать лишь область A000...BFFF. При этом участок 9000...9FFF удобно отдать под ПЗУ с отладчиком (т.к отладчик работающий из адресов выше 8000, позволяет отлаживать программы в любых адресах основного ОЗУ ниже 8000).
barsik
barsik
Мастер++

Сообщения : 701
Дата регистрации : 2016-11-10
Откуда : С-Петербург

Вернуться к началу Перейти вниз

Радио-86РК: Расширение ПЗУ Empty две страницы ПЗУ на двух РФ2 в окне F800 без расхода ППА D14

Сообщение  barsik в Вт Янв 28 2020, 13:21

4
Каждый из методов расширения ПЗУ имеет некоторые недостатки. Например, расширение ПЗУ в окне E000 размером 8 кб или ПЗУ 4 кб в области F000...FFFF конфликтует с РК-КНГМД включаемым в той же области E000. А установка двух или более страниц ПЗУ в маленьком окне F800...FFFF требует наличия сигналов управления переключающих страницы. Эти сигналы можно формировать отдельной схемой, например брать с доп.порта организованного на 1533ТМ9 или же использовать для этого биты запасного ППА D14, причём в последнем случае надо решать задачу, чтобы до запрограммирования режима ППА D14 и сразу после этого выбиралась нулевая страница ПЗУ.

До запрограммирования ППА у неё на всех выходах Z-состояние (что без резисторов привязки входами ПЗУ читается как уровень единицы). А после запрограммирования порта на вывод, на всех его выводах оказывается ноль. Эта проблема легко решается путём подключения к входам ПЗУ куда идёт управление от ППА D14 резистора 150 Ом на землю. Когда выходы ППА в Z-состоянии резистор утягивает адресные входы ПЗУ на землю обеспечивая выбор страницы 0. После запрограммирования данного порта ППА D14 на вывод, на его ножках возникают уровни 0, т.е выбор страницы ПЗУ 0 сохраняется.

Если страниц ПЗУ немного, например, всего две (две включённые в параллель РФ2), то ставить доп.регистры (что требует не только организации их сброса, но и узел для формирования сигналов записи в них) или же тратить на коммутацию ПЗУ запасной ППА D14 (которому есть более полезное применение в виде ROM-диска, точнее ROM-картриджа, т.к в РК86 нет ORDOS и называть это диском неправильно) - не оптимальные решения.

Вместе с тем, если посмотреть трезвым взглядом на использование клавиатурного ППА D20, то обнаружится, что два бита ППА клавиатуры, а именно PC1 и PC2 всегда запрограммированные на вывод не используются. Потому у всех изобретателей доработок РК86 давно тянутся их грязные ручонки к этим битам ППА с целью нагрузить их какой-нибудь полезной работой. Например, неплохо использовать их для выдачи трёхголосной программной классической музыки или же для одноголосной музыки, но зато с 8-ю уровнями громкости (используя и PC0 как третий канал или вес). Но одно дело придумать бесполезную железяку, а совершенно другое - поддержать это "изобрЕтение" программно.

Если использовать PC1 и PC2 для переключения страниц ПЗУ, то возникает проблема из-за того, что и базовое ПЗУ постоянно пишет в PC1 и PC2 нули и программы пользователя, что перенастраивают режим ППА также выводят нули на этих выводах. Т.о на этих выводах возникают единицы до установки режима ППА и нули после этого. Если учесть, что это всегда одинаковые сигналы, т.е или 11 или 00, то можно из двух этих выводов формировать один сигнал - номер страницы ПЗУ. При этом отпадает необходимость привязки на 0 (чтобы при выходах ППА в Z-состоянии была включена страница ПЗУ 0), хотя всё-равно желательна привязка на +5В, т.к нехорошо иметь Z-состояние на TTL-входах 1533ЛП5.

Есть такой странный тип TTL-вентиля под названием 1533 ЛП5 (научно называется исключающее-ИЛИ). Он как раз даёт на выходе 0, когда оба входных сигнала равны и даёт единицу, когда на одном из входов ноль, а на другом единица. Т.к в имеющихся программах уровни сигналов на PC1 и PC2 всегда равны, то обеспечивается включение базового ПЗУ РФ2 всегда в имеющихся программах. Но если программно (побитовой командой или даже байтом) вывести в PC1 (или в PC2) единицу, то включится альтернативная страница ПЗУ F800.

Таким образом не затрачивая запасное ППА D14 и не нагружая шину получаются две страницы ПЗУ и совместимость с имеющимися программами не нарушается. Но это возможно только переделав ПЗУ F800, т.к без модификации ПЗУ F800 при каждом вызове F81B, F812, F803 базовое ПЗУ РК86 от авторов РК принудительно устанавливает страницу ПЗУ 0 (т.к зачем-то кидает на порт C ППА клавиатуры байт 0).


Радио-86РК: Расширение ПЗУ 4KupravlyaemyeD20.1580204839
barsik
barsik
Мастер++

Сообщения : 701
Дата регистрации : 2016-11-10
Откуда : С-Петербург

Вернуться к началу Перейти вниз

Радио-86РК: Расширение ПЗУ Empty ROM-BIOS РК86 работающий в ОЗУ

Сообщение  barsik в Пн Фев 24 2020, 19:28

5
При отладке ROM-BIOS и для других задач удобно, чтобы ROM-BIOS работал не из ПЗУ, а из ОЗУ. Наподобие того, как делается во многих IBM PC, где при процедуре инициализации содержимое ПЗУ копируется в ОЗУ и оттуда работает. Это обычно делается из-за того, что микросхемы ОЗУ намного скоростнее, чем микросхемы ПЗУ.

В РК86 и Специалисте тоже можно поиметь псевдо-ПЗУ, если применить теневое стартовое ПЗУ с адреса 0 и "открыть" ОЗУ на месте ПЗУ, т.е в случае РК, - в адресах F800...FFFF. Тогда по сбросу начинает исполняться программа в ПЗУ с 0, которая выполняет загрузку в область F800 содержимого ROM-BIOS и по окончании её отключает ПЗУ с 0, восстанавливая в области 0...7FFF ОЗУ.

В ОРИОНЕ-128 с процессором КР580 так не сделать, т.к там применяются команды OUT F8, OUT F9, OUT FA, которые портят (под-ПЗУ-шечное) ОЗУ по адресам F8F8, F9F9 и FAFA из-за свойства КР580 (что неприятно отличает КР580 от Z80). Из-за чего нужна отдельная схема для защиты "под-ПЗУ-шечного" ОЗУ от записи, что резко усложняет эту доработку.

На Специалисте с Z80 в 1990 году у меня использовалось теневое ПЗУ 0...7FFF и после сброса ROM-BIOS копировался из этого ПЗУ на адрес C000 в ОЗУ (ОЗУ было 62 кб до F7FF). Причём никакой защиты от записи ОЗУ C000...F7FF не было, но это не вызывало никаких проблем, т.к программы Специалиста в ПЗУ не пишут, не повреждают тем самым ОЗУ в этой области. Это было удобно для отладки версий ПЗУ и для работы CP/M.

В РК86 также можно поиметь псевдо-ПЗУ в виде ОЗУ. Это удобно для отладки версий ПЗУ, а также можно динамически загружать в эту область директивы монитора из ROM-диска, что снимает всякие ограничения по объёму при улучшении ROM-BIOS.

Маленькое окно в 2 кб неудобно. К сожалению, 8 кб ОЗУ в адресах E000...FFFF мы сделать не можем, это можно сделать только в виде ПЗУ, т.к в ПДП по адресам E000...E3FF производится запись. Т.о область E000...E7FF непригодна для ОЗУ. А сокращённое окно в 6 кб E800...FFFF - это некратное окно, непригодное для страничности. Потому волей-неволей приходим к идее организации окна ОЗУ в окне F000...FFFF размером в 4 кб. Для ROM-BIOS этого достаточно. Кстати, ПЗУ 4 кб с F000 сделано в Микроше и ещё в каких-то других развитых РК-подобных.

ОЗУ 4 кб с адреса F000 легко организовать при использовании на плате РК ОЗУ 565 РУ5 с объёмом в 64 кб, в котором в базовой архитектуре впустую пропадают 32 кб из 64. Потому при РУ5 "открыть ОЗУ" в области F000...FFFF несложно (ценой в 1 корпус 155-той серии). ПЗУ РФ2 стоящее на плате будет выполнять роль "теневого ПЗУ с 0".

Для выключения этого теневого ПЗУ годится тот же триггер 155 ТМ2, что в базовой схеме формирует сигнал НП (Начальный Пуск), которым это же ПЗУ принудительно включается с адреса 0. Только теперь этот триггер будет формировать не сигнал НП, а сигнал ТП (акроним от слов "Теневое ПЗУ") и должен опрокидываться не по единице на адресе А15, а как-то иначе и переключаться не автоматически, а специальной командой микропроцессора КР580.

Дешевле всего для опрокидывания этого триггера ТП использовать имеющиеся чип-селекты, а именно чип-селект запасного ППА D14, что в базовой схеме стоит на A000 (хотя при доработках его обычно переносят на иное место, чтобы освободить окно A000...BFFF для других целей). Тогда "теневое ПЗУ" 573 РФ2 будет выключаться по команде записи в ППА D14, точнее при задании режима его работы.

В области F000...FFFF ОЗУ (из 565 РУ5) должно быть всегда, т.е и при включённом теневом ПЗУ. Тогда программа инициализации в теневом ПЗУ с 0 копирует код ROM-BIOS в область F000 и передаёт ему управление. Код ROM-BIOS первым делом задаёт режим работы запасного ППА D14 и при этом автоматически отключается и теневое ПЗУ РФ2 и вместо него возникает область стандартного ОЗУ 0...7FFF размером в 32 кб.

Чтобы загрузить ROM-BIOS в ~4 кб и теневое ПЗУ должно иметь размер в 4 кб, т.е должно состоять из двух микросхем 573 РФ2 или одной микросхемы 2732 (у которой корпус тот же DIP-24, но её ёмкость вдвое больше - 4 кб). Можно иметь теневое ПЗУ всего в 2 кб, хранить там только загрузчик, а код ROM-BIOS грузить с его помощью на F000 из ROM-диска. Это позволит при старте выбрать тип ПЗУ, например, ПЗУ совместимое с Микрошей, чтобы использовать часть программ Микроши или версии ПЗУ для разных матриц клавиатуры.

Такая доработка достаточно проста - всего пара ИМС 155-той серии вторым этажом, но даёт массу удобств. Например удобно проверять и отлаживать версии ПЗУ ROM-BIOS (как размером в 2 кб, так и размером в 4 кб). Кроме того в объём 4 кб влезет не только ROM-BIOS, но и резидентная DOS.

Эта резидентная DOS из-за малого объёма вынужденно будет простой, даже примитивной, хотя и достаточной для удобного хранения и запуска программ. Что-то вроде Хамелеон-DOS, которая имеет рекордный размер для дискетных DOS (объём кода всего 2 кб). Благодаря общему ПЗУ в качестве CCP DOS будет использоваться командный процессор монитора (что экономит 0.5 кб кода DOS). Если использовать часть объёма в ПЗУ F800, то для DOS будет доступен объём в 2.5 кб. В качестве привода резидентная DOS может использовать дисковод, винчестер, RAM-диск и флэш-диск 2 Гб работающий через контроллер для microSD (но из-за нехватки места лишь одно из вышеперечисленных устройств).

Применять какие-либо меры по защите области ОЗУ F000...FFFF от записи не нужно, т.к РК-программы туда вообще не пишут. Хотя в случае улёта отлаживаемой программы это ОЗУ может разрушаться и потребуется нажимать конопку СБРОС. Если же в окне F000...FFFF включить статическое ОЗУ 6264 или даже 62256, то можно поиметь 2 или 8 страниц "псевдо ПЗУ" в этом окне ПЗУ.

Естественно, эта идея не нова, т.к её полезность очевидна любому здравомыслящему. Я встречал в Интернете даже не одно, а несколько сообщений о том, что разные люди делали в своём РК86 ОЗУ на месте ПЗУ. Для разработчика ПЗУ или отладки доп.железа это большое удобство.
barsik
barsik
Мастер++

Сообщения : 701
Дата регистрации : 2016-11-10
Откуда : С-Петербург

Вернуться к началу Перейти вниз

Радио-86РК: Расширение ПЗУ Empty Re: Радио-86РК: Расширение ПЗУ

Сообщение  Спонсируемый контент

6

Спонсируемый контент


Вернуться к началу Перейти вниз

Вернуться к началу


 
Права доступа к этому форуму:
Вы не можете отвечать на сообщения