Центральный процессор
Центральным процессором N64 является RISC процессор R4300i разработки
MIPS. Тактовая частота 93,75 MHz.
MIPS была первой, кто выпустил на рынок 64-bit процессоры. 64 регистра
микропроцессора R4300 полностью 64-битные.
R4300 содержит 16Kb кэша инструкций и 8kb кэша данных. Кэш работает
по алгоритму WriteBack, то есть записывает данные в память лишь
тогда когда в этом есть необходимость. Все команды микропроцессора
имеет ширину 32 бита. Микропроцессор R4300 также как и все RISC-процессоры,
оперирует над регистровым файлом, то есть в его распоряжении находятся
32 integer -регистра по 64 бита и 32 floating-point регистра по
64 бита. Это дает компиляторам значительное преимущество - большинство
данных над которыми манипулирует R4300 находятся в регистрах и это
дает очень большой прирост производительности за счет эффективного
кода. Несмотря на то что R4300i не обладает суперскалярной архитектурой
как Pentium, то есть не может выполнять по две команды за такт и
его FPU не работает параллельно CPU, но тем не менее, по производительности
на равных тактовых частотах он примерно равен ему. Одни и те же
Си-алгоритмы работают на R4300 быстрее чем на Pentium, и вот почему:
Компиляторы для микропроцессоров архитектуры x86, очень интенсивно
используют память и стек, большинство команд это команды загрузки-выгрузки
регистров. Это "засоряет" код лишними командами пересылки
данных. В архитектуре Intel регистров мало - это основные EAX,EBX,ECX,EDX,
EBP и указатели ESI и EDI. Причем, регистр EBP используется компиляторами
только как указатель на данные в кадре стека, а не для вычислений.
Итого - практически 4 регистра по 32 бита против 32 регистров по
64 бита!
Доступ к floating-point регистрам R4300 свободный, а не в виде стека
из 8 регистров как у микропроцессоров Pentium, но FPU является довольно
простым- умеет вычислять лишь квадратный корень и арифметические
действия, в то время как FPU Intel вычисляет sin/cos/tg/arctg/ln
и проч. Обратите внимание, на полной тактовой частоте, с полной
загрузкой микропроцессор потребляет всего лишь каких-то...1,8 ватта!
При этом он еще может находится в sleep и power-down mode!
R4300 является также самым первым микропроцессором к 1995 году с
ценой меньше $1 за SPECint. То есть это наиболее дешевый процессор
обеспечивающий наибольшую производительность (что относится и к
остальным процессорам MIPS, да и вообще, к большинству RISC микропроцессоров/микроконтроллеров.)
MIPS является разработчиком архитектуры и дизайна кристаллов. Производством
самих кристаллов/чипов занимаются другие фирмы, лицензирующие у
MIPS ее технологию (например NEC). В мире существует очень много
кустомизированых версий архитектуры MIPS от самых разных фирм, даже
русских. (интересны архитектурные решения Altera Excalibur на базе
MIPS).
Системы SonyPlaystation также построены тоже на микропроцессорах
от MIPS, Sony Playstation на более раннем и более слабом 32х битном
R3000 и Playstation-II построена на очень мощном уже супер-скалярном
custom-чипе R5900 архитектуры MIPS.
Недавно у меня появилась информация, что SGI приобрела MIPS, но
в дальнейшем произвела откат. Как видно из пресс-релиза, SGI на
тот момент владеет 85% капитала MIPS.
Архитектура RISC микропроцессоров MIPS (так называемой серии R)
такова, что допускает 4 сопроцессора (COP, Co-Processor). Один из
них, неотъемлемый COP0 - встроенный блок управления/трансляции адресов,
сопроцессор программных исключений и ошибок. FPU является сопроцессором
COP1. Остальные сопроцессоры являются сопроцессорами расширения.
Это дает легкую возможность изготавливать специализированные версии
чипов и распараллеливать микропроцессоры, что и сделано в Sony Playstation-II.
Кроме того, Sony производят графическую подстанцию GScube, своеобразный
графический сопроцессор с 16-ю параллельно работающими процессорами
R5900, собираясь и в будущем наращивать возможности путем распараллеливания.
Это действительно, дается архитектурно и программно легко. Оба сопроцессора
PSX-II являются COP1 и COP2.
Видно что MIPS весьма популярна у производителей графических систем
и легко проектируемы на заказ мощные кустом-версии своих чипов.
Рекомендую сходить на сайт MIPS и ознакомиться с последними разработками
в этой области. В отличии от привычной рекламой шумихи Intel или
AMD, сопровождающей каждую следующую модель микропроцессора, MIPS
молчалива. Но возможности ее микропроцессоров очень высоки при ничтожном
энергопотреблении. Обязательно обратите внимание - эта мощность
дается не высокими тактовыми частотами/объемом кэша, а архитектурно..
Видеопроцессор.
Видеопроцессор N64 -Reality Immersion Engine или сокращенно, Reality
Co-Processor, RCP.
Тактовая частота 62,5 Mhz, что является в точности 2/3 от частоты
CPU. Внутренние шины RCP скорее всего ,256 битные. Шина RCP <->
CPU 64 бита.
RCP архитектурно является, скорее, не вспомогательным, а основным
чипом N64. Через него выполняется доступ к памяти и ко всем остальным
устройствам.
Экранное разрешение N64 включает в себя разнообразные видеорежимы,
но реально игры используют разрешение... 320x240 пикселей.
Глубина цвета каждого компонента RGB видеовыхода - 21 бит(интерполяция).
Глубина цвета текстур до 8 бит на компоненту.
Гамма-коррекция цвета.
Полноэкранный hardware antialiasing.
Texture Mapping
Компрессия текстур за счет уникальных форматов, включая формат YUV
(MPEG/JPEG Luminance-chrominance).
Мультитекстурирование (обращаю внимание!)
Очень и очень хороший краевой антиалиасинг полигонов (кстати, этого
нет практически ни на одной PC карте).
Трилинейная Mipmap фильтрация текстур полигонов, т.е. интерполяция
цвета происходит не только в самой текстуре, но и между mipmap-уровнями
текстур.
Z-Buffering
Depth Cueing (цветной fog, mist, haze, murky water, etc. - делается
полигонально, т.е. не через Zbuffer)
Gouraud Shading
8 цветных источников света, причем Spot, Directional, PointLights.
Alpha effects (полу-прозрачность как полигонов так и текстур, реализована
очень развито!).
Соответственно наличествуют все эффекты которые выдаются за самостоятельные,
но являются всего лишь комбинацией текстурирования/освещения - это
bump mapping, Environment mapping, цветные блики (specular lighting)
итп.
N64 предоставляет спрайты со всеми эффектами. Большинство игр выводит
спрайты полигонами, но RDP поддерживает аппаратный блиттинг блоков.
Нужно сказать, что не все эффекты "дармовые", некоторые
режимы требуют двух тактов рендеринга и работают в так называемом
2-CYCLE MODE, а некоторые режимы не могут быть скомбинированы. Как
видно, большинство технологий старательно выдаемых производителями
видеоакселераторов для PC за последний писк моды, являются самым
обычным порядком вещей в 1993 году на станциях SGI и в 1993-1996
годах на N64...
Reality Immersion Engine, RCP является самой сложной и самой интересной
частью N64. Это один чип, но реально это два процессора - центральный
командный процессор RSP с векторным со-процессором и растеризатор
RDP. Работает RCP
полностью параллельно центральному процессору
R4300i. Кроме того, растеризатор и центральный процессор RCP работают
параллельно друг другу. Этот чип создан на базе микропроцессора
MIPS и является, по сути дела, ядром микропроцессора R4000 с усеченным
набором команд. Оставлена только 32-х разрядная часть без 64bit
инструкций, умножений/делений и с 32 регистрами по 32 bit. Также
из процессора убраны все прерывания, например возможно деление на
ноль. Никакие ошибки этот процессор не отслеживает. Поэтому его
называют Reality Signal Processor - RSP. Этот процессор выполняет
роль командного, управляющего процессора RCP.
Следущее устройство - это векторный сопроцессор или Vector Unit
(VU). Он представлен по отношению к управляющему ядру RSP как сопроцессор
COP2 и содержит 32 регистра по 128 бит (!!!). То есть на самом деле,
Nintendo могли "слукавить" и заявить что консоль 128-битная.
С помощью VU на N64 выполняются матричные вычисления - геометрические
преобразования в трехмерном пространстве. Поэтому иногда можно услышать
такое определение как геометрический процессор. Вообще говоря, матричные
процессоры это привилегия суперкомпьютеров. Ввиду того что внутри
RCP VU является сопроцессором COP2 для управляющего RSP, он не работает
с ним параллельно, т.к. они разделяют один и тот же поток команд.
Но это и не требуется. Одну векторную операцию VU выполняет за такт!!!!!!
С программной точки зрения модуль VU и процессор R4000 рассматриваются
как одно устройство, один процессор с 32-мя скалярными регистрами
по 32 бит и 32 векторных регистра по 128 бит. Каждый регистр VU
может адресоваться 16bit частями. VU содержит 8 векторных ALU шириной
32 бит для хранения промежуточных вычислений при распараллеливании
вычислений и столько же "скрытых" программно недоступных
32bit - аккумуляторов хранящих результат векторной операции. Производительность
VU равна одной инструкции за такт(?), но эта инструкция, к примеру,
выполняет сразу несколько умножений вида 16bit x 16bit и одновременно
комбинирует 32 bit результат с 32 bit предыдущего результата (скрытым
аккумулятором). Кроме того, VU может производить и все логические,
арифметические команды над своими векторными регистрами. Для устройства
с тактовой частотой 62,5 Mhz VU имеет довольно высокую производительность.
Несложные подсчеты показывают, что это 0,5 GFlop/Sec (пол-миллиарда
арифметических действий/сек). Так что Jim Clarc совсем не преувеличивал,
обещая мощность сотен PC того времени!
Следующим устройством RCP является Reality Display Processor (RDP).
Это устройство работает растеризатором, выполняя все 2D функции
клиппирования полигонов, мульти-текстурирования, Z-буферинга, блендинга,
интерполяции освещенности, очистки Z-буфера и многие другие. RDP
работает параллельно RSP, выполняя 64 и 128 битные(?) команды своей
очереди команд, которые RSP записывает в его RDP-display-list. RDP
содержит в своем составе несколько логических блоков:
RS |
Rasterizer. Растеризатор, генерирует все необходимые дельты
приращений для текстуризации, освещения - R, G, B, A, Z, S/W,
T/W, 1/W, L, pixel coverage. |
TX |
Texturizer. Тектуризатор - модуль работы с памятью текстур. |
TF |
Texture Filter. Фильтр выполняющий 4 к 1 фильтрацию тектур. |
CC |
Color Combiner. Выполняет основную работу по интерполяции
освещения и накладыванию его на текстуры. |
BL |
Blender. Смешивает результат с framebuffer. Также выполняет
антиалиасинг. |
MI |
Memory interface. Оптимизирует работу с framebuffer, z-buffer
и выполняет кэширование с помощью Span-bufer`s. |
Причем, в зависимости от режима работы RDP функциональность некоторых
логических блоков может удваиваться. RDP очень и очень гибок. Его
режимы работы программируются и могут переключаться на ходу, во
время построения сцены. К примеру, вот как Color Combiner может
комбинировать источники цвета. Параллельно при этом работает AlphaCombiner:
Можно заметить, что используются такие специфические элементы, как
части параметра Level-Of-Detail или Noise (шум). Комбинируя определенные
режимы работы программист может получать очень специфичные возможности,
например, Chroma-Keying с "мягкими" границами канала.
Вообще, RDP является исключительно сильной частью N64. Современные
(2002 год)
видеоакселераторы PC типа GeForce хоть и быстрее, но куда беднее
по функциональности (!)
Оба процессора, RDP и RSP не разделяют оперативную память системы,
озу. Вместо этого они используют 4Kb своей сверхоперативной памяти
инструкций (IMEM) и 4Kb памяти данных (DMEM). Данные в DMEM и IMEM
передаются через DMA, в основном, пересылки инициализируются RSP.
Запись RSP может делать только в DMEM, но не в IMEM. Общение между
RDP и RSP выполняется через DMEM. RDP не является сопроцессором
к RSP, т.е. он имеет свой указатель инструкций.
RDP выполняет текстурирование из своей памяти текстур, обьемом 4Kb.
Немного, но зато пропускная способность этой памяти (IMEM, DMEM,
TMEM) гораздо выше чем RAM за счет того что это статическая память
на кристалле и ширина ее выборки больше чем ширина выборки RAM.
Данные между этими видами памяти и RAM передаются с помощью быстрых
каналов DMA, причем пересылки инициализируются как процессором,
так и RSP. Небольшой объем памяти текстур несколько сглаживается
гибкостью RDP, так как он автоматически производит заворачивание
текстур, отражение и очень и очень качественное сглаживание (интерполяцию).
Звук
N64 содержит в своем составе также и полноценный 16Bit, 44,1Khz
программный wavetable синтезатор. Количество каналов может быть
вплоть до 64 со специальными эффектами reverberation, echo, chorus
итп. Однако, большое количество каналов с эффектами не прозрачно,
это требует повышенных вычислительных ресурсов. Поэтому программисты
выбирают золотую середину между производительностью/количеством
эффектов. Смешивание/формирование каналов выполняется программно,
с помощью RSP, который подготавливает буфер в RAM и передает его
с помощью DMA в цифро-аналоговые преобразователи. Многие звуки по-настоящему
синтезируются. В играх N64 звук довольно выразительный - он перемещается
вместе с героями, большие помещения дают эхо итп. Музыка N64 это,
как правило MIDI-композиции с 44,1 kHz wavetable инструментами.
В крупных и технологичных играх наподобие Zelda, RE-II звук, к тому
же, запакован в формате MP3 и распаковывается в память по мере игрового
процесса.
Остальные контроллеры.
N64 также содержит 4 очень быстрых 64-бит канала DMA. DMA задействованы
для пересылки данных между картриджем ROM/RAM, для взаимодействия
RCP, взаимодействия с джойстиками, шиной внешних устройств таких
как диски, энергонезависимая память отгрузки итп. Контроллер джойстиков
и сами джойстики являются интеллектуальными устройствами, т.е. тоже
содержат простейшие микропроцессоры (микроконтроллеры). В частности,
джойстик N64 самокалибруется.
Операционная система. Программное обеспечение.
N64 содержит операционную систему с вытесняющей мультизадачностью.
Она не находится где-либо в ROM, а слинковывается при компиляции
вместе с игрой. N64 . N64 OS обеспечивает выполнение и взаимодействие
разноприоритетных потоков команд CPU. Потоки общаются с помощью
посылки сообщений, так же как и в больших системах (BeOS, Windows).
Игра выполняет роль клиента операционной системы, та предоставляет
ей сообщения о контроллерах, состоянии RCP и проч. Также есть и
файловая система - отгрузки игры упорядочены в энергонезависимой
памяти в виде файлов.
С программированием N64 тесно связано понятие Display List, списков
команд с помощью которых общаются ее программное обеспечение центрального
процессора и программное обеспечение RSP(микрокод). Программирование
Display List сильно напоминает программирование OpenGL! В этом нет
ничего удивительного, так как архитектура N64 это, практически,
модификация ранней графической станции Silicon Graphics, а OpenGL
разработан именно ими и именно для этого.
Ошибки Nintendo.
SGI сконструировала прекрасную систему, отдав ее в руки Nintendo.
Первой и самой основной ошибкой является отсутствие CD-ROM. За пять
лет продаж N64 (и с 1993 года разработки!) так и не был выпущен
CD-ROM. Просто потрясающая узколобость и упорство! Это при всем
при том, что N64 содержит снизу специальный разъем расширения!!!
Консоль спроектирована так, что она может как бы венчать "башенкой"
возможный блок расширения снизу ее. Дело обстоит даже так, что некоторые
пиратские фирмы выпустили Backup Unit`ы со встроенным CD-ROM, но
не сама Nintendo!
Обратите внимание - это еще и при том, что мощность двухпроцессорной
N64 такова, что она спокойно проигрывает полноэкранное MPEG-II видео(Resident
Evil-II), вкупе с MPEG-III аудио. (тут нет ничего удивительного
- напомню, внутри N64 два RISC-процессора с мощностью пары Pentium!!!).
По идее, для N64 предназначался какой-то нелепый магнитный накопитель
DD (DiskDrive), емкостью 64,45 Mb (его вы и видите под N64). Но
насколько мне известно, так ни одна игра для него и не вышла. (Вообще,
продавались ли DD? Видимо нет.) Игры должны были выходить только
на READONLY дисках. Отсутствие диска конечно же создавало сильные
ограничения для разработчиков. Точнее говоря, ограничением был малый
объем картриджей. Было бы правильным сказать, что изготовление игр
для N64 по этой причине было одним из самых трудных среди всех консолей.
(Существуют и другие причины). В журнале Gamasutra можно прочитать
о том как делался ремейк игры Resident Evil-II с консоли Sony Playstation.
"Mission: Compressible -- Achieving Full-Motion Video on the
Nintendo 64".Программистам пришлось решать проблему, как упаковать
1 Gb полноэкранного видео из Sony Playstation диска в 25 Mb отведенные
в N64-картридже. Программисты такие же люди и желают как можно проще
и быстрее проектировать игры, для того чтобы поскорее состричь купоны
и рвануть на острова, пить апельсиновый сок и нежиться в бассейне
между двух блондинок. Поэтому вполне можно понять их нежелание связываться
с N64.
Nintendo пыталась выдвигать картриджи как преимущество, аргументируя
тем, что CD-ROM медленны и ненадежны (в то время они были односкоростные
и могли вдобавок запыляться, царапаться итп..) Еще одним аргументом
Nintendo было то что, дескать, картриджи для игр могут содержать
дополнительные микропроцессоры, MPEG-декодеры итд. Сейчас, правда
видно, что все это оказалось, мягко говоря, лукавством. Разъем картриджа
по разводке сигналов таков, что не позволяет включение дополнительных
микропроцессоров к шинам N64, в то время как CD-ROM`ами комплектуются
даже самые завалящие китайские магнитолки...
Отсутствие поддержки разработчиков. Для полноценной разработки игр
существовал эмулятор N64 - плата для рабочей станции Silicon Graphics
Indigo, поэтому, минимально, у вас должна была быть сама Indy! Именно
для нее существовало все программное обеспечение - DevKit для N64.
Аналогичный Psy-Q для разработки под PC платформой появился позже
и обладал меньшими возможностями, являясь всего лишь некоторой аппроксимацией
оригинального DevKit . Кроме того, документация N64 весьма туманна
и совсем не раскрывает низкоуровневых деталей программирования.
Вероятно, интересующая информация предоставлялась по специальному
запросу. Я подозреваю что это заслуга SGI, скрывающей свои секреты.
Наконец, ошибкой N64 является неразвитие консоли. Архитектура N64
такова, что ее можно расширять и жить с этого очень, очень долго.
Часть информации позаимствована с сайта http://www.n64dev.narod.ru,
после чего была дополнена и исправлена.