Опять прошу помощи у специалистов. Тут в свое время обсуждался глюк процессора при использовании режимов адресации @PC. Я нарвался на похожую проблему, и хотел уточнить, это проявление данного глюка, или же нет.
Я занимаюсь сейчас подготовкой к публикации моего FPGA-варианта платы МС1201.02, поскольку здесь нашлись интересующиеся данной разработкой. Я доделал контроллер RX11/RX01, и в процессе тестов оказалось, что RT-11 ни в какую не хочет грузиться с дисковода по команде монитора B DX. Из-под системы командой BOOT грузится, а из-под монитора никак не хочет. Трассировка процесса загрузки из-под SignalTap показала, что процессор ведет себя неадекватно. Вот тестовый фрагмент, являющийся составной частью первичного загрузчика DX:
Код:
3 000000 START:
4 000000 011706 MOV @PC,SP
5 000002 012702 000200 MOV #200,R2
6 000006 005000 CLR R0
7 000010 000000 HALT
8 000000 .END START
Здесь в первой инструкции используется код следующей команды в качестве нового указателя стека. Конечно, так писать могут только больные на голову люди, но тем не менее это кусок официального дековского драйвера. Очевидно, что после выполнения данного кода должно получиться R2=200, R0=0. Попробуем запустить этот код из монитора:
Код:
@0/000000 11706
000002/000000 12702
000004/000000 200
000006/000000 5000
000010/000000 0
@R0/140001
@R2/000000
@R6/000776
@
@0G 000012
@R0/140001
@R2/005000
@R6/012702
@
Как видим, первая команда отработала правильно, в SP записалось 12702. А дальше начались проблемы. Следующая команда свой аргумент взяла на слово дальше - не 200, а 5000. А команда CLR вообще не отработала, регистр R0 не изменился. Естественно, что в этой ситуации загрузка с дискеты невозможна:
Поскольку выше в качестве адреса буфера установилось не 200, а 5000, то по адресу 200 остались нули, и при передаче туда управления получаем вылет в монитор.
Что странно, загрузка по команде BOOT/FOREIGN работает правильно:
Код:
RT-11SJ (S) V05.04 D
.SET TT QUIET
.BOO/FOR DX:
DW Handler V6.5, (c) D.S.C., 1992-2016
RT-11SJ (S) V05.04 D
.SET TT QUIET
.
Хотя, по идее, при этом происходит то же самое - с дискеты считывается сектор 1 дорожки 1 по адресу 0 и туда передается управление.
Странно, но мне помнится, что в начале 90-х годов у нас еще стояли ДВК с дисководами ГМД-70 и все прекрасно с них грузилось. Хотя, почти 30 лет прошло, возможно я что-то уже и забыл. Возможно, это были ДВК-1 на 1801ВМ1, или мы использовали не RT-11, а какой-нибудь советский суррогат вроде рафоса.