инкремент I в опкоде чип-8 FX65 - PullRequest
0 голосов
/ 04 июля 2018

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

С одной стороны у нас есть Википедия , которая под кодом операции FX65 говорит нам, что

"Заполняет V0 до VX (включая VX) значениями из памяти, начиная с адреса I. I увеличивается на 1 для каждого записанного значения."

, где "I увеличивается на 1 для каждого записанного значения." является важной частью.

После этого получается следующий код:

for(int i = 0; i <= ((opcode & 0x0F00) >> 8); ++i) {
    V[i] = memory[I];
    ++I;
}

с другой стороны, у нас есть ссылка chip-8 от cowgod , ссылка, на которую ссылается почти каждый учебник, которая сообщает нам следующее

"Интерпретатор считывает значения из памяти, начиная с местоположения I, в регистры V0-Vx."

Применение этой логики приводит к следующему коду (это также реализация, которую использует большинство реализаций чипа-8):

for(int i = 0; i <= ((opcode & 0x0F00) >> 8); ++i) {
    V[i] = memory[I + i];
}

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

Я хочу знать, какая реализация этого кода операции правильная.

1 Ответ

0 голосов
/ 04 июля 2018

Кажется, что нет однозначного ответа, так как, похоже, нет однозначной ссылки.

Эта ссылка , кажется, имеет ту же проблему с той же неоднозначностью

Эта (современная) ссылка (стр. 113), однако, гласит: «I = I + X + 1». Авторство - изобретатель Джозеф Вайсбекер - думаю, он знал.

...