Сегодня Пикабушник под ником @apokhmel подарил мне мою мечту - оригинальную консоль GBA SP. Для тех, кто не в курсе - это легендарная портативка, вышедшая в далёком 2003 году и являющаяся раскладной версией оригинального GBA, куда добавили подсветку дисплея. Сначала ламповую, а затем и светодиодную!

Консоль построена на кастомной системе на кристалле разработки самой Nintendo. SoC AGB BE объединял в себе достаточно современный, на момент выхода, процессор ARM7TDMI, работающий на частоте 16МГц, кастомный сопроцессор Sharp SM83 прямиком из оригинального Gameboy (интересен тем, что представляет из себя микс архитектуры 8080 и Z80), продвинутый PPU (2D предок современных GPU, оперирующий спрайтами и тайлами) схожий с SNES и поддерживающий аж 7 видеорежимов, и даже аффинные трансформации, а также простенький SPU, включающий в себя как звукогенераторы оригинального GB, так и обычный ЦАП для вывода PCM-звука. Помимо основных модулей, в SoC также были таймеры, DMA и другие полезные ништяки.

Не менее интересной была и организация памяти. У процессора "торчали" наружу сразу две параллельные шины типа 8080 - одна на внешнюю SRAM объемом в 256КБ (стоит рядом с процессором), а вторая на картридж. При этом обе шины были 16-битными, из за чего выборка одного машинного слова (для ARM) требовала сразу два такта чтения. Распиновка картриджа была идентичной оригинальному GBA (для совместимости) и отличалась использованием общих сигнальных линий для адреса и данных - в чипе ROM был встроенный сдвиговый регистр, который сначала сохранял адрес нужного банка, ждал пока процессор переведет линии в высокоимпендансное состояние и затем выставлял прочитанные данные на те же линии. Хитро и умно :)

Но главной фишкой было то, что внешняя SRAM была относительно медленной и для этого Nintendo предусмотрела 32КБ сверхбыстрой оперативной памяти в самом процессоре. Эта SRAM была подключена в обход контроллера параллельной шины, скорее всего сразу через AHB.

Интересно и то, что ARM7TDMI можно было найти и в других устройствах тех лет. Например кнопочных телефонах - наши любимые Motorola E398, Samsung C100 и Nokia 3310 используют точно такое же процессорное ядро, только работает оно на разной частоте.

Несмотря на высокий уровень интеграции по меркам 2001 года, в GBA и GBA SP питальники разведены отдельно. В GBA и первой ревизии SP за питание консоли отвечало сразу два чипа - S6403, объединявший в себе 2 DC-DC понижающих преобразователя, формирующие основные шины питания - 1.8В (вероятно ядро) и 3.3В (системное) и 1 повышающий, формирующий 5В (для совместимости с картриджами оригинального геймбоя), а также простенький детектор разряженного АКБ (на делителе?). Вторым чипом была микросхема зарядки MM1581, которая частенько выходила из строя и калилась, из за чего консоль продолжала работать нормально, но жрала аккумулятор куда быстрее и переставала заряжаться.

В чуть более свежей ревизии, преобразователи и зарядку объединили в один чип, который в моем случае частично вышел из строя...

АКБ оказался сдохшим. Я проверил консоль с помощью ЛБП - она включалась, но висела на заставке без лого Nintendo (это значит что картридж не обнаружен), потребление было в норме - 40мА с обычным уровнем подсветки и 80мА с максимальной яркостью (респект инженерам Nintendo, это очень маленькое потребление по меркам такого девайса. Например RP2040 сам по себе кушает не менее 20мА в режиме сна!). Затем крокодилы чутка коротнули друг об друга и при следующем включении я уже увидел потребление в 300мА...

Само собой в Nintendo работают не идиоты и защиту на VBAT от КЗ и переполюсовки предусмотрели, так что дело явно не в этом. Однако КП начал калиться и при детальном рассмотрении оказалось что следы этого самого кофе перемкнули несколько ног на КП... но было уже слишком поздно - изначально ведь я не знал, что консоль была водолазом :)

После небольшой диагностики я выяснил что сдох только КП, что это типовуха у последней ревизии и на многих консолях остаётся лишь перерезать VIN на КП и собрать чарджер на чем то типа LTC4054. Все остальные модули, включая усилитель звука, DC-DC'шки и "Fuel gauge" остались живыми... Но сколько проработает КП, которой так калится?

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

Я поищу донора с ещё более ушатаной платой, и если повезёт найти по нормальной цене, то обязательно свапну контроллер питания и отремонтирую консоль 😎

Также мне хотелось разобрать матрицу и почистить рассеиватель от следов кофе, но в случае с дисплеем GBA это просто нереально. Дисплей толком неразборной, матрас вместе со шлейфом приклеен к подсветке и малейшее неосторожное движение либо отклеит шлейф от дешифратора, либо повредит боковые дорожки драйвера дисплея.

Перебирал довольно много разных матриц, но эта - самая неподдающаяся.
Перебирал довольно много разных матриц, но эта - самая неподдающаяся.

Что-ж, пока поиграю и так :) А ведь GBA отлично показывала себя в тех 2D играх, где используются спрайтовые режимы PPU. Несмотря на скромную частоту процессора, многие игры шли в стабильные 60 FPS как раз благодаря тому, что чипу не приходилось заниматься программным блиттингом, аффинными трансформациями и прочими тяжёлыми по меркам памяти и процессорного времени штуками - он просто заполнял атрибуты спрайтов на экране в OAM. Да, как и на NES за 20 лет до выхода GameBoy Advance!

В моих планах есть идея написать небольшую кроссплатформенную игру типа танчиков, которая архитектурно была бы построена вокруг идей PPU (объекты вместо блиттера как основа графической подсистемы, тайловые фоны), но реализовывала бы их софтово на трех дополнительных платформах - Windows Mobile, Symbian и ПК. То есть игрушка могла бы работать с единой кодовой базой сразу на четырех платформах!

На самом деле, использование PPU совсем необязательно. В консоли есть Mode 7, позволяющий писать напрямую в фреймбуфер консоли любые данные, в том числе и программные блиттеры. Правда на 16МГц особо не разгуляешься.
На самом деле, использование PPU совсем необязательно. В консоли есть Mode 7, позволяющий писать напрямую в фреймбуфер консоли любые данные, в том числе и программные блиттеры. Правда на 16МГц особо не разгуляешься.

Если любите читать такое - подписывайтесь на мой Telegram "Клуб фанатов балдежа", куда я выкладываю различные посты связанные с ремонтом, моддингом и программированием для ретро-железа, ну и конечно немного щитпоста :)

Only registered users can participate in poll. Log in, please.
Как вам консоль?
26.09%Балдеж. Спасибо Пикабушнику за подгон, ждём полноценную игру!6
0%Не балдеж. Ей место на помойке.0
8.7%PSP лучше!2
13.04%Это была моя мечта когда-то…3
8.7%Чудо инженерной мысли!2
30.43%Ждём статью с полной реставрацией консоли + статью с написанием для нее игры😎7
8.7%Подарю автору Агушу, ведь он любит Агуша гейминг!2
4.35%Обожаю такие статьи с разбором железа!1
23 users voted. 2 users abstained.