« Архитектура Game Boy Advance (index)

Архитектура Game Boy Advance

Chapter 3: Процессор


Содержание

  1. Кембриджское чудо
    1. Расцвет Acorn Computers
    2. Новая авантюра с процессором
  2. Партнёрство с Nintendo
  3. ARM7TDMI
    1. Командуем процессором
    2. Кристалл
      1. Ядро
      2. Конвейер
      3. Выжимание производительности
      4. Расширения
  4. Расположение памяти
  5. Становление Game Boy Color

Большинство компонентов объединены в единый модуль под названием CPU AGB. Модуль содержит два совершенно разных процессора:

Надо отметить, что оба процессора никогда не работают одновременно и никаким сопроцессингом не занимаются. Единственная причина включать очень старый Sharp - это обратная совместимость.

Тем не менее, прежде чем я расскажу про чип ARM, я считаю, что целесообразно начать с истории за этим брендом CPU.

Кембриджское чудо

История о происхождении процессора ARM и его последующем пути к славе захватывает дух. Здесь мы увидим сочетание государственных инвестиций, экспоненциального роста, злополучных решений и партнерств на большом расстоянии.

Расцвет Acorn Computers

Image
Фото BBC Micro с коробкой 5¼-дюймовых дискет на нём , на первом диске Elite.

Конец 70-х для жителей Соединённого Королевства выдался неспокойным. Интервенционистская экономика, когда-то построенная в соответствии с послевоенными идеалами, достигла своего курса, и вскоре маятник покачнулся в сторону реформ свободного рынка. Посреди этого шторма, венчурный бизнес из Кембриджа, такой как Acorn Computers, вместе с Sinclair и подобными, продавал компьютерные наборы для лабораторий и энтузиастов. Подобно американским и японским предприятиям, компьютеры Acorn опирались на процессор 6502 и проприетарный диалект BASIC.

Входя в 80-е годы, интересы министерств в рамках нового британского правительства привели к созданию проекта по повышению компьютерной грамотности в школах . Благодаря предстоящему домашнему компьютеру "Proton" от Acorn компания получила контракт на создание доступного компьютера, который соответствует видению правительства. Результатом стал BBC Micro (по прозвищу "Beeb"), которым удалось добиться значительных успехов среди школ, учителей и студентов. Внутрь Micro Acorn добавила авангардный интерфейс 'Tube', который позволяет расширить компьютер с помощью второго процессора. Это проложит путь к следующей большой инвестиции Acorn.

В ходе разработки своего следующего продукта, на этот раз нацеленного на компании, Acorn не нашла подходящего процессора на замену 6502. Давление на создание инноваций против японской и американской конкуренции, в сочетании с неудачным планированием, привели Acorn к плачевному финансовому состоянию. Таким образом, перед новым подразделением в Acorn была поставлена задача создать хороший центральный процессор. Чтобы обойти недавние ограничения, Acorn команда, отвечавшая за центральный процессор, основала свою архитектуру на учениях исследовательской работы под названием Дело о компьютере с сокращённым набором инструкций (англ. Reduced Instruction Set Computer) и его прототипе, процессоре RISC . Наконец, в 1985 году Acorn начали поставку процессора ARM1 в качестве модуля Tube для BBC Micro, но его позиционировали только для научно-исследовательских и опытно-конструкторских работ. Так было до тех пор, пока в 1987 не представили свой первый компьютер Acorn Archimedes, после этого чипы ARM (на тот момент уже ARM2) заняли главную роль.

Новая авантюра с процессором

Image
Поздняя модель Newton... после того, как я с ней поигрался.

Во время коммерциализации Acorn Archimedes, Apple была поражена энергоэффективными процессорами Acorn, но американская компания до сих пор не была убеждена в том, что последний ARM3 Acorn подходит для нового небольшого проекта Apple: Newton. Однако, вместо того, чтобы уйти (в конце концов, Акорн был конкурентом), оба обсудили возможность эволюции ARM3 для соответствия требованиям Apple , а именно гибкая тактовая частота, интегрированный MMU и полная 32-битная адресация.

Это сотрудничество в скором времени превратилось в партнерство, где Acorn, Apple и VLSI (производитель микросхем ARM) создали новую компанию, ориентированную исключительно на разработку процессоров ARM. Apple предоставила инвестиции (приобретая 43% продукта), Acorn поделился своим персоналом, а VLSI позаботился о производстве. В 1990 году появилась на свет Advanced RISC Machines (ARM) Ltd с Robin Saxby в качестве исполнительного председателя.

Годы спустя Apple наконец-то начала продажу Newton MessagePad на базе ARM610, одного из следующих поколений чипов ARM, выполнявшего требования Apple. Между тем, Acorn также выпустил RiscPC с использованием новых процессоров.

Теперь, когда Acorn и Apple удерживались на компьютерном/портативном рынке, ARM разработала радикальную бизнес-модель. Избегая производство, видение Saxby заключалось в лицензировании интеллектуальной собственности ARM в форме схем центрального процессора и его набора инструкций . Это дало ARM клиентов за пределами компьютерной сферы, такие как Texas Instruments , которые позднее свяжут компанию с формирующимся мобильным рынком (кульминацией станет Nokia 6110) и телевизионными приставками. В последующие годы технологии ARM будут поставляться в миллиардах мобильных устройств .

Партнёрство с Nintendo

Тем временем в Японии, благодаря анализу Game Boy, мы узнали, что стратегия Nintendo в области аппаратного обеспечения портативных систем поощряет модель Систем на кристалле (СНК, англ. SoC). Это позволило компании спрятать доступную готовую технологию и объединить ее с собственными разработками. При этом новая консоль может быть уникальной и конкурентоспособной.

Image
Центральный процессор AGB, размещает процессор ARM7TDMI (вместе с множеством других компонентов).

К счастью, лицензионная модель ARM подходила именно для этих нужд. Обе компании вели переговоры с 1994 (за год до выпуска Virtual Boy), хотя многие годы они ни к чему не приводили . Причина была проста: японцы видели проблему в плотности кода для ARM и необходимости в 32 проводах для данных (чего процессору Virtual Boy удалось избежать). Тем не менее новый разработчик процессоров ARM - Dave Jaggar - быстро дал ответ в виде ARM7TDMI. Новый процессор был ориентирован на максимальной производительности с ограничениями по питанию и запоминающим устройствам. Это был поворотный момент для ARM, так как их новый продукт не только угодил Nintendo, но ещё привлёк внимание Texas Instruments, Nokia и остальных конкурентов на рынке сотовых телефонов.

Неудивительно, что когда Nintendo начала работу над преемником Game Boy Color, в качестве процессора был выбран именно ARM7TDMI.

ARM7TDMI

Давай погрузимся в то, что предлагает этот чип.

Командуем процессором

Для начала, ARM7TDMI реализует набор инструкций ARMv4, наследника ARMv3. Это значит:

Кристалл

А теперь, зная, как разработчики разговаривают с чипом, давайте посмотрим, что находится на кристалле.

Ядро

В плане схемы ARM7TDMI является урезанной версией ARM710 с интересными дополнениями. Ядро включает в себя :

Наконец, всё это может работать от 3-вольтового блока питания . Это очевидный шаг в сторону мобильных вычислений, так как предыдущие ядра требовали блока питания на 5 Вольт.

Конвейер

Начиная с первой версии ARM обладал трёх этапным конвейером для выполнения кода. Другими словами, выполнение инструкций разбито на три шага или этапа. Процессор выбирает, декодирует и выполняет до трех инструкций параллельно. Это позоволяет использовать ресурсы процессора по максимуму (что снижает простой процессора), при этом так же увеличивает количество выполняемых за еденицу времени инструкций.

Как и два очень похожих современника, процессоры ARM подвержены конфликтам данных (data hazards). Тем не менее ни программист, ни компилятор их не заметят, так как в данном случае процессор автоматически приостановит конвейер всякий раз, когда это необходимо.

Также присутствуют и конфликты управления (control hazards), но ARM решил эту проблему эффективным методом условного аннулирования (conditional annulment): Всякий раз, когда на втором этапе (Decode, декодирование) появляется команда условного перехода, центральный процессор будет вычислять её условие . В зависимости от результата, если должен произойти переход, процессор автоматически аннулирует последующую инструкцию (превращая её в пустую команду). Если сравнивать с подходом MIPS, то это звучит затратно, ведь компилятор MIPS мог вставлять не только пустышки, но и полезные инструкции. Поэтому, кроме условных переходов, ARM также предоставляет условное исполнение. Оно делает конвейер процессора его преимуществом, так как ARM может декодировать инструкции и вычислять встроенные в них условия в пределах одного этапа. В таком случае пустые инструкции не вставлялись. Вот поэтому в программировании под ARM условное исполнение предпочтительнее условного перехода .

Выжимание производительности

Один из недостатков архитектуры load-store привёл к разрежённости кода для ARM. Такие конкуренты, как x86, могут выполнять те же задачи, используя меньшее количество кода, требующего меньше пространства. Следовательно, когда в Nintendo посмотрели на последнюю разработку ARM - ARM7, они остались недовольны. Размер инструкций ARM означал, что железо гипотетических устройств, заточенное под 16-битные шины и ограниченную постоянную и оперативную память - всё ради экономии стоимости и энергии - станет для процессора бутылочным горлышком и ограничит его эффективность. К счастью, Dave Jaggar только что закончил работу над ARM7 и не собирался сдаваться. Во время своей поездки после встречи Nintendo он придумал решение: Набор инструкций Thumb .

Thumb — это подмножество набора инструкций ARM, инструкции которых кодируются в 16-битные слова (в отличие от 32-бит) . Будучи 16-битными, инструкции Thumb требуют половину от ширины шины и занимают вдвое меньше памяти. Ради этого пришлось пойти на следующие компромиссы:

В общем, так как инструкции Thumb предлагают только функциональное подмножество инструкций ARM, разработчикам может потребоваться больше инструкций для достижения схожего результата.

На практике Thumb занимает 70% места ARM кода. На 16-битной памяти Thumb работает быстрее, чем ARM. При нужде ARM и Thumb инструкции можно смешивать в одной программе (т. н. interworking), так что разработчик может выбирать когда и где использовать каждый режим.

Расширения

ARM7TDMI является, по своей сути, ARMv3-совместимым ядром с расширениями. Это отражено в его имени (TDMI), которое значит:

Всё это сделало ARM7TDMI привлекательным решением для мобильных и встроенных устройств.

Расположение памяти

В частности, включение Thumb оказало сильное влияние на окончательный дизайн этой консоли. Nintendo смешивала 16-битные и 32-битные шины между различными модулями, чтобы снизить затраты, и в то же время предоставляла программистам необходимые ресурсы для оптимизации кода.

Image
Архитектура памяти этой системы.

Память, используемая в Game Boy Advance, распределена по следующим местам (в порядке от самой быстрой к самой медленной) :

Хотя эту консоль позиционировали как 32-битную систему, с большей частью памяти можно общаться только через 16-битную шину, а значит игры в основном используют набор инструкций Thumb, чтобы не тратить два цикла на один запрос инструкций. Только в очень исключительных обстоятельствах (например, при необходимости использовать инструкции, отсутствующие в Thumb, храня их в IWRAM) программисты смогут воспользоваться набором инструкций ARM.

Становление Game Boy Color

Кроме включения компонентов GBC (Sharp SM83, оригинальный BIOS, режимы аудио и видео, совместимый слот для картриджей и так далее), для обеспечения обратной совместимости нужны еще две функции.

Со стороны оборудования консоль полагается на переключатели для определения, какой картридж вставлен: Game Boy или Game Boy Color. Детектор формы в слоте для картриджей по сути определяет тип картриджа и позволяет процессору читать его состояние. Предполагается, что некий компонент CPU AGB читает это значение и автоматически выключает ненужное в режиме GBC оборудование.

Со стороны программного обеспечения существует специальный 16-битный регистр REG_DISPCNT, который может изменять многие свойства дисплея, но один из его битов вводит консоль в "режим GBC" . Сначала мне было очень трудно понять, когда именно GBA пытается обновить это регистр. К счастью, нашлись разработчики прояснить ситуацию:

Думаю, вот что происходит во время загрузки GBC: она проверяет переключатель (считывается по адресу REG_WAITCNT 0x4000204), делает переход (очень быстрый, сложно заметить), потом окончательно переключатеся в режим GBC (BIOS пишет в REG_DISPCNT 0x4000000), останавливая ARM7.

Остается недостающий кусочек пазла: что если убрать часть корпуса на картридже GBC, чтобы переключатель больше не нажимался, а потом сделать программное переключение в режим GBC? Может помочь режим мультизагрузки. Не уверен, требуется ли нажатие переключателя, чтобы шина картриджа GBC работала корректно, или она работает само собой. Я склонен считать, что переключатель все таки необходим, но это всего лишь догадка.

- Dan Weiss (он же Dwedit, текущий разработчик PocketNES и Goomba Color)


Previous: 2. Краткое введение

Next: 4. Графика


Rodrigo Copetti © 2026 RSS Feed

Переключиться на современную версию

Домашняя страница · Статьи · Поддержка · Об авторе · О сайте