Скорей всего ПЗУ уже находится на устройстве.
http://s017.radikal.ru/i430/1412/5d/b12dd9a67127.jpg
Скорей всего ПЗУ уже находится на устройстве.
http://s017.radikal.ru/i430/1412/5d/b12dd9a67127.jpg
у МС1201.02 есть ПЗУ-055 и там есть загрузчик (не в юзере) ... Но я не понял - почему эту ПЗУ -055 никто не знает?
Как выяснилось - прошивка -055 поддерживает загрузку со следующих устройств:
Код:Команда CSR
------- ------
L 177550
B MT0 172520
B MX0 177130
B DX0 177170
B RK0 177400
B RM0 167740
Есть ещё команды.
Код:B
$ L (BK) -Ввод программы абсолютного загрузчика с устройства считывания с перфоленты.
$ LA (BK) -Загрузка программы абсолютного загрузчика в память.
$ DY (BK) -Загрузка с накопителя на гибких магнитных дисках с двойной плотностью.
Тест VM2JR.SAV для платы МС1201.02 проверяет, какой вариант Trap_to_04 вызывает команда типа JMP R0 в режиме HALT - по вектору 04 или по вектору 140004.
В первом случае результат запуска выглядит так:
Во втором случае результат запуска выглядит так:Код:.RU VM2JR
1801VM2 HALT mode test VM2JR v1.0
JMP R0
Trap to 04
.
Код:.RU VM2JR
1801VM2 HALT mode test VM2JR v1.0
JMP R0
HALT Trap to 04
.
Да, всё верно.
---------- Post added at 02:25 ---------- Previous post was at 02:21 ----------
Ещё добавлю, что хоть TRAP4 и недопустимая команда прерываются по одному вектору в режиме USER, но для процессора это совершенно разные ситуации. Для TRAP4 ещё запоминается признак прерывания, чтобы прерваться по DOUBLE BUS ERROR, если произойдёт ещё TRAP4. Кстати, в 1801ВМ2 этот признак очищается только при успешном прочтении команды из памяти, а не просто прочтении памяти.
Не получится. Команда MFPT будет прочитана, и соответственно флаг сброшен. Далее он установится при попытке прочтения первой команды подпрограммы исполнения TRAP10, произойдет TRAP4, но команда MFPT будет успешно прочитана из памяти. Ну и так до бесконечности, точнее до переполнения стека.
Тесты я не писал, т.к. пультовый отладчик в УКНЦ очень удобный и позволяет запускать код как в режиме USER, так и в HALT. Поэтому все исследования я делал в нём.
А программа довольно простая. Устанавливаем вектор 4 на адрес 0170000, ячейку 6 на 0340, R6 на 01000, RS на 0340. С адреса 01000 заносим команду TST @#170000 и исполняем её.
Происходит TRAP4, в стек успешно заносятся значения 01002 и 0340. А вот далее при чтении команды по адресу 0170000 снова происходит прерывание по зависанию и соответственно DOUBLE BUS ERROR. После всего этого значение R6 станет 0774, т.е. в стек занесено только два слова при первом прерывании TRAP4.
Тест можно усложнить, если сделать так, что ячейку 6 установить в 0, и чтобы было прерывание по таймеру или по терминалу. Их вектор также должен указывать на "пустоту". Соответственно стек заполнится ещё больше, но в итоге опять будет DOUBLE BUS ERROR.
Кстати, не помешало бы проверить это на МС1201.02, т.к. там нет "мегаглюка". Поэтому программу надо написать, а Mix её исполнит.
Тест VM2DB.SAV для процессора 1801ВМ2 проверяет генерацию прерывания по двойной ошибке шины - DOUBLE BUS ERROR. В результате исполнения теста должна появится ошибка двойного зависания и произойти выход в пультовый отладчик. Перед исполнением теста желательно включить таймер. После запуска теста выведется приглашение >, надо нажать любую цифру. Для МС1201.02, после выхода в пультовый отладчик, необходимо просмотреть причину перехода по команде M. Просмотреть содержимое регистров R6, R7 и RS, а также содержимое стека от значения в регистре R6 до ячейки 0776 включительно.
Для МС1201.02 выход в RT-11 делается следующим образом: переключатель ПРОГРАММА/ПУЛЬТ перевести в положение ПРОГРАММА, в регистры R7 и RS занести значения 01400 и 0340 соответственно. Запустить командой пультового отладчика P.
Результаты работы теста на реальной УКНЦ видны на миниатюре.
Тест LDBE.SAV - проверяет реакцию процессора на "длинное двойное зависание".
При вылете в пульт надо нажать M. Запускать можно везде, где есть нормальные прерывания от таймера.
При запуске на эмулируемой МС1201.02 результат такой:
Код:.RU LDBE
LDBE - Long DOUBLE BUS ERROR - Test v1.0
160002
@M
DOUBLE BUS ERROR
@
При запуске на эмулируемой МС1201 результат такой:
Код:.RU LDBE
LDBE - Long DOUBLE BUS ERROR - Test v1.0
NOT Found..
.
Patron, Результат такой же. Такой же и с включенным таймером.
Чуть позже сделаю VM2DB.SAV.
---------- Post added at 17:00 ---------- Previous post was at 16:50 ----------
Тест VM2DB.SAV
Код:.RUN VM2DB
> 170042
@
@M
DOUBLE BUS ERROR
@R6/000754
@R7/170042
@RS/000340
@R7/170042 01400
@P
.
Ячейки после теста VM2DB.SAV
Код:@754/170030
000756/000000
000760/170020
000762/000000
000764/170010
000766/000000
000770/170000
000772/000020
000774/001242
000776/000340
Patron, У меня к Вам Мега просьба. Сделайте пожалуйста в эмуляторе VT52 переключение скоростей СОМ порта, выбор СОМ порта, установку RTS,DTR на передней панели (или сделать дополнительный спойлер "настройки"). А то каждый раз лезть в конфиг очень не удобно. А этими настройками я пользуюсь очень часто.
Спасибо.
Тест LDBE на ВМ3
Видно что обратно в RT11 не возвращается.Код:LDBE - Long DOUBLE BUS ERROR - Test v1.0
@ 160000
@M
HALT INSTRUCTION
@G
@ 160000
@P
@ 160000
@
Тута надо смотреть регистры R6, R7 и RS, а также содержимое стека.
Кстати, процессор 1801ВМ3 не различает HALT, DOUBLE BUS ERROR и INTERRUPT ERROR. Все исключения начинают исполняться в одной точке, и никаких признаков ни в каких регистрах нет. Все должно было определяться по всяким косвенным признакам, но в ПЗУ 1801РЕ2-134 этого не реализовано.
До теста LDBE на ВМ3
После.Код:@R6/127026
@R7/173000
@RS/000340
@674/000740
00000676/012702
00000700/000722
00000702/004712
00000704/011100
00000706/000020
00000710/000331
00000712/145414
00000714/156252
00000716/154630
00000720/000047
00000722/000000
00000724/154430
00000726/154004
00000730/145660
00000732/004000
00000734/000000
00000736/000047
00000740/153776
00000742/147664
00000744/145564
00000746/147740
00000750/007314
00000752/177777
00000754/001042
00000756/154546
00000760/145401
00000762/145240
00000764/000000
00000766/000003
00000770/145237
00000772/000120
00000774/143706
00000776/000010
Код:LDBE - Long DOUBLE BUS ERROR - Test v1.0
@ 160000
@M
HALT INSTRUCTION
@R6/000764
@R7/160000
@RS/000000
@674/000740
00000676/012702
00000700/000722
00000702/004712
00000704/011100
00000706/000020
00000710/000331
00000712/145414
00000714/156252
00000716/154630
00000720/000047
00000722/000000
00000724/154430
00000726/154004
00000730/145660
00000732/004000
00000734/000000
00000736/000047
00000740/153776
00000742/147664
00000744/152460
00000746/000061
00000750/151774
00000752/152410
00000754/152346
00000756/001000
00000760/001312
00000762/145414
00000764/001264
00000766/000000
00000770/001256
00000772/000377
00000774/001166
00000776/000340
---------- Post added at 18:54 ---------- Previous post was at 18:49 ----------
Прошивка Здесь
Давайте так, сначала тесты на ВМ3 потом на ВМ2. Чтоб мне платы не менять как пластинки (корзина одна).
Тест VM2DB на ВМ3
Код:.RUN VM2DB
>
@ 170000
@
@M
HALT INSTRUCTION
@R6/000774
@R7/170000
@RS/000020
@774/001242
00000776/000340
@R701400
@RS0340
@P
@ 170000
---------- Post added at 19:28 ---------- Previous post was at 19:19 ----------
Alex_K, Можно в редакторе найти отличия 134 и 377 и дизассемблировать только отличия. Я думаю там только добавлен автозагрузчик DW и тест ВМ4.
...
С ВМ3 закончено?
А вот это уже интересно. Похоже 1801ВМ3 пробует читать код нового процесса, даже не обрабатывая новых прерываний. Ну и адрес останова не PC+2, а PC.
MiX, для выхода в RT-11 надо было установить R7. В команде забыли ввести слэш "/". Т.е. надо было R7/.
---------- Post added at 19:33 ---------- Previous post was at 19:29 ----------
Увы, там же двоичный код. Различаться уже могут смещения при относительной адресации. Так что только дизассемблировать и смотреть.
Наверное да. Да и Patron отлаживает 1801ВМ2 в своем эмуляторе.
Еще раз огромное спасибо.
Тест VM2MEM.SAV - проверяет распределение памяти в пространстве HALT платы МС1201.02.
При запуске в эмуляторе результат такой:
Код:.RU VM2MEM
VM2MEM - v1.0
1801VM2 HALT mode Memory Map
... 000000-137776
ROM 140000-157776
RAM 160000-177776
.
Похоже - есть продвижение в понимании механизмов МЕГА-глюка процессора 1801ВМ2.
Ранее было замечено, что длина последовательности одинаковых команд типа MOV (PC),R0 влияет на вероятность возникновения Trap_to_04, при появлении команды NOP в конце последовательности.
Наиболее логичное ( на мой взгляд ) объяснение следующее.
Поскольку любая команда с адресаций (PC) выполняется процессором 1801ВМ2 как последовательность команд cmd (PC)+,arg | BR .-2., то на время выполнения этой виртуальной последовательности команд прерывания запрещаются.
Когда глюк активен - запрет прерываний продолжает действовать на момент первого ( глючного ) исполнения следующей команды и если это такая же "глюкогенная" команда - на время выполнения всей последоватености глюкогенных команд прерывания запрещаются.
Когда же начинается глючное выполнение команды NOP - прерывания разрешаются и чем дольше они были до этого запрещены - тем выше вероятность, что в этот момент произойдёт прерывание.
А так как в сдвиговом регистре из кода команды NOP извлекаются не только четыре бита признаков, но и пятый бит флага S/C - в буфере от кода команды NOP ( 0240 ) отстаётся только число 5, которое и заменяет собой передаваемый по шине вектор.
Т.е. на самом деле происходит Trap_to_05, но поскольку состояние линии A0 в циклах чтения игнорируется - происходит Trap_to_04.
...
Для проверки гипотезы о запрете прерываний глючной командой написан тест VM2T20.SAV, который полезно запустить и на плате МС1201.02 ( где глюк не активен ), и на УКНЦ ( где глюк активен ).
При запуске в эмуляторе результат такой:
Код:.RU VM2T20
1801VM2 MegaBUG test #20
01034 BiS #100, @#TTPS
01042 Mov (PC), R0
01044 >>> Interrupt <<< 064
01044 Mov (PC), R0
01046 Tst R0
01050 BiC #100, @#TTPS
01076 BiS #100, @#TTPS
01104 Mov (PC), R0
01106 >>> Interrupt <<< 064
01106 Mov (PC), R0
01110 BiC #100, @#TTPS
Program completed.
.
Прохождение теста такое же как в эмуляторе.
---------- Post added at 19:15 ---------- Previous post was at 18:56 ----------
Alex_K, Раз уж 134 прошивка дезассемблирована то можешь выковырять оттуда загрузчик DW. Мысль какая, этот загрузчик можно прикрутить вторым ПЗУ в эмулятор.
Тогда на команду В $DW пойдёт загрузка с жёсткого диска.
Когда глюк не активируется - прерывания проходят как надо, но когда глюк активен - пока непонятно, что происходит..
А как выглядит на УКНЦ запуск тестов VM2T18.SAV и VM2T19.SAV ( в ответ на вопросы нажимать ВВОД ) ?
---------- Post added at 19:39 ---------- Previous post was at 19:32 ----------
На команду В $DW загрузка с DW не пойдёт, но если код автозагрузки с DW посадить по адресу 0173000 - ДВК-2 будет автоматически грузиться с DW при SEL = 140006