User Tag List

Страница 141 из 174 ПерваяПервая ... 137138139140141142143144145 ... ПоследняяПоследняя
Показано с 1,401 по 1,410 из 1740

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

  1. #1401

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

    По умолчанию ВМ2: Самая загадочная команда CODE030

    Все, что вы хотели узнать о команде CODE030, но боялись спросить

    Пояснения:

    1. На флаги VZNC влияют все микрокоманды, однако переписывают их в PSW только те, у которых это отдельно указано.
    2. Режим проверки условий GET_STATE устроен таким образом, что условия проверяются по окончании микрокоманды,
    добавляя к ней еще 4 такта (а что делать, надо же прокачать PLM проверки условий),
    а результат проверки (BRA=1, если условие совпало) доступен уже в следующей микрокоманде.
    В начале следующей микрокоманды условие будет сброшено (BRA=0), в независимости от того, воспользовались им или нет.
    3. SEXT() - расширение знака байта до слова.

    Код:
    //======================================================================
    //
    // 			Команда CODE030 (000030)
    //
    //======================================================================
    
    Адрес			Микрокоманда	PSW	Дополнительно		Комментарий
    
    0x05:			R0=0
    //----------------------------------------------------------------------			
    0x27:			ACC.B=R2		GET_STATE N=0		// Если N=0, то BRA=1, иначе BRA=0
    //----------------------------------------------------------------------   Начало цикла
    0x35:	if (BRA=1)							// Если BRA=1 (в прошлой команде N=0)
    			R0.B=R0+1		GET_STATE N=0		// Если N=0, то BRA=1, иначе BRA=0
    	else								// Иначе
    			ACC=R0		VZNC	PLI_REQ			// Запросить проверку запросов на прерывание	
    			GOTO 0x01					// и перейти на команду выборки следующей инструкции	
    //----------------------------------------------------------------------			
    0x31:	if (BRA=1)							// Если BRA=1 (в прошлой команде N=0)
    			R1=R1<<1					
    	else								// Иначе
    			ACC=R0		VZNC	PLI_REQ			// Запросить проверку запросов на прерывание	
    			GOTO 0x01					// и перейти на команду выборки следующей инструкции
    //----------------------------------------------------------------------							
    0x19:			R3=(R3<<1)|PSW[0]
    //----------------------------------------------------------------------
    0x1E:			R2=SEXT((R2<<1)|PSW[0]) GET_STATE N=0		// Если N=0, то BRA=1, иначе BRA=0	
    			GOTO 0x35					// Перейти на команду 0x35
    Последний раз редактировалось Titus; 23.11.2020 в 23:45.

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

    Alex_K(23.11.2020)

  2. #1402

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

    По умолчанию

    Цитата Сообщение от Titus Посмотреть сообщение
    Все, что вы хотели узнать о команде CODE030, но боялись спросить
    Ну в общем мой алгоритм, выясненный методом научного тыка, оказался правильным:

    Алгоритм:
    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 – очищается.

    Вопрос в другом. Это наверное разработчики так промахнулись или как? Команды с кодами от 020 до 027 используются для чтения, а с кодами от 030 до 037 для записи. Но записи регистра SEL нету, потому команда 030 должна выполняться также, как и 020. В 1806ВМ2 эту ошибку уже исправили. Тут надо смотреть, как производится дешифрация и исполнение кодов от 020 до 037.

  3. #1403

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

    По умолчанию

    Цитата Сообщение от Alex_K Посмотреть сообщение
    Тут надо смотреть, как производится дешифрация и исполнение кодов от 020 до 037.
    Нет, не промахивались. Абсолютно четко написан микрокод именно для этой команды. Никакая другая команда целиком, или частично его не использует.

  4. #1404

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

    По умолчанию

    Цитата Сообщение от Titus Посмотреть сообщение
    Нет, не промахивались. Абсолютно четко написан микрокод именно для этой команды. Никакая другая команда целиком, или частично его не использует.
    Ну тогда большая загадка. Для чего нужен этот алгоритм? И почему тогда отказались от этой команды в 1806ВМ2?

    И всё таки как при дешифрации команд с 020 по 037 получаются начальные адреса микрокода? Кстати, эти команды работают только в HALT-режиме, потому должно быть условие при дешифрации - в TRAP10 или на исполнение.

  5. #1405

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

    По умолчанию

    И дешифрация идет совершенно четкая, а в микрокоманде, где CODE030 должна быть не перепутана с остальными из диапазона 00020..00030, она дешифруется по маске ....0.....011000.
    Как видно, это покрывает весь диапазон от 00 до 77, и путаницы частичной дешифрации тут быть не может.

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

    Цитата Сообщение от Alex_K Посмотреть сообщение
    И всё таки как при дешифрации команд с 020 по 037 получаются начальные адреса микрокода? Кстати, эти команды работают только в HALT-режиме, потому должно быть условие при дешифрации - в TRAP10 или на исполнение.
    Сначала преддекодером выделяется группа особых команд:

    Код:
    		       000101   00                  FIS, CLx, SEx, EMT, TRAP
    		       000101   10		    MARK         					    
             	       000101   11		    HALT, WAIT, RTI, BPT, IOT, RESET, RTT, START, STEP, RSEL, MFUS, RCPC, RCPS, CODE30, MTUS, WCPC, WCPS,
    Им задается стартовый адрес микрокоманды 0x05:

    А в микрокоманде 0x05 они уже сортируются, и каждая идет своим путем:

    Код:
    NA: 0x05										[0] HALT, WAIT, RTI, BPT, IOT, RESET, RTT, START, STEP,
    											    RSEL, MFUS, RCPC, RCPS, CODE30, MTUS, WCPC, WCPS,
    											    CLx, SEx, MARK, FIS, EMT, TRAP
    
    
    						
     46: ....0.....01.... 111010 .0. ...    ...11. ..1.......1..................11		USER: RSEL, MFUS, RCPC, RCPS, CODE030, MTUS, WCPC, WCPS
     57: ....0.....001... 111010 .0. ...    ...11. ..1.......1..................11		USER: START, STEP
     77: ....0...0..10000 111010 .1. ...    1..... ..1...1.11........1.11.1.11..1.		HALT: RSEL (IO_SEL, IO_RD, IO_IN)
    112: ....0...0..10001 111010 .1. ...    1..... ..1.....11...1..1111..11.1..11.		HALT: MFUS (IO_ALT, IO_RD, IO_IN)
    136: ....0.....001... 111010 .1. ...    1..... ..1...............11111111...1.		HALT: START, STEP
     45: ....0.....011000 111010 .1. ...    1..... ..1.................1.1......1.		HALT: CODE030
     											X=R0, Y=0, R0=XQ=Y=0
    100: ....0.....011001 111010 .1. ...    1..... ..1....1.1...1...111..11.1.111.		HALT: MTUS (IO_ALT, IO_WR)
     13: ....0.....01101. 111010 .1. ...    ...... .1...........1..1..............		HALT: WCPC
      9: ....0.....0111.. 111010 .1. ...    ...... .1...........1..1..............		HALT: WCPS
    
    162: ....0...0..1.01. 1110.0 ... ...    ...11. ..................11111......1.		RCPC, WCPC
    129: ....0...0..1.1.. 1110.0 ... ...    ...11. ...................11.1......1.		RCPS, WCPS
    104: ....0.....000000 111010 ... ...    ...11. ..1..........1..............111		HALT
     66: ....0.....000001 111010 ... ...    ...11. ..1.............1.............1		WAIT
    113: ....0...0..00.10 111010 ... ...    1..... ..1...1.1....1..1111..1.11..11.		RTI, RTT (IO_RD, IO_IN)
     29: ....0.....000.11 111010 ... ...    ...11. ..1..........................11		BPT
     98: ....0.....000100 111010 ... ...    ...11. ..1........1.................11		IOT
     58: ....0.....0001.1 111010 ... ...    1...1. ..1..............1..........1.1		RESET
     
     36: ....0.....1..... 111010 ... ...    1..... .11...................1....1...		CLx, SEx
    106: ........1....... 11.0.0 ... ...    ...... ........................1....1.		CLx, SEx
    157: .....1.......... 111010 ... ...    11..1. .11..........1..111...1111.1.1.		MARK
     96: ......1......... 111010 ... ...    1..... ..1...1.11........1.11.1.11..1.		FIS (IO_SEL, IO_RD, IO_IN)
    151: 1............... 111010 ... ...    ...11. ..1.......11.................11		EMT, TRAP
     20: .....0.1........ 111010 ... ...    ...... ............11.................		TRAP
    
    											Следующий шаг: HALT: START, STEP, RSEL, MFUS, CODE030, MTUS - 0x27
    												       HALT: WCPS, WCPC, RCPS, RCPC - 0x01
    												       USER: RSEL, MFUS, RCPC, RCPS, CODE030, MTUS, WCPC, WCPS, START, STEP - 0x01	
    												       CLx, SEx, RTI, RTT, FIS - 0x27
    												       RESET - 0x25
    												       MARK - 0x35
    												       EMT, TRAP - 0x01
    - - - Добавлено - - -

    Цитата Сообщение от Alex_K Посмотреть сообщение
    Ну в общем мой алгоритм, выясненный методом научного тыка, оказался правильным:
    Это же сколько надо было потрудиться, чтобы выловить алгоритм работы этой команды методом нучного тыка)

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

    Alex_K(23.11.2020)

  6. #1406

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

    По умолчанию

    Цитата Сообщение от Titus Посмотреть сообщение
    А в микрокоманде 0x05 они уже сортируются, и каждая идет своим путем:
    Идёт на адрес 45, а в описании выше всё начинается с 05, там же и очистка R0.

  7. #1407

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

    По умолчанию

    Цитата Сообщение от Alex_K Посмотреть сообщение
    Идёт на адрес 45, а в описании выше всё начинается с 05, там же и очистка R0.
    Не совсем понял вопрос.
    Первый шаг с адресом 0x05. На нем сортируются инструкции, выделяется CODE030 и для нее выполняется R0=0. Затем идет на шаг 0x27.
    На шаге 0x27 опять идет сортировка, выделение CODE030, и для нее выполняется ACC.B=R2. И идет на шаг 0x35.
    Ну и так далее.

  8. #1408

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

    По умолчанию

    Цитата Сообщение от Titus Посмотреть сообщение
    Не совсем понял вопрос.
    Первый шаг с адресом 0x05. На нем сортируются инструкции, выделяется CODE030 и для нее выполняется R0=0. Затем идет на шаг 0x27.
    На шаге 0x27 опять идет сортировка, выделение CODE030, и для нее выполняется ACC.B=R2. И идет на шаг 0x35.
    Ну и так далее.
    Код:
    NA: 0x05                                        [0] HALT, WAIT, RTI, BPT, IOT, RESET, RTT, START, STEP,
                                                    RSEL, MFUS, RCPC, RCPS, CODE30, MTUS, WCPC, WCPS,
                                                    CLx, SEx, MARK, FIS, EMT, TRAP
    
     45: ....0.....011000 111010 .1. ...    1..... ..1.................1.1......1.        HALT: CODE030
                                                 X=R0, Y=0, R0=XQ=Y=0

  9. #1409

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

    По умолчанию

    45 - это не шаг, это номер записи в PLM. От 0 до 199.
    В каждой команде таких записей может быть несколько. Из них выбираются те, что совпадают с заданными условиями - маска кода инструкции и много дополнительных условий, включая режим HALT/USER.

  10. #1410

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

    По умолчанию

    Цитата Сообщение от Titus Посмотреть сообщение
    Это же сколько надо было потрудиться, чтобы выловить алгоритм работы этой команды методом нучного тыка)
    Выловил я эту команду давно. Выловил в пультовом отладчике при нулевых регистрах. Понятное дело, что при нулевых регистрах получалось значение 0200. И я даже был уверен, что это значение PSW для старта. Ну типа того, что по коду 020 получаем 0160000, это стартовый вектор. Ну и по 030 получается начальное значение PSW при включении питания до чтения стартового вектора. Сомнения были в том, почему не установлен бит H. Да и заметил, что после исполнения 030 меняется PSW, что очень меня смутило. Несколько лет я этой проблемой не занимался. Ну а потом как-то решил поисполнять эту команду с различными начальными значениями регистров. Ну тут и понеслось, а когда заметил, что ещё влияние оказывает бит C в PSW, то вообще весело стало.

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

    Цитата Сообщение от Titus Посмотреть сообщение
    Первый шаг с адресом 0x05. На нем сортируются инструкции, выделяется CODE030 и для нее выполняется R0=0.
    R0 очищается только для 030?

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

    Цитата Сообщение от Titus Посмотреть сообщение
    Это же сколько надо было потрудиться, чтобы выловить алгоритм работы этой команды методом нучного тыка)
    Titus, мой труд это ничто, по сравнению с вашими и Vslav-а. Так ещё вам ОГРОМНОЕ СПАСИБО.

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

    hobot(24.11.2020)

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

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

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

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

Ваши права

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