Микропрограммы для SOB, RTI и RTT:
SOB:
Код:
//======================================================================
//
// Команда SOB Rn,mm (077xxx)
//
//======================================================================
0x0D: Rn=Rn-1 GET_STATE Z=0 // Если Z=0, то BRA=1, иначе BRA=0
//----------------------------------------------------------------------
0x27: if (BRA=1) // Если BRA=1 (в прошлой команде Z=0)
PC1=PC2=PC1-((IR&0x003F)*2) PLI_REQ // Изменить адрес PC1, запросить проверку запросов на прерывание
GOTO 0x21 // Перейти на команду выборки следующей некэшированной инструкции
else // Иначе
ACC=ACC PLI_REQ // Запросить проверку запросов на прерывание
GOTO 0x01 // Перейти на команду выборки следующей инструкции
RTI, RTT:
Код:
//======================================================================
//
// Команды RTI, RTT (000002, 000006)
//
//======================================================================
0x05: (RTT) // Для команды RTT уснанавливается флаг DC_RTT (уточнить действие)
RA=R6 IO_RD, IO_IN // Инициировать цикл чтения шины в регистр BRD
R6=R6+2
//---------------------------------------------------------------------- (обработка частично совмещена с RSEL, MFUS)
0x27: WAIT_BRD // Ожидание готовности чтения BRD
PC1=PC2=BRD GET_STATE (XQ15&XQ14&XQ13) // Если PC2&0xE000 = 0xE000, то BRA=1, иначе BRA=0
//----------------------------------------------------------------------
0x19: if (BRA=1) // Если BRA=1 (PC2>=0xE000)
RA=R6 IO_RD, IO_IN // Инициировать цикл чтения шины в регистр BRD
R6=R6+2
GOTO 0x09
else // Иначе
RA=R6 IO_RD, IO_IN // Инициировать цикл чтения шины в регистр BRD
R6=R6+2
GOTO 0x31
//---------------------------------------------------------------------- (для PC1>=0xE000)
0x09: WAIT_BRD // Ожидание готовности чтения BRD
PSW=BRD
GOTO 0x23
//---------------------------------------------------------------------- (для PC1<0xE000)
0x31: WAIT_BRD // Ожидание готовности чтения BRD
PSW.B=BRD
//---------------------------------------------------------------------- (обработка совмещена со START)
0x23: ACC=ACC // Зачем? Какие-то процессы должны завершится?
//---------------------------------------------------------------------- (завершение обработки определенной группы команд)
0x25: ACC=ACC PLI_REQ // Запросить проверку запросов на прерывание
GOTO 0x21 // Перейти на команду выборки следующей некэшированной инструкции