User Tag List

Страница 148 из 174 ПерваяПервая ... 144145146147148149150151152 ... ПоследняяПоследняя
Показано с 1,471 по 1,480 из 1740

Тема: Реверс-инжиниринг УКНЦ (1515ХМ1&2, 1801ВП1, 1801ВМ2)

  1. #1471

    Регистрация
    08.10.2005
    Адрес
    Москва
    Сообщений
    14,400
    Спасибо Благодарностей отдано 
    1,703
    Спасибо Благодарностей получено 
    2,223
    Поблагодарили
    875 сообщений
    Mentioned
    69 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    Цитата Сообщение от Vslav Посмотреть сообщение
    Вот тайм-аут обращения оно отрабатывало очень долго, по ходу как для окончания INIT.
    Все так как я и описал. Сперва 512 тактов на RESET, и в это время держится DIN. А потом отрабатывает нормальный тайм-аут.

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

  3. #1472

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

    По умолчанию

    Цитата Сообщение от Vslav Посмотреть сообщение
    И это вполне логично, потому что по RESET могла измениться карта памяти
    И не только карта, но и содержимое ячейки - классический пример - всякие ПЗУ загрузки-тестирования (аха, область 165xxx и 173xxx) со страничной организацией (здравствуй, J11 и не только) и сбросом по сбросу регистра маппинга.

  4. #1473

    Регистрация
    08.10.2005
    Адрес
    Москва
    Сообщений
    14,400
    Спасибо Благодарностей отдано 
    1,703
    Спасибо Благодарностей получено 
    2,223
    Поблагодарили
    875 сообщений
    Mentioned
    69 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию ВМ2: Операции с двумя операндами

    Продолжаем.
    Пока что простые операции.

    MOV(B), BIS(B), BIC(B), ADD, SUB, CMP(B), BIT(B), XOR:
    Код:
    //======================================================================
    //			
    // 	   	       Операции с двумя операндами
    //		      и регистровой адресацией Rs,Rd
    //
    //  MOV(B), BIS(B), BIC(B), ADD, SUB, CMP(B), BIT(B), XOR
    // 
    //======================================================================
    
    0x3B:	if BIC(B)	Rd(.B)=Rd&~Rs		 VZN	
    	if BIS(B)	Rd(.B)=Rd|Rs		 VZN
    	if ADD		Rd=Rd+Rs		CVZN
    	if SUB		Rd=Rd+~Rs+1		CVZN
    	if CMP(B)	ACC(.B)=~Rd+Rs+1	CVZN
    	if BIT(B)	ACC(.B)=Rd&Rs		 VZN
    	if XOR		Rd=Rd^Rs		 VZN
    	if MOV		Rd=Rs			 VZN
    	if MOVB		Rd=SIGNEXT(Rs)		 VZN
    	endif
    						  PLI_REQ		// Запросить проверку запросов на прерывание  
    	if (Rd=R7)	GOTO 0x21					// Перейти на команду выборки следующей некэшированной инструкции		
    	else		GOTO 0x01					// Перейти на команду выборки следующей инструкции
    Последний раз редактировалось Titus; 29.11.2020 в 21:11.

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

    Alex_K(29.11.2020)

  5. #1474

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

    По умолчанию

    Цитата Сообщение от Titus Посмотреть сообщение
    Пока что простые операции.
    Сначала подумал, нифига себе двухоперандные команды простые, потом посмотрел на алгоритм, что-то уж слишком мало. А уже потом заметил, что это с двумя регистрами.

  6. #1475

    Регистрация
    08.10.2005
    Адрес
    Москва
    Сообщений
    14,400
    Спасибо Благодарностей отдано 
    1,703
    Спасибо Благодарностей получено 
    2,223
    Поблагодарили
    875 сообщений
    Mentioned
    69 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    Цитата Сообщение от Alex_K Посмотреть сообщение
    Сначала подумал, нифига себе двухоперандные команды простые
    Это еще что.
    Вот как работает EALU - это песня.
    Фактически работает тот же микропрограммный автомат вместе с обычным АЛУ, в то время, как блок расширенного АЛУ беспощадно ими управляет, подбрасывая лишние данные, зацикливая, добавляя регистры в цепочку сдвига, организуя цикл, приостанавливая микропрограмму на время. Как дирижер вбежавший в слаженный ансамбль, и заставляющий играть его по-своему.

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

    hobot(30.11.2020)

  7. #1476

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

    По умолчанию

    Цитата Сообщение от Titus Посмотреть сообщение
    Как дирижер вбежавший в слаженный ансамбль, и заставляющий играть его по-своему.
    И ведь прекрасно играет. По моим тестам каких-либо ошибок в EIS не обнаружено. Вроде всё чётко.

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

    hobot(30.11.2020)

  8. #1477

    Регистрация
    08.10.2005
    Адрес
    Москва
    Сообщений
    14,400
    Спасибо Благодарностей отдано 
    1,703
    Спасибо Благодарностей получено 
    2,223
    Поблагодарили
    875 сообщений
    Mentioned
    69 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию ВМ2: Умножение

    Вот и понят один из столпов расширенной арифметики - умножение.

    Достаточно сложно было собирать его логику по всей схеме. Все очень запутано и специфично. Пришлось даже попросить уважаемого @Ynicky прогнать умножение на модели, чтобы сравнить, не накосячил ли я в общих чертах.
    После чего я написал на Си модель того, что описано ниже, и прогнал на всех комбинациях. Все сошлось в точности.

    Интересная особенность EALU в том, что когда счетчик числа итераций CTR загружается новым значением, микропрограммный автомат останавливается, и АЛУ каждый шаг выполняет одну и ту же заданную микропрограммой математическо-логическую операцию, но на которую в широком диапазоне может влиять автомат EALU. После окончания счета, микропрограмма продолжается далее.


    MUL:
    Код:
    //======================================================================
    //			
    // 	   	        Команда MUL Rs,Rd
    // 
    //======================================================================
    0x3B:			ACC=Rs						// (в данной команде поля Rs и Rd кодируются не стандартно)						
    //----------------------------------------------------------------------  
    0x18:			EA1=0					
    //---------------------------------------------------------------------- 
    0x27:			EA2=ACC						// EA2 - Rs
    //---------------------------------------------------------------------- 
    0x35:			CTR=0x10					// Счетчик на 16 итераций				
    //----------------------------------------------------------------------
    0x1A:									// Этот шаг АЛУ повторяет 16 раз
    	if (EA2[0]=1)	EA1=EA1+Rd					
    	else		EA1=EA1		
    	
    			ЕА1.ЕА2=EA1.EA2>>1				// Арифметический сдвиг вправо с сохранением знака
    			EA1[15]=EA1[15]^c15^c14				// Если при сложении был перенос из 15-го бита, или
    									// перенос из 14-го бита (арифметическое переполнение),
    									// то знак меняется на противоположный
    			CTR=CTR-1
    	if (CTR>0)	GOTO 0x1A				
    //---------------------------------------------------------------------- 
    0x2A:									// CTR=0
    	if (ACC[15]=1)	EA1=EA1-Rd					// Если ACC<0, то коррекция результата
    	else		EA1=EA1
    						CVZN			// Флаги устанавливаются согласно алгоритму MUL:
    									// N=EA1[15]
    									// if (((EA1=0x0000) and (EA2[15]=0)) or
    									//     ((EA1=0xFFFF) and (EA2[15]=1))) 	C=0
    									// else C=1
    									// if (EA1.EA2=0) Z=1
    									// V=0
    
    //---------------------------------------------------------------------- 
    0x0E:			Rd=EA1						// Старшая часть результата
    //---------------------------------------------------------------------- 
    0x0C:			Rd|1=EA2					// Младшая часть результата
    									// Дальнейшая проверка рудиментарная, и наследуется от других команд
    	if (Rs=R7)	GOTO 0x21					// Перейти на команду выборки следующей некэшированной инструкции		
    	else		GOTO 0x01					// Перейти на команду выборки следующей инструкции
    - - - Добавлено - - -

    Следует обратить внимание на то, что в конце проверяется Rs=R7, и исходя из этого делается перекеширование.
    Хотя в случае умножения, следует проверять Rd|1=R7, что, как видно, не делается.
    А значит в этом случае имеем глюк. Хотя, в процессоре есть блок, отвечающий за запись в R7, возможно, он спасет в этом случае. Пока что с ним не разбирался.
    Последний раз редактировалось Titus; 01.12.2020 в 20:37.

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

    Alex_K(01.12.2020), hobot(01.12.2020), nzeemin(01.12.2020), Ynicky(01.12.2020)

  9. #1478

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

    По умолчанию

    Цитата Сообщение от Titus Посмотреть сообщение
    //----------------------------------------------------------------------
    0x0E: Rs=EA1 // Старшая часть результата
    //----------------------------------------------------------------------
    0x0C: Rs|1=EA2 // Младшая часть результата
    Цитата Сообщение от Titus Посмотреть сообщение
    Следует обратить внимание на то, что в конце проверяется Rd=R7, и исходя из этого делается перекеширование.
    Хотя в случае умножения, следует проверять Rs|1=R7, что, как видно, не делается.
    А значит в этом случае имеем глюк. Хотя, в процессоре есть блок, отвечающий за запись в R7, возможно, он спасет в этом случае. Пока что с ним не разбирался.
    А может всё-таки записываем в Rd, а не в Rs. Ведь Rs - source, источник, а Rd - destination, приёмник. А так нужна проверка на Rd|1=R7. Надо попробовать воспроизвести глюк на реальной УКНЦ, нужно только правильные множители подобрать, в смысле значения регистров R6 и R7.

  10. #1479

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

    По умолчанию

    Что то мне кажется, что проверять надо и Rd=R7 и Rd|1=R7 ибо MUL #10, SP и MUL #10, R7

  11. #1480

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

    По умолчанию

    Цитата Сообщение от Hunta Посмотреть сообщение
    Что то мне кажется, что проверять надо и Rd=R7 и Rd|1=R7 ибо MUL #10, SP и MUL #10, R7
    Зачем такая избыточность. Достаточно проверить Rd|1=R7, ибо R6|1=R7 и R7|1=R7.

Страница 148 из 174 ПерваяПервая ... 144145146147148149150151152 ... ПоследняяПоследняя

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

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

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

Похожие темы

  1. Ответов: 32
    Последнее: 18.12.2024, 18:19
  2. Реверс-инжиниринг игры Boovie
    от Oleg N. Cher в разделе Программирование
    Ответов: 41
    Последнее: 09.01.2022, 23:07
  3. Реверс инжиниринг печатной платы
    от Filin в разделе Несортированное железо
    Ответов: 36
    Последнее: 11.03.2018, 22:46
  4. Куплю 1515ХМ1-6006, 1515ХМ1−6008
    от moxjemi в разделе Барахолка (архив)
    Ответов: 3
    Последнее: 10.01.2012, 17:23
  5. 1801ВМ2 А и Б
    от dk_spb в разделе ДВК, УКНЦ
    Ответов: 2
    Последнее: 03.05.2010, 11:51

Ваши права

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