Alex_K(06.12.2020)
Двухоперандные команды с регистром источником формата ALU Rs,dd.
В эту же группу входят команды расширенной арифметики формата EALU Rd,ss.
MOV(B), BIS(B), BIC(B), ADD, SUB, CMP(B), BIT(B), XOR,
MUL, DIV, ASH, ASHC:
Код://====================================================================== // // Oперации с двумя операндами вида Rs,nn // // MOV(B), BIS(B), BIC(B), ADD, SUB, CMP(B), BIT(B), // XOR, MUL, DIV, ASH, ASHC // // step=1 для байтовых команд, если dd<>R6 и dd<>R7 // step=2 для всх остальных команд // // Циклы шины IO_X001 для: // // CMP(B), BIT(B), MUL, DIV, ASH, ASHC // Read (IO_RD, IO_IN) - Инициировать цикл чтения шины в регистр BRD // // MOV: // Write (IO_WR) - Инициировать цикл записи BRD на шину // // MOVB, BIS(B), BIC(B), ADD, SUB, XOR: // R-M-W (IO_RD, IO_WR, IO_IN) - Инициировать цикл чтения шины в регистр BRD // с последующим циклом записи по готовности BRD // //====================================================================== 0x2B: RS=Rs //---------------------------------------------------------------------- 0x17: if (Rn) RA=Rn IO_X001 // Инициировать цикл шины Rn=Rn GOTO 0x33 if (Rn)+ and (RI0=0) // Если Rn<>R7 RA=Rn IO_X001 // Инициировать цикл шины Rn=Rn+step GOTO 0x33 if (Rn)+ and (RI0=1) and (IX0=1) // Если Rn=R7, и работа со словом PC1=PC2 DISABLE_CACHE // Запретить кэш и включить режим использования BIR как данных // Фактически PC1=PC1+2 BRD=BIR IO_X001 // Подготовить, но не начинать цикл шины GOTO 0x33 if (Rn)+ and (RI0=1) and (IX0=0) // Если Rn=R7, и работа с байтом PC1=PC2 DISABLE_CACHE // Запретить кэш и включить режим использования BIR как данных // Фактически PC1=PC1+2 RA=PC1-2 IO_X001 // Инициировать цикл шины GOTO 0x33 if -(Rn) Rn=Rn-step RA=Rn IO_X001 // Инициировать цикл шины GOTO 0x33 if @-(Rn) Rn=Rn-2 RA=Rn IO_RD, IO_IN // Инициировать цикл чтения шины в регистр BRD GOTO 0x22 if @(Rn)+ and (RI0=0) // Если Rn<>R7 Rn=Rn+2 RA=Rn IO_RD, IO_IN // Инициировать цикл чтения шины в регистр BRD GOTO 0x22 if @(Rn)+ and (RI0=1) // Если Rn=R7 PC1=PC2 DISABLE_CACHE // Запретить кэш и включить режим использования BIR как данных // Фактически PC1=PC1+2 RA=BIR IO_X001 // Инициировать цикл шины GOTO 0x33 if X(Rn) PC1=PC2 DISABLE_CACHE // Запретить кэш и включить режим использования BIR как данных RA=Rn+BIR IO_X001 // Инициировать цикл шины GOTO 0x33 if @X(Rn) PC1=PC2 DISABLE_CACHE // Запретить кэш и включить режим использования BIR как данных RA=Rn+BIR IO_RD, IO_IN // Инициировать цикл чтения шины в регистр BRD //---------------------------------------------------------------------- Прочитана ячейка с адресом операнда 0x22: PC1=PC2 DISABLE_CACHE // Запретить кэш и включить режим использования BIR как данных WAIT_BRD // Ожидание готовности чтения BRD RA=BRD IO_X001 // Инициировать цикл шины ENABLE_CACHE // Разрешить кэш //---------------------------------------------------------------------- Операнд прочитан из памяти, если цикл шины Read или RMW 0x33: WAIT_BRD // Ожидание готовности чтения BRD if MUL,DIV,ASH(C) ACC=BRD if MUL GOTO 0x18 // Если MUL, то перейти на шаг 0x18 микропрограммы выполнения умножения if DIV GOTO 0x1A // Если DIV, то перейти на шаг 0x1A микропрограммы выполнения деления if ASH(C) GOTO 0x1A // Если ASH(C), то перейти на шаг 0x1A микропрограммы выполнения циклического сдвига ALU RS,BRD // Операции ALU из шага 0x3B, в качестве приемника BRD, в качестве источника RS // Если используется цикл записи Write или RMW, то по записи в BRD, продолжается цикл записи ENABLE_CACHE // Разрешить кэш PLI_REQ // Запросить проверку запросов на прерывание if X(Rn) or @X(Rn) or (Rn=R7) // Если использовали адресацию по R7, то GOTO 0x21 // Перейти на команду выборки следующей некэшированной инструкции else // Иначе GOTO 0x01 // Перейти на команду выборки следующей инструкции
Кстати, а слабо исходники микрокода 1801 сгенерить? А потом собрать своим метаассемблером?
Меня это интересует давно, я не понимал как это сделано. Сейчас, по итогам М4, у меня соображения появились, что микрокод для серии 1801 писался с гораздо более широким выходным словом, на которое навесили нужные мультиплексоры и согласователи для стыковки с АЛУ и потом это все оптимизировали в матрицу машинным способом. Потому что разобрать и проанализировать матрицу - это еще понять можно, но синтез руками - сделать сложно. Так что вероятность процентов 90 что так и было. На момент разработки 1801 метассмеблеры уже были, секционники вовсю проектировались, оптимизировать тоже понятно как, так что это именно оно - недостающее звено. Надо Отрохова и Подорова поспрашивать, как оно реально было.
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)