Какие проблемы возникают при эмуляции чего-то вроде архитектуры x86 по сравнению с чем-то вроде 6502?

В настоящее время я делаю эмулятор NES на Java. Мое ядро ​​6502 работает на 99%, за исключением некоторых мелких проблем. Дело в том, что я эмулирую 6502 для NES, но я никогда не интересовался этим так сильно, как в PS1, N64 или DOS. Я всегда хотел эмулировать консоль / систему, которая способна сделать больше, чем просто рисовать на экране несколько простых 2D-спрайтов, как в вышеупомянутых системах.

Я хочу спросить: что затрудняет эмуляцию чего-то вроде процессора x86 по сравнению с 6502? Единственное, что я могу придумать, это огромный набор команд x86 и то, что эмулятор x86 должен быть немного более запрограммирован на эффективность, а не на читаемость кода. Я спрашиваю об этом, потому что я посмотрел на исходный код DosBox и, по сравнению с практически любым эмулятором с открытым исходным кодом 6502, источник ядра x86 для DosBox мне даже не понятен. Почему такая большая разница в сложности, когда все, что процессор делает, это просматривает список кодов операций и выполняет их систематически?

2 ответа

Решение

6502 и 8088/86 будут примерно одинаковыми, оба являются CISC и т. Д. X86 имеет больше инструкций, но, как 6502, просто вариации на тему.

Если вы говорите о чем-то большем, чем просто эмулятор DOS, например, 80386 или новее, то да, это гораздо большее усилие. Не только процессор, но и система. Игровая система на основе 6502 не имеет слишком много вокруг нее, часто специфичной для платформы, астероидов, NES, C64 и т. Д. Dos вам нужно будет придумать биос, а затем DOS, который я считаю на данный момент там бесплатно. а также периферийные устройства, которые есть / были во многих системах 8086, видео, жесткий диск и т. д.

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

Добавьте все это, и уровень усилий для системы dos/x86 намного больше, чем 6502.

Вам больше не нужно создавать эмулятор, разработанный для повышения эффективности, а не для него (например, для DOS). Источники, на которые вы смотрите (MAME - хороший источник для множества симуляторов процессоров), скорее всего, рассчитаны на скорость, и многие из них едва читаемы.

x86 - болезненный набор инструкций со всех сторон, на которые вы смотрите. Если 6502 - это все, что вы сделали до сих пор, я бы выбрал что-то еще, если не очевидно, как это сделать (что звучит так, как будто это не так). может быть, набор инструкций фиксированной длины, например, arm или mips (хорошо, версии фиксированной длины). Или, чтобы почувствовать масштаб, сделайте z80 и запустите космических захватчиков или галагу или что-то на ней. (хмм, космические захватчики - это 8080?) (производная от z80 есть в gameboy).

Как вы упомянули, x86 имеет довольно обширный набор инструкций. Просто есть большая разница между крошечным 8-битным микропроцессором с 5-ю регистрами и 50-ю странными инструкциями, такими как 6502, и жесткой, устаревшей, CISC, 32-битной, многопользовательской ОС, поддерживающей ЦП, такой как x86.

Процессоры x86 сложнее, потому что они:

  • являются CISC, что означает, что многие инструкции выполняют сложные вещи, которые могут занять много циклов.

  • как правило, поддерживают FPU

  • иметь многоуровневое кеширование

  • иметь очередь ввода предварительной выборки

  • есть много поддержки обратной совместимости

  • поддержка подкачки

  • несколько уровней привилегий

Другие вопросы по тегам