Идея написать эмулятор у меня появилась довольно давно. Первые мои попытки разработки полноценного эмулятора Агата привели к написанию на 16-разрядном ассемблере программы, эмулирующей жёстко заданную при компиляции конфигурацию компьютера. Этот подход меня не удовлетворил, поскольку он плохо соответствовал открытости исходной архитектуры. Поэтому была начата разработка архитектуры эмулятора, позволяющая в полной мере реализовать все возможности оригинальной платформы. К счастью, к этому времени быстродействие компьютеров увеличилось настолько, что стало возможно вести разработку эмулятора с использованием более гибких языков программирования, чем ассемблер. В итоге в качестве языка для написания эмулятора был выбран язык C, поскольку он наиболее удачно, на мой взгляд, совмещает в себе как возможности низкоуровневого программирования (модули процессора, графики), так и средства для построения удобного графического интерфейса. Архитектура эмулятора модульная, она отражает в себе модульность исходной эмулируемой системы, и, кроме того, предоставляет возможность выбора различных подходов к эмуляции тех или иных блоков исходной архитектуры. В текущей версии программы реализована эмуляция всех штатных блоков исполнений 7 и 9 ПЭВМ Агат (кроме модулей параллельно-последовательного интерфейса), а именно: - Процессор 6502 с возможностью эмуляции недокументированных команд и с управлением быстродействием.
- Графический контроллер с эмуляцией всех графических и текстовых режимов ПЭВМ Агат обоих модификаций, а также с возможностью задания пользовательской прошивки знакогенератора.
- Контроллер оперативной памяти для исполнения 7 и 9 с возможностью выбора объёма эмулируемой памяти.
- Контроллеры ДопОЗУ (7, 9) и ПсевдоПЗУ (7) с выбором размера памяти.
- Контроллеры дисководов Shugart (140 Кбайт) и Teac (800 Кбайт). В обоих модулях реализовано два режима работы с образами дисков: посекторный и "сырой", когда образ содержит полную информацию о содержимом дорожки диска, включая служебные поля. Для дисков стандартных форматов реализована поддержка записи.
- Полная поддержка режима эмуляции компьютера Apple II в исполнении 9, включающая графический контроллер (режимы Text и HGR в цветном и монохромном исполнениях) и контроллер памяти (эмулятор Language card).
Кроме этого, реализована полная поддержка оборудования прототипа Агата, американского компьютера Apple II, как в исходном исполнении (без автостарта ROM), так и в модификации Apple II Plus, с платой Language card, дисководом Shugart и, опционально, платой Microsoft Softcard, реализованной на базе модуля эмуляции процессора Z80 из проекта Fuse. Отличительной особенностью эмулятора является то, что он позволяет создавать свою конфигурацию системы из набора доступных модулей, примерно так, как это делалось в реальности, а затем сохранять её на диске для последующего использования. Таким образом можно создать множество различных конфигураций систем, что-то вроде виртуального компьютерного центра. Функция сохранения состояния системы, также реализованная в эмуляторе, позволяет запоминать полный образ памяти, содержимое регистров процессора и всех периферийных устройств на жестком диске для последующего продолжения работы. Весь исходный код эмулятора распространяется свободно, на условиях лицензии GNU GPL. |