С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
Смотря что считать строгим. Поскольку мы тут не тактируем АЦП для оцифровки сигнала с последующей цифровой обработкой, то погрешностью фазы в пределах задержки одного логического элемента вполне можно пренебречь.
Схемы все выложены в открытом доступе, как оригинальная заводская, так и моя по-транзисторная...
OK, берете заводскую схему 1801ВМ2, например здесь, на странице 14 нарисован ответ на Ваш вопрос.
Тут с другого форума сообщают:
В комментарии исходника теста t402.mac, начиная со строки 646 перепутано где младшее, а где старшее слово параметра. Перфекционизма ради нужно поправить.В дизассемблированном исходнике теста ошибка (тест ASHC)
; apar0 - значение младшего слова для сдвига
; apar1 - значение старшего слова для сдвига
; apar2 - параметр сдвига
; apar3 - значение младшего слова для контроля
; apar4 - значение старшего слова для контроля
; apar5 - контрольное PSW для сравнения
apar0/apar3 - СТАРШЕГО, а apar1/apar4 - младшего. Иначе при реализации неверное размещение данных вызовет ошибку в #102 тесте (установятся N и V), контрольное PSW равно 0.
Ну раз нужно - поправим. И неплохо бы копирайт от gid тоже добавить, за основу я все-таки взял уже подготовленную IDA-базу. В каком виде добавить строчку?
1801ВМ2 потихоньку занимаюсь, осталось примерно 60 латчей еще убрать до полностью синхронной модели.
Плохо что тесты 791*** не тестируют пультовой режим. Были еще не тестированные нюансы предвыборки. Например, не должно формироваться исключений на тайм-ауты шины при предвыборке, приходится писать свои тесты.
Последний раз редактировалось Vslav; 20.03.2019 в 16:13.
Вот: 791403.zip, так же для 64-битной IDA
Интересно у 1801ВМ2 предвыборка команд работает. Тут выкладывали тест когда записью по нечетному адресу можно компаратор записи в предвыбранную команду (в заводской документации называется МТП - модификация текущего положения) обмануть и обнаружение модификации не сработает. Мне стало интересно как же работает процессор по обнаруженной модификации, сделал тест уже с записью по четному адресу и запустил. А оно не работает! Ничосе...
Стал разбираться, нашел ошибку у себя - компаратор сравнивал не PC, а отстающий регистр копии. Исправил компаратор, запускаю, модель зависает. Ничосе...
Ошибку искал долго, разобрал досконально как работает предвыборка, но никак не могу найти где требование перечитать текущую команду для микрокода. Микрокод читает инструкции при помощи двух операций - ЧК (чтение команды) и ЧКД (чтение команды-данных (с опережением)), именно микрокод должен выдать ЧК вместо ЧКД если обнаружена модификация предвыбранной команды. А вот среди входных параметров микрокода флаг модификации-то и не поступает. Наконец, нашел где оно заныкано, потом нашел ошибку в модели автомате отслеживания предвыборки, а оно все равно не работает. Ничосе...
В итоге оказалось что если имеет место модификация процессор все равно делает предвыборку за модифицированной командой, и вот только потом у него наступает сброс микропрограммного автомата и возобновляется чтение и исполнение с модифицированной команды. Полез искать у себя ошибку и оказалось что немного некорректно сигнал abort был описан, то есть ошибка была совершенно в неожиданном месте.
По ходу пришлось еще писать полноценный тест предвыборки - она не должна вызывать исключений если предыдущая команда осуществляет переход. То есть, например есть верхняя граница памяти, на последнем адресе размещаем rts pc, и вызываем эту инструкцию. Инструкция выбирается и начинает исполняться, а предвыборка пытается прочитать следующее слово, по адресу отсутствующей памяти, естественно там возникает тайм-аут шины. Но исключения быть не должно - rts pc перейдет по адресу возврата. Это протестировано и работает. Но просто так флаг тайм-аута выбросить нельзя, предвыборка может нарваться на тайм-аут, например, при выборке слова приемника в бинарной команде. Например, mov (R0)+, dst.adr. При этом источник должен быть корректно обработан - прочитано слово (R0)+, регистр R0 инкрементироваться, и только потом должно сработать исключение. В-общем, там несколько случаев, пришлось для них писать специальный тест.
До полностью синхронной модели осталось победить 15 латчей, достаточно сложный кусок,
Собирается в 1920 ячеек, ~80МГц (хотя об этом рановато говорить пока латчи все не ушли).
Самое ценное в Вашей деятельности то, что мы получаем описание того, как работают в действительности, а не на бумаге, процессораСпасибо
![]()
Уважаемые господа, а как вы смотрите на такую идею?
Есть проект который использует FPGA borad.
Можно перенести на нее модель 1801ВМ1/2, а потом дописать дизассемблер PDP-11 и получается крутой отладочный инструмент!
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)