Texas Instruments TMS9918
Texas Instruments TMS9918 — электронный компонент, микросхема видеоконтроллера (VDP, Video Display Processor). Разрабатывалась компанией Texas Instruments в 1977—1979 годах и была выпущена в 1979 году. Была использована в собственном домашнем компьютере компании, TI-99/4A. Впоследствии использовалась в ряде компьютеров и игровых консолей начала 1980-х годов. TMS9918 также лежит в основе ряда других, более поздних, видеоконтроллеров.
В разработке принимало участие шесть человек. Один из них, Karl M. Guttag, занимался разработкой спрайтовой подсистемы, интерфейса с динамическим ОЗУ и проверкой логики в ряде версий микросхемы[1].
Технические характеристики
[править | править код]- Видео-ОЗУ: 16 КБ (внешнее)
- Текстовые режимы:
- 40×24 символов
- 32×24 символов
- Графический режим:
- 256×192 точек (16 цветов)
- Спрайты:
- 32 спрайта на экране
- До 4 спрайтов на одной строке изображения
- 1 цвет на спрайт
- Фиксированная палитра из 16 цветов
Список систем
[править | править код]Микросхема TMS9918 применялась в следующих системах:
Компьютеры:
- Texas Instruments TI-99/4 и TI-99/4A (1979)
- Sord M5 (1982)
- MSX1 (1983)
- Spectravideo (1983)
- Memotech MTX500/MTX512/RS128 (1983)
- Sega SC-3000 (1983)
- Tatung Einstein (1984)
Игровые консоли:
- ColecoVision (1982)
- Sega SG-1000 (1983)
- Sega Master System (1986)
- Sega Game Gear (1990)
Дальнейшее развитие микросхемы TMS9918:
- Yamaha V9938 (1985)
- Yamaha V9958 (1988)
Версии микросхемы
[править | править код]Существует несколько версий микросхемы — TMS9918, TMS9918A, TMS9928, TMS9928A, TMS9929A, TMS9118 и TMS9128. Буква A в названии обозначает вторую версию микросхемы, в которой добавлен новый растровый видеорежим (Graphic II) и некоторые другие возможности. Первая версия микросхемы, не имеющая буквы A в обозначении, использовалась только в компьютере TI-99/4. В компьютере TI-99/4A и во всех других компьютерах, использующих эту микросхему, применяется её вторая версия.
Версии TMS9918A и TMS9928A генерируют изображение с частотой кадровой развёртки 60 Гц, версия TMS9929A имеет частоту кадровой развёртки 50 Гц.
Микросхема TMS9918A формирует полный цветной композитный видеосигнал с системой кодирования цвета NTSC, тогда как версия TMS9928A формирует сигналы в формате YPbPr — выход яркости Y и выходы цветоразностных каналов R-Y, B-Y. Такой выход требовался из-за применения в различных странах, например в Европе, телевизионных стандартов с частотой кадровой развёртки 50 Гц и различными системами кодирования цвета — PAL, SECAM. Использование внешнего кодера цвета в этом случае было более эффективно с точки зрения стоимости системы.
Все версии микросхем этой серии обычно называют TMS9918, иногда включая также букву A.
Дальнейшее развитие
[править | править код]Для применения в компьютерах стандарта MSX2 компанией Yamaha на основе TMS9918A была разработана микросхема V9938. Она программно совместима с TMS9918A, но имеет дополнительные растровые видеорежимы, меньше ограничений на использование цвета для спрайтов, регистр вертикальной прокрутки изображения, возможность выполнения различных команд (перемещение или закрашивание блоков в видеопамяти) и настраиваемую палитру. Также V9938 использовалась в карте расширения Geneve 9640 для компьютеров TI-99/4A.
В свою очередь, на основе V9938 компанией Yamaha была разработана микросхема V9958, предназначенная для применения в компьютерах стандарта MSX2+ и MSX Turbo R. Отличия между этими микросхемами были не такими значительными — были добавлены несколько графических режимов с возможностью использовать большее количество цветов, а также регистр горизонтальной прокрутки изображения.
Компания Yamaha также вела разработку следующей микросхемы в серии, V9978, которую изначально предполагалось использовать в компьютерах стандарта MSX Turbo R. Но по некоторым причинам её разработка не была закончена. Впоследствии микросхема была выпущена под названием V9990. Она имела возможности, анонсированные для V9978, однако не имела обратной совместимости с микросхемами серии. V9990 всё же была применена на компьютерах MSX, в составе карты расширения графических возможностей Graphics9000 от стороннего производителя (Sunrise Swiss).
Микросхема TMS9918A также использовалась в ранних игровых системах компании Sega. Впоследствии она была использована в основе специализированного видеоконтроллера игровых консолей Sega Master System и Sega Game Gear (имеет обозначения 315-5124, 315-5246, 315-5378). В этих микросхемах, помимо собственных возможностей, присутствуют все оригинальные видеорежимы TMS9918A. Видеоконтроллер игровой консоли Sega Mega Drive (микросхема 315-5313) имеет обратную совместимость с видеоконтроллерами Master System и Game Gear, однако режимы TMS9918A в нём отсутствуют.
Технические подробности
[править | править код]Интерфейс
[править | править код]TMS9918 имеет интерфейс для работы с видеопамятью, имеющей организацию 16K 8-разрядных слов. Эта память находится на собственной адресной шине видеоконтроллера, вне адресного пространства основного процессора системы, и напрямую ему недоступна. Для помещения данных в видеопамять основной процессор системы должен передавать их через управляющие порты видеоконтроллера. Такое решение имеет как недостаток — невозможность напрямую работать с графическими данными, так и преимущества — работа видеоконтроллера не замедляет основной процессор (что происходит в системах с видеопамятью, расположенной в основной памяти, при одновременном обращении устройств к памяти), и не занимает его адресное пространство.
Процессор взаимодействует с видеоконтроллером через два восьмиразрядных порта. Через эти порты процессор может передавать команды для видеоконтроллера, и данные для помещения в видеопамять, а также опрашивать текущее состояние видеоконтроллера. Для передачи данных в видеопамять требуется установить текущий адрес в видеопамяти, после чего можно передавать данные. Важной особенностью TMS9918 является наличие автоматического приращения адреса видеопамяти при передаче каждого байта, что позволяет избежать ручной коррекции адреса для каждого байта при блочных пересылках данных.
Видеорежимы
[править | править код]Микросхема TMS9918A реализует четыре видеорежима. Как сказано выше, TMS9918 не имеет режима Graphic II:
Mode 0 (Text): монохромный текстовый режим 40×24 символов. Так как горизонтальное разрешение экрана 256 точек, каждый символ имеет ширину 6 точек. В этом режиме недоступно аппаратное отображение спрайтов и изменение цвета рамки.
Mode 1 (Graphic 1): 32 x 24 символов (256×192 точек). Возможно использование 256 различных символов, изображение которых задаётся программно. Символы делятся на 32 группы по 8 символов, каждой из этих групп назначается два цвета — фона и изображения. Таким образом, например, символы 0..7 всегда будут иметь одинаковые цвета фона и одинаковые цвета изображения.
Mode 2 (Graphic 2): 32 x 24 символов (256×192 точек). Возможно использование трёх наборов по 256 символов, изображение которых задаётся программно. В каждом символе каждого из наборов может использоваться до 16 различных цветов, однако каждая строка точек символа (линия из 8 точек) может иметь только два цвета.
Mode 3 (Multicolor): растровый режим 64×48 точек. Имеет очень низкое разрешение, из за чего редко использовался. Каждая точка может иметь свой цвет, любой из 16 доступных. При этом спрайты остаются в высоком разрешении, таком же, как в режимах Graphic 1 и 2.
Спрайты
[править | править код]В режимах Mode 1, 2 и 3 видеоконтроллер может отображать аппаратные спрайты. Всего возможно отображение до 32 монохромных спрайтов на экране, размером 8×8 или 16×16 точек. Все спрайты должны быть одного размера. Каждый спрайт может иметь собственный цвет. На одной горизонтальной строке экрана возможно отображение до 4 спрайтов, если это значение превышено, остальные спрайты на этой строке не отображаются. При этом работает простейшая система приоритетов — спрайты с меньшим порядковым номером отображаются первыми. Ограничение на количество отображаемых на строке спрайтов может быть частично обойдено программно, изменением их порядковых номеров каждый кадр. В этом случае вместо полного исчезновения спрайтов, попадающих под ограничение, они отображаются все, но с мерцанием (присутствуют не в каждом кадре). Такая техника имеет название мультиплексирование спрайтов (sprite multiplexing).
Возможность автоматического перемещения спрайтов у видеоконтроллера отсутствует, эта задача должна решаться программным способом. Видеоконтроллер имеет возможность генерации прерывания по началу вертикального обратного хода луча развёртки — оно происходит каждый кадр, то есть каждые 1/50 или 1/60 секунды, в зависимости от версии микросхемы и стандарта кодирования цвета. Процессор должен нужным образом изменять положение спрайтов в обработчике этого прерывания.
Когда две непрозрачных точки любой пары спрайтов накладываются друг на друга, устанавливается флаг столкновения спрайтов. Это может быть использовано для определения необходимости запуска более сложных процедур определения столкновения, реализованных в программе, и определяющих точное место столкновения и необходимую реакцию на него. При этом видеоконтроллер не предоставляет информации о том, какие именно спрайты участвуют в столкновении.
Режим Graphic 2
[править | править код]Технически режим Graphic 2 представляет собой текстовый режим с набором из 256 определяемых пользователем цветных символов. Экран делится по вертикали на три области размером 256×64 точки, каждая из этих областей имеет собственный набор из 256 символов, таким образом число символов в наборе равно числу отображаемых символов (768). При назначении каждой символьной позиции собственного символа из набора появляется возможность имитации графического режима, в котором может быть изменена каждая точка изображения. Однако, получаемый таким образом буфер кадра имеет нелинейную организацию.
Программа также может использовать три одинаковых набора символов и работать с экраном подобно текстовому режиму с цветными символами. В этом случае фоновое изображение и спрайты составляются из символов. Подобная техника часто использовалась в играх, так как для заполнения или прокрутки полного экрана в этом случае требуется обработать только 32×24 байта. Графика для подобных видеорежимов должна быть нарисована таким образом, чтобы переходы между границами блоков 8×8 точек не были слишком заметны.
Сложность создания цветной графики в режиме Graphic 2 заключается в ограниченных возможностях отображения цвета. На экране могут быть использованы все 16 цветов палитры, но каждая линия из 8 точек может содержать только два из них. Эти цвета можно произвольно выбирать из палитры в 16 цветов. При использовании оператора LINE в интерпретаторе BASIC можно легко увидеть это ограничение — когда пересекающиеся или близко расположенные линии разных цветов окрашиваются в цвет одной из линий. Этот графический артефакт называется color spill (растекание цвета). Природа этого артефакта полностью аналогична артефакту attribute clash (перекрытие атрибутов) на компьютерах ZX Spectrum, разница заключается только в размере областей, на которые распространяется ограничение по отображению цветов.
Видеоконтроллер TMS9918 не имеет возможности аппаратной прокрутки экрана. При необходимости она должна быть реализована полностью программным способом.
Особенности использования в играх
[править | править код]- В некоторых играх использовалась плавная прокрутка экрана — с шагом, меньшим, чем 8 точек. Она выполнялась с помощью прокрутки самого набора символов. Так как реальное выполнение такой операции в видеопамяти работало бы очень медленно (из-за необходимости читать и записывать каждый байт видеопамяти через порты видеоконтроллера), в видеопамять помещалось 8 наборов заранее сдвинутых символов.
- Игра Circus Charlie (MSX) имела плавную горизонтальную прокрутку экрана. Во избежание проблем с ограничением количества цветов на линию из 8 точек графика основной области игрового экрана была монохромной. В верхней части экрана присутствовал цветной фон, также имеющий плавную горизонтальную прокрутку, и при движении на нём наблюдался описанный выше артефакт color spill.
- Игра Pippols (MSX) имела плавную вертикальную прокрутку экрана. Таким образом, проблемы с ограничением количества цветов на линию из 8 точек в ней отсутствовали, позволяя персонажу, управляемому игроком, перемещаться по разноцветному плавно прокручиваемому фону. Однако, на фоне одновременно присутствовало очень мало разных типов объектов, так как набор символов для реализации скролла был сокращён в 8 раз. Также, возможно, присутствовали и другие причины (возможно, нехватка видеопамяти для спрайтов и разных объектов фона).
- В игре Road Fighter (MSX, гоночная игра с видом сверху) использовалась вертикальная прокрутка фона с шагом в 8 точек. Когда игрок разгонялся до полной скорости, такой шаг становился незаметным, и создавал впечатление плавной прокрутки фона. Такое решение было подходящим для этой игры, но столь высокая скорость прокрутки была бы неприемлема для других типов игр.
- В игре Knightmare (MSX) экран прокручивается вертикально с шагом в 8 пикселей, но очень медленно. Таким образом, большой шаг прокрутки не очень мешает игровому процессу. В игре Zanac аналогичная прокрутка происходит относительно быстро, но из за того, что фон в этой игре не взаимодействует с игроком, это также является незначительной проблемой. Больше всего проблем для игрока шаг прокрутки в 8 точек создаёт в игре Nemesis (горизонтальный шутер в стиле игры R-Type). С другой стороны, графика фона в Nemesis 2 имеет высокое качество, по сравнению с другими играми на TMS9918.
Примечания
[править | править код]См. также
[править | править код]- SN76489 — микросхема генератора звука, изначально выпущенная под обозначением TMS9919
Ссылки
[править | править код]- Texas Instruments TMS9918A/TMPS9928A/TMS9929A Video Display Processors — официальная документация по применению TMS9918A
- Texas Instruments TMS9918A VDP — неофициальная документация по программированию TMS9918A, ориентированная на платформу MSX