TMS9918 — это контроллер видеодисплея ( VDC ), производимый Texas Instruments , в руководствах упоминаемый как «Процессор видеодисплея» (VDP) и представленный в 1979 году. [1] TMS9918 и его варианты использовались в ColecoVision , CreatiVision , Memotech MTX , MSX , NABU Personal Computer , SG-1000 / SC-3000 , Spectravideo SV-318 , SV-328 , Sord M5 , Tatung Einstein , TI-99/4 , Casio PV-2000 , Coleco Adam , Hanimex Pencil II , PECOS и Tomy Tutor .
TMS9918 генерирует как сеточную графику символов (используемую для отображения текста или фоновых изображений), так и спрайты , используемые для перемещения объектов переднего плана.
Ключевые особенности этого чипа, как было подчеркнуто в презентации 1980 года Карлом Гуттагом (одним из разработчиков): [1]
Все микросхемы этого семейства обычно обозначаются именем TMS9918, иногда с постфиксом 'A'. 'A' указывает на вторую версию чипа, в которой были добавлены новые функции, наиболее заметным из которых является добавление режима растрового изображения (Graphic II).
TMS9918 использовался только в TI-99/4; TI-99/4A и другие компьютеры имели версию A VDC .
TMS9918A и TMS9928A выводят видеосигнал 60 Гц , в то время как TMS9929A выводит 50 Гц. Разница между «1» и «2» в «TMS9918A» и «TMS9928A» заключается в том, что версия «1» выводит композитное видео NTSC , в то время как версии «2» (включая TMS9929A) выводят аналоговый YPbPr [2] ( яркость Y и цветоразностные сигналы Pr (RY) и Pb (BY) ). Потребность в последнем была преобладающей в мире 50 Гц , включая Европу, из-за различных стандартов видеосигнала PAL и SECAM . Было более рентабельно выводить Y, Pr и Pb и кодировать их в PAL или SECAM в радиочастотном модуляторе , чем пытаться иметь отдельную консоль для каждого отдельного цветового стандарта. Версия «1» также оснащена внешним композитным видеовходом, что делает ее удобной для использования в видеотитраторах, которые могут накладывать текст или графику на видео, тогда как версия «2» такой возможности не имеет.
Первоначальные варианты TMS9918 были с обедненной нагрузкой NMOS и производились по 4,5 мкм процессу; это был один из первых чипов с обедненной нагрузкой NMOS, произведенных Texas Instruments в отличие от микропроцессора TMS9900 , который использовал старый процесс с обогащенной нагрузкой NMOS, требующий трех напряжений питания. Из-за большого размера кристалла и относительно высокой внутренней скорости TMS9918 работал достаточно тепло, чтобы потребовать радиатора — некоторые устройства, такие как тайваньская консоль DINA (гибрид Colecovision/SG-1000), не устанавливали радиаторы и страдали от сбоев в работе чипа. К 1983 году Texas Instruments уменьшила размер кристалла до 3 мкм, что позволило снизить его нагрев и больше не требовало радиатора — в консолях MSX и Sega SG-1000 использовались новые кристаллы TMS9918 с размерами 3 мкм, в то время как большинство консолей Colecovision имели оригинальный вариант с размерами 4,5 мкм (последняя партия консолей, выпущенных в 1985 году, имела более новую модель TMS9918).
Более поздние варианты микросхем серии TMS9918, TMS9118 , TMS9128 и TMS9129 , были выпущены в середине-конце 1980-х годов, но никогда не пользовались особой популярностью. Функция одного контакта изменена, а отображение видеопамяти позволяет использовать две микросхемы 16K×4 бит вместо восьми микросхем 16K×1 бит, необходимых TMS99xx. В остальном микросхемы полностью идентичны TMS9918A, TMS9928A и TMS9929A соответственно.
VDP имеет 16K × 8 бит внешней видеопамяти. Эта память находится за пределами адресного пространства ЦП . Наличие отдельного адресного пространства означает, что ЦП должен выполнять больше работы для записи или чтения этой памяти, но это также означает, что VDC не замедляет ЦП, когда он периодически считывает эту память для генерации дисплея. Кроме того, он оставляет больше адресного пространства доступным ЦП для другой памяти и оборудования, отображаемого в память.
В зависимости от используемого режима экрана не вся видеопамять может потребоваться для генерации изображения. В этих случаях ЦП может использовать дополнительную видеопамять для других целей. Например, одно из применений — как блокнот для распаковки графических или звуковых данных, хранящихся в ПЗУ картриджа. Другое популярное применение — создание второй копии некоторых или всех данных дисплея для устранения мерцания и разрывов, метод, известный как двойная буферизация .
Процессор взаимодействует с VDP через 8-битную шину . Вывод, управляемый процессором, разделяет эту шину на два «порта», порт управления и порт данных. Чтобы записать или прочитать байт видеопамяти, процессор сначала должен записать два байта на порт управления VDP во внутренний адресный регистр VDC . Затем процессор выполняет фактическую запись или чтение на порту данных VDP. Когда байт данных записывается или считывается, TMS9918 автоматически увеличивает внутренний адресный регистр. Эта функция автоматического увеличения ускоряет запись и чтение блоков данных. Порт управления также используется для доступа к различным внутренним регистрам.
TMS9918 имеет два отдельных и различных типа графики: символы и спрайты .
Символы обычно используются для создания текста или фоновых изображений. Они появляются за спрайтами.
TMS9918 имеет ряд режимов экрана, которые управляют характеристиками персонажей.
В TMS9918A доступны четыре документированных режима экрана (как упоминалось ранее, в TMS9918 отсутствует режим Graphic 2):
Технически режим 2 — это символьный режим с цветным набором символов. Экран горизонтально разделен на три области размером 256×64 пикселя, каждая из которых получает свой собственный набор символов. Последовательно печатая символы от 0 до 255 во всех трех областях, программа может имитировать графический режим, в котором каждый пиксель может быть установлен индивидуально. Однако результирующий буфер кадра нелинеен.
Программа также может использовать три одинаковых набора символов, а затем работать с экраном как с текстовым режимом с цветным набором символов. Фоновые узоры и спрайты тогда состоят из цветных символов. Это обычно использовалось в играх, потому что для заполнения и прокрутки всего экрана нужно было бы переместить всего 32×24 байта.
Проблема использования режима 2 TMS9918 заключалась в том, что каждая область размером 8×1 пикселя могла иметь только два цвета, передний план и фон. Их можно было свободно выбирать из 16-цветной палитры, но для каждой области размером 8×1 могли существовать только два цвета. При манипулировании экраном в BASIC с помощью LINE
команды можно было легко превысить максимальное количество цветов в 2 на область размером 8×1 и получить « разлив цвета ».
Texas Instruments изначально документировала только четыре режима, перечисленных выше. Однако бит, который включает режим 2, более интересен, чем изначально предполагалось. Его лучше всего описать как бит-модификатор для других режимов. Включение его делает три вещи: [3]
Имея это в виду, возможны три дополнительных режима. Обратите внимание, что хотя подлинные чипы TMS9918A поддерживают эти режимы, клоны и эмуляторы могут не поддерживать.
TMS9918 не имеет регистров прокрутки , поэтому прокрутка должна осуществляться программным обеспечением. Кроме того, прокрутка может осуществляться только по границам символов, а не попиксельно. [ необходима цитата ]
Спрайты обычно используются для создания движущихся объектов переднего плана. Они появляются перед персонажами (плитками).
Режимы 1, 2 и 3 могут отображать спрайты. На экране может быть до 32 монохромных спрайтов размером 8×8 или 16×16 пикселей, каждый спрайт имеет свой собственный, одиночный цвет. Иллюзия многоцветных спрайтов может быть создана путем наложения нескольких спрайтов друг на друга.
На одной строке сканирования не может быть более 4 спрайтов; горизонтальные пиксели дополнительных спрайтов отбрасываются. Спрайты с более высоким приоритетом отрисовываются первыми. VDP сообщает в регистре состояния номер первого отброшенного спрайта. ЦП может обойти это ограничение, вращая приоритеты спрайтов так, чтобы в каждом кадре отрисовывался другой набор спрайтов; вместо того, чтобы полностью исчезать, спрайты будут мерцать. Этот метод известен как мультиплексирование спрайтов.
Автоматическое перемещение спрайтов не обрабатывается VDP. Вместо этого, на практике, ЦП будет подхватывать вертикальное прерывание VDP - стандартный выход VDP, который автоматически запускается каждые 50 или 60 секунды (в зависимости от варианта чипа), в начале VBI ( вертикальный интервал гашения ). Затем ЦП переходит к процедуре обработки спрайтов в программном обеспечении, которая, в свою очередь, сообщает VDP, куда переместить спрайты.
Когда сталкиваются два непрозрачных пикселя в любой паре спрайтов, устанавливается флаг столкновения спрайтов. Это полезно для запуска более продвинутых процедур обнаружения столкновений внутри программного обеспечения, которые затем могут определить точное место столкновения и отреагировать на него, поскольку сам VDP не способен сообщить, какие два спрайта столкнулись.
Чипы семейства TMS9918 использовали палитру композитного видео . Цвета генерировались на основе комбинации значений яркости и цветности для TMS9918A и значений Y , RY и BY для TMS9928A/9929A.
TMS9918 имеет фиксированную 16-цветную палитру , состоящую из 15 отображаемых цветов и «прозрачного» цвета.
Согласно «Таблице 2.3 — Назначения цветов» в техническом описании [5] выходные уровни следующие:
Примечания: Цвета приведены исключительно в иллюстративных целях и были преобразованы из значений YPrPb (MS9928A/9929A) в sRGB с учетом гамма-коррекции . Колориметрия SMPTE C не учитывалась — см. следующий раздел для получения информации об альтернативных преобразованиях цветов.
[ оригинальное исследование? ]
Чтобы преобразовать Y, RY и BY в RGB, необходимо учесть, как возник Y, а именно:
Y = Р * 0,30 + Г * 0,59 + В * 0,11
Таким образом, вам необходимо использовать следующие формулы:
Р = РЮ + У В = ПО + У Г = (У - 0,30 * Р - 0,11 * Б) / 0,59
Но сначала вам нужно обратить внимание на тот факт, что для всех цветов, которые не имеют цветности - то есть черного, серого и белого - RY и BY не равны 0%, а все имеют смещение 47%. Поэтому вам нужно сначала вычесть это смещение из всех значений RY и BY. В связи с тем, что на практике этот шаг никогда не будет выполнен в одиночку, не проблема, что некоторые результаты будут отрицательными:
Теперь можно выполнить преобразование в RGB. Все результаты должны быть в диапазоне от 0% до 100%:
Вы можете прийти к выводу, что ошибочное значение 113% для R цвета "светло-красный" является результатом опечатки в техническом описании, и там RY не должно быть больше 80%. Но если вы измерите выходные сигналы микросхемы с помощью осциллографа , вы обнаружите, что все значения в таблице верны. Так что ошибка находится внутри микросхемы и приводит красный сигнал к насыщению. По этой причине это значение должно быть исправлено до 100%.
Кроме того, вам нужно учесть, что до этого времени для компьютерных мониторов, а также для телевизоров были доступны только электронно-лучевые трубки , и что эти ЭЛТ имели гамму . Микросхемы серии TMS9918 были разработаны для работы с телевизорами, и их ЭЛТ имели гамму 1,6 (примечание: ЭЛТ мониторов Macintosh имели 1,8, а ЭЛТ мониторов ПК — 2,2). Плоские экраны не имеют гаммы . По этой причине цвета TMS9918 выглядят здесь несколько бледными, как вы можете видеть в первой таблице выше. В таблице ниже используются гамма-скорректированные значения, которые (записаны в шестнадцатеричном формате, поскольку это необходимо для кодирования Википедии):
Примечание: используемые шаги следующие: округлить все значения до двух знаков после запятой, затем возвести в степень 1,6 для гамма-коррекции и, наконец, преобразовать диапазон значений от 0...100 до 0...255.
На смену Texas Instruments' TMS9918A пришла Yamaha V9938 , в которой были добавлены дополнительные растровые режимы, более красочные спрайты , вертикальный полноэкранный регистр прокрутки, вертикальные и горизонтальные регистры смещения, аппаратный блиттер и настраиваемая палитра . V9938 была разработана для стандарта компьютеров MSX2 и позже использовалась в стороннем обновлении TI -99/4A : Geneve 9640 "компьютер-на-карте".
На смену V9938 пришла V9958 , в которой были добавлены некоторые дополнительные цветовые режимы и горизонтальный двухстраничный регистр прокрутки. Эти чипы использовались в системах MSX2+/ turboR .
Toshiba сделала клон под названием T6950 и не поддерживает недокументированную функцию маскирования шаблона/цветовой таблицы в графическом режиме 2. [6] [ нужен лучший источник ] Позже Toshiba выпустила T7937A MSX-Engine со встроенным VDP и исправила функции маскирования. Оба VDP от Toshiba имеют немного другую палитру, чем Texas VDP, с более яркими цветами.
TMS9918 был основой для чипов VDP в Master System , Game Gear и Mega Drive (Genesis) . [ требуется цитата ] Они используют дополнительные режимы отображения и регистры, а также добавляют возможности аппаратной прокрутки и другие расширенные функции. Чип Ricoh PPU в Nintendo Entertainment System (Famicom) также основан на TMS9918. [ требуется цитата ]