ZXMAK2 - Виртуальная Машина ZX Spectrum https://github.com/zxmak/ZXMAK2 (старая ссылка http://zxmak2.codeplex.com)
ZXMAK.NET - спектрум на C# http://sourceforge.net/projects/zxmak-dotnet
Не только пентагон. Есть еще "Орель БК-08", там тоже нет никаких задержек при обращении к ОЗУ.
По схеме "Орели" я могу ответить на любые вопросы (эта схема несколько лет висела у меня на стене в комнате вместо портрета любимой девушки).
В "Орели" порядк выборки attr/pixel или pixel/attr не меняется. Просто в начале каждого такта 3.5МГц анализируется сигнал запроса памяти процессором (сигнал /CSM, который вырабатывается из /MREQ и адресных линий A14, A15). Если он активен - то процессору предоставляется шина памяти на 1 такт. Считанное из памяти за этот такт значение защелкивается на регистре ИР22 и доступно на шине данных Z80 в течение всего последующего времени, пока активен /MREQ. Что же касается записи, то она происходит в указанный такт, когда процессору предоставлен доступ к ОЗУ, а в последующем такте (или тактах) активности /MREQ запись в ОЗУ не производится. Таким образом, в течение 2х тактов Z80 видеоконтроллер сможет обратиться к ОЗУ как минимум 1 раз, и этого как раз достаточно для нормального отображения экрана без задержек процессора.
Думаю, что подобным образом сделано и в Пентагоне. Менять порядок считывания pixel/attr сложно схемотехнически, да и не нужно, если требуется только гарантировать одно обращение видеоконтроллера к ОЗУ за период в 2 такта 3.5МГц.
С точки зрения эмуляции мультиколора - да, тут есть некоторая сложность, т.к. если Z80 не обращается к ОЗУ - то пиксели и атрибуты считываются оттуда каждый такт (т.е. избыточно), а если обращается - то возможны варианты +-такт. Если содержимое той области памяти, к которой обращается видеоконтроллер, изменяется так, что эта разница в +-такт становится существенной - то да, мультиколор начинает вести себя сложным образом.
Но это существенно только при формировании вертикальных мультиколорных полос. Кроме того, поскольку весь код, рисующий мультиколор, как правило, однороден и располагается в ОЗУ - то возможно предсказать и активность процессора в это время, а значит, и точно рассчитать этот код. На практике, думаю, все это делалось эмпирически, т.е. методом проб и ошибок.
схемы под рукой нет, но насколько помню, в пентагоне шина данных процессора не лочится на время обращения видео генератора. Помню что порядок выборки attr/pixel управляется частью схемы на двух триггерах. Если происходит конфликт по памяти, то происходит смена очередности, т.е. если не удалось прочитать pixel, то он будет прочитан после attr и наоборот. Было бы интересно узнать чьи-то исследования этого вопроса, чтобы знать как в точности это происходит. Т.к. по схеме много ньюансов зависит от того, по каким фронтам сигнала меняется состояние элементов схемы.
ZXMAK2 - Виртуальная Машина ZX Spectrum https://github.com/zxmak/ZXMAK2 (старая ссылка http://zxmak2.codeplex.com)
ZXMAK.NET - спектрум на C# http://sourceforge.net/projects/zxmak-dotnet
Она же 48я? Меня интересует конечно всё, но волнуют именно 128+BDI+AY. Всех моделей конечно не охватить, но как дела хотя бы у тех, что на наших БМК?
O_o Разве? Я думал, что считываются два байта, а потом в регистре точки сдвигаются. Как заканчиваются - всасывается следующий+цвет - один раз в 4 такта.
Последний раз редактировалось NovaStorm; 19.05.2015 в 09:15.
Заводская - 64К (не 48), но схем расширения до 128К, 256К и более было полно в ходу. Двое моих знакомых десятками дорабатывали "Орели", а ведь были еще и конкуренты.
Серийно выпускались контроллеры дисковода и принтера (было две удачные модели от независимых производителей), которые подключались к штатному системному разъему. Я думаю, что большинство днепропетровских владельцев "Орелей" подвергли их расширению и подключению дисковода. Разве только те владельцы, которые до середины 1993г перешли на другие платформы (Amiga, PC) и продали/выкинули свои "Орели", пропустили этап расширения.
Конкретно в "Орели" применяется двойная буферизация. Для первичного защелкивания пикселей и атрибутов установлено два регистра (ИР27 - DD26, DD27), данные в одном из которых защелкиваются всякий раз, когда видеоконтроллер обращается к памяти. Происходит это, как я уже говорил, каждый такт 3.5МГц (если процессор не обращается к памяти) или, по крайней мере, не реже 1 раза каждые 2 такта, если процессор к памяти обращается.
Из этих промежуточных регистров пиксели поступают в сдвигающий регистр (ИР9 - DD32), а атрибуты - в мультиплексор с памятью (2 микросхемы КП13 - DD33, DD34), на выходе которых защелкивается либо цвета атрибута, либо цвет бордюра. Таким образом, неважно, сколько раз и когда именно видеоконтроллер считал из памяти данные. В нужный момент, когда данные переносятся из первичных буферов во вторичные, данные гарантированно верны.
Последний раз редактировалось Barmaley_m; 20.05.2015 в 02:08.
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
Выборка кода операции (цикл M1) - это полтора такта, а не два, хотя при прочих обращениях к памяти (чтение/запись данных) сигнал /MREQ действительно активен два такта. Но, как я сказал выше:
Шина данных считывания памяти в "Орель БК-08" отделена от шины данных Z80. Данные от памяти поступают на ШД Z80 через регистр-защелку ИР22. Там они защелкиваются и остаются верными в течение всего времени, пока активен сигнал /MREQ, а сама память в это время уже может быть занята другими делами (т.е. отдавать данные видеоконтроллеру).Сообщение от Barmaley_m
Именно с этим связано то, что в фирменном Спектруме конфликт процессора и видеоконтроллера разрешается с тормозами. Разработчики сэкономили микросхему-регистр, тем самым удалось снизить стоимость компьютера. Советские же инженеры сочли такую экономию неэффективной, и реализовали полностью прозрачный доступ, поставив лишний регистр. Вероятно, стоимость регистров в 1982г и 1990г сильно различалась. И вообще регистры - это микросхемы средней степени интеграции, они появились позже, чем "мелкая логика".
Ну и да, шина адреса памяти в "Орели", да и вообще во всех ZX, тоже не одна на всех. Есть ША процессора, есть ША видеоконтроллера. На микросхемы памяти подается адрес с одной из них через мультиплексор 4:1. В фирменном ZX этот мультиплексор находится внутри ULA.
Последний раз редактировалось Barmaley_m; 20.05.2015 в 22:11.
ZXMAK2 - Виртуальная Машина ZX Spectrum https://github.com/zxmak/ZXMAK2 (старая ссылка http://zxmak2.codeplex.com)
ZXMAK.NET - спектрум на C# http://sourceforge.net/projects/zxmak-dotnet
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)