Просмотр полной версии : Цифровая археология: 1801 и все-все-все
Страницы :
1
2
3
4
5
6
7
8
[
9]
10
11
Это LSI-11/03, то, что наши цельноутянули под названием Э-60, да?
Да, точно так.
залью это дело в свою вот такую (https://forum.maxiol.com/index.php?showtopic=5332) плату
То, что есть на сегодня - LSI-11, ВМ1/2. Простая система на них - процессор/память/UART, влезут гарантировано.
F11 (АКА 1811, 11/23 на нем сделано) тоже, скорее всего, влезет.
Но с расширением (добавить КСМ/КГД или КЦГД) системы уже могут быть нюансы.
Но с расширением (добавить КСМ/КГД или КЦГД) системы уже могут быть нюансы.
Я думаю что второй процессор в КЦГД эмулировать не надо, в случае с ВМ2 быстрое переключение задачи на основной процессор. Для этого нужен какой то конвейер.
Если конечно такое реализуемо (не силен в этих платах).
- - - Добавлено - - -
MiX, Могу дать анализатор на время и платы неизвестной рабочести для сравнения.
Спасибо, пока нет такой необходимости.
А платы какие, RX02?
А платы какие, RX02?
ГМД-7012.
RX разбирать не хотелось бы.
Я думаю что второй процессор в КЦГД эмулировать не надо, в случае с ВМ2 быстрое переключение задачи на основной процессор.
Чтобы получить нормальную реплику нужны именно все процессоры, которые есть в оригинале. Это не проблема сделать несколько инстансов процессора, проблема куда им ходить - память SDRAM на большинстве отладочных плат физически одна, один канал, надо делать многопортовый контроллер SDRAM, разделение доступа, еще и видеоконтроллер туда же обращается, все это порежет быстродействие. Для КСМ/КГД все можно разместить во внутренней памяти FPGA (ВМ80 с программой, порезать символьный экранный буфер до 4К с обновлением прошивки, 16К КГД тоже поместятся), а вот КЦГД и УКНЦ уже потребуют доступа к внешней SDRAM.
Поскольку трудами уважаемого VSLAV у нас теперь есть FPGA-версия ВМ2, то я наконец собрался сделать себе FPGA-вариант платы МС1201.02, стоящей в нашем испытательном стенде, поскольку уже надоело ловить глюки оригинальной платы. И вот тут возникла небольшая проблема.
В оригинальном процессоре имеется выход SEL, используемый как для выбора теневого адресного пространства (HALT), так и для безадресного чтения регистра режима начального пуска. Как я понял, в wishbone-варианте процессора этого выхода нет, вместо него используется adr[16] для выбора адресного пространства и отдельный выход vm_una для чтения регистра запуска, при этом чтение происходит через вход wbi_dat, через который процессор принимает векторы прерываний. В референсной схеме от VSLAV эту функцию выполняет контроллер прерываний wbc_vic.
Так вот, что бы я ни подсовывал на вход rsel контроллера прерываний, процессор всегда брал стартовый вектор с адреса 0. А нужен мне адрес 140000, по которому лежит теневое ПЗУ 055. В итоге оказалось, что проблема вылезла вот из-за этого кода в контроллере прерываний:
if (wb_stb_i & ~wb_ack_o & wb_irq_o)
if (wb_una_i)
wb_dat_o <= rsel;
else
wb_dat_o <= trunc_w16(ivec >> (nvec*16));
Здесь в списке условий if прописано "&wb_irq_o", а поскольку при безадресном чтении никаких запросов прерывания не формируется, то условие выполнено не будет и содержимое rsel никогда не попадет на шину. Здесь, я думаю, надо написать "& (wb_irq_o | wb_una_i)", а лучше вообще всю эту часть условия выкинуть.
В результате монитор 055 вполне нормально запустился и работает. Правда, тесты начиная с T3 сыпят ошибками "дефект незапланированное прерывание", но это уже отдельная история.
Здесь, я думаю, надо написать "& (wb_irq_o | wb_una_i)", а лучше вообще всю эту часть условия выкинуть.
В результате монитор 055 вполне нормально запустился и работает. Правда, тесты начиная с T3 сыпят ошибками "дефект незапланированное прерывание", но это уже отдельная история.
О, большое спасибо за найденную проблему и подробный репорт по ней, я на выходных займусь. Очень приятно, что кто-то стал использовать процессоры в своих проектах.
Опять возникла проблема с процессором ВМ2. Только теперь без помощи общества я сходу не разберусь.
Как я уже писал, я начал делать FPGA-версию платы МС1201.02, для замены окончательно сдохшего контроллера в нашем оборудовании. Не точную, конечно, версию, а функциональный аналог, на основе wishbone-варианта ВМ2. Описал схему, подключил в теневое адресное пространство ПЗУ 055. Схема заработала, и я начал развлекаться с пультовыми командами. И тут оказалось, что тесты, начиная с Т3 (тест процессора) нормально не идут:
@T0
*** test sistemnoj pamqti ***
prowerka okon~ena
*** test ozu ***
pamqtx 020000 -157776
pamqtx 000600 -017776
prowerka okon~ena
*** test prc ***
defekt nezaplanirowannoe prerywanie
170406
@
И вот такой дефект - НЕЗАПЛАНИРОВАННОЕ ПРЕРЫВАНИЕ, вылезает и на всех последующих тестах. Пришлось брать в зубы IDA и разбираться в коде 055. В конце концов причина была найдена, и она оказалась настолько странной, что приходится обращаться к общественности.
Проблема оказалась в обработке прерывания по зависанию шины. Если после выдачи строба данных процессор не получит ответа в течении 128 тактов, он должен вызвать прерывание по вектору 4. И вот этот процесс происходит неправильно. Вот тестовая программа, моделирующая такую ситуацию. Это упрощенный вариант одного из тестов, выполняемых по Т3.
6 000000 000010 .WORD START ; вектор начального пуска
7 000002 000000 .WORD 0
8
9 000010 .= 10
10 START:
11 000010 012706 000410 MOV #410,SP ; рабочий стек
12 000014 012737 000036 000004 MOV #trap4, @#4 ; устанавливаем новый обработчик trap4
13 000022 005037 000006 CLR @#6
14 000026 005037 177776 CLR @#177776 ; обращемся к отсутствующему адресу
15 RADR:
16 000032 000167 000106' JMP ERR0 ; сюда приходим, если не произошло прерывание
17 ;----------------------------------------------------------------------
18 trap4:
19 000036 022716 000032 CMP #RADR, (SP) ; проверяем сохраненный в стеке адрес
20 000042 001005 BNE ERR1
21 ; Тест успешно завершен
22 000044 012703 000246 MOV #MSGOK,R3
23 000050 004767 000120' CALL printstr
24 000054 000420 BR STOP
25 ; Адреса не совпали
26 ERR1:
27 000056 011603 MOV (SP), R3 ; это адрес из стека
28 000060 004767 000172' CALL PNUM
29 000064 012703 000032 MOV #RADR,R3 ; а вот такой он должен быть
30 000070 004767 000172' CALL PNUM Здесь устанавливается обработчик прерывания 4, а затем происходит обращение к отсутствующему адресу 177776. Согласно документации, процессор должен при этом затолкать в стек текущий PS, затем адрес следующей команды, то есть 000032. Однако в реальности тест завершается так:
000034 000032 COMPARE ERROR
То есть в стек затолкалось не 000032, а 000034! В результате адрес возврата стал указывать аж на середину следующей команды. Возврат по такому вектору приведет к непредсказуемому результату.
Эту ситуацию легко повторить, используя тестовый стенд de0_top, идущий в комплекте с wishbone-вариантом процессора. Достаточно прогрузить в его память RAM16K вышеприведенную программу (я ее прикладываю к этому сообщению) и запустить ее - в консоль тут же будут выведены оба адреса, реальный и ожидаемый . На всякий случай я, используя этот же испытательный стенд, промоделировал работу программы в Modelsim. Вот осциллограмма выполнения интересующей нас части программы:
73004
Поскольку этот форум портит картинки, то я включил этот же файл в нормальном разрешении в приложенный архив. Осциллограмма начинается с момента окончания длинной паузы при обращении к адресу 177776. На картинке можно увидеть такие этапы:
0. Процессору надоело ждать ответа, и он снимает строб данных wb_stb.
1. Зачем-то выставляется строб UNA и процессор читает безадресный регистр начального запуска. Зачем - я в упор не понимаю. Вот если бы это было специальное прерывание пультового режима - тогда понятно. А у нас обычное прерывание 4.
2. Процессор заталкивает в стек PS (в данном случае 4) по адресу 406.
3. Затем в стек заталкивается PC возврата по адресу 404. И его значение - 34, а не 32. Что и требовалось доказать.
4. Далее читается вектор 4 и по нему передается управление, как обычно. Это уже нам не интересно.
В результате мы имеем воспроизводимую странность в поведении процессора. Конечно, все можно было бы списать на мои кривые руки и глюки FPGA. Но я использовал для тестов образцовую схему от VSLAV, а ошибка воспроизводится и в симуляторе. Может быть, я плохо понимаю работу процессора, и он по какой-то причине как раз и должен формировать такой вот странный адрес? Но авторы теста T3 так не считают, да и на реальных платах Т3 проходит без ошибок. Получается, что процессор действительно ведет себя неправильно.
Но вот чтобы разобраться в проблеме дальше, надо понимать, как устроены кишки процессора. А там всякие конвейеры, микропрограммные автоматы и прочая жуть, в которой за пару вечеров не разобраться. Поэтому я и прошу помощи у людей, которые уже разобрались в кишках процессора и понимают, как там все работает. Можно просимулировать мою тестовую программу в modelsim и посмотреть, что там внутри процессора происходит и почему он формирует такой странный адрес.
Прикладываю архив, который содержит:
- исходник и листинг тестовой программы
- mif-файл для загрузки в память FPGA
- mem-файл для загрузки в симулятор
- приведенную ранее осциллограмму в полном разрешении.
Опять возникла проблема с процессором ВМ2.
Очень интересно, и большая работа по локализации проблемы проделана, спасибо, будем разбираться.
Как же оно проходит тест 791404, там есть проверка сохраненного адреса в стеке:
ctrap: mov #btrap, rtrap5 ;
mov #buff, SP ;
tstb -(R0) ;
dtrap: inc R0 ;
cmp R0, corh ;
beq trapb ;
mov #241, @#$fatal ;
inc @R2 ;
halt ;
;
btrap: mfps status ;
tst status ;
beq 1$ ;
mov #242, @#$fatal ;
inc @R2 ;
halt ;
;
1$: cmp buff-4, #dtrap ;
beq ctrap ;
;
auto1: mov #243, @#$fatal ;
inc @R2 ;
halt ; неверная запись PC или НПТ
- - - Добавлено - - -
1. Зачем-то выставляется строб UNA и процессор читает безадресный регистр начального запуска. Зачем - я в упор не понимаю. Вот если бы это было специальное
Да, это странно, но - законно, согласно документации.
- - - Добавлено - - -
Асинхронная оригинальная модель выводит: "COMPARE SUCCESS".
Cинхронная модель выводит: "COMPARE SUCCESS".
Wishbone модель сохраняет в стеке 348
Получается это я привнес ошибку, или тайминг шины быстрее стал, надо разбираться.
- - - Добавлено - - -
И в синхронной и в вишбон моделях, PC1/PC2 ведут себя абсолютно одинаково, везде 348 на момент записи адреса возврата в стек, только синхронная записывает 328, а вишбон - 348. В ALU в этот момент нет операции вычитания, любопытно, откуда же всплывает 328?
- - - Добавлено - - -
PC как такового в ВМ2 нет, там только опережающие PC1 и PC2. А для прерываний и HALT режима есть CPC. Вон он оказывается разный.
Я вроде как разобрался, почему тест t404 проходит правильно. Дело в том, что там для проверки используется байтовый способ адресации:
mov #memlim+1, R0
ctrap:
mov #btrap, rtrap5 ; новый обработчик TRAP4
mov #buff, SP
tstb -(R0) ; ловим байтовое обращение по адресу memlim
А в моем тесте используется словный - CLR @#177776. Если в моем тесте CLR заменить на CLRB - то тест сразу начинает проходить правильно, COMPARE SUCCESS.
В очередной раз убеждаюсь, что придумать тест, проверяющий все ситуации, невозможно. В этом t404 проверяются всякие самые дикие ситуации, а вот эту проблему он не видит. Правда, тест рассчитан на реальные процессоры, вряд ли в них возможна такая проблема.
PC как такового в ВМ2 нет, там только опережающие PC1 и PC2. А для прерываний и HALT режима есть CPC. Вон он оказывается разный.
Ой как там все сложно. Блин, аж завидно даже. Хотел бы я вот с такой легкостью рассуждать о схеме этого процессора. Похоже, придется все же сесть и разобраться в его потрохах, хотя бы для тренировки мозга. Тем более что и фирменная дока на него есть.
Я вроде как разобрался, почему тест t404 проходит правильно.
У ВМ2 CLRB транзакция проходит как чтение-модификация-запись, а CLR просто как запись слова.
Выяснилось что в момент сохранения PSW по прерыванию тайм-аута шины формируется лишний писивр (pc_wr) и CPC получает продвинутое значение.
Источником лишнего писивра является лишний cpsw_stb.
Хотел бы я вот с такой легкостью рассуждать о схеме этого процессора.
Да я тоже не отказался бы :)
Причина найдена, быстрый фикс:
vm2_wb.v: line 594
-if (reset | wb_wdone)
+if (mc_res | wb_wdone)
На выходных потестирую и внесу в репку
- - - Добавлено - - -
forth32, прогоните пожалуйста на своей системе исправление и расскажите нам о результатах :)
Vslav, а вы незнаете чем отличает 1801ВМ2 от 1806ВМ2? И насколько можно заменить 1806 на ваш verilog 1801вм2?
Vslav, а вы незнаете чем отличает 1801ВМ2 от 1806ВМ2? И насколько можно заменить 1806 на ваш verilog 1801вм2?
А никто точно не скажет, потому что реверс 1806ВМ2 никто не делал, можно только верить разработчикам 1806 что они ничего особо архитектурно не изменили.
Заменить можно с достаточно высокой вероятностью, компьютеров на 1806 практически не было, если что и вылезет, то тот мизер софта требующего 1806 пропатчить проблемы не составит.
потому что реверс 1806ВМ2 никто не делал
Vslav, в планах нет? :)
forth32, прогоните пожалуйста на своей системе исправление и расскажите нам о результатах
Ну, что тут скажешь... Ошибка полностью исправлена - теперь COMPARE SUCCESS выдается при любом способе адресации. Огромное за это человееское спасибо. Тест Т3 теперь честно сообщает "ПРОВЕРКА ОКОНЧЕНА".
Однако, проблема с тестами все же осталась. Теперь цепочка тестов все равно завершается сообщением "ДЕФЕКТ НЕЗАПЛАНИРОВАННОЕ ПРЕРЫВАНИЕ", причем сообщений этих выкатывается полтора экрана подряд:
@T0
*** test sistemnoj pamqti ***
prowerka okon~ena
*** test ozu ***
pamqtx 020000 -157776
pamqtx 000600 -017776
prowerka okon~ena
*** test prc ***
prowerka okon~ena
*** test terminala ***
wwedite sledu`}ie simwoly:
1 2 3 4 J C U K
prowerka okon~ena
*** test acpu ***
defekt 16
*** test ngmd ***
defekt nezaplanirowannoe prerywanie
defekt nezaplanirowannoe prerywanie
defekt nezaplanirowannoe prerywanie
defekt nezaplanirowannoe prerywanie
defekt nezaplanirowannoe prerywanie
defekt nezaplanirowannoe prerywanie
.....
Если запускать любые одиночные тесты, то, начиная с теста Т3, это приводит к такому же результату. Придется мне снова запускать IDA и искать проблему дальше, что-то еще неправильно работает. Проблема явно вылезает при выходе из тестов обратно в монитор. При этом тесты 1 и 2 (ПЗУ и ОЗУ) рабтают без проблем.
Зато запустилась наконец RT-11. Также нормально грузится и XXDP, но толку от нее немного - там нет подходящих тестов. Наверное, если все будет работать нормально, на это незапланированное прерывание можно было бы плюнуть. Но тут уже дело принципа.
На выходных потестирую и внесу в репку
Тогда уж заодно внесите и исправление в контроллер прерываний, о чем я тут уже писал. Без этого исправления процессор всегда будет стартовать с адреса 0, а реализация МС1201 вообще невозможна.
Vslav, в планах нет? :)
Нету. Реверс штука дорогая, все подряд реверсить не будешь :)
1801ВМ2 есть - и то хорошо.
- - - Добавлено - - -
Теперь цепочка тестов все равно завершается сообщением "ДЕФЕКТ НЕЗАПЛАНИРОВАННОЕ ПРЕРЫВАНИЕ"
Это не может быть прерывание от таймера? Отключено?
на это незапланированное прерывание можно было бы плюнуть. Но тут уже дело принципа.
Конечно, надо добить, такой путь уже прошли, было бы обидно бросить.
Тогда уж заодно внесите и исправление в контроллер прерываний, о чем я тут уже писал
Да, я помню. Но там не мгновенно - надо всю структуру проектов переделывать. Сейчас 3 процессора и 7 плат - и в итоге 21 проект, и еще процессор и три платы на подходе (С5, династия Тан и IGLOO) - будет 4x10 - 40. Перебор, и оно будет квадратично продолжаться с ростом матрицы, вот думаю как это все в линейный рост перевести.
Это не может быть прерывание от таймера? Отключено?
Конечно отключено. Я пробовал включить - сообщений о незапланированном прерывании становится меньше, и при каждом запуске их количество начинает меняться. Что-то странное происходит с прерываниями.
Я уж думаю - может быть, это я неправильно управление памятью настроил? В документации на МС1201 информации об карте памяти практически нет, а схемотехнически все это спрятано в микросхеме D39 по имени 1801ВП1-013.
Из всхех кусочов информции, что удалось собрать, я предопложил, что
в юзерском режиме:
000000 - 157776 - RAM
160000 - 177776 - страница ввода-вывода с портами устройств
В режиме пульта:
000000 - 137776 - ничего нет
140000 - 157776 - ПЗУ 055
160000 - 177776 - RAM
Портов в этой конфигурации вообще нет, поэтому монитор с портами общается только через спецкоманды чтения-записи userspace.
И, судя по дизассемблированной части монитора, я если и ошибся, то не очень сильно. Буду в выходные искать дальше, откуда лезут эти незапланированные прерывания.
Да, я помню. Но там не мгновенно - надо всю структуру проектов переделывать
Насколько я понял, этот контроллер прерываний специфичен именно для ВМ2, поскольку через него реализовано безадресное чтение. У ВМ1 такого нет, а про LSI я не в курсе. И именно в реализации безадресного чтения и допущена ошибка.
По-моему, достаточно исправить 1 файл vm2/hdl/wbc/lib/wbc_vic.v, он общий для всех плат, поддерживаемых этим проектом.
в юзерском режиме:
000000 - 157776 - RAM
160000 - 177776 - страница ввода-вывода с портами устройств
В режиме пульта:
000000 - 137776 - ничего нет
140000 - 157776 - ПЗУ 055
160000 - 177776 - RAM
Вроде бы правильно.
По-моему, достаточно исправить 1 файл vm2/hdl/wbc/lib/wbc_vic.v, он общий для всех плат, поддерживаемых этим проектом.
А должен быть вообще один для всех плат и процессоров, с параметризацией. LSI тоже его использует (но не использует безадресное чтение).
Надо ковырять 055 чтобы понять когда выводится сообщение о незапланированном прерывании и пытаться поймать это место.
Нету. Реверс штука дорогая, все подряд реверсить не будешь
Жаааль :) Но понять можно :) У самого времени на всё не хватает...
У самого времени на всё не хватает...
Отож. Но если желающие реверсить будут - то сфотаем кристалл 1806ВМ2, это можно себе позволить :)
если желающие реверсить будут
У меня то желание есть, но вот времени, увы... И даже не предвидится... И до пенсии ещё далеко :D
Надо ковырять 055 чтобы понять когда выводится сообщение о незапланированном прерывании и пытаться поймать это место.
Да место-то как раз более-менее понятно...
Если опираться только на результат дизассемблирования, то пока видна единственная ситуация, в которой это может произойти. Получается, что при выходе из прерывания по RTI не восстанавливается бит 8 PSW, управляющий режимом user/halt. В результате управление уходит не в монитор а хрен знает куда - по адресу 170004 в юзерском пространстве ничего нет, возникает таймаут шины и незапланированный вылет по вектору 4. Обработчик вектора 4 выводит сообщение о незапланированном прерывании и делает RTI, и далее все по кругу несколько раз, пока стек не затрет какие-то куски кода в памяти.
Как вариант, бит 8 может быть и восстанавливается, но при этом не поднимается бит wb_adr[16] (который бывший SEL) - тогда не переключается карта памяти с теми же самыми последствиями.
В выходные постараюсь написать тестовую программку, моделирующую эту ситуацию, тогда станет понятнее. Может быть, я и не прав. Тут надо тщательно разбираться.
Да место-то как раз более-менее понятно...
Если опираться только на результат дизассемблирования, то пока видна единственная ситуация, в которой это может произойти. Получается, что при выходе из прерывания по RTI не восстанавливается
В тестовой SoC есть прерывания от таймера, я проверю восстановление PSW8 и адрес wb_adr_o[16].
В тестовой SoC есть прерывания от таймера, я проверю восстановление PSW8 и адрес wb_adr_o[16].
Да тут аппаратные прерывания как таковые для проверки не нужны.
Тут такая ситуация. Монитор по команде Т переписывает весь тестовый код из ПЗУ в младший банк ОЗУ и передает туда управление командой START. Далее отрабатывается тест, и затем происходит возврат в монитор вот таким способом:
ROM:002306 loc_2306: ; CODE XREF: sub_1570+104↑J
ROM:002306 ; default_int_handler+20↑J ...
ROM:002306 012746 000740 mov #740, -(SP)
ROM:002312 012746 170004 mov #loc_170004, -(SP)
ROM:002316 000002 rti
По адресу 170004, а это теневой банк ОЗУ, лежит команда JMP на бесконечный цикл обработки пультовых команд. И вот в этот момент, после RTI, и происходит незапланированное прерывание. Понятно, что если сигнал SEL не поднимется, то так и будет - после RTI управление уйдет на несуществующие адреса.
Надо это дело проверить. Я написал простенькую тестовую программку:
.WORD START
.WORD 0
.= 100
START:
MOV #410,SP
MOV #740,-(SP)
MOV #RMON,-(SP)
RTI
RMON:
MOV #MSG2,R3
CALL printstr
MFPS R3
CALL PNUM
STOP:
BR STOP
MSG2: .ASCIZ <15><12>"* PSW = "
Эта программка моделирует вышеописанный возврат в монитор - заталкивает в стек PSW с поднятым 8 битом. Запускаю. В терминале:
* PSW = 177744Вроде все правильно, бит 8 PSW установился.
Дальше чисто программными способами, без изменения схемы, не проверить. У меня на моей плате есть 4 светодиода. Я подвесил на один из них бит 16 адреса:
reg [16:0] indaddr;
always @ (posedge wb_stb) indaddr [16:0] <= wb_adr [16:0];
assign led0=indaddr[16];
Запускаю схему - светодиод не светится. То есть adr[16]==0. А поскольку программа в конце зацикливается и начинает топтаться по одним и тем же адресам, то все транзакции на шине должны быть с wb_adr[16]==1, и светодиод должен ярко светиться.
Вот она, проблема.
Остается промоделировать все это в моделсиме. Осциллограмму сюда я вставлять не буду, бесполезно это, прикладываю ее в архив. На ней хорошо видно:
1. Процессор читает слово 740 с адреса 000406. Это он из стека достал новый PSW.
2. По адресу 000116 читается 12703. Это уже выбирается первая команда после возврата по RTI. Адрес - именно 000116, ,бит 16==0, то есть перехода в режим пульта не было. Хотя в PSW бит 8 поднялся.
Вот и все мои на данный момент изыскания. Прикладываю архив с тестовой программкой. Конечно, запускать ее имеет больше смысла в симуляторе.
По адресу 170004, а это теневой банк ОЗУ, лежит команда JMP на бесконечный цикл обработки пультовых команд. И вот в этот момент, после RTI, и происходит незапланированное прерывание. Понятно, что если сигнал SEL не поднимется, то так и будет - после RTI управление уйдет на несуществующие адреса.
Ни добавить, ни убавить - как всегда, блестящий и точный анализ от forth32, указывающий на проблему.
Чтение 170004 после rti на оригинальной асинхронной модели:
http://www.1801bm1.com/files/images/org_model_sel.png
Чтение 170004 после rti на SoC модели (синхронная модель ведет себя тоже проблемно):
http://www.1801bm1.com/files/images/wbc_model_sel.png
Вывод: реверс сделан правильно, чего-то поломалось при переносе на FPGA. Будет чем заняться на выходные.
- при чтении 170004 не вырабатывается SEL
- а именно не вырабатывается sel2
- psw[8] не установлен
- при извлечении из стека нового слова состояния psw8_wa строба не было
- psw8_wa строба не было, так как был активен сигнал sf_byte, то есть - восстановили только младший байт из стека
- sf_byte активен из-за plm[1] указывающего на байтовую операцию
- выполнились микроинструкции по разным адресам 168(ошибка)/668(оригинал)
- неверный переход из-за разряда регистра ix[1]
- неправильно отработал сигнал dc_aux
- не появился сигнал bra
- потому что запоздал сигнал выхода матрицы ветвления plb
- потому что вход матрицы dc_b7 не успел поступить из-за замены латча на флип-флоп
dc_b7 - он как раз отвечает за проверку адреса возврата >= 160000 чтобы разрешить
возврат в пультовый режим, из-за запаздывания dc_b7 проверка была провалена.
В-общем, не уследил за одним латчем, сделал проброс:
br[7] <= ~(wr2 ? (ax[15:13] == 3'b111) : dc_b7);
forth32, спасибо за помощь в отладке, на github выложено обновление с куммулятивным фиксом - поправлены все найденные ошибки.
Ну, что ж, вот и все заработало наконец. Спасибо огромное, VLSAV! Тесты теперь практически идут как надо:
@T0
*** test sistemnoj pamqti ***
prowerka okon~ena
*** test ozu ***
pamqtx 020000 -157776
pamqtx 000600 -017776
prowerka okon~ena
*** test prc ***
prowerka okon~ena
*** test terminala ***
wwedite sledu`}ie simwoly:
1 2 3 4 J C U K
prowerka okon~ena
*** test acpu ***
defekt 16
*** test ngmd ***
defekt nezaplanirowannoe prerywanie
@
Последний тест НГМД все же выдает уже порядком надоевшее незапланированное прерывание, но это, скорее всего, из-за того, что портов контроллера НГМД в моей системе физически нет - при попытке работы с ними будет как раз такое прерывание. Но я, на всякий случай, это еще проверю, мало ли что еще могло всплыть.
Теперь осталось сочинить схему контроллера ИРПР для подключения принтера, и какой-нибудь эмулятор дисковода на SD-карте, как это сделано, например, в проекте PDP2011. Скорее всего это будет RK05 как самый емкий из поддерживаемых монитором.
Надеюсь, что ошибок в системе больше нет. Хотя вполне допускаю, что они могут встречаться в других процессорах. На них ведь до сих пор ничего серьезнее тестов не запускали. Возможно, когда-нибудь кто-то соберет практическую схему, например, МС1201.01 на ВМ1, погоняет тесты и тоже на что-нибудь нарвется.
- - - Добавлено - - -
Добавил в схему пару регистров на место портов НГМД - тест стал завершаться с дефектом 27. Никаких больше незапланированных прерываний. Полная победа!
На них ведь до сих пор ничего серьезнее тестов не запускали. Возможно, когда-нибудь кто-то соберет практическую схему, например, МС1201.01 на ВМ1, погоняет тесты и тоже на что-нибудь нарвется.
Да, покрытие заводскими тестами оказалось так себе, поэтому буду запускать проект mc507 - ДВК на FPGA. Блочный накопитель на SD-карте тоже в планах. Ну и надо бы переработать ПЗУ, там много мусора, его выкинуть, переместить на 160000, умерить аппетиты на теневое ОЗУ.
как это сделано, например, в проекте PDP2011.
Фигово там, на самом деле, сделано. Точнее, будут две проблемы, если использовать RK11 или RL11 и одна с половиной проблема, если RH11.
- В RK11 и RL11 после того, как стартует операция, делается запрос на ПДП и он снимается после того, как ВЕСЬ запрос закончится.
- Все контроллеры рассчитаны на внутренний вариант шины, а он не совсем совпадает с QBUS - ни по сигналам, ни по логике отработки, по крайне мере, ПДП.
- Первый пункт в RH11 автор вроде поправил, но налетел на эпизодическую ошибку в каком то варианте Unix-а, причем виноват именно новый вариант RH11
Ну и как "вишенка" на торт - RK11 и RL11 (со старой схемой работы) работают только с SD картами, но не с более новыми. Хотя это и не сильно парит - SD
ещё есть в продаже. RH11 он переделал и на поддержку новых карт, но... см пункт 3
- - - Добавлено - - -
Вдогонку. RK11 я переделал, что бы он не был такой жадный к ПДП (остальные пока нет), но он рассчитан на мой вариант внутренней шины (который как бы ещё в процесс развития и доработки, хотя на DE10 вроде как всё работает но проблема), плюс на виртуальную "корзинку", плюс, для выхода на QBUS - на конвертер QBUS <-> внутренняя шина. И до какой то степени "корзина" и особенно конвертер - в процессе отладки и доработки. То есть пока отдавать, собственно, нечего...
- - - Добавлено - - -
Э.. Забыл написать про половинку проблемы с RH11. Отсутствие загрузчика (вроде как) в 055 прошивке. Но тут наверняка не скажу - 055 не потрошил - и какие там загрузчики - не скажу. Просто сильно подозреваю, что для RH11 нету..
Фигово там, на самом деле, сделано. Точнее, будут две проблемы, если использовать RK11 или RL11 и одна с половиной проблема, если RH11.
Да, это я знаю. Я лет 5 назад поигрался с этим проектом. Думал из него сделать МС1201.02, но не получилось - тут нужен именно ВМ2.
Тогда я перегнал большинство исходников с мерзкого VHDL на кошерный Verilog, сделал полноценный терминал VT52 вместо того убожества, что там было, и сильно переделал дисковую подсистему. В моем варианте все три контроллера уже работают с SDHC-картами, более того, они все разделяют между собой одну и ту же карту, каждый хранит образы дисков в своей области адресов.
В данном случае контроллер RK05 мне придется переделать с недо-QBUS шины на стандартный wishbone, тогда его можно будет легко подключить к уже сделанной МС1201.02. Вот и займусь в выходные. Может быть, потом и еще кому пригодится.
Ну и надо бы переработать ПЗУ, там много мусора, его выкинуть, переместить на 160000, умерить аппетиты на теневое ОЗУ.
Если из него выкинуть тесты, лишние загрузчики (типа перфоленточного) и еще кое-какой хлам, то можно, наверное, килобайта в 3-4 уложиться, а то и меньше. Там самое жирное - эмулятор FIS-инструкций, ну и обработчик пультовых команд тоже немало занимает. Можно вполне его упихать в щель 160000-167776, там все равно никаких портов нет. Тогда в юзерском режиме будет доступно 000000-157776. А теневое ОЗУ -оно же все равно пропадает, в данном случае область 160000-177776. Пусть себе монитор ее использует как хочет.
Я бы мог заняться такой переделкой ПЗУ 055, поскольку уже его дизассемблировал, но в данном случае нужны, как я понимаю, ДВКшные пзу.
они все разделяют между собой одну и ту же карту
Даже не буду на это заморачивать, плюс как раз в том, что могут параллельно работать. Так что у меня к DE10 подключена платка, на которой разведено три SD разъёма и в планах ethernet адаптер припаять
с мерзкого VHDL
Вы просто не умеете его готовить. И в нём есть некоторое количество полезностей, которых нет в verilog
Если из него выкинуть тесты, лишние загрузчики (типа перфоленточного) и еще кое-какой хлам, то можно, наверное, килобайта в 3-4 уложиться, а то и меньше.Коллеги, а что бы вам не взять ПЗУ 279? Куча загрузчиков, более грамотно сделано - все-таки, типа работы над ощибками 055-го...
Коллеги, а что бы вам не взять ПЗУ 279? Куча загрузчиков, более грамотно сделано - все-таки, типа работы над ощибками 055-го...
А где взять прошивку? Вообще ПЗУ-шка должна быть модульной - по ключам компиляции набирать необходимые опции.
Update: нашел тут (https://forum.maxiol.com/index.php?showtopic=4118)
по ключам компиляции набирать необходимые опции.
В MACRO-11 это называется условная компиляция и символы условной компиляции :)
У меня так 134 сделана - в зависимости от настроек можно получить от исходного до последнего :) Примерно так 127 вариантов :)
Коллеги, а что бы вам не взять ПЗУ 279?
Я ее пробовал. Работает, вообщем-то не хуже. Разница там в дополнительных командах монитора, в другом наборе загрузчиков и другом наборе тестов. И, кстати все тесты прошли без проблем, и тест таймера в том числе.
Но для моих утилитарных целей без разницы какой ПЗУ ставить. Мне надо загрузить RT-11 и запустить под ним спецпрограмму для управления разрывной машиной. А вот для всяких ДВК-проектов действительно лучше иметь ПЗУ, собираемое из исходников.
На форуме так активно развивается тема PDP-11, и так незначительно тема Спектрума, что его можно переименовать в pdp11-pk.ru)
У меня так 134 сделана - в зависимости от настроек можно получить от исходного до последнегоА 377-ю не пробовал? А то в 134-й теневой ODT толком не воспользуешься...
А 377-ю не пробовал
Я начал её дизассмеблировать, но там настолько всё криво написано, что бросил - времени пока нет, меня и 134-ая устраивает.
- - - Добавлено - - -
А то в 134-й теневой ODT толком не воспользуешься...
Нормально пользуюсь.
То есть, ты ей толком не пользуешься. Или для тебя, в ситуации, подобной вот этой,
@10000/016746
00010002/172314 _
00202320/000000
@2320/011000необходимость закрывать ячейку 202320, открытую по дурости 134-й (Enter в предпоследней строчке) и открывать 2320 (набрать руками 2320/) - это мелочь, не заслуживающая внимания? Меня это напрягает конкретно.И это еще если выключен диспетчер памяти. Если он включен, запускай восьмеричный калькулятор и считай все адреса сам (можешь на бумажке), или подключай настоящую ODT - теневая ODT 134-й тут вообще ничем не поможет.
Конечно, если пользоваться одной командой Boot...
Для сравнения вот из-под 377-й
@10000/000167
00010002/176570 _
00006574/052737
Меня это напрягает конкретно.
Твои проблемы
Просто это показывает, что ты мало занимаешься отладкой программ на нашей любимой машинке. Я, когда отлаживал XM/TSX-ные дровишки для AZ, потыкавшись 3 минуты с драгоценной 134-й, выдрал ее и засунул туда 377-ю. Ну не запускать же настоящую ODT, когда есть замечательная теневая 377-я?
Ну ты блин прям ясновидец. Конечно, драйвера (за последний год) WQ, CF, объединённый CF, SD - под две системы - ну прям вообще не в счёт. И как же я их без 377 отлаживал, а?
Тем более, что для отладки драйвера при помощи "настоящей" ODT необходимо, чтобы этот драйвер не был системным - ее же с чего-то тоже надо загрузить прежде, чем отлаживать. А теневая ODT, как и микро-ODT оригинальных машинок, как юный пионер, всегда готова.
И тем более, я молчу про отладку в динамике мерцающих ошибок - ну тут прям без 377 как без ног.
- - - Добавлено - - -
"настоящей" ODT необходимо, чтобы этот драйвер не был системным
Я ODT для отладки драйверов не использую. От слова совсем. И мне плевать - системный драйвер или нет.
А реверсом 588 серии (588ВУ2-000Х) никто заниматься в будущем не планирует? :D А то пригодилось бы для создания максимально точных эмуляторов Электроники МК 90 и Немиги.
Со своей стороны проспонсирую - чипы вроде бы ещё продаются на radel.ru (http://radel.ru/). Могу выкупить и переслать кому надо.
588ВУ2-000Х
Это же вроде ПЗУ микрокода, не?
А реверсом 588 серии (588ВУ2-000Х) никто заниматься в будущем не планирует? :D А то пригодилось бы для создания максимально точных эмуляторов Электроники МК 90 и Немиги.
Со своей стороны проспонсирую - чипы вроде бы ещё продаются на radel.ru (http://radel.ru/). Могу выкупить и переслать кому надо.
Всячески поддерживаю, могу даже деньгами - того кто будет реверсом заниматься.
Но что касается конкретно микросхем с микрокодом - по идее же можно отладочную плату собрать и вытащить весь микрокод, прощёлкав все адреса.
Готов кто-нибудь заняться?
Это же вроде ПЗУ микрокода, не?
Сверился с даташитами, да. Но их же всё равно надо читать, хоть это и упрощает работу в разы (там ВУ2 с 0001 по 0005).
А вот реально фотографировать придётся похоже 588ВС2
Но их же всё равно надо читать
Ну, читать - не реверсить :)
К сожалению, насколько мне известно 588ВУ2 прочитать непросто, там поле NAF (следующий адрес) наружу не выходит, 7-битный регистр внутри сидит и дает слабо определяемую обратную связь.
С другой стороны, от 3-4 полных комплектов 588-ой серии (ВС2 и ВУ2/0001-0005) не отказался бы. Готов оплатить покупку и пересылку. Буду реверсить - не буду, пусть будут :)
К сожалению, насколько мне известно 588ВУ2 прочитать непросто, там поле NAF (следующий адрес) наружу не выходит, 7-битный регистр внутри сидит и дает слабо определяемую обратную связь.
Вроде как ПЗУ прочитаны (может не все а только 0001-0004)- источник. (http://mk90.blogspot.com/2008/10/blog-post_21.html)
- - - Добавлено - - -
Готов оплатить покупку и пересылку.
Да они как бы есть - https://tehkomplekt.kiev.ua/p88803875-588vu2b-0001.html
Вроде как ПЗУ прочитаны (может не все а только 0001-0004)- источник. (http://mk90.blogspot.com/2008/10/blog-post_21.html)
Я там о прочтении ничего не нашел. Ну и файлов, соответственно, никаких с прошивками нет. Там внутри ПЛМ, на входе минимум 20 переменных + 7 внутренних, как ПЗУ это предстваить можно как 128 мегабайтная прошивка, ну или уравнения.
Да они как бы есть - https://tehkomplekt.kiev.ua/p88803875-588vu2b-0001.html
Спасибо, оформил заказ на ВУ2-0001-0005, посмотрим что скажут. 588ВС2 там нет.
- - - Добавлено - - -
Заказал 588ВС2 в другом месте, подождем ответов.
Я там о прочтении ничего не нашел.
Таблицы кодов микрокоманд известны, однако полностью бесполезны для прикладного программирования: во-первых, ПЗУ микрокоманд нельзя перепрограммировать
Сначала интерпретировал как прочитку ПЗУ.
- - - Добавлено - - -
Спасибо, оформил заказ на ВУ2-0001-0005
Ещё существуют 0006-0007
Сначала интерпретировал как прочитку ПЗУ.
Там автор говорит о ПЗУ 1835РЕ1, оно действительно давно прочитано) Скорее всего он хотел сказать что МК 90 является не более чем игрушкой на бейсике, а уж никак не компьютером, который работает под RT-11 и ей подобными. На самом деле это не совсем так. Можно заставить выполнять его код на Макро-11 из СМП.
- - - Добавлено - - -
Ещё существуют 0006-0007
В МК 90 используются 0001-0005, в Немиге 0001-0006. Последняя отвечает за:
Умножение
Деление
Многоразрядный сдвиг
Сдвиг комбинированный
(цитата из ТО на Немигу)
- - - Добавлено - - -
Кроме того - как я понял, 588 серия шла в двух корпусах - для поверхностного монтажа (в МК 90) и для выводного (в Немиге). Может там и кристаллы отличаются.
в Немиге 0001-0006.
В Немиге 0001,0002,0004,0006,0007.
Там внутри ПЛМ, на входе минимум 20 переменных + 7 внутренних, как ПЗУ это предстваить можно как 128 мегабайтная прошивка, ну или уравнения.
Из справочника Нефёдова.
ПЛМ состоит из двух программируемых логических подматриц ПЛМ1 (эквивалентна 100 27-входовым логическим элементам И-НЕ) и ПЛМ2 (эквивалентна 24 100-входовым логическим элементам) и программируемой матрицы инверторов.
У меня есть 6 и 7 - по 4 штуки могу отправить :)
В Немиге 0001,0002,0004,0006,0007.
Честно скажу, по Немигам я не эксперт, но фото плат гуглятся только мыльные из темы по продаже оного на Полигоне. А в ТО есть полный список команд и ВУ2, которые их реализуют. 0007 в списке я не вижу.
Система команд ЦП
Таблица 1
──────────────── ──┬───────────── ─┬────────────── ───────┬────────
Код команды │ Признаки │ Содержание команды │ Номер
──────────┬───── ──┼───┬───┬───┬─ ─┤ │кодировки
Мнемоника │8-ричный│ N │ Z │ V │ C │ │
──────────┼───── ──┼───┼───┼───┼─ ─┼────────────── ───────┼────────
CLR (A) |*050DD | 0 | 1 | 0 | 0 |Очистка | 0001
COM (A) |*051DD | + | + | 0 | 1 |Инвертирование | 0001
INC (A) |*052DD | + | + | + | - |Инкрементация | 0001
DEC (A) |*053DD | + | + | + | - |Декрементация | 0001
NEG (A) |*054DD | + | + | + | + |Дополнение | 0001
ADC (A) |*055DD | + | + | + | + |Сложение с переносом | 0001
SEC (A) |*056DD | + | + | + | + |Вычитание переноса | 0001
TST (A) |*057DD | + | + | 0 | 0 |Проверка | 0001
ROR (A) |*060DD | + | + | + | + |Сдвиг цикл.правый | 0001
ROL (A) |*061DD | + | + | + | + |Сдвиг цикл.левый | 0001
ASR (A) |*062DD | + | + | + | + |Сдвиг арифм.правый | 0001
ASL (A) |*063DD | + | + | + | + |Сдвиг арифм.левый | 0001
MOV (A,B) |*1SSDD | + | + | 0 | - |Пересылка | 0001
CMP (A,B) |*2SSDD | + | + | + | + |Сравнение | 0001
BIT (A,B) |*3SSDD | + | + | 0 | - |Проверка разрядов | 0001
BIC (A,B) |*4SSDD | + | + | 0 | - |Очистка разрядов | 0001
BIS (A,B) |*5SSDD | + | + | 0 | - |Логическое "ИЛИ" | 0001
ADD (A,B) |06SSDD | + | + | + | + |Сложение | 0001
SUB (A,B) |16SSDD | + | + | + | + |Вычитание | 0001
| | | | | | |
NOP |000240 | | | | |Нет операции | 0002
CLC |000241 | - | - | - | 0 |Очистка "С" | 0002
CLV |000242 | - | - | 0 | - |Очистка "V" | 0002
CLZ |000244 | - | 0 | - | - |Очистка "Z" | 0002
CLN |000250 | 0 | - | - | - |Очистка "N" | 0002
SEC |000261 | - | - | - | I |Установка "С" | 0002
SEV |000262 | - | - | I | - |Установка "V" | 0002
SEZ |000264 | - | I | - | - |Установка "Z" | 0002
SEN |000270 | I | - | - | - |Установка "N" | 0002
SCC |000277 | I | I | I | I |Установка "С", "V" | 0002
| | | | | | "Z", "N" |
CCC |000257 | 0 | 0 | 0 | 0 |Очистка "С", "V" | 0002
| | | | | | "Z", "N" |
SWAB |0003DD | + | + | 0 | 0 |Перестановка байтов | 0002
MARK |0064NN | - | - | - | - |Восстановление указа-| 0002
| | | | | |теля стека |
XOR (R,A) |074RDD | + | + | 0 | - |Исключающее "ИЛИ" | 0002
BR (A) |0004XXX | |Ветвление безусловное| 0002
BNE (A) |0010XXX | Z=0 |Ветвление, если =0 | 0002
BEQ (A) |0014XXX | Z=1 |Ветвление, если =0 | 0002
BGE (A) |0020XXX | NOV=0 |Ветвление, если >0 | 0002
BLT (A) |0024XXX | NOV=1 |Ветвление, если <0 | 0002
BGT (A) |0030XXX | ZV(NOV)?0 |Ветвление, если >0 | 0002
BLE (A) |0034XXX | ZV(NOV)=1 |Ветвление, если <0 | 0002
SOB (A) |077RNN | Z=0 |Вычитание единицы, | 0002
| | |если результат =0 | 0002
BLR (A) |1000XXX | N=0 |Ветвление, если + | 0002
BMI (A) |1004XXX | N=1 |Ветвление, если - | 0002
BHI (A) |1010XXX | ZVC=0 |Ветвление, если > | 0002
BLOS (A) |1014XXX | ZVC=1 |Ветвление, если < | 0002
BVC (A) |1020XXX | V=0 |Ветвление, если нет | 0002
| | |переполнения | 0002
BVS (A) |1024XXX | V=I |Ветвление, если | 0002
| | |переполнение | 0002
BHIS (A) |1030XXX | C=0 |Ветвление, если нет | 0002
| | |переноса |
BLO (A) |1034XXX | C=I |Ветвление, если | 0002
| | |перенос |
MUL (R,A) |070RSS | + | + | 0 | + |Умножение | 0006
DIV (R,A) |071RSS | + | + | + | + |Деление | 0006
ASH (R,A) |072RSS | + | + | + | + |Многоразрядный сдвиг | 0006
ASHC (R,A)|073RSS | + | + | + | + |Сдвиг комбинированный| 0006
HALT |000000 | |Останов | 0004
WAIT |00000I | |Ожидание | 0004
RTI |000002 | |Возврат из прерыва- | 0004
| | |ния |
BPT |000003 | |Прерыв.для отладки | 0004
IOT |000004 | |Прерыв.для ВВ/ВЫВ | 0004
RESET |000005 | |Сброс | 0004
RTT |000006 | |Возврат из прерыва- | 0004
| | |ния |
JMP (A) |0001DD | |Безусловный переход | 0004
RTS (R) |00020R | |Возврат из подпрогр. | 0004
JSR (R,A) |0004RDD | |Переход к подпрограм-| 0004
| | |ме |
EMT |104000- | |Командное прерывание | 0004
|104377 | | |
SXT (A) |0067DD | - | + | 0 | - |Расширение знака | 0002
MTPS (A) |1064SS | + | + | + | + |Запись ССП | 0002
MFPS (A) |1067DD | - | + | 0 | - |Чтение ССП | 0002
TRAP |104400- | | | | |Командное прерывание | 0004
|104777 | | | | | |
П р и м е ч а н и я:
1. R - восьмеричный код РОН (0-7);
SS - поле адресации операнда источника;
DD - поле адресации операнда приемника;
* - операция производится над байтом, если * = 1
над словом, если * = 0;
XXX - смещение (8 разрядов);
NN - смещение (6 разрядов).
2. В графе "признаки" указаны значения признаков N,Z и C,V
слова состояния процессора, которые устанавливаются после выполнения
процессором каждой команды. Знак "+" означает, что данный разряд ССП
будет установлен в "0" или "1" в зависимости от результата выполне-
ния команды. Знак "-" означает, что команда не оказывает воздействия
на данный разряд ССП.
3. B графе 8 указан номер кодировки микросхемы КР588ВУ2‚ отве-
чающей за выполнение соответствующей команды.
0007 в списке я не вижу.
Немиг было 3 варианта.
Фото платы с 0007.
https://s019.radikal.ru/i600/1612/25/b870a48e50ab.jpg
CodeMaster
04.07.2020, 23:18
выполнять код на Макро-11
Какая-то странная фраза :-/ Это как?
Вроде как ПЗУ прочитаны (может не все а только 0001-0004)- источник. (http://mk90.blogspot.com/2008/10/blog-post_21.html)
Нашёл только схему отладочной платы от ASDT, при помощи которой он работал с 588: https://zx-pk.ru/threads/18152-samopal-k588-i-drugie-kompyutery-na-serii-k588.html?p=985108&viewfull=1#post985108
После этого юзер ASDT пропал.
Вы там осторожнее с микрокодом ;-)
- - - Updated - - -
Честно скажу, по Немигам я не эксперт, но фото плат гуглятся только мыльные из темы по продаже оного на Полигоне. А в ТО есть полный список команд и ВУ2, которые их реализуют. 0007 в списке я не вижу.
В том же ТО упоминается 0007: http://www.emuverse.ru/wiki/%D0%9D%D0%B5%D0%BC%D0%B8%D0%B3%D0%B0/%D0%A2%D0%9E
Управляющая память (УП) представляет собой программируемую ло-
гическую матрицу (ПЛМ) с памятью.
Она предназначена для управления работой процессорного ядра и
сочетает в себе функции БИС блока микропрограммного управления и ПЗУ
микрокоманд. Микросхемы с номерами кодировок 0001, 0002, 0004 пред-
назначены для управления АЛУ, БИС УП с кодировкой 0007 - для управ-
ления системным контроллером D18, БИС с кодировкой 0006 предназ-
начена для аппаратной реализации команд расширенной арифметики (ум-
ножение, деление, сдвиги – MUL, DIV, ASH, ASHC).
- - - Updated - - -
В схеме Немиги также указаны КР588ВУ2-0001, -0002, -0006, -0004, -0007.
- - - Updated - - -
А вообще по Немиге тут на форуме отдельная тема есть, чтобы не оффтопить - https://zx-pk.ru/threads/12828-uchebnyj-kompleks-nemiga.html
CodeMaster
04.07.2020, 23:34
ПЛМ состоит из двух программируемых логических подматриц ПЛМ1
А в виде блок-схемы нет? А то текст описание взрывает моск :-(
Какая-то странная фраза :-/ Это как?
Согласен, непонятно написал. Имелся ввиду конечно же уже собранный код.
А в виде блок-схемы нет? А то текст описание взрывает моск :-(
Г.Г.Гришин и другие. Микропроцессоры (Справочное пособие для разработчиков РЭА)
страница 207
http://publ.lib.ru/ARCHIVES/G/GRISHIN_Georgiy_Georgievich/_Grishin_G.G..html
Возник у меня вопрос по использованию DMA с wishbone-моделью ВМ2. Я по жизни раньше с этой шиной дела не имел, поэтому и обращаюсь за помощью.
В оригинальном ВМ2 для того, чтобы отобрать шину у процессора, надо было выставить ему сигнал DMR, дождаться подтверждения DMGO, выставить сигнал SACK и снять DMR, и далее делать с шиной все что угодно, пока не снят сигнал SACK.
Я правильно понимаю, что в синхронной схеме c wishbone-интерфейсом достаточно в любой момент, пока шина не занята (CYC=0), по фронту sys_clk_p выставить сигнал wbm_gnt_i=0 ? И после этого процессор не будет трогать шину, пока этот сигнал не вернется обратно в 1.
Я правильно понимаю, что в синхронной схеме c wishbone-интерфейсом достаточно в любой момент, пока шина не занята (CYC=0), по фронту sys_clk_p выставить сигнал wbm_gnt_i=0 ?
Нет, арбитраж засовывать в каждую модель (ВМ1/2/LSI...) было бы накладно и сложновато (там хватает проблем с конверсией Qbus в Winshbone), поэтому он предполагается внешний и я им еще не занимался (к DMA еще нужен хороший SDRAM контроллер, с пакетным режимом и поддержкой открытых страниц). Процессор просто выставляет wb_cyc/wb_stb и ждет wb_ack. А если шина занята кем-то и шина не достается процессору, то сигнал wbm_gnt_i служит для остановки внутреннего таймера транзации. То есть затянувшийся DMA не будет вызывать ошибку по тайм-ауту шины.
- - - Добавлено - - -
Сегодняшние обновления, выложены на github:
- исправлена ошибка с модератором шины (тот который имитирует низкую тактовую частоту), при неудачной смене режима шина могла зависнуть
- для платы DE0 создан единый проект, в его рамках могут быть собраны все имеющиеся модели процессоров (ВМ1/2/LSI). Сейчас есть 3 модели и 7 отладочных плат - 21 проект, планируется добавить еще два процессора и минимум две платы - станет 4*9 проектов, поддерживать и развивать это сложно, там копится мусор, поэтому двигаюсь в сторону унификации, все особенности семейства FPGA/платы вынесены в отдельные файлы, для процессора делается унифицированный компонент, который втыкается в любую плату и получаем 3 + 7 = 10 (вместо 3 * 7 = 21) уже на сейчас.
ВМ1 поднялся до 128МГц на DE0 :)
Сейчас есть 3 модели и 7 отладочных платВот эта (https://forum.maxiol.com/index.php?showtopic=5332) в их число входит?
Вот эта (https://forum.maxiol.com/index.php?showtopic=5332) в их число входит?
Нет, но из DE2-115 (которая тоже на Cyclone-IV) за пару часов переделывается.
Вообще-то проект Open Source, и не просто так выложен на github. Каждый может клонировать репку, добавить что-то свое и сделать Pull Request. У Вас есть эта плата? Отлично, давайте я закончу общий консолидированный проект на DE2-115, а потом Вы его портанете на свою плату, сделаете PR и мы его замерждим? И любой сможет пользоваться результатами Вашего порта, и коммит Ваш именной будет вклад увековечивать. Ну да, желательно потом поддерживать, добавлять новые процессоры по мере выхода, но то такое.
- - - Добавлено - - -
588ВС2 куплена у 3.3volt.ua, оплачена, скоро поедет, и это удивительно.
Остальные продавцы - "на морозе". Ничего нового, все как всегда.
Vslav, ВУ2-0006-0007 то нужны?
Vslav, ВУ2-0006-0007 то нужны?
по паре штук будет? Желательно 3-4, это КМОП, дело новое.
это КМОП, дело новое.
Как это новое? У нас уже были отреверсены к-МОП-овские чипы же.
Как это новое? У нас уже были отреверсены к-МОП-овские чипы же.
Это ты про 1515ХМ1? Это там где области диффузии под линеечку и не надо гадать где "n" а где "p" легирование?
Ну тогда да - "КМОП чипы у нас уже были" :)
Это ты про 1515ХМ1? Это там где области диффузии под линеечку и не надо гадать где "n" а где "p" легирование?
Ну тогда да - "КМОП чипы у нас уже были"
По смыслу будет понятно, где n, где p )
По смыслу будет понятно, где n, где p )
Оно не всегда понятно на n-MOS где транзистор со встроенным каналом, а где depletion load, а на CMOS нюансов поболе может быть.
Оно не всегда понятно на n-MOS где транзистор со встроенным каналом, а где depletion load, а на CMOS нюансов поболе может быть.
Не знаю, когда я реверсил видеочип от Dendy (а там n-MOS со встроенным каналом), все было понятно абсолютно.
Не знаю, когда я реверсил видеочип от Dendy (а там n-MOS со встроенным каналом), все было понятно абсолютно.
Это хорошо, а я три дня убил чтобы понять как селектор регистров в 1801ВМ1 работает. Потому что там два последовательных транзистора разного типа включены, и для каждого из регистров в паре по-разному, и на фотографии этого абсолютно не видно. Кодировка двух битов как сделано в ячейке микрокода 8087 тоже может радости доставить. Это сейчас все легко, понятно и весело, а в процессе реверса - оно как-то не очень.
Может, уважаемый Вслав что-нибуть предложит для самодела 130 нм. ?
https://habr.com/ru/news/t/509748/
Могут только 10 мм кв., на мощностях Кипреса.
Интересно, какое СОЗУ туда можно впихнуть ?
( 6-транзисторная схема ).
- - - Добавлено - - -
Может, ОЭВМ на ВМ2 ?
- нечего предлагать, нет законченной SoC
- времени переквалифицироваться в тополога ИМС нет
- есть вопросы лицензирования системы команд PDP-11
- не думаю что гуглю интересны ретропроцессоры в кремнии
Но следить за проектом буду, какой инструмент предложат, PDK, etc
- не думаю что гуглю интересны ретропроцессоры в кремнии
Так по 130 нм они будут не такие уж и ретро. 50 мгц мин. ? А если пересчитать такты Туалатина П-3 в такты ВМ2 - то и 100 мгц не предел...
Зато софта под ВМ2 - изрядно будет.
- нечего предлагать, нет законченной SoC
Помогу в разработке, на уровне блок-схем ( не транзисторов ).
Примерная конфа :
1. ВМ2 с выходом традиционной МПИ, входя тактовой частоты - как на 1801ВМ2А. Множитель вычислительного ядра - 1х, 2х, 4х, 8х, 16х....
2. Отключаемое СОЗУ 8 Кбайт, с назначаемым адресом
3. Отключаемый аналог ВВ55 , с назначаемым адресом
4. Отключаемый 1801ВП1-065, с отдельным входом и множителем тактовой, могущий 1200...115200 Бод ( ил даже 1 Мбит ).
Для переферийных блоков - отдельный выход RPLY.
Корпусировка - "кристалл на плате", залитый компаундом, на ENIG 4СПП, шаг выводов - 1 мм, к-во - 80 или 108.
Проволочки к плате-носителю будут сами потребители подпаивать, или др. варианты монтажа.
4. Отключаемый 1801ВП1-065, с отдельным входом и множителем тактовой, могущий 1200...115200 Бод ( ил даже 1 Мбит ).
Может, все же нормальный bus master?
1801 и их кмоп версии вообще плохо подходят для систем не кристалле (как и одноплатных конструкций), потому что у них - Q-bus на ножках.
Такой вопрос возник: DEC T11 это автомат как и 1801ВМ1, или арифметическое устройство + ПЗУ с микрокодом, только на одном кристалле?
Такой вопрос возник: DEC T11 это автомат как и 1801ВМ1, или арифметическое устройство + ПЗУ с микрокодом, только на одном кристалле?
Кристалл Т11 выглядит очень похожим на 1801ВМ1, поэтому с очень высокой вероятностью в Т11 тоже горизонтальный микрокод.
CodeMaster
09.07.2020, 18:52
Кристалл Т11 выглядит очень похожим на 1801ВМ1
А как же полностью самостоятельная разработка 1801ВЕ1 и только потом адаптация по DEC?
А как же полностью самостоятельная разработка 1801ВЕ1 и только потом адаптация по DEC?
Я не сказал что 1801ВЕ1/ВМ1 содраны с Т11. Просто структурно похожи, и это вполне логично если обе системы построены на горизонтальном микрокоде.
CodeMaster
09.07.2020, 22:56
Я не сказал что 1801ВЕ1/ВМ1 содраны с Т11. Просто структурно похожи, и это вполне логично если обе системы построены на горизонтальном микрокоде.
Я тоже не сказал, что содран, но ты хочешь сказать, что на "наши" не видели "их" кристаллы и независимо, чисто эволюционным путём, пришли к единственно оптимальной структуре компоновки?
А, кстати, был у нас какой-то 581ВЕ1 (?) говорили, что это нечто, вроде ЦП М1, т.е. тот же комплект 581-х, только без РА и ПЗ, утрамбованный в один кристалл. Это наши сами утрамбовали, или содрали с того самого Т11?
Я тоже не сказал, что содран, но ты хочешь сказать, что на "наши" не видели "их" кристаллы и независимо, чисто эволюционным путём, пришли к единственно оптимальной структуре компоновки?
Да видели. И сделали 1807ВМ1. А 1801ВМ1... Ну автомобили же одинаково строятся - руль, мотор, колеса. Ну вот считай что T11 и 1801ВМ1 это два автомобиля.
>был у нас какой-то 581ВЕ1 (?) говорили, что это нечто, вроде ЦП М1
Это тот на котором М3 собран?
- - - Добавлено - - -
что на "наши" не видели "их" кристаллы и независимо, чисто эволюционным путём
Согласно общепризнанной легенде те "наши", что делали 1801ВМ1 изначально DEC'овскими изделиями совсем не интересовались. И "прошивка" у этого процессора была под другую систему команд.
А когда им сказали что такой "футбол" нам не нужен, они "допилили/перешили" под систему команд Э60.
А, кстати, был у нас какой-то 581ВЕ1 (?) говорили, что это нечто, вроде ЦП М1, т.е. тот же комплект 581-х, только без РА и ПЗ, утрамбованный в один кристалл. Это наши сами утрамбовали, или содрали с того самого Т11?
T11 очень далек от MCP-1600, совершенно другой принцип - горизонтальный микрокод против вертикального, так что 581ВЕ1 это самодеятельность.
CodeMaster
10.07.2020, 09:57
Согласно общепризнанной легенде
Её я, конечно же, слышал, поэтому и возникли вопросы по наблюдению Vslav'а.
Ну автомобили же одинаково строятся - руль, мотор, колеса. Ну вот считай что T11 и 1801ВМ1 это два автомобиля.
Ну, просто на мой взгляд, в плане построения кристалла свободы всё же побольше, но видимо ты прав, физические, технологические и иные ограничения видимо создавали небольшой разбег для вариаций. Это, наверное, будет понятно при более детальном рассмотрении.
А, кстати, был у нас какой-то 581ВЕ1 (?) говорили, что это нечто, вроде ЦП М1, т.е. тот же комплект 581-х, только без РА и ПЗ, утрамбованный в один кристалл. Это наши сами утрамбовали, или содрали с того самого Т11?
Пишут что это клон некого CP1651. Есть вообще где-нибудь фото этого М3 чтобы сравнить чисто по внешнему виду с DECовскими платами?
Vslav, ВУ2-0006-0007 то нужны?
- куплены 588ВС2 и 588ВГ1.
- ВУ2-0006/0007 Hunta собирается прислать.
- 0001-0005 ВУ2 пока нету.
- остальное из 588-ой серии реверсить ненужно.
А как же полностью самостоятельная разработка 1801ВЕ1 и только потом адаптация по DEC?
1801ВЕ1 с QBUS шиной. Какие то из процессоров архитектуры С5 тоже с QBUS шиной.
- - - Добавлено - - -
0001-0005 ВУ2 пока нету.
Где нет, в Киеве? На Украине?
- 0001-0005 ВУ2 пока нету
У меня есть и 0001-0005, некоторые могу легко выслать по 4 шутки, если что.
У меня есть и 0001-0005, некоторые могу легко выслать по 4 шутки, если что.
А если нелегко, то и все можешь выслать? :)
Да высылай конечно, раз моГешь ?
А если нелегко
Просто какой одной то из этих семи немного - но на память - не помню. Полезу когда посылку собирать - наберу всех, каких смогу по 4 и тогда отпишусь
Просто какой одной то из этих семи немного - но на память - не помню. Полезу когда посылку собирать - наберу всех, каких смогу по 4 и тогда отпишусь
Что не найдется 4 - давай хоть по одной, если можно, на твое усмотрение. Вдруг одну отреверсим и найдем способ вычитывать. Я вот подозреваю что 1811ВУх можно читать снаружи полностью внутренние состояния, там есть тестовые команды, вдруг и с 588 получится.
Что не найдется 4 - давай хоть по одной, если можно, на твое усмотрение
Хорошо :)
1801ВЕ1 с QBUS шиной. Какие то из процессоров архитектуры С5 тоже с QBUS шиной. Наверное, все-таки, с чем-то похожим на Q-bus, а не с точной копией. У Электроники С5 и в системе команд заметно влияние PDP-11, так сказать "сделано по дальним мотивам" - и автоинкременты с автодекрементами, и счетчик команд в одном из регистров, и относительная адресация по нему, и еще что-то, плохо помню. Хотя машинка совсем другая регистров 16, в двухоперандных командах один операнд всегда регистр, и вообще она шестнадцатеричная.
посмотрите - как можно сделать простейшую машину на 1807ВМ1(Т11) :
https://cloud.mail.ru/public/219D/2CRRDp4P4
и прикиньте как это выглядело бы на 1801.
Так оно еще и 8-битное? Тогда интерфейс этого ЦП ни разу не МПИ и для организации нормального МПИ нужен еще тот огород!
и прикиньте как это выглядело бы на 1801. Еще проще: процессор, 573РФ3 или 1801РР1 - ПЗУха, 1809РУ1 - ОЗУшка, 1801ВП1-065 - интерфейс терминала, чуток логики - тактовые генераторы и схема запуска, и все. Дорожек, правда, побольше - шина адреса/данных 16-разрядная, а не восьми-.
для организации нормального МПИ нужен еще тот огород!
я именно про то, что для одно-платных конструкций и для систем на кристалле - МПИ не нужен и вреден ( с этого и начался разговор).
А "573РФ3 или 1801РР1 - ПЗУха, 1809РУ1 - ОЗУшка, 1801ВП1-065" и т.д. - микросхемы не стандартные, уникальные, не имеют аналогов и трудно доставаемые.
Ну а возможность работать с 8 разрядной шиной данных (а это же процессор может и с 16-ти разрядной) экономит не только провода-линии, но микросхемы памяти (стандартной), да и паять на макете - меньше работы.
На 1201.2018 используется 16-ти битная шина данных и восьмибитная ПЗУ . И ничего - QBus это не мешает.
я именно про то, что для одно-платных конструкций и для систем на кристалле - МПИ не нужен и вреден ( с этого и начался разговор).Для одноплатных конструкций и систем на кристалле существуют вполне себе современные решения. Ту самую схему на миллиметровке легко и непринуждённо уделает любая АТмега - и по скорости, и по функционалу. А ретро-решение, если это не полная и завершенная система на кристалле или плате, обязано каким-то образом связываться с другими ретро-модулями. И, если это ретро - PDP-11, то для этой связи нужна МПИ.
На 1201.2018 используется 16-ти битная шина данных и восьмибитная ПЗУ
отстаете от жизни - на современных материнках биос 1-разрядный.
отстаете от жизни - на современных материнках биос 1-разрядный.
Зануда-mode: Там стоит Serial-flash, выдающая по 1 биту, но пачками не менее 8 бит. А выше говорилось о Parallel ROM. Не путайте понятия Serial и Parallel...
на современных материнках биос 1-разрядный.
Это далеко не современная материнка, а то, что прошито в ПЗУ - далеко не биос
CodeMaster
11.07.2020, 21:07
и прикиньте как это выглядело бы на 1801.
К сожалению, Ewgeny7 забросил свой проект минималистического компа на ВМ1, не смог преодолеть идеологию DEC'а.
Обновил репозиторий, теперь на каждую плату сделан отдельный единственный проект, из директорий с процессорами убрался мусор связанный с платами и моделированием на них.
Проект универсальный, можно по конфигурации подключить любой процессор из имеющегося набора и PLL с желаемой частотой. Было 15 разных проектов, с разными мелкими отличиями и остаточным мусором, теперь всего 5, и внутри все унифицировано и вычищено. Еще бы разобраться как по определениям конфигурации подключать нужный .sdc файл. То етсь - выбираем PLL 100MHz и .sdc должен подключаться для этой частоты, выбираем 75 MHz, должен подхватиться .sdc для этой частоты.
- остальное из 588-ой серии реверсить ненужно.
А 588ВС1 ? Да него существуют прошивки 588ВУ1А-0101, 0102, 0103, 0104. Возможно что прошивки не для системы команд Эл60, т.к. стоят на станочной процессорной плате.
Зато на плате 588ВС1 две стоят. Так-же на этой плате стоят 1801ВП1-022, 023, 024.
А 588ВС1 ? Да него существуют прошивки 588ВУ1А-0101, 0102, 0103, 0104. Возможно что прошивки не для системы команд Эл60, т.к. стоят на станочной процессорной плате.
Зато на плате 588ВС1 две стоят. Так-же на этой плате стоят 1801ВП1-022, 023, 024.
Я никогда не слышал про эту плату.
Ситуация очень простая, у меня ограниченные временнЫе ресурсы. Очень ограниченные.
А реверс требует времени. Много времени. Поэтому планы по реверсу тоже очень ограниченные.
Будет закончен М4 и 1801ВМ3, дальше я вообще не заглядываю. Возможно будет еще 1811/F11.
588 - это так просто, чтобы, если будет время и настроение, то сфотографировать.
Хотя бы Немигу потрогать время нашлось, тут уже не до неизвестной станочной платы.
тут уже не до неизвестной станочной платы.
Да я понял.
Это от НЦ31, уже выяснил.
Да я понял.
Это от НЦ31, уже выяснил.
MiX, я просто обязан намекнуть, спросить, напомнить, что вы уже давно не баловали форумчан публикацией софта?
Ничего интересного не попадалось по теме или времени возиться с образами нет?
(извиняюсь за оффтоп, просто ув. MiX регулярно ранее публиковал очень интересные вещи по теме ПО для ДВК)
что вы уже давно не баловали форумчан публикацией софта
Выкладывал образ винта от Эл.85. Но это не Ваша тема вроде как.
или времени возиться с образами нет?
Как сдампить дискету DY? Есть ГМД7012 но нет контроллера под DY (RXV21 - M8029).
извиняюсь за оффтоп
Ну да, не в этой теме.
Битва за Личитанг.
Еще весной были прикуплены недорогие и достаточно любопытные платки "Lichee Tang Risc V Development board" от Sipeed.
Вот такие (https://tang.sipeed.com/en/).
Там установлена китайская FPGA от Anlogic EG4S20, достаточно толстая, уровня Cyclone EP3C16/EP3C25, с бОльшим объемом
статической памяти и, главное, 32-битной SDRAM на 8MB, упакованной в тот же корпус, с обещанием работать на 200МГц.
Была скачана IDE для нее - Династия Танг, первое впечатление оказалось очень даже ничего, и было решено портануть
процессоры 1801 на эту платформу.
http://www.1801bm1.com/files/images/TangLogo.png
Создал проект и сразу уперся в различия PLL, было долго непонятно как генерировать нужное. Входная частота кварца на плате
в 24МГц отличается от остальных FPGA-шных отладочных плат 50МГц и стандартный ряд частот проекта - 50/66/75/100 МГц оказалось
поддержать непросто. Оно умеет делить выходную частоту на коэффициент и потом сравнивать со входной, тоже деленной на
заданный коэффициент, то есть - если надо 50МГц то надо поделить на 25 и получить 2МГц, и входные 24МГц поделить на 12 и получить
опорные 2МГц. Но - фазовый детектор в EG4S20 начинает работать от 10МГц! Пришлось создавать фантомный выход, который
никак не используется, только для обратной связи, задать VCO 600МГц как 24МГц * 25 и потом уже 600 делить на нужные
6/8/9/12 для получения требуемого ряда.
И верифицировать результат осциллографом, потому что сгенерированные IP показывали в исходниках странноватое.
В итоге PLL получилось победить, результаты (png, траффика нет):
http://www.1801bm1.com/files/images/lichee-50MHz.png
http://www.1801bm1.com/files/images/lichee-50MHz-1.png
http://www.1801bm1.com/files/images/lichee-66MHz.png
http://www.1801bm1.com/files/images/lichee-75MHz.png
http://www.1801bm1.com/files/images/lichee-100MHz.png
Кстати, видно как меняется форма сигнала с ростом частоты - это именно перестает тянуть выход микросхемы (пассивные щупы/скоп с полосой 500МГц).
Идем дальше и нарываемся на ошибки компиляции - оно не видело определений из глобального `include "config.v"
Я уже даже решил что кетайци такое не осилили, но - нет, дело оказалось в своеобразной трактовке управляющие коментариев (синтез/симуляция)
// synopsys translate_off
`include "config.v"
// synopsys translate_on
Ну и потом оно как-то очень быстро пошло - сгенерировал IP для памяти, влючая специальный случай двухпортовой для регистрового файла 1801ВМ1,
и 1801ВМ1/ВМ2 быстренько заработало. Но вот на LSI-11 - засада, оно не распознало infer ROM, как оно уже задрало - у каждого вендора свои заморочки
со встроеннйо памятью, нужно индивидуально шаблон подгонять.
В-общем, на github (https://github.com/1801BM1/cpu11) выложено обновление:
- добавлена плата QMTech на Cyclone-V
- добавлена плата QMTech на Cyclone-10LP
- добавлена плата Lichee Tang Risc V на Eagle EG4S20 - LSI-11 не работает
Добиваю LSI-11 и буду думать о встроенной SDRAM. Впечатления от среды "Tang Dynasty" нормальные, компилирует быстро, шьет нормально
(программатор встроен в плату), не падает, есть Verilog линтер на каждое сохранение. Но редактор убоговат, настроек немного, но если там
заниматься только портирование а не собственно разработкой - то все просто отлично. Сама EG4S20 для ретропроектов просто отлично ложится.
Возможно будет еще 1811/F11.
Кстати, вопрос. Правильно ли я помню, что среди микрух (именно микрух, а не микросборок) есть микрухи с ПЗУ микрокода? И если да - можно ли этот микрокод вычитать? Да, я помню, что есть листинг, но меня интересует именно - можно ли прочитать из ПЗУ?
Кстати, вопрос. Правильно ли я помню, что среди микрух (именно микрух, а не микросборок) есть микрухи с ПЗУ микрокода? И если да - можно ли этот микрокод вычитать? Да, я помню, что есть листинг, но меня интересует именно - можно ли прочитать из ПЗУ?
- листинга для F11 в Сети нет, есть J11, это другое
- описание микрокоманд F11 мне где-то попадалось, и очень-очень неполное и поверхностное, такой шары как с WD-1600 - не будет
- насчет прочитать 1811ВУ - это будет понятно после реверса первой микросхемы, там внутри не просто ROM как в LSI-11, а еще и логическая матрица PLA, которая наружу не выходит. Есть нанокоманда "test", так что могут быть шансы что по ней что-то скрытое наружу выдается - реверс покажет.
листинга для F11 в Сети нет, есть J11, это другое
Да, это меня переклинило, конечно, листинг есть для J11, пардон - спутал
Есть нанокоманда "test", так что могут быть шансы что по ней что-то скрытое наружу выдается - реверс покажет.
Ясно, значит бум ждать. Есть одна задумка, но её принципиальная реализуемость зависит ещё и от того - лягут ли звёзды. А поскольку хочется, что бы легли - пока не буду озвучивать - чёт я суеверничаю :) Легли или нет, будет с одной стороны понятно первого августа (обязательное условие 1), а потом - ближе к концу августа (тут сказать сложней, когда, обязательное условие 2) :) Если всё сложится, ну или если (ТТТ) не сложится - отпишусь, в чем задумка :) Ну а дальше бум ждать реверса :)
Да, кстати - мне еще платка на IGLOO от Microsemi подвернулась недорого, но там AGLP125 стоит, она слабовата, ну vm80a поднять можно и усе. Так что не буду пока на нее тратить время.
Реорганизацию проекта закончил, теперь новые платы можно добавить за один вечер, буду заканчивать М4, ну а там уже и 1801ВМ3 виднеется :)
LSI-11 на личитане тоже заработало, залил в репку.
Общие впечатления от китайской FPGA - положительные, компилируется быстро, шьется устойчиво, по быстродействию - на уровне MAX10/Cyclone-10LP, перекрывает S6, и это я еще внутреннюю SDRAM не пробовал, и цены на Али от $19.20 за плату.
ну а там уже и 1801ВМ3 виднеется
Ура :):):)
и цены на Али от $19.20 за плату.
$17.44 https://www.aliexpress.com/item/4001007773041.html
насчет прочитать 1811ВУ
Есть нанокоманда "test", так что могут быть шансы что по ней что-то скрытое наружу выдается - реверс покажет.
Есть одна задумка, но её принципиальная реализуемость зависит ещё и от того - лягут ли звёзды.
Ну, звёзды легли неплохо - удалось и микросборку заполучить и заполучить рабочую микросборку с микросхемами. Микросхемами, реализующими CIS.
Задумка - получить микрокод - в том числе и реализующий CIS :) И попробовать реализовать замену модуля CIS :)
Ну и пользуясь случаем, хотел бы узнать, что делает в 1801ВМ2 в HALT-режиме команда с кодом 030. По описанию, она должна исполняться также, как и команда с кодом 020, т.е. читать безадресный регистр. Но в 1801ВМ2 судя по всему допустили ошибку в микрокоде. В 1806ВМ2 эту ошибку убрали, и 030 исполняется также, как и 020.
Можете предложить вариант теста для системы с RAM в диапазоне 000000-037777? Как зайти в HALT и исполнить там интересующую инструкцию?
Можете предложить вариант теста для системы с RAM в диапазоне 000000-037777? Как зайти в HALT и исполнить там интересующую инструкцию?
По RTI в режим HALT в диапазон 0-037777 не попасть. А как происходит запуск системы, какого значение безадресного регистра SEL?
- - - Добавлено - - -
Вот здесь (https://zx-pk.ru/threads/22424-prostoj-pdp11-cpu-modul-na-n1806vm2.html?p=869435#post869435) программа для проверки под RT-11 на ДВК с -055 ПЗУ.
По RTI в режим HALT в диапазон 0-037777 не попасть. А как происходит запуск системы, какого значение безадресного регистра SEL?
Регистр задан как 000000, но можно назначить любое значение. Надо попробовать прописать 170/172 желаемыми PC/PSW. Если не выйдет - подумаю как отобразить память на весь диапазон и использовать RTI для захода в HALT.
Регистр задан как 000000, но можно назначить любое значение. Надо попробовать прописать 170/172 желаемыми PC/PSW. Если не выйдет - подумаю как отобразить память на весь диапазон и использовать RTI для захода в HALT.
Ну если как 000000, то можно и в 0170/0172 задать вектор по HALT и дать команду HALT. Возвратиться в USER-режим можно и командой START. Можно и вектор старта 0/2 прописать своим значением и сразу же на исполняемую команду. Исполнение зависит от содержимого регистров R0 - R3, и от бита переноса C в PSW.
Алгоритм исполнения, выясненный методом научного тыка:
R0:=0;
while ((R0[7]==0) && (R2[7]==0))
{
R1:=R1<<1 | 0; R2[07:00]:=R2[07:00]<<1 | C;
R2[15:08]:=R2[7]; R3:=R3<<1 | C; R0++;
}
N:=0; Z:=(R0==0); V:=0; C:=0
Описание: По этой команде сперва очищается регистр R0. Далее исполняется цикл, окончанием которого является установка в разряде 07 R0 или R2 единицы. В цикле над регистрами проводятся следующие действия: регистры с R1 по R3 сдвигаются влево, при этом в R1 в младший разряд вдвигается ноль, а в R2 и R3 – содержимое разряда C, при этом старшая часть R2 расширяется знаковым разрядом младшей части, R0 инкрементируется. Так как останов исполнения команды производится при наличии единицы в разряде 7 в R0 или R2, то после исполнения команды R0 может принимать значения от 0 до 108 или 2008. Значение 2008 получается в том случае, если до исполнения операции младшая часть R2 была равна нулю и был сброшен бит С.
Признаки: N – очищается, Z – устанавливается, если значение в R0 равно нулю, в противном случае очищается, V – очищается, C – очищается.
Хочу подключить ВМ2 к ПЛИС. Согласно документации выходное напряжение высокого уровня ВМ2 - 2,4В. Правильно ли я понимаю, что шифтеры не нужны? Или же нужны, но для того, чтобы 2,4В приводить к 3,3В?
Хочу подключить ВМ2 к ПЛИС. Согласно документации выходное напряжение высокого уровня ВМ2 - 2,4В. Правильно ли я понимаю, что шифтеры не нужны? Или же нужны, но для того, чтобы 2,4В приводить к 3,3В?
2.4В - это минимальное выходное напряжение высокого уровня. А реально может быть и до напряжения питания, то есть до +5В. Если делать совсем правильно, то смотрите схему подключения ВМ2 к ПЛИС тут:
Экспериментальные модули (https://zx-pk.ru/threads/21192-eksperimentalnye-protsessornye-moduli-2kh1801vm1-i-1801vm2.html)
CAD файлы на github (https://github.com/1801BM1/xmde0)
А почему к примеру не использовались "преобразователи уровня" ?
http://www.gaw.ru/html.cgi/txt/ic/Texas_Instruments/logic/converter_levels/start.htm
А почему к примеру не использовались "преобразователи уровня" ?
Да чего в шкафчике было, то и использовал - LVC245. Свою задачу решает, дешево и легко доставаемо.
Вот для 581 преобразователи понадобились, пришлось покупать.
Да чего в шкафчике было, то и использовал - LVC245. Свою задачу решает, дешево и легко доставаемо.
А использование CPLD, толерантной к 5В, недостаточно? - я смотрю, сопряжение 3в с 5в в современных амижных акселераторах делается только за счёт XC95nnXL CPLD.
А использование CPLD, толерантной к 5В, недостаточно? - я смотрю, сопряжение 3в с 5в в современных амижных акселераторах делается только за счёт XC95nnXL CPLD.
Прошу прощения, я не очень понял вопрос. На плате модулей 1801ВМx установлена MAX3064 - это как раз 5V-толерантная CPLD и два и более 74LVC245. LVC245 установлены для шины данных, если делать им замену на от CPLD это потребовало бы 32 входа/выхода - надо было бы ставить или заметно более толстую MAX3256 в корпусе TQFP-144 или две CPLD и еще возиться с программированием второй. Сильно жирно для простого преобразования уровня на шине данных.
Vslav, а что скажешь на предмет вскрытия FPA? :)
Vslav, а что скажешь на предмет вскрытия FPA? :)
Ничего не скажу, мне ВМ3 и F11 вполне хватит для реверса:)
Алгоритм исполнения, выясненный методом научного тыка:
R0:=0;
while ((R0[7]==0) && (R2[7]==0))
{
R1:=R1<<1 | 0; R2[07:00]:=R2[07:00]<<1 | C;
R2[15:08]:=R2[7]; R3:=R3<<1 | C; R0++;
}
N:=0; Z:=(R0==0); V:=0; C:=0
Я написал такой обработчик HALT (вектор 708):
hmode: mov #50, R0 ;
mov #10, R1 ;
mov #12, R2 ;
mov #23, R3 ;
mov #34, R4 ;
mov #45, R5 ;
.word 30 ;
mov R0, R1 ;
br hmode ;
Результат листинга микрокода:
# plm[42->37] op1 word fw ac **** QREG vector 000170 x+y --- rdat 001732 001732 001734 ir:000000 4 6 42 // формируем адрес вектора для чтения
# plm[37->02] op2 word *x **** R7 QREG ------ y --- ---- 001732 001732 001734 ir:000000 4 6 37 // прочитали новое значение PC из вектора
# plm[02->31] op1 word fw ac **** ACC 000002 ------ x+y --- rdat 001732 001150 001150 ir:000000 4 6 02 // обновили адрес для чтения +2
# plm[31->06] op2 word *x **** PSW QREG ------ y --- ---- 001732 001150 001150 ir:000000 4 6 31 // прочитали новое PSW из вектора
# Access to halt vector // отладочный останов
# Break in Module tb2 at E:/GIT/cpu11/vm2/hdl/org/tbe/de0_tb2.v line 143
# run
# plm[06->32] se0 byte n/a ---- n/a n/a ------ n/a n/a n/a 001732 001150 001150 ir:000000 4 6 06
# plm[32->36] op2 word *x **** ACC ACC ------ y --- ---- 001732 001150 001150 ir:000000 4 0 32
# plm[36->76] op1 word fr *x **** R7 000002 ------ x+y --- rcmd 001732 001150 001150 ir:000000 4 1 36 // выборка инструкции
# plm[76->77] op1 word f2 *x nzv- R7 000002 ------ x+y --- pref 001732 001152 001152 ir:000000 4 1 76 // предвыборка следующей инструкции
# plm[77->55] op2 word ac **** R7 R2 ------ x --- ---- 001732 001154 001154 ir:012700 7 6 60
# plm[55->57] op2 word *x **** R_SRC QREG ------ y --- ---- 001732 001154 001154 ir:012700 4 6 55 // чтение литерала #50
# plm[57->54] op1 word f2 *x **** R7 000002 ------ x+y --- pref 001732 001154 001154 ir:012700 4 6 57 // предвыборка следующей инструкции
# plm[54->76] op2 byte *x wsta R0 R_SRC ------ y --- ---- 001732 001154 001156 ir:012700 4 6 54 // R0 = 50
# plm[76->77] op1 word f2 *x nzv- R7 000002 ------ x+y --- pref 001732 001154 001156 ir:012700 4 1 76 // предвыборка следующей инструкции
# plm[77->55] op2 word ac **** R7 R2 ------ x --- ---- 001732 001160 001160 ir:012701 7 6 60
# plm[55->57] op2 word *x **** R_SRC QREG ------ y --- ---- 001732 001160 001160 ir:012701 4 6 55
# plm[57->54] op1 word f2 *x **** R7 000002 ------ x+y --- pref 001732 001160 001160 ir:012701 4 6 57
# plm[54->76] op2 byte *x wsta R1 R_SRC ------ y --- ---- 001732 001160 001162 ir:012701 4 6 54 // R1 = 10
# plm[76->77] op1 word f2 *x nzv- R7 000002 ------ x+y --- pref 001732 001160 001162 ir:012701 4 1 76
# plm[77->55] op2 word ac **** R7 R2 ------ x --- ---- 001732 001164 001164 ir:012702 7 6 60
# plm[55->57] op2 word *x **** R_SRC QREG ------ y --- ---- 001732 001164 001164 ir:012702 4 6 55
# plm[57->54] op1 word f2 *x **** R7 000002 ------ x+y --- pref 001732 001164 001164 ir:012702 4 6 57
# plm[54->76] op2 byte *x wsta R2 R_SRC ------ y --- ---- 001732 001164 001166 ir:012702 4 6 54 // R2 = 12
# plm[76->77] op1 word f2 *x nzv- R7 000002 ------ x+y --- pref 001732 001164 001166 ir:012702 4 1 76
# plm[77->55] op2 word ac **** R7 R2 ------ x --- ---- 001732 001170 001170 ir:012703 7 6 60
# plm[55->57] op2 word *x **** R_SRC QREG ------ y --- ---- 001732 001170 001170 ir:012703 4 6 55
# plm[57->54] op1 word f2 *x **** R7 000002 ------ x+y --- pref 001732 001170 001170 ir:012703 4 6 57
# plm[54->76] op2 byte *x wsta R3 R_SRC ------ y --- ---- 001732 001170 001172 ir:012703 4 6 54 // R3 = 23
# plm[76->77] op1 word f2 *x nzv- R7 000002 ------ x+y --- pref 001732 001170 001172 ir:012703 4 1 76
# plm[77->55] op2 word ac **** R7 R2 ------ x --- ---- 001732 001174 001174 ir:012704 7 6 60
# plm[55->57] op2 word *x **** R_SRC QREG ------ y --- ---- 001732 001174 001174 ir:012704 4 6 55
# plm[57->54] op1 word f2 *x **** R7 000002 ------ x+y --- pref 001732 001174 001174 ir:012704 4 6 57
# plm[54->76] op2 byte *x wsta R4 R_SRC ------ y --- ---- 001732 001174 001176 ir:012704 4 6 54 // R4 = 34
# plm[76->77] op1 word f2 *x nzv- R7 000002 ------ x+y --- pref 001732 001174 001176 ir:012704 4 1 76
# plm[77->55] op2 word ac **** R7 R2 ------ x --- ---- 001732 001200 001200 ir:012705 7 6 60
# plm[55->57] op2 word *x **** R_SRC QREG ------ y --- ---- 001732 001200 001200 ir:012705 4 6 55
# plm[57->54] op1 word f2 *x **** R7 000002 ------ x+y --- pref 001732 001200 001200 ir:012705 4 6 57
# plm[54->76] op2 byte *x wsta R5 R_SRC ------ y --- ---- 001732 001200 001202 ir:012705 4 6 54 // R5 = 45, PC=1202
# plm[76->77] op1 word f2 *x nzv- R7 000002 ------ x+y --- pref 001732 001200 001202 ir:012705 4 1 76 // предвыборка инструкции следующей за 030
// здесь начитается обработка инструкции 030 в HALT-режиме
# plm[77->30] op1 word *x **** R0 000000 ------ y --- ---- 001732 001202 001204 ir:000030 5 2 72 // mov #0, R0 ; R0 is 000000
# plm[30->12] op2 byte ac nzv- R2 R0 ------ x --- ---- 001732 001202 001204 ir:000030 4 2 30 // проверка условий выхода из цикла??
# plm[12->16] op1 byte *x nzv- R0 000001 ------ x+y --- ---- 001732 001202 001204 ir:000030 6 2 12 // incb R0 ; R0 is 000001
# plm[16->46] op2 word *y **** R0 R1 ------ y asl ---- 001732 001202 001204 ir:000030 6 2 16 // asl R1 ; R1 is 20
# plm[46->41] op2 word *y **** R0 R3 ------ y rol ---- 001732 001202 001204 ir:000030 4 2 46 // rol R3 ; R3 is 46
# plm[41->12] op2 byte *y nzv- R0 R2 ------ y rol ---- 001732 001202 001204 ir:000030 4 2 41 // rolb R2 ; R2 is 24
# plm[12->16] op1 byte *x nzv- R0 000001 ------ x+y --- ---- 001732 001202 001204 ir:000030 6 2 12 // incb R0 ; R0 is 000002
# plm[16->46] op2 word *y **** R0 R1 ------ y asl ---- 001732 001202 001204 ir:000030 6 2 16 // asl R1 ; R1 is 40
# plm[46->41] op2 word *y **** R0 R3 ------ y rol ---- 001732 001202 001204 ir:000030 4 2 46 // rol R3 ; R3 is 114
# plm[41->12] op2 byte *y nzv- R0 R2 ------ y rol ---- 001732 001202 001204 ir:000030 4 2 41 // rolb R2 ; R2 is 50
# plm[12->16] op1 byte *x nzv- R0 000001 ------ x+y --- ---- 001732 001202 001204 ir:000030 6 2 12 // incb R0 ; R0 is 000003
# plm[16->46] op2 word *y **** R0 R1 ------ y asl ---- 001732 001202 001204 ir:000030 6 2 16 // asl R1 ; R1 is 100
# plm[46->41] op2 word *y **** R0 R3 ------ y rol ---- 001732 001202 001204 ir:000030 4 2 46 // rol R3 ; R3 is 230
# plm[41->12] op2 byte *y nzv- R0 R2 ------ y rol ---- 001732 001202 001204 ir:000030 4 2 41 // rolb R2 ; R2 is 120
# plm[12->16] op1 byte *x nzv- R0 000001 ------ x+y --- ---- 001732 001202 001204 ir:000030 6 2 12 // incb R0 ; R0 is 000004
# plm[16->46] op2 word *y **** R0 R1 ------ y asl ---- 001732 001202 001204 ir:000030 6 2 16 // asl R1 ; R1 is 200
# plm[46->41] op2 word *y **** R0 R3 ------ y rol ---- 001732 001202 001204 ir:000030 4 2 46 // rol R3 ; R3 is 460
# plm[41->12] op2 byte *y nzv- R0 R2 ------ y rol ---- 001732 001202 001204 ir:000030 4 2 41 // rolb R2 ; R2 is 177640
# plm[12->76] op2 byte ac nzvc R0 R0 ------ x --- ---- 001732 001202 001204 ir:000030 4 2 12 // цикл закончен, установка флагов
# plm[76->77] op1 word f2 *x nzv- R7 000002 ------ x+y --- pref 001732 001202 001204 ir:000030 4 1 76 // предвыборка инструкции br hmode
# plm[77->76] op2 byte *x wsta R1 R0 ------ y --- ---- 001732 001204 001206 ir:010001 5 2 04 // исполнение mov R0, R1
# plm[76->77] op1 word f2 *x nzv- R7 000002 ------ x+y --- pref 001732 001204 001206 ir:010001 4 1 76 // предвыборка инструкции следующей за br hmod
# plm[77->36] op1 word *x **** R7 br_off ------ x+y --- ---- 001732 001206 001210 ir:000761 7 2 73 // выполнение br
Cкроллим код вправо - там мои комментарии.
В-общем, похоже что порядок R2:R3 другой.
И еще - флаг С тут похоже не переносится, то есть это не цепочный сдвиг регистров. Я попробовад задать R1=210, и 200 не перехало в R3.
1. Обновил документацию по ВМ1:
- исправил опечатки и поредактировал футеры, теперь формат документа стал оптимальнее
- теперь PDF умеет в оглавление и закладки, типа такого:
https://www.1801bm1.com/files/images/vm1_pdf_bookmarks.png
2. Добавил утилиту для анализа матриц ПЛМ для 1801ВМ1А/Г и для ВМ2:
- умеет перебирать все микроадреса (полный диапазон или по параметрам из командной строки)
- умеет делать перебор микроадресов только для указанного PDP-11 опкода с маской
- функции могут использовать SSE2/AVX2 инструкции для ускорения
- функции умеют строить оптимальное М-арное дерево для оптимизации вычисления матриц
(правда дерево вырожденное - один корень с листьями :))
- под win32/64, но возможно соберется под линуксом (у меня не было GCC старше 4.9, оно не умеет в __mi256i), Makefile в комплекте
(если будут желающие - попробуйте, я приму PR с обновлениями для Linux)
- лежит на github и тут (https://www.1801bm1.com/files/utils/MCODE/new/)
- старая версия (где 100500 закомментированных подветок для анализа частных случаев ВМ1А на основе которой писался и проверялся документ) - тут (https://www.1801bm1.com/files/utils/MCODE/old/), это чисто рабочий вариант, не для публикации, просто показывает сколько всего было проанализировано, этой ветки в официальной репке не будет.
- на основе это утилиты для ВМ2 надо брать и добавлять анализ специальных случаев, как это было сделано для ВМ1 в старой ветке
Примечание для эмуляторщиков: код функций вычисления матриц может быть использован для эмуляции микрокода серии 1801, производительность примерно до 100M отсчетов в секунду на одном ядре 4770@3.4GHz. Функции могут быть использованы или прямо для вычисления выходя матриц в момент исполнения, или для заполнения ускоряющих таблиц.
Программируемые логические матрицы
Микропроцессоры серии 1801, в-основном, построены вокруг одной большой программируемой логической матрицы - PLM. Эта матрица объединяет горизонтальный микрокод, управление состоянием конечного автомата и логику декодирования операций и может рассматриваться как набор простых комбинаторных функций входного логического вектора X, обеспечивающая выходной вектор Y:
y [m: 0] = f (x [n: 0])
Состояние конечного автомата определяется как адрес «микрокоманды», некоторое число младших битов входного вектора - это поле микроадреса, а выходной вектор содержит новое значение, которое будет присвоено микроадресному регистру - поле «следующий адрес». Следующие биты адреса могут быть "размазаны" по битам выходного вектора из-за того, что порядок битов определяется в процессе реверса, и не всегда очевидно, где находятся эти биты. Шестнадцать старших битов входного вектора всегда являются текущим кодом операции инструкции PDP-11.
Матрица включает логические функции в дизъюнктивной нормальной форме. Есть набор продуктов (p, логических произведений), сравниваемых с входным вектором с маскированием и совпавшие продукты объединяются в выходной вектор с помощью логического ИЛИ.
В таблице представлены параметры матриц для процессоров серии 1801:
1801BM1A - 31 бит на входе, 34 бита на выходе, 7 бит ширина микроадреса, 248 продуктов
1801BM1Г - 31 бит на входе, 34 бита на выходе, 7 бит ширина микроадреса, 249 продуктов
1801BM2 - 28 бит на входе, 37 бит на выходе, 6 бит ширина микроадреса, 198 продуктов
Матричные процедуры реализуют матричную функцию. Поддерживаемая ширина входного вектора ограничена 32 битами, а поддерживаемая ширина вывода ограничена 64 битами, прототип функции выглядит так:
uint64_t f (uint32_t x);
Основной алгоритм - проверить все продукты, выбрать те которые совпадают с данным значением входного вектора и добавить к выходному результату используя логическое ИЛИ:
for each product {
if product matches input {
add to result
}
}
Возможны некоторые простые и сразу очевидные оптимизации. Маскированное сравнение продуктов с входным вектором - это просто логическое XOR и AND, можно использовать SIMD-инструкции для обработки нескольких векторов за одну операцию. SSE2 реализация обрабатывает четыре вектора на итерацию цикла, реализация AVX2 может обрабатывать восемь векторов за итерацию.
Другая оптимизация - разделить значения входных векторов на несколько групп, используя значения некоторых выбранных битов. Тогда мы можем проверить все продукты и назначить каждой группе только совпадающие. При вычислении функции мы проверяем выбранные битовые значения и выбирает продукты какой группы будут обрабатываться в цикле вычисления результата. Так как продукты, которые не совпадают с данным значением входного вектора уже исключены (отсутствуют в массиве продуктов для этой группы) количество итераций цикла меньше.
Например, мы выбрали четыре младших бита в качестве индекса группы, и построили (один раз во время инициализации) шестнадцать массивов продуктов сопоставленные с индексами группы 0..15. Входные векторы xxxx0 будут использовать продукты группы 0 для вычисления результата, векторы xxxx5 будут использовать группу 5 и так далее.
Выбор наиболее оптимальных бит не так очевиден, код реализует проверку всех возможных битовых комбинаций для заданной матрицы и выбирает комбинацию, дающую дерево (набор массивов продуктов) минимальной высоты.
Приложение для анализа микрокода
Пример приложения обеспечивает тестирование, сканирование матриц для указанных входных векторных шаблонов и средства измерения производительности.
Имеется эталонная матрица для 1801ВМ1А, реализованная в самый простой способ и проверенная с помощью моделирования Verilog в ходе документирования 1801ВМ1. Новые реализации матричных процедур включая SIMD и оптимизированные для дерева, можно напрямую сравнить с проверенной реализацией, эта функция включается ключом --match и предоставляется только для 1801BM1A.
Ключ --speed включает тесты измерения производительности, перебирается весь диапазон ввода (2^31 - 2млрд комбинаций для 1801ВМ1), вычисляется функция матрицы, и сообщается полученное время.
Метод --table строит таблицы микроадресов и собирает статистику о переходах на целевые микроадреса. Данный цикл следует дополнять кодом для сбора специальной статистики.
1801BM2 - 28 бит на входе, 37 бит на выходе, 8 бит ширина микроадреса, 198 продуктов
Вообще-то микроадрес на ВМ2 - 6 бит.
Вообще-то микроадрес на ВМ2 - 6 бит.
Да, это перевод оригинала readme.md (https://github.com/1801BM1/cpu11/blob/master/xen/tools/mcode/readme.md)
Табличка не скопировалась, пришлось руками писать, накосячил :)
Продолжаю ковырять М4 на секционнике 1804 (оно же Am2900). Сделал модель арифметического слайса - 1804ВС1 (https://github.com/1801BM1/cpu11/blob/next/am4/hdl/org/rtl/am4_2901.v).
В сети достаточно часто встречаются модели для этой микросхемы (она же Am2901), но я не нашел НИ ОДНОЙ, где правильно обрабатывается флаг арифметического переполнения (V) и флаги для работы ускоренного переноса для всех возможных операций. Даташиты тоже попадаются разные и между ними есть разногласия. Пришлось брать живую 1804ВС1, цеплять к ней stm32 и снимать фактические значения с реальной микросхемы, а потом доводить модель до полного совпадения - все считанные значения были сохранены в файл и написан тест-бенч, гоняющий модель и сравнивающий результаты с эталонным файлом.
Vslav, может пригодится https://openflexure.gitlab.io/projects/deltastage/
Закончил начерно описание М4, верилог написан, осталось самое вкусное - запуск и отладка :)
Выложил очередной коммит на github: https://github.com/1801BM1/cpu11/tree/master/am4
PS. Отвез химику разные микросхемы, но он занят отчетами под конец года, так что, скорее всего будет заниматься травлением уже в следующем году.
Картинка для привлечения внимания:
https://www.1801bm1.com/files/images/cut_out.jpg
PS. Отвез химику разные микросхемы, но он занят отчетами под конец года, так что, скорее всего будет заниматься травлением уже в следующем году.
Хотелось бы надеяться, что после нового года будут ХМ-очки)
Хотелось бы надеяться, что после нового года будут ХМ-очки)
Только про 3Д-очки слышал :)
Только про 3Д-очки слышал
Юмор зачетный, но, надеюсь, ты про нас не забыл, и 1515ХМ тоже отдал)
Юмор зачетный, но, надеюсь, ты про нас не забыл, и 1515ХМ тоже отдал)
Отдал-отдал, просто я их давно выпилил уже, поэтому на картинку не попали.
Отдал-отдал, просто я их давно выпилил уже, поэтому на картинку не попали.
Вообще интересно, как ты успеваешь столько делать.
Реверсить, описывать, вскрывать, фоткать, а еще работа, семья, дети)
Вообще интересно, как ты успеваешь столько делать.
Реверсить, описывать, вскрывать, фоткать, а еще работа, семья, дети)
Дитенок взялся писать прошивку к микроскопу, под моим руководством опыта набираться :)
Дитенок взялся писать прошивку к микроскопу, под моим руководством опыта набираться
Надеюсь, дитенок не девочка)
Ну пусть это будет мальчик)
Девочкам надо балет, пение и прочие танцы)
Надеюсь, дитенок не девочка)
Девочка, девочка. Второй курс кибфака. После тамошней математики ей микроконтроллеры как отдых заходят :)
PS. Ну это был ее выбор. Танцы (бальные) и пение (с хором в итальянской опере пела) тоже присутствуют :)
Какая чудная картинка:
https://www.1801bm1.com/files/images/seq_addr_reverse.png
Пишу красивый дизассемблер, сразу с расстановкой точек входа и прочим. И смотрю, что-то в микрокоде полный бред получается. Начал искать пропущенные инверсии, ошибку в секвенсоре и прочее. Убил часа три, наверное. Я уже начал думать что прочитал что-то не то, но вроде и осмысленные куски попадаются. А тут опа - средняя секция адресов в секвенсоре перевернута. Интересно, это косяк такой допустили при рисовании схемы, или оптимизация топологии печатной платы? Хорошо что реверс делался честно, без всяких допущений и эта особенность в схему попала. Теперь надо в прочитанном содержимом MiсROM адреса перетасовать.
Интересно, это косяк такой допустили при рисовании схемы, или оптимизация топологии печатной платы?
Скорее всего вынужденная, иначе нужно делать 6 переходных точек на нижние слои и обратно.
Скорее всего вынужденная, иначе нужно делать 6 переходных точек на нижние слои и обратно.
Там 12-слойная плата, и вообще ни одного переходного отверстия, думаю выкрутились бы и в этом случае.
Там 12-слойная плата
12??? Это какого года плата?
Там 12-слойная плата, и вообще ни одного переходного отверстия, думаю выкрутились бы и в этом случае.
Там фотография платы выложена, на ней дата 05.1988 стоит. А дралось с оригинала 1975 года.
Вообще выяснилось что М4 - это LSI-11M, а не Q-bus версия 11/34, как я думал. Тесты VKAxxx для нее вполне пойдут.
Процессор вообще очень своеобразный, с остановкой тактирования АЛУ и секвенсора на ожидании транзакции на шине.
Update: посмотрел живую плату - был неправ, 6 слоев. Но платы же две - процессор-книжка, значит в сумме - 12 :), и переходных отверстий несколько нашел :)
это LSI-11M
Что то я про такую и не слышал. LSI-11 знаю (вроде как наш аналог M2), про LSI-11/2 (полуплата, у меня есть, но там тот же набор микрух, что и на LSI-11) знаю, а про LSI-11M - первый раз слышу...
Что то я про такую и не слышал. LSI-11 знаю (вроде как наш аналог M2), про LSI-11/2 (полуплата, у меня есть, но там тот же набор микрух, что и на LSI-11) знаю, а про LSI-11M - первый раз слышу...
Это Нортроп-Груманн, для авионики делали. Использовался, в частности, на Phantom-4RC, как процессор радиолокационной станции разведки. В СССР Фантомы этой модификации попали после иранской революции (стояли у шаха на вооружении), ну и содрали.
Это Нортроп-Груманн
То есть не DEC-овская разраба?
То есть не DEC-овская разраба?
Да кто ж точно скажет, доля оборонных заказов у DECа была очень большая, это одна из причин их заката в 90-ые. Может именно они и разрабатывали.
Я правильно понимаю, что речь идёт о том двухплатном проце на 1804?
Про оригинал, известный плакатик.
http://oldpc.su/pc/ms/pic/mc1280/s-l1600.jpg
Интересней М5 - в ней есть диспетчер памяти и конструктив обычный, но где ее взять ?
Я правильно понимаю, что речь идёт о том двухплатном проце на 1804?
Та зайди на гитхаб и посмотри, я для кого readme.md пишу и фотографии добавляю? Там же ссылки на полезные книжки и документацию на MC1280, оно же MC11201.
- - - Добавлено - - -
Про оригинал, известный плакатик.
Этот плакатик меня сбил, там заголовок начинается с 11/34, но на самом деле речь про его младшего брата LSI-11M.
Скорее М5 это уже аналог 11/34, там MMU должно быть уже, но хде ж его взять. Скорее СМ-2420 появится на FPGA, потому что все материалы у меня есть, и М4 дает отличную базу для нее (модель 1804ВС1, мета-ассемблер и дизассемблер, и общее пониманиме процессора на бит-слайсах).
Та зайди на гитхаб и посмотри, я для кого readme.md пишу и фотографии добавляю?
Голова щас другим занята (на работе затык ну и периодически отвлекаюсь на ДП в моём PDP-2011), так что проще спросить :) Вечером в очередной раз загляну, посмотрю, что новенького :)
- - - Добавлено - - -
Этот плакатик меня сбил, там заголовок начинается с 11/34, но на самом деле речь про его младшего брата LSI-11M.
Да, тоже только со второй попытке понял :)
СМ-2420
странный факт - почему там применили ТОЛЬКО АЛУ из комплекта 1804 ?
Скорее М5 это уже аналог 11/34, там MMU должно быть уже, но хде ж его взять
А разве 11/34 не unibus? Тогда в каком значении "аналог"? "Содрано 1:1" или "выполняет те же функции"?
А разве 11/34 не unibus?
Unibus. Но, думаю, модуль общения с шиной - не самый основной модуль :)
Скорее М5 это уже аналог 11/34
нет, "круче" - в М5 22 разряда памяти. А еще - в состав машины на М5(МС1213) входит плата преобразователь адресов для 18-ти разрядной периферии в режиме ПДП. Контроллеры лент (И17) и дисков (И15,И16) - 18-ти разрядные.
М5 реализует 95 команд, включая плавающую точку, полностью совместим по набору команд с Электроникой-100/25.
(что у него с расширенной арифметикой - можно судить по числу команд. Специалисты - подскажите).
Был прототип у М5 или нет - достоверно не известно (это собственное "изобретение" или простое развитие М4А,Б - было бы видно из схем которых нет).
Там фотография платы выложена, на ней дата 05.1988 стоит. А дралось с оригинала 1975 года.
Тогда два вопроса:
1. Зачем было клонировать в 1988 году устаревшую разработку 1975 года?
2. Какой смысл в современной реплике? Персоналок на нем не было, игр тоже. Ракету запускать?
1. Зачем было клонировать в 1988 году устаревшую разработку 1975 года?
1839 серию и сейчас (спустя 30 лет) выпускают для нужд вояк.
Если подходит для реализации необходимого функционала, зачем делать что-то сложнее и дороже?
88 год не обязательно год разработки (клонирования), может конкретная плата в 88-м выпущена.
+ не забываем про технологическое отставание Союза на ~5-10 лет в разных областях
- - - Добавлено - - -
2. Какой смысл в современной реплике? Персоналок на нем не было, игр тоже. Ракету запускать?
Я бы не отказался от машины на 1804 серии. Всё же необычно немного. Плюс интересно посмотреть на производительность.
А софта полно под pdp-11. Никаких ограничений в виде графики/etc
1839 серию и сейчас (спустя 30 лет) выпускают для нужд вояк.
Если подходит для реализации необходимого функционала, зачем делать что-то сложнее и дороже?
Ну это чтобы поддержать выпуск старого вооружения той же 30-летней давности.
Понятно, что по вычислительным способностям это все устарело на много порядков.
Кстати, вояки за жопу не возьмут, за публикацию того, что находится на вооружении?
интересно посмотреть на производительность
у М5 - 800 тыс регистровых операций в секунду.
Тогда два вопроса:
1. Зачем было клонировать в 1988 году устаревшую разработку 1975 года?
Это вопрос не ко мне. Но думаю, не осилили свою математику для РЛС, пришлось драть вместе с материальным процессором, чтобы была полная бинарная совместимость.
Тогда два вопроса:
2. Какой смысл в современной реплике? Персоналок на нем не было, игр тоже. Ракету запускать?
Да тут вообще смысла во всем этом реверсе немного, хобби такое. А интересно посмотреть на бит-слайсы, как оно все устроено, инструментарий наработать, может быть и 2420 сделать позже. По завершению в проекте будет 4 процессора построенных на 3 абсолютно разных принципах.
- - - Добавлено - - -
Кстати, вояки за жопу не возьмут, за публикацию того, что находится на вооружении?
НАТО полностью прекратило использовать Фантомы в 1996, да и тогда уже маловероятно что РЛС на этом процессоре стояли уже в то время, электроника легко модернизируется и заменяется в первую очередь.
В РФ до сих пор летает? Маловероятно что вообще массово летало, на документации грифа никакого нет и заявлено для гражданского применения.
Из reade.md для am4
M4 is the Soviet replica of the PDP-11/34M military version by United Technologies Norden Systems Inc.
Однако - ошибочка :):):)
Из reade.md для am4
Однако - ошибочка :):):)
reade.md - file not found :)
Да, ошибка, будет исправлена в следующем коммите вместе со всеми остальными.
reade.md - file not found
Очепятался :)
Из программистского фольклора. Правильный логический тип содержит три значения - false, true и file not found :)
Продолжаю разбирать микрокод, после устранения ошибки с адресами вроде все нормально выглядит, но предварительный декодер на ПЛМ выдает какой-то бред и точки входа на выполнение инструкций PDP-11 явно никак не совпадают с ожидаемым. Перепроверил и перезвонил все, ничего не нашел.
Смотрим в прочитанную таблицу ПЛМ декодера инструкций:
16'o01xxxx: ad = (&ins[11:8] | &ins[5:3]) ? 7'h31 // mov
/* 16'o010x0x: */ : 7'h30; // mov Rs, Rd
16'o02xxxx: ad = (&ins[11:8] | &ins[5:3]) ? 7'h13 // cmp
/* 16'o020x0x: */ : 7'h3A; // cmp Rs, Rd
16'o03xxxx: ad = (&ins[11:8] | &ins[5:3]) ? 7'h1C // bit
/* 16'o030x0x: */ : 7'h3C; // bit Rs, Rd
16'o04xxxx: ad = (&ins[11:8] | &ins[5:3]) ? 7'h1E // bic
/* 16'o040x0x: */ : 7'h3E; // bic Rs, Rd
16'o05xxxx: ad = (&ins[11:8] | &ins[5:3]) ? 7'h10 // bis
/* 16'o050x0x: */ : 7'h20; // bis Rs, Rd
И видим там (помимо прочего) отдельное декодирование для двухадресных инструкций с операндами регистр-регистр. Ну чтобы оно побыстрее было и не тратило дополнительные такты на определение типа адресации в самом микрокоде. И подумалось мне что оно будет выполнять операции АЛУ сразу над Rd и Rs. Поискал я такие инструкции в дизассемблированном листинге, и нашел, 11 штук. А оптимизаций R-R всего 8. По перебирал я эти найденные инструкции, и 8 штук из них таки на адресах кратных 8 - потенциальные точки входа с предекодера. Далее проанализировал сами операции и нашел соответствие запрошенным инструкциям PDP-11. А потом сопоставил фактические адреса в микрокоде и то что выдает ПЛМ предекодера. И оказалось что XOR между фактом и нужным - всегда 0x11! Похоже за 30 лет сдохли перемычки программирования выходных инверторов в 556РТ2. Перепроверить и потестровать все результаты декодирования конечно придется, но уже есть хинт - не надо перебирать все 128 потенциальных точек входа. Но и уже легче, при расставленных точках входа микрокод понимается "влет", уже не выглядит как бред. Потому что такой листинг:
; "add Rs, Rd" opcode
; 03A0 0010100010110000.0101010000011101.111111001000000. 011011100
jp L28B, CCEN
& or B12 & A8, C0, RAMF, ZA
& dimm 0x28B0
очень сильно сбивал - запросили ADD, а выполняется OR. И что неправильно - было вообще неясно, а теперь все встало на свои места. Листинг ADD выглядит так:
0x74; // add Rs, Rd +
; 0328 0011000101100000.1101011001111011.011100100010110. 011000001
jrp L316, CCI
& add Bd0 & As0, C0, RAMF, AB
& dmux
& cpsw PSW1
Написал на Питоне полный комплект утилит для работы с микрокодом Am2900 - дизассемблер (специфичный для М4) и универсальный мета-ассемблер (заменяет древний AmdAsm на CP/M).
Тесты проходят полный цикл - сначала берется оригинальный бинарный файл MicROM, потом оно дизассемблируется в ассемблерный исходник, и потом из исходника собирается обратно в совпадающий с оригинальным бинарный файл. При прохождении тестов повылавливал много мелких ошибок в проекте, и в верилоге и в файле определений. Также хорошо продвинулся в изучении Питона - динамические типы, итераторы, лямбды, перегрузка операций, включая арифметику, Такой инструментарий пригодится при анализе кода СМ1420, а также открывает дорогу к пониманию микрокода 1839 серии и J-11.
Побежал секвенсор микрокода, на первой транзакции шины пока умирает с мусором. Процессор любопытный - в момент транзакции останавливает свою тактовую которая аппаратно будет возобновлена по RPLY или тайм-ауту. На плате полно аналоговых линий задержки, одновибраторы АГ3, 1006ВИ1. Тактовый генератор, кстати, собран на линии задержки. Все это времязадающее добро пришлось переводить в эмулируемую цифру.
Процессор любопытный - в момент транзакции останавливает свою тактовую которая аппаратно будет возобновлена по RPLY или тайм-ауту
Хм.. Интересная мысль :)
Процессор любопытный - в момент транзакции останавливает свою тактовую которая аппаратно будет возобновлена по RPLY или тайм-ауту. Экономия электроэнерии
Но он то мастер. пусть делает чего хочет
Вот в Электронике МС0515 тактовую глушат (убирают с тактовой ножки) для того чтобы считать из озу информацию для вывода на телеэкран. Воронежский арбитраж....
Экономия электроэнерии
Это TTL, оно кушает всегда, независимо от наличия тактовой, какая там экономия.
В FPGA этот останов клока придется эмулировать сигналом Clock_Enable, наличие такого глобального сигнала для синтеза не очень оптимально, посмотрим как оно будет. Пока асинхронная модель, ей неважно, там реально тактовая останавливается.
М4 едет потихоньку, уже грузит регистр инструкций и бежит по коду, но еще правильно не работает. Периодически умирает в ODT, но при этом идет вывод в консоль "<012><015>0@".
Я тут сейчас воюю с ВМ3, точнее, с дополнительной внешней памятью для 1201.04; 04000000 - 17757776. И, разглядывая времянки старших линий адреса, обнаружил на А21 Н в начале такта чтения (синхронно со спадом К ВВОД Н) короткий (полтакта?) импульс низкого уровня при считывании команды. Вспомнил, что у ВМ3 вывод А21 обзывается как-то странно, заглянул в справочник и обнаружил в строчке таблицы для ноги 31: A21/NS - Мультиплексирование во времени информации адреса А21 и информации о том, что считывается из памяти: команда или данные. Это что, намек на (недоделанное) разделение I/D, да?
Это что, намек на (недоделанное) разделение I/D, да?
Только намёк на возможность собственным программно-аппаратным хаком чего-то заполучить необычного
Поддержки полноценного I+D в MMU ВМ3 никто не обнаружил
Ну кое-какие замашки у 1801ВМ3 на архитектуру с I/D есть... Но ощущение, что недопилили...
MFPD, MFPI, MTPD, MTPI - инструкции, которые не совсем корректно работают.
Плюс следы в регистрах диспетчера памяти.
Точнее можно будет сказать только после препарации 1801ВМ3
Ну кое-какие замашки у 1801ВМ3 на архитектуру с I/D есть... Но ощущение, что недопилили...
MFPD, MFPI, MTPD, MTPI - инструкции, которые не совсем корректно работают.
Плюс следы в регистрах диспетчера памяти.
Точнее можно будет сказать только после препарации 1801ВМ3
Какие следы??
Смотря с чего пилили... в смысле с описания на что?
Инструкции MFPD, MFPI, MTPD, MTPI нужны для чего??? для работы в I/D. Так ,например, на СМ-4 этих инструкций просто нет, а на 1801ВМ3 реализованы с ошибками(откуда ошибки? так I/D недоделан) ...
Подробно эти вопросы разбирались при обсуждении про проблемы запуска RSX-11(как раз с ней проблем нет :) ) и прочих систем и программ использующих MMU 1801ВМ3 . Так, например, упоминалось про то, что патчить пришлось загрузчик UNIX из-за битов в статусных регистрах MMU(почему они там стоят "неправильные" - так опять же моду I/D недопилили) ...
Инструкции MFPD, MFPI, MTPD, MTPI нужны для чего??? для работы в I/D.
Международная группа энтузиастов-раcследователей знает ответы на многие вопросы
https://drive.google.com/file/d/1BRIpeOZZyijbXPFKrXhJ6U9eGej6SS5j/view?usp=sharing
- - - Добавлено - - -
такое же поведение у процессоров DEC pdp-11/23 pdp-11/24 pdp-11/34 pdp-11/40 pdp-11/60
Всё правильно, нет...(почему нет? так ведь недоделали :( хотя на истинность/ложность данного утверждения может показать только реверс-инжиниринг(но они пока заняты добиванием 1801ВМ2) либо общение с разработчиками(большей части их уже не спросить :( )) Но для чего-то эти команды были введены??? Ведь на реализацию этих команд потрачены ресурсы. Когда нет I/D разделения - в них смысла с гулькин нос. СМ-4 вполне без них обходится. RSX-11, как сказал досточтимый Hunta, этими командами не пользуется, если не указана опция I/D. Я ему верю :) .
Смысл этих команд - в основном обмен данными между разными модами, в обмене инструкциями смысла мало, только при отладке, когда команда чего-то не то сделала и надо разобраться. В теории ещё возможен вариант, когда система копирует кусок кода для выполнении в моде USER, но я таких систем не знаю. Да и проще иметь библиотеку подпрограмм, коей дают входные параметры и возвращают результат, что и делалось в большинстве случаев.
Да, и ещё, к I/D автоматом притягивается ещё одна мода - супервизор.
Хотя интересно, были ли у DEC модели с I/D но без супервизора или с супервизором и без I/D ???
По поводу такого же поведения у процессоров DEC pdp-11/23 pdp-11/24 pdp-11/34 pdp-11/40 pdp-11/60, я так же полагаю, что DEC недопилила I/D на момент выпуска этих моделей либо по маркетинговым соображениям(типа удорожание)...
Ну уж очень вкусной казалась идея увеличить адресное пространство программ в два раза :)
И в конце-концов допилили :)
Но для чего-то эти команды были введены???
Вполне возможно, что начинали делать, но не успели к сроку :) А потом уже было всё равно :)
RSX-11, как сказал досточтимый Hunta, этими командами не пользуется, если не указана опция I/D
Уточнение. Не RSX-11, а RSX-11M-Plus и не то, что не пользуется - она использует макрос типа MFPD$ и MTPD$ (не помню точно название), а в нём уже, в зависимости от флага условной компиляции выбора поддержки I/D - или MFPI и MTPI или MFPD и MTPD
были ли у DEC модели с I/D но без супервизора или с супервизором и без I/D
Я посмотрел по своему описанию моделей для PDP2011, которое создано на основании инфы из исходных файлов автора PDP-2011. Конечно, это не авторитетный источник, но пока - если есть режим супервизора, то есть и поддержка I/D и наоборот. И, насколько я помню из исходников RSX+, то для того, что бы библиотека режима супервизора могла добраться до аргументов вызова её процедур, используется маппинг через пространство данных, то есть для поддержки режима супервизора в RSX+ требуется поддержка режима I/D
- - - Добавлено - - -
Я ему верю
Насчёт верю :)
Я тоже могу ошибаться - всё таки память всех нас может подвести.
Тем более - ядро RSX - весьма большое - и всех нюансов я не знаю, а что то могу и забыть :)
RSX-11M-Plus - это самая последняя версия. Предыдущие версии RSX были рассчитаны на более старые процессоры. Так что не думаю, что там используются MFPD, MFPI, MTPD, MTPI в форме отличной от RSX-11M-Plus.
Все мы люди ...
Так что не думаю, что там используются MFPD, MFPI, MTPD, MTPI в форме отличной от RSX-11M-Plus.
Там они вообще не используются - ни RSX-11S (она, собственно, основана на RSX-11M), ни RSX-11M не поддерживают ни режим супервизора, и I/D.
Основные плюсы RSX-11M, по сравнению с RSX-11M-Plus, - меньший потребный размер памяти и более высокий уровень возможностей выбора только нужных компонент - что позволяет собрать более специализированную и/или с меньшей потребной памятью систему :) Но SYSGEN из RSX-11M - это отдельная песТня :)
- - - Добавлено - - -
RSX-11M-Plus - это самая последняя версия.
Кстати, я бы не называл её последней версией :) Вполне себе развивалась до последнего момента :) Просто в семействе RSX-11 - три основных представителя :)
Есть ещё боковое ответвление в виде P/OS...
Интересно, что же там с MFPD, MFPI, MTPD, MTPI ???
Это, по сути, урезанный Plus.
Есть ещё MicroRSX - тоже кастомизированный Plus
Оба, насколько я в курсе - без возможности SYSGEN
- - - Добавлено - - -
Поправка.
Из моего предыдущего сообщения предложение
Вполне себе развивалась до последнего момента
надо читать как
RSX-11M вполне себе развивалась до последнего момента
По поводу СМ-4. С чего её содрали?
О наличии инструкций MFPI MTPI написано тут
http://publ.lib.ru/ARCHIVES/N/NAUMOV_Boris_Nikolaevich/_Naumov_B.N..html
Sergei Frolov
17.12.2020, 11:21
"...Но в конце года дирекция уговорила меня заняться разработкой СМ-3. СМ-3 было совместима и с М400 и с PDP-11/05, но отнюдь не была копией. И не потому, что мы к этому стремились. Схемы прототипа удалось достать только к концу года, когда все наши схемы уже ушли в разводку. Кроме того, в прототипе использовались микросхемы для памяти микрокоманд с циклом 70 нсек. Их у нас не было, и мы еще не имели права использовать импорт. Мы разработали жгутовое ПЗУ с очень хорошим циклом 300 нсек, но в четыре раза более медленная память микрокоманд заставила делать оригинальные схемы."
Оттуда: https://computer-museum.ru/articles/universalnie_evm/94/
MFPI и MTPI есть, если верить, а MFPD и MTPD нет упоминания...
Но MFPD и MTPD в 1801ВМ3 есть, хоть и выполняется аналогично MFPI и MTPI ...
Зачем они в 1801ВМ3???
Только если недопилили...
Читал упоминание в интернете, что типа не только в 1801ВМ4 FPU реализован, типа что-то ещё от диспетчера памяти ...
Но вот на сколько это правда??? Опять ответ может дать только реверс... 1801ВМ3, смею надеяться отреверсят, их много.
А вот что касается 1801ВМ4... Редкая микросхема. Будет ли реверс???
В тех описаниях 1801ВМ4 в которые читал только про FPU говорится.
Да, кстати, в тех книгах, которые я читал по ассемблеру PDP-11, там про инструкции MFPD, MFPI, MTPD, MTPI в примерах не упоминалось. Про MMU без излишних подробностей, типа считали что это не главное :( или писали тогда, когда PDP-11 без MMU были
MFPI и MTPI есть
На СМ-3 точно нет (нет ДП), на СМ-4 точно есть (есть ДП)
MFPD MTPD почти наверняка нет.
что типа не только в 1801ВМ4 FPU реализован, типа что-то ещё от диспетчера памяти
Насколько я помню, регистры FPU находятся в ВМ3, а не что то от ДП в ВМ4.
Надо будет попробовать припаять ВМ4 на 1801.2018 и пощупать - что изменится :)
читал по ассемблеру PDP-11, там про инструкции MFPD, MFPI, MTPD, MTPI в примерах не упоминалось.
Я так понимаю, что это были книги по самому ассемблеру и стандартному набору команд, а не про написание операционок :) Поэтому и ДП по минимуму - принцип понимать.
- - - Добавлено - - -
Напомнила мне эта книга (СМ-3 СМ-4) про ещё одну операционную систему, которая у нас тогда был и с которой мы так и не разобрались - ДОС РВ :)
1801ВМ3, смею надеяться отреверсят, их много.
Закончить реверс ВМ3 в планах, сразу после М4.
А вот что касается 1801ВМ4... Редкая микросхема. Будет ли реверс???
Тут пока ничего не могу сказать, слишком далеко смотрим. Сначала закончу ВМ3, там уже можно подумать о реверсе ВМ4 и где брать/искать микросхему.
Ну ежели Hunta высказал идею подцепить 1801ВМ4, значит у него есть хоть один экземпляр :) И ежели он 1801ВМ4 исследует - будет великое дело.
Что я понял из описаний, 1801ВМ4, то что там и регистры и аппаратура вычислений. Но вот подробного описания 1801ВМ4 мне не попадалось :(
Даже непонятно, не то, что быстродействие, но на сколько полно реализованы команды DEC FPU. Меня смущает заявленное число команд 1801ВМ4...
Там на одну команду менее.
И товарищ один написал, что типа на 1801ВМ3 места не осталось, и типа что-то от MMU запихнули в 1801ВМ4. Но вот что именно??? Или только хотели... А потом забросили??? Одни вопросы....
либо общение с разработчиками(большей части их уже не спросить ))
В конце 2009 года С. Шишарин (один из разработчиков ВМ2, и тот человек, через которого удалось получить документацию на ВМ2) на вопрос о ВМ3 и ВМ4 сказал, что 'К сожалению разработчиков этих процессоров уже нет в живых'.
значит у него есть хоть один экземпляр
Хоть один экземпляр и есть.. и не известно - рабочий или нет...
Что я понял из описаний, 1801ВМ4, то что там и регистры и аппаратура вычислений.
Где то мелькало по поводу регистров FPU - типа они где то там в ДП. Но быстро не нашлось, так что пока так... по памяти..
Даже непонятно, не то, что быстродействие, но на сколько полно реализованы команды DEC FPU. Меня смущает заявленное число команд 1801ВМ4... Там на одну команду менее.
Чего то там не реализовано, но. Скажем в J11 тоже нет пары-тройки команд, которые есть в PDP-11 - где то в книжках по J11-PDP11-73/83 попадалось..
- - - Добавлено - - -
Не три, четыре - нет LDUB, STA0, STQ0 и MSN - но они для тестирования и нахождения сбоев
Буду ждать с интересом, когда руки дойдут до подключения :)
По-хорошему где-бы описание внятное найти 1801ВМ4...
Ну а насчёт команд, вопрос в том какие именно выкинуты...?
Может же быть так, что в 1801ВМ4 выкинуто и более одной, но что-то добавлено от заказчика....
Что то меня память царапает, что возможно я ошибся насчёт размещения регистров FPP в ДП у ВМ4 и что вроде так сделано в F-11 (ака 1811)..
Ну F-11 (1811) - вещь более микропрограммная, если туда смогли даже CIS вставить... И где быть там регистрам???
И там вроде ещё место оставалось :)
Вроде где то читал - если хотите FPP, то надо ставить и ДП, ибо в нём регистры.. Попробую найти
- - - Добавлено - - -
Это я про F11
Наш 1811ВТ1 как копия DEC DC304
The MMU implements the memory management data path and controls for the F-11 chip set. It also contains the PDP-11 floating point accumulators and status registers. Its key features are:
Memory management data path
PDP-11 memory management registers for kernel and user mode
Instruction translation logic (22b)
Protection logic
Floating point storage (64b)
Microcode temporary registers (64b and 16b)
По всей видимости воткнули, чтобы место не пропало :)
Закончить реверс ВМ3 в планах, сразу после М4.
Лучше нажимайте на ВМ3 - он ожидаем группой товарищей в виде модуля пин-то-пин совместимого с М1801ВМ3А.
И еще для кое-каких применений :v2_dizzy_eat:
Есть ещё боковое ответвление в виде P/OS...
Интересно, что же там с MFPD, MFPI, MTPD, MTPI ???
Неизвестно (во всяком случае - пока) софта, который бы не работал на PRO-350 (F11), а работал бы только на PRO-380(J11).
Команды в 1811(F11) MFPD, MFPI, MTPD, MTPI типа есть...
А вот как используются??? И используются вообще???
Я так понимаю, что для PRO-380 просто не успели что-то специфичное написать...
Хотя я знаю что было специфичного ;) Тесты...(с вероятностью 90 %)
Есть ещё MicroRSX - тоже кастомизированный Plus
он появился позже Plus_a, думаю это и есть - последняя версия RSX.
То что пропала генерация, так это естественно - зачем в последних компьютерах DEC она нужна ? Компьютеры стали одинаковыми по составу.
Да и VMR есть.
Далеко не все стали одинаковы, как я понимаю... Были же исполнения, для вояк, например... Хотя под конец DEC скатилась в унификацию. Но на такие вырожденные случаи можно было старую версию софта генерить.
он появился позже Plus_a, думаю это и есть - последняя версия RSX.
В каком смысле - последняя? По дате выпуска? А если по возможностям?
А теперь - факты.
У меня есть дистрибутив MicroRSX v4.3. Если посмотреть на даты у файлов - 14-feb-90.
Берём дистрибутив RSX-11M-Plus тоже версии 4.3. Смотрим даты - 29-jan-90
Берём дистрибутив RSX-11M-Plus версии 4.6 (которая последняя). Смотрим даты - 18-dec-98.
Открываем документацию, например - RSX-11 M/M-PLUS and Micro/RSX Executive Reference Manual, третья страница, смотри внизу:
RSX-11M Version 4.2
RSX-11M-PLUS Version 3.0
Micro/RSX Version 3.0
То есть RSX-11M-Plus и Micro/RSX выпускались в параллель и одинаковыми версиями.
- - - Добавлено - - -
зачем в последних компьютерах DEC она нужна ? Компьютеры стали одинаковыми по составу.
Это какие последние компы были одинаковыми по составу? PDP-11/83 и PDP-11/84 вместе с PDP-11/93 и PDP-11/94?
- - - Добавлено - - -
Далеко не все стали одинаковы, как я понимаю..
У человека своё видение. Из мира догадок.
Лучше нажимайте на ВМ3 - он ожидаем группой товарищей в виде модуля пин-то-пин совместимого с М1801ВМ3А.
И еще для кое-каких применений
Тут много людей считало, что PDP на FPGA - это аналог резиновой женщины.
Тут много людей считало, что PDP на FPGA - это аналог резиновой женщины.
Резиновость - вещь субьективная. Ключевой момент - имеет ли продукт 100% потактовую совместимость с оригиналом или нет. И не важно, что это, эмулятор, симулятор или что еще.
Однако, как и с теплым ламповым звуком, есть категория людей, которым надо лицезреть или иногда трогать пальчиками оригинальный чип в керамическом корпусе с золотыми ножками, и все что иное, не вызывает доверия.
Либо же базируясь примерно ни на чем, но просто не доверяя (и иногда обоснованно) авторам эмуляторов и симуляторов, люди сомневаются, что можно сэмусимулировать оригинал в точности.
Оригинальных машинок/камней/etc с каждым годом только меньше. Через N лет и вовсе останутся единицы.
Если мы говорим про сохранение истории для потомков хотя кому она там будет нужна, то программная и/или аппаратная (FPGA) эмуляция - единственный выход. И тут уже ничего не попишешь, реализация в таком виде очень важна, просто необходима.
Оригинальных машинок/камней/etc с каждым годом только меньше. Через N лет и вовсе останутся единицы.
Ну да, лет через достаточно много, когда рабочие оригиналы останутся в считанных экземплярах, посмотреть творческое наследие оставленное людьми на этих машинках можно будет только на эмуляторах/симуляторах.
Проц на FPGA - это не эмуляция и уже тем более не симуляция. Это такой же аппаратный процессор, как и оригинал.
Реально старых машинок становится все больше. Их находят и реставрируют
Вот вселенная наверное быстрее расширяется.
И с радио-запчастями будет хуже
Про точную по-тактовую эмуляцию выполнения команд. Имеет только смысл для процессоров первого поколения. Типа z-80 или 1801вм1 где писатели игр и демок точно рассчитывали время выполнения участков кода для понимая того где находится луч монитора или для использования в безконтроллерных адаптерах дисковода типа как у Эпл2. В простейших компьютерах.
В более сложных компьютерах используется ДМА мультипроцессорность и много разных асинхронных фич
Пример.УКНЦ. Если повысить тактовую перефирийного процессора 1801вм2 то вряд ли что изменится. Все программы будут визуально работать также или даже лучше (чуть быстрее)
А уж про 1801вм3! кто-нибудь знает какую нибудь схему где требуется точное время исполнения им команд.
Проц на FPGA - это не эмуляция и уже тем более не симуляция. Это такой же аппаратный процессор, как и оригинал.
Я вот все хочу с CUDA поиграться и сделать эмулятор PDP-11 на GPU. Там интересные конвейеры, может получиться очень прилично по итоговой частоте, FPGA отдыхает :)
Двоичная трансляция команд PDP-11 в Эльбрусовский VLIW было бы круче
- - - Добавлено - - -
Проц на FPGA - это не эмуляция и уже тем более не симуляция. Это такой же аппаратный процессор, как и оригинал.
Все относительно. В ФПГА можно закатить RISC-V а на нем крутить чисто программный эмулятор. Вопрос реализации.а так такой же с виду аппаратный процессор
Пример.УКНЦ. Если повысить тактовую перефирийного процессора 1801вм2 то вряд ли что изменится. Все программы будут визуально работать также или даже лучше (чуть быстрее)
Какие-то программы будут работать шустрее, какие-то исковеркают звук, а какие-то и вовсе могут не работать.
УКНЦ относится к тому классу старых компьютеров, в которых шаг вправо, шаг влево может расцениваться, как побег.
- - - Добавлено - - -
Проц на FPGA - это не эмуляция и уже тем более не симуляция. Это такой же аппаратный процессор, как и оригинал.
Такой же, если автор прошивки все правильно понял и реализовал.
Тоже самое с эмулятором.
На М4 в консоль по прерываниям вывелась стартовая строчка. Но первый заводской тест VKAAC0 пока не едет, впадает в ODT, тот тоже пока не работает - впадает в безумие :)
Update: успешно прошел тест базовых команд VKAAC0. На расширенной арифметике VKABB0 пока умирает, странно. Можно идти спать :)
чуть быстрее
не приемлемо, нарушается чуткость реакции на клавиши, многие игры становятся не управляемыми,
звук меняет тональность и другие побочки. Эксперименты по разгону живых машинок проводились энтузиастами
постоянно и всегда побеждал здравый разум, а именно - заводской вариант.
То же самое и сразгоном современных плат и процессоров - я всегда считал это погоней за призраками,
ОТК Intel маркирует процессоры определённой частотой не из воздуха, а после испытаний\тестов на
стабильную работу, а вся эта тусовка гонщиков-разгонщиков с турбо-жидко-азото-охладителями,
поверьте, насмотрелся живьём, толпа мажоров тусовщиков, больше там ничего нет.
По Ангстремовским процессорам и Зеленоградским машинкам - я сторонник подхода Титуса и Patron'a
в плане эмуляции 1 в 1. Это логично, правильно и спорить тут не о чем, особенно если есть возможность
сделать так.
Я до сих пор помню первое впечатление от Эмулятора ДВК - я реально почувствовал, что запустилась ДВК,
не хватало только самолётного гула вентиляторов ))) Было это тут >>> https://www.old-games.ru/forum/threads/ehmuljatory-uknc-i-dvk.50279/#post-844157 <<<
Закончить реверс ВМ3 в планах, сразу после М4.А планы реверса F-11 еще живые?
Да, кстати, посмотрел документацию по 1801ВМ3, там написано, что в наличии три указателя стека, то есть система, пользователь и пульт.
Похоже, что указатель стека который предназначался для супервизора - передали в пультовый режим :)
Ну а глубину потребной симуляции каждый определяет для себя сам :)
Конечно лучше настоящий раритет иметь, но я, увы, не могу себе позволить, так как дома просто нет места для оригинала :(
По хорошему эмуляция должна быть одно к одному, и не важно каким путём достигнуто. Хотя в реале достичь 100% эмуляции нереально. Чего-то будет не так...(шум вентиляторов, вибрации, отсутствие стойки и прочая)
Те эмуляторы, которые есть - великое дело.
Спасибо их создателям.
Похоже, что указатель стека который предназначался для супервизора - передали в пультовый режим
Совсем не факт. Пультовый режим - это чисто наше изобретение, но его родитель - встроенный микропрограммный ODT у DEC. Возможно, что там тоже есть свой указатель стека.
Ну а у ВМ3 он нужен, что бы не трогать указатели стека обычных режимов. И при входе в пульт всегда выставляется в фиксированное значение, после чего в стек (через него) кладутся, как при прерывании, PS и PC.
А планы реверса F-11 еще живые?
Да, но без обязательств. Если химик не осилит в этом году 1515ХМ, то наверное буду фотать 1806ВМ2 и 1811, там скрипач химик не нужен :)
- - - Добавлено - - -
встроенный микропрограммный ODT у DEC. Возможно, что там тоже есть свой указатель стека.
В ODT? Нету. Основная идея ODT - запустить процессор и позволить что-то проверить даже если у тебя внешняя память отвалилась полностью. Ну и в процессе отладки память трогать не рекомендуется.
В принципе персональный стек для пульта, с одной стороны жизнь облегчает, а с другой...
Можно же было сделать, например, так - впихнуть всё тупо начиная со определённого адреса, так же как по факту сделано в ВМ3. Далее программа пульта загоняет значения регистров по фиксированным адресам, а по выходу из пульта восстанавливает...
И целый регистр стека для супервизора есть :)
Наличие регистра стека для пульта облегчает немного программирование программы пульта, но режим супервизора звучит круче ;)
Да и программа на пульт - пишется один раз, потом вылавливают мелкие баги(если вылавливают). Прошивок пультового ПЗУ не так уж и много.
Но похоже, что на кристаллах процессоров серии 1801 со свободным местом было совсем плохо :(
По этому и изобрели пультовый режим, а не использовали микропрограммный. В этом случае места во внешней ПЗУ сколько хош... И быстродействие внешней схемы не так критично, как для микропрограммной реализации. И самое главное, процент выхода годной продукции выше :)
- - - Добавлено - - -
Кстати, интересно, а микропрограмма 1811(F-11) всегда одна и та же? Что в "Электронике-85"(Pro-350) что в M6 (LSI-11/23)???
Можно же было сделать, например, так - впихнуть всё тупо начиная со определённого адреса, так же как по факту сделано в ВМ3. Далее программа пульта загоняет значения регистров по фиксированным адресам, а по выходу из пульта восстанавливает...
Представляешь - она так и делает.
Но переход в пульт - он сделан как прерывание, а значит - нужен стек. И сохранение PC PS использует этот механизм. А потом уже код пульта делает что хочет. Например в 134 - сохраняет регистры по фиксированным значениям (даже не использует стек!).
И целый регистр стека для супервизора есть
Это даже не 10 процентов от того, что надо. А надо ещё 8 регистров PAR и 8 регистров PDR для режима супервизора, плюс, поскольку похоже супервизор жить не может без ID - 8 регистров PAR и 8 регистров PDR для режима данных ядра, 8 регистров PAR и 8 регистров PDR для режима данных пользователя, 8 регистров PAR и 8 регистров PDR для режима данных супервизора - итого 64 регистра по 16 бит, плюс 1 бит в SR0, плюс 3 бита в SR3, плюс поддержка ID в самом процессоре (информации о том, что в цикле обращения к шине грузится инструкция - не хватает). И это только то, что я вспомнил.
Да и программа на пульт - пишется один раз
А если надо добавить новые устройства загрузки?
В этом случае места во внешней ПЗУ сколько хош..
А фот хрен. Если только нет чего то ещё не известного, то, на текущий момент - 6 кб ПЗУ, 2 кб ОЗУ. Ну если только не прикручивать внешний маппинг, как это сделано в MXV11-B или KDJ11-B.
И быстродействие внешней схемы не так критично, как для микропрограммной реализации.
Микропрограммно реализован (крайне сильно порезанный) вариант ODT - это не режим пульта, как у 1801ВМ3. В частности, там ни о какие загрузчиках в принципе речи не идёт. А пульт у 1801ВМ3 - это больше аналог ПЗУ из MXV11-B или KDJ11-B - плюс ODT плюс (возможное к реализации) выделенное адресное пространство плюс несколько регистров. Кстати, этот самый указатель стека режима пульта - он не выделенный. Это один из внутренних регистров, который - в том числе - используется при обработке прерываний или команд расширенной арифметики - поэтому в режиме пульта ограничены прерывания (от внешних устройств точно нет, обращение по несуществующему адресу точно есть) и нельзя использовать команды расширенной арифметики.
Так что - внезапно - как указатель стека для режима супервизора он не канает :)
- - - Добавлено - - -
Кстати, интересно, а микропрограмма 1811(F-11) всегда одна и та же? Что в "Электронике-85"(Pro-350) что в M6 (LSI-11/23)???
Так 1811 драл Воронеж, а они драли один в один, так что там микропрограммный ODТ и - у меня есть пара микросборок от 1811 (там, где по 2 микрухи) - с ходу не скажу - какие из трех (проц, MMU и FPP) - я пробовал вместо буржуйских вставлять эти две советские - работают без писка. Пока не удалось воткнуть 4-ёх микрушную микросборки, что бы посмотреть - а CIS она (наша, советская) увидит али нет :) Но опять же - Воронеж, так что я ставлю на - да.
Ну в 1801ВМ3 регистры ДП режимов системы и пользователя уже есть :)
Так что не так уж и много добавить надо ...
Единственный вопрос в том, на сколько эти регистры + дополнительная логика затормозят процессор???
Может быть просто места не хватило, чтобы развернуться на всю ...
Только вскрытие может показать. А вскрытие будет, как я понял где-то не ранее чем через год. Первым в очереди добивание чипсета УКНЦ. Потом 1806ВМ2 и 1811. А уж за тем 1801ВМ3 ...
Буду ждать...
Про 1801ВМ2 узнал много интересного :)
Ну в 1801ВМ3 регистры ДП режимов системы и пользователя уже есть
Так что не так уж и много добавить надо ...
Я описал и посчитал только то, что НАДО добавлять. Общее количество регистров PAR и PDR - 3*2*16 - 96 регистров (из них есть 32, осталось добавить 64) :)
Единственный вопрос в том, на сколько эти регистры + дополнительная логика затормозят процессор???
Я как раз с этим сейчас воюю в PDP2011, у меня ситуация такая - проц работает на 100 МГц, ДП - на 200 МГц, вроде как все эти операции отображение виртуального адреса на физический он делать успевает. Что будет если сделать частоты одинаковыми (то есть будет ли он успевать или обращение процессора придётся притормаживать) - пока не скажу :)
Микропрограммно реализован (крайне сильно порезанный) вариант ODT - это не режим пульта, как у 1801ВМ3. В частности, там ни о какие загрузчиках в принципе речи не идёт.
ODT (https://github.com/1801BM1/cpu11/blob/master/lsi/rom/doc/odt.md) поддерживает загрузку с перфоленты, в формате абсолютного загрузчика.
Также, обычно есть перемычки выбора как стартовать, и микрокоды LSI-11 и M4 умеют их распознавать и переходит на 173000, то есть всегда можно добавить маленькое ПЗУ для своего загрузчика.
Еще одна и опций старта, выбираемая перемычками - расширить ПЗУ микрокода и добавить новый загрузчик в расширения, тогда в пространстве процессора вообще никаких левых ПЗУ.
Первым в очереди добивание чипсета УКНЦ. Потом 1806ВМ2 и 1811. А уж за тем 1801ВМ3 ...
Если я правильно понял Vslav-а, то после добивания М4 он как раз планирует закончить 1801ВМ3
Если я правильно понял Vslav-а, то после добивания М4 он как раз планирует закончить 1801ВМ3
Чипсетом УКНЦ Titis занимается, там все уже есть. От меня хотят только фотографии разных более ранних вариаций 1515ХМ1, там затык за химиком, он занят, так что будет травить микросхемы уже в следующем году.
ODT поддерживает загрузку с перфоленты, в формате абсолютного загрузчика.
Кстати, надо будет сравнить описание ODT от PDP-11/03 (я правильно понимаю, что это не результат анализа микрокода процессора?) с тем, что реально будет поддерживать ODT от F11 и J11.
и микрокоды LSI-11 и M4 умеют их распознавать и переходит на 173000, то есть всегда можно добавить маленькое ПЗУ для своего загрузчика.
Но это уже будет не микрокод и даже не сам ODT - это как из ODT набить прогу в памяти и запустить её.
добавить новый загрузчик в расширения, тогда в пространстве процессора вообще никаких левых ПЗУ.
Это уже будет ближе к пульту ВМ3, но вопрос - это кто-нибудь когда-нибудь где-нибудь использовал?? :)
- - - Добавлено - - -
Чипсетом УКНЦ Titis занимается, там все уже есть.
Ну я про 1515 ничего и не говорил :)
затык за химиком, он занят, так что будет травить микросхемы уже в следующем году.
Главное, чтобы не 'новичком'.
Ты его поторопи, скажи народ ждет)
Кстати, надо будет сравнить описание ODT от PDP-11/03 (я правильно понимаю, что это не результат анализа микрокода процессора?)
Это фирменное описание ODT LSI-11 от DEC. Микрокод (https://github.com/1801BM1/cpu11/blob/master/lsi/rom/src/microm.mic) полностью разобран и подтверждает этот документ.
Ну я про 1515 ничего и не говорил :)
Да, я просто уточнил в-общем, что УКНЦ - собственно уже все исследованно, вскрытие других версий XM1 некритично для реплики.
Это фирменное описание ODT LSI-11 от DEC. Микрокод полностью разобран и подтверждает этот документ.
Микрокод от LSI-11 (ака 581)?
Но это уже будет не микрокод и даже не сам ODT - это как из ODT набить прогу в памяти и запустить её.
Мы можем использовать, написан полный инструментарий (на Питоне, то есть под Windows/Linux работает влет) для разработки микрокода - микроассемблер для LSI-11, и универсальный мета-ассемблер для М4 (он, в принципе, для любых битслайсов пойдет, для СМ-2420 - легко).
- - - Добавлено - - -
Микрокод от LSI-11 (ака 581)?
Да, 581 полностью совпадает с MiCROM LSI-11 - Эрик прямо подтвердил, что его дампы, снятые с оригинальной LSI-11 совпадают с моими от 581РУx.
Мы можем использовать
Это сейчас, а я про то - раньше кто то е?
По поводу ODT от J11. + - работает, - - не работает
+ 1. "/" slash (ASCII 0578)
+ 2. "CR" carriage return (ASCII 0158)
+ 3. "LF" line feed (ASCII 0128)
- 4. "^" up arrow (ASCII 1368)
- 5. "@" at sign (ASCII 1008)
- 6. Back arrow (ASCII 1378)
+ 7. "$" dollar sign (ASCII 0448) or R (ASCII 1228) internal register
+ 8. "$ s" (ASCII 0448 ASCII 1238) processor status word
+ 9. "G" (ASCII 1078)
+ 10. "P" (ASCII 1208)
- 11. "M" (ASCII 1158)
- 12. "RO" RUBOUT (ASCII 1778)
- 13. "L" (ASCII 1148)
Да, я просто уточнил в-общем, что УКНЦ - собственно уже все исследованно, вскрытие других версий XM1 некритично для реплики.
На мой взгляд - критичны, т.к. тот же таймер здорово отличается, и имеет неисследованные глюки.
На мой взгляд - критичны, т.к. тот же таймер здорово отличается, и имеет неисследованные глюки.
Это не препятствие уже сейчас иметь реплику на открытых микросхемах. Реплику уже можно сделать? Ответ - да, и на самых последних версиях ХМ-ок.
Значит оставшиеся неисследованными старые версии - не являются для реплики жизненно необходимыми.
В общем, режим пульта и по крайне мере 134-ая ПЗУ у 1801ВМ3 - это комбинация ODT (тоже урезанного) и очень некоторых возможностей ПЗУ от MXV11-B или KDJ11-B.
- - - Добавлено - - -
Реплику уже можно сделать? Ответ - да
Сейчас реплику не сделать, так как есть только не полностью проверенная внутренние схемы. Описания на VHDL или Verilog тоже или вообще нет или не (не полностью?) рабочее
По УКНЦ - более-менее понятно. Осталось совсем чуток дожать и тогда УКНЦ на FPGA вопрос менее года :)
Старые версии тоже желательны, но не на столько уж и обязательны. По крайней мере, возможно станут понятны глюки первых УКНЦ.
Ведь не просто так новые версии разрабатывали, значит были выявлены явные проблемы.
Насчёт количества регистров MMU понятно, по этому J-11 в качестве памяти пользует :)
По поводу ODT от J11, а в документации от DEC что про эти команды пишут? Сходится ли с реальностью?
Powered by vBulletin® Version 4.2.5 Copyright © 2025 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot