При создании эмулятора чипа-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];
}
Основное различие между этими двумя заключается в том, что я либо увеличивается, либо нет. Поскольку я - регистровый индекс эмулятора, очень важно, чтобы программа работала правильно.
Я хочу знать, какая реализация этого кода операции правильная.