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


 

Емуляція являє собою спробу зімітувати небудь пристрій певної системи. Є три способи побудови емуляторів: динамічна і статична рекомпіляції та інтерпретація. Для досягнення максимального швидкісного ефекту при роботі рекомендується використовувати всі три способи. Розглянемо на прикладі написання типового емулятора процесора.


Інструкція

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