ivagor, а как ты эмулируешь флаги?
ivagor, а как ты эмулируешь флаги?
Прихожу без разрешения, сею смерть и разрушение...
В основном варианте никаких специальных усилий для коррекции флагов не прилагается, как команды z80 сформировали, так и есть.
Задача - запуск программ для 8080, самый вероятный источник программ - специалист, поэтому тренируюсь на нем. Приоритеты в решении этой задачи:
1. Быстродействие
2. Точность во всех проявлениях (флаги, соотношение длительностей команд и т.п.)
Сейчас п.1 на порядки важнее. Несовпадение установки флага четности влияет из популярных программ только на потомки микрософтовского бейсика 3.2. Пробное добавление коррекции этого флага показало, что если очень надо, то можно и корректировать, но при наличии патченых под z80 версий бейсика за флаг четности можно особо не переживать, лучше пусть эмулятор работает побыстрее.
Так сам флаг необязательно корректировать, можно сохранять последний результат несовместимой команды и потом, когда надо, просто проверять его на чётность каким-нибудь OR. И для скорости иметь два набора таблиц с двумя вариантами эмуляции, которые будут неявно переключаться (тот самый "inc h" или "ld h,?") после команды, чтобы для совместимых не замедляться сохранением и проверкой результата.
Прихожу без разрешения, сею смерть и разрушение...
Т.е. как я понимаю разделить обработку флага четности на 2 части: в арифметической команде сохранить результат, который возможно потребуется проверить на четность, и переключить таблицу на условные переходы с проверкой на четность. Плюс там еще надо предусмотреть возможность переключения обратно на "облегченные" варианты после того, как "подозрительный" результат или сам флаг четности станут неактуальны. Сам бы я так делать не стал, слишком много мороки и слишком много кода, проще сразу проверить и установить флаг четности после арифметических команд (хотя в быстром варианте это тоже привело к сильному разбуханию кода). Ну и повторюсь - в этом нет серьезной необходимости, вот если кто-нибудь сделает программу или игрушку сильно завязанную на флаг четности, тогда можно будет еще подумать над этой темой.
Интерпретатор 8080 на 8080 оказался не настолько хуже интерпретатора на z80, насколько я ожидал. Медленнее на 25-33%, по размеру в полтора раза больше. Но если z80 на 20 МГц есть, то с подобными 8080 напряженка.
Прихожу без разрешения, сею смерть и разрушение...
Да, интересно, сколько максимальных вложений уместится в память? :-)
То есть, 8080 эмулируется на 8080, который эмклируется на 8080, который эмулируется...
Скорее всего интересующиеся подобной тематикой в курсе, но не вижу ничего плохого в том, чтобы привести ссылку на x86 Alone Codera, там рядом и z80. А на его ютубовском канале можно посмотреть соответствующие стримы.
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)