Свежая версия 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 :v2_thumb::
http://zx.pk.ru/attachment.php?attac...1&d=1316991324
Верхняя бегущая строка полностью на бордюре! плюс динамичный мультиколор над горой :) И это все на 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; }
}

