Цитата:
Сообщение от
svofski
Я это понял с более прагматичной позиции эмуляции законченных логических блоков.
Вот пример 8253 из MAME pit8253.h
И вот как выглядит например Вектор-06ц, он просто собран из типовых деталей: vector06.h vector06.cpp
Разумеется это не то же самое, что принципиальная схема, но это очень близко. Настолько близко, что при большом желании можно провернуть фарш назад, получить из этого Верилог и синтезировать его для ПЛИС.
Все же уровень абстракции/эмуляции "счетчики, значения, логические сигналы" повыше, чем "логические элементы/транзисторы/конденсаторы", который, как я предполагал, имелся ввиду. А так без разделения на логические блоки, соответствующие функциональным блокам устройства, вообще сложно написать эмулятор, а уж многоплатформенный эмулятор и подавно.
Цитата:
Немного поясню. У меня за плечами несколько эмуляторов разных процессоров, написанных с нуля. Везде я использовал один и тот же подход: берём байт из памяти и переходим на подпрограмму, соответствующую команде, зашифрованной этим байтом или их последовательностью, а эта подпрограмма уже меняет значение регистров и флагов в соответствии с документацией. Таким образом, при таком подходе нет места каким-то недокументированным командам, если только не написать соответствующие подпрограммы. А хочется чтобы эмулятор процессора пусть и не потранзисторно, но как-то на более низком уровне обрабатывал поступающую информацию, чтобы, например, недокументированные команды и другое недокументированное поведение работаю автоматически. В общем, чтобы написать эмуляцию процессора, а все возможные команды заработали автоматически и максимально правильно (идеально).
Чтобы эмулятор процессора автоматически правильно исполнял недокументированные команды, он должен имитировать работу процессора на схемном уровне (отдельных транзисторов/логических элементов). А такой эмулятор будет очень медленным.