Info Guide #11
05 июля 2015

Металлолом - о строении экрана 6912 с аппаратной точки зрения.

   О строении экрана 6912
      Ещё раз о строении экрана 6912
 (на этот раз с аппаратной точки зрения)

Lord Vader 

                 Введение

   Необычное  строение  экрана ZX Spectrum
принято объяснять с программной точки зре─
ния - мол, помучавшись  немного и вычислив
адрес  знакоместа, можно  потом достаточно
быстро  напечатать  символ процедурой типа
LD A,(DE):INC E:LD (HL),A:INC H, после че─
го, помучавшись ещё чуть-чуть и пересчитав
адрес  знакоместа  в адрес атрибута, можно
легко раскрасить оное.
   Нисколько  не  отрицая данные соображе─
ния, я постараюсь наглядно объяснить,поче─
му и с аппаратной точки зрения экран полу─
чился таким же. Для  того, чтобы полностью
понять  ход  моих  рассуждений, вам  нужно
иметь  некоторое  представление о том, как
работает  динамическая  память  (та самая,
которая  РУ5, РУ7  и  др.), ну или хотя бы
иметь  представление  о цифровой схемотех─
нике в общем. Важно уточнить, что в данной
статье просто изложены широко известные (в
узких  кругах...) факты, она не претендует
на оригинальность.

   Рассматривая схему ZX Spectrum 48k...

   Как известно, сэр Синклер был бизнесме─
ном  довольно, скажем так, экономным. Сле─
довательно, можно предполагать, что каждый
компонент  в схеме ZX Spectrum'а (оригина─
льного! Клоны  тут ни при чём, и вообще, в 
82 году  их  ещё не было и в проекте!) был 
выбран  по  принципу  наибольшей дешевизны
при  условии, что  он  ещё может выполнять
хоть как-то свои функции,пусть и не лучшим
образом.
   Рассмотрим  поподробнее  микросхемы ви─
деопамяти (видеопамятью  я называю то, что
известно  как  'медленная  память' ) - это 
4116-15, клоны интеловских чипов динамиче─ 
ской памяти 2116 по 16 килобит каждая. Ну,
как РУ5, только  вчетверо  менее  ёмкие. А
заодно, как  и i8080, требующие трёх пита─
ний -+5, +12  и -5 вольт: в 82 году NMOS-
чипы  с тремя питаниями уже давно вышли из
моды и перешли в разряд ширпотреба - поня─
тно, что 8 устаревших микросхем с чуть ус─
ложнённым  БП оказались дешевле 8 нормаль─
ных ДРАМок с одним питанием.
   '-15' в названии  микросхемы обозначает
access time  (в десятках наносекунд) - чем
больше это число, тем  медленнее чип, т.е.
15 - это 150 нс. В интернете  можно найти 
даташит  на  TMS4116-15 (один из клонов) и
узнать все времянки оттуда.
   Итак, что  же мы видим из этого даташи─
та: полный цикл доступа в память длится не
менее375 нс('access time'150 нс- время
от начала цикла  до получения данных). Ок─ 
ругляя  до  целого количества тактов 7 МГц
(140 нс каждый), получаем  цикл обращения
длительностью 3  такта  7 МГц. За время 1
знакоместа (8 пикселей с частотой  7 МГц)
нам  требуется  выбрать 2 байта, а если мы
затратим на выборку каждого по3 такта, то
останутся  свободными только2 такта 7 МГц
(1 такт Z80) - ни о каком доступе для про─
цессора  во  время выборки строки пикселей
можно было бы и не мечтать...

           Хитрость Альтвассера

   Однако намёк на то, как улучшить ситуа─
цию, содержится  прямо в даташите на 4116,
и  называется  он 'page mode'. Page mode -
это когда в микросхему 1 раз вводится RAS-
адрес, после чего производится серия обра─
щений  при  постоянном RAS=0 (и соответст─
венно, постоянном  RAS-адресе), стробируе─
мая последовательностью импульсов CAS, при
этом  возможно менять лишь CAS-часть адре─
са. Из  времянок  в  даташите следует, что
обращение  к двум разным CAS-адресам можно
произвести за4 такта 7 МГц, что соответс─
твует2 тактам Z80.
   Факт  того, что  ULA (на самом деле ULA
- это  аббревиатура  от  'uncommited logic 
array', и  называть так видеоконтроллер  в 
ZX Spectrum'е  некорректно, но  что ж  де─ 
лать, если все вокруг, например, Atari или 
Commodore, давали  имена собственные своим 
custom-чипам, а  Sinclair Research - нет?) 
обращается в видеопамять именно так, можно
подтвердить разными способами. Один из них
- взять  осциллограф, или ещё лучше, логи─
ческий  анализатор  и  воткнуть в плату ZX
Spectrum'а. Другой - купить за $$$ книгу о 
том, как ломали UL'у и прочесть там.
   Я выбрал  'диванный'  способ - взял ка─
кую-то VHDL-модель UL'ы на просторах инте─
рнета (которую разыскал  DimkaM и которая,
на самом деле,является клоном UL'ы TK90X), 
сунул её в симулятор, прикрутил к ней про─
стенький  testbench  и  заставил симулятор
рисовать картинки с симулируемыми сигнала─
ми.
   Так  как  в  данной  статье  я сознате─
льно не останавливаюсь подробно на вопросе
'contended memory', то есть вопросе задер─
жек  процессора в фирменном ZX Spectrum'е,
когда тот обращается в видеопамять во вре─
мя выборки данных для очередной линии изо─
бражения, то на картинке вы увидите только
циклы обращения UL'ы в видеопамять.

   Перед тем, как продолжить, уточну прин─
цип  мультиплексирования  адреса  в RAS- и
CAS-адреса  динамической памяти: как легко
видеть из схемы ZX Spectrum (надо смотреть
мультиплексор, который  связывает ША Z80 и 
адресную шину микросхем видеопамяти), мла─ 
дшие биты A6..A0 - это RAS-адрес, старшие
A13..A7  -  CAS-адрес.  Основная   причина
именно такого распределения состоит в том,
что процессор Z80 может осуществлять реге─
нерацию микросхем динамической памяти раз─
мером 16 кбит, при  этом он выводит содер─
жимое  счётчика регенерации (тот самый ре─
гистр R) как  раз  на  младшие битыA6..A0
ША. Кроме  того, такое  распределение  для
видеопамяти полезно тем,что в процессе вы─
борки  всего экрана регенерация всех рядов
памяти  в микросхемах  произойдёт  не один
раз: например, при выборке 6912 экрана ре─
генерация происходит 6 полных раз.

   Итак, см. рис. 1, где  показано  начало
выборки самой верхней строки видеопамяти:



                  Рис. 1

   Первый адрес, передаваемый в микросхему
- нули  (что соответствует байту по адресу
#4000 ),при второй выборке меняется только
CAS-адрес -#30, что  соответствует  байту
по адресу#4000+#30*128=#5800. Таким обра─
зом, происходит  выборка  байта пикселей и
байта  атрибутов. Вплотную к этой выборке,
длящейся 2 такта Z80, идёт следующая,в ко─
торой  выбираются байты#4001 и #5801 (из─
менился  только RAS-адрес). Итого ULA тра─
тит 4 такта Z80  на выборку  4 байт видео─
памяти для  2 знакомест, остальные 4 такта
остаются свободными для возможного обраще─
ния Z80.
   Именно группировка выборки 4 байт в ма─
ксимально  короткое  время позволила упих─
нуть  возможное обращение Z80 во время вы─
борки и именно эта группировка ответствен─
на за паттерн вейтов6-5-4-3-2-1-0-0, пов─
торяющийся  каждые  8  тактов  Z80 (что на
первый взгляд кажется парадоксальным).
   Из всего вышеописанного  следует важный
вывод - каждый  байт пикселей вместе с со─
ответствующим  ему байтом атрибутов должны
лежать  в памяти  по одному и тому же RAS-
адресу (т.е. иметь  одинаковые  младшие  7
бит адреса). Как легко убедиться,структура
экрана  удовлетворяет этому свойству - ад─
реса  соседних  байтов пикселей в пределах
знакоместа  отличаются на 256 и имеют мла─
дший  байт  адреса, совпадающий  с младшим
байтом адреса байта атрибутов.

  Таким образом, не только 'удобство' пе─
чати знакомест на ZX-экране определило его
структуру,  аппаратные  соображения  также
сыграли важную роль.



Другие статьи номера:

Об оболочке - журнал состоит из разделов, а разделы из статей.

От авторов - предисловие: Прошло 8 лет с момента выхода прошлого номера Info Guide. Что изменилось на Спектруме за это время?

Комьюнити - Spectrum в глубинке: в городе, население которого не превышает 15 тысяч человек, появление компьютера было сравнимо с изготовлением атомной бомбы в гараже.

Комьюнити - Forever 2015: отчет с демопати для всех 8-битных компьютеров.

Комьюнити - DiHalt 2015: отзывы от Lilka и Louisa.

Комьюнити - Как это было в Бразилии: история развития Спектрума в Бразилии от Paulo Silva.

Комьюнити - Беседа с Tiboh/Debris - программистом из Красноярска, долгие годы занимавшимся обработкой архивов спектрумовских программ.

Комьюнити - интервью с Raver/Phantasy взятое на irc.forestnet.org

Code - Этюды: Вызов функции по номеру, Поиск текста по номеру, Определение наличия музыкального сопроцессора, Установка пикселя на ATM Turbo 2, Библиотеки процедур в ALASM, Короткий генератор случайных чисел, Ускорение LD:PUSH.

Code - точка зрения: проекция пространства на экран из одной точки.

Code - чанковый эффект: Magnets stretching

Code - О мерцающем бордере: использование мерцание для повышения разрешения на бордере.

Code - Скриптование в демо: синхронизация эффектов под музыку и не только.

Графика - режиссура в демо: палитра изобразительных средств в Демомейкинге.

Графика - Мини-опрос художников: Dimidrol, Einar Saukas, Sand, Rion, riskej.

Графика - интервью с художником RayNoa/MAYhEM.

Музыка - Синхронизация музыки: nq рассказывает о создании треков под таймлайн.

Музыка - Беседа с MmcM/Sage group, известным AY-музыкантом, о его знаменитой технике.

Музыка - Беседа с Manwe/SandS - известным композитором, одним из старейших демосценеров России.

Музыка - Однобитная музыка: почему бипер ZX Spectrum продолжает вызывать восхищение?

Музыка - Горизонты турбосаунда: Cj Splinter делится опытом работы с TurboSound.

Музыка - Снова о плейерах Pro Tracker 3.x

Музыка - Музыкальный движок Muse 128b.

Системки - Как приручить IAR C Compiler.

Системки - Оберон для ZX Spectrum: Тонкости при разработке на Обероне в среде ZXDev (часть 1).

Системки - Оберон и ассемблер: Сопряжение с ассемблером (часть 2).

Системки - ZX-Basic Compiler: расширяемый кросс-компилятор.

Системки - Программы с поддержкой HDD, или "Linux" для Спектрума с винтом (или SD-картой).

Системки - iS-DOS/TASiS: о базовых принципах программирования под ОС iS-DOS/TASiS (часть 1).

Системки - iS-DOS/TASiS: как писать игры под iS-DOS/TASiS (часть 2).

Системки - iS-DOS/TASiS: Работа с палитрой и переключение графических режимов в TASiS (часть 3).

Металлолом - о строении экрана 6912 с аппаратной точки зрения.

Металлолом - Палитра для ZX Spectrum в различных графических режимах.

Металлолом - Эмуляция контроллера дисковода 1818ВГ93.

Дикий ум - Генерация и оптимизация кода в компилятора (часть 1)

Дикий ум - Генерация и оптимизация кода в компилятора (часть 2).

Дикий ум - ловля багов: самые типичные ошибки, при разработке на ассемблере Z80 (часть 1).

Дикий ум - ловля багов: самые типичные ошибки, при разработке на ассемблере Z80 (часть 2).

Дикий ум - алгоритм сжатия видео - 16 цветов на точку.

Игрушки - Разработка игр на Evo SDK (часть 1).

Игрушки - Разработка игр на Evo SDK (часть 2).

Игрушки - секрет успеха игры Jet Set Willy выпущенной в 1984 году.

Игрушки - Metal Man Reloaded: История создания от Oleg Origin.

Игрушки - Строение скриптового движка игры на примере L7 script engine.

Мыльница - Секретные кнопки в играх: Project ROBO, Ninjajar!, Uwol, Quest for Money, Zooming Secretary, Game About Squares.

Мыльница - письма: Kq, elfh, mig'95, wbr^NOT-Soft.

Мыльница - errata: Работа над ошибками.

Мыльница - об авторах журнала.


Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
ZX Club - заметки по игре Robo.
Проходилка - прохождение игры Paradise Lost.
Смайлик - ИЗ ЗАПИСОК ДЖЕHТЛЬМЕHА.

В этот день...   19 июля