nedoPC.org

Electronics hobbyists community established in 2002
Atom Feed | View unanswered posts | View active topics It is currently 28 Mar 2024 02:47



This topic is locked, you cannot edit posts or make further replies.  [ 58 posts ]  Go to page Previous  1, 2, 3, 4  Next
Модель PDP-11 с диском IDE: К1801ВМ1, К1801ВП-XX, серия 588 
Author Message
Doomed

Joined: 25 Aug 2009 07:02
Posts: 459
Location: Москва
При составлении принципиальной схемы важно не забывать, что для 1801ВМ1 нужно все асинхронные входные сигналы привязывать к его такту, к любому перепаду CLC. Также привязывается к такту сигнал /RPLY, кроме того, между D-триггером привязки и линией RPLY микросхемы 1801ВМ1 необходимо включить резистор, потому что у 1801ВМ1 эта линия двунаправленная, он по ней отвечает сигналом /RPLY сам себе при обращении к своим внутренним регистрам или к регистрам, адресуемым линиями SEL1 и SEL2.
Кроме 1801ВМ1 и 1801ВП1-030 потребуется: генератор на 9216 кГц, делитель на 2, D-триггер привязки /RPLY, D-триггеры привязки асинхронных сигналов /ACLO, /IRQ1, /IRQ2, /IRQ3, /VIRQ, рассыпуха для диспетчера обращения к ОЗУ-УВВ-ПЗУ, что-то для формирователя /DCLO - /ACLO, еще что-то для построения регистра начального пуска, а также ПЗУ, буфера для ОЗУ, ОЗУ.

Вот эта ПЗУ, которая садится прямо на общую шину. С ультрафиолетовым стиранием и крайне малым заявленным числом перезаписей, всего 10. Ничто по современным меркам. Штука, уже практически несуществующая. Но респект Ангстрему, что она вообще была когда-то сделана и слава Аллаху, что она мне однажды попалась.


Attachments:
pzu.jpg
pzu.jpg [ 47.85 KiB | Viewed 11379 times ]
25 May 2018 08:55
Profile
Doomed

Joined: 25 Aug 2009 07:02
Posts: 459
Location: Москва
1801ВП1-030 формирует два сигнала управления выходным регистр-буфером ОЗУ, строб и разрешение выхода. Сигналы ничего особенного из себя не представляют, строб в положительной логике и /OE в отрицательной. Любой 373/ИР22 или аналог со сгруппированными по сторонам входами-выходами подойдет без всякого дополнительного сопряжения. Но эти ИРки уже приелись во всяких других поделках класса Z80 или подобных, а 1801ВП1-030 на разных схемах всякий раз управляет не двумя 8-разрядными буферами, а одним сразу 16-разрядным, выполненном на многорежимной микросхеме 1801ВП1-034, настроенной на вариант 16-разрядного буфера. И как назло, эта микросхема у меня имеется в наличии. Долго размышлял, каким способом организовать 16-разрядный лэтч, 2-мя непримечательными 8-битными или по-другому, остановился на варианте 1801ВП1-034. Во-первых, как дань уважения Ангстрему, во-вторых, как вариант исполнения буфера, который вряд ли где придется так к месту, как здесь, ну и для разнообразия, конечно.
Вот он этот буфер.


Attachments:
034.jpg
034.jpg [ 62.71 KiB | Viewed 11376 times ]
25 May 2018 09:15
Profile
Doomed

Joined: 25 Aug 2009 07:02
Posts: 459
Location: Москва
Карту памяти сделал таким образом, что ОЗУ в режиме Программа уходит за стандартный рубеж 28 к слов, область 160000 .. 172776 при этом отводится под ОЗУ, в этом заключается отличие и изюминка.
В остальном карта получилась такой, как сделано в ДВК, это неудивительно, картой управляет 1801ВП1-030.

Программа
000000 .. 172776 ОЗУ (почти 31 к слов)

Пульт
000000 .. 157776 ОЗУ (28 к слов)
160000 .. 163776 ПЗУ ODT (1 к слов)
164000 .. 172776 ПЗУ с утилитами/тестами или ОЗУ (почти 2 к слов)

Верхняя область, одинаковая для обоих режимов
173000 .. 173776 ПЗУ загрузчика (256 слов)
174000 .. 177576 Регистры УВВ (960 слов)
177600 .. 177676 Служебное ОЗУ (32 слова)
177700 .. 177776 Регистры для нужд процессора (32 слова)

Кстати, в упомянутой выше книжке Микропроцессоры, справочное пособие для разработчиков судовой РЭА далее на стр. 146 рассказывается (правда, не без вводящих в заблуждение опечаток насчет разрядов 2 и 3 SEL1), что ПЗУ, открытому в диапазоне 160000 .. 163776 соответствует режим "Останов", а в диапазоне 160000 .. 172776 - режим "Расширенная арифметика". Сопоставляя эти диапазоны с состоянием битов 2 и 3 регистра SEL1, можно сделать предположение, что бит 3 называется "подключение ПЗУ Расширенной арифметики", а бит 2 называется "подключение ПЗУ Останов". Вроде бы логика есть, но странная, 1801ВМ1 при возникновении исключительной ситуации (и HALT в том числе) подключает ПЗУ Расширенной арифметики, а 1801ВП1-030 при включении питания (по сигналу /DCLO) подключает ПЗУ Останов. Кому верить, на что опираться?.. Техописания микросхем не найти, только собственные эксперименты и свое понимание.


25 May 2018 15:54
Profile
Doomed

Joined: 25 Aug 2009 07:02
Posts: 459
Location: Москва
У некоммерческой бесплатной версии Eagle ограничение на размер платы 8x10 см. Размерчик подходящий, для мелких поделок. Эта поделка тоже мелкая, не хочется выходить за малый формат. Целиком процессор с памятью на этой площади не помещаются никак, поэтому решил сделать этажерочный вариант. 4 платы 8x10 этажеркой несравненно более компактны по сравнению с одной 16x20. Где-то оно может и оправдано, одна плата, но у меня места на столе мало.
Но не только габаритами продиктован выбранный конструктив. В одноплатном варианте проводники получатся длинные, а при объемном монтаже их можно сделать короче. К тому же разводка проводников становится проще.

Расклад по платам размера 8x10 см получился такой:
1. Процессорное ядро со всей обвязкой
2. Буфера ОЗУ
3 и 4. Накопители ОЗУ, младший и старший банки

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

Привожу принципиальную схему. DD1 это КМОПовские повторители, идея подсмотрена в БК-0011М и доведена до рабочего состояния.
Attachment:
bk0011_reset.png
bk0011_reset.png [ 25.45 KiB | Viewed 11282 times ]

БКшный вариант склонен к возбуждению и генерации пачки импульсов на линии /DCLO. Процессором проглатывается, но зачем нам сомнительные решения, правда? Поэтому напильник в руки и на доработку. Еще добавил туда /ACLO с разъема.
DD2 привязка внешней асинхронки к такту, DMR тоже туда, чтоб все 6 триггеров работали.
DD3 делитель на 2 и привязка /RPLY. Фазы тактирования 1801ВМ1, 1801ВП1-030 и привязки /RPLY подобраны на стенде экспериментальным путем по минимальной средней длительности цикла обращения к ОЗУ.
DD5 и часть DD4 определяют окно обращения к ОЗУ, если JP1 перекрыт, то ОЗУ почти 62 килобайта вместо обычных 56.
DD10 ЛП10 буфера с 3-мя состояниями, разряды регистра SEL1. Поставилось напрямую, без согласующей логики, благодаря двум /OE.
DD8 триггер КП2, занимается диспетчеризацией обращения к памяти и формирует шинный сигнал /BS. /BS7 он не называется, потому что он бывает и /BS7, и /BS31.

Системный разъем всего 44 контакта, наш советский МРН-44.
На другую плату через межплатные разъемы уходят линии AD и сигналы для накопителей ОЗУ, мультиплексированный адрес и управление.


Attachments:
proc_1.png
proc_1.png [ 467.58 KiB | Viewed 11312 times ]
28 May 2018 10:01
Profile
Doomed

Joined: 25 Aug 2009 07:02
Posts: 459
Location: Москва
Вот примерно так детали размещаются на платке. По идее, туда еще хорошо бы было поместить буфера шин данных и управления для ОЗУ, но они уже не помещаются. Буферный 16-разрядный регистр 1801ВП1-034 (на DRAM Data Out), которая еще онда ВП-шка, уже с очевидностью не помещается (или с большим трудом), а еще нужны 2 20-ногих DIP ТТЛ 8-разрядных буфера (DRAM Data In) и 2 16-ногих DIP ТТЛ 6-разрядных повторителя (DRAM MuxAddr & Ctl).

Шина данных уходит на другую плату через разъемы, расположенные рядом с наборами резисторов R11 и R12, в целом компактно и короткими проводниками. Такое повышенное внимание уделяется общей шине и шине данных как ее части, потому что она без буферов, управляется слабыми токами микросхемы 1801ВМ1, и это главный нехороший компромисс и допущение ради упрощения конструкции.

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

Эта плата тоже разводится двумя слоями без отдельных межслойных переходов сигнальных проводников, все переходы только на ногах деталей. Для питания вместо отдельных шин два собственных слоя, всего четыре.


Attachments:
proc_1_brd.png
proc_1_brd.png [ 311.44 KiB | Viewed 11281 times ]
29 May 2018 05:04
Profile
Doomed

Joined: 25 Aug 2009 07:02
Posts: 459
Location: Москва
Упустил один важный момент, тоже нигде до конца не раскрытый, но важный для понимания программы ODT. Активный поиск того, как оно работает, происходил здесь, где по ходу рождались допущения и предположения, окончательный ответ получен после реверса 1801ВМ1.
Речь идет про биты 10 и 11 PSW. Для грамотного использования этих битов нужно понимание того, что они делают и, главное, для чего они это делают. Сухим инженерным языком, кратко, бит 10 запрещает все внешние прерывания и переводит адрес вектора ошибки шины с адреса 000004 на адрес 160002, бит 11 запрещает внешнее прерывание IRQ1 и также переводит адрес вектора ошибки шины на адрес 160002.
Возможно, в ТУ на 1801ВМ1 есть какие-то пояснения, для чего так сделано, но это ТУ мало кто видел и в доступе его нет. Поэтому ничего не остается, как сделать рациональное предположение о назначении этих битов. На самом деле, предположение несложное и достаточно прямолинейное. Бит 10, запрещая все прерывания и переводя вектор Bus Error в область пультового ПЗУ, обслуживает режим Пульт (Останов), в котором процессор ни на что не реагирует, но из пульта может случиться Bus Error, например, при открытии несуществующей ячейки.
Бит 11 задает специфический режим, ни Программа, ни Пульт в чистом виде, а нечто, совмещающее некоторые их свойства. В этом режиме процессор реагирует на внешние прерывания. Одним из способов применения этого режима могла бы быть целевая программа, расположенная в ПЗУ и имеющая в том числе надежный, неразрушаемый вектор обработчика Bus Error и сам обработчик. Скорее всего, это было сделано с прицелом на применение 1801ВМ1 в качестве ядра бортовых вычислителей или узкопрофильных управляющих микро-ЭВМ.

Подводя итог, применительно к рассматриваемому изделию:
Для режима совместимости с PDP-11 бит 11 смысла не несет, поэтому использоваться не будет.
Бит 10 наделяется смыслом индикатора режима Пульт.
(Смысл нужен. Если нет смысла, то и изделие получается бессмысленным.)


30 May 2018 02:41
Profile
Doomed

Joined: 25 Aug 2009 07:02
Posts: 459
Location: Москва
Есть списки команд Пульта/ODT, для DEC PDP-11/03 (также известная под названием LSI-11/03, первая модель с мультиплексированной Q-Bus, и где впервые был реализован подход ODT вместо пульта с лампочками), для Электроники-60 (копия, или почти копия LSI-11/03) и для ДВК с ПЗУ 1801РЕ1-000.
Они в целом совпадают. В Э60 и ДВК список дополнен командой M, которая "узнать причину останова", а в ДВК можно еще запускать всяческие тесты.
Attachment:
odt_lsi.png
odt_lsi.png [ 27.09 KiB | Viewed 11238 times ]

Attachment:
odt_e60.png
odt_e60.png [ 284.08 KiB | Viewed 11238 times ]

Attachment:
odt_dvk.png
odt_dvk.png [ 54 KiB | Viewed 11238 times ]


В моем начальном варианте ODT не будет косвенной и относительной адресации, не будет "открыть предыдущую". По смешной причине, эти символы с шифтом вводятся.
ПС, который ^J, вообще с контролом вводится, поэтому дублирую его пробелом, с сохранением оригинального кода.
Тестов тоже не будет, не нужны они.

Добавлено дамп всех регистров, дамп памяти в octal и ASCII (вспоминая всякие мониторы для 80-х).
Итого:

Code:
Команда             Обозначение Код

Открыть ячейку                / 057
Закрыть ячейку               ВК 015
Закрыть ячейку и
открыть следующую  ПС или Пробел 012 или 040

Регистр                     R<n> 122
Регистр состояния             RS 122, 123
Пуск                     <addr>G 107
Продолжение                    P 120
Забой                         BS 177
Причина останова               M 115
Печать содержимого
всех регистров                 Q 121

Печать блока памяти
восьмеричными числами    <addr>Q 121

Печать блока памяти
символами ASCII          <addr>A 101


30 May 2018 07:52
Profile
Doomed

Joined: 25 Aug 2009 07:02
Posts: 459
Location: Москва
Чем полезны эмуляторы.

573РФ3 это весьма ценный ресурс, и отлаживать программу в натуре никак не получится, как и не получится написать программу такую, что ее не потребуется отлаживать. Тем более, что на момент разработки программы ODT запускать код с настоящей ПЗУшки пока не на чем. Здесь как раз помог бы эмулятор. Широко известный SIMH не подходит, он эмулирует разные PDP-11, но только фирменные, от DEC. У меня не фирменная, но подошел бы эмулятор ДВК. К счастью, такой есть, эмулируются разные системы с архитектурой PDP-11, в том числе и ДВК с процессором К1801ВМ1, а там есть 1801ВП1-030 и 1801ВП1-065, как раз то, что нужно. Своя ПЗУшка подкладывается элементарно, достаточно иметь бинарный образ ПЗУ, имя файла которого вписывается в свой .cfg файл. Файл .cfg проще всего взять имеющийся и приспособить для себя. Я решил, что для моих целей самым подходящм из комплекта .cfg файлов в поставке будет ДВК-1_DX.cfg, его скопирвал в my.cfg, который и подправил. Изменений - минимум:

Назначить свой бинарный образ ПЗУ
BootROM_DataFile = ODT.bin

Поставить свою тактовую частоту
CPU_Frequency_KHz = 4608

Можно подправить время отклика ОЗУ, мой вариант ОЗУ не тормозит, как в ДВК
RAM_Latency_NS = 500

Запретить щелканье таймера на линии, чтоб не мешался. В ODT он не нужен.
InitialStateOf[Timer] = 0

Это всё хорошо, но откуда берется ODT.bin? :roll:


30 May 2018 08:12
Profile
Doomed

Joined: 25 Aug 2009 07:02
Posts: 459
Location: Москва
Ассемблирование и линковку программ можно делать прямо в симуляторе, неважно каком, хоть в SIMH, хоть в симе от Patron. Но это занятие на любителя, работать с текстом гораздо удобнее в современных редакторах. Для кросс-компиляции есть MACRO11, с исходниками, https://github.com/j-hoppe/MACRO11 а на этой странице есть даже exe-шник для венды. Хорошо, но MACRO11 на выходе дает .obj в DEC-овском формате, который нужно превратить в юbin для заливки в ПЗУ. Линковщика для этого MACRO11 нету. Можно снова обратить взор на симуляторы, но это муторно, файлы между системами перетаскивать, командную строку набирать, перетаскивать обратно.. Народ из положения выходит по-разному, тут кто-то даже умудрился написать скрипт на перле (perl, sic!) для превращения obj в bin.

Но можно заметить, что в поставке MACRO11 есть утилита dumpobj. Я посмотрел dumpobj.c и решил, что ее можно приспособить для генерации bin. Для этого я изучил формат .OBJ из RT–11 Volume and File Formats Manual и внес изменения в dumpobj.c. Теперь эта программа по ходу сканирования блоков вычисляет релокейшены и пишет в бинарный выходной файл. И назвал я ее obj2bin.
Кстати, в том же RT–11 Volume and File Formats Manual на картинке Figure 2-1 Object Module Processing у линкера нет выходного формата бинарного в чистом виде. Есть Absolute Binary, который предназначен в том числе и как исходный для содержимого ПЗУ, но и он имеет свою внутреннюю структуру с блоками, контрольными суммами..
(Почувствуйте, как говорится, разницу между DEC и гаражными фирмами и фирмами одной персоны, из которых выросли CP/M и другие MS-DOS. Конечно, эта мелочь потом гиганта свалила, но то другой разговор.)
(и чем больше входишь в тему PDP-11, тем яснее видно настоящее место популярных 8-битников с их недо-OS. Игрушки. Но имеют право быть. Извините, но факт. Убедиться может каждый, стоит только плотно заняться темой PDP-11.)

Всё, удобный инструмент для кросс-компиляции ПЗУ есть: собранный из исходников macro11 и obj2bin, полученный правкой dumpobj.c.

Текст прилагаю, можно сделать diff с dumpobj.c, чтоб посмотреть адаптацию под конкретную малую задачу. (Ушел делать diff, самому стало интересно вспомнить, что понаписал там)


Attachments:
obj2bin.c [16.59 KiB]
Downloaded 820 times
01 Jun 2018 05:11
Profile
Doomed

Joined: 25 Aug 2009 07:02
Posts: 459
Location: Москва
На первой работе в отделе стоял ВУМС, на нем в обеденный перерыв в XONIX играли. Вот и свою PDP сделал, чтобы тот XONIX запустить.
Продолжение следует.


03 Aug 2018 08:55
Profile
Doomed

Joined: 25 Aug 2009 07:02
Posts: 459
Location: Москва
Плата с процессором. Жаль, что туда же не поместились буфера узла управления накопителем ОЗУ.


Attachments:
cpu_main.jpg
cpu_main.jpg [ 134.87 KiB | Viewed 10919 times ]
03 Aug 2018 08:58
Profile
Doomed

Joined: 25 Aug 2009 07:02
Posts: 459
Location: Москва
Буфера размещены на отдельной плате, при этом она почти пустая.


Attachments:
cpu_DRAM_buffs.jpg
cpu_DRAM_buffs.jpg [ 130.22 KiB | Viewed 10919 times ]
03 Aug 2018 09:03
Profile
Doomed

Joined: 25 Aug 2009 07:02
Posts: 459
Location: Москва
Наконец, накопитель ОЗУ. Планировался с разъемом между платами, но модуль сделал неразъемным. Двуплатный модуль, на пайке. В угловые крепежные отверстия впаяны медные стойки с резьбовым выпуском. Цепь GND через них заодно передается.
Виды модуля с обеих сторон.


Attachments:
DRAM_bank0_side.jpg
DRAM_bank0_side.jpg [ 127.13 KiB | Viewed 10918 times ]
DRAM_bank1_side.jpg
DRAM_bank1_side.jpg [ 148.87 KiB | Viewed 10918 times ]
03 Aug 2018 09:12
Profile
Doomed

Joined: 25 Aug 2009 07:02
Posts: 459
Location: Москва
Процессорный модуль в сборе.


Attachments:
cpu_assembly.jpg
cpu_assembly.jpg [ 205.48 KiB | Viewed 10918 times ]
cpu_assembly1.jpg
cpu_assembly1.jpg [ 116.04 KiB | Viewed 10918 times ]
03 Aug 2018 09:17
Profile
Doomed

Joined: 25 Aug 2009 07:02
Posts: 459
Location: Москва
А без терминала ODT не работает, нужен терминал.


Attachments:
tty.jpg
tty.jpg [ 101.38 KiB | Viewed 10918 times ]
03 Aug 2018 09:19
Profile
Display posts from previous:  Sort by  
This topic is locked, you cannot edit posts or make further replies.   [ 58 posts ]  Go to page Previous  1, 2, 3, 4  Next

Who is online

Users browsing this forum: No registered users and 6 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Group
Designed by ST Software.