User Tag List

Страница 157 из 174 ПерваяПервая ... 153154155156157158159160161 ... ПоследняяПоследняя
Показано с 1,561 по 1,570 из 1740

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

  1. #1561

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

    По умолчанию

    Цитата Сообщение от Alex_K Посмотреть сообщение
    Он то как раз и нужен, но с 1806ВМ2 на борту.
    Я вижу, раз есть интерес к 1806 надо замутить переходник для него на плату DE0, чтобы тестировать процессор можно было.

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

  3. #1562

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

    По умолчанию

    Цитата Сообщение от Vslav Посмотреть сообщение
    Я вижу, раз есть интерес к 1806 надо замутить переходник для него на плату DE0, чтобы тестировать процессор можно было.
    Неплохо было бы. Можно узнать какие глюки починили, а какие остались. Глюка с адресацией @PC уже нет, код 030 исполняется как 020 (RSEL). Возможно уже нет глюка при записи по адресу предвыборки, если адрес записи и PC отличаются разным значением бита 0 (чёт и нечёт). Вот про глюки с записью R7 в EIS и записью CPSW при переполнении в DIV до этого было неизвестно, вскрылось только сейчас.

  4. #1563

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

    По умолчанию ВМ2: ASH(C)

    Ну, и финальная вишенка на торте команд расширенной арифметики - это ASH(C).
    По сравнению с MUL и DIV простая до неприличия. Даже проверять не стал.

    ASH(C):
    Код:
    //======================================================================
    //			
    // 	   	        Команда ASH(C) Rs,Rd
    // 
    //======================================================================
    0x3B:			ACC=Rs						// ACC - счетчик
    //---------------------------------------------------------------------- 					
    0x1A:									// (в данной команде поля Rs и Rd кодируются нестандартно)	
    			EA1=Rd						// EA1 - старшее слово (единственное для ASH)
    	if ASH		GOTO 0x27			
    //---------------------------------------------------------------------- ASHC					
    0x2A:			EA2=Rd|1					// EA2 - младшее слово
    //----------------------------------------------------------------------					
    0x27:	if (ACC[5]=0)	CTR=ACC						// Сдвиг влево
    	else		CTR=~ACC					// Сдвиг вправо
    									// CTR - счетчик итераций 0..31
    	
    			TLZ=EA1[15]					// TLZ - знак старшего слова
    //---------------------------------------------------------------------- 	
    0x35:									// Первая итерация
    	if LEFT		EA1.EA2=EA1.EA2		NZVC			// Если сдвиг влево, то первая итерация ничего не делает
    	else		EA1.EA2=EA1.EA2>>1	NZVC			
    	
    	if (CTR=0)	
    		if ASH	GOTO 0x0C
    		else	GOTO 0x0E						
    //---------------------------------------------------------------------- 	
    0x35:	loop:		CTR=CTR-1					// Все последующие итерации
    
    	if LEFT		EA1.EA2=EA1.EA2<<1	NZVC
    	else		EA1.EA2=EA1.EA2>>1	NZVC			// Арифметический сдвиг вправо
    
    	if (CTR<>0)	GOTO loop
    									// Влияние на флаги:
    									
    									// N=EA1[15] (знак результата)
    									
    									// Если ASHC, и EA1.EA2=0, то Z=1
    									// Если ASH,  и EA1=0, то Z=1
    									// Иначе Z=0		
    									
    									// Если ASHC  RIGHT, то C=ЕА2'[0] (предыдущее значение EA2[0])
    									// Если ASH   RIGHT, то C=ЕА1'[0] (предыдущее значение EA1[0])
    									// Если ASH(C) LEFT, то C=ЕА1'[15] (предыдущее значение EA1[15])
    																
    									// Если ASH(C) RIGHT, то V=0
    									// Если ASH(C) LEFT, то для первой итерации V=0 
    											     иначе если хотя бы в одной итерации TLZ^EA1[15]=1, то V=1
    	if ASH		GOTO 0x0C
    //---------------------------------------------------------------------- ASHC
    0x0E:			Rd=EA1						// Rd=ЕА1 - старшее слово
    //---------------------------------------------------------------------- 			
    0x0C:	if ASHC		Rd|1=EA2					// Rd|1=ЕА2 - младшее слово
    	if ASH		Rd=EA1						// Rd=EA1 - слово для ASH 
    						PLI_REQ			// Запросить проверку запросов на прерывание  
    	if X(Rs) or @X(Rs) or (Rs=R7)					// Если использовали адресацию по R7, то
    			GOTO 0x21					// Перейти на команду выборки следующей некэшированной инструкции
    	else								// Иначе
    			GOTO 0x01					// Перейти на команду выборки следующей инструкции
    - - - Добавлено - - -

    Из интересненького: как видно из алгоритма, сдвиг 32-битного слова всего на 8 тактов медленнее, чем сдвих 16-битного, независимо от числа итераций.
    Поэтому, если требуется работа с большими данными, лучше оперировать сразу с 32-битными словами.
    Последний раз редактировалось Titus; 06.12.2020 в 15:00.

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

    Alex_K(06.12.2020)

  5. #1564

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

    По умолчанию

    Цитата Сообщение от Titus Посмотреть сообщение
    Код:
    0x35:                                    // Первая итерация
        if LEFT        EA1.EA2=EA1.EA2        NZVC            // Если сдвиг влево, то первая итерация ничего не делает
        else        EA1.EA2=EA1.EA2>>1    NZVC            
        
        if (CTR=0)    
            if ASH    GOTO 0x0C
            else    GOTO 0x0E                        
    //----------------------------------------------------------------------     
    0x35:    loop:        CTR=CTR-1                    // Все последующие итерации
    
        if LEFT        EA1.EA2=EA1.EA2>>1    NZVC            // Арифметический сдвиг вправо
        else        EA1.EA2=EA1.EA2<<1    NZVC
    Как-то непонятно, в первой итерации сдвиги в одну сторону, в последующие - в другую.

  6. #1565

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

    По умолчанию

    Цитата Сообщение от Alex_K Посмотреть сообщение
    Как-то непонятно, в первой итерации сдвиги в одну сторону, в последующие - в другую.
    Исправил.

  7. #1566

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

    По умолчанию

    Цитата Сообщение от Titus Посмотреть сообщение
    Код:
                                        // Если ASH(C) RIGHT, то V=0
                                        // Если ASH(C) LEFT, то для первой итерации V=0 
                                                     иначе V=TLZ^~EA1[15]
    Тут такое дело, если во время сдвига произошло изменение знакового разряда, то флаг V устанавливается постоянно. Естественно возможно только при сдвиге влево.

  8. #1567

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

    По умолчанию

    Цитата Сообщение от Alex_K Посмотреть сообщение
    Тут такое дело, если во время сдвига произошло изменение знакового разряда, то флаг V устанавливается постоянно. Естественно возможно только при сдвиге влево.
    Ну да, а в чем противоречие?
    Флаги устанавливаются заново во время каждой итерации.

  9. #1568

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

    По умолчанию

    Цитата Сообщение от Titus Посмотреть сообщение
    Ну да, а в чем противоречие?
    Флаги устанавливаются заново во время каждой итерации.
    Значение 0100 0000 0000 0000 сдвигаю влево на три разряда. При первом сдвиге фиксируется изменение знака, результат 1000 0000 0000 0000. При втором сдвиге фиксируется изменение знака, результат 0000 0000 0000 0000. При третьем сдвиге изменения знака нет, но флаг V должен стоять.

  10. #1569

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

    По умолчанию

    Цитата Сообщение от Alex_K Посмотреть сообщение
    При третьем сдвиге изменения знака нет, но флаг V должен стоять.
    А стоит ли он в реале? )

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

    Точно, там стоит RS-триггер. И V один раз установившись, больше не сбрасывается.

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

    Исправил.

  11. #1570

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

    По умолчанию

    Цитата Сообщение от Titus Посмотреть сообщение
    А стоит ли он в реале? )
    Проверил на реале.
    Код:
    1000 012701 MOV #40000,R1
    1002 040000
    1004 012700 MOV #3,R0
    1006 000003
    1010 072100 ASH R0,R1
    1012 106702 MFPS R2
    После исполнения установлены биты Z и V.

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

    Цитата Сообщение от Titus Посмотреть сообщение
    Точно, там стоит RS-триггер. И V один раз установившись, больше не сбрасывается.
    А не влияет ли наличие RS-триггера на исполнение других команд EIS?

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

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

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

Эту тему просматривают: 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

Ваши права

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