Кай вон, регенерирует 4мб модуль. Где 1024 строки. На мультиплексорах замаятся перебирать
Кай вон, регенерирует 4мб модуль. Где 1024 строки. На мультиплексорах замаятся перебирать
В процитированном далее на картинке фрагменте говорится о достаточно обычном (применялся например в векторе для внешнего ОЗУ) режиме регенерации, когда адреса перебираются и стробируются только RASом без CAS. Тут не идет речи о "встроенном счетчике", которого нет у РУ6 и РУ5. Встроенный счетчик для регенерации есть у РУ7, используется в режиме CAS before RAS.
Ну вот такой момент я вижу так. Цикл регенерации задаётся перебором адресов байтов в тв. строке Н3-Н7 от 0 до 31. Номер знакоместной строки задаются V3-V5 от 0 до 7. Во временном интервале пока V3 = 0 проходит 8 циклов Н3-Н7.(выводит на экран 8 строк, но регенерирует 32 одни и те же адреса 8 раз подряд из за V3 = 0) далее V3 = 1 проходит ещё 8 циклов (выводит на экран ещё 8 строк, регенерирует следующие 32 одни и те же адреса 8 раз подряд из за V3 = 1). И так ещё 2 раза пока V5 будет равен 0. Пока V5 равен 0 происходит перебор 128 адресов. В итоге цикл регенерации проходит за время вывода на экран 32 теле строк(4 знакоместные строки). При выводе на экран 312 строк регенерация произойдёт 9,75 раз. 32 строки множим на 9 полных циклов получаем 288 строк с полным циклом регенерации. Время регенерации в этих 9 циклах составит 32 строки умноженное на 64 микросекунды равно 2,048 миллисекунды. В не законченном цикле время удваивается для четверти адресов.
В каком месте видео контроллер может выбрать 4 теле строки подряд с перебором 128 адресов?
Ответ ни в каком, он так не работает.
Возьми к примеру 1 знакоместо в экранной области.
1 телестрока 1 знакоместо имеет адрес #4000 двоичный 01000000 00000000
2 телестрока 1 знакоместо имеет адрес #4100 двоичный 01000001 00000000
3 телестрока 1 знакоместо имеет адрес #4200 двоичный 01000010 00000000
4 телестрока 1 знакоместо имеет адрес #4300 двоичный 01000011 00000000
5 телестрока 1 знакоместо имеет адрес #4400 двоичный 01000100 00000000
6 телестрока 1 знакоместо имеет адрес #4500 двоичный 01000101 00000000
7 телестрока 1 знакоместо имеет адрес #4600 двоичный 01000110 00000000
8 телестрока 1 знакоместо имеет адрес #4700 двоичный 01000111 00000000
Заметь младший байт не меняется от строки к строке, а ведь он ответственен за регенерацию.
Думать, что всё довольно просто, не значит знать.
Вы напишите что именно вам непонятно, я объясню.
Последний раз редактировалось апро; 16.02.2022 в 02:30.
Биты адреса для памяти можно безвобранно перемешивать как душе угодно
Повторюсь: что мешает переставить биты в адресе местами? Религия? Политика? Тут такие темы запрещены =)
Уже объяснял: вместо V3-V5 подаем V0-V2, и получаем реген за восемь ТВ-строк вместо 64-х. На списке строк с адресами (#4000-#4700) это отлично видно.
Отрезанные V3-V5 подаются вместо старых V0-V2, и на выходе получим те же данные из памяти. Чипу без разницы, в каком порядке идет выборка.
Главное - перебрать все столбцы в первой фазе задания адреса за допустимый период. С чем успешно справляется даже обычная схема перебора.
В корне неправильное рассуждение. Часть адреса столбца формируется как раз из младшего байта, сигналы H3-H7. Вместе с V3-V5 они и дают адрес столбца.
Адрес строки (микросхемной) уже может быть любым, от него ничего не зависит. Туда подается каша из оставшихся сигналов, включая номер экрана.
Для начала диалога я бы попросил вас воздежаться от необоснованных обвинений кого бы то ни было в незнании. Это, как минимум, некультурно.
Далее, что у нас есть.
1. Есть счетчики H0-H4 (32 знакоместа), и счетчики V0-V7 (192 строки).
2. Есть память, РУ5, сигналы адреса - MA0..MA7. Для корректной регенерации необходимо перебирать все комбинации MA0..MA6 (всего 128 комбинаций). Перебирать МА7 не нужно, в соответствии с документацией.
3. То есть, чтобы осуществить регенерацию, нужно за период < 2ms прочитать данные из 128 ячеек со всеми возможнными комбинациями MA0..MA6
4. соответствии с организацией экрана спектрума, имеется такое соответствие счетчиков экрана и адреса процессора (для пикселей)
A0..A4 = H0..H4
A5=V3
A6=V4
A7=V5
A8=V0
A9=V1
A10=V2
A11=V6
A12=V7
A13=0
A14=1
A15=0
Всё что выше - это просто факты, надеюсь, они споров не вызовут.
Далее интереснее.
Что такое MA0..MA7 ? Это мультиплексированная шина адреса памяти.
А как именно она мультиплексируется?
Рассмотрим самый очевидный вариант: MA0...MA7 = A0..A7 во время выбора строки (RAS), и MA0..MA7=A8..A15 во время выбора столбца (CAS).
В этом варианте, при работе видеоконтроллера происходит перебор MA0..MA6 = H0..H4, V3,V4.
Все комбинации тут перебираются за 32 экранных строки (из-за V4 - она меняется каждые 16 строк). Это 32 * 64мкс = 2048мкс = 2.08 миллисекунды.
Это выше паспортных 2мс.
Именно этот вариант выше вы совершенно верно описываете и просчитываете.
Но он не единственный.
Что будет, если поменять мультиплексирование?
Скажем, так:
MA0..MA7 = A0..A4, A8, A9, A10 во время выбора строки
MA0..MA7 = A5, A6, A7, A11, A12, A13, A14, A16 во время выбора столбца.
Что изменилось?
для процессора - ничего. Ему это перепутывание никак не заметить.
Для видеоконтроллера - да тоже без разницы.
А вот для регенерации разница прям важна.
Получаем, что MA0..MA6 = H0..H4, V0, V1. Значит видеоконтроллер перебирает все возможные комбинации MA0..MA6 за 4 экранных строки. Таким образом, вся память регенерируется за 4 * 64 = 256 микросекунд. Что существенно ниже требуемых значений, и это хорошо.
Этот же подход можно расширить на РУ7 (перебираем MA0..MA7 за 512мкс), и на SIMM30 (перебираем MA0..MA8 за 1024мкс).
Конечно, не каждый клон спектрума использует этот трюк, это лишь один из возможных способов уложить регенерацию в паспортные значения.
Задавайте вопросы.
Если касается Спектрума, то правильнее счетчики знакомест обозначать как H3-H7, ибо H0,H1 и H2 позиционируются как системные, H0 - 3,5МГц, H1 - 1,75МГц, H2 -0,875МГц. Причем H0 - участвует в формировании RAS, CAS и клоков проца, H1 - это селектор доступа к памяти - либо видеоконтроллер, либо процессор, H2 - выбор видео/атрибуты
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)