Свежая версия 220:
- добавлен сдвиг видеотаблиц в базовом классе ULA (если коротко - теперь прерывание всегда начинается с 0-го такта)
- проведена полная ревизия кода Z80 на предмет таймингов доступа к памяти/портам, все приведено к единой системе обработчики шины вызываются теперь в начале цикла записи/чтения. Поэтому нужно прибавлять несколько тактов если нужно знать точное время обращения (запись/чтение идет 3 такта на реальном железе)
- исправлены ошибки последовательнотей таймингов внутри машинных циклов Z80 (тайминги внутри инструкции)
- добавлен калькулятор таймингов, теперь в отладчике отображаются тайминги инструкций (для текущего состояния регисторов)
- UlaScorpion теперь сама отлавливает M1 и INT_M1 события, соответственно лишний флаг в интерфейсе IUlaDevice удален
- применение настроек видео когда выполнение приостановлено
- исправлено сохранение в Z80 snapshot (не сохранялся старший бит регистра R)
- исправлено поведение инструкции HALT (важно для ULA с contended memory)
- исправлен баг отладчика с точкой останова на HALT
- исправлена последовательность вызовов BeginFrame/EndFrame у девайсов (раньше начиналась с EndFrame)
- доработан базовый класс ULA, для лучшей поддержки схем со смещенным INT'ом
- скорректирована дешифрация портов AY8910, теперь работает как в оригинальном Spectrum 128 (0xC002=0xC000 и 0xC002=0x8000)
- скорректирована дешифрация портов Kempston Joystick, теперь работает как в оригинальном Spectrum 128 (0xE0=0x00)
- добавлен девайс ULA для оригинального ZX Spectrum 128, теперь можно смотреть мультиколорные демки заточенные под оригинальный спектрум с contended memory!
Последнее, вобщемто можно считать ключевым моментом всего обновления - теперь эмулируется ULA с contended memory! Повозиться пришлось немало, особенно с задержками для портов, ох и жесткая система - просто капец! Даже не думал что задержки для портов по такой сложной системе строятсяПорт #FE все еще может давать отклонения в задержке (было замечено занижение на 1T)
Скриншот мультиколорной демки на contended memory:
Верхняя бегущая строка полностью на бордюре! плюс динамичный мультиколор над горойИ это все на contended memory! Круто...
отлично! Окей, добавлю, в эмуляторе вобщемто уже сейчас используется такой интерфейс для отладчика:
осталось его причесать и сделать доступным для плагиновКод:public interface IDebuggable { void DoReset(); void DoStepInto(); void DoStepOver(); void DoRun(); void DoStop(); byte ReadMemory(ushort addr); void WriteMemory(ushort addr, byte value); void AddBreakpoint(ushort addr); void RemoveBreakpoint(ushort addr); ushort[] GetBreakpointList(); bool CheckBreakpoint(ushort addr); void ClearBreakpoints(); event EventHandler UpdateState; event EventHandler Breakpoint; bool IsRunning { get; } Z80CPU CPU { get; } int GetFrameTact(); int FrameTactCount { get; } }![]()


Порт #FE все еще может давать отклонения в задержке (было замечено занижение на 1T)
Ответить с цитированием
Размещение рекламы на форуме способствует его дальнейшему развитию 

