Возможно, что длинная адресация операнда-источника в комбинации с нерегистровой адресацией операнда-приемника... ЗАМЕНЯЕТ цикл W на цикл RMW) Вот вам новая отгадка)
Нет, не заменяет. Проверил на стыке С2, послал через гипертерминал символ на УКНЦ, в порту 0176570 установился флаг готовности. В пультовом отладчике выполнил команду MOV @(R2)+,@R0, при R2=0 и R0=176572. Если бы на dst выполнялся бы цикл RMW, то флаг готовности был бы сброшен, а он остался.
Универсальный тест: OP1.SAV позволяет определить число тактов, затрачиваемых любым процессором архитектуры PDP-11 на выполнение однооперандных команд с различными способами адресации.
При первом запуске теста нужно ввести правильное значение тактовой частоты тестируемого процессора в килогерцах.
...
УКНЦ КВАНТ литеры 7 с 1515ХМ1-031:
Скрытый текст
P.S. Извиняюсь, что не лог с NC11SJ, постараюсь сделать попозже.
Там Inc R0 быстрее 13 тактов сработал - может, тест ещё разок для проверки запустить..
На втором запуске 13 тактов, но УКНЦ стоит включенной уже несколько часов, так что горячая. А вообще, правильно Titus сказал, что результаты должны быть с дробной частью. В магистрали ЦП процессор несинхронен с памятью, да и выборка из памяти делается с разрешения видеоконтроллера. Выборка слова, в зависимости от того, когда поступил запрос на чтение, может варьироваться от 320 нс до 960 нс, вот такая вот арифметика.
Для качественного исследования ( качественного не в смысле качества, а в смысле НЕ-количественного ) от дробей только вред.
Сейчас разницу в десятки тактов надо находить и объяснять. Когда модель таймингов такого порядка будет полностью адекватна оригиналу - придёт время дробей.
---------- Post added at 23:18 ---------- Previous post was at 23:16 ----------
Для дробной части таймингов требуется специальное статистическое исследование. На этапе качественного исследования дроби только отвлекают.
Универсальный тест: MOVPC.SAV позволяет определить число тактов, затрачиваемых любым процессором архитектуры PDP-11 на выполнение команды MOV с различными способами адресации относительно PC.
При первом запуске теста нужно ввести правильное значение тактовой частоты тестируемого процессора в килогерцах.
Тест работает не быстро. Если (например) команда выполняется за 50 тактов - результата определния её продолжительности приходится ждать 10 сек.
...
На 1801ВМ2 весьма интересные результаты, пришлось даже УКНЦ поменять, чтобы проверить. Тестировался УКНЦ КВАНТ литеры 7 с 1515ХМ2-001. Смотрите и удивляйтесь:
Скрытый текст
https://thumb.cloud.mail.ru/weblink/...ER/MOVPC01.jpg
https://thumb.cloud.mail.ru/weblink/...EK/MOVPC02.jpg
https://thumb.cloud.mail.ru/weblink/...dH/MOVPC03.jpg
https://thumb.cloud.mail.ru/weblink/...2d/MOVPC04.jpg
https://thumb.cloud.mail.ru/weblink/...tz/MOVPC05.jpg
https://thumb.cloud.mail.ru/weblink/...tv/MOVPC06.jpg
https://thumb.cloud.mail.ru/weblink/...3m/MOVPC07.jpg
https://thumb.cloud.mail.ru/weblink/...S8/MOVPC08.jpg
https://thumb.cloud.mail.ru/weblink/...AD/MOVPC09.jpg
https://thumb.cloud.mail.ru/weblink/...Bd/MOVPC10.jpg
https://thumb.cloud.mail.ru/weblink/...1d/MOVPC11.jpg
https://thumb.cloud.mail.ru/weblink/...vb/MOVPC12.jpg
[свернуть]
Всё чудесатее и чудесатее..
Код там выполняется такой:
Код:010400 [000000]: MOV (PC), R0 ; 010402:011700 -> R0
010402 [000000]: MOV (PC), R0 ; 010404:011700 -> R0
010404 [000000]: MOV (PC), R0 ; 010406:011700 -> R0
010406 [000000]: MOV (PC), R0 ; 010410:011700 -> R0
010410 [000000]: MOV (PC), R0 ; 010412:011700 -> R0
010412 [000000]: MOV (PC), R0 ; 010414:011700 -> R0
010414 [000000]: MOV (PC), R0 ; 010416:011700 -> R0
010416 [000000]: MOV (PC), R0 ; 010420:000240 -> R0
010420 [000000]: NOP
010422 [000000]: NOP
010424 [000000]: NOP
010426 [000000]: DEC R5 ; R5 :002044
010430 [000000]: BEQ 010444
Код:010400 [000010]: MOVB (PC), R0 ; 010402: 300 -> R0
010402 [000010]: MOVB (PC), R0 ; 010404: 300 -> R0
010404 [000010]: MOVB (PC), R0 ; 010406: 300 -> R0
010406 [000010]: MOVB (PC), R0 ; 010410: 300 -> R0
010410 [000010]: MOVB (PC), R0 ; 010412: 300 -> R0
010412 [000010]: MOVB (PC), R0 ; 010414: 300 -> R0
010414 [000010]: MOVB (PC), R0 ; 010416: 300 -> R0
010416 [000010]: MOVB (PC), R0 ; 010420: 240 -> R0
010420 [000010]: NOP
010422 [000010]: NOP
010424 [000010]: NOP
010426 [000010]: DEC R5 ; R5 :002044
010430 [000000]: BEQ 010444
Чета все у вас плавает, господа)
Во-во!!! Сейчас загрузился на КВАНТ с 1515ХМ1-031 c IDE-Flash, так на MOV @PC,R0 все время TRAP4 по адресу 010416.
Сейчас загружусь с дисковода, там система немного другая.
---------- Post added at 00:21 ---------- Previous post was at 00:19 ----------
Titus, у Вас нарушение предвыборки тоже съедало неизвестно куда 52 такта, так что ждем тестов от Вас с большим нетерпением.
Я бы ещё понял, если бы глючила команда MovB (PC)+,(PC)
Она три завершающих NOPа плавно превращает вот в что:
Код:014322 [000010]: MOVB #-27185., (PC) ; 014324: 317 -> 014326
014326 [000010]: MOVB #-27185., (PC) ; 014330: 317 -> 014332
014332 [000010]: MOVB #-27185., (PC) ; 014334: 317 -> 014336
014336 [000010]: MOVB #-27185., (PC) ; 014340: 317 -> 014342
014342 [000010]: SWAB (PC) ; 014344:000240
014344 [000004]: CMPB R0, R0 ;
014346 [000004]: NOP
014350 [000004]: DEC R5 ; R5 :002044
014352 [000000]: BEQ 014366
Ну вот собственно ошибка на другой системе:
Скрытый текст
Хотя команда и MOV PC,@R0, но в R0 пишется байт.
На третьем проходе вылетела ( в начале первого прохода в R5 = 8013/5 = 1602 = 03102 ).
---------- Post added at 00:55 ---------- Previous post was at 00:03 ----------
Если блок питания во всех случаях был один и тот же - проблема может быть в нём.
Мне один раз довелось наблюдать, как после подключения второго блока дисководов к ДВК - у 1801ВМ2 начались вылеты по Trap_To_4 в ядре RMON RT-11.
Если бы проблема была в блоке питания, то я бы наверное и загрузится бы не смог. А так проблема возникает в одном месте, да и к тому же на одной из УКНЦ тест проходил, но показания слишком плавали. Другие тесты проходят без проблем. Грузился я с разных устройств (дисковод и IDE-Flash).
Надо, чтобы этот тест прогнали бы на другой УКНЦ несколько раз. Вот тогда можно делать кое-какие выводы.
Играет роль скорость реакции блока питания на изменение нагрузки. Ведь ошибки чаще всего возникали при смене типа кода, а значит - и профиля потребления.
Обычный код имеет усреднённый профиль потребления, поэтому загрузка операционной системы и т.п. проходит без проблем. Но когда после тысячи команд MOV (PC),R0 подряд - вдруг появляется NOP - профиль потребления резко изменяется.
Когда к ДВК подключили второй блок дисководов - она тоже начала вылетать только в одной программе и только на одной и той же команде внутри RMON ( неделю без толку отлаживал, пока второй дисковод не отключили и всё не пришло в норму ).
Не такая уж и ерунда - не знаю как местная ошибка и случай из практики Patrona,
а вот на PC во времена аникуйства я сталкивался с таким. Замена БП на новый (хотя и старый вроде бы рабочий)
решала проблему (разную). Но тут это снова оффтоп получается )
---------- Post added at 05:04 ---------- Previous post was at 05:01 ----------
И почему на форуме нельзя самому себе сказать спасибо? )
Не буду настаивать на тонкостях формулировки диагноза, но то, что вылет/не вылет 1801ВМ2 по Trap_To_4 при выполнении обычных ( не предполагающих возможности зависания шины ) последовательностей команд связан именно с характеристиками питания - достоверный факт.
Нужно прогнать тест с разными блоками питания и сравнить результаты.
---------- Post added at 12:12 ---------- Previous post was at 12:03 ----------
Возможно, главную роль играет организация цепей питания на плате - тогда даже с идеальным блоком питания тест будет глючить.
В этом случае нужно подобрать максимально качественный блок питания и сравнивать в тесте разные платы с 1801ВМ2 ( от УКНЦ, ДВК и т.д. ).
Во-первых не MOV (PC)+,R0, а MOV @PC,R0. А во-вторых уникальность ситуации в том, что значение источника уже считалось по предвыборке, да и предвыборка не нарушается.
По поводу блока питания - используется AT-блок, модели HIPRO HP-200PGN. Проблемы есть на двух УКНЦ, но адреса разные.
Titus, прогоните этот тест на своих.