Як написати емулятор.

Емуляція являє собою спробу зімітувати якийсь пристрій певної системи. Є три способи побудови емуляторів: динамічна і статична рекомпіляції і інтерпретація. Для досягнення максимального швидкісного ефекту при роботі рекомендується використовувати всі три способи. Розглянемо на прикладі написання типового емулятора процесора.
Інструкція
1
Виберіть мову програмування. Рекомендована і, напевно, єдина альтернатива - Сі і Асемблер. В Сі можна зробити код, який буде переноситися на інші платформи. Він відносно простий для розуміння і легкий у налагодженні, але набагато повільніше, ніж інші. Асемблер же відрізняється своєю високою швидкістю роботи, в ньому використовуються процесорні регістри, що сприяє наближенню програми до рекомпілірующей. Однак у ньому вельми важко відслідковувати і виправляти коди. Важливо добре знати обраний мову і добре оптимізувати код за швидкістю.
2
Присвойте початкове значення циклічному і програмному лічильнику. Циклічний counter відраховує кількість тактів, через яке відбувається переривання, а програмний PC показує область пам'яті, в якій лежить наступна по черзі опкодовая команда.
3
Після отримання опкода відніміть з циклічного лічильника кількість тактів, яке займає процес виконання опкода. Зверніть вашу увагу, що деякі команди різняться за кількістю тактів в залежності від аргументів. Для таких команд зміните лічильник в коді виконання пізніше.
4
Після успішного виконання опкода перевірте потреба викликання переривань. В цей момент виконайте завдання, які необхідно терміново синхронізувати за часом.
5
Перевірте кожен прохід циклу на потреба завершення його роботи. Пам'ятайте, що програма повинна бути модульною, оскільки більшість комп'ютерів складається з модулів, а типовий емулятор по можливості повинен повністю повторювати оригінальну систему. Це забезпечить більш швидку і просту налагодження програми, і ви зможете використовувати однакові модулі для різних емуляторів , тому як багато комп'ютерів створені на базі однакових моделей процесорів або видеопроцессоров.