PDA

Просмотр полной версии : Нужна помощь с запуском 1806ВМ2



radist108
09.03.2022, 22:40
Приветствую всех!
Собрал обвеску для процессора 1806ВМ2. ПЗУ не подключал, но при старте на "холостом ходу" процессор ведет себя странно. Сигналы SYNC посылает неравномерно. Например ставит SYNC, по сигналу RPLY снимает его, через 8 тактов снова ставит SYNС, снова снимает, следующий SYNC ставит ставит через интервал 14 тактов, потом через интервал в 1 такт (фото прилагаю). На длинном интервале дергает DIN-ом
У кого есть опыт? Кто может помочь? (скрин с анализатора прилагаю)

https://i.ibb.co/nsVkQmD/1806VM2.jpg (https://ibb.co/nsVkQmD) https://i.ibb.co/ygG0K0M/20220309-224446.jpg (https://ibb.co/ygG0K0M)

https://i.ibb.co/XCxG3qd/20220403-002112.jpg (https://ibb.co/XCxG3qd)

MM
09.03.2022, 23:17
Собрал
Схема , лучше в JPG ?

Для отладки можно применять индикатор 22-лампочковый , устанавливаемый в колодку СОЗУ ( КР537РУ11 ):
https://pic.maxiol.com/thumbs2/1576709770.1839805796.2536.jpg (https://pic.maxiol.com/?v=1576709770.1839805796.2536.jpg&dp=2)https://pic.maxiol.com/thumbs2/1576709984.1839805796.2537.jpg (https://pic.maxiol.com/?v=1576709984.1839805796.2537.jpg&dp=2)

И 3 шт. кнопки :
https://pic.maxiol.com/thumbs2/1576710742.1839805796..jpg (https://pic.maxiol.com/?v=1576710742.1839805796..jpg&dp=2)
Сигналы ACLO и DCLO подключать непосредственно на Н1806ВМ2, а сигнал CLC - на вх. "С" триггера, делящего тактовую 11 мгц до 5.5 мгц на ВМ2, временно отключив его от др. цепей. Сначала подать сигнал DCLO и не менее 5 шт. импульсов CLC, затем сигнал ACLO - тоже не менее 5 импульсов CLC, затем начать наблюдать пошаговый процесс пуска - при адресе старта 002000 ВМ2 сначала считает РНП, затем ячейки ППЗУ 002000 и 002002, и т.п. и т.д.
Самые трудолюбивые могут на платочку индикатора приделать не линейку из 16 светиков, а 3 шт. 555ЛН1, 6 шт. 514ИДх и 6 шт. АЛСок - для наблюдения натуральных восьмеричных значений.
( Как продвинутый вариант - на АЛС318 и мультиплексорах со счетчиком ).

radist108
09.03.2022, 23:28
Тут все схемы https://disk.yandex.ru/d/0XkrtfTLIi5ubQ

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


при адресе старта 002000 ВМ2 сначала считает РНП, затем ячейки ППЗУ 002000 и 002002
И разве процессор стартует не с адреса ВНП, который выставляется принудительно на шине через драйвер? Я в схеме даже 16 переключателей поставил специально для этого

MM
09.03.2022, 23:30
процессор ведет себя
Лучше сигналы ЛА расположить в сл. порядке :
ACLO
CLCO
SEL
SYNC
AR
DIN
DOUT
RPLY
AD15
AD14
AD13
AD12
AD11
AD10
AD09
AD08
Запуск ЛА - по переходу ACLO от 0в. до +5в.

radist108
09.03.2022, 23:41
Вот ссылка на PDF. Конвертер JPG очень сжимает качество сильно
https://disk.yandex.ru/i/xGPLCtq-bGHKTQ

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

У Вас есть тайминги вашей схемы? Интересно сравнить и понять откуда такая непериодичность

MM
09.03.2022, 23:42
разве процессор стартует не с адреса ВНП
Это в поделке, от которой я взял кусок текста. При РНП=000000 старт будет с адреса, указанном в ячейке 000000 поля адресации при сигнале SEL=0в.

radist108
09.03.2022, 23:44
сигнале SEL=0в.
У меня этот сигнал открывает регистр на 16 переключателей. Но до этого пока далеко.
Есть даже более глобальная проблема. Как только ставлю пустую ПЗУ, начинается дребезг по всем сигналам управления

MM
09.03.2022, 23:54
Интересно сравнить
Выработка сигналов пуска, ИС - 74HCT14 ( ЭКР1594ТЛ2 )
https://pic.maxiol.com/thumbs2/1646858846.2997898048..jpg (https://pic.maxiol.com/?v=1646858846.2997898048..jpg&dp=2)
Д1...Д4 - КД521 или КД512
R7 - 2 k
R8 - 100 k
C2 - 10 mk ( можно полярный )
R10 - 0 om
C6 - 0 pf
R9 - 100 k
C3 - 0.1 mk ( для 1806ВМ3 10 мкф ).
При применении ЭКР1564ТЛ2 диоды Д1 и Д2 закоротить.

radist108
09.03.2022, 23:56
Старт ACLO и DCLO у меня настроены в соответствии с даташитом (официальным) и работают хорошо. К этому вопросов нет. Непонятно ведут себя сигналы при старте

Sandro
10.03.2022, 06:34
Выработка сигналов пуска, ИС - 74HCT14 ( ЭКР1594ТЛ2 )


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

Кстати, есть ряд вопросов:
1) Почему активным уровнем сброса выбран высокий? Традиционно сбрасывают же низким. Тогда и диоды эти не нужны. Хотя один для разряда C2 при короткой просечке по питанию поставить стоит.
2) Зачем отсутствуют изолирующие буфера на выходах DCLO? С нарисованной схемой словить back-drive вообще без проблем, не надо так.
3) Точно порядок отпускания DCLO/ACLO -- правильный? Не наоборот ли?

radist108
10.03.2022, 10:13
3) Точно порядок отпускания DCLO/ACLO -- правильный? Не наоборот ли?
В моей схеме задержки сделаны на триггерах и согласно офф. документу:
(но всё же мне что-то подсказывает, что дерготня с SYNC не из-за сигналов запуска)
https://i.ibb.co/1T47vZf/SCAN0683-000-page-0063.jpg

ra3qdp
10.03.2022, 16:26
формирование ACLO - не обязательно.
А по DCLO - просто кнопка и конденсатор для автостарта работает нормально (имеется ввиду в корзине,
когда процессор на плате МС1201(а , может, и прямо на ножках сработает).
Попробуйте.

radist108
10.03.2022, 17:20
формирование ACLO - не обязательно.
А по DCLO - просто кнопка и конденсатор для автостарта работает нормально (имеется ввиду в корзине,
когда процессор на плате МС1201(а , может, и прямо на ножках сработает).
Попробуйте.

У меня процессор стартует без проблем. Просто ведет себя странно и я не могу понять его работу, чтобы продолжить

MM
10.03.2022, 17:46
Старт ACLO и DCLO
https://pic.maxiol.com/thumbs2/1646920266.531453922.2.jpg (https://pic.maxiol.com/?v=1646920266.531453922.2.jpg&dp=2)
Если номиналы компонентов соответствуют приведенному скриншоту, работа этого участка будет под вопросом.
Надо увеличить R12 с 10 хотя бы до 20 ком, что бы DCLO снималось заведомо раньше ACLO.
И т.к. есть существенная вероятность, что применены ИС серии 564 выпуска до 2006 г., т.е. без индекса "В" , следует приделать диодик от выв. 03 ДД23А 564ТМ2 к питанию +5в, палочкой к линии +5в., а треугольником - к выв. 03 ДД23А.

radist108
11.03.2022, 01:00
Номиналы в схеме от балды. Я по месту настраивал. Чуть позже пришлю тайминги с ЛА


И т.к. есть существенная вероятность, что применены ИС серии 564 выпуска до 2006 г., т.е. без индекса "В" , следует приделать диодик от выв. 03 ДД23А 564ТМ2 к питанию +5в, палочкой к линии +5в., а треугольником - к выв. 03 ДД23А.

А с чем это связано? Что даёт?

radist108
11.03.2022, 12:34
Собственно, мои тайминги по включению:

https://i.ibb.co/qy1vNYv/DCLO-ACLO.png

radist108
11.03.2022, 18:33
Пустое сообщение

radist108
11.03.2022, 22:09
Вот тайминги с ЛА:

https://i.ibb.co/KNZL6d0/image.png

Alex_K
11.03.2022, 22:35
Вот тайминги с ЛА:
Вполне нормальные тайминги. Если ПЗУ и память не присоединены, то как я понимаю, читаться будут нули.
Итак, сперва по SEL/DIN читается безадресный регистр. Прочелся стартовый адрес векторов HALT-режима. Далее идёт чтение вектора начального запуска, читается новое значение счетчика команд и слова состояния процессора. Соответственно идёт чтение двух ячеек памяти с установленным сигналом SEL, т.к. чтение идёт из HALT-режима. Предполагаю, что в новом PSW бит 8 не установлен и соответственно исполнение программы начинается в USER-режиме. Читается первая команда из памяти, вероятно там ноль, соответственно команда HALT. Т.к. процессор имеет предвыборку, то следом читается следующая ячейка памяти. Команда HALT исполняется, что переводит процессор в режим HALT и исполняется прерывание SEL170. Сперва читается безадресный регистр, а затем две ячейки памяти в HALT-режиме.

Так что вроде всё нормально.

MM
11.03.2022, 22:44
с ЛА
Слева - направо, обращения к шине :
1. Безадресное чтение шины , запрос адреса таблицы векторов. Ответ ( вероятно ) = 000000.
2. Адресное чтение массива векторов, вероятный адрес = 000000, читается адрес первого исполняемого слова
3. Адресное чтение массива векторов, вероятный адрес = 000002, загружается состояние ЦП для исполнения программы. Рекомендуемое значение - 000340.
4. Чтение из обычного АП , вероятный адрес = 000000, вероятное значение = 000000, ЦП переходит к выполнению включения режима "пульт" ???
5. Чтение из обычного АП , вероятный адрес = 000002, вероятное значение = 000000 ( предвыборка ? )
6. Безадресное чтение шины , запрос адреса таблицы векторов. Ответ ( вероятно ) = 000000.
7. Адресное чтение массива векторов, вероятный адрес = 000???, читается адрес первого исполняемого слова подпрограммы реализации пультового режима.
См. ТО Н1806ВМ2, в крайнем случае 1801ВМ2.

radist108
11.03.2022, 22:48
SEL/DIN
Стоит ли объединить SEL и DIN в логическое "И" для открытия шинного драйвера перемычек ВНП? А тот этот SEL открывается и дальше с опережением DIN



Сперва читается безадресный регистр, а затем две ячейки памяти в HALT-режиме.
А почему там вновь срабатывает SEL? Ведь уже пора проводить адресное чтение

MM
11.03.2022, 22:53
А почему там вновь срабатывает SEL?
Сигнал SEL - это 17-я линия адреса, эффективно действующая в момент перепада сигнала SYNC с +5в. до 0в.

radist108
11.03.2022, 23:05
Сигнал SEL - это 17-я линия адреса, эффективно действующая в момент перепада сигнала SYNC с +5в. до 0в.
Если посмотреть тайминги из даташита, SEL срабатывает только в режиме безадресного чтения и в паре с DIN. Но согласно замерам с ЛА, SEL постоянно срабатывает и далее, да порой и без привязки к DIN. Почему так?
И кстати, согласно даташиту SYNC в это время не должен быть задействован

Alex_K
11.03.2022, 23:09
Стоит ли объединить SEL и DIN в логическое "И" для открытия шинного драйвера перемычек ВНП? А тот этот SEL открывается и дальше с опережением DIN
Безадресный регистр читается при условии SEL & DIN & not SYNC. А также SEL используется в адресном обмене, если читается память HALT-режима. Де-факто SEL является 17-й линией адреса, процессор может адресовать 128 Кб памяти, из них 64 Кб в режиме USER и 64 Кб в режиме HALT.

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


А почему там вновь срабатывает SEL? Ведь уже пора проводить адресное чтение
SEL срабатывает, т.к. идет чтение памяти из HALT-режима.

radist108
11.03.2022, 23:13
SEL срабатывает, т.к. идет чтение памяти из HALT-режима
Разжуйте пожалуйста. Тут у меня пробел. Но обязательно разберусь

Alex_K
11.03.2022, 23:20
Разжуйте пожалуйста. Тут у меня пробел. Но обязательно разберусь
Процессор работает в двух режимах - USER и HALT. В режиме USER исполняются обычные пользовательские программы, например та же ОС RT-11. А режим HALT предназначен для обработки исключений, таких как сигнал/команда HALT, двойное зависание, зависание при приёме адреса вектора прерывания, эмуляция команд FIS, ну и первоначальный старт процессора. И для того, чтобы ПЗУ и ОЗУ HALT-режима не пересекалось с памятью режима USER, во время обращения к памяти режима HALT при выдаче адреса на шину, одновременно с адресом устанавливается и сигнал SEL.

radist108
12.03.2022, 00:16
А какое есть объяснение поведению SEL на этом тайминге в отдельные моменты?

https://i.ibb.co/K7JbwY1/image.png

Alex_K
12.03.2022, 00:20
А какое есть объяснение поведению SEL на этом тайминге в отдельные моменты?
В данном случае читается память режима HALT. Вместе с адресом устанавливается сигнал SEL, подаётся сигнал SYNC. Затем адрес снимается вместе с сигналом SEL, для чтения подаётся сигнал DIN. При обращении к памяти режима HALT сигнал SEL устанавливается только в фазе выдачи адреса.

radist108
12.03.2022, 00:28
Спасибо. Тогда пойду от обратного. Как мне сделать так, чтобы процессор получал по шине какую-либо команду, чтобы крутиться в цикле? NOP с циклом, или еще как то, чтобы в статичный режим его ввести и все отладить, все посмотреть-померить

Alex_K
12.03.2022, 00:35
Спасибо. Тогда пойду от обратного. Как мне сделать так, чтобы процессор получал по шине какую-либо команду, чтобы крутиться в цикле? NOP с циклом, или еще как то, чтобы в статичный режим его ввести и все отладить, все посмотреть-померить
Надо подсоединить ПЗУ. В нём должны быть вектора HALT-режима, ну и отладочная программа.

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

Есть ещё вариант, что если происходит чтение памяти USER-режима, то для чтения всё время подавать NOP.
Есть вариант, что на своих переключателях вы выставите код команды NOP и они всегда будут читаться при выставлении сигнала DIN.

radist108
12.03.2022, 01:20
Так. Начинаю разбираться. Из-за того, что у меня 7-й бит ВНП выставлен в 0 (как и все остальные), а не в 1, процессор переходит в режим HALT. Подключается SEL То есть мне нужно выставить ВНП в "10000000"
Поправьте меня, если я неправильно понял. Но опять же, зачем процессор выполняет адресное чтение со включенным SEL дважды подряд? отдельно читает СК и отдельно ССП с шины? И все это из ПЗУ?

Alex_K
12.03.2022, 11:10
Так. Начинаю разбираться. Из-за того, что у меня 7-й бит ВНП выставлен в 0 (как и все остальные), а не в 1, процессор переходит в режим HALT. Подключается SEL То есть мне нужно выставить ВНП в "10000000"
В безадресном регистре старший байт (биты с 15-й по 8-й) отвечает за старшую часть адреса векторов HALT-режима. Соответственно младший байт в адресе векторов равен нулю. Т.е. адрес таблицы векторов HALT-режима кратен 256 байт (0400 в восьмеричном). Установленный 7-й бит отвечает за отсутствие эмулятора плавающей запятой, т.е. команды FIS будут прерываться по вектору резервной инструкции.

radist108, ещё хотелось бы выяснить, что вы подразумеваете под ВНП? Если это ваш набор переключателей, который читается по SEL & DIN & ~SYNC, то это значения безадресного регистра. А сам вектор начального пуска находится в памяти режима HALT по смещениям 0 и 2 в таблице векторов.

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


Поправьте меня, если я неправильно понял. Но опять же, зачем процессор выполняет адресное чтение со включенным SEL дважды подряд? отдельно читает СК и отдельно ССП с шины? И все это из ПЗУ?
Он читает из памяти HALT-режима собственно вектор начального пуска, новые значения СК и ССП.

radist108
13.03.2022, 00:02
Я привел в мысли в порядок и, как мне кажется, достиг некоторого понимания.
Вот как я вижу расшифровку таймингов (скрин ниже):

1) По сигналам SEL & DIN (у меня они объединены по И) читается внешний безадресный регистр (по команде SEL & DIN на ногу OE драйвера 1533ИР33 16 джамперов подключаются к шине AD ). С комбинации 16-ти джамперов на шине читается стартовый адрес для чтения первой ячейки ПЗУ (по умолчанию выставляю джамперы в 000000).
2) По стартовому адресу ячейки в ПЗУ (000000), указанному ранее джамперами, считывается значение для счетчика команд (8 старших бит данных, запишу все нули), затем по адресу в ПЗУ (стартовый адрес+2) считывается слово состояния процессора(9 младших бит, установим 340, как по даташтиту). Итого два цикла подряд. Оба раза подряд работает SEL, так как 7-й бит ССП не установлен (USER/HALT)
3) Начало обычного цикла чтения и т. д.

Поправьте пожалуйста мои неточности, если такие есть

https://i.ibb.co/KNZL6d0/image.png

Alex_K
13.03.2022, 00:30
1) По сигналам SEL & DIN (у меня они объединены по И) читается внешний безадресный регистр (по команде SEL & DIN на ногу OE драйвера 1533ИР33 16 джамперов подключаются к шине AD ). С комбинации 16-ти джамперов на шине читается стартовый адрес для чтения первой ячейки ПЗУ (по умолчанию выставляю джамперы в 000000).
Безадресный регистр должен считываться при установленных сигналах SEL и DIN и отсутствующем SYNC. Так что надо объединять так: SEL and DIN and not SYNC. В этом безадресном регистре для доступа к таблице векторов HALT-режима используется только старший байт. При формировании адреса младший байт равен нулю. На самом деле младший байт используется уже для смещения в таблице векторов, т.к. векторов там несколько.

2) По стартовому адресу ячейки в ПЗУ (000000), указанному ранее джамперами, считывается значение для счетчика команд (8 старших бит данных, запишу все нули), затем по адресу в ПЗУ (стартовый адрес+2) считывается слово состояния процессора(9 младших бит, установим 340, как по даташтиту). Итого два цикла подряд. Оба раза подряд работает SEL, так как 7-й бит ССП не установлен (USER/HALT)
По смещению ноль в таблице векторов считывается новое значение счетчика команд, все 16 бит. А по смещению 2 - новое значение ССП (9 бит). Оба раза работает SEL потому, что таблица векторов HALT-режима расположена именно в памяти HALT-режима, потому SEL и выставляется всё время. А уже в новом ССП разряд 8 указывает новый режим работы процессора, если ноль, то USER, а один - HALT.

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

Вот здесь есть ТО на 1806ВМ2 - https://archive.pdp-11.org.ru/BIBLIOTEKA/1806vm2/.

radist108
13.03.2022, 01:03
Вот здесь есть ТО на 1806ВМ2 - https://archive.pdp-11.org.ru/BIBLIOTEKA/1806vm2/.
Спасибо за документацию!


В этом безадресном регистре для доступа к таблице векторов HALT-режима используется только старший байт.
То есть следует использовать лишь 8 "старших" джамперов?

Alex_K
13.03.2022, 01:20
То есть следует использовать лишь 8 "старших" джамперов?
Для формирования адреса таблицы векторов HALT-режима в безадресном регистре используется только старший байт, а младший байт - это вектор в зависимости от ситуации.
А ситуации такие (числа восьмеричные):
SEL000 - вектор начального пуска;
SEL004 - зависание в режиме HALT;
SEL010 - исполнение команд FIS;
SEL170 - сигнал/команда HALT;
SEL174 - двойное зависание;
SEL274 - зависание при приёме адреса вектора прерывания.

В младшем байте безадресного регистра процессором используется только бит 7 - наличие эмулятора FIS. Все остальные биты могут использоваться пользователем по своему усмотрению (например в ДВК младшими тремя битами определяется режим начальной загрузки).

radist108
14.03.2022, 00:58
В младшем байте безадресного регистра процессором используется только бит 7 - наличие эмулятора FIS
В документации по адресу 000010 стоит прерывание с названием "резервный код". Для формата xxx010 прерывания нет. Можно поподробнее про это? И про бит 7 младшего байта

https://i.ibb.co/L1p34ZG/image.png (https://ibb.co/L1p34ZG)

Sandro
14.03.2022, 04:29
В документации по адресу 000010 стоит прерывание с названием "резервный код". Для формата xxx010 прерывания нет. Можно поподробнее про это? И про бит 7 младшего байта


Это прерывание пользовательского (USER) режима. Оно будет сформировано для команд FIS, если седьмой бит равен 0. Если он равен 1, то для них -- и только для них! -- будет сформировано прерывание HALT-режима. Это необходимо для прозрачной эмуляции FIS.

radist108
14.03.2022, 09:50
А что такое FIS? Не могу найти в документации

Sandro
14.03.2022, 10:06
А что такое FIS? Не могу найти в документации

Операции с плавающей запятой. FADD/FSUB/FMUL/FDIV.

Alex
14.03.2022, 11:17
У DEC на PDP-11, инструкции процессора разделялись:
1. Базовый набор инструкций(типа должен быть на всех машинах, но по факту отличался, пример, инструкции MARK, даже SOB не на всех PDP-11 был и закрывался макрокомандой)
2. EIS - расширенный набор инструкций, включал целочисленные умножение и деление, а так же длинный параметрический сдвиг.
Присутствовал на большей части компьютеров(но из наших отсутствовал к примеру, на 1801ВМ1, на 1801ВМ1Г реализована одна команда умножения MUL)
3 CIS - набор коммерческих инструкций, для КОБОЛа например... В СССР я не видел ни одного компьютера, где бы он был.
4. FPU - инструкции сопроцессора с плавающей запятой. Были, но далеко не на всех машинах.
Был ещё ЕАЕ - арифметический расширитель, на некоторых СМ, но его нельзя рассматривать как набор инструкций, как я понял были адреса на шине, куда записывались данные и потом считывались результаты. Но в живую я ни одной СМ с таким счастьем не видел.

Hunta
14.03.2022, 11:39
но его нельзя рассматривать как набор инструкций, как я понял были адреса на шине, куда записывались данные и потом считывались результаты.
Да, типа устройства для аппаратного выполнения некоторых действий.

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


для КОБОЛа например
Я бы сказал так - из компиляторов ЯВУ поддерживался, как минимум (а возможно и как максимум), компилятором с Кобола от самой DEC. Потому как на MACRO-11 можно использовать что угодно и начиная с какой то версии ассемблера он знает о инструкциях CIS

radist108
14.03.2022, 15:11
С моим минимальным опытом работы, да и то только с микроконтроллерами, мне это всё пока пониманием не охватить. Но надо двигаться дальше
У меня есть еще вопрос. Что должно быть записано в ПЗУ в первых адресах? Вектора прерываний? Как я понял, я должен заполнить ячейки ПЗУ из колонки второй колонки документа 12-ю адресами, на которые должна переходить программа по прерыванию. И куда записывать в ПЗУ ССП? По адресу 000002?

https://i.ibb.co/L1p34ZG/image.png (https://ibb.co/L1p34ZG)

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

И еще вопрос. Каково практическое применение адресного пространства HALT? Для подключения арифметического сопроцессора?

Hunta
14.03.2022, 15:20
Каково практическое применение адресного пространства HALT
Тесты, загрузчики - что бы не тратить основное адресное пространство

MM
14.03.2022, 15:41
Каково практическое применение адресного пространства HALT?
В каком-то поделии даже программный терминал с видео-ОЗУ запихнули в АП пульта ( HALT - режима адресации )

Sandro
14.03.2022, 15:54
Пример: вот у тебя ПЗУ HALT-режима, поставил ты его на адрес 160000. Тогда безадресный регистр должен отдавать в простейшем случае 160000, а в начале ПЗУ, т.е. по адресу 160000 -- PC и PSW для начального старта. Например, 160300 и 340. Ну или где там программа инициализации начинается.

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


В каком-то поделии даже программный терминал с видео-ОЗУ запихнули в АП пульта ( HALT - режима адресации )

Что, кстати, должно было быть сделано в УКНЦ вместо этого полуторапроцессорного ужаса. Всё стало бы гораздо проще и лучше.

dk_spb
14.03.2022, 16:07
В Немиге так сделано.
В Союз-Неоне, насколько я понимаю, вся работа с периферией "эмулируется" программами в HALT режиме.

radist108
14.03.2022, 16:45
С вашего позволения продублирую свой вопрос. Возможно, он остался незамеченным:
Допустим, стартовый адрес для моей ПЗУ 000000. Что должно быть записано в самом начале ПЗУ?
по адресу 000000: - PC (еще не понял, что сюда вписывать)
по адресу 000002 - PSW (000340)
А затем, начиная с 000004 записать 12 адресов для программ обработки прерываний, если таковые имеются?
Я правильно понял?

Sandro
14.03.2022, 17:03
С вашего позволения продублирую свой вопрос. Возможно, он остался незамеченным:
Допустим, стартовый адрес для моей ПЗУ 000000. Что должно быть записано в самом начале ПЗУ?


Не надо допускать такой стартовый адрес для PDP-11, даже для примера. В начале адресного пространства находятся вектора пользовательского режима. Кроме того, туда традиционно помещают переменные среды исполнения и стек. Я совершенно неслучайно указал адрес ПЗУ 160000. Стартовое ПЗУ обычно ставят либо туда, либо ещё выше, например, 170000.



по адресу 000000: - PC (еще не понял, что сюда вписывать)


Адрес старта программы, я же написал.
А затем, начиная с 000004 записать 12 адресов для программ обработки прерываний, если таковые имеются?


Я правильно понял?

Нет. Ну там же написано в документации! Вектора HALT-режима размещаются по адресам вида xxxyyy, где yyy -- вектор, а xxx -- старший байт безадресного регистра. То есть, если в регистре адрес 160000, то адрес вектора HALT будет 160170.
Вектор -- это PC+PSW, два слова.

Alex_K
14.03.2022, 18:46
В документации по адресу 000010 стоит прерывание с названием "резервный код". Для формата xxx010 прерывания нет. Можно поподробнее про это? И про бит 7 младшего байта
Это описано в ТО, лист 77.

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


Это прерывание пользовательского (USER) режима. Оно будет сформировано для команд FIS, если седьмой бит равен 0. Если он равен 1, то для них -- и только для них! -- будет сформировано прерывание HALT-режима. Это необходимо для прозрачной эмуляции FIS.
Только наоборот. Если в безадресном регистре бит 7 установлен в единицу, то будет TRAP10. А вот если он в нуле, то тогда HALT-прерывание SEL010.

radist108
14.03.2022, 20:45
Ну там же написано в документации!
Да вроде всё по-руссски написано, а для понятного мало) (для аналоговика)


Я совершенно неслучайно указал адрес ПЗУ 160000. Стартовое ПЗУ обычно ставят либо туда, либо ещё выше, например, 170000.

У меня адресное пространство распределено так:
ПЗУ: 000000 - 037776
ОЗУ: 040000 - 047776

Всё неправильно, да?

И нет ли здесь у кого-нибудь документа Система команд ОСТ 11 305.909-82 ?
Дайте ссылочку, пожалуйста

Alex_K
14.03.2022, 20:57
У меня адресное пространство распределено так:
ПЗУ: 000000 - 037776
ОЗУ: 040000 - 047776
В принципе можно и так. Тогда безадресный регистр лучше настроить на адрес 0400. Т.е. по адресам 0-0376 будут вектора USER-режима, а по адресам 0400-0676 вектора HALT-режима. Но в этом случае вектора USER-режима будут жёстко прописаны в ПЗУ, их не настроишь на конкретный адрес, но может это и не надо. Если процессор будет использоваться в качестве микроконтроллера, то и делить адресное пространство на HALT и USER необязательно, при адресном чтении/записи сигнал SEL можно игнорировать.

radist108
14.03.2022, 21:09
В принципе можно и так. Тогда безадресный регистр лучше настроить на адрес 0400. Т.е. по адресам 0-0376 будут вектора USER-режима, а по адресам 0400-0676 вектора HALT-режима.
А откуда эти значения адресов? В документации, как я понял, для USER-режима 7 векторов в адресах 000000-000250, а для HALT-режима 5 векторов в адресах xxx000-xxx274

Alex_K
14.03.2022, 22:04
А откуда эти значения адресов? В документации, как я понял, для USER-режима 7 векторов в адресах 000000-000250, а для HALT-режима 5 векторов в адресах xxx000-xxx274
Вектора USER-режима расположены строго с начала памяти, с адреса 0. Этот диапазон я указал, т.к. кроме внутренних прерываний, бывают ещё внешние векторные, само устройство передаёт адрес вектора. Обычно вектора расположены в диапазоне 0-0376, вот я его и привёл. Вектора HALT-режима лучше не пересекать с векторами USER-режима, адреса векторов HALT-режима настраиваются с диапазоном 0400.

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


И нет ли здесь у кого-нибудь документа Система команд ОСТ 11 305.909-82 ?
Дайте ссылочку, пожалуйста
Лучше почитать описание системы команд 1801ВМ2- https://archive.pdp-11.org.ru/BIBLIOTEKA/1801VM2SPECS/1801VM2SPECS.rar. Это ТО на 1801ВМ2 и там подробно описана система команд. А 1806ВМ2 это немного улучшенная версия 1801ВМ2, поправлены ошибки.

radist108
14.03.2022, 22:44
Тогда безадресный регистр лучше настроить на адрес 0400

Так ведь по команде SEL считывается только старший байт безадресного внешнего регистра. Младшую половину 000400 процессор не увидит. Или я что-то неправильно понял?

Alex_K
14.03.2022, 22:55
Так ведь по команде SEL считывается только старший байт безадресного внешнего регистра. Младшую половину 000400 процессор не увидит. Или я что-то неправильно понял?
Процессор считывает его целиком, а для формирования адреса векторов HALT-режима использует только старший байт. А 0400 (число восьмеричное), это установленная единица в 8-м разряде, а это уже старший байт. Соответственно:
0400, 0402 - вектор начального пуска;
0404, 0406 - зависание в режиме HALT;
0570, 0572 - сигнал/команда HALT;
0574, 0576 - двойное зависание;
0674, 0676 - зависание при приёме А.В.П.

AFZ
14.03.2022, 23:35
Я совершенно неслучайно указал адрес ПЗУ 160000. Стартовое ПЗУ обычно ставят либо туда, либо ещё выше, например, 170000.Вообще-то у 1201.02 стартовое ПЗУ Halt-Mode стоит по адресу 140000, а с адреса с 160000 местами открывается фрагменты ОЗУ, которое вне Halt-Mode недоступно. Там пультовая программа держит свои рабочие поля, а также туда пересылается фрагмент программы, реализующий FIS.


У меня адресное пространство распределено так:
ПЗУ: 000000 - 037776
ОЗУ: 040000 - 047776Во-первых, их надо поменять местами. И. во-вторых, такое имеет смысл использовать, если проц будет использоваться только в юзермоде. При этом для Halt=Mode, проще всего, прицепить двухсловное (минимум) ПЗУ Halt-Mode, которое первым словом будет содержать 040000 - адрес ПЗУ, вторым - 000340 - PSW для процессора. Первыми командами из юзермодовой ПЗУхи, если надо, прописать вектора и пр, потом, если надо, разрешить прерывания и только после этого писать собственно программу. И забыть, что существует вывод HALT (не помню, как его зовут у ВМ2) и команда HALT - и то, и другое банально завесят этот процессор в таком окружении.


И нет ли здесь у кого-нибудь документа Система команд ОСТ 11 305.909-82 ?Опять же, рекомендую мой любимый документ 3.858.392 ТО - там подробный учебник по системе команд.

radist108
15.03.2022, 00:00
Теперь я хочу зафиксировать понимание и всё проговорить (с учетом уже имеющегося адресного пространства для ПЗУ и ОЗУ):

Для адресного пространства:
ПЗУ: 000000 - 037776
ОЗУ: 040000 - 047776

Шаг 0) Прошиваю в ПЗУ нужные мне USER-вектора с адресами меньше 000400 (000004, 000010 и т.д.), а также прошиваю HALT-вектора с адресами больше 000400 (000400, 000402 и тд.) согласно таблице 6 ТО.

Шаг 1) Включение. Процессор в режиме HALT "считывает" восемь старших бит с внешнего безадресного регистра SEL. Этот регистр выставлен заранее джамперами на плате в значение 000400.

Шаг 2) К старшему байту (биты 15..8) считанного регистра SEL процессор добавляет младший байт (биты 7..0), состоящий из нулей. В данном случае получается адрес 000400. Из ячейки ПЗУ с этим адресом берётся адрес начала программы XXXXXX и заносится в счетчик команд PC.

Шаг 3) Процессор переходит к адресу в ПЗУ 000400+2=000402, где заранее прописано требуемое PSW (000340 согласно ТО)

Шаг 4) Процессор переходит на адрес XXXXXX, записанный в PC в шаге 2, и программа начинает работу

Поправляйте меня пожалуйста)

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


Во-первых, их надо поменять местами. И. во-вторых, такое имеет смысл использовать, если проц будет использоваться только в юзермоде.
Да если б я понимал,как на практике использовать этот HALT-мод) Он, наверное, не в микро-эвм используется а в больших ПК

Во-первых, их надо поменять местами.
Такое пространство было скопировано мной из заводской одноплатной ЭВМ (задом наперёд, сначала ПЗУ, потом ОЗУ)

Sandro
15.03.2022, 07:50
Теперь я хочу зафиксировать понимание и всё проговорить (с учетом уже имеющегося адресного пространства для ПЗУ и ОЗУ):

Для адресного пространства:
ПЗУ: 000000 - 037776
ОЗУ: 040000 - 047776


Наоборот. На PDP-11 в начале должно быть ОЗУ, уже несколько раз сказано.



Да если б я понимал,как на практике использовать этот HALT-мод) Он, наверное, не в микро-эвм используется а в больших ПК


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

Исходно он придуман для эмуляции пульта/отладчика PDP-11, так как реализация аппаратного пульта в однокристальном процессоре -- идея весьма странная. Потом нашлись и другие применения.


Такое пространство было скопировано мной из заводской одноплатной ЭВМ (задом наперёд, сначала ПЗУ, потом ОЗУ)

И что? На чем она была? На 8080 или Z80, так? У них другие соглашения об использовании адресного прстранства.

Hunta
15.03.2022, 08:19
На PDP-11 в начале должно быть ОЗУ
Совсем не обязательно. Это традиционный подход, рекомендуемый (не требуемый) в гайде по архитектуре от DEC, но никто не мешает в каких-то сценариях сделать как угодно.


так как реализация аппаратного пульта в однокристальном процессоре
И тем не менее, как миниму в одном (однокристальном) процессоре от DEC (и нашей его копии) это есть. Ну а если считатать и неоднокристальные микропроцессоры, то я с ходу вспомню ещё два их (и наши копии)

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

Хотя знакомство с процессором я бы всё таки начал с традиционного подхода. Стандартный софт - он как то больше к нему тяготеет. Да и попроще он будет в реализации - для программного барахла

Woxem
15.03.2022, 08:33
А подскажите как в такой схеме заменить 588 на 1806вм2
77127

radist108
15.03.2022, 08:39
И что? На чем она была? На 8080 или Z80, так? У них другие соглашения об использовании адресного прстранства.

Я взял архитектуру отсюда. Здесь 1801:
(тут также сначала ПЗУ, потом ОЗУ)

https://i.ibb.co/DrKHpzr/image.png (https://ibb.co/DrKHpzr)


Хотя знакомство с процессором я бы всё таки начал с традиционного подхода. Стандартный софт - он как то больше к нему тяготеет. Да и попроще он будет в реализации - для программного барахла

Поздно) Я уже развел плату. Это было непросто. Пойду тернистым путём. А следующую сделаю как положено

Sandro
15.03.2022, 08:39
А подскажите как в такой схеме заменить 588 на 1806вм2


Схему невозможно прочитать, поскольку форумный движок ужал её до ширины в 352 пикселя. Выложи картинку на сторонний хостинг.

radist108
15.03.2022, 08:39
А подскажите как в такой схеме заменить 588 на 1806вм2
Плохо загрузилось изображение
Я как раз занимался тем, чтобы убрать 588-ю серию и все сделать на логике

Woxem
15.03.2022, 08:41
https://i.ibb.co/Zzfvy93/588-schet-1.gif (https://ibb.co/Zzfvy93)

Sandro
15.03.2022, 09:05
Я взял архитектуру отсюда. Здесь 1801:
(тут также сначала ПЗУ, потом ОЗУ)


:eek: РПУ "Бригантина" с диапазоном частот от 10КГц до 30 МГц, это её плата управления. Офигеть. Да уж, более удивительного источника схемы -- ещё поискать надо.
И процессор у неё, вообще-то, ВМ1, а не ВМ2. Они не совсем одинаково подключаются.
Память у Б10-37 можно перекидывать по адресам, там перемычки для этого есть.

Если интересно, вот тут ребята потрошили её прошивку в том числе: http://www.radioscanner.ru/forum/topic46843.html
Но это весьма специфическая машинка. Никак не универсальная и тем более -- не типовая. Нда, довелось же нарваться на такое...


Поздно) Я уже развел плату. Это было непросто. Пойду тернистым путём. А следующую сделаю как положено

Дешифратор адреса перекинуть несложно. Скальпель, МГТФ, паяльник.

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

Woxem, если память меня не подводит, то на схеме просто голый процессор без ничего. Но это лучше ответа старших товарищей дождаться, я вживую не успел с 588 повозиться.

Woxem
15.03.2022, 10:20
Там 588ва это приемо-передатчит силовой шины

Sandro
15.03.2022, 10:27
Там 588ва это приемо-передатчит силовой шины

Это часть процессора. Там вся плата -- это процессор собранный на 588 серии. Иначе говоря, вот все эти 588хх вместе и образуют процессор. ВМ2 в одиночку заменяет её целиком. Ну, почти всю.
Единственное, надо смотреть на конкретную систему команд, что на этой плате есть, а чего нет.

radist108
15.03.2022, 10:29
Я тоже очень жду ответа от Alex_K: :)


Теперь я хочу зафиксировать понимание и всё проговорить (с учетом уже имеющегося адресного пространства для ПЗУ и ОЗУ):

Для адресного пространства:
ПЗУ: 000000 - 037776
ОЗУ: 040000 - 047776

Шаг 0) Прошиваю в ПЗУ нужные мне USER-вектора с адресами меньше 000400 (000004, 000010 и т.д.), а также прошиваю HALT-вектора с адресами больше 000400 (000400, 000402 и тд.) согласно таблице 6 ТО.

Шаг 1) Включение. Процессор в режиме HALT "считывает" восемь старших бит с внешнего безадресного регистра SEL. Этот регистр выставлен заранее джамперами на плате в значение 000400.

Шаг 2) К старшему байту (биты 15..8) считанного регистра SEL процессор добавляет младший байт (биты 7..0), состоящий из нулей. В данном случае получается адрес 000400. Из ячейки ПЗУ с этим адресом берётся адрес начала программы XXXXXX и заносится в счетчик команд PC.

Шаг 3) Процессор переходит к адресу в ПЗУ 000400+2=000402, где заранее прописано требуемое PSW (000340 согласно ТО)

Шаг 4) Процессор переходит на адрес XXXXXX, записанный в PC в шаге 2, и программа начинает работу

Поправляйте меня пожалуйста)

Woxem
15.03.2022, 10:42
Могу выложить кусок прошивки стартующей по 24 вектору может проще будет вам такой способ запуска одолеть

Alex_K
15.03.2022, 20:18
Я тоже очень жду ответа от Alex_K:
Если о том, как описан процесс старта, то да, всё правильно.

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


Наоборот. На PDP-11 в начале должно быть ОЗУ, уже несколько раз сказано.
Как я понял, 1806ВМ2 хотят использовать в качестве микроконтроллера. Тут уже необязательно соблюдать архитектуру PDP-11. Вот если бы туда хотели грузить RT-11, тогда другое дело.

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


Да если б я понимал,как на практике использовать этот HALT-мод) Он, наверное, не в микро-эвм используется а в больших ПК

Нет, ты не можешь его не использовать, поскольку процессор выходит в него при начальном запуске и любых аварийных ситуациях.
Если бы делался компьютер, то да, там использование HALT-режима было бы необходимым. Это не только эмулятор FIS, загрузчики, но и пультовый отладчик. Во многих случаях он и не нужен, в качестве примера - КЦГД.

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

И ещё по поводу пересечения векторов USER и HALT-режимов. Пересекаться будут только вектора 004 и 010. Если эмулятора FIS не будет, ну соответственно не будут употребляться команды FIS, то пересечения по вектору 010 не будет. Также если не будет использоваться HALT-режим, то не будет пересечения и по вектору 004.

radist108
15.03.2022, 22:28
Как я понял, 1806ВМ2 хотят использовать в качестве микроконтроллера. Тут уже необязательно соблюдать архитектуру PDP-11. Вот если бы туда хотели грузить RT-11, тогда другое дело.

Да, всё так и есть

Если бы делался компьютер, то да, там использование HALT-режима было бы необходимым. Это не только эмулятор FIS, загрузчики, но и пультовый отладчик. Во многих случаях он и не нужен, в качестве примера - КЦГД.
Многое проясняется


Если эмулятора FIS не будет

Можно пару слов, а что это за эмулятор такой?

Alex_K
15.03.2022, 22:52
Можно пару слов, а что это за эмулятор такой?
Начнём немного издалека. У нас была серия 16-разрядных ЭВМ Электроника НЦ со своей системой команд. На основе этой системы команд был сделан микроконтроллер 1801ВЕ1. Но в конце 1970-х годов произошёл так называемый DEC-переворот. МЭП переориентировался на выпуск PDP-11-совместимых компьютеров. На заводе "Процессор" в Воронеже делали полные копии компьютеров PDP-11. Ну а в Зеленограде стали делать свои микропроцессоры с системой команд PDP-11. Первым под эту раздачу попал 1801ВЕ1, его микрокод переделали и получился 1801ВМ1. Но всё дело в том, что DEC микропроцессоров не делала, их процессоры состояли из нескольких микросхем, и были микросхемы с микрокодом. Там была реализовано не только исполнение системы команд, но и пультовый отладчик, называемый у них MicroODT. Естественно в ПЛМ микропроцессора MicroODT впихнуть не удалось, потому в 1801ВМ1 сделали некое подобие неполноценного HALT-режима, а пультовый отладчик появился во внешней ПЗУ. Исполнялся он уже командами самого микропроцессора, было введено ещё две команды - START (000012) и STEP (000016). В 1801ВМ1 также не было команд EIS - MUL, DIV, ASH, ASHC.
Когда разрабатывали 1801ВМ2, то многое было учтено. Естественно в ПЛМ также не удалось впихнуть MicroODT, но здесь уже сделали полноценный HALT-режим, реализовали команды EIS на микропрограммном уровне. Но также ёмкости ПЛМ не хватало для реализации команд FIS. Поэтому поступили следующим образом - если был эмулятор FIS, то возникало не обычное прерывание, а прерывание HALT-режима. Прерывания HALT-режима не используют стек, а сохраняют счетчик команд и ССП в специальных регистрах-копиях, которые доступны в HALT-режиме. Таким образом для программы USER-режима всё прозрачно и она думает, что процессор поддерживает FIS. Эти эмуляторы реализованы в ПЗУ ДВК (МС 1201.02), УКНЦ и Союз-Неон.

radist108
15.03.2022, 23:09
Начнём немного издалека. У нас была серия 16-разрядных ЭВМ Электроника НЦ со своей системой команд. На основе этой системы команд был сделан микроконтроллер 1801ВЕ1. Но в конце 1970-х годов произошёл так называемый DEC-переворот. МЭП переориентировался на выпуск PDP-11-совместимых компьютеров. На заводе "Процессор" в Воронеже делали полные копии компьютеров PDP-11. Ну а в Зеленограде стали делать свои микропроцессоры с системой команд PDP-11. Первым под эту раздачу попал 1801ВЕ1, его микрокод переделали и получился 1801ВМ1. Но всё дело в том, что DEC микропроцессоров не делала, их процессоры состояли из нескольких микросхем, и были микросхемы с микрокодом. Там была реализовано не только исполнение системы команд, но и пультовый отладчик, называемый у них MicroODT. Естественно в ПЛМ микропроцессора MicroODT впихнуть не удалось, потому в 1801ВМ1 сделали некое подобие неполноценного HALT-режима, а пультовый отладчик появился во внешней ПЗУ. Исполнялся он уже командами самого микропроцессора, было введено ещё две команды - START (000012) и STEP (000016). В 1801ВМ1 также не было команд EIS - MUL, DIV, ASH, ASHC.
Когда разрабатывали 1801ВМ2, то многое было учтено. Естественно в ПЛМ также не удалось впихнуть MicroODT, но здесь уже сделали полноценный HALT-режим, реализовали команды EIS на микропрограммном уровне. Но также ёмкости ПЛМ не хватало для реализации команд FIS. Поэтому поступили следующим образом - если был эмулятор FIS, то возникало не обычное прерывание, а прерывание HALT-режима. Прерывания HALT-режима не используют стек, а сохраняют счетчик команд и ССП в специальных регистрах-копиях, которые доступны в HALT-режиме. Таким образом для программы USER-режима всё прозрачно и она думает, что процессор поддерживает FIS. Эти эмуляторы реализованы в ПЗУ ДВК (МС 1201.02), УКНЦ и Союз-Неон.

Довольно глубокие познания :v2_blink: Спасибо!

MM
16.03.2022, 00:13
Текст ППЗУ для М-ЭВМ ТС, "помигать лампочкой" :
000000 адрес
000100 000340 .....
000100 адрес :
012737 000000 100000 077001 012737 177777 100000 077001 000767
Пояснения по тексту :
012737 000000 100000 - записать число "000000" в регистр по адресу "100000"
077001 - команда SOB по R0, 65536 циклов.
012737 177777 100000 - записать число "177777" в регистр по адресу "100000"
000767 - переход на 9 слов назад ( к адресу 000100 )
РНП = 000000

radist108
16.03.2022, 00:35
Текст ППЗУ для М-ЭВМ ТС, "помигать лампочкой" :
000000 адрес
000100 000340 .....
000100 адрес :
012737 000000 100000 077001 012737 177777 100000 077001 000767
Пояснения по тексту :
012737 000000 100000 - записать число "000000" в регистр по адресу "100000"
077001 - команда SOB по R0, 65536 циклов.
012737 177777 100000 - записать число "177777" в регистр по адресу "100000"
000767 - переход на 9 слов назад ( к адресу 000100 )
РНП = 000000

Спасибо! Будет моей первой программой Hello World!

Woxem
16.03.2022, 06:42
А будет ли работать нужно ещё 12700 65536 чтоб в r0 что-то было

Hunta
16.03.2022, 07:51
А будет ли работать нужно ещё 12700 65536 чтоб в r0 что-то было
В R0 по любому что то будет :) Даже если 0 - всё равно сработает. Но вот 65536 - похоже ошибка, так как подозрительно похоже на десятичное число, но такое число в R0 не запишешь - запишется другое.

radist108
16.03.2022, 10:49
Только вот этот момент не очень понял:


000000 адрес
000100 000340 .....
000100 адрес :

000000 это РНП
000340 это PSW в ячейке РНП+2
000100 это значение адреса программы в РНП?

AFZ
18.03.2022, 07:45
Могу выложить кусок прошивки стартующей по 24 вектору может проще будет вам такой способ запуска одолетьА разве пуск по вектору 24 не софтовый? Мне казалось, что пуск делается в Halt-Mode с нулевого вектора в холт-модовом ПЗУ, а дальше программа сама разбирается, откуда надо запускать... Что, я совсем все забыл?

Alex_K
18.03.2022, 20:20
А разве пуск по вектору 24 не софтовый? Мне казалось, что пуск делается в Halt-Mode с нулевого вектора в холт-модовом ПЗУ, а дальше программа сама разбирается, откуда надо запускать... Что, я совсем все забыл?
Всё правильно помните. На МС1201.02 программа в ПЗУ на начальном старте считывает по команде RSEL(код 000020) безадресный регистр, младшие биты которого выставляются джамперами. По этим джамперам и осуществляется дальнейший старт.

radist108
21.03.2022, 17:21
У меня появился новый вопрос.
Почему при старте процессор 1806 после выдачи сигнала SEL сразу обращается к адресам 000170, а затем 172, будто у меня прерывание по сигналу HALT? Сама ножка HALT притянута через резистор к питанию. Внешний безадресный регистр =000000. Это из за бита 8=лог.1 в PSW?

Alex_K
21.03.2022, 18:51
Почему при старте процессор 1806 после выдачи сигнала SEL сразу обращается к адресам 000170, а затем 172, будто у меня прерывание по сигналу HALT?
Прерывание SEL170 это не только прерывание по входу HALT, но и исполнение команды HALT, её код равен 000000.

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


Это из за бита 8=лог.1 в PSW?
Когда процессор на ходится в режиме HALT (бит 8 в PSW установлен в 1), то он не реагирует на состояние ноги HALT.

radist108
21.03.2022, 19:12
Прерывание SEL170 это не только прерывание по входу HALT, но и исполнение команды HALT, её код равен 000000.

И как же мне быть, если я хочу, чтобы работа начиналась с нужного мне адреса?

Alex_K
21.03.2022, 20:06
Почему при старте процессор 1806 после выдачи сигнала SEL сразу обращается к адресам 000170, а затем 172, будто у меня прерывание по сигналу HALT?

И как же мне быть, если я хочу, чтобы работа начиналась с нужного мне адреса?
Диаграмму можете выложить?

radist108
22.03.2022, 01:05
Диаграмму можете выложить?
Выложу. Но у меня сперва вопрос про микросхемы памяти 573РФ5 и им подобные.
Я правильно понимаю, что входа-выхода у них работают так?

Вход адреса:
0 вольт - лог.0
5 вольт - лог.1

Выход данных (открытый коллектор через с подтяжкой):

коллектор открыт - 0 вольт с резистора - лог.0
коллектор закрыт - 5 вольт с резистора - лог.1

То есть перед записью микросхемы мне надо сделать инверсию в таблице и на адрес, и на данные?

MM
22.03.2022, 04:22
Выход данных (открытый коллектор через с подтяжкой):
У 573РФ5 выход 3 состояния. Но состояние +5в. с малой нагрузочной способностью.

У очищенной РФ5 вроде как FF состояние выхода, что в понятиях ф. Интел +5в.
Адрес начала массива у РФ5 - 0в. на всех адресных выводах.

Текст программы инверсии адреса и данных, от маркера ( адрес 004674, длина 14 слов ( дес. ) ) :
https://pic.maxiol.com/thumbs2/1647910017.2997899101..jpg (https://pic.maxiol.com/?v=1647910017.2997899101..jpg&dp=2)
Адрес начала массива - 020000, длина массива - 020000 ( 8 Кбайт ).

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

Вообще, что бы не иметь проблем с контентом ППЗУ, целесообразно шину памяти пропустить через АП9.

radist108
23.03.2022, 21:11
Появился новый вопрос:
Почему у ПЗУ в схеме на выходе данных такой дребезг?
https://i.ibb.co/fnhQ8LP/image.png (https://ibb.co/fnhQ8LP)

radist108
24.03.2022, 14:29
Вот причина: на ноге AD14 процессор в момент логической "1" выдаёт вот что:
Почему такое может происходить?
https://i.ibb.co/gvRD9Nt/CHj-Zc60i-AHc.jpg (https://ibb.co/gvRD9Nt)

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

Разобрался. Помехи шли с входной ноги 556РТ4. Она у меня отвечает за выбор RAM или ROM в зависимости от адреса.
Только непонятно, почему помеха идет от входной ноги (A2)? Подтяжка резисторами есть

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

Кажется, нашел проблему. У меня регистр адреса был подключен неправильно. Не в режиме триггера-защелки, а в режиме "пропустить насквозь/Z" по сигналу SYNC. Вечером проверю работу на ЛИ. Дребезг по шине пропал. Логические уровни улучшились

radist108
25.03.2022, 11:48
Итак мне удалось запустить схему. Выражаю огромную благодарность всем тем, кто мне помогал. Но ожидаемо возник еще ряд вопросов:

Безадресный регистр у меня на плате имеет значение 000000 (джамперы выкл.). Соответственно, следующим шагом должно начаться чтение с адреса 000000. С этого адреса у меня начинается область ПЗУ. Заполняю память 573РФ4 для младших байтов, а для старших оставляю пустую ПЗУ с нулями. С двух микросхем на шине получаю:

000000: 000001
000002: 000340
000004-000377: 000000
000400-...: 244 (команды NOP)

Прошивка для "для младшей" половину ПЗУ:
https://i.ibb.co/ZJFw8CX/Dump.jpg (https://ibb.co/ZJFw8CX)

Собственно, проблема: если в адресе 000000 ПЗУ я прописываю значение 000001, то чтение моей основной программы начинается не с адреса 000001, как мне казалось должно было быть (это тест, я знаю, что там должно быть 000340). Процессор берет значение из ячейки ПЗУ 000000 и записывает его в счетчик команд не все 16 бит подряд, а только его младший байт да еще и на место старшего байта PC. В итоге получаем в счетчике не 000001, а 000400 (0000 0001 0000 0000 вместо 0000 0000 0000 0001).
(на рисунке я подписал значения на шине адреса и на шине данных в момент измерения)

https://i.ibb.co/XVpXCW7/1.jpg (https://ibb.co/XVpXCW7)

Получается, я физически не могу стартовать программу с адреса, меньшего чем 000400. Но в документации про этот момент написано совсем иначе:

https://i.ibb.co/ZLTbgM7/70.jpg (https://ibb.co/ZLTbgM7)
Согласно ТО, R7:= (АВП). То есть 16-ти битный PC должен загружаться 16-ти битным значением из ячейки 000000 параллельным переносом, а не одной его половиной и со сменой мест.
Помогите пожалуйста прояснить этот момент

Hunta
25.03.2022, 12:35
Собственно, проблема: если в адресе 000000 ПЗУ я прописываю значение 000001
Адрес в PC (как и в первом слове вектра прерываний) должен быть чётным

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

И такое впечатление, что перепутаны ПЗУ младшего и старшего байта - тогда объяснимо, почему в PC пишется 400

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

Как мысль вслух - учитывая быстродействие современных ЭСППЗУ, вполне можно сделать вариант на одном байтовом ПЗУ :)

Alex
25.03.2022, 12:43
В случае нечётного адреса либо прерывание(PDP-11)... Либо игнор последнего бита(LSI-11)...
Как в случае 1806ВМ2 - не ведаю точно :(
1801ВМ2-игнор бита. Так что скорее всего адрес 1 воспримется как 0
Но по канону - адрес должен быть чётным.
Нечётный адрес используют только для байтовых инструкций, либо для определения типа процессора или просто грязный код, но на 1801ВМ3 таковой уже не прокатит, будет прерывание. Есть игрушки, кои идут на 1801ВМ2, но на 1801ВМ3 трапаются. Можно свой обработчик повесить ;)

radist108
25.03.2022, 13:01
И такое впечатление, что перепутаны ПЗУ младшего и старшего байта - тогда объяснимо, почему в PC пишется 400

Данные из ячеек читаются корректно и в соответствии с записью в ПЗУ. Я много раз проверял. Подписал на рисунке

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


Так что скорее всего адрес 1 воспримется как 0
Почему же тогда с записи в ПЗУ 000001 программа стартует с 000400, а с записи 000010 стартует с адреса 004000? (измерено)

Hunta
25.03.2022, 13:30
001 * 400 -> 400
010 * 400 -> 4000

Поменять местами ПЗУ не пробовали?

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

240*400 -> 1 010 000 000 000 000 120000 CMPB R0, R0 - никаких проблем при выполнении не будет и перейдёт к следующей ячейке

radist108
25.03.2022, 13:32
Поменять местами ПЗУ не пробовали?

Придется. Я бы это сделал сразу, но доказательством того, что ПЗУ находятся на своих местах, служит выдача на шину данных значения 000340 с адреса 000002

Hunta
25.03.2022, 13:35
Как я уже написал - такое ВПЕЧАТЛЕНИЕ. Я не утверждаю это. И проверить достаточно просто - поменять местами ПЗУ в панельках и посмотреть, какой адрес будет выставляться на шину процессорм.

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

Если перепутаны местами именно данные - вполне возможно. И если это так - по прикидками - проц должен выставить после первых двух действий на шину адрес или 0 или 1. Если выставит 0, то будет завис - так как 000001, считанный из ячейки 000000 - это команда WAIT, а с учётом приоритета 7 - никто прервать проц не сможет. А вот если выставит 0000001 - тут я даже не скажу, что будет - это надо знатоков ВМ2 трясти :)

AFZ
25.03.2022, 16:56
Коллеги, вы что-то путаете. Откуда вообще мог взяться адрес 000001 ? Нулевой адресный бит НЕ ДОЛЖЕН поступать на шину адреса памяти. Единственное место, где он используется для адресации памяти, это блокировка записи "неадресованного" байта при байтовой записи. Пишете четный байт, А0 блокирует запись нечетного; пишете нечетный - А0 блокирует запись четного. Ну, и еще вызывает на "больших" машинках Trap to 4 при попытке обращения к слову по нечетному адресу. И все. А то, что некоторые умельцы, используя тот факт, что LSI-11/03 и LSI-11/23 игнорируют обращение к слову по нечетному адресу, подсовывают туда что-то другое - это ни разу не правильное действие, в нормальных машинках этим не пользуются. Хотя бы из тех соображений, что перейди ты на машинку посерьезнее, и сразу же прилетит птица Обломинго. Хотя бы замени ВМ2 на ВМ3, и все, приплыли.

А при чтении байта по любому адресу, хоть четному, хоть нечетному, читается слово целиком, а процессор, по внутреннему значению бита А0 (а не тому,который выставлен на шину), разбирается, откуда ему брать байт - из [15:8] или из [7:0]. Ну, а при чтении слова по нечетному адресу, младшие машинки LSI-11 просто игнорируют А0, а старшие делают Trap to 4.

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

Другими словами говоря, у PDP-11 не 64 К байт адресуемой памяти, а именно 32 К слов. Да, с дополнительной возможностью доступа к отдельным байтам, тем не менее! В машинках общего назначения из них 28К отводится под память, 4К - под страницу ввода-вывода. В контроллерных приложениях, естественно, можно сделать и по-другому... НО память у них, по-любому, СЛОВНАЯ!

radist108
25.03.2022, 17:01
Пишете четный байт, А0 блокирует запись нечетного; пишете нечетный - А0 блокирует запись четного.

А как же тогда писать слово целиком?

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

Вообще адрес 000001 я внёс чисто для теста. Посмотреть, откуда начнётся чтение ПЗУ

AFZ
25.03.2022, 17:09
А как же тогда писать слово целиком?Командой записи слова. А0 берется во внимание только при записи БАЙТА.

Alex
25.03.2022, 17:32
PDP-11 - словная машина с длинной слова 16-бит...
И счётчик команд(R7 или PC) может быть только чётным. По сему там должен быть 0...
А что у нас по адресу 0... Инструкция с кодом 000001 WAIT
При этом слово состояния процессора 340 или 1110 0000.
У процессора высокий приоритет... и висим...
Это ежели всё работает как задумано...
Тогда откуда 400 берётся? Тут Huta прав, если байты перепутаны - 1 в 400 и превращается, а 10 в 4000 по восьмеричному...
А что у нас по адресу 400??? или 4000???
Возможно влетели в какую-то особенность именно 1806ВМ2, но врядли, так как он почти копия 1801ВМ2. Но это слово "ПОЧТИ"...
Насколько я помню, детально реверсу подвергли именно 1801ВМ2. На 1806ВМ2 столь детально не исследовали. Хотя могу и ошибаться...

Hunta
25.03.2022, 17:39
А что у нас по адресу 400??? или 4000???
Если судить по картинке, то по адресу 400 у них там 240 - или в младшем или в старшем байте. Если (как надо) в младшем - то NOP, а если в старшем (как есть некоторые подозрения) - то CMPB R0, R0 - вполне себе тоже не заковыристая команда, которая может шлёпать, пока адрес не кончится (ака 160000 или до максимума в ПЗУ +2) или пока не налетит на что то другое

Alex
25.03.2022, 17:44
Ну упрётся в дыру в адресном пространстве и трапнется...
А что у нас по вектору 4 ??? Опять 0....

Hunta
25.03.2022, 18:11
А в нуле 1 (WAIT) или 400 (BR 2), в 2 - то ли 340 (SWAB -(R0) и тут зависит от текущего R0), то ли 160000 (SUB R0, R0), а в 4 - 0 (HALT), всё, приплыли :)

radist108
25.03.2022, 19:11
Действительно, были перепутаны ПЗУ местами) Всё заработало. Всем еще раз спасибо. Пока разбирался, узнал много нового и нашел косяки на плате
Пора переходить к запаиванию ОЗУ

Hunta
25.03.2022, 19:26
Действительно, были перепутаны ПЗУ местами)
Вот - предположение было логичным :) Тем более - адрес то на них один и тот же прилетает, а вот данные с них - разные идут.. :)

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

Я сам сколько раз путал местами - особенно на Falcon-е - снячала фломастером написал - след, пока мокрый был - вроде виден, а высох - и тю тю. Всё собираюсь бумажки приклеить и всё как то руки не доходят :)

radist108
25.03.2022, 19:40
И цикл по совету MM тоже прекрасно работает:

start:
nop
br start

Так я проверил работу обоих ПЗУ сразу

radist108
27.03.2022, 01:52
Подскажите пожалуйста, как можно осуществить байтовую запись в ОЗУ? Хочу сделать цикл для проверки сигнала WTBT

MM
27.03.2022, 03:41
как можно осуществить байтовую запись в ОЗУ?
112737 000123 ( адрес ОЗУ ) 000774
Зацикленная программа байтовой записи числа 000123 в ( адрес ОЗУ ).

radist108
27.03.2022, 15:02
112737 000123 ( адрес ОЗУ ) 000774
Зацикленная программа байтовой записи числа 000123 в ( адрес ОЗУ ).
Спасибо! Работает. Получился цикл "чтение-модификация-запись"

Но у меня в режиме чтения сигнал RPLY снимается после снятия сигнала DIN через интервал длиной в T/2, а в режиме записи после сигнала DOUT через интервал длиной в 1T . То есть в два раза дольше. А как должно быть? И как это может влиять на быстродействие?

UPD: правильнее сказать так: PRLY у меня поднимается по фронту CLCO, но так как длительность DIN короче длительности DOUT, то и возникает такая разница. Чем можно объяснить такой эффект?

https://i.ibb.co/58Sr588/image.png (https://ibb.co/58Sr588)

radist108
28.03.2022, 12:30
И вот еще важный вопрос. Почему у меня на шине AD такие вот помехи? Шина подключена к драйверам 1533АП6 с подтяжкой к +5В через резисторы 3,3 кОм
После АП6 помехи становятся еще более ярковыраженнымми/
И как правильно использовать 1533АП6 на шине AD? Нужен ли высокоимпедансный режим в промежутках между циклами адрес/данные?

https://i.ibb.co/Wv7RfmH/Eh50-Nd-Kiskg.jpg (https://ibb.co/Wv7RfmH)

MM
28.03.2022, 13:51
на шине AD такие вот помехи?
Промаркируйте, пожалуйста, на осциллограмме нежелательные участки.
Что пляшет низ - тонковат общий - для быстрых серий ИС он нужен на типовой ток от единиц ампер ( не как для 561/176 серий ). Это в статике 1806ВМ2 малопотребляющий, а в динамике может хотеть до 1 а. по питанию и общему, иглами по ~5+ нс.
Обращаю внимание, то в 1806ВМ2 встроены 1564АП6, в отличии от 1801-й серии.

radist108
28.03.2022, 14:03
Обращаю внимание, то в 1806ВМ2 встроены 1564АП6, в отличии от 1801-й серии.
То есть их не нужно отдельно навешивать? А как же тогда направления Прием-передача переключать?

radist108
28.03.2022, 21:18
Разобрался. Это не помехи. Это на линии AD два сигнала Адрес и Данные идут один за другим и сливаются. Между ними нет интервала, потому что AR ставится не синхронно с SYNC, а позже, по спаду CLCO. А уровень у них разный, потому что они защелкиваются на разных микросхемах
Хорошо ли это SYNC и AR связывать вместе без задержки?

https://i.ibb.co/Wv7RfmH/Eh50-Nd-Kiskg.jpg (https://ibb.co/Wv7RfmH)

radist108
30.03.2022, 00:01
Появилась новая проблема. Не могу задать вектор начального пуска.
По сигналу SEL+DIN выставляю на шину AD значение 000400. Уровни нормальные и процессор должен их прочитать и записать в PC. Но следующими двумя циклами процессор пытается прочитать адреса 000 и 002 вне зависимости от того, какой ВНП был выставлен в цикле безадресного чтения. Насколько я понимаю, в первом цикле адресного чтения у меня на шине адреса должен выставиться (продублироваться) адрес SEL(15..8), но этого не происходит. В чем может быть проблема?

https://i.ibb.co/LPy5Vxd/image.png (https://ibb.co/LPy5Vxd)

Alex_K
30.03.2022, 19:14
Появилась новая проблема. Не могу задать вектор начального пуска.
По сигналу SEL+DIN выставляю на шину AD значение 000400. Уровни нормальные и процессор должен их прочитать и записать в PC. Но следующими двумя циклами процессор пытается прочитать адреса 000 и 002 вне зависимости от того, какой ВНП был выставлен в цикле безадресного чтения. Насколько я понимаю, в первом цикле адресного чтения у меня на шине адреса должен выставиться (продублироваться) адрес SEL(15..8), но этого не происходит. В чем может быть проблема?
На данной диаграмме не начальный пуск. Да, сначала читается безадресный регистр SEL, но потом чтение идёт из USER-режима, т.к. сигнал SEL не устанавливается. Если это отработка прерывания, то это прерывание USER-режима. При отработке любого прерывания, независимо от режима, всегда читается безадресный регистр SEL.

radist108
30.03.2022, 19:23
Это у меня не прерывание. Это самый старт
Как мне решить проблему? Процессор читает 000000 независимо от SEL на шине AD. А так как по адресу 000000 у меня пусто, то следующими шагами он читает адреса 170 и 172. И дальше все по новой

Alex_K
30.03.2022, 19:42
Это у меня не прерывание. Это самый старт
Не верю. Начальный пуск - это прерывание HALT-режима. И чтение его вектора происходит из памяти HALT-режима, а значит при выдаче адреса будет установлен сигнал SEL, а его там при чтении нету.

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


Как мне решить проблему? Процессор читает 000000 независимо от SEL на шине AD.
Так как схемы не видим, то и невозможно узнать, почему процессор читает одни нули. Каким образом линии AD сажаются на землю при чтении регистра SEL?

radist108
30.03.2022, 19:47
Кажется, нащупал проблему. Драйвера не пропускают SEL к процессору

Alex_K
30.03.2022, 19:52
Драйвера не пропускают SEL к процессору
Это которые АП? Тогда надо правильно переключать входы-выходы. А это не только адресные чтение и запись, но и чтение безадресного регистра SEL, и чтение вектора прерывания от устройства.

А зачем АП нужны? Очень большая нагрузка на выводы процессора?

radist108
30.03.2022, 20:33
Это которые АП? Тогда надо правильно переключать входы-выходы. А это не только адресные чтение и запись, но и чтение безадресного регистра SEL, и чтение вектора прерывания от устройства.

А зачем АП нужны? Очень большая нагрузка на выводы процессора?

Да, АП6. Нагрузки никакой. И какие лучше? У меня металлокерамика
И как правильно их переключать?

Alex_K
30.03.2022, 21:59
Да, АП6. Нагрузки никакой. И какие лучше? У меня металлокерамика
И как правильно их переключать?
Если у вас в качестве нагрузки только ПЗУ и ОЗУ, то зачем вам АП6? В УКНЦ к ЦП прямо подключены контроллер ОЗУ, каналы связи, последовательный порт и сетевая карта, к ПП четыре ПЗУ, контроллер ОЗУ, каналы связи, и только за буфером находится один контроллер и внешние разъемы.
А так надо правильно переключать направление к линиям адреса-данных. При выдаче адреса, выводе данных - от процессора, при чтении данных, регистра SEL, вектора - к процессору. Но драйвера немного замедляют шину, так что придется задерживать SYNC, AR и RPLY, это чуть снизит быстродействие.

radist108
30.03.2022, 23:31
А между циклами ставить в Z-состояние?

radist108
31.03.2022, 11:23
Нашел проблему. Почему-то драйвер 1533АП6 не передает сигнал от B к А. Сигнал DIN подается на вывод 1 на 10 мкс. Вывод 19 постоянно на земле. На входе справа есть сигнал, а на выходе слева его уже нет. Почему так может быть? С обоих сторон есть подтяжка на +5 вольт

https://i.ibb.co/DGfCwz7/image.png (https://ibb.co/DGfCwz7)

Sandro
31.03.2022, 11:46
Потому, что ты смотришь не осциллографом или хотя бы логическим анализатором, а вольтметром?

radist108
31.03.2022, 11:51
И анализатором, и осциллографом смотрел)

Sandro
31.03.2022, 13:40
Тогда странно. Проверять АП. Рабочая ли, действительно ли АП6, а не, например, АП16. Точно ли те линии подключены. По доступной нам информации можно только гадать.

radist108
31.03.2022, 17:57
Тогда странно. Проверять АП. Рабочая ли, действительно ли АП6, а не, например, АП16. Точно ли те линии подключены. По доступной нам информации можно только гадать.

Похоже, что не рабочая. И совсем другая.
Отсюда вопрос. Можно ли вешать на шину несколько АП6 не переводя их в высокоомное состояние?

Alex_K
31.03.2022, 19:17
Отсюда вопрос. Можно ли вешать на шину несколько АП6 не переводя их в высокоомное состояние?
Ещё раз повторюсь. Между процессором, ПЗУ, ОЗУ и регистром SEL никакое АП6 не нужно. Она может понадобится для подключения шины МПИ к другой аппаратуре.

radist108
31.03.2022, 19:48
Ещё раз повторюсь. Между процессором, ПЗУ, ОЗУ и регистром SEL никакое АП6 не нужно. Она может понадобится для подключения шины МПИ к другой аппаратуре.
Понял. А насколько эта аппаратура должна быть "другой"? Если это, например, дополнительные платы на шине с кнопками, индикацией или контролером UART, нужны ли АП6? В чем вообще их предназначение?

UPD: в общем проблема в чтении процессором ВНП в том, что две параллельно стоящие на шине АП6 не дают упасть сигналу до низкого уровня логического единицы. Так что при подключенных параллельно одной ИР33 и двух АП6 сигналы работают в диапазоне +5..+1 вольт. Может микросхемы АП6 бракованные, может они в паре очень сильно притягивают шину к питанию, так что у одной ИР33 не получается провалить сигналы до нуля

Hunta
31.03.2022, 21:07
Классический вариант шины у DEC предполагает ОК, а не Z состояние

radist108
01.04.2022, 19:11
Убрал АП6 и всё заработало! Спасибо за совет!
Продолжаю развивать успех

radist108
01.04.2022, 22:33
Возник еще один вопрос.
У меня есть два регистра адреса ИР33. А регистра данных нет. Можно ли выходы ОЗУ и ПЗУ вешать сразу на шину AD процессора? Или нужен какой-то трансивер по приему-передаче данных для памяти?

Sandro
02.04.2022, 06:49
Может, ты всё-таки будешь выкладывать схемы электрические принципиальные? С твоих слов вообще уже непонятно, что ты там себе напял.

radist108
02.04.2022, 12:57
Может, ты всё-таки будешь выкладывать схемы электрические принципиальные? С твоих слов вообще уже непонятно, что ты там себе напял.

Будет. И схема, и блок схема. Как только макет заработает

radist108
02.04.2022, 17:56
Пройден важный этап. Запаяна ОЗУ 537РУ8 и корректно работает на запись и на чтение.
Стоит ли соединять электрически выход SYNC вход AR процессора, или стоит задержать генерацию AR послу SYNC на T/2? Прямое соединение SYNC и AR даёт процессору паузу на шине AD между выдачей адреса и выдачей данных длительностью в T/2

https://i.ibb.co/9cxGQzP/image.png (https://imgbb.com/)

radist108
03.04.2022, 00:25
Внешний вид моего макета на текущий момент:

https://i.ibb.co/XCxG3qd/20220403-002112.jpg (https://ibb.co/XCxG3qd)

Woxem
04.04.2022, 06:32
Вы используете Разъем снп34с-90р?

radist108
04.04.2022, 10:34
Вы используете Разъем снп34с-90р?
Закладывал его для установки в кросс-плату. Но будет другой, под шлейф

radist108
04.04.2022, 13:06
Выкладываю блок-схему промежуточного рабочего варианта:

https://i.ibb.co/m0XJyQQ/Blok-skhema.jpg (https://ibb.co/m0XJyQQ)

AFZ
15.04.2022, 04:57
Убрал АП6 и всё заработало! Спасибо за совет!
Продолжаю развивать успехКак я понимаю, ответ на вопрос, заданный в личку, уже не нужен. Тем не менее, выскажу некоторые соображения.

1. 1806-й микропроцессор ТТЛ-несовместим - у него другие пороги лог. 0 и лог 1. То есть, лог 0 без проблем, а вот лог 1 у него при 5-вольтовом питании около 3.5 В. И, таким образом, при прямом подключении 74LS/ALS, т.е. отечественных 555-й или 1533-й серии возможны (и весьма вероятны) глюки. В некоторой степени может помочь "подтяжка" соответствующих линий резисторами к +5В, но тоже без 100%-й гарантии. А вообще, если ставить шинные драйверы в схему с 1806-м микропроцессором, то они должны быть из серии 74НС/НСТ, серий наших клонов я не запоминал.

2. 1806ВМ2 не имеет нижнего предела тактовой частоты. Поэтому имеет смысл подключить вместо тактового генератора тумблер с антидребезгом и разбирать, что там происходит, по полутактам.
Антидребезг следует делать на RS-триггере - берем два элемента из 74НС00, собираем из них RS-триггер,входы подтягиваем к +5В резисторами 3.3-4.7кОм к +5В и подключаем их к крайним контактам тумблера, перекидной контакт тумблера цепляем на землю, и вперед!

Vasily_A
15.04.2022, 08:55
а подключение напрямую (возможно с подтяжкой к +5) в 5в толерантным альтерам (например EPM3032 или EPM3256) насколько корректно?
основная идея - проц согласовать с 3.3в дешевой статикой 16х256к с минимумом корпусов, с заливкой в эту статику образа пзу до старта проца (или конечным автоматом, но ресурсов мало в этих cpld, или мелким контроллером с spi флешки)

плюс решения с cpld - по джитагу баундари сканом можно всё помотреть и отладить потактово. этакий встроенный логический анализатор.

AFZ
15.04.2022, 13:56
а подключение напрямую (возможно с подтяжкой к +5) в 5в толерантным альтерам (например EPM3032 или EPM3256) насколько корректно?Трудно сказать, насколько оно корректно. Вопрос в том, как там сделаешь выход. Если выход с тремя состояниями (низкий около нуля, высокий около 3.3В, то, скорее всего, не пойдет. Если сделать выход с открытым коллектором (стоком), то должно пойти, но икс его три, как там будет с быстродействием? Для приличного быстродействия нужна подтяжка 1 кОм или меньше, но для 1806 это слишком большой ток. Возможно, хорошим решением будет развязка 1806 и 3-вольтового хозяйства драйверами 74НСТ245, только надо очень аккуратно и без ошибок развести управление этими драйверами. Тогда 5-В толерантность нужна только для того, чтобы 3-вольтовая м/с не нагружала 5-вольтовый выход драйвера 74НСТ245 при передаче от 1806 в сторону 3-вольтовых м/с, а при передаче от 3-вольтовых м/с к 1806 использовать обычный 3-вольтовый двухтактный каскад - 74НСТ245 нормально съест лог. 1 в виде 3.3-В сигнала, а на выходе даст нормальный 5-вольтовый сигнал. То есть, если правильно учесть все задержки переключения, все должно быть ОК.

Vasily_A
15.04.2022, 15:58
То есть именно 1806 относительно сложно интегрировать, 1801вм1-2-3 заметно проще выходит?

AFZ
16.04.2022, 14:41
Естественно. 1801 заявлен ТТЛ-совместимым и все м/с ТТЛ и ТТЛ-совместимые работают с ними вполне нормально. А 1806 - 5-вольтовый КМОП. И нормально с ним работают только такие же 5-вольтовые КМОПы. То, что за бугром называется 74НС. Ну, и их разновидность - ТТЛ-совместимые КМОПы, то, что за бугром зовут 74НСТ, а как у нас, я не запоминал.

ra3qdp
16.04.2022, 22:02
посмотрите - чем отличаются HC и HCT.

radist108
25.04.2022, 15:46
Новый вариант со всеми исправлениями отправился в производство!
https://i.ibb.co/LCLSxHT/Computer-v-1-5.jpg (https://ibb.co/LCLSxHT)

Woxem
27.04.2022, 20:07
А схему можно

radist108
27.04.2022, 20:15
А схему можно

Схема обязательно будет. Как только я ее перерисую начисто для финального варианта. В этом варианте я буду испытывать работу прерываний.
Еще я планирую освоить режим прямого доступа к памяти и захват "видимой" части через окно магистрали. Хоть пока и не очень четко себе представляю, зачем нужны эти два режима и какая от них польза

Woxem
27.04.2022, 21:32
Отладка в основном а захват видимой части нужен для работы с большим количеством памяти ОЗУ через систему листинга

Alex
28.04.2022, 08:52
Схема обязательно будет. Как только я ее перерисую начисто для финального варианта. В этом варианте я буду испытывать работу прерываний.
Еще я планирую освоить режим прямого доступа к памяти и захват "видимой" части через окно магистрали. Хоть пока и не очень четко себе представляю, зачем нужны эти два режима и какая от них польза

Польза от прямого доступа памяти - очень большая ;)
Процессор может заниматься своими делами, а тут раз, и в памяти появляется блок данных. Как появился - происходит прерывание. Хотя возможны всякие варианты ;)
Контроллеры, кои передают данные(с дисковых(SD-карт, нынче)(блоковых) накопителей)
Режим окна нужен так же при создании многопроцессорных систем, при использовании при обмене очень большим объёме информации, например видеоадаптер. И вообще, со всем, что подскажет воображение :)
В реальности - на 1806ВМ2 не так много было разработано. Из получивших широкую известность - Союз-Неон.(но их мало выпустили)
Если хочется посмотреть на устройства с ПДП - то тут можно только на базе 1801ВМ1 - КМД(самое массовое). Схемы и описание есть в интернете. Единственно, надо помнить, что на нём неверно сделана дешифрация адреса шины. Но она работает :) . Хотя для меня загадка, почему только КМД делали, можно было по образу и подобию - много чего наклепать.(мультиплексоры, АЦП, контроллеры всяких дисков, лент, сети и прочая...)

Hunta
28.04.2022, 10:17
Польза от прямого доступа памяти - очень большая
Процессор может заниматься своими делами
Нужно только помнить, что не

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

Не, безусловно, если сделать двухпортовую память - то можно и работу процессора тормозить меньше или вообще не тормозить, но даже в таком сценарии будет своя плата - усложнение и/или удорожание блока памяти.


почему только КМД делали, можно было по образу и подобию - много чего наклепать
Усложнение схемотехники. Даже тут, на форуме, большая часть народа пытается разного рода задачи решать программно, а не аппаратно. Кстати, использование в поделках разного рода микроконтроллеров (stm32, ардуино и тэдэ) - оно из той же серии. И на мой взгляд, если поделка - логически сложное устройство, то смысл как бы есть, но когда для всякой простоты к месту и не к месту лепят микроконтроллеры... скорее всего это говорит о том, что у человека нет соотвествующих знаний или способностей (что, кстати, само по себе - ещё ни о чём не говорит - конкретный пример - я :) )

Woxem
28.04.2022, 10:26
А как подружить 588вн1 контроллер прерываний с 1806вм2 так чтобы был полный набор прерываний от 588вг1

Alex
28.04.2022, 14:24
Нужно только помнить, что не

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

Не, безусловно, если сделать двухпортовую память - то можно и работу процессора тормозить меньше или вообще не тормозить, но даже в таком сценарии будет своя плата - усложнение и/или удорожание блока памяти.


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

Ну ресурсов на передачу у процессора через ПДП уходит сильно менее, чем если тащить эти данные программно... Ведь надо выбрать кроме данных ещё программный код. Ещё интереснее и вкуснее, если есть кэш :) Пример печальки с программным методом пресловутый МX.(если есть прерывания, то :( )

По поводу stm32, ардуино и тэдэ, люди решают свои узкие задачи. И ведь выходит :) Например - ремулятор.
Почему без ПДП?? Так как с ПДП схемотехника малость сложнее... И в большинстве случаев и так сойдёт.
Если уж даже в ДВК окромя КМД никаких других контроллеров с ПДП не было (ну примерно в 99% ДВК, конечно встречались всякие интересные экземпляры, но их было единицы)

Woxem
28.04.2022, 17:06
У меня рукодельный модуль адаптера процессором связи используется для отладки любого qbus оборудования он работает только в пдп

Alex
28.04.2022, 17:57
Интересно :)
Можно чуть подробнее... Или хотя бы ссылочку если есть...

Woxem
29.04.2022, 11:29
Ни чего от него нет ни схем ни драйверов зато есть несколько программ тестирования ОЗУ ПЗУ рпзу и процессора через него. Знаю где он живёт на шине и какими командами оперирует, и на этом все. Схемы собранны на макетных платах

Alex
29.04.2022, 16:53
Ну а хотя бы фото или ссылку на них...
Я полагаю, что не только мне, но и многим многоуважаемым донам было бы просто интересно взглянуть на фото.
Возможно, что кто-то про что-то вспомнит или спросит из знакомых, кто может что-то знать.
Ведь устройство весьма интересное. И ещё, в программах можно глянуть кто и где их писал...

radist108
29.04.2022, 20:12
А можно ли на 1806 теоретически сделать простейшую операционку с выводом на какой-нибудь знакосинтезирующий дисплей или тв?

MM
29.04.2022, 20:37
А можно ли на 1806 теоретически сделать простейшую операционку с выводом на какой-нибудь знакосинтезирующий дисплей или тв?
Да, можно.
Но объем новодельного текста программы будет немаленький.

Проще всего взять ОС БК11М ( самый первый вариант ) и пропатчить участок вывода на программый терминал - ЕМТ63 ( ? ).
Если М-ЭВМ не имеет точки входа для вывода символов ASCII - это еще сложнее, надо делать вариант драйвера дисплея, как в Э-85.

С клавой - сложнее, надо "городить огород" или пользоваться готовой клавой , например 15-ВВ-097 ( от дисплея 15-ИЭ-00-013 ).

Что делать, если клава выдает "экзотические коды", например, если она PS/2 ?

AFZ
01.05.2022, 07:23
А можно ли на 1806 теоретически сделать простейшую операционку с выводом на какой-нибудь знакосинтезирующий дисплей или тв?Зачем? Если что-то делать на 1806ВМ2, то, не считая копии Союз-Неона, имеет смысл только склепать аналог платы МС 1201.02-01. Ну, или без -01, но, спрашивается, кому сейчас нужен интерфейс ГМД-7012, если этих 7012 в рабочем состоянии хорошо, если десяток найдется...

А так, все просто: плата, на ней 1806ВМ2, несколько драйверов серии 74НСТ доя перехода к трехвольтовым уровням, одна ПЛИС среднего уровня, на которой сделан аналог 1801ВП1-013 для статической памяти в 32К слов с необходимым управлением для обычной работы и работы в Halt-Mode, а также переключения между ними. Дополнительно, на той же ПЛИС собрать UART-ы для подключения терминалов, одного или двух, возможно, собрать параллельный интерфейс для принтера и/или для перфолетночного оборудования. Да, забыл, еще надо прицепить ПЗУ-ху, 1801РЕ2-055 или -279, ну, или прицепить какую-нибудь мелкую флешь с 3-вольтовой стороны, в которую прописать содержимое обеих ПЗУ-х РЕ2, с переключением "на выбор".

Такое, ИМХО, свободно влезет на "половинку", да еще и место останется, например, AZ туда добавить... :)

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

Добавлю. То же самое имеет смысл проделать и с 1801ВМ2. Сделать "половинку" на этом микропроцессоре, но с применением современной базы - ПЛИС, статической RAM, флеш-памяти и пр. С удовольствием поменяю все свои 1201.02 на такие половинки...

radist108
13.08.2022, 11:40
Заработал новый макет и возник вопрос:
Какое пространство лучше сделать начальным с адресом 000000? ОЗУ или ПЗУ?

https://i.ibb.co/MhCtbJd/mn-K7-A7dpc-S4.jpg (https://ibb.co/j5rQdjt)

Hunta
13.08.2022, 12:02
Какое пространство лучше сделать начальным с адресом 000000? ОЗУ или ПЗУ?
Смотря под какие цели. Специализированный контроллер - скорее всего ПЗУ. Плата общего назначений - ОЗУ

radist108
13.08.2022, 12:18
Смотря под какие цели. Специализированный контроллер - скорее всего ПЗУ. Плата общего назначений - ОЗУ

Ну вообще это "Developement board", то есть задачи могут быть какими угодно, но базовые функции микро-ЭВМ должна выполнять
И в чем разница выбора ОЗУ или ПЗУ в начале адресного пространства?

Hunta
13.08.2022, 12:24
В основном - в векторах прерывания. Их зона - начало адресного пространства. Скажем, тот же консольный порт - 60 и 64, таймер - 100. И если предполагается загрузка каких-то традиционных ОС (типа RT-11) - то без вариантов - в начале АП - ОЗУ

radist108
13.08.2022, 12:44
И если предполагается загрузка каких-то традиционных ОС (типа RT-11)

Этого точно не будет. Видимо, надо ставить ПЗУ вперёд

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

И еще вопрос. Как правильно делать процессору RESET?

AFZ
18.08.2022, 10:44
И еще вопрос. Как правильно делать процессору RESET?Упроцессоров PDP-11 и их клонов ДВА сброса. Обычный К СБРОС Н (B RESET L) сбрасывает только периферию, и то не всю. Полный всеобщий сброс выдается двумя сигналами - К ПОСТН В (B DCOK H) и К ПИТН В, как по-ангельски не помню. В моей любимой книжке 3.858.382 ТО этот сброс называется "сброс микроканала". Питание должно подаваться при низком уровне обоих этих сигналов, через несколько десятков мкс после того, как питания установятся, должен быть выдан К ПИТН В, а еще через 70 мс (милли, не микро) - К ПИТН В. Некоторым (но не всем) процессорам хватает и более короткой задержки между ПОСТН и ПИТН, вплоть до нескольких мкс, но это не гарантировано поставь другой процессор, и может не хватить.


Видимо, надо ставить ПЗУ вперёдТогда придется смириться с фиксированными векторами прерываний. Тут еще под ногами будет путаться HALT MODE процессоров 1801/1806 серий. По-хорошему бы добавить туда ПЗУху с программой HALT MODE и ОЗУшку для нее... Это было бы правильно вне зависимости от количества памяти и назначения платы. Но это не так-то и просто...

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

Radon17
19.08.2022, 20:35
как по-ангельски не помню
https://www.phantom.sannata.org/viewtopic.php?f=33&t=40236

radist108
23.08.2022, 15:06
И еще я не нашел в описании, что будет делать процессор, если не придет сигнал AR? То есть, если я адресовался к несуществующему устройству или регистру и вход AR в низкий уровень не перешел, то что произойдет? прерывания у процессора на этот случай нет. Так и будет на шине висеть адрес до бесконечности?

Hunta
23.08.2022, 15:28
Если смотреть на оригинал шины (QBus), то там в принципе не предполагается какой-либо реакции после того, как выставлен адрес и SYNC - задающее устройство просто ждёт некоторое время, после чего выставляет DIN или данные+DOUT. Имещиеся на наших процах сигналы AR, насколько я понимаю, возможность ускорить транзакцию - то есть устройство опознало адрес, выставило AR и все весело поскакали дальше. Если же за определённый промежуток времени (см описание) сигнала AR в проце не прилетело - он просто продолжает транзакцию.

radist108
23.08.2022, 16:03
AR в проце не прилетело - он просто продолжает транзакцию
То есть все равно отправит данные?

Hunta
23.08.2022, 19:21
То есть все равно отправит данные?
Или получит. Проблема будет только если RPLY не прилетит (но даже тут на каких-то наших процах есть нюансы). Хотя есть такой проц - T11 (1807ВМ1) - у него встроенной реакции на неприлёт RPLY нет - нужна внешняя схема

radist108
24.08.2022, 13:04
Готовится к производству плата внешнего 16-ти битного регистра со светодиодами

https://i.ibb.co/7VLJ4cG/reg.jpg (https://ibb.co/rMNGsPZ)

Hunta
24.08.2022, 13:30
Советую сделать его отклик по адресу 177570(8)

radist108
24.08.2022, 13:56
Советую сделать его отклик по адресу 177570(8)
Почему именно на этот адрес? И для чего он нужен? Мне этот регистр нужен для индикации, что где происходит. Для отладки программ и правильности схемы

Hunta
24.08.2022, 14:16
Это исторически (а может и не исторически) сложившийся стандартый адреса регистра переключателей (чтение) и дисплейного регистра (запись)

В целом же, ценность платы (не для Вас) возрастёт, если всё таки придерживаться стандарта - RAM внизу, ROM наверху (и желательно на странице в/в в диапазонах 165000-165777 173000-173777), а если будет такой регистр - то на стандартном адресе - и тогда можно будет запускать стандартный софт - в частности - тесты из XXDP

Скажем мне плата с ROM с начала адресного пространства не интересна и скорее всего, таких людей будет не я один

radist108
24.08.2022, 14:23
Скажем мне плата с ROM с начала адресного пространства не интересна и скорее всего, таких людей будет не я один
Попробую сделать переключатель на плате, чтобы ПЗУ и ОЗУ менять местами

Контроллер этот задумывается не под операционные системы, а под какую-либо одну единственную функциональную программу. Вряд ли кто сейчас на этом процессоре в современных разработках станет использовать софт для старых ЭВМ

Hunta
24.08.2022, 14:44
Вряд ли кто сейчас на этом процессоре в современных разработках использует софт для старых ПК
Ретрохобби :)

radist108
24.08.2022, 15:01
Вряд ли кто сейчас на этом процессоре в современных разработках использует софт для старых ПК

Ну для увеличения массовости проекта можно добавить функцию такую)

Xrust
26.08.2022, 19:36
Вряд ли кто сейчас на этом процессоре в современных разработках станет использовать софт для старых ЭВМ
Как раз наоборот. Вряд ли кто-то будет что-то новое разрабатывать. А если есть куча готового софта - почему это не использовать?

Hunta
26.08.2022, 19:54
Вряд ли кто-то будет что-то новое разрабатывать

Аха :) (http://www.kpxx.ru/soft/Utils/CFUtil)

radist108
26.08.2022, 20:08
Ну в общем добавил в новый макет перемычку, меняющую ОЗУ и ПЗУ местами

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


Аха
Что сие?

Hunta
26.08.2022, 20:27
Что сие?
Утилита (в первую очередь) для тестирования CF карт. Хотя можно и образы создавать - но учитывая, что она была написана под RT - максимальный размер образа немного меньше 32 Мб

radist108
04.10.2022, 16:48
Есть проблема. И я ее не решал с самого начала. 1806 очень редко стартует с первого раза. Включение начинается с нескольких тысяч циклов, где он крутится в прерывании. Потом пауза. И либо он начинает выполнение программы с указанного адреса, либо вообще ничего не происходит и приходится выключать и включать питание, пока не заработает.
Как повысить стабильность работы процессора?

Собственно, в начале глючные циклы, а затем старт программы:

https://i.ibb.co/MPVGkMd/1.jpg (https://ibb.co/MPVGkMd) ъ


Пауза между этими циклами и нормальным стартом:

https://i.ibb.co/kQYytkk/2.jpg (https://ibb.co/kQYytkk)


Сам цикл, в котором крутится процессор после включения

https://i.ibb.co/Z8tnM6M/3.jpg (https://ibb.co/Z8tnM6M)

radist108
17.11.2022, 12:19
Сегодня заработал более-менее стабильно работающий макет платы. Правда где-то через 30-50 циклов светодиоды дают сбой. Может не загореться один светодиод или половина всей линейки. И снова 30-50 циклов нормальной работы. Буду добиваться полной стабильности
Всем, принимавшим участие, огромное спасибо! Буду держать в курсе событий

Видео работы:
https://www.youtube.com/watch?v=RJfNVkFPpcI&ab_channel=%D0%90%D0%BD%D0%B4%D1%80%D0%B5%D0%B9%D0 %98%D0%B2%D0%B0%D0%BD%D0%BE%D0%B2

radist108
02.12.2022, 19:51
Вылечил. Убрал RC-цепь на задержку старта процессора

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


Есть проблема. И я ее не решал с самого начала. 1806 очень редко стартует с первого раза. Включение начинается с нескольких тысяч циклов, где он крутится в прерывании. Потом пауза. И либо он начинает выполнение программы с указанного адреса, либо вообще ничего не происходит и приходится выключать и включать питание, пока не заработает.
Как повысить стабильность работы процессора?

Вылечил. Убрал RC-цепь на задержку старта процессора

radist108
18.12.2022, 12:36
Сделал первое видео:


https://youtu.be/6uj-YmG6k9c

radist108
29.12.2022, 00:24
Записал новое видео:


https://youtu.be/JKXwnBDaz38