User Tag List

Страница 187 из 273 ПерваяПервая ... 183184185186187188189190191 ... ПоследняяПоследняя
Показано с 1,861 по 1,870 из 2727

Тема: Цифровая археология: 1801 и все-все-все

  1. #1861

    Регистрация
    31.03.2013
    Адрес
    г. Киев
    Сообщений
    2,413
    Спасибо Благодарностей отдано 
    132
    Спасибо Благодарностей получено 
    759
    Поблагодарили
    353 сообщений
    Mentioned
    88 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от CodeMaster Посмотреть сообщение
    А вот здесь же тоже должны быть проводники?
    Да, должны и есть, просто слой выключен в редакторе. Полная картинка, 1МБ

    Сегодня вдруг понял что этот MCP-1600 сильно напоминает AVR, та же гарвардская архитектура, 1-2 цикла на инструкцию, 16-битные микрокоманды, ну регистров поменьше, стек одноуровневый, зато есть киллер-фича - аппаратная трансляция кодов.

    Update: Эрик подтвердил что прочитанные прошивки с 581РУ2 и 581РУ1 полностью соответствуют тому что он прочитал из 1631-10 и 1631-07.

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

    Цитата Сообщение от Titus Посмотреть сообщение
    Реверсом занимается Vslav, и вряд ли какая-то ОТК'шная 'баба' за всем это следит)
    ОТК он и есть ОТК - Отдел Технического Контроля. Применяется при производстве, для обеспечения соответствия результата каким-то установленным критериям.
    Для R&D применим слабо, потому что результатов еще часто нет и какие они будут - никто не знает. Но при реверсе у нас много чего есть для проверки - много софта, и реальные микросхемы, если есть подозрение на несоответствие, то всегда можно сравнить с эталоном. Пока реверсный подход себя показывает неплохо, он отлично повторяет даже найденные ошибки ВМ1/ВМ2, и, с большой вероятностью - даже еще не найденные
    Последний раз редактировалось Vslav; 19.04.2020 в 08:44.

    Этот пользователь поблагодарил Vslav за это полезное сообщение:

    hobot(19.04.2020)

  2. #1861
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  3. #1862

    Регистрация
    13.12.2013
    Адрес
    г. Санкт-Петербург
    Сообщений
    3,072
    Спасибо Благодарностей отдано 
    37
    Спасибо Благодарностей получено 
    81
    Поблагодарили
    65 сообщений
    Mentioned
    4 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Vslav Посмотреть сообщение
    16-битные микрокоманды
    Дык вроде как 8-битные. Да и внутренняя шина 18-бит, остальные 4 линии это расширение на USER TTL ROM BITS. В случае с платой М2 это РУ3.


    Цитата Сообщение от Vslav Посмотреть сообщение
    Update: Эрик подтвердил что прочитанные прошивки с 581РУ2 и 581РУ1 полностью соответствуют тому что он прочитал из 1631-10 и 1631-07.
    А РУ3?

  4. #1863

    Регистрация
    31.03.2013
    Адрес
    г. Киев
    Сообщений
    2,413
    Спасибо Благодарностей отдано 
    132
    Спасибо Благодарностей получено 
    759
    Поблагодарили
    353 сообщений
    Mentioned
    88 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от MiX Посмотреть сообщение
    Дык вроде как 8-битные. Да и внутренняя шина 18-бит, остальные 4 линии это расширение на USER TTL ROM BITS. В случае с платой М2 это РУ3.
    М-м-м... 8-битные? Код каждой микроинструкции занимает одно слово 16-бит. Плюс специальный бит управляет записью текущего LC в регистр адреса возврата (любая инструкция перехода может превратиться в вызов подпрограммы, особенно прикольно выглядят условные переходы, или можно забавно строить циклы вообще на любую инструкцию), плюс один специальный бит инициирует специальную последовательность RNI (Read Next Instruction), эти биты не записываются в текущий регистр микроинструкции, поэтому относятся к опкоду очень условно. То есть, регистр MIR и шина 16-битные, и если открыть любую книжку по MCP-1600 - везде расписаны 16-разрядные опкоды.

    Старшие разряды, 21-18, которые "USER TTL", они используются для специальных целей - сброс-установка INIT, сброс-установка признака FDIN (быстрый ввод, аналог безадресного у серии 1801), сброс флагов ошибок и прочее, эти схемы расположены собственно на плате M2, в микрокоде редки - ЕМНИП, всего 9 локаций их содержат. Серия 1801, кстати, использует подобную технику управления этими сигналами, только расположено это уже все внутри микросхемы.

    Цитата Сообщение от MiX Посмотреть сообщение
    А РУ3?
    Он написал FIS/EIS тоже, но номер я не уверен что он читал -15.

    Этот пользователь поблагодарил Vslav за это полезное сообщение:

    MiX(19.04.2020)

  5. #1864

    Регистрация
    31.03.2013
    Адрес
    г. Киев
    Сообщений
    2,413
    Спасибо Благодарностей отдано 
    132
    Спасибо Благодарностей получено 
    759
    Поблагодарили
    353 сообщений
    Mentioned
    88 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Чем дальше в лес - тем толще партизаны сложнее исправлять ошибки.
    В сумме накопилось более трех десятков.

    Сегодня отлаживал трансляцию команд PDP-11, поисправлял проблемы в матрице трансляции и связанных схемах. Пришлось изучать микроассемблер, стартовая последовательность выглядит вот так:
    Код:
    ;_________________________________________________________________________
    ;               
    ; Entry point after harware reset or bus timeout
    ;
    reset:	jsr	rfdin,SRUN		; 33b: 25014d
    	tl	BERR,rirl		; 33c: 005048
    	jzbf	busto			; 33d: 00102c	bus timeout flag set
    	ri	i4|i5|i6		; 33e: 007070   disable interrupts
    					;
    L33f:	jsr	sinit			; 33f: 010022	system reset (INIT)
    	mw	pcl,spl			; 340: 0082ec
    	ll	0x88,rpswl		; 341: 00688a
    1$:	ltr	rpswl,rpswl,,0x1C	; 342: 00eeaa <1C> TR = 104210 (emt 210), REF
    	jsr	rfast			; 343: 01014d
    	tl	PFAIL,rirl		; 344: 005088
    	jzbf	1$			; 345: 001042
    					;
    	ll	0,rpswl,PFCLR		; 346: 38600a
    	nl	3,rirl,TFCLR		; 347: 3c4038
    	ll	0,pcl			; 348: 00600e
    	mi	pcl,rirl		; 349: 00ece8
    	jmp	L34c			; 34a: 00034c boot mode selector
    L34b:	jmp	L3fa			; 34b: 000136
    L34c:	jmp	boot0			; 34c: 000602
    	jmp	boot1			; 34d: 000054
    	jmp	boot2			; 34e: 000103
    ;_________________________________________________________________________
    ;               
    boot3:	ll	24,rsrcl		; 34f: 006144
    	ll	0,rsrch			; 350: 006005 load vector 24
    	jmp	L311			; 351: 000311
    Вот то что со значком <1C> - если в этот момент выставлен запрос на регенерацию, то оно неожиданно свалит в процедуру регенерации памяти. Неожиданно - потому что этого кода <1C> в MicROM нет, а сидит оно в PLA в ИК2, и в тот момент когда адрес микроинструкции совпадает с 0x342 выполняется эта проверка, вообще невидимо от потока микроинструкций. По адресу 0x342 можно записать что угодно, но оно будет проверять запрос на регенерацию и переход. Такой себе еще один невидимый слой управления. Пришлось допиливать дизассемблер и все эти мины помечать флажками.

    Update:
    - генерирует системный сброс (INIT)
    - дожидается питания (ACLO)
    - выбирает режим загрузки
    - читает вектор 24/26
    - выполняет первые команды PDP-11
    - помирает на записи в ячейку mov #const, addr - неверный адрес генерирует, при том что перед этим mov #const, @#addr выполнился корректно
    - нашел ошибку в сумматоре, теперь добегает до mtps и на нем виснет
    Последний раз редактировалось Vslav; 20.04.2020 в 03:43.

  6. #1865

    Регистрация
    13.12.2013
    Адрес
    г. Санкт-Петербург
    Сообщений
    3,072
    Спасибо Благодарностей отдано 
    37
    Спасибо Благодарностей получено 
    81
    Поблагодарили
    65 сообщений
    Mentioned
    4 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Vslav Посмотреть сообщение
    стартовая последовательность выглядит вот так:
    Если сравнить с книгой то адреса сдвинуты на единицу.


    Цитата Сообщение от Vslav Посмотреть сообщение
    выполняет первые команды PDP-11
    Откуда команды? Если после 173000 какая то программа то это 2й режим старта, но там нет вектора 24.


    Цитата Сообщение от Vslav Посмотреть сообщение
    - дожидается питания (ACLO)
    Может DCLO?

  7. #1866

    Регистрация
    31.03.2013
    Адрес
    г. Киев
    Сообщений
    2,413
    Спасибо Благодарностей отдано 
    132
    Спасибо Благодарностей получено 
    759
    Поблагодарили
    353 сообщений
    Mentioned
    88 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от MiX Посмотреть сообщение
    Если сравнить с книгой то адреса сдвинуты на единицу.
    Просто в книге так написали - попытались отобразить работу конвейера. Пока какой-то адрес считывается на шине микроинструкций выполняется предыдущая микрокоманда, считанная циклом ранее. Вот в книжке при старте по адресу 0x001 было прочитано 0x0033B, но выполнятся эта инструкция будет в момент когда читается адрес 0x002.

    Цитата Сообщение от MiX Посмотреть сообщение
    Откуда команды? Если после 173000 какая то программа то это 2й режим старта, но там нет вектора 24.
    Выбран режим старта 3 - чтение вектора 24 и переход по нему. Там находится моделируемое ОЗУ и программа записана:

    Код:
         54	000024						vect	24, entry		; вектор начального пуска
    	000024	001576 					.word	entry			;
    	000026	000340 					.word	340			;
    ...
        258					;_____________________________________________________________________________
        259					;
        260	001576	012737 	037406 	177714 	entry:		mov	#037406, @#177714	;
        261	001604	012737 	003177 	177715 			mov	#003177, @#177715	;
        262	001612	012706 	000710 				mov	#$stack, SP		;
        263											;
        264	001616	012767 	001122 	177274 			mov	#$rxbuf, $rxend		;
        265	001624	012767 	001122 	177264 			mov	#$rxbuf, $rxbeg		;
        266	001632	012767 	000716 	177054 			mov	#$txbuf, $txend		;
        267	001640	012767 	000716 	177044 			mov	#$txbuf, $txbeg		;
        268											;
        269	001646	012737 	000100 	177560 			mov	#100, @#RXCSR		;
        270	001654	012737 	000000 	177564 			mov     #000, @#TXCSR		;
        271	001662	005000 					clr	R0			;
        272	001664	106400 					mtps	R0			;
    Цитата Сообщение от MiX Посмотреть сообщение
    Может DCLO?
    По DCLO формируется сразу сброс. Происходит ожидание ACLO, пока питание станет нормальным. Это вот тот самый фронт nACLO запускающий работу, в приведенном фрагменте микрокода этот цикл ожидания явно прописан:
    Код:
    1$:	ltr	rpswl,rpswl,,0x1C	; 342: 00eeaa <1C> TR = 104210 (emt 210), REF
    	jsr	rfdin			; 343: 01014d
    	tl	PFAIL,rirl		; 344: 005088
    	jzbf	1$			; 345: 001042
    - выполнили регенерацию если есть запрос
    - прочитали флажки операцией Fast DIN (или Внутрениий Ввод по терминологии документации M2)
    - PFAIL это когнстанта, заданная как PFAIL = 8
    - это бит 3 регистра FDIN, отображает состояние ACLO и прерывания по нему
    - если бит не равен 0 - новый цикл с регенерацией и проверкой

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

    - нашел еще одну ошибку в стробе регистра трансляции
    - CLR R0 сделан как swf - вычитание регистра из самого себя. При симуляции я начально не задавал никакие значения регистров, чтобы посмотреть как по схеме будет распространятся Undefined, так вот оно swf пережило, не смогло вычесть Undefined из Undefined и дать 0 на выходе, пришлось в начале симуляции регистры принудительно установить в определенные значения. Для реальной схемы или FPGA это значения не имеет, потому что вычитание любого числа из самого себя дает 0.
    - добежало до прерываний от консольного терминала, помирает уже при попытке обработать прерывание

  8. #1867

    Регистрация
    30.11.2015
    Адрес
    г. Самара
    Сообщений
    7,514
    Спасибо Благодарностей отдано 
    344
    Спасибо Благодарностей получено 
    715
    Поблагодарили
    597 сообщений
    Mentioned
    13 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Vslav Посмотреть сообщение
    При симуляции я начально не задавал никакие значения регистров, чтобы посмотреть как по схеме будет распространятся Undefined, так вот оно swf пережило, не смогло вычесть Undefined из Undefined и дать 0
    Ну это как null в программировании.. Не равно ничему, даже самому себе

    Цитата Сообщение от Vslav Посмотреть сообщение
    Для реальной схемы или FPGA это значения не имеет, потому что вычитание любого числа из самого себя дает 0
    Там просто не будет undefined, будет 0

  9. #1868

    Регистрация
    31.03.2013
    Адрес
    г. Киев
    Сообщений
    2,413
    Спасибо Благодарностей отдано 
    132
    Спасибо Благодарностей получено 
    759
    Поблагодарили
    353 сообщений
    Mentioned
    88 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    - прерывания работают, входит в обработчик и возвращается корректно
    - не работает Read-Modify-Write

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

    - чтение-модификация запись заработала
    - теперь видно две следующие проблемы: movb R0, (R1)+ выполняет левое чтение данных, и не работает ветвление:
    Код:
        188	001342				putch:						;
        189					;		tstb	@#TXCSR			;
        190					;		bpl	putch			;
        191					;		movb	R0, @#TXDAT		;
        192					;		rts	PC			;
        193					;						;
        194	001342	010146 					mov	R1, -(SP)		; Read  @ 001342 (010146)
    											; Write @ 000704 (000000)
        195	001344	016701 	177342 				mov	$txbeg, R1		; Read  @ 001344 (016701)
    											; Read  @ 001346 (177342)
    											; Read  @ 000712 (000716)
        196	001350	110021 					movb	R0, (R1)+		; Read  @ 001350 (110021)
    											; *Read  @ 000716 (000015)
    											; Write @ 000716 (000000)
    											;
        197	001352	020127 	001116 				cmp	R1, #$txbuf+TXSIZE	; Read  @ 001352 (020127)
    											; Read  @ 001354 (001116)
        198	001356	103402 					blo	1$			; Read  @ 001356 (103402)
        199	001360	012701 	000716 				mov	#$txbuf, R1		; Read  @ 001360 (012701)
    											; Read  @ 001362 (000716)
        200	001364	020167 	177324 		1$:		cmp	R1, $txend		; Read  @ 001364 (020167)
    											; Read  @ 001366 (177324)
        201	001370	001775 					beq	1$			; Read  @ 001370 (001775)
        202	001372	010167 	177314 				mov	R1, $txbeg		; Read  @ 001372 (010167)
    											; Read  @ 001374 (177314)
    											; Write @ 000712 (000716)
        203	001376	052737 	000100 	177564 			bis	#100, @#TXCSR		; Read  @ 001376 (052737)
    											; Read  @ 001400 (000100)
    											; Read  @ 001402 (177564)
    											; Read  @ 177564 (000200)
    											; Write @ 177564 (000300)
        204	001404	012601 					mov	(SP)+, R1		; Read  @ 001404 (012601)
    											; Read  @ 000704 (000000)
    											; Read  @ Vector 64
        205	001406	000207 					rts	PC			;

    Этот пользователь поблагодарил Vslav за это полезное сообщение:

    hobot(20.04.2020)

  10. #1869

    Регистрация
    31.03.2013
    Адрес
    г. Киев
    Сообщений
    2,413
    Спасибо Благодарностей отдано 
    132
    Спасибо Благодарностей получено 
    759
    Поблагодарили
    353 сообщений
    Mentioned
    88 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    "Ура!! Заработало!!" (с)

    Мой тест "Hello, world" - выводит в консоль строчку по прерываниям.
    Все изменения по начальному запуску на github
    Помещено в основную ветку репозитория, можно скачивать. На этом начальный пуск можно считать успешным, переходим к оригинальным тестам DEC VKAxxx.

    Код:
    # Processor ACLO and DCLO deasserted
    # tty: 000015 (*)
    # tty: 000012 (*)
    # tty: 000015 (*)
    # tty: 000012 (*)
    # tty: 000114 (L)
    # tty: 000123 (S)
    # tty: 000111 (I)
    # tty: 000055 (-)
    # tty: 000061 (1)
    # tty: 000061 (1)
    # tty: 000040 ( )
    # tty: 000163 (s)
    # tty: 000164 (t)
    # tty: 000141 (a)
    # tty: 000162 (r)
    # tty: 000164 (t)
    # tty: 000145 (e)
    # tty: 000144 (d)
    В-общей сложности исправлено 37 ошибок, отсортированные по частоте:
    - пропущена/вставлена инверсия
    - опечатки с индексами
    - неверная интерпретация правильной схемы
    - пропущены латчи или другие фазовые проблемы
    - некорректная работа симулятора
    - один!, и только один пропущенный тразистор

    Схема составлена правильно, ошибок собственно реверса очень мало.
    Посмотрим что будет с заводскими тестами.

    Кстати, movb R0, (память) выполняется через чтение-модификация-запись. Память напрасно читается, видимо, сделали для унификации микрокода с другими двух-операндными инструкциями.
    Последний раз редактировалось Vslav; 20.04.2020 в 18:55.

    Эти 4 пользователя(ей) поблагодарили Vslav за это полезное сообщение:

    blackmirror(20.04.2020), Hunta(20.04.2020), Sergei Frolov(20.04.2020), tnt23(20.04.2020)

  11. #1870

    Регистрация
    07.10.2007
    Адрес
    п.Пудость Гатчинского р-на Лен.обл.
    Сообщений
    3,250
    Спасибо Благодарностей отдано 
    360
    Спасибо Благодарностей получено 
    639
    Поблагодарили
    415 сообщений
    Mentioned
    46 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Vslav Посмотреть сообщение
    Кстати, movb R0, (память) выполняется через чтение-модификация-запись. Память напрасно читается, видимо, сделали для унификации микрокода с другими двух-операндными инструкциями.
    Вот откуда и у 1801ВМ2 эта особенность. Надо проверить ещё CLRB и MFPS.

Страница 187 из 273 ПерваяПервая ... 183184185186187188189190191 ... ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Ответов: 7
    Последнее: 28.06.2014, 17:50
  2. Микросхемы МПК 580,1801,1810 и другие...
    от Alex_Vac в разделе Барахолка (архив)
    Ответов: 44
    Последнее: 07.04.2012, 08:03
  3. ЦИФРОВАЯ МУЗЫКА НА ZX
    от AAA в разделе Музыка
    Ответов: 98
    Последнее: 18.09.2011, 22:33
  4. Учебный стенд УМПК-1801
    от dk_spb в разделе ДВК, УКНЦ
    Ответов: 2
    Последнее: 12.05.2010, 16:52
  5. Цифровая музыка от Вадима Ермеева
    от zxmike в разделе Музыка
    Ответов: 2
    Последнее: 06.08.2007, 23:13

Метки этой темы

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •