PDA

Просмотр полной версии : Видеоконтроллер Пентагона



Spectramine
10.11.2017, 16:49
Вопрос к тем, кто умеет читать схемы. Использует ли видеоконтроллер Пентагона шины адреса/данных при чтении видеоОЗУ, или он делает это по каким-то своим линиям?

Вопрос возник в связи с чтением этой темы (http://zx-pk.ru/threads/21212-tajmingi-pentagon-128-).html), и этого сообщения (http://zx-pk.ru/threads/23363-zx-devstudio.html?p=709588&viewfull=1#post709588). Судя по алгоритму Lion17, видеоконтроллер приостанавливает чтение видеопамяти только на время такта доступа к ОЗУ процессором. Но доступ к портам и ПЗУ процессором занимает шины адреса/данных, поэтому по идее видеоконтроллер должен приостанавливать чтение видеопамяти и в этим случаях, если он тоже использует шины адреса/данных для чтения. Может кто-нибудь прояснить этот вопрос?

shurik-ua
10.11.2017, 17:46
нет.
проц может читать ПЗУ без вейтов на любой частоте на какую способен.
видеоконтроллер делит шину адреса и данных микросхем ОЗУ, а не самого проца.

Spectramine
10.11.2017, 17:56
Понятно, спасибо. То есть доступ процессора к ПЗУ и портам не тормозит чтение видеоданных видеоконтроллером.

Totem
10.11.2017, 18:13
During I/O operations, a single wait
state is automatically inserted.

Spectramine
10.11.2017, 18:17
During I/O operations, a single wait
state is automatically inserted.

Ага, поэтому цикл доступа к портам и не 3 такта, а 4.

Spectramine
11.11.2017, 23:22
Просьба к владельцам реальных Пентагонов (не аппаратных эмуляторов) - запустить тест отсюда (http://zx-pk.ru/threads/21212-tajmingi-pentagon-128-).html?p=936393&viewfull=1#post936393) на своей машине, и рассказать о результатах. Буду очень благодарен.

blackinwoman
12.11.2017, 02:36
weiv, вот тут все хорошо расписано про Пентагон 128
https://drive.google.com/open?id=1NDKAy2v9m9TaRuopXUxu8DIzDFk0lonV

насчет теста как дойдут руки

Spectramine
12.11.2017, 20:54
Всё, запуск теста уже произведен, снято видео:
https://www.youtube.com/watch?time_continue=1&v=tiM_N8xuARs
Ещё раз огромное спасибо Portos13!

shurik-ua
12.11.2017, 22:55
а что эта программа позволила выяснить ?

Spectramine
12.11.2017, 23:04
а что эта программа позволила выяснить ?

Поведение видеоконтроллера Пентагона при переключении экранных страниц. Меня интересовало, на каком такте машинного цикла вывода в порт видеоконтроллер начинает читать данные с новой видеостраницы. Оказалось, что сразу после первого такта цикла, начиная со второго. (У фирменных машин 48/128/+2, судя по всему, видеостраницы переключаются после всего цикла вывода в порт, на начало следующей команды, а у +2A/+3 - как и у Пентагона, после первого такта цикла).

Northwood
29.11.2017, 17:16
Понятно, спасибо. То есть доступ процессора к ПЗУ и портам не тормозит чтение видеоданных видеоконтроллером.

ОЗУ, работающее на стандартной частоте 3.5 МГц, за время отрисовки на экране 1 байта, предоставляет 4 цикла доступа.

Видеоконтроллеру, чтобы вывести на экран 8 цветных пикселей, требуется за это время только 2 раза прочитать ОЗУ - один раз чтобы прочитать байт пикселей, второй раз чтобы прочитать байт цветного атрибута.

Процессор, работающий на такой же частоте 3.5 МГц, требует от ОЗУ за тоже время только 2 цикла доступа, т.к. в Z80 с каждым тактом чередуются режимы - чтение, запись ОЗУ / регенерация ОЗУ. Режим регенерации процессором в отечественных клонах Спектрума не используется, ОЗУ регенерируется самим видеоконтроллером. Процессор в Пентагоне лишь задаёт приоритет доступа к ОЗУ. Если процессор не обращается к ОЗУ, то все 4 цикла читает видеоконтроллер, ему столько не нужно, это просто дублированное чтение. Когда же процессору нужно обратиться к ОЗУ, то он это делает в приоритете, либо 1 и 3 цикл, либо 2 и 4, а видеоконтроллер тогда читает оставшиеся 2 цикла. Таким образом всем хватает, процессор не приостанавливается.

Spectramine
29.11.2017, 18:17
ОЗУ, работающее на стандартной частоте 3.5 МГц, за время отрисовки на экране 1 байта, предоставляет 4 цикла доступа.

Видеоконтроллеру, чтобы вывести на экран 8 цветных пикселей, требуется за это время только 2 раза прочитать ОЗУ - один раз чтобы прочитать байт пикселей, второй раз чтобы прочитать байт цветного атрибута.

Процессор, работающий на такой же частоте 3.5 МГц, требует от ОЗУ за тоже время только 2 цикла доступа, т.к. в Z80 с каждым тактом чередуются режимы - чтение, запись ОЗУ / регенерация ОЗУ. Режим регенерации процессором в отечественных клонах Спектрума не используется, ОЗУ регенерируется самим видеоконтроллером. Процессор в Пентагоне лишь задаёт приоритет доступа к ОЗУ. Если процессор не обращается к ОЗУ, то все 4 цикла читает видеоконтроллер, ему столько не нужно, это просто дублированное чтение. Когда же процессору нужно обратиться к ОЗУ, то он это делает в приоритете, либо 1 и 3 цикл, либо 2 и 4, а видеоконтроллер тогда читает оставшиеся 2 цикла. Таким образом всем хватает, процессор не приостанавливается.

То есть процессор приостанавливает чтение видеопамяти видеоконтроллером в Пентагоне строго два такта через один за 4 такта при обращении к ОЗУ, при любом цикле доступа к ОЗУ (выборка кода операции, чтение данных из памяти, запись данных в память)? Несмотря на то, что реально он обращается к ОЗУ только на одном из этих двух тактов?

- - - Добавлено - - -

(Подозреваю, что два такта через один проц тормозит чтение видеопамяти видеоконтроллером только на машцикле выборки кода операции, т.к. остальные машциклы доступа к ОЗУ 3хтактные, и собственно доступ происходит на 2м такте цикла, как минимум для цикла записи. Плюс вроде как рефреш предполагается только на цикле выборки кода операции).

Northwood
29.11.2017, 18:38
То есть процессор приостанавливает чтение видеопамяти видеоконтроллером в Пентагоне строго два такта через один за 4 такта при обращении к ОЗУ, при любом цикле доступа к ОЗУ (выборка кода операции, чтение данных из памяти, запись данных в память)? Несмотря на то, что реально он обращается к ОЗУ только на одном из этих двух тактов?

Не приостанавливает, а отодвигает время чтения видеоконтроллером, но всё происходит внутри промежутка времени, пока видеоконтроллер обрабатывает 1 экранный адрес (8 пикселей). В зависимости от того, когда процессору понадобилось обратиться к ОЗУ, возможен 1 из 2 вариантов:

а)
1 цикл - Z80 обращается к ОЗУ
2 цикл - видеоконтроллер читает пиксели
3 цикл - Z80 обращается к ОЗУ
4 цикл - видеоконтроллер читает атрибуты

б)
1 цикл - видеоконтроллер читает пиксели
2 цикл - Z80 обращается к ОЗУ
3 цикл - видеоконтроллер читает атрибуты
4 цикл - Z80 обращается к ОЗУ

Это и есть задание процессором приоритета доступа к ОЗУ. Но при любом раскладе, чтение остаётся внутри промежутка времени, пока ещё счётчики видеоконтроллера не увеличили адрес ОЗУ. На экране смена вариантов а) и б) никак не отражается, т.к. видеоконтроллер не сразу выводит прочитанное на экран, а сначала заносит 2 прочитанных байта в 2 буфера на 2х микросхемах 1533ИР23, и только когда счётчики увеличили адрес ОЗУ на единицу, то что было прочитано в прошлый раз, выводится на экран, одновременно пиксели и атрибуты, и в это же время видеоконтроллер читает из ОЗУ уже следующие 2 цикла. Поэтому кто первым прочитал ОЗУ, процессор или видеоконтроллер, никакой роли не играет.

- - - Добавлено - - -



(Подозреваю, что два такта через один проц тормозит чтение видеопамяти видеоконтроллером только на машцикле выборки кода операции, т.к. остальные машциклы доступа к ОЗУ 3хтактные).
Процессор вообще никогда не тормозит видеоконтроллер, ни при выборке кода операции, ни при чтении/записи данных. Лишь постоянно меняются циклы доступа к ОЗУ чётные и нечётные.

Spectramine
29.11.2017, 18:55
Не приостанавливает, а отодвигает время чтения видеоконтроллером, но всё происходит внутри промежутка времени, пока видеоконтроллер обрабатывает 1 экранный адрес (8 пикселей). В зависимости от того, когда процессору понадобилось обратиться к ОЗУ, возможен 1 из 2 вариантов:

а)
1 цикл - Z80 обращается к ОЗУ
2 цикл - видеоконтроллер читает пиксели
3 цикл - Z80 обращается к ОЗУ
4 цикл - видеоконтроллер читает атрибуты

б)
1 цикл - видеоконтроллер читает пиксели
2 цикл - Z80 обращается к ОЗУ
3 цикл - видеоконтроллер читает атрибуты
4 цикл - Z80 обращается к ОЗУ



А если процессору надо обратиться на 3-м или 4-м такте этого цикла? Тогда по идее должно быть ещё так:
в)
1 такт - видеоконтроллер читает пиксели
2 такт - видеоконтроллер читает атрибуты
3 такт - Z80 обращается к ОЗУ
4 такт - видеоконтроллер читает пиксели

и г)
1 такт - видеоконтроллер читает пиксели
2 такт - видеоконтроллер читает атрибуты
3 такт - видеоконтроллер читает пиксели
4 такт - Z80 обращается к ОЗУ





Это и есть задание процессором приоритета доступа к ОЗУ. Но при любом раскладе, чтение остаётся внутри промежутка времени, пока ещё счётчики видеоконтроллера не увеличили адрес ОЗУ. На экране смена вариантов а) и б) никак не отражается, т.к. видеоконтроллер не сразу выводит прочитанное на экран, а сначала заносит 2 прочитанных байта в 2 буфера на 2х микросхемах 1533ИР23, и только когда счётчики увеличили адрес ОЗУ на единицу, то что было прочитано в прошлый раз, выводится на экран, одновременно пиксели и атрибуты, и в это же время видеоконтроллер читает из ОЗУ уже следующие 2 цикла. Поэтому кто первым прочитал ОЗУ, процессор или видеоконтроллер, никакой роли не играет.


Вообще-то играет, для записи в ОЗУ. Если процессор пишет в ОЗУ строго на 3-м такте, может получиться так, что видеоконтроллер может прочитать записанное только что процессором на 4м такте (из той же ячейки памяти), а может и не прочитать, в зависимости от текущего порядка чтения пикселей/атрибутов. Это видно на вот этих результатах теста: http://zx-pk.ru/threads/21212-tajmingi-pentagon-128-).html?p=596826&viewfull=1#post596826 - полоска то появляется, то исчезает, в зависимости от порядка чтения пикселей/атрибутов видеоконтроллером.





Процессор вообще никогда не тормозит видеоконтроллер, ни при выборке кода операции, ни при чтении/записи данных. Лишь постоянно меняются циклы доступа к ОЗУ чётные и нечётные.
Я имею вввиду, что он приостанавливает чтение видеопамяти видеоконтроллером, ведь без обращения процессора к ОЗУ видеоконтроллер будет читать из ОЗУ все 4 такта.

Northwood
29.11.2017, 19:14
А если процессору надо обратиться на 3-м или 4-м такте этого цикла? Тогда по идее должно быть ещё так:
в)
1 такт - видеоконтроллер читает пиксели
2 такт - видеоконтроллер читает атрибуты
3 цикл - Z80 обращается к ОЗУ
4 такт - видеоконтроллер читает пиксели

и г)
1 такт - видеоконтроллер читает пиксели
2 такт - видеоконтроллер читает атрибуты
3 такт - видеоконтроллер читает пиксели
4 цикл - Z80 обращается к ОЗУ


Варианты в) и г), это производные вариантов а) и б). Я просто не описывал варианты, когда процессор вообще не обращается к ОЗУ или обращается не каждый цикл. Если внимательно посмотреть на схему, то можно увидеть, что доступ к ОЗУ переключают 2 триггера на 1533ТМ2, которые выполняют роль делителей частоты на 2. 1-й переключает "Процессор / видеоконтроллер", а второй переключает, что читать видеоконтроллеру - "Пиксели / атрибуты". Делитель частоты на 1-м триггере активируется процессором запросом доступа к ОЗУ. Когда 1-й триггер отдаёт доступ процессору, он останавливает 2-й триггер. Даже если Z80 постоянно будет требовать доступ к ОЗУ, оно всё-равно будет доступно процессору и видеоконтроллеру попеременно, за счёт 1-го триггера. Если процессор не обращается к ОЗУ, делитель на 1-м триггере останавливается, предоставляя ОЗУ полностью видеоконтроллеру. Как только процессор активировал линию MREQ, при отсутствии активности на линии RFSH, тут же переключается делитель на 1-м триггере, отдавая ОЗУ процессору. Но во время следующего такта 1-й триггер в любом случае переключается на доступ видеоконтроллеру.

Сам же процессор Z80 построен таким образом, что он ни при каких обстоятельствах не требует ОЗУ 2 такта подряд. Через каждый такт процессор активирует линию RFSH для регенерации ОЗУ. Но этот режим заблокирован схемой Пентагона - когда активируется линия RFSH, останавливается делитель частоты на 1-й триггере, переключаясь в исходное состояние - на доступ видеоконтроллеру.

Для чтения кода операции, требуется 4 такта, но из них к памяти нужно обратиться только 1 раз, чтобы прочитать 1 байт кода операции.
Для чтения данных, требуется 3 такта, но из них к памяти тоже нужно обратиться только 1 раз, чтобы прочитать или записать 1 байт данных.
Остальные такты АЛУ процессора выполняет свою внутреннюю работу. Само чередование режима регенерации с основной работой с ОЗУ заложено логикой работы самого процессора. И она полностью совпадает с логикой работы 1-го триггера на ТМ2. А поэтому и не требуется WAIT.

Spectramine
29.11.2017, 19:44
Я правильно понял, что первый триггер переключается по запросу от процессора раз, а затем автоматически обратно, далее он не переключается до нового запроса от процессора на доступ к ОЗУ?

Northwood
29.11.2017, 19:52
Я правильно понял, что первый триггер переключается по запросу от процессора раз, а затем автоматически обратно, далее он не переключается до нового запроса от процессора на доступ к ОЗУ?

Примерно так. Когда есть запрос от процессора (при неактивной линии RFSH), триггер тут же переключается на доступ процессору, при этом работает как делитель тактовой частоты процессора на 2. Поэтому следующий такт он переключается автоматически обратно - на доступ видеоконтроллеру. Если 3-й такт процессор опять обратится к ОЗУ, то триггер снова переключится на доступ процессору и т.д. Если обращения процессора нет, то триггер всегда в положении на доступ видеоконтроллеру.