Ага, и поэтапное уточнение эмулятора это как раз путь
Ага, и поэтапное уточнение эмулятора это как раз путь
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
Если в начальную концепцию заложены ресурсы для данного уточнения.
Поясню на примере.
Если эмулятор, скажем, предполагает, что выполнение команд процессора реализовано с покомандной дискретностью, т.е. команда выполняется за заданное число тактов, в процессе выполнения которой активность других устройств системы не эмулируется, то сменить подобную парадигму на потактовую эмуляцию команд, тем более на дробно-тактовую можно только переписав добрую (а то и злую) половину эмулятора.
У меня, например, в EmuStudio изначально закладывалась потактовая эмуляция ВМ2, однако я не знал в точности, как работают внутренние узлы процессора, и делал эту потактовую разбивку методом отсебятины. Кроме того, я не знал таймингов других чипов УКНЦ, коих великое множество (несколько штук). Словом, сперва реверс чипов, ВМ2, а уж потом можно задумываться мне или Никите Зимину, или еще кому о действительно точном эмуляторе УКНЦ.
На практике такое не всегда требуется.
Например, движок наносекундной синхронизации в эмуляторе ДВК просто не позволяет произойти событию, которое назначено на более позднюю наносекунду, чем текущая эмулируемая наносекунда. При этом источником виртуального времени является процессор ( если процессоров на шине несколько - то первый, зарегистрировавшийся на шине ). Процессор выполняет команду и если в процессе выполнения команды не было обращения к устройствам, то хотя процессор и считает виртуальное время максимально подробно, отдельно учитывая продлжительность всех микро-событий при выполнении команды - барьер синхронизации просто сдвигается сразу на столько виртуальных наносекунд, сколько заняло выполнение всей команды целиком. Если какие-то ожидавшие события при этом вышли за барьер - они все выполнятся до следующей команды процессора в порядке ожидавшегося ими виртуального времени. Если же в ходе выполнения команды на каком-то этапе происходит обращение к регистру устройства - процессор передаёт управление эмулятору устройства дважды - перед обращением и после обращения, при этом виртуальное время учитывает все микро-события произошедшие в процессоре по ходу выполнения текущей команды.
Такой подход в подавляющем большинстве случаев ( когда в одном такте больше 100 наносекунд ) на два порядка точнее потактового и практически не добавляет накладных расходов.
В вашей эмуляции выполнение команды процессором делится ли на составные части, такие как, например: чтение кода (со всеми составляющими - запрос к шине, ожидание), чтение данных, выполнение, запись результатов? Причем, во время каждой стадии другое устройство тоже может запросить доступ к разделяемому ресурсу (например, шине), и не одно устройство (другой процессор, контроллер ПДП и т.д.).
При покомандной абстрактной эмуляции такое невозможно, но в принципе, если не стоит задача эмулировать состояние отдельных линий шины - абстрактный подход позволяет решать любые проблемы не хуже потактового, но с гораздо большей точностью и скоростью.
Причина здесь в том, что изменение состояния устройства в промежутке между взаимодействиями с другими устройствами ( включая суммарную задерку ) в принципе может быть вычислено в любой момент не только пошаговым "инкрементным" методом, но и "одним махом". В таком случае заметно сложнее вычисления, но зато гораздо выше точность и итоговая скорость.
Поскольку наиболее "мелким" масштабом взаимодействия устройств в реальных архитектурах PDP-11 является цикл доступа к шине - ничто не мешает сделать вместо покомандной - "поцикловую" абстрактную эмуляцию. Снижение быстродействия эмуляции при этом будет невелико, но сохранятся все преимущества абстрактного подхода.
Возможно, в однопроцессорном ДВК покомандной абстрактной эмуляцией решаются все задачи 100% совместимости (возможно), но в УКНЦ такое не пройдет ввиду двухпроцессорности, ПДП видеоконтроллера и т.д.
Если потактовый эмулятор 100% совместим с оригиналом, то не может быть точность 'гораздо большая', чем у него) Есть или 100% точность, или эмулятор не точный. Это как со свежестью осетрины, или она первой свежести, или уже тухлая)
Теоретически при "поцикловой" эмуляции шины - никаких проблем быть не может, значит все указанные задачи могут быть решены чисто абстрактно.
Для всех асинхронных событий при чистом потактовом подходе точность падает то такта, в результате у любых периодических событий, не кратных такту - появляется нарастающая ошибка эмуляции.
Абстрактная наносекундная эмуляция даёт на два порядка большую точность.
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)