
Сообщение от
Vslav
Получилось такое
Похоже, что на картинке не первый прогон теста после включения питания, потому что исходные значения SP таинственным образом оказались равны тем значениям, которые были записаны в них далее по тесту. Надо как-то узнать, какие значения имеют регистры SP у обоих процессоров сразу после включения питания.

Сообщение от
Vslav
Почему-то в HALT режиме SP равен установленному значению 22228, хотя PSW и PC при переходе в HALT сохранились в стеке 200008
Я ожидал этого, потому что судя по всему - если в раннем ВМ3 режим пульта был организован через специальный режим включённого MMU ( поэтому там мапятся все адреса и есть свой указатель стека ), то в позднем ВМ3 режим пульта организован через специальный режим выключенного MMU ( поэтому там мапятся только некоторые адреса, нет собственного указателя стека, а PSW и PC сохраняются при входе по фиксированным адресам ).
- - - Добавлено - - -
Картинка обрывается на адресе 01410 - отработку зависания в режиме HALT не видно. Ожидается, что при отработке зависания в режиме HALT процессор ВМ3 ничего никуда не пишет, загружая новые значения PC и PSW из вектора 04 - это так ?
- - - Добавлено - - -
Показ содержимого PSW на шине ( как выяснилось ) надо производить командой: Mov (R2), (R1)
- - - Добавлено - - -
Но с другой стороны, при входе в прошивку 377 - первым делом для сохранения регистров делается вызов CALL. При произвольном значении SP такое невозможно ( да и сохранить исходное значение SP после вызова CALL можно только в том случае, когда вызов CALL не использует SP ). Может статься, что в режиме HALT, использующие стек команды - используют особый скрытый регистр, недоступный для чтения и записи через обращение к SP.
Для проверки этого предположения можно в начале обработчика HALT вызвать последующий код через CALL и посмотреть, куда сохранится адрес возврата :
Код:
.ASect
. = 0
Jmp @#Next // Точка входа пульта.
. = 24
.Word Start // Адрес старта.
.Word 340
Start:
Mov #2, R1
Mov #177776, R2 // Адрес PSW
Mov #140340, (R2) // Установить USER-моду
Mov SP, (R1) // Какой стек ?
Mov #4444, SP // Стек USER-моды
Mov #340, (R2) // Установить KERNEL-моду
Mov SP, (R1) // Какой стек ?
Mov #2222, SP // Стек KERNEL-моды
Mov #Next, (R1)
HALT // Установить HALT-моду
Next:
Mov (R2), (R1) // Прочитать PSW
Call Next2 // Где сохранит PC ?
Next2:
Mov SP, (R1) // Какой стек ?
Mov (SP), (R1) // Откуда прочитает ?
Mov #140340, (R2) // Выбрать стек USER
Mov SP, (R1) // Какой стек ?
Mov #340, (R2) // Выбрать стек KERNEL
Mov SP, (R1) // Какой стек ?
Mov #Next3, (R1)
Mov #177600, @#172512 // PARH2 -> IO Page
Tst @#100000 // Чтение 17760000 вызовет зависание
Nop
Next3:
Br .-2.
- - - Добавлено - - -
Любопытно - прошивка 134 написана так, что если запись в SP изменяет указатель стека HALT-моды, то прошивка входит в бесконечный цикл, а это означает, что во всех версиях 1801ВМ3 указатель стека HALT-моды не доступен через обращение к SP.