И еще на счет таймингов.
Когда-то, когда только писал процессор ВМ2, раскладывал для себя теоретически, как должен работать процессор, чтобы тайминги совпали с теми, что в доке. Получились примерно такие записи. Разложилось весьма хорошо, хотя и не факт, что достоверно:
Код:
Timing Legend:
Число циклов обращения к памяти может быть только четным, а также
число циклов выполнение команды может быть только четным, поскольку
синхронизируется относительно CLKO (CLKI/2).
Запись для времени < 1T [1..2T]:
12/15 [12/15] тактов:
4 - выдача адреса на шину
1/3 - подготовка данных (зависит от метода адресации)
5 [6] - удержание данных на шине
1 - особождение шины и снятие запросов
Чтение для времени < 1T [1..2T]:
8 [10] тактов:
4 - выдача адреса на шину
3 [5] - чтение данных
1 - особождение шины и снятие запросов
Чтение-модификация-запись для времени < 1T [1..2T]:
18 [20?] тактов:
4 - выдача адреса на шину
3 [5] - чтение данных
4 - калькуляция и выдача данных шину (может быть больше, если это необходимо)
5 [6] - удержание данных на шине
1 - особождение шины и снятие запросов
Безадресное чтение:
4 такта?
Разложение времени выполнение команд на примерах, взятых из описания 1801ВМ2,
для времени памяти < 1T [1..2T]
ALU/MOV rn,rn - 8 [10]
8 [10] - чтение из памяти следующего слова команды в буфер CRB
<= 8 - выполнение фунцкии ALU (целиком перекрывается)
CLR (Rn) - 20 [22]
8 [10] - чтение из памяти следующего слова команды в буфер CRB
<=8 - подготовка адресного указателя (и данных?) для записи (целиком перекрывается)
12 - запись результата в память
INC (Rn) - 26 [28]
8 [10] - чтение из памяти следующего слова команды в буфер CRB
<=8 - подготовка адресного указателя (целиком перекрывается)
18 [18?] - цикл чтениь-модификация-запись
<=4 - ALU (целиком перекрывается)
MOV Rn,(Rn) - 20 [22]
8 [10] - чтение из памяти следующего слова команды в буфер CRB
<=8 - подготовка адресного указателя и данных для записи (целиком перекрывается)
12 - запись результата в память
MOV (Rn),(Rn) - 34 [38]
8 [10] - чтение из памяти следующего слова команды в буфер CRB
<=8 - подготовка адресного указателя и данных для чтения (целиком перекрывается)
8 [10] - чтение данных из памяти
6? - подготовка адресного указателя (и данных?) для записи
12 - запись результата в память
OR (Rn),(Rn) - 38 [42]
8 [10] - чтение из памяти следующего слова команды в буфер CRB
<=8 - подготовка адресного указателя и данных для чтения (целиком перекрывается)
8 [10] - чтение данных из памяти
4? - подготовка адресного указателя для записи
18 [18?] - цикл чтениь-модификация-запись
<=4 - ALU (целиком перекрывается)
mov #nnnn,r0 - 20 [22?]
8 [10] - чтение из памяти следующего слова команды в буфер DRB
4? - ALU? или, что вероятнее подготовка пререкэширования
8 [10?] - чтение из памяти следующего слова команды в буфер CRB