Первым делом, небольшая поправка - в последнем примере выполнялся код 010017, т.е. не MOVB R0, (PC), а MOV R0, (PC).
...
То, что нарушение предвыборки регистрируется только для чётных адресов - это известная особенность 1801ВМ2.
...
Прояснилась ситуация относительно огромных задержек при перезаписи следующей команды.
Вот как (на мой взгляд) работает процессор 1801ВМ2 при выполнении команд MOV R0, (R1)+ и MOV R0, (PC), когда обе эти команды пишут в следующее слово:
MOV R0, (R1)+
Код:Загрузка Содержимое Раскодирование Выполнение Завершение
1. UR 001010 I 010021 06/08 001010 .......... ..........
2. UR 001012 I 000000 06/08 001012 .......... ..........
3. UW 001012 O 000240 12/14 .............. 001010 ..........
4. UR 001014 I 000000 06/22 001014 .......... 001010
5. UR 001012 I 000240 06/08 001012 .......... ..........
MOV R0, (PC)
Теперь понятно, что имели в виду разработчики, когда утверждали, что в момент завершения текущей команды - уже раскодирована следующая и началась предвыборка ещё одной.Код:Загрузка Содержимое Раскодирование Выполнение Завершение
1. UR 001004 I 010017 06/08 001004 .......... ..........
2. UR 001006 I 123456 06/08 001006 .......... ..........
3. UW 001006 O 010017 12/14 .............. 001004 ..........
4. UR 001006 I 010017 06/08 001006 .......... 001004
Т.к. факт записи в следующее слово командой MOV R0, (R1)+ становится известен только на этапе завершения - "пролетают" две предвыборки и процессору приходится выполнять микроблок JMP для перехода на изменённую команду.
Для команды MOV R0, (PC) факт записи в следующее слово становится известен на этапе раскодирования, поэтому "пролетает" только одна предвыборка и выполнение микроблока JMP не требуется.
...
Т.к. предвыборка следующего слова происходит одновременно с раскодированием текущего - команды BR и JMP (R0) должны сначала читать следующее слово и лишь затем выполнять переход - интересно в этом убедиться.
---------- Post added at 10:36 ---------- Previous post was at 10:25 ----------
Интересно, как работают команды MOV (SP)+,(SP)+ и MOVB (SP)+,(SP)+, когда они пишут не в область кода, а в обычный стек. Наверняка, это можно понять и из предыдущих примеров, но я слегка запутался.
---------- Post added at 11:35 ---------- Previous post was at 10:36 ----------
При нулевой задержке RPLY - блоки команд NOP и MOV R0,R0 выполняются (насколько я понял) так:
NOP | NOP | NOP | HALT | HALT
MOV R0, R0 | MOV R0, R0 | MOV R0, R0 | HALT | HALTКод:UR 001000 I 000240 06/08
UR 001002 I 000240 06/12
UR 001004 I 000240 06/12
UR 001006 I 000000 06/12
UR 001010 I 000000 06/08
Интересно, как они будут выполняться при задержке RPLY в 1, 2, 4 и 6 тактов..Код:UR 001000 I 010000 06/08
UR 001002 I 010000 06/08
UR 001004 I 010000 06/08
UR 001006 I 000000 06/08
UR 001010 I 000000 06/08
При нулевой задержке RPLY команда NOP выполняется за 12 тактов, а MOV R0,R0 - за 8 тактов.
Не исключено, что при задержке RPLY в 6 тактов - обе эти команды будут выполняться за 14 тактов.

