Работаю над арбитром памяти. Мной обнаружены следующие моменты, которые могут помочь другим разработчикам в понимании проблемы совместимости по скорости процессора между Алестой и Amstrad CPC.
Арбитраж памяти в Алесте:
• Память работает на частоте 4 МГц.
• Так как шина памяти 16-битная, видеоконтроллеру для чтения двух байтов за раз достаточно одного доступа.
• Арбитр чередует доступы: каждый второй такт (частотой 4 МГц) жестко отдается видеоконтроллеру.
• Теоретически процессор может получить доступ к памяти в оставшемся такте. Фактически, процессор может работать с памятью с эффективной частотой до 2 МГц, используя одно окно доступа за каждый полный цикл.
Арбитраж памяти в Amstrad CPC:
• Основной цикл длится 16 тактов частоты 16 МГц (что эквивалентно 4 тактам частоты 4 МГц).
• Первые 8 тактов (16 МГц) жестко отданы под доступ видеоконтроллера. Для чтения двух байт используется режим страничного доступа (Burst Mode) DRAM: один раз выставляется сигнал /RAS и два раза сигнал /CAS.
• Вторые 8 тактов (16 МГц) отданы под возможный доступ процессора.
• В результате процессор также имеет эффективную частоту доступа к памяти 2 МГц, но это выглядит как одно окно размером в четыре такта (4 МГц), а не два отдельных окна, как в Алесте.
Вывод для совместимости:
Различие в структуре арбитражных окон (одно большое окно в CPC против чередования тактов в Алесте) делает Алесту в среднем несколько быстрее. Это неизбежно приводит к расхождению в производительности в строго зависящем от таймингов коде.
Для достижения полной совместимости с оригинальным CPC арбитр памяти должен быть скорректирован и эмулировать не только частоту, но и структуру доступа оригинала — то есть, использовать одно процессорное окно за цикл, а не чередование на каждом такте.




Ответить с цитированием