Может ли что-нибудь с процессором Z80 запускать игры Gameboy? - PullRequest
0 голосов
/ 24 августа 2018

Поскольку процессор Gameboy, LR35902, является гибридом Z80 и Intel 8080, имея в виду, что Z80 и Intel 8080 были разработаны для обеспечения большей степени кросс-совместимости в любом случае, может работать любой процессор с процессором Z80 коды операций, которые предназначались для LR35902? Мне было интересно не потому, что я надеялся использовать свой TI84 для игры в покемонов в учебном зале.

РЕДАКТИРОВАТЬ: я знаю, что мне придется перепрограммировать элементы управления и, возможно, способ, которым игра получает доступ к оперативной памяти, но я бы предпочел просто сделать это, чем портировать всю игру.

1 Ответ

0 голосов
/ 25 августа 2018

Набор команд Z-80 является расширенным набором команд 8080. LR35902 имеет много общего с 8080, но заменяет некоторые инструкции 8080 другими и расширяет набор команд в некоторых направлениях, отличных от Z-80. LR35902 не совместим с Z-80 и не совместим с 8080.

Вам нужно будет найти все варианты использования несовместимых инструкций и заменить их патчами, которые обеспечивают ту же функциональность. Поскольку TI84 намного быстрее, чем оригинальный процессор GameBoy, дополнительное время не будет проблемой, и будет легко кодировать замены для самих инструкций. Разборка ПЗУ и отделение кода от данных займет много времени.

Тем не менее, вы можете взять существующий эмулятор GameBoy и установить его на инструменте, чтобы записать расположение команд, которые он выполняет, которые отличаются на Z-80. Если вы будете интенсивно играть в игру, вы должны найти большинство мест, где код должен быть исправлен.

Для быстрого обзора см. Эту таблицу инструкции LR35902 и сравните с Z-80. Вам также понадобится это описание инструкций LR35902 .

Вот краткая разница в кодах операций с кратким описанием инструкции между LR35902 и Z-80.

Opcode  LR35902            Z-80
------  --------------     ----------
F2      LD   A,(C)         JP  P,nn
E2      LD   (C),A         JP  NV,nn
EA      LD   (nn),A        JP  V,nn
FA      LD   A,(nn)        JP  M,nn
3A      LDD  A,(HL)        LD  A,(nn)
32      LDD  (HL),A        LD  (nn),A
2A      LDI  A,(HL)        LD  HL,(nn)
22      LDI  (HL),A        LD  (nn),HL
08      LD   (nn),SP       EX  AF,AF'
E0      LDH  (n),A         RET NV
F0      LDH  A,(n)         RET P
F8      LD   HL,(SP+e)     RET M
E8      ADD  SP,e          RET V
CB 3x   SWAP r             SL1 r (undocumented)
10      STOP               DJNZ
D9      RETI               EXX

Это небольшая справка, что LD A,(nn) и LD (nn),A доступны для обоих и просто используют разные коды операций.

...