Насчет тестов 1801ВМ1 - можно сделать среду МС1201.01 и "поставить" ПЗУ 054 - там вроде что-то встроенное по тестам есть... ( ? )
Вид для печати
Насчет тестов 1801ВМ1 - можно сделать среду МС1201.01 и "поставить" ПЗУ 054 - там вроде что-то встроенное по тестам есть... ( ? )
Исходники тестов есть в Книге 4 по Электронике-60.
Но для них надо делать терминал с регистрами клавиатуры и дисплея, с поддержкой прерывания (для теста прерываний).
Интересно устроен в 1801ВМ1 регистровый блок. Причем впервые нарвался на то, что не все можно увидеть в микроскоп. Пришлось долго логически анализировать, пока паззл сложился во что-то вразумительное.
Фрагмент схемы регистрового блока:
http://s018.radikal.ru/i508/1501/28/cf1eab15745bt.jpg
Вертикальный столбец ячеек образует регистр, несколько вертикальных столбцов формируют несколько регистров. Рассмотрим ячейку в левом нижнем углу фрагмента. Видно что бит регистра образован триггером - T3541, T3542, T3573, T3574. Этот триггер может подключаться к двум выходным-входным шинам (горизонтальные линии) через пары транзисторов Т3477/Т3478 и Т3509/Т3510. Удивительно что эти пары управляются всего двумя линиями - RS0/0 и RS0/1, то есть, если смотреть на схему в таком виде как она нарисована, то получается что триггер подключается к обоим шинам одновременно. На основании этой схемы была написана модель и она не заработала.
Тут сделано все хитрее, в n-MOS серии 1801 есть транзисторы двух типов - с индуцированным каналом (открывается если на затвор подать высокий уровень) и со встроенным каналом (закрывается если на затвор подать низкий уровень. То есть - схема-то под микроскопом изучена и нарисована верно, но вот транзисторы там хитрые, а определить "на глаз" какого они именно типа - невозможно, определяется степенью легирования подзатворного кремния.
В итоге, по результатам моделирования, пришел я к выводу что вот в той паре транзисторов, которая подключает триггер к шинам - один (T3477 и T3510) с индуцированным каналом (имеет очень высокое сопротивление в закрытом состоянии), а второй, последовательный с первым (T3478 и T3509), имеет встроенный канал (относительно небольшое сопротивление в закрытом состоянии). Получается что если подать высокий уровень на RS0/0 то T3477 и T3509 откроются, но триггер подключится только к одной шине - через относительно низкоомный закрытый T3478. Второй выход будет отключен через закрытый высокоомный T3510. Соответственно вторая шина будет не занята - и на нее можно подать значение от другого регистра. То есть - имеем две шины, но два выхода, регистровый блок может одновременно выдавать на двух шинах значения двух регистров (одно в прямом виде, второе в инвертированном). Запись триггера осуществляется открытием всех четырех коммутирующих транзисторов.
Модель была исправлена и показала полную работоспобность такого решения. Было исправлено еще несколько ошибок, в том числе с большим кропотливым трудом найдены ошибки (аж семь штук, и может быть что еще не все) векторизации матрицы микрокода и моделька "доехала" уже до исполнения первого заводского теста и успешно умерла на первом bcs :). Кому интересно - текущая версия забекаплена тут.
Заводской тест 791401 дошел до конца - до самой инструкции iot по которой выполняется вывод сообщений на терминал. Так что арифметика закончена. Переходим к отладке прерываний и исключений - с выполнением iot и обработкой векторных прерываний точно есть проблемы. Текущая ревизия C - тут
Update: в архиве восстановленный при помощи дизассемблера и книжки исходник оригинального теста, компилируется 1-в-1. В книжке по Э-60, как водится, отсутствует пара разворотов, восстановлено исключительно по дизассемблеру.
Держите.
Схема меняется незначительно, изменения описаны в файлике errlist.txt.
А с Верилогом классно :), в архиве есть файлик wave.do для Моделсима, если запустить проект на моделирование то видно все осциллограммы на всех внутренностях процессора, вплоть до самого конца выполнения теста. Осциллограм до черта, хорошо что их можно в папки с древовидной структурой организовывать, ну и текстовую Верилог-отладку прикрутил, а то уже от графиков в глазах рябило.
Модель показывает что инструкция mtps вызывает повторное считывание кода следующей за ней инструкции, то есть новое заполнение регистра инструкций. Может быть кто подскажет - это сделано специально, остаток от переноса с PDP-11 чтобы учесть возможную смену режима (user/kernel), или мне следует поискать глюк?