С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
@Titus, Будет время, поправь нумерацию выводов в 120й.
CPU:
DOUTC=>4
DINC=>5
INITC=>9
IAKOC=>8
ARC=>12
RPLYC=>11
PPU:
SYNCP=>30
INITP=>35
DOUTP=>32
A0=>33
A1=>28
Titus(24.07.2020)
Наименования сигналов:
ACT_WRITE - устанавливается по фронту записи в регистр октета. Сбрасывает по CLCA3_F3 (фаза завершения).
CLCA3_F1 - фаза F1. Передача данных видеоконтроллеру, аналогично записи в регистр планов 1 и 2.
CLCA3_F2 - фаза F2. Запись данных плана 0 в ОЗУ ПП.
RQ - сигнал запроса обмена с видеоконтроллером. Повторяет CLCA3_F1.
CC0 - сигнал запроса записи в планы 1 и 2. Повторяет ACT_WRITE.
Описание:
Запись в регистр октета (адрес 177024) начинается по переднему фронту DOUT. Одновременно с этим устанавливается сигнал подтверждения записи RPLY. Таким образом, запись в регистр октета имеет для процессора нулевую задержку. Одновременно с этим устанавливается сигнал CC0. Также во время активного DOUT производятся логические операции с младшим байтом, выставленным на шине AD0..AD7. Назовем этот байт OCTET.
1) if (MASK_Q0 == 1), then PLANE0_DATA = (OCTET & INC_COLOR_Q0) | (~OCTET & [PAPER_H_Q12.Q8.Q4.Q0.PAPER_L_Q12.Q8.Q4.Q0])
2) if (MASK_Q1 == 1), then PLANE1_DATA = (OCTET & INC_COLOR_Q1) | (~OCTET & [PAPER_H_Q13.Q9.Q5.Q1.PAPER_L_Q13.Q9.Q5.Q1])
3) if (MASK_Q2 == 1), then PLANE2_DATA = (OCTET & INC_COLOR_Q2) | (~OCTET & [PAPER_H_Q14.Q10.Q6.Q2.PAPER_L_Q14.Q10.Q6.Q2])
В итоге в регистрах данных планов, для которых MASK_Qx = 1, защелкиваются новые вычисленные значения.
По отрицательному фронту CLCA (такт 4) устанавливается сигнал RQ.
По положительному фронту CLCA (такт 8) на шину A0..A7 выводится содержимое регистра PLANE2_DATA.
Через пол-такта (такт 8.5) на шину D0..D7 выводится содержимое регистра PLANE1_DATA.
Еще через пол-такта по внутреннему сигналу видеоконтроллера A_D_LATCH (такты 9 и 10), содержимое шин A0..A7 и D0..D7 защелкивается видеоконтроллером с шин AG0..AG7 и DG0..DG7 в регистрах DC_H, и DC_L, соответственно.
Через один такт (такт 12) шины A0..A7, D0..D7 освобождаются для видеоконтроллера на 4 такта, сигналы RQ, CC0 переводятся в неактивное состояние.
По положительному фронту CLCA начинается процесс записи данных PLANЕ0 в ОЗУ ПП. Сигнал WE установлен, что означает запись в ОЗУ.
Такт 16 - на шину A0..A7 выводится младшая часть адреса планов PLANE_ADR.
Такт 16.5 - на шину D0..D7 выводятся данные регистра PLANE0.
Такт 17 - видеоконтроллером устанавливается сигнал RAS, по которому в ОЗУ защелкивается адрес строки (младшая часть адреса планов).
Такт 17.5 - на шину A0..A7 выводится старшая часть адреса планов PLANE_ADR.
Такт 18 - устанавливается сигнал CAS, по которому в ОЗУ защелкивается адрес столбца (старшая часть адреса планов).
Такт 19.5 - снимается сигнал RAS, по которому данные запоминаются в ОЗУ.
Такт 20 - завершение процесса.
Шины A0..A7, D0..D7 освобождаются, сигналы CAS и WE снимаются.
- - - Добавлено - - -
Спасибо за наблюдательность. Иногда не обращаю внимания на номера ножек, т.к. они в глаза не бросаются, номера и номера)
1801ВП1-120-Optimized - rev 15
- - - Добавлено - - -
Замечу, что рисуя диаграммы, я параллельно исправляю какие-то ошибки или неточности в оптимизированных схемах, так что если кто-то (например, @Ynicky) строит FPGA-модель по ним, то надо иметь это в виду.
Наименования сигналов:
ACT_WRITE - устанавливается по фронту записи в регистр адреса планов. Сбрасывает по CLCA4_F5 (фаза завершения).
CLCA4_F1 - фаза F1. Адрес планов записывается в видеоконтроллер.
CLCA4_F2 - фаза F2. Чтение данных плана 0 из ОЗУ ПП.
CLCA4_F3 - фаза F3. Чтение данных планов 1 и 2 из видеоконтроллера.
Описание:
Запись в регистр адреса планов (адрес 177010) начинается по переднему фронту DOUT. Одновременно с этим устанавливается сигнал подтверждения записи RPLY. Таким образом, запись в регистр адреса планов имеет для процессора нулевую задержку. Во время активного DOUT данные с шины AD0..AD15 защелкиваются в регистре адреса планов PLANE_ADR.
По отрицательному фронту CLCA (такт 4) устанавливается сигнал RQ.
По положительному фронту CLCA (такт 8) на шину A0..A7 выводится старшая часть регистра адреса планов PLANE_ADR.
Через пол-такта (такт 8.5) на шину D0..D7 выводится младшая часть регистра адреса планов PLANE_ADR.
Еще через полтора такта (такт 10) содержимое шин A0..A7 и D0..D7 защелкивается видеоконтроллером с шин AG0..AG7 и DG0..DG7 в регистрах DC_H, и DC_L, соответственно.
Через один такт (такт 12) шины A0..A7, D0..D7 освобождаются для видеоконтроллера на 4 такта, сигнал RQ переводится в неактивное состояние.
По положительному фронту CLCA начинается процесс чтения данных из ОЗУ ПП в регистр PLANE0_DATA.
Такт 16 - на шину A0..A7 выводится младшая часть адреса планов PLANE_ADR.
Такт 17 - видеоконтроллером устанавливается сигнал RAS, по которому в ОЗУ защелкивается адрес строки (младшая часть адреса планов).
Такт 17.5 - на шину A0..A7 выводится старшая часть адреса планов PLANE_ADR.
Такт 18 - устанавливается сигнал CAS, по которому в ОЗУ защелкивается адрес столбца (старшая часть адреса планов). В течение активного сигнала CAS данные с шины D0..D7 защелкиваются в регистре плана 0 (PLANE0_DATA).
Такт 19.5 - снимается сигнал RAS.
Такт 20 - завершение процесса чтения.
Шины A0..A7 освобождается, сигнал CAS снимается.
Устанавливаются сигналы RQ и CC1.
Такт 24..26 - данные планов 1 и 2, предоставленные видеоконтроллером, защелкиваются с шины D0..D7 в регистре PLANE1_DATA, и с шины A0..A7 в регистре PLANE2_DATA, соответственно.
- - - Добавлено - - -
Не смотря на то, что задержка (latency) записи в регистры октета, планов 1&2, адреса планов нулевая, пропускная способность (throughput) для этих команд значительно ниже.
Подробней можно расписать только зная точную растактовку ВМ2, а также особенности работы контроллеров памяти ПП и ЦП.
Однако, знание нюансов работы контроллеров и процессора, значительно увеличивает возможность оптимизации работы с графикой УКНЦ по скорости.
Последний раз редактировалось Titus; 25.07.2020 в 00:13.
Скрытый текст
[свернуть]
Описание:
Запись в регистр плана 0 (адрес 177012) начинается по переднему фронту DOUT. Если контроллер все еще занят операциями записи в регистр октета или в регистр адреса планов, то начало записи в регистр плана 0 задержится до окончания последнего цикла CLCA предыдущей операции. Во время всего активного цикла DOUT данные с шины AD0..AD7 защелкиваются в регистре плана 0 (PLANE0_DATA).
В последнем такте отрицалельного фронта CLCA (такт 7) происходит подготовка данных для записи.
По положительному фронту CLCA начинается процесс записи данных PLANЕ0 в ОЗУ ПП. Сигнал WE установлен, что означает запись в ОЗУ.
Такт 8 - на шину A0..A7 выводится младшая часть адреса планов PLANE_ADR.
Такт 8.5 - на шину D0..D7 выводятся данные регистра PLANE0.
Такт 9 - видеоконтроллером устанавливается сигнал RAS, по которому в ОЗУ защелкивается адрес строки (младшая часть адреса планов).
Такт 9.5 - на шину A0..A7 выводится старшая часть адреса планов PLANE_ADR.
Такт 10 - устанавливается сигнал CAS, по которому в ОЗУ защелкивается адрес столбца (старшая часть адреса планов).
Такт 11.5 - снимается сигнал RAS, по которому данные запоминаются в ОЗУ.
Если была запись байта (WTBT = 1), то:
Такт 12 - выдается сигнал RLPY, а также освобождаются шины A0..A7, D0..D7, сигналы CAS и WE снимаются.
В ответ на сигнал RPLY, процессор снимает сигнал DOUT.
Если же была запись слова (WTBT = 0), то происходит полный повтор предыдущего цикла CLCA, записывается по тому же адресу тот же самый байт.
В такте 20 выдается сигнал RLPY, а так же освобождаются шины A0..A7, D0..D7, сигналы CAS и WE снимаются.
В ответ на сигнал RPLY, процессор снимает сигнал DOUT.
Замечание: Словная запись в регистр плана 0 является побочным эффектом использования механизма словной/байтовой записи в память. Двойная запись одного и того же байта по тому же адресу связана с тем, что при записи в регистр плана 0 не задействован механизм поочередной записи младшего/старшего байта по последовательным адресам.
Alex_K(25.07.2020)
Диаграммы байтовой и словной записи полностью идентичны записи в регистр плана 0.
Описание:
Запись в ОЗУ ПП начинается по переднему фронту DOUT. Если контроллер все еще занят операциями записи в регистр октета или в регистр адреса планов, то начало записи в ОЗУ задержится до окончания последнего цикла CLCA предыдущей операции.
В последнем такте отрицалельного фронта CLCA (такт 7) происходит подготовка данных для записи.
Запись байта (WTBT = 1):
По положительному фронту CLCA начинается процесс записи данных в ОЗУ ПП. Сигнал WE установлен, что означает запись в ОЗУ.
Такт 8 - на шину A0..A7 выводится младшая часть адреса (LATCH_ADR).
Такт 8.5 - на шину D0..D7 выводятся данные с AD0..AD7, если запись по четному адресу, и данные с AD8..AD15, если запись по нечетному адресу.
Такт 9 - видеоконтроллером устанавливается сигнал RAS, по которому в ОЗУ защелкивается адрес строки (младшая часть адреса).
Такт 9.5 - на шину A0..A7 выводится старшая часть адреса (LATCH_ADR).
Такт 10 - устанавливается сигнал CAS, по которому в ОЗУ защелкивается адрес столбца (старшая часть адреса).
Такт 11.5 - снимается сигнал RAS, по которому данные запоминаются в ОЗУ.
Такт 12 - выдается сигнал RLPY, а также освобождаются шины A0..A7, D0..D7, сигналы CAS и WE снимаются.
В ответ на сигнал RPLY, процессор снимает сигнал DOUT.
Запись слова (WTBT = 0):
По положительному фронту CLCA начинается процесс записи младшего байта в ОЗУ ПП. Сигнал WE установлен, что означает запись в ОЗУ.
Такт 8 - на шину A0..A7 выводится младшая часть адреса (LATCH_ADR). Младший бит принудительно равен 0.
Такт 8.5 - на шину D0..D7 выводятся данные с AD0..AD7.
Такт 9 - видеоконтроллером устанавливается сигнал RAS, по которому в ОЗУ защелкивается адрес строки (младшая часть адреса).
Такт 9.5 - на шину A0..A7 выводится старшая часть адреса (LATCH_ADR).
Такт 10 - устанавливается сигнал CAS, по которому в ОЗУ защелкивается адрес столбца (старшая часть адреса).
Такт 11.5 - снимается сигнал RAS, по которому данные запоминаются в ОЗУ.
Такт 12 - шины A0..A7, D0..D7 освобождаются для видеоконтроллера на 4 такта, сигналы CAS и WE снимаются.
По положительному фронту CLCA начинается процесс записи старшего байта в ОЗУ ПП. Сигнал WE установлен, что означает запись в ОЗУ.
Такт 16 - на шину A0..A7 выводится младшая часть адреса (LATCH_ADR). Младший бит принудительно равен 1.
Такт 16.5 - на шину D0..D7 выводятся данные с AD8..AD15.
Такт 17 - видеоконтроллером устанавливается сигнал RAS, по которому в ОЗУ защелкивается адрес строки (младшая часть адреса).
Такт 17.5 - на шину A0..A7 выводится старшая часть адреса (LATCH_ADR).
Такт 18 - устанавливается сигнал CAS, по которому в ОЗУ защелкивается адрес столбца (старшая часть адреса).
Такт 19.5 - снимается сигнал RAS, по которому данные запоминаются в ОЗУ.
Такт 20 - выдается сигнал RLPY, а также освобождаются шины A0..A7, D0..D7, сигналы CAS и WE снимаются.
В ответ на сигнал RPLY, процессор снимает сигнал DOUT.
- - - Добавлено - - -
Я думаю, что практически нет смысла использовать запись в регистр плана 0, если видео-ОЗУ расположено в доступной части ОЗУ ПП (ниже адреса 0x8000, или же ниже адреса регистров 0xFE00, если страницы ОЗУ спроецированны в верхнюю память). И тут несколько причин:
1. Байтовая запись медленная из-за фиктивного чтения.
2. Словная запись медленная, т.к. занимает двойное время, но записывает один байт.
3. И, наконец, запись в регистр адреса планов (а ведь туда надо записать адрес) - это ОЧЕНЬ МЕДЛЕННАЯ операция, требующая чтения ОЗУ ПП, ОЗУ ЦП, и при этом еще и подтормаживающая в это время ЦП.
Словом, я бы рекомендовал программистам никогда не использовать запись в регистр планов 0.
Alex_K(25.07.2020)
Вообще, к разработчикам механизма работы с ОЗУ много вопросов. Я бы назвал придуманные ими конструкциями сложными, косячными и местами бесполезными. Множество ресурсов потрачено на регистровый доступ к памяти, и при этом вообще не предусмотрен никакой автоинкремент адреса. Относительно неплохие графические возможности без механизма быстрой переброски данных - это товарный поезд с дрезиной вместо тепловоза. А ведь в эти самые же потраченные ресурсы ПЛМ вполне можно было напихать подходящие для быстрой работы функции. Но, похоже, действительно, компьютер был задуман как чисто учебный, но никак не игровой.
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)