2016-12-28 17 views
5

Здравствуйте, я пишу эмулятор для Game Boy.Длина команды LD A, (C) в gameboy ~ Процессор Z80

Я использую эту ссылку: Gameboy CPU (LR35902) instruction set

В этом документе сказано, что опкоды:

0xE2 LD (C),A 

и

0xF2 LD A,(C) 

имеют длину 2.

Game Boy CPU Manual говорит, что эти инструкции соответственно:

значение Put по адресу $ FF00 + регистр C в A.

и

Помещенный в адрес $ FF00 + регистр C.

Я думаю, что это имеет длину 1, потому что код операции является самодостаточным, ему не требуется другое значение для интерпретации. Если он имеет длину 2, какова цель второго байта?

+0

Почему вы так думаете? – Blorgbeard

+0

На диаграмме указано, что инструкции являются 8-битными. Я не вижу никаких причин не верить. –

+0

Попробуйте эту ссылку [gameboy cpu reference] (http://marc.rawer.de/Gameboy/Docs/GBCPUman.pdf). – rcgldr

ответ

6

Вы абсолютно правы. LD (C),A и LD A,(C) - 1 байт.

Я даже послал по электронной почте ответственного (Pastraiser) с просьбой уточнить (или, если он мог исправить сайт), но я не получил ответа.

Другое дело, что меня беспокоит также тот факт, что prefix CB считается 1 байт длиной и потребляет 4 цикла. И все расширенные инструкции считаются 2 байтами и потребляют 8 циклов (16, если они обращаются к (HL)). Мне было бы разумнее оставить пробел ниже Prefix CB, поэтому ясно, что все расширенные инструкции уже включают циклы размера и обработки их префикса.

А другая вещь, которая беспокоит меня, состоит в том, что длина STOP равна 2. Это на самом деле всего один байт. В Gameboy Classic есть аппаратная ошибка, которая вызывает пропущенную команду после STOP. Поэтому Nintendo начала рассказывать разработчикам, чтобы добавить NOP всегда после STOP. Итак, чтобы быть на 100% правильным, я бы рассмотрел STOP как (1,4) вместо (2,4). Эта проблема не существует в Gameboy Color.