Просмотр полной версии : Наладка ЭВМ минимальной конфигурвции на 1801ВМ2 (MC 1201.02)
Всем привет! Собрал такую плату.
77450
Процессор 1801ВМ2, Последовательный порт 1801ВП1-065, ПЗУ 1801РЕ2-055, ОЗУ.
Карта памяти выглядит так:
77451
https://pic.maxiol.com/thumbs2/1656961652.2152142606.pdp11.png (https://pic.maxiol.com/?v=1656961652.2152142606.pdp11.png&dp=2)
77530 - проект в Quartus II
77524 - схемы ПП.
Плата запускается и работает неустойчиво.- пофикшено, виновата была схема пуска. Процессор греется под 60С+. После прогрева начинает работать устойчивее. Но тест Т4 (а так же Т5 и Т6) не проходит:T4- побежден, T5 и T6 естественно не пойдут без соответствующего железа.
==================== Протокол начат: 04/07/2022 23:20:21 =====================
T1
*** ТЕСТ СИСТЕМНОЙ ПАМЯТИ ***
ПРОВЕРКА ОКОНЧЕНА
@T2
*** ТЕСТ ОЗУ ***
ПАМЯТЬ 020000 -157776
ПАМЯТЬ 000600 -017776
ПРОВЕРКА ОКОНЧЕНА
@T3
*** ТЕСТ ПРЦ ***
ПРОВЕРКА ОКОНЧЕНА
@T4
*** ТЕСТ ТЕРМИНАЛА ***
ВВЕДИТЕ СЛЕДУЮЩИЕ СИМВОЛЫ:
1 2 3 4 J C U K
ПРОВЕРКА ОКОНЧЕНА
@
================== Протокол остановлен: 04/07/2022 23:20:50 ==================
Что означает эта ошибка? Как проверить? Есть ЛА и осциллограф.
А прерывание от таймера отключено?
Я в свое время намучился с этими незапланированными прерываниями, но в моем случае процессор был не железный, а HDL-модель от реверса, выполненного VSLAV, и в этой модели были ошибки. В данном же случае процессор настоящий, следовательно нужно искать источник прерывания.
forth32, прерывания от таймера не заведены в процессор. Прерывания идут только от порта терминала и ошибка возникает при тестировании т4 в момент нажатия клавиши, а так же иногда спонтанно.
Надо, наверное, выложить схемы. Осложняет жизнь то, что половина схемы в EasyEDA, а половина в Квартусе.
Попробуй меньшую частоту на процессоре малоли дефектный
К сожалению, определить, по какому вектору пришло прерывания, невозможно. Обработчик тестов заполняет всю область векторов одним и тем же вектором. Он указывает на процедуру, выводящую это вот сообщение и потом передающую управление обратно в пульт. Можно только определить, какая выполнялась инструкция в момент прерывания - ее адрес остается в пользовательском стеке.
Без схемы тут, конечно, обсуждать нечего. Но и со схемой - разбираться в чужой схемотехнике тоже нужно время и желание.
Попробуй меньшую частоту на процессоре малоли дефектный
Частота и так занижена, процессоры пробовал переставлять - видимо не в этом дело.
- - - Добавлено - - -
К сожалению, определить, по какому вектору пришло прерывания, невозможно.
Можно же при помощи ЛА посмотреть, что было в этот момент на шине?
Можно же при помощи ЛА посмотреть, что было в этот момент на шине?
Не представляю, как это сделать. Момент входа в прерывание снаружи не виден. Разве что попробовать поймать момент выборки вектора из младших адресов ОЗУ.
Насколько я понял, это не аппаратное прерывание, поскольку из всех источников прерываний к процессору подключен только ИРПС.
Приаттачил схему в первом сообщении.
Процессор греется под 60С+
Он не должен так грется.
Приаттачил схему в первом сообщении.
Не увидел где WRQ используется.
WAKI в активном состоянии.
Не увидел где WRQ используется.
WAKI в активном состоянии.
WAKI выключен - притянут к земле. WRQ не используется.
Он не должен так грется.
Возможно, я слишком сильно к +5В выводы процессора притянул? Но вроде везде такой номинал используется и ничего.
Поэкспериментировал с питанием платы. Если питать плату только от USB (мощный порт 1А), то на выводах процессора 4.6В. Если запитать от дополнительного источника питания (5.3В, 5А), то на процессор приходит 5.1В, но на стабильности это никак не сказывается.
- - - Добавлено - - -
Насколько я понял, это не аппаратное прерывание, поскольку из всех источников прерываний к процессору подключен только ИРПС.
Да, но эта ошибка появляется только после запуска одного из тестов Т4-Т6 и затем повторяется спонтанно. Что бы это могло значить?
WAKI разве не отрицальной логики, то есть - выключен - это к +5В ?
- - - Добавлено - - -
эта ошибка появляется только после запуска одного из тестов Т4-Т6 и затем повторяется спонтанно
Что бы сказать однозначно, надо смотреть, что делают тесты, но, на вскидку, если они сбрасывают приоритет процессора, а вот не устанавливают максимальным - всё может быть :)
WAKI разве не отрицальной логики, то есть - выключен - это к +5В ?
Вот из более-менее свежего описания 1806ВМ2
77460
В старых мануалах эти выводы вообще называются резервными.
1806ВМ2
Так стоит то 1801ВМ2, а не 1806ВМ2
Посмотрел Шахнова, там отрицательная полярность
- - - Добавлено - - -
Из модели Vslav-а
input pin_waki_n, // window access granted
Суффикс _n - значит отрицательная логика
Hunta, я выразился неправильно. Но чтобы процессор имел доступ к "окну", на WAKI нужно подать 0. Поскольку процессор в системе один, пусть 0 будет всегда, а WRQ не используется.
Но чтобы процессор имел доступ к "окну", на WAKI нужно подать 0.
Да.
Поскольку процессор в системе один, пусть 0 будет всегда, а WRQ не используется.
Где логика?
MiX, а что не так с логикой?
MiX, а что не так с логикой?
Если процессор один, зачем ему окно?
Если процессор один, зачем ему окно?
Два килобайта на дороге не валяются.
- - - Добавлено - - -
Поэкспериментировал сейчас с WAKI. Похоже, он неплохо притянут к земле. Подав на него +5В напрямую, я заставил систему наглухо зависнуть. Через резистор 2.2кОм потенциал на WAKI удалось поднять только до 1.7В.
Разобрался я, почему нестабильно процессор работал. Схема запуска на attiny13 была виновата. BODlevel был выставлен на 4.3В и были ложные срабатывания.
С РЕ2-055 в качестве ПЗУ машина стартует и худо-бедно работает. Решил попробовать запуститься с двух EEPROM W27C512-45. Подготовил образы, прошил. Скорректировал формирование сигнала /RPLY и управляющего сигнала шинного формирователя на чтение. Не стартует. Подключил ЛА.
Вот что показывает ЛА при нормальном запуске на РЕ2.
https://pic.maxiol.com/thumbs2/1655658367.2152181782.re2.png (https://pic.maxiol.com/?v=1655658367.2152181782.re2.png&dp=2)
А вот что происходит при попытке запуска на W27C512. Чушь какая-то.
https://pic.maxiol.com/thumbs2/1655658411.2152181782.eeprom.png (https://pic.maxiol.com/?v=1655658411.2152181782.eeprom.png&dp=2) https://pic.maxiol.com/thumbs2/1655659536.2152181782.eeprom1.png (https://pic.maxiol.com/?v=1655659536.2152181782.eeprom1.png&dp=2)
Левые данные на вход ВМ2?
Слишком быстро снимается RPLY?
Ну и как вариант - был у нас тут прецедент с самоделкой - местами low и high byte ПЗУ перепутаны были
Могу только сказать, что у меня ВМ3 и с одной W27C512 (ну понятно, что всё скрыто внутри CPLD) отлично работает.
Вот это вот безадресное чтение не пойму, откуда берется?
https://pic.maxiol.com/thumbs2/1655660695.2152181782.eeprom2.png (https://pic.maxiol.com/?v=1655660695.2152181782.eeprom2.png&dp=2)
- - - Добавлено - - -
Левые данные на вход ВМ2?
Возможно.
Слишком быстро снимается RPLY?
Вряд ли. Частоту специально понизил до 1МГц.
Ну и как вариант - был у нас тут прецедент с самоделкой - местами low и high byte ПЗУ перепутаны были
Я первым делом попробовал поменять местами. Видимо дело не в этом.
На всякий (вряд ли конечно этот) случай спрошу - а данные в ПЗУ записаны инвертированные? Или FPGA их инвертирует при необходимости?...
Hunta, ПЛИС инвертирует данные пропуская их через себя.
ПЛИС инвертирует данные пропуская их через себя.
Ну я это и имел ввиду. Просто, насколько я помню, РЕ2 хранит их уже инвертированными, существовала вероятность про - забыть этот момент для 27-ой.
Тот же самый вопрос про регистр начального пуска - он теперь снаружи инвертирован? Или ПЛИС избирательно инвертирует?
Hunta, РНП внутри ПЛИС.
https://pic.maxiol.com/thumbs2/1655662310.2152181782.rnp.png (https://pic.maxiol.com/?v=1655662310.2152181782.rnp.png&dp=2)
В общем, пока остается только один совет - внимательно посмотреть на то, что поменялось при переходе от РЕ на 27-ую...
Вот что читается из ПЗУ. Должно быть что-то вроде C0xxH
https://pic.maxiol.com/thumbs2/1655663979.2152181782.data.png (https://pic.maxiol.com/?v=1655663979.2152181782.data.png&dp=2)
Вот это вот безадресное чтение не пойму, откуда берется?
Это возникает прерывание. Перед обработкой любого прерывания, независимо какое оно - USER или HALT, процессор обязательно читает безадресный регистр.
По вашей диаграмме сначала читается безадресный регистр, формируется вектор начального пуска, после этого вектор прочитывается. А потом возникает прерывание USER-режима, прочитывается безадресный регистр, в стек кладутся счетчик команд и слово состояние процессора, читается вектор. Ну и далее снова прерывание, и так по кругу.
Так как у вас на диаграмме нет адресных линий AD07-AD00, то адрес вектора узнать невозможно.
- - - Добавлено - - -
И ещё вопрос. Линии A15-A7 куда откуда читаются? А то такое ощущение что виден только адрес, а данных нет.
Alex_K, теперь все более-менее понятно стало. Выходит процессор читает безадресный регистр - тут пока все в порядке, адрес считывается верный. Затем идет обращение к ПЗУ и тут-то считывается не то, что нужно.
Да, теперь до меня начинает доходит суть проблемы с прерываниями. Получается, что у меня на любое безадресное чтение подключается РНП. А выходит, что это неправильно?
- - - Добавлено - - -
И ещё вопрос. Линии A15-A7 куда откуда читаются? А то такое ощущение что виден только адрес, а данных нет.
Все верно, это раздельные шины адреса и данных.
Получается, что у меня на любое безадресное чтение подключается РНП. А выходит, что это неправильно.
Правильно. При любом безадресном чтении обязательно выставлять РНП.
Лучше узнать что творится на линиях A07-A00, там можно узнать адрес вектора и уже понять, что происходит.
Правильно. При любом безадресном чтении обязательно выставлять РНП.
Лучше узнать что творится на линиях A07-A00, там можно узнать адрес вектора и уже понять, что происходит.
Как я понял, вместо содержимого ПЗУ считывается что-то другое, скорее всего это и есть команда прерывания. Я сначала не понял, откуда взялось безадресное чтение. После вашего объяснения стало понятно, чем занят процессор. Дальше осталось понять, почему считываются неверные данные.
Как я понял, вместо содержимого ПЗУ считывается что-то другое, скорее всего это и есть команда прерывания.
При чтении ПЗУ всегда считываются данные. А вот почему сразу же возникает прерывание, это уже другой вопрос.
Лучше конечно прочитывать линии AD15-AD00 с самого процессора, там будет виден и адрес и данные.
Alex_K, это понятно, но считывается не то, что ожидается. Почему так - буду разбираться.
К сожалению считать непосредственно линии AD физически сложно. Приходится читать то одно. то другое попеременно.
Alex_K, это понятно, но считывается не то, что ожидается. Почему так - буду разбираться.
Так как шина инверсная, то инвертируются не только данные, но и адрес.
- - - Добавлено - - -
К сожалению считать непосредственно линии AD физически сложно.
Если читаете логическим анализатором, то можно подцепится прям к ногам процессора.
Так как шина инверсная, то инвертируются не только данные, но и адрес.
Само собой.
Если читаете логическим анализатором, то можно подцепится прям к ногам процессора.
С этим есть определенные сложности.
Победил чтение из ПЗУ. Банальнейшая ошибка - не в те адреса записал прошивку.
Осталась проблема с прохождением теста терминала T4.
Осталась проблема с прохождением теста терминала T4.
А если мини-ЭВМ включить и сразу же запустить тест T4, то так же есть НЕЗАПЛАНИРОВАННОЕ ПРЕРЫВАНИЕ? Или после прохождения тестов T1-Т3?
- - - Добавлено - - -
Посмотрел этот тест в эмуляторе ДВК. Там он устанавливает биты разрешения прерываний в регистрах системного терминала 0177560 и 0177564.
А вектор прерывания передаётся 1801ВП1-065 при запросе вектора прерывания. Вначале установкой линии VIRQ в активный низкий уровень 1801ВП1-065 запрашивает прерывание. Потом процессор при обработке запроса на прерывание читает вектор. Он устанавливает в активный низкий уровень свою линию IAKO, она идёт на вход IAKI 1801ВП1-065. Затем для чтения вектора устанавливается в активный низкий уровень линия DIN. При этом SYNC остаётся в неактивном высоком уровне. На это 1801ВП1-065 выставляет на шину вектор и отвечает RPLY.
Вероятно у вас где-то схема реагирует на сигнал DIN и ещё что-то выставляет на шину, а возможно и отвечает RPLY. На инверсной шине данные с нескольких источников складываются по ИЛИ и процессор получает неверный вектор.
А если мини-ЭВМ включить и сразу же запустить тест T4, то так же есть НЕЗАПЛАНИРОВАННОЕ ПРЕРЫВАНИЕ? Или после прохождения тестов T1-Т3?
Не зависит от этого. Тесты Т5 и Т6 дают такой же результат.
А будет ли в открытом доступе прошивка и схема для fpga?
Woxem, в первом сообщении. Могу и платкой поделиться.
Woxem, мы с вами рядом живём. Будет возможность - приезжайте.
Вероятно у вас где-то схема реагирует на сигнал DIN и ещё что-то выставляет на шину, а возможно и отвечает RPLY
Есть в схеме небольшой недочет. Во время адресного обмена формируются сигналы _RAMCS и _ROMCS. Как я понимаю они останутся и после завершения адресного обмена. И нехорошая ситуация может произойти, если следующий обмен не адресный, т.е. без сигнала SYNC, но с использованием DIN. Это чтение безадресного регистра или чтение вектора прерывания. В данном варианте легко выставленное значение складывается по ИЛИ со значением ОЗУ или ПЗУ (W27C512). Сигнал _DIN через буфер преобразуется в _RD. Но так как обмен адресный, то необходимо через ИЛИ пустить _DIN и _SYNC.
Alex_K, учту замечание.
- - - Добавлено - - -
Сейчас пытаюсь избавиться в схеме от второй EEPROM. Примерно как у MM d музыкальном звонке (https://zx-pk.ru/threads/34407-muzykalnyj-dvernoj-zvonok-na-n1806vm2-sovmestimyj-s-ms1201-02-na-melkikh-is.html).
Фронт сигнала _AR использую для управления регистром, а AR (инвертированный _AR) для управления нулевым разрядом адреса EEPROM.
https://pic.maxiol.com/thumbs2/1656011484.2152181782.rom.png (https://pic.maxiol.com/?v=1656011484.2152181782.rom.png&dp=2)
Вроде даже что-то получается: считываются из ПЗУ код C0C0H, а дальше снова что-то идет не так...
https://pic.maxiol.com/thumbs2/1656010369.2152181782.oneeprom.png (https://pic.maxiol.com/?v=1656010369.2152181782.oneeprom.png&dp=2)
Проверил еще раз схему, устранил пару ошибок. Чтобы убедиться, что считывание из ПЗУ происходит правильно, залил тестовую прошивку. С адреса C000H (140000) записал: AAH, 55H, 00H, FFH.
В результате получается такая картинка:
https://pic.maxiol.com/thumbs2/1656091944.2152142606.oneeprom55aa1.png (https://pic.maxiol.com/?v=1656091944.2152142606.oneeprom55aa1.png&dp=2)
Вроде все пока правильно.
Но когда вставляю ПЗУ с 055 прошивкой - не запускается.
https://pic.maxiol.com/thumbs2/1656181791.2152142606.oneepromdata.png (https://pic.maxiol.com/?v=1656181791.2152142606.oneepromdata.png&dp=2)
https://pic.maxiol.com/thumbs2/1656181823.2152142606.oneepromaddr.png (https://pic.maxiol.com/?v=1656181823.2152142606.oneepromaddr.png&dp=2)
Виснет обычно и терминал молчит.
В другой, известной мне реализации, используются SYNC, WTBT и DIN.
В другой, известной мне реализации, используются SYNC, WTBT и DIN.
А где ее можно увидеть?
Ну, например, здесь https://github.com/1801VM3/1801VM3-Board
Ещё у меня, но я не люблю схемный дизайн, так что всё это было давно переписано на VHDL
Ну, например, здесь https://github.com/1801VM3/1801VM3-Board
Но там в схеме две ПЗУшки:
https://pic.maxiol.com/thumbs2/1656194462.2152142606..png (https://pic.maxiol.com/?v=1656194462.2152142606..png&dp=2) https://pic.maxiol.com/thumbs2/1656011484.2152181782.rom.png (https://pic.maxiol.com/?v=1656011484.2152181782.rom.png&dp=2)
Мне-то надо одну подключить. Пойдет и на VHDL, я разберусь. У меня, судя по диаграмме состояния ШД, считывание в регистр правильно происходит. Затем процессор переходит по считанному адресу, т.к. он появляется уже на ША. А вот что происходит дальше - я не понимаю.
Пардон, не ту ссылку дал - это был вариант 1201.2016 - там действительно ещё 2 ПЗУ
Вариант с одной - это 1201.2018 - https://github.com/1801VM3/MC1201_2018
Hunta, нашел.
https://pic.maxiol.com/thumbs2/1656230464.2152142606.01.png (https://pic.maxiol.com/?v=1656230464.2152142606.01.png&dp=2)
Но это немного другая схема - там два регистра используется для защелкивания данных. Я пытаюсь одним ограничиться.
Но это немного другая схема
Я пытаюсь одним ограничиться.
По крайне мере она работает.
Есть в схеме небольшой недочет. Во время адресного обмена формируются сигналы _RAMCS и _ROMCS. Как я понимаю они останутся и после завершения адресного обмена. И нехорошая ситуация может произойти, если следующий обмен не адресный, т.е. без сигнала SYNC, но с использованием DIN. Это чтение безадресного регистра или чтение вектора прерывания. В данном варианте легко выставленное значение складывается по ИЛИ со значением ОЗУ или ПЗУ (W27C512). Сигнал _DIN через буфер преобразуется в _RD. Но так как обмен адресный, то необходимо через ИЛИ пустить _DIN и _SYNC.
Учел это таким образом:
https://pic.maxiol.com/thumbs2/1656615019.2152142606.sync.png (https://pic.maxiol.com/?v=1656615019.2152142606.sync.png&dp=2)
Теперь тест T4 проходит без ошибок. :v2_cheer:
Теперь тест T4 проходит без ошибок.
Ну теперь можно и RT-11 загрузить через HX-сервер.
Победил сегодня ПЗУ 8бит - запускается с двумя регистрами ИР37. Остается добить схему с одним регистром. Может попробовать и ОЗУ 8 бит подключить?
https://pic.maxiol.com/thumbs2/1656870101.2152142606.img20220703203439.jpg (https://pic.maxiol.com/?v=1656870101.2152142606.img20220703203439.jpg&dp=2)
Может попробовать и ОЗУ 8 бит подключить?
Пуркуа бы и не па? 8-биток static ОЗУ полно, 16-ти битные не так распространены вроде - или я ошибаюсь?
Hunta, верно. 16 бит больше на 3 вольта. На 5 вольт чаще 8 бит попадаются. Одной только кеш-памяти с 486-х материнок еще долго можно разгребать.
16 бит больше на 3 вольта
О, точно, мне ещё и 3-х вольтовки нервы портят :):)
Мысли вслух - а почему бы ПЗУ и ОЗУ не разместить на плате с процом? И тогда регистры можно спрятать в FPGA. Будет вполне себе такая самодостаточная одноплатная ЭВМ.
Hunta, это будет на второй версии платы. Первая проектировалась для проверки, поэтому-то и сделал из 2 частей.
Немного подчистил схему ПЛИС. Удалил лишнее. Актуальная версия, как всегда, в первом сообщении.
Пуркуа бы и не па? 8-биток static ОЗУ полно, 16-ти битные не так распространены вроде - или я ошибаюсь?
К сожалению, пока не понимаю, что делать с этим:
https://pic.maxiol.com/thumbs2/1657038761.2152142606.vm2readmodifywrite.jpg (https://pic.maxiol.com/?v=1657038761.2152142606.vm2readmodifywrite.jpg&dp=2)
К чему тут "железно" привязать моменты записи/считывания младшего/старшего байтов?
Чтение выполняется только словами, так что с ним проблем нет. А вот запись - да, тут получится только если два цикла записи слова памяти запихать в один цикл записи процессора. То есть цимис получим только с быстрой памятью
- - - Добавлено - - -
Чёт я как то не прокрутил в голове про запись.. :(
Ну ладно, с чтением все понятно - работает та же схема, что и с ПЗУ. Запись первого байта, наверное, можно привязать к спаду логического уровня /DOUT, а запись второго - к подъему.
- - - Добавлено - - -
То есть цимис получим только с быстрой памятью
Быстродействия статики должно хватить. Шина-то неторопливая.
Запись первого байта, наверное, можно привязать к спаду логического уровня /DOUT, а запись второго - к подъему.
Но данные надо будет защёлкивать по спаду DOUT :)
Hunta, это само собой.
Что-то не решаюсь никак к масштабной переделке приступить. Можно ведь теперь совсем отказаться от 16-битной шины данных.
Можно ведь теперь совсем отказаться от 16-битной шины данных.
И да и нет.
Другие то устройства предполагают СТАНДАРТНУЮ шину.
Даже насчёт той же ВП1-065 не уверен - не используются ли какие то старшие биты - надо описание смотреть.
Другие то устройства предполагают СТАНДАРТНУЮ шину.
На МПИ/Qbus я не покушался. У меня память была подключена по своей шине - раздельные не инвертированные адреса и данные. Вот про эту ШД я и вел речь.
Вот про эту ШД я и вел речь.
Тогда ой :)
Powered by vBulletin® Version 4.2.5 Copyright © 2025 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot