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

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

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


person ZimZim    schedule 28.07.2013    source источник


Ответы (2)


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

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

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

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

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

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

person old_timer    schedule 28.07.2013

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

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

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

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

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

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

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

  • поддержка пейджинга

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

person LogicG8    schedule 28.07.2013