Кому? Работающей и зависшей в Казахстане ДВК? :)
- - - Добавлено - - -
11/83:Код:.RU TEST
BIS #20000,@#177776 ;PSW=160000
MFPI R0 ;R0=001110, @SP=001110
MFPI SP ;@SP=001000
BIC #20000,@#177776 ;
MFPI SP ;@SP=157010
.
.
Новый тест: PSW6.SAV - проверяет обращение к неправильной моде без мапинга.
Запускать на машинах с диспетчером памяти. На эмулируемой ДВК-3 результат такой :
Код:.RU PSW6
PSW test #6
001150/ MOV #000001, @#177572
001156/ MOV #020340, @#177776
001164/ MFPI R0
001224/ MOV #000001, @#177572
001232/ MOV #020340, @#177776
001240/ MFPI SP
001300/ MOV #000001, @#177572
001306/ MOV #020340, @#177776
001314/ MFPI (SP)
>>> Trap to 250 <<< ; SR0/100101 ; SR2/001314
Program completed.
.
- - - Добавлено - - -Код:.RU PSW6
PSW test #6
001150/ MOV #000001, @#177572
001156/ MOV #020340, @#177776
001164/ MFPI R0
001224/ MOV #000001, @#177572
001232/ MOV #020340, @#177776
001240/ MFPI SP
001300/ MOV #000001, @#177572
001306/ MOV #020340, @#177776
001314/ MFPI (SP)
>>> Trap to 250 <<< ; SR0/140101 ; SR2/001314
Program completed.
.
Это @SP где SP от CM, а @ от PM...
Да. ДВК/PDP не умеют зависать, они только трапятся. Единственная "ловушка" это команда WAIT. Из неё выход только по командам RTI/RTT.
...
Тест на ВМ3
Код:PSW test #6
001150/ MOV #000001, @#177572
001156/ MOV #020340, @#177776
001164/ MFPI R0
001224/ MOV #000001, @#177572
001232/ MOV #020340, @#177776
001240/ MFPI SP
001300/ MOV #000001, @#177572
001306/ MOV #020340, @#177776
001314/ MFPI (SP)
>>> Trap to 250 <<< ; SR0/100101 ; SR2/001314
Program completed.
Неправда. У большинства PDP-11 есть такое понятие как sunset loop - состояние из которого нельзя выйти никак кроме останова с консоли. К примеру в @#16 установлен бит T, в @#242 прописан приоритет ниже чем запрашивается в @#17777772 итд...
У ДВК - да - чаще выпадание в пульт.
Неверны оба утверждения. На сей раз и для ДВК. Выход из WAIT - только прерывание (ну это как бы очевидно), RTI - косвено и необязательно. А завесить легко другим способом - например записать в PSW 340 и наступить на код 777...
- - - Добавлено - - -
Или ближе к рассматриваемое сейчас теме: @#250/252 ссылается на неотмапленную страницу...
- - - Добавлено - - -
Чтобы не говорить только о PDP-11, назовем также абсолютно все СМ (те что PDP-11) и Э100/25...
Перкключателем ENABLE/HALT пульта или BREAK с консольного терминала для Q-Bus машин где такая возможность есть. Как уже написал, речь также о советских машинах...
Именно так. Соответственно если приоритет процессора в 7 установлен (или просто установлен для ВМ2 к примеру), то WAIT ли там, бесконечный цикл ли, а выйти нельзя никак кроме останова машины... Или более прозаично: @#14 ссылается на команду RTI которая устанавливает бит T программе куда возвращается и даже приоритета 7 не нужно (подразумеваем что @#16 выставляет приоритет)...
- - - Добавлено - - -
И на закуску способ завесить например из под SJ/SB/FB монитора (с оговорками): RESET, BR . :)
Всего же вариантов огромное количество - далеко не десятки...
.
Новый тест: T4REG4.SAV - проверяет автоинкремент регистра при зависании второго чтения косвенной адресации.
Запускать можно на любых машинах. На эмулируемой ДВК-3 результат такой :
Код:.RU T4REG4
Register Autoincrement TRAP4 test #4.
MOV #000000, R2
MOV #160020,(R2)
TST @(R2)+
>>> Trap to 004 <<< ; R2/000002
Program completed.
.
Ну логично - видимо раз сама по себе выборка с автоинкрементом проблем не представляет, то и вопроса нет, но мало ли - с учетом того же ВМ3 я алгоритм проверки дополнительных фич MMU делал исходя из возможности поменять значение бита, а не из возможности установить его в MMR3...
- - - Добавлено - - -
Но кое-где mode 3 всеже может представлять сложность... Хотя и тут все логично ибо от mode 2 танцует...
Код:Z 1 000000 010030 MOV R0,@(R0)+
Хм. Я где-то упустил этот тест, в теме не вижу...
- - - Добавлено - - -
Но пока подтверждает предположение о том, что видимо при MMU failure всегда автоинк(дек)ремент выполняется. Иначе зачем огород с MMR1 городить... Хотя впрочем функционал MMR1 не исключает совместимости в случае если автоинк(дек)ремента не произошло...
UPD: расмотрел внимательнее - и так и так... Выходной инфы мало - нужен MMR1
.
Новый тест: T4REG5.SAV - проверяет автоинкремент регистров в команде MTPI (R2)+ с неправильной предыдущей модой.
Запускать на машинах с диспетчером памяти.
- - - Добавлено - - -Код:.RU T4REG5
Register Autoincrement TRAP4 test #5.
MOV #000001, @#177572
MOV #020340, @#177776
MOV #000000, R2
MOV #066000, SP
CLR -(SP)
SP/065776
MTPI (R2)+
>>> Trap to 250 <<< ; SR0/100101
R2/000002
SP/066000
Program completed.
.
Добавил HALT чтобы посмотреть MMR1 - там как и положено 11026 (R2+=2, SP+=2).
Тест на ВМ3.
Код:.T4REG5
Register Autoincrement TRAP4 test #5.
MOV #000001, @#177572
MOV #020340, @#177776
MOV #000000, R2
MOV #066000, SP
CLR -(SP)
SP/065776
MTPI (R2)+
>>> Trap to 250 <<< ; SR0/100101
R2/000000
SP/066000
Program completed.
.
У меня 26 получается если заменить (R2)+ на (R2).
- - - Добавлено - - -
Ждем тестов с выводом MMR1 :)
Ну или как я написал сделать и вручную посмотреть.
- - - Добавлено - - -
И MMR2 до кучи (и адреса команды которая трапнулась)... А то было там среди списка глюков ВМ3 что-то по теме. На моем MMU тесте вроде не вылезало пока ни у кого.
Ну в тестах (коли они претендуют на универсальность) всеже стоит выводить...
Если не реализован - это по сути убивает базовый функционал MMU (который сам DEC впрочем даже в Ultrix наверное не использовал [про Ultrix - предположение]).
- - - Добавлено - - -
Посмотрел на ВМ3 - да, MMR1 просто нули. Тогда ошибка с MMR2 чисто символическая получается (впрочем с ней [как и со всеми остальными кроме битов в MMR3] пока столкнуться не удалось).
.
Новый тест: SR0.SAV - проверяет текущие значения SR0 и SR2 при выключенном и включённом MMU.
Запускать на машинах с диспетчером памяти.
- - - Добавлено - - -Код:.RU SR0
Live SR0 & SR2 test.
MOV #0177572, R2
MOV #0177576, R4
CLR (R2)
010000/ MOV (R2), R3 ; R3/000000
010002/ MOV (R4), R5 ; R5/010002
MOV #1,(R2)
010000/ MOV (R2), R3 ; R3/000017
010002/ MOV (R4), R5 ; R5/010002
Program completed.
.BO RT11ZM
RT-11ZM (S) V05.07
?ETM-I-Date & time - 6-FEB-2016 23:58:34
?ETM-I-Time server - 70-71-BC-50-EB-D0, OpenBSD 5.8 amd64
.RU D10:SR0
Live SR0 & SR2 test.
MOV #0177572, R2
MOV #0177576, R4
CLR (R2)
010000/ MOV (R2), R3 ; R3/000000
010002/ MOV (R4), R5 ; R5/010002
MOV #1,(R2)
010000/ MOV (R2), R3 ; R3/000017
010002/ MOV (R4), R5 ; R5/010002
Program completed.
020524
@
Еще мысль для теста на закуску:
тот же тест что что выше, только вместо #1 записать что-нибудь вроде #100001
- - - Добавлено - - -
Собственно вот на примере того же теста на 11/83:Код:.RU SR0
Live SR0 & SR2 test.
MOV #0177572, R2
MOV #0177576, R4
CLR (R2)
010000/ MOV (R2), R3 ; R3/000016
010002/ MOV (R4), R5 ; R5/010002
MOV #100001,(R2)
010000/ MOV (R2), R3 ; R3/100017
010002/ MOV (R4), R5 ; R5/001402
Program completed.
.
Интересно, можно ли при выключенном MMU увидеть в SR0 что-то кроме нуля ..
- - - Добавлено - - -
И кроме старших битов, которые и при выключенном MMU наверняка можно записать.
Тест на ВМ3.
Код:.SR0
Live SR0 & SR2 test.
MOV #0177572, R2
MOV #0177576, R4
CLR (R2)
010000/ MOV (R2), R3 ; R3/000000
010002/ MOV (R4), R5 ; R5/010004
MOV #1,(R2)
010000/ MOV (R2), R3 ; R3/000001
010002/ MOV (R4), R5 ; R5/010004
Program completed.
Биты 13-15 всегда по идее можно записать - они в принципе R/W, хотя как правило их выставляет сам MMU. Суть теста который я предлагал выше - проверить поведение: запись 1 в любой из этих битов (не важно вручную или самим MMU) вызывает заморозку MMR2, MMR1 (ну тут не актуально) и битов 1-6 в SR0.
- - - Добавлено - - -
Неправильно прочитал текст выше, но суть та же - попробовать заморозить значения, выключить и посмотреть. А с учетом специфики ВМ3 также из пульта посмотреть.
- - - Добавлено - - -
Хотя это я уже пьян - я же сам выложил выше результат где видно, что из SR0 после записи 0 в него читается ненулевое значение. Так что суть вопроса сводится в гарантированной установке битов на ВМ3, отключении, чтении и проверки из пульта на всякий случай...
.
Новая версия теста: SR0.SAV - проверяет текущие значения SR0 и SR2 при выключенном и включённом MMU, выполняя команды в двух страницах памяти.
Запускать на машинах с диспетчером памяти.
Эх, еще бы эти тесты с XM не конфликтовали, а то сначала загрузись в ZM чтобы залить по FTP, потом в SB чтобы запустить итд... :)Код:.RU SR0
Live SR0 & SR2 test.
MOV #0177572, R2
MOV #0177576, R4
CLR (R2)
010000/ MOV (R2), R3 ; R3/000016
010002/ MOV (R4), R5 ; R5/010002
MOV #1,(R2)
010000/ MOV (R2), R3 ; R3/000017
010002/ MOV (R4), R5 ; R5/010002
CLR (R2)
020000/ MOV (R2), R3 ; R3/000016
020002/ MOV (R4), R5 ; R5/020002
MOV #1,(R2)
020000/ MOV (R2), R3 ; R3/000017
020002/ MOV (R4), R5 ; R5/020002
Program completed.
.
Тест на ВМ3.
Код:.SR0
Live SR0 & SR2 test.
MOV #0177572, R2
MOV #0177576, R4
CLR (R2)
010000/ MOV (R2), R3 ; R3/000000
010002/ MOV (R4), R5 ; R5/010004
MOV #1,(R2)
010000/ MOV (R2), R3 ; R3/000001
010002/ MOV (R4), R5 ; R5/010004
CLR (R2)
020000/ MOV (R2), R3 ; R3/000016
020002/ MOV (R4), R5 ; R5/020004
MOV #1,(R2)
020000/ MOV (R2), R3 ; R3/000003
020002/ MOV (R4), R5 ; R5/020004
Program completed.
Кстати по описанию KDJ11-B биты 1-6 в SR0 выставляются только при возникновении ошибки.
- - - Добавлено - - -
1.4.7.1 Memory Management Register 0 (17777572) - MMR0 provides control and records memory
management unit status. The register contains abort and status flags as shown in Figure 1-15 and described
in Table 1-10.
1.4.7.2 Memory Management Register 1 (17777574) - MMR1 records any autoincrement or
autodecrement of a general purpose register, including explicit references through the PC. The increment
or decrement amount by which the register was modified is stored in 2’s complement notation. The lower
byte is used for all source operand instructions and the destination operand may be stored in either byte,
dependiig on the mode and instruction type. The register is cleared at the beginning of each instruction
fetch. The register is defined in Figure 1-16.
1.4.7.3 Memory Management Register 2 (17 777 576) - MMR2 is loaded with the program counter of
the current instruction and is frozen when any abort condition is posted in MMR0.
На ВМ3 живое значение SR0 показывает номер страницы предыдущей операции, а живое значение SR2 превышает "стандартное" на 2.