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