Вход в режим HALT с включенным главным прерыванием, но без разрешения прерывания (0xFF0F = 0)?

Согласно Руководству по программированию для Gameboy,

Режим HALT отменяется следующими событиями, для которых указаны начальные адреса.

  1. НИЗКИЙ сигнал на клемму /RESET Начальный адрес: 0x0000

  2. Устанавливаются флаг разрешения прерывания и соответствующий ему флаг запроса на прерывание.

    • IME = 0 (флаг разрешения главного прерывания отключен) Начальный адрес: адрес, следующий за адресом инструкции HALT

    • IME = 1 (флаг разрешения главного прерывания включен) Начальный адрес: начальный адрес каждого прерывания

Предположим, что программа входит в режим HALT с включенным флагом разрешения основного прерывания IME = 1 и отключенным флагом разрешения прерывания для любого прерывания 0xFF0F = 0, что произойдет? Каково ожидаемое поведение на реальном устройстве Gameboy?


person GabrielOshiro    schedule 27.05.2015    source источник
comment
Кстати, если вам нравится эмуляция и вы считаете, что такие вопросы больше подходят для отдельного сайта обмена стеками, взгляните на два предложения на Area 51 Эмуляция и Ретрокомпьютинг.   -  person GabrielOshiro    schedule 27.05.2015
comment
Соответствует ли текущий ответ вашим потребностям?   -  person Pokechu22    schedule 10.06.2015
comment
@ pokechu22 нет, это не так.   -  person GabrielOshiro    schedule 14.06.2015
comment
Процессор остановится навсегда, как говорится в ответе, вот и все. Если это не ответ, отредактируйте свой вопрос, чтобы лучше отразить то, что вы действительно хотите знать.   -  person creker    schedule 28.02.2016


Ответы (1)


Я не уверен, правильно ли я понял ваш вопрос, но тем не менее:
Согласно цитируемому руководству, регистр IE (разрешение прерываний) с адресом FFFF определяет, какой из 5 типов прерываний разрешен. Только те, которые установлены на 1, будут приняты, если IME (разрешение главного прерывания) установлено на 1. Регистр IF (флаги прерывания) по адресу FF0F предоставляет просто информацию о том, какие прерывания запрошены.
Таким образом, если программа находится в состоянии HALT с IME = 1, принимается любое прерывание, разрешенное в IE. Конечно, кто-то должен был сгенерировать прерывание(я), которое будет обозначаться (или более) 1 в регистре IF.

РЕДАКТИРОВАТЬ:

Возможно, теперь это ответ на ваш вопрос:
Если программа переходит в режим HALT, функция Interrupt Master Enable включена (IME = 1), но все определенные типы прерываний отключены (IE = 0), прерывания приниматься не будут, а режим HALT не осталось. Это ожидаемое поведение на устройстве.

person Reinhard Männer    schedule 08.06.2015
comment
Спасибо, что нашли время ответить, однако это не ответ на мой вопрос. - person GabrielOshiro; 14.06.2015
comment
Не могли бы вы сказать мне, почему бы и нет? - person Reinhard Männer; 14.06.2015
comment
Извините, @Reinhard Männer, я не видел вашу правку. Благодарю вас! - person GabrielOshiro; 22.01.2020