Радио-86РК на SRAM 128K Alpha (2014) & Beta (2024)

Советский компьютер Радио-86РК (1986) и его клоны

Moderator: Shaos

User avatar
barsik
Doomed
Posts: 585
Joined: 19 Feb 2017 03:46
Location: Санкт-Петербург, Россия, третья планета от Солнца, галактика Млечный Путь

Post by barsik »

Похоже, что объект данной темы ("сабж") это единственный в мире клон РК86 в котором осуществлена доработка по существенному расширению ОЗУ. К сожалению, тема засорена сторонними обсуждениями, информативные по теме посты только в первой странице из семи.

К сожалению, в теме нет даже чёткого описания архитектуры (хотя бы словами, хотя принято приводить и графическое представление карты памяти). Прочитав тему, с трудом уяснил архитектуру, может и неправильно (по схеме, кстати, архитектуру не понять).

Для понимания того как устроена расширенная память доступно лишь одно предложение: "расширенная память 128К в SOIC, переключающаяся четвертинками через 2 младших бита нового порта #F000". Не сразу сообразил, - речь о четвертинке ОЗУ в 128К (т.е 32К) или о четвертинке адресного пространства в 64К (т.е 16К). Обычно описывая диспетчер памяти пишут, что "дополнительная память коммутируется в таком-то окне" (например, 0...7FFF или 4000...7FFF). Тогда из одной фразы всё ясно.

И лишь из того, что для управления памятью служат только два бита, сделал вывод, что используется так называемая полубанковая коммутация. Т.е вся память в 128К прокачивается в каком-то окне в 32 кб половинками банки (считая банкой 64К, в принципе 8 штук 565 РУ3 с размером в 16К тоже именуются банкой).

Про ПЗУ тоже нет кристальной ясности в описании. Из предложения "ПЗУ 8К, когда при включении управление передаётся на #F800, а не на #E000" - для знакомых со схемотехникой РК кое-что проясняется. Но незнакомый с базовой архитектурой РК вообще ничего не поймёт про ПЗУ из такого описания.

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

Ещё полезно было бы обоснование именно такой архитектуры в развитие РК86. Какова цель доработки? Понятно, что при любых доработках сто-процентная совместимость с базовым РК это аксиома. И желательно сохранить совместимость с единственной DOS для РК86 на базе РК-КНГМД, который адресуется по адресу F000.

Конечно, если предполагается последующая программная поддержка новой улучшающей архитектуры, то нет смысла обращать внимание на предыдущие доработки железа. Например RK-DOS и десяток программ (а именно, утилиты DOS, дисковый бейсик, текстов редактор, нортон и диск-доктор) не проблема перетранслировать под другие адреса КНГМД. Т.е совершенно одна ситуация, когда планируется мощная программная поддержка новой архитектуры, т.е выпуск основного набора системных программ, поддерживающих доработки и новую периферию и совсем другое, когда делается доработка нарушающая совместимость со старым ПО и ничего не предлагается взамен.

Разумеется любой вариант расширения ОЗУ полезен и может быть с пользой использован. Но основным недостатком РК86 является маленькое сплошное ОЗУ, что мешает применению DOS CP/M, которая отнимает ~10 кб памяти из 29-ти доступных, что делает её бессмысленной для базового РК (т.к половина программ РК имеет размер больший, чем 19 кб, что можно загрузить в ОЗУ пользуясь такой файловой системой). Возможность использовать CP/M резко повысило бы потребительные качества новой реплики РК86. Мало кого интересуют убогие игры от РК86, тогда как ради CP/M-программ энтузиасты специально изобретают уникальные собственные CP/M-машины.

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

Полубанковая идеология расширения ОЗУ не даёт CP/M (т.к даже если напрячься и вволю потрахавшись, переместить код CP/M в другую полубанку, то TPA в 32 кб для фирменных программ CP/M всё-равно мало). Для программ лишние 96 кб вообще не нужны. Сейчас имеет смысл писать только используя ЯВУ CP/M, а они не поддерживают многобанковость (потому и от CP/M 3.0 толку не намного больше, чем от 2.2, реальная польза только даты).

Потому, единственная польза которую можно придумать для доп.ОЗУ в такой архитектуре, это организация эл.диска в 96 кб, доступного подпрограммами F836 и F839 (что позволит без переделок прогонять DOS для ОРИОНА использующие эл.диск из запасного ОЗУ). У меня есть несколько DOS (при Z80 вдвое больше), которые могут работать и без наличия внешнего физического носителя, используя RAM-диск из излишнего ОЗУ. В ту же РК-ДОС, адаптируя её на ОРИОН я в 1994 встроил эл.диск (из излишних банок ОРИОНА), что позволяет использовать РК-ДОС совсем без дисковода. Также эл.диск существенно ускоряет копирование дискет при одном дисководе и ускоряет трансляцию.

На моём РК с 565 РУ5 сейчас сделано аналогично, - есть вторая полубанка из банки РУ5-тых. Больше смысла полубанковая коммутация имела бы при использовании 565 РУ7. Но РУ7-мые, т.к у них вектор регенерации не 7-ми битовый, а 9-ти битовый, в схеме РК работают с нарушением ТУ, т.е период регенерации превышает допустимое. Хотя было одно утверждение, что РУ7 с упехом работали в РК (но одно дело новые РУ7-мые, а другое 30-ти летней давности полудохлые с сильно утекающими накопительными емкостями).

Потому более правильно расширять ОЗУ на SIMM-30 на 256К или 1 мб. У них период регенерации вдвое выше. Эмулятор EMU поддерживает такую архитектуру с полубанковой коммутацией до 16 мб (могу поделиться соответствующим конфигом или можете сами его составить, если почитаете форум на эту тему на ZX-PK.ru). Но кроме этого у меня добавлено 8 кб из статического ОЗУ 6264 в окне A000...BFFF, чтобы было где работать DOS-ам и отладчикам.

Я реализовывал на своём РК много разных вариантов расширения ОЗУ (как совместимых, так и с полной сменой адресации портов). При этом у меня на плате РК обычно был смонтирован десяток доп.корпусов в три этажа. В итоге в 90-тые остановился на варианте с окном в 15К в области 8400...BFFF (это делалось и на 62256 и из РУ5-тых). Но это не лучший вариант, т.к порт 8000 всё-равно остаётся посередине памяти. Но самое главное, что пайка микросхем в три этажа вряд-ли может стать популярной.

Недавно кто-то придумал конструктивно более удобный и перспективный вариант расширения ОЗУ.
User avatar
alexcp
Senior
Posts: 139
Joined: 11 Jun 2012 07:30

Re: Радио-86РК на SRAM 128K Alpha

Post by alexcp »

Как видно из принципиальной схемы :egeek:, управление памятью в сабже выполняется путем записи байта по адресу 0xFxxx. Два младших бита записанного байта при этом запоминаются в IC33A (бит 0) и IC33B (бит 1) и выбирают одну из четырех 32кб страниц ОЗУ, которая занимает логические адреса с 0x0000 по 0x7FFF. Сделано весьма экономно с точки зрения аппаратных ресурсов, однако есть неудобство в том, что переключается все имеющееся ОЗУ. В частности, Монитор после сброса настраивает только нулевую страницу, и переключение на любую другую приводит Монитор в некоторое недоумение.

Возможны другие, более сложные, но и более гибкие подходы, см., например, прилагаемую классическую (20-летней давности) двухстраничную статью (на английском). Вместо 74LS170 сегодня есть 74LS670, так что можно попробовать в следующей инкарнации.
You do not have the required permissions to view the files attached to this post.
User avatar
barsik
Doomed
Posts: 585
Joined: 19 Feb 2017 03:46
Location: Санкт-Петербург, Россия, третья планета от Солнца, галактика Млечный Путь

Post by barsik »

alexcp wrote:есть неудобство в том, что переключается все имеющееся ОЗУ. В частности, Монитор после сброса настраивает только нулевую страницу, и переключение на любую другую приводит Монитор в некоторое недоумение.
Имеется ввиду, что по сбросу ROM-BIOS инициализирует рабочие ячейки, в частности ячейки 7600/7601 (экр.адрес курсора) и 7602/7603 (POSX и POSY).

Не вижу в этом проблемы. Рабочие ячейки ПЗУ при переключении полубанок остаются в полубанке 0 и там же остаётся экранный буфер. Из-за чего п/п-ммы F803, F809, F818 и F815 можно вызывать только при текущей полубанке 0. Лишь п/п-мму F81B можно вызывать из любой банки (т.к она не использует рабочих ячеек). Также сделано и в ОРИОНЕ. Там тоже программа не в банке 0 не может вызывать подпрограммы в ПЗУ.

Для программ написанных на ассемблере хватает 29 кб в полубанке 0. Нет необходимости перемещать часть кода в другие полубанки. Потому ОЗУ других полубанок имеет смысл использовать лишь для хранения данных. И проще и лучше всего в качестве RAM-диска. Для чего требуется лишь ввести в ПЗУ две подпрограммы - чтение и запись байта из/в любой полубанке. Причём как и в ОРИОНЕ их можно вызывать только из полубанки 0, т.к возврат из этих подпрограмм всегда производится именно в полубанку 0.

Некоторые считают, что полезно иметь некоммутируемый участок ОЗУ, аналогично области F000...F3FF в ОРИОНЕ. Но на самом деле это вовсе не требуется. Т.к в случае необходимости записав во все полубанки по одинаковым адресам один и тот же код, получается как бы участок некоммутируемого ОЗУ. Это может быть полезным, если используются прерывания. В ОРИОНЕ при работе кода не в той банке где находится обработчик прерываний, прерывания приходится запрещать во избежание улёта.

В прошлом году я уплющил ROM-BIOS РК86 выиграв за счёт более оптимального программирования более 170 ячеек. Это позволило ввести подпрограммы F836/F839, а также клавиатурные переходы (программные прерывания) по сочетанию клавиш. Но вообще-то для полноценного RAM-диска объёма памяти в 128 кб явно мало. Эл.диск в 96 кб даже не позволяет использовать CP/M-компилятор Паскаля, т.к он имеет объём ~150 кб.

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

Другой вариант получения RAM-диска большего размера это установка в РК86 в качестве ОЗУ SIMM-30 объёмом 1 мб (или даже 4 мб). Существует и статическое КМОП ОЗУ большого объёма, но они, похоже, все планарные с очень мелким шагом в 0.5 мм (в лучшем случае 0.75 мм), что не позволяет их применить в самодельном изделии.

Насчёт битов управляющих коммутацией ОЗУ. Можно было не вводить для этого дополнительный порт $F000, т.к в ППА клавиатуры при РК-матрице клавиш есть как раз два свободных бита PC1 и PC2.
User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Радио-86РК на SRAM 128K Alpha

Post by Shaos »

PC1 в этой схеме переключает шрифты и потом целый порт - это расширение на будущее :)
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
barsik
Doomed
Posts: 585
Joined: 19 Feb 2017 03:46
Location: Санкт-Петербург, Россия, третья планета от Солнца, галактика Млечный Путь

Post by barsik »

Shaos wrote:микросхема ВВ55 ROM-диска (и сам ROM-диск) убрана на внешнюю платку... и такой же разъём выведен на адрес #9000 для подключения подобных же платок расширения
Shaos wrote:введены дополнительные дешифраторы #C000 (разделяемый ресурс с ВГ75), #C800, #D000, #D800 - все эти чип-селекты... выходят наружу через 28-дырочный разъём
Shaos wrote:ввод с магнитофона и контроллер ЭЛТ в области #C000...#C7FF будут работать только в нулевой странице памяти (индикация светодиодом LED5), а во всех остальных страницах (1,2,3) вместо ввода с магнитофона на PC4 клавиатурной ВВ5 пойдёт вертикальная синхра с ВГ75 (чтобы программно ловить момент окончания кадра), а в области #C000...#C7FF будет распологаться внешняя плата, подключенная через 28-пиновый разъём
Вот такая получается карта памяти области портов:

8000...8FFF - ППА клавиатуры (PC1 выбор фонта, PC4 ввод с МГ в полубанке 0 и КСИ в других банках)
9000...9FFF - свободный чип-селект
A000...BFFF - свободный чип-селект

C000...C7FF - CRT ВГ75 в полубанке 0 и свободный чип-селект в других полубанках
C800...CFFF - свободный чип-селект
D000...D7FF - свободный чип-селект
D800...DFFF - свободный чип-селект

E000...EFFF - ПДП ВТ57
F000...F7FF - двухбитовый регистр вывода на 555 ТМ2, диспетчер ОЗУ
F800...FFFF - ROM-BIOS

Правильно понял? Не понял есть ли ПЗУ на весь участок в 8 кб в области E000...FFFF, т.к не разобрался, что с адресами A11 и A12 у ПЗУ с ROM-BIOS-ом. Схемы не по советскому ГОСТ-у понимать трудно.

Получается, что выкинули ППА пользователя D14 (что в стандарте по адресу $A000) и добавили выходной порт диспетчера памяти $F000. Последнее это очень неудачный ход, т.к во-первых, это разрушает совместимость с РК-КНГМД и РК-ДОС, во-вторых порты конфигурации всегда выгоднее реализовывать на ВВ55, так как тогда их можно читать.

В частности, именно так сделано в ИРИШЕ, ОКЕАНЕ, ОРИОН-ПРО и других машинах с диспетчером ОЗУ. А здесь повторена ошибка ОРИОНА - нет возможности узнать текущую конфигурацию. Потому я предпочёл управлять полубанковой коммутацией битами запасного ППА D14. Возможность читать порт конфигурации дала бы возможность вызывать подпрограммы ПЗУ из любой полубанки, т.е использовать дополнительное ОЗУ не только для данных, но и для исполняемого кода, и упрощает обработку прерываний.

В-третьих, разумнее всего вводить доп.порты именно в области F000...F7FF, например, с помощью 1533 ИД7 формируя здесь 8 чип-селектов с шагом в 100H. Т.к имея управляющий режимом и неотключаемый ППА в области F000, можно истратив всего один корпус 1533 КП11 отключать порты из области 8000...DFFF, заменяя их на доп.ОЗУ и создавая тем самым альтернативный режим со сплошным ОЗУ в 56К, не теряя при этом и совместиомсти с базовым РК.

А ROM-диск наиболее экономично было бы читать тем же ППА клавиатуры, как догадались сделать лишь в отечественной ретро ЭВМ "Ойрика" (это клон РК, но выполненный по схеме Специалиста, выпускаемый с 1989 в Прибалтике). Читать КСИ через ППА также не имеет особого смысла, т.к бордёр (который в РК как раз и есть КСИ) читается из регистра статуса ВГ75. Управлять фонтом при отсутствии цвета разумно с помощью атрибутов самого ВГ75, атрибуты для того и предназначены. Это даёт возможность в одном экране иметь более 128-ми разных символов (например, все латинские плюс КОИ-8 или КОИ-7 но с инверсией знакомест и настоящей псевдографикой для рамок).

Уже удалось запустить хотя бы один экземпляр платы?

PS. Недавно прочитал про Паскаль и Си и выяснил для себя, что сионисты HEX-адреса пишут так - 0xF809, пасквилянты и эпловоды так - $F809, синклеристы вот так - #F809, программисты на Intel-производных ассемблерах вот так - 0F809H, а те кто вообще ни на чём не программируют, пишут вот так - F809.
User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Радио-86РК на SRAM 128K Alpha

Post by Shaos »

barsik wrote:Получается, что выкинули ППА пользователя D14 (что в стандарте по адресу $A000)

Почему выкинули? Вынесли на внешнюю платку
barsik wrote:и добавили выходной порт диспетчера памяти $F000. Последнее это очень неудачный ход, т.к во-первых, это разрушает совместимость с РК-КНГМД и РК-ДОС, во-вторых порты конфигурации всегда выгоднее реализовывать на ВВ55, так как тогда их можно читать.
И потом F000 является портом переключения памяти только если туда писать
Если читать, то это часть ПЗУ E000...FFFF (вроде так)
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
barsik
Doomed
Posts: 585
Joined: 19 Feb 2017 03:46
Location: Санкт-Петербург, Россия, третья планета от Солнца, галактика Млечный Путь

Post by barsik »

Все обсуждения вариантов улучшения архитектуры РК в форуме ZX-PK.ru всегда заканчивались тем, что желательно получить сплошное ОЗУ в 60 кб, а не консервировать навсегда базовую концепцию 32-х килобайтной машины, добавив к ней лишь внутренний электронный диск. Таким образом очевидно, что усовершенствование архитектуры памяти в данной разработке неудачное.

Однако при желании, истратив очень небольшое количество проволоки, т.е простейшими мерами можно всё-же кое-что исправить на данной плате.

Во-первых, можно используя решение, что я когда-то предлагал для ОРИОНА, получить возможность узнавать текущую страницу ОЗУ за счёт расширения ПЗУ. Достаточно поставить вместо ПЗУ 2764 более ёмкое ПЗУ 27256 и соединить его адреса A13 и A14 с битами 555 ТМ2 управляющими номером текущей полубанки ОЗУ. Тем самым страницы ПЗУ будут переключаться синхронно со страницами ОЗУ.

Тогда в одну ячейку каждого 8-ми килобайтового участка ПЗУ, что читается в адресах E000...FFFF, а именно в ту ячейку, что в каждой банке читается из адреса FFFF, прошивается номер банки. Т.е в абсолютных адресах ПЗУ 1FFF, 3FFF, 5FFF и 7FFF прошиваются соответственно байты 0,1,2,3 и процессор в любой момент считав ячейку FFFF может узнать текущий номер банки. Расход деталей на это - два кусочка проволоки, причём и объём резидентного ПЗУ увеличивается в разы.

Это даёт возможность программам работать в любой банке, а при желании даже поиметь коммутируемую на прерываниях многозадачность. Причём для программы в банке 0 доступно всего 29 кб (остальное отнимает экран и рабочие ячейки ПЗУ), а для программ в банках 1,2,3 доступны все 32 кб.

Ещё одним ценным улучшением архитектуры стало бы "открытие ОЗУ" в окне A000...BFFF. Для этого по-крайней мере есть программы и пользы от всего лишь 8 кб в верхнем ОЗУ намного больше, чем от остальных 96 кб, что пригодны лишь для RAM-диска.

Включение ОЗУ в окне A000...BFFF возможно потому, что запасной ППА D14 не требуется ставить именно в адрес A000. Этот ППА используется только для прошивателя УФ-ПЗУ (кстати, все приличные прошиватели позволяют программно изменить адрес ППА) и для нежурнальных решений - для чтения ROM-диска подпрограммой в ROM-BIOS, который не проблема перетранслировать для любых адресов В/У.

Соответствующая коррекция на данной плате - это два диода, резистор и кусок проволоки, что выполняют объёдинение по схеме "монтажное-И" имеющегося чип-селекта ОЗУ и чип-селекта участка A000...BFFF. То же самое дало бы включение в разъём внешней платки с 6264 выбираемой в окне A000...BFFF. Но зачем так сложно, если кусок проволоки и два диода решают ту же задачу.

Замечу также, что в любой новодельной реплике РК86 очень желательна доработка для улучшения качества и размера фонта с 6*8 до 8*8 (это достигается заменой 155 ИЕ4 на 155 ИЕ5 и кварца с 16 МГЦ до 20 МГЦ). А также сделать простейшую доработку (расход деталей 1 шт. 155 ЛИ1), чтобы при основном режиме в 25 видимых строк не было межстрочных промежутков в 2 линии растра. Именнно это, возможно, отвратило авторов РК от введения инверсии знакомест (что поддерживает ВГ75).

Широкие возможности даёт включение в области F000...FFFF ОЗУ, что позволяет загружать любой ROM-BIOS. Читал когда-то, что один пользователь РК в начале 90-тых поставил в него 565 РУ7 и сделал ОЗУ в области F800, куда грузил ROM-BIOS из ПЗУ.

По схеме не понял зачем нужна 555 АП6. Вроде бы, я уяснил архитектуру этой новодельной платы. Если уже есть работающие образцы, могу предложить для данной платы ROM-BIOS, двухстраничный фонт (шрифт 8*8) и несколько DOS на базе RAM-диска из излишнего ОЗУ.
Last edited by barsik on 22 Nov 2018 14:44, edited 2 times in total.
User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Радио-86РК на SRAM 128K Alpha

Post by Shaos »

Ну игловые файлы доступны - берёте их и кромсаете как душе угодно :roll:
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
fifan
Devil
Posts: 909
Joined: 06 Oct 2006 03:17
Location: г.Лянтор,Сургутского р-на,ХМАО

Re: Радио-86РК на SRAM 128K Alpha

Post by fifan »

Уже покромсали и запустили в производство - https://vk.com/id18110958?w=wall18110958_522%2Fall
User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Радио-86РК на SRAM 128K Alpha

Post by Shaos »

fifan wrote:Уже покромсали и запустили в производство - https://vk.com/id18110958?w=wall18110958_522%2Fall
А чего он не взял поправленную версию то?

P.S. Наверное потому что исправленная версия НЕ на первой странице - вставил линк на первой
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
fifan
Devil
Posts: 909
Joined: 06 Oct 2006 03:17
Location: г.Лянтор,Сургутского р-на,ХМАО

Re: Радио-86РК на SRAM 128K Alpha

Post by fifan »

Он испугал, что стоимость платы будет большой. Потом сравним цены?
User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Радио-86РК на SRAM 128K Alpha

Post by Shaos »

Ну дык четыре слоя - в любом случае будет дорого :)
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
alexcp
Senior
Posts: 139
Joined: 11 Jun 2012 07:30

Re: Радио-86РК на SRAM 128K Alpha

Post by alexcp »

Сравниваем тут. Самые дешевые китайцы сделают партию из 5 штук долларов за 40, ещё столько же будет стоить доставка. Если заказывать больше плат, то цена растёт медленно: каждая дополнительная плата стоит около $1.5.
Shumadan
Fanat
Posts: 67
Joined: 10 Mar 2018 12:50

Re: Радио-86РК на SRAM 128K Alpha

Post by Shumadan »

память конечно много не бывает, но 128кб нафига Р86? Или просто - мы могём?
User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Радио-86РК на SRAM 128K Alpha

Post by Shaos »

Ну дык одним чипом всё равно...
Я тут за главного - если что шлите мыло на me собака shaos точка net