.
Не так давно мы удивлялись, почему в HALT-моде команда MFPI SP пишет в стек не USP, а KSP.
Но чему удивляться, если регистр SP предыдущей моды задаётся битом 13 в PSW, а при входе в HALT-моду этот бит обнуляется.
Новый вариант теста при входе в пульт корректно устанавливает предыдущую моду в PSW :
Код:
.ASect
. = 0
Jmp @#Next // Точка входа пульта.
. = 24
.Word Start // Адрес старта.
.Word 340
Start:
Mov #140340, @#177776 // Установить USER-моду
Mov #4444, SP // Стек USER-моды
Mov #340, @#177776 // Установить KERNEL-моду
Mov #2222, SP // Стек KERNEL-моды
HALT // Установить HALT-моду
Wait
Next:
MFPI SP // Запись KSP в стек
Mov #30340, @#177776 // Установить PrevMode=USER
MFPI SP // Запись USP в стек
Nop
Wait
- - - Добавлено - - -
Новый тест: MFPI.SAV - проверяет работу команды MFPI SP в режиме MMU16 для всех комбинаций текущей и предыдущей моды.
Запускать на машинах с диспетчером памяти. На эмулируемой ДВК-3 результат такой :
Код:
.RU MFPI
MFPI SP command test.
MOV #140340,@#177776
MOV #44444, SP
MOV #000340,@#177776
MOV #22222, SP
MFPI SP
022220/022222
MOV #030340,@#177776
MFPI SP
022216/044444
MOV #140340,@#177776
MFPI SP
022214/000000
044442/022216
MOV #170340,@#177776
MFPI SP
022212/000000
044440/044442
Program completed.
.