Поведение процессора при выполнении команды в зависимости от режима, в котором он находится, страница 6

Информация о внутреннем состоянии,  помещаемая  в  окно  стека, достаточна как для определения причины ошибки, так и для ликвидации ее последствий.

Для повышения эффективности в MC68020 предусмотрено два различных формата стекового окна при ошибке  шины  (см.  Рис.  6-7  и

6-8). Если ошибка шины случилась во время выполнения  некоторой команды, то процессор запоминает свое состояние целиком с  тем, чтобы по устранении ошибки шины выполнение команды  могло  быть продолжено корректным образом. Если ошибка шины случилась в самом начале выполнения команды, то  процессору  для  продолжения выполнения команды по возвращении из процедуры обработки исключения достаточно сохранить значительно меньший объем информации о сбойном цикле. Два формата стекового окна различаются по коду формата  (подробнее смотри в 6.5 ФОРМАТЫ СТЕКОВЫХ ОКОН ИСКЛЮЧЕНИЙ MC68020).

Если ошибка шины произошла во  время  обработки  исключения  по ошибке шины, ошибке адреса, сброса или в момент  восстановления внутренних регистров из стека командой RTE, то процессор  переходит в режим тяжелого останова. Это облегчает диагностику причин катастрофической ошибки, так как процессор  самоустраняется из системы, не изменяя текущего состояния стека  и  памяти.  Из режима тяжелого останова, в который процессор  попадает  в  результате двойной ошибки шины,  он  может  быть  выведен  только внешним сигналом сброса RESET*.

6.3.4 Программные исключения

Программные исключения возникают  при  выполнении  команд.  Они возбуждаются либо при обнаружении процессором  ненормальной ситуации в процессе выполнения команды, либо  при выполнении  команд, специально для этого предназначенных.

Обработка программных исключений следует намеченной выше схеме.

Создается внутренняя копия регистра  состояния,  осуществляется переход в режим супервизора, сбрасываются биты трассировки. Таким образом, если к моменту начала выполнения команды,  вызвавшей исключение, трассировка была разрешена,  то  исключение  по трассировке будет возбуждено, но процедура  обслуживания  программного исключения трассироваться не будет (в  первую  очередь будет обработано программное исключение, исключение по  трассировке - во вторую). Номер вектора порождается внутренним  образом; в случае команды TRAP #n номер вектора частично содержится в самой  команде.  Смещение  вектора  программного  исключения, программный счетчик и копия регистра  состояния  сохраняются  в стеке супервизора. Сохраненное значение  программного  счетчика представляет собой адрес команды,  следующей  за  той,  которая вызвала программное исключение. Для  всех  программных  ловушек кроме TRAP #n сохраняется также указатель на команду, вызвавшую программное исключение. По завершении перечисленных действий  с адреса, содержащегося в векторе исключения, начинается выполнение команд процедуры обслуживания.

Некоторые команды специально используются для возбуждения программных исключений. Команда TRAP #n всегда вызывает исключение;

она используется для организации в программе пользователя  системных вызовов. Команды TRAPcc, TRAPV,  cpTRAPcc,  CHK  и  CHK2

возбуждают исключение, если программа пользователя обнаружит  в процессе выполнения ошибку такого рода, как арифметическое  переполнение или выход индекса за границы. Команды деления DIVS и

DIVU вызовут исключение при попытке деления  на  нуль.  Команды

CALLM и RTM вызовут исключение ошибки формата, если будет  запрошено недопустимое изменение режима  привилегированности  либо заданы неправильные параметры в полях типа или опций.

6.3.5 Точки останова

Для использования микропроцессора MC68020 в составе  аппаратных эмуляторов в нем должны быть предусмотрены средства вставки точек  останова в целевой код и четкой фиксации момента попадания в точку останова. В случае MC68000 и  MC68008  это  достигается вставкой  запрещенной команды в точках останова и фиксацией обращения процессора по адресу вектора исключения по  запрещенной команде. Наличие в процессорах MC68010, MC68012 и MC68020 базового  регистра  векторов исключений позволяет размещать таблицу векторов в любом месте, поэтому адрес вектора исключения не может служить надежным индикатором выхода процессора на точку останова. На этих процессорах данная проблема решается путем расширения функционального назначения запрещенных команд с  кодами

$4848-$484F  с тем, чтобы использовать их в качестве команд точек останова. Механизм точек останова позволяет  также  внешней аппаратуре  отслеживать  выполнение программ, располагающихся в кэш-памяти на кристалле, без серьёзной потери производительности.

При  выполнении  команды  точки  останова  MC68020 считывает из пространства ЦП типа $0 значение  по  адресу,  соответствующему номеру точки останова. Кодировка пространства ЦП типа $0 приведена  на Рис.5-1. Если цикл шины завершается сигналом BERR*, то процессор приступает к обработке исключения по запрещенной  команде. Если цикл завершается сигналом DSACKx*, то процессор использует  полученные  данные  для замены команды точки останова внутри конвейера команд, после чего  начинает  выполнение  этой команды.

6.3.6 Ошибка формата

Точно так же, как процессор осуществляет проверку предварительно считываемых команд, он выполняет (при  необходимости  с  помощью сопроцессора) некоторые проверки значений данных, используемых операциями управления, в том числе полей типа и опций  в дескрипторе команды CALLM, формата области сохранения сопроцессора для команды cpRESTORE, формата окна стека для RTE и RTM.

Команда RTE проверяет допустимость кода формата окна стека; для обоих форматов, используемых в случае ошибки шины,  проверяется корректность значений, загружаемых в различные  внутренние  регистры. Единственным элементом  данных,  корректность  которого проверяется, является номер версии процессора, сгенерировавшего окно. Этим гарантируется, что процессор  не  сделает  ошибочных предположений о находящейся в окне стека информации о  внутреннем состоянии.