Всем привет.
Столкнулся с проблеммой в MMU.
Дано:
По моей идее я хочу разбить виртуальную память на куски по 32МБ. Разбиваю, естественно, привязывая к реальной памяти.
Настраиваю следующим образом:
Ставлю привелегированный режим,
Запрещаю MMU,
Заполняю Таблицы трансляций L1 и L2,
Устанавливаю адрес таблицы трансляции L1 (с учетом кратности),
Устанавливаю домены,
Ставлю защиту ROM,
Ставлю защиту Системы (в контрол регистре 1 ставлю бит 8),
Разрешаю MMU,
Разрешаю оба кэша.
Задача:
Установить FCSE_Pid, но
Далее самое странное.
Пытаюсь установить FCSE_Pid в отличное от нуля значение и когда я смотрю этот FCSE_Pid, то там по прежнему нуль.
Однако когда я меняю MMUTraceProcessIdentifierReg, то он благополучно меняется на любое число.
PC тоже не меняется от моих манипуляций. Хотя я не уверен, что он вообще должен меняться.
Всё это делается в привилигированном режиме.
Следующий эксперимент:
1. Всё вышеописанное пробую в режимах Supervisor, System(изначально).
Результат тот же.
2. Если пытаюсь выставить USER режим и манипулировать CP15, то сразу падаю в 0x4. Всё ок.
Подскажите пожалуйста, может быть я не правильно понимаю смысл этого CP15 c13?
По моему мнению его должен использовать проц PID+adress[32МБ]...