Если на этих командах процессор не перпрыгивает через команду вперед, то результаты должны быть корректны.
Во втором случае очевидно, что команда MOV (PC),(PC)+ именно перепрыгивает следующую и поэтому число "пройденных" слов нужно делить на 2.
...
А в первом случае - просто интересно, как получается такая большая разница в результатах тестов.
Ведь линейный движок тестирования продолжительности команд элементарно прост - после первого прерывания начинает выполняться последовательность тестируемых команд, а после второго прерывания - вычисляется разница адреса старта последовательности и адреса входа во второе прерывание.
Скрытый текст
Увы, циклический тест с командами MOV (PC), R0 и MOVB (PC), R0 не дружит.
Весьма похоже, что тест TSSPD даёт ошибочные результаты в обоих обсуждаемых случаях.Код:OpBuf:
.BLKW 2048 ;Буфер для тестируемых команд
OpBufEnd:
INC R4 ;Увеличиваем счетчик циклов
JMP (R5) ;Бесконечный цикл --> OpBufLoop
MovPC2_v1.1:Скрытый текст
MovPC2_v1.2:Скрытый текст
---------- Post added at 20:41 ---------- Previous post was at 20:38 ----------
В этом случае, после MOV @PC,R0, INC R4 выполниться два раза.
Для комплексной проверки глюков команды MOV (PC), R0, наблюдавшихся в тесте MOVPC.SAV - готова специальная версия этого теста: MovPCx, перехватывающая Trap_To_4, ведущая два счётчика циклов ( в начале и конце тестовой последовательности ) и перехватывающая плохие переходы:
При первом запуске теста можно ввести значение тактовой частоты тестируемого процессора в килогерцах, а также задать значение PSW при котором будет выполняться тест ( допустимы значения 0 и 340, любое другое значение превратится в 340 ).Код:Foot0:
Nop
Nop
Nop
Dec R5
BEq 1$
Jmp @#LoopStart
.Word Bad.Jmp
1$:
Mov #R.T.I, @#100
Inc R4
MTPS #0
Return
Foot1:
...
С PSW=0:
Скрытый текст
С PSW=340:
Скрытый текст
---------- Post added at 22:11 ---------- Previous post was at 22:09 ----------
По поводу TRAP4, адрес прерывания в стеке может быть неверный, обычно в таких случаях он увеличен на 2.
Код в том месте такой:
Код:011220 [000000]: MOV (PC), R0 ; 011222:011700 -> R0
011222 [000000]: MOV (PC), R0 ; 011224:011700 -> R0
011224 [000000]: MOV (PC), R0 ; 011226:011700 -> R0
011226 [000000]: MOV (PC), R0 ; 011230:000240 -> R0
011230 [000000]: NOP
011232 [000000]: NOP
011234 [000000]: NOP
011236 [000000]: DEC R5 ;
011240 [000000]: BEQ 011250
011242 [000000]: JMP @#005306
Код:Foot0:
Nop
Nop
Nop
Dec R5
BEq 1$
Jmp @#LoopStart
.Word Bad.Jmp
1$:
Mov #R.T.I, @#100
Inc R4
MTPS #0
Return
Foot1:
---------- Post added at 21:31 ---------- Previous post was at 21:24 ----------
А на другой машине, помнится, пока та была холодная - тест один раз не просто без вылета, а даже и почти без глюков прошёл..
---------- Post added at 21:33 ---------- Previous post was at 21:31 ----------
По счётчикам команда BEQ вылететь в Trap_To_4 вряд ли может - слишком далеко до ближайшей незанятой памяти.
Другая УКНЦ.
PSW=0:
Скрытый текст
PSW=340: