С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
OP не озвучил уровень детализации, на котором он хотел бы остановиться, поэтому все поняли по своему. Я разумеется не имею ввиду эмуляцию устройств на уровне транзисторов. ivagor и Conan уже озвучили приблизительные оценки производительности и трудности связанные с таким низкоуровневым моделированием. И всегда можно взять уровнем ниже.
Я это понял с более прагматичной позиции эмуляции законченных логических блоков.
Вот пример 8253 из MAME pit8253.h
И вот как выглядит например Вектор-06ц, он просто собран из типовых деталей: vector06.h vector06.cpp
Разумеется это не то же самое, что принципиальная схема, но это очень близко. Настолько близко, что при большом желании можно провернуть фарш назад, получить из этого Верилог и синтезировать его для ПЛИС.
Бихевиоральное описание на Верилоге можно скомпилировать Verilator-ом, оно не будет таким тормозным, как описание на уровне транзисторов. Но в нем будут все те же оговорки, что и для описания чипов "как в MAME" -- могут быть ошибки, или вольности в интерпретации неполной документации.
Больше игр нет
Все же уровень абстракции/эмуляции "счетчики, значения, логические сигналы" повыше, чем "логические элементы/транзисторы/конденсаторы", который, как я предполагал, имелся ввиду. А так без разделения на логические блоки, соответствующие функциональным блокам устройства, вообще сложно написать эмулятор, а уж многоплатформенный эмулятор и подавно.
- - - Добавлено - - -
Видимо, имелось ввиду "имитируя".
Чтобы эмулятор процессора автоматически правильно исполнял недокументированные команды, он должен имитировать работу процессора на схемном уровне (отдельных транзисторов/логических элементов). А такой эмулятор будет очень медленным.Немного поясню. У меня за плечами несколько эмуляторов разных процессоров, написанных с нуля. Везде я использовал один и тот же подход: берём байт из памяти и переходим на подпрограмму, соответствующую команде, зашифрованной этим байтом или их последовательностью, а эта подпрограмма уже меняет значение регистров и флагов в соответствии с документацией. Таким образом, при таком подходе нет места каким-то недокументированным командам, если только не написать соответствующие подпрограммы. А хочется чтобы эмулятор процессора пусть и не потранзисторно, но как-то на более низком уровне обрабатывал поступающую информацию, чтобы, например, недокументированные команды и другое недокументированное поведение работаю автоматически. В общем, чтобы написать эмуляцию процессора, а все возможные команды заработали автоматически и максимально правильно (идеально).
Последний раз редактировалось Spectramine; 24.12.2022 в 04:58.
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)