Сначала сделать чтение из буфера экрана размером 320х240 точек в буфер VGA. Потом запись стандартной графики в буфер экрана. Каждую точку экрана спектрума, включая бордер представить в виде одного байта и записать в буфер экрана.
Как только FPGA определит, что команда чтения или записи Z80 в/из ОЗУ должен подаваться запрос на доступ к ОЗУ - устанавливаться флаг или бит. Это значит, что как только будет закончен текущий пакет обращения к SDRAM со стороны блиттера или буфера VGA - следующий пакет будет отдан Z80. Так как пакеты по 8 слов можно выбрать один байт в первом слове. Остальные байты игнорировать соответствующими управляющими сигналами на SDRAM.
Как только произведен обмен Z80-SDRAM сбрасывать флаг доступа Z80 и следующий пакет могут использовать AUTO REFRESH, буфер VGA или блиттер. Пока блиттера нет. А AUTO REFRESH будем делать 5 циклов в начале строки. После этого загружаем 16 слов в буфер VGA. Как только начнется активная часть строки - начинаем брать по 1 байту из буфера VGA и выводить в ЦАП/HDMI. Во время кадрового бордера читать в буфер VGA не надо.
---------- Post added at 15:41 ---------- Previous post was at 15:31 ----------
Так как экран спектрума у тебя уже показывает - пока можно добавить запись этих точек в буфер экрана. Наверно в качестве ОЗУ у тебя кэш. Потом эти же данные будем брать из SDRAM.
Самый высоких приоритет при доступе к SDRAM будет у Z80. Затем AUTO REFRESH. Затем чтение из буфера экрана в буфер VGA. Затем чтение из экранной области стандартного ZX Spectrum-a и запись точек в буфер экрана. Самый низкий приоритет будет у блиттера.
В новых режимах чтение из экранной области стандартного ZX Spectrum-a и запись точек в буфер экрана не требуется. А в старых режимах не будет блиттера.
---------- Post added at 15:56 ---------- Previous post was at 15:41 ----------
Допустим, флаги имеют имена F1...F5 соответственно. 1- когда установлен. Чтобы определить, какой будет следующий пакет SDRAM анализируем флаги:
F1=1 - значит Z80.
F1=0, F2=1 - значит AUTO REFRESH.
F1=0, F2=0, F3=1 - значит буфер VGA и т.д.
Соответственно на SDRAM с помощью мультиплексора подаем адреса с Z80 или соответствующих счетчиков.
Флаг F2 устанавливать в начале каждой строки VGA и сбрасывать после выполнения 5 циклов регенерации. Флаг F3 устанавливаем как только прочитали и выдали на VGA 16 точек. Сбрасывать - когда загрузили из буфера экрана в буфер VGA (32 регистра по 8 бит) следующие 16 точек.





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