Как я добавил прямой выбор входов в QUAD 3: реверс ARM-прошивки, бинарный патч и 64 байта здравого смысла

Прокомментировать Просмотры: 7

Иногда встречаются вещи, которые трудно поддаться логическому объяснению. Например, актуальный интегральный усилитель оснащен HDMI ARC, USB Audio, Bluetooth, ЦАП от ESS, MM-фонокорректором, триггерными выводами, запоминанием пользовательских конфигураций и поддержкой телевизионного протокола CEC. При этом напрямую активировать конкретный вход с пульта ДУ одной клавишей он не способен. Именно так функционирует мой QUAD 3: приходится задействовать клавишу Source, последовательно перебирая источники по кругу — BT, USB, OPT, COAX, ARC, AUX1, AUX2, PHONO — и ориентируясь по дисплею.

Сперва планировалось решить эту проблему экстенсивным путем: задействовать ESP32, ИК-излучатель, платформу Home Assistant, мониторинг текущего статуса и программный расчет требуемого количества нажатий Source+ и Source-. Концепция вполне жизнеспособна, однако выглядит избыточно сложно для банальной задачи вроде «активировать USB». В связи с этим возник закономерный вопрос: почему бы не внедрить в прошивку QUAD 3 дискретные ИК-команды для прямого переключения входов? Так стартовало абсолютно факультативное, но захватывающее приключение, связанное с реверс-инжинирингом микропрограммы аудиокомпонента.

Краткий исторический экскурс: истоки бренда QUAD

Марка QUAD привлекает внимание не только за счет актуальных и привлекательных усилителей в ретро-стиле с оранжевой индикацией. У предприятия редкая для индустрии бытовой электроники родословная: это пионер индустрии, десятилетиями развивавший не столько актуальные товарные линейки, сколько собственную инженерно-акустическую школу.

Организация была основана Питером Уокером в британской столице в 1936 году под именем S.P. Fidelity Sound Systems, а вскоре получила наименование The Acoustical Manufacturing Co. Ltd. На заре существования деятельность компании концентрировалась вокруг усилительного оборудования и систем оповещения. К 1941 году производственные мощности передислоцировались в Хантингдон, где базируется британское конструкторское и сервисное подразделение QUAD. 1

Аббревиатура QUAD расшифровывается как Quality Unit Amplifier Domestic. В послевоенный период фирма постепенно сместила фокус с систем Public Address на сегмент домашнего Hi-Fi. Модель QA12/P конца сороковых, ламповый аппарат QUAD II начала пятидесятых и, в особенности, революционная электростатическая акустика ESL образца 1957 года заложили фундамент репутации бренда, позволявшей компании в дальнейшем реализовывать довольно нестандартные проекты, оставаясь при этом верной себе. 1 2

Модель ESL, известная в дальнейшем как ESL-57, вошла в историю как одна из первых серийных полнодиапазонных электростатических систем. Для своего времени это был манифест инженерного новаторства: вместо привычной эволюции динамических излучателей Уокер спроектировал принцип звукоизвлечения практически с чистого листа. До сих пор QUAD позиционирует электростаты как краеугольный камень своего наследия. 3

Однако для нашего повествования важнее иная веха. В 1967 году свет увидели легендарные QUAD 33 и QUAD 303 — транзисторный комплект, объединивший минималистичный предварительный усилитель 33 и оконечник 303. Набор стал культовым образцом промдизайна, удостоился престижной премии в 1969 году, а эстетика модели 33 пополнила экспозицию музея MoMA. Спустя десятилетия руководство QUAD прямо мотивировало возвращение этой пары тем фактом, что оригинальные устройства продолжали активно эксплуатироваться на вторичном рынке, пользуясь стабильным спросом. 1 4

В 1975 году Питер Уокер презентовал концепцию Current Dumping, за которой последовал выход усилителя QUAD 405 — одного из самых тиражируемых инженерных шедевров марки. В 1978 году достижения компании были отмечены престижной королевской наградой Queen’s Award for Technological Achievement. 1 5

Если обобщать, ДНК бренда заключается вовсе не в погоне за сиюминутными «хайфайными» эффектами, а в минимизации искажений элементной базы, создании несколько специфичного, но интуитивного интерфейса и проектировании долговечных аппаратов. Последний тезис современные производители цифровой техники воспринимают, пожалуй, с определенной настороженностью.

QUAD 3: квинтэссенция исторического наследия и современных технологий

Здесь важно соблюдать терминологическую точность. QUAD 3 не является прямым клоном или ремейком какой-то одной исторической реликвии. Это не условный «новый QUAD 22» и не вариация модели 33 со встроенным блоком усиления. Профильное издание What Hi-Fi акцентирует внимание на том, что QUAD 3 представляет собой самостоятельное современное устройство, в отличие от воссозданных компонентов 33/303. 7

При этом преемственность дизайна очевидна. В 2024 году компания реинкарнировала модели 33 и 303 в обновленном исполнении, подчеркивая, что речь идет не о банальном рестомоде, а об актуальном переосмыслении классики на базе современной компонентной базы. 4

А летом 2025 года состоялся релиз QUAD 3. Фирменное описание позиционирует интегральник как сплав узнаваемой эстетики и передовых интерфейсов коммутации. 1

Внешне аппарат цитирует сразу несколько эпох. Компактные габариты и оранжевые элементы индикации роднят его с обновленным 33, плавные обводы лицевой панели отсылают к ретро-модели QUAD 22, а набор поворотных регуляторов для управления параметрами source, bass, tilt, balance продолжает философию управления без гигантских дисплеев. 6 7

Под капотом скрывается полноценный усилитель класса AB мощностью 65 Вт на канал при нагрузке 8 Ом (и 100 Вт при 4 Ом), укомплектованный тороидальным трансформатором на 235 В·А и буферными емкостями фильтра питания на 30 000 мкФ. Цифровая составляющая базируется на чипе ESS9038Q2M: USB-интерфейс обрабатывает поток PCM до 768 кГц и DSD512, а оптический и коаксиальный разъемы — до 192 кГц. На борту имеются порт HDMI ARC, модуль Bluetooth 5.1 с поддержкой aptX/aptX HD, фонокорректор для винила, пара линейных входов, фирменный контур Tilt, а также сервиснный USB-порт для апдейта микропрограммы. 6

Концепция прозрачна: объединить визуальный и эргономический язык классических устройств QUAD, полюбившихся аудиофилам, с современной технологической начинкой.

Судя по реакции рынка, стратегия оказалась выигрышной. Эксперты What Hi-Fi отмечают, что на волне триумфа возвращенных 33/303 меломаны буквально затребовали интегральное решение, результатом чего и стал выпуск QUAD 3. Журнал Hi-Fi News и вовсе характеризует происходящее как подлинный «ренессанс» бренда. 7 8

Сформировался любопытный инженерный парадокс: визуально устройство апеллирует к золотой эре аналогового звука, но внутри функционирует микроконтроллер, поддерживается обновление по шине USB, реализованы функции CEC и сложная цифровая архитектура.

Следовательно, если штатный пользовательский интерфейс в чем-то несовершенен, его отныне можно не только критиковать, но и подвергнуть декомпиляции.

Мотивация: зачем все это затевалось

Мой аудиосетап задействует три основных сценария использования. Телевизор соединен с QUAD 3 посредством HDMI ARC, где все работает безупречно благодаря протоколу HDMI CEC. Основным музыкальным источником выступает стример WiiM Ultra, коммутируемый с усилителем по шине USB. Для альтернативной аналоговой ветки сигнал транслируется с линейного выхода WiiM через буфер Musical Fidelity X-10v3 на разъем AUX1 усилителя.

Стример умеет переключаться между режимами USB Out и Line Out, однако загвоздка заключалась на стороне QUAD. При активации USB-выхода на WiiM усилитель также требовалось переводить на USB; в случае с Line Out — на AUX1. Прямой команды INPUT_USB в арсенале усилителя не предусмотрено: доступны исключительно триггеры цикличної смены SOURCE_NEXT и SOURCE_PREVIOUS.

Для сценариев умного дома это неудобно. Инструкция Source+ означает не «включить USB», а «перейти к следующему входу относительно активного в данный момент». Приходится отслеживать состояние системы, которое легко нарушается: кто-то случайно тронул регулятор на корпусе, телевизор по команде CEC активировал ARC, был задействован штатный пульт или аппарат перезагрузился.

Первоначально рассматривался вариант с определением базовой точки через Bluetooth с последующим программным подсчетом кликов Source +/-. Вероятно, схема функционировала бы. Но возникла мысль: раз сам усилитель отлично осведомлен о существовании USB, AUX1 и ARC, зачем городить вокруг него костыли?

Добываем официальный бинарник прошивки

На официальном ресурсе QUAD прошивки для модели QUAD 3 обнаружить не удалось, хотя на тыльной панели красуется однозначный порт FIRMWARE UPDATE. Обращение в техподдержку через сервисный канал принесло результат: мне выслали оригинальный файл QUAD3_v1.14j_26.7.30.bin размером 55 544 байта. Сам усилитель на тот момент демонстрировал версии ПО SYSTEM VER-102 и PC USB VER-219.

Никакого сопутствующего чейнджлога к апдейту 1.14j не прилагалось — просто актуальный бинарный образ от вендора. Что именно изменилось со времен версии 1.02, осталось загадкой. Зато на руках оказался файл прошивки, который, в отличие от маркетинговых релизов, говорит с исследователем на языке абсолютной конкретности.

Первичный анализ бинарного файла

Первоочередная задача сводилась к идентификации структуры: наличие контейнеров, шифрования или цифровых подписей, целевая архитектура и точки загрузки образа. Вердикт оказался благоприятным: перед нами стандартный «сырой» образ приложения для платформы ARM Cortex-M3, использующий набор инструкций Thumb-2 и порядок байт Little Endian.

Базовый адрес приложения — 0x08010000, на старте расположена стандартная таблица векторов прерываний ARM. Карта памяти разительно напоминает микроконтроллеры семейства STM32F100. Статический аудит указал на это семейство как на наиболее вероятное, скорее всего, в исполнении класса xB с объемом флеш-памяти от 128 Кб. Исходя из этого, выстроилась следующая гипотетическая схема:

0x08000000
┌──────────────────────────┐
│ bootloader / updater     │
│ ~64 KiB                  │
│                          │
├──────────────────────────┤ 0x08010000
│ application              │
│ QUAD 3                   │
│                          │
│ original EOF             │
│ 0x0801D8F8               │
│                          │
│ ~10 KiB free             │
└──────────────────────────┘ 0x08020000

Впоследствии реальный конец файла (EOF) зафиксировался по смещению 0x0801D937. Даже для минимальной 128-килобайтной конфигурации в резерве оставалось 9 928 байт свободного пространства. Для патча, которому требуются считанные десятки байт, это сродни аренде ангара ради парковки велосипеда.

Подписи, контрольные суммы и прочие нюансы

Следующий закономерный вопрос: проглотит ли встроенный загрузчик модифицированный бинарник? В теле самого приложения отсутствовали следы хэшей RSA/ECDSA, выделенных блоков подписи или явных хэш-хвостов. Были протестированы распространенные вариации CRC16, CRC32, алгоритмов Флетчера, аддитивных контрольных сумм, операций XOR и размещения хэш-сумм в заголовке или конце файла. Очевидного защитного поля обнаружить не удалось.

Разумеется, это не гарантировало отсутствие проверок в самом бутлоадере, но стало очевидно, что исполняемый файл не упакован в зашифрованный контейнер с цепочкой доверия. Это типичный бинарник для Cortex-M, пригодный для дальнейших манипуляций.

Поиск механики выбора источников

Ключевой загадкой оставалось то, каким образом QUAD обрабатывает смену входов. Исследование начали с поиска текстовых строк B-T, USB, OPT, CO-AX, ARC, AUX-1, AUX-2 и PHONO. Сама по себе последовательность ничего не доказывала, поэтому вектор поиска сместился на перекрестные ссылки, таблицы в оперативной памяти и процедуры вывода названий активного входа. В результате удалось реконструировать внутренний перечень идентификаторов:

ID

Источник

0

Bluetooth

1

USB

2

Optical

3

Coax

4

ARC

5

AUX1

6

AUX2

7

Phono

Данная последовательность подтвердилась картой указателей в RAM и подпрограммами отрисовки интерфейса. Главная переменная состояния requested_source размещается по адресу 0x20000ED3. Инициализацию процесса переключения выполняет функция по смещению 0x08012F64, а непосредственную коммутацию осуществляет асинхронный фоновый процесс (worker) по адресу 0x08012E64.

Обнаружился и удобный штатный обработчик событий по адресу 0x080134D4: он инициирует запрос, обновляет экранное меню, управляет сохранением конфигурации в энергонезависимой памяти и передает управление воркеру. Иными словами, внутри микропрограммы уже существовало ровно то, чего не хватало снаружи — способность вызова условной функции set_source(source_id). Упрощенно это выглядит так:

requested_source = source_id;
request_source_change();

Дальше за дело берется штатный автомат состояний. Это критически важно, поскольку смена входа в усилителе не сводится к банальному переключению уровней на GPIO: она активирует режим приглушения звука (mute), тайм-ауты задержек, перемаршрутизацию сигналов, обработку ARC, рендеринг дисплея и сохранение настроек. Воркер оперирует переменными stage и timer, отрабатывая процедуру асинхронно.

Благодаря этому отпала необходимость разбираться в управлении аналоговыми мультиплексорами, ЦАПами и реле. Достаточно проинформировать штатный софт о том, что пользователь запросил условный source=5, предоставив прошивке возможность отработать заложенный алгоритм. Аудиотракт на физическом уровне при таком подходе затрагивать не требуется.

Исследуем ИК-управление

Следующей целью стал инфракрасный диспетчер (IR dispatcher). В структуре ПО локализованы три ключевые точки:

Назначение

Адрес

IR decoder

0x0801C5A2

IR command table

0x0801CB68

IR dispatcher

0x080132E8

Пульт ДУ поставляется единым для усилителя QUAD 3 и проигрывателя компакт-дисков 3CDT, обладая тумблером режимов A / CD. Ряд клавиш в режиме усилителя аппаратно не задействован, хотя события под них уже прописаны в софте. Для создания кастомного патча это идеальные условия: отпадает необходимость изобретать собственный протокол, приобретать сторонний пульт или модифицировать ИК-декодер. Достаточно наделить незадействованные события новым функционалом.

В аппарате используется NEC-подобный ИК-протокол с системным адресом 32 EE для режима усилителя. К примеру, одна из целевых команд фигурирует как 32 EE 33 CC, где 33 — полезная нагрузка, а CC — ее инвертированное значение. При этом на уровне декодера двоичное представление байтов зеркалится из-за порядка следования бит: 0x33 = 00110011 после реверса превращается в 0xCC = 11001100. Из-за этого в дизассемблере отображается 0xCC, хотя передаваемый в эфир NEC-код равен 0x33. Подобная мелочь поначалу способна создать иллюзию случайного набора байт в таблицах.

Первая итерация патча: Релиз SK1

Для дебютного эксперимента решили ограничиться тремя наиболее востребованными входами: USB, AUX1 и ARC. В прошивке уже присутствовали три свободных события, не выполнявших полезных действий в исследуемой ветке выполнения. К ним привязали соответствие event -> source ID, после чего перенаправили поток выполнения обратно в штатный код. Выстроилась следующая цепочка:

IR frame
   ↓
decoder 0x0801C5A2
   ↓
event
   ↓
dispatcher 0x080132E8
   ↓
custom handler
   ↓
0x20000ED3 = source_id
   ↓
stock tail 0x080134D4
   ↓
request 0x08012F64
   ↓
worker 0x08012E64
   ↓
stock routing / mute / ARC / UI / persistence

Особенно элегантно выглядит масштаб вмешательства. В оригинальном коде скорректированы всего четыре байта по смещениям с 0x3346 по 0x3349: последовательность машинных кодов 20 88 C0 1F заменена на 0A F0 D7 BA. Это инструкция безусловного перехода B.W, перенаправляющая управление на наш кастомный обработчик.

Сам обработчик размещен в свободной зоне после исходного конца файла (EOF) и занимает 64 байта. Оставшиеся 55 540 байт оригинального бинарника остались нетронутыми, а итоговый вес собранного RC1 составил 55 608 байт. Прирост объема — ровно 64 байта, или 0.1152%. Мы не переписывали прошивку целиком, а лишь внесли точечный инструмент для вызова заложенных производителем механизмов.

Управление стеком и быстрые нажатия

В предварительной лабораторной версии использовалась инструкция PUSH {r1}. Для сборки RC1 ради соблюдения требований 8-байтового выравнивания стека сохранение и восстановление регистров переписали на классическую пару:

PUSH {r1, r2}
...
POP {r1, r2}

Совместимость с ABI и вызовами через подпрограммы BL лучше не испытывать на удачу. В итоге размер полезной нагрузки остался в пределах 64 байт, указатель стека корректно восстанавливается, а требования к выравниванию выдержаны.

Перед прошивкой также вызывала интерес ситуация с серией быстрых нажатий. Если новый запрос поступает до завершения предыдущего цикла смены входа, воркер перезаписывает переменную нового источника и сбрасывает автомат в исходную позицию: stage = 1, timer = 0. Например, при отправке команды на включение USB с мгновенным досылом AUX1 еще до завершения первого такта работы воркера, система корректно переключится на AUX1. Дополнительную очередь команд городить не потребовалось — еще один плюс в пользу опоры на родную логику.

Эмуляция в Unicorn

Прежде чем заливать модифицированный бинарник «в железо», код прогнали через эмулятор Unicorn. Симулировалось выполнение реальных инструкций Thumb декодера, диспетчера, измененной ветки кода, сегментов системных процедур и воркера источников. Аппаратные периферийные вызовы заменялись заглушками.

Контролировалось состояние памяти RAM, корректность целевых переходов, регистры, стек, вызовы штатных функций, процесс маршрутизации, распаковка и упаковка энергонезависимой памяти NVRAM, а также прерванные циклы переключения. Вердикт симулятора — PASS. Разумеется, это не дает стопроцентной гарантии стабильности на реальном процессоре, но позволяет исключить заведомо аварийный машинный код еще на этапе подготовки. Разница принципиальная.

Самый комичный нюанс проекта

После успешной симуляции настал момент истины. Я подготовил накопитель емкостью 32 ГБ с файловой системой FAT32, разместил на нем файл прошивки и инициировал процедуру обновления. Дисплей QUAD выдал надпись USB UPDATE, на мгновение задумался и выдал вердикт FILE CAN'T FIND.

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

В ящиках нашлась древняя флешка на 8 ГБ, также отформатированная в FAT32. С ней QUAD мгновенно распознал файл и штатно прошился кастомным образом RC1. Человечество вновь одержало победу над встроенным загрузчиком с помощью археологического флеш-накопителя.

Инсайты касательно загрузчика

До проведения этого этапа сохранялись опасения насчет проверки цифровых подписей, скрытых контрольных сумм и ограничений на изменение размера образа. Практический тест расставил приоритеты: в данном экземпляре QUAD 3 штатный бутлоадер безропотно принял приложение, выросшее на 64 байта, выполнил процедуру прошивки, после чего устройство успешно рапортовало о перезагрузке.

Попутно выяснилось, что строки USB UPDATE и FILE CAN'T FIND вообще отсутствуют в бинарнике самого приложения. Это косвенно подтверждает гипотезу о том, что USB-загрузчик автономен: он располагается в зарезервированной области 0x08000000, тогда как код приложения стартует с адреса 0x08010000.

Первое включение

После прошивки усилитель штатно вышел в рабочий режим. Проверка основных функций — питания, громкости, функции Mute, общего перебора источников, входов USB, AUX1, ARC и протокола HDMI CEC — показала полную работоспособность. Затем началось тестирование цифровых клавиш пульта, ради которого все и затевалось:

Клавиша пульта

Назначенный вход в RC1

0

USB

1

AUX1

2

ARC

Это именно прямой выбор входа, а не макрокоманда из серии циклических нажатий Source+. Клик по кнопке «0» мгновенно активирует USB из любого состояния — например, при активном входе PHONO; нажатие «1» переводит аппарат с Bluetooth на AUX1. Больше не требуется удерживать в голове информацию о том, какой источник был активен до отправки команды.

Зачем понадобился релиз SK2

Останавливаться на достигнутом и ограничиваться тремя входами после такого успеха было бы опрометчиво: всего у QUAD 3 восемь источников сигнала, в то время как на пульте красуется десять цифровых клавиш. Для следующей итерации была спроектирована полная карта соответствий:

Клавиша пульта

Планируемый вход в SK2

0

USB

1

AUX1

2

AUX2

3

PHONO

4

COAX

5

OPTICAL

6

ARC

7

Bluetooth

8

Резерв

9

Резерв

Логика интуитивна: кнопки с 1 по 3 отданы под аналоговые интерфейсы, с 4 по 6 — под проводные цифровую коммутацию, а позиция 7 закреплена за беспроводным модулем Bluetooth. Порт USB зарезервирован за кнопкой «0», поскольку в моей системе это основной музыкальный тракт.

Прямой доступ ко всем источникам уместился в диапазоне кнопок 0–7. Оставшиеся две клавиши могут пригодиться для специализированных задач вроде быстрого переключения между USB и AUX1 или макроса включения питания с одновременным выбором USB (последнее, впрочем, потребует отдельного препарирования цепей питания). Пока что превращать первую кастомную прошивку в подобие полноценной операционной системы нецелесообразно.

А как же исходная интеграция со стримером WiiM?

С появлением дискретных ИК-команд дальнейшая автоматизация домашней экосистемы существенно упростилась. Стример WiiM переключает выходы между USB Out и Line Out, платформа Home Assistant считывает этот статус и передает на усилитель соответствующий ИК-сигнал для активации входа USB или AUX1. Цепочка выглядит следующим образом:

WiiM output = USB      → IR discrete USB  → QUAD input = USB
WiiM output = Line Out → IR discrete AUX1 → QUAD input = AUX1

Больше не нужно вычислять шаги Source+, удерживать в памяти текущую позицию, искать опорный вход или синхронизировать логику автоматизации с действиями пользователя и шиной CEC. Реализовано именно то, что должно было присутствовать из коробки: команда задает конкретное состояние, а не относительное смещение.

Границы применимости и открытый репозиторий

Важно четко осознавать границы вмешательства в программную часть. Мы не затрагивали аудиотракт USB, конвертер ЦАП, сигнальный процессор DSP, интерфейсы HDMI и CEC, стек Bluetooth, защитные механизмы, регулировку громкости, цепи питания или структуру энергонезависимой памяти NVRAM. Перед нами минимальный бинарный патч штатной прошивки. Правило простое: чем меньше модификаций вносится в критически важный встроенный код, тем ниже риск внезапно обнаружить, что переключение входа AUX неожиданно блокирует систему термозащиты.

Успешно завершив аппаратные тесты, я развернул публичный репозиторий VincentVega73/quad3-custom-firmware. В нем принципиально не публикуются оригинальная прошивка QUAD и готовые модифицированные файлы с расширением .bin — это чужая интеллектуальная собственность и проприетарный код. Вместо этого выложен воспроизводимый скрипт-патчер: пользователь скачивает официальный образ с сайта производителя и локально генерирует измененный файл.

Репозиторий содержит скрипт firmware_patch.py, исходный код обработчика, карту ИК-команд, перечень идентификаторов входов, карту памяти Flash, тестовые сценарии для эмулятора Unicorn, инструменты бинарного сравнения и хэширования SHA256, руководства по установке, а также отчеты о прохождении тестов на реальном устройстве. Предусмотрен дисклеймер: успешный опыт автора не гарантирует идентичный результат на любом другом экземпляре QUAD 3.

Любые манипуляции с микропрограммой пользователь выполняет на свой страх и риск. Всегда есть вероятность превратить устройство в кирпич, лишиться гарантийного обслуживания или столкнуться с аппаратной ревизией, имеющей иную версию загрузчика, структуру флеш-памяти и лишенной возможностей восстановления. Тот факт, что мой аппарат благополучно принял релиз RC1, говорит лишь об успешном исходе конкретного эксперимента, а не о всеобщей сертификации для всех усилителей QUAD 3.

Выводы по итогам проделанной работы

Современный реверс-инжиниринг встраиваемого ПО стал невероятно доступным. Инструменты вроде Ghidra, Python, Capstone, Unicorn, языковые модели ИИ и базовые познания в архитектуре ARM позволяют превратить задачу, ранее требовавшую недель кропотливой работы инженера-программиста, в увлекательное техническое исследование. Это требует определенных усилий, но уже не смахивает на полугодовую археологическую экспедицию.

Для достижения практически полезной цели вовсе не обязательно препарировать систему целиком. В моем случае оказалось достаточно изолировать небольшой фрагмент логики: обработку ИК-сигналов, диспетчер, триггер запроса источника, воркер и процедуры маршрутизации. Детальное изучение этого узкого пути с полным игнорированием остального массива кода оказалось в разы эффективнее попыток полной декомпиляции чужого ПО в красивый проект на языке Си.

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

Наконец, серьезная инженерная мысль неизменно способна споткнуться о прозаическую бытовую мелочь. После глубокого анализа инструкций Thumb-2, векторов прерываний, таблиц NVRAM и конечных автоматов выяснилось, что усилитель QUAD просто наотрез отказывался воспринимать конкретную 32-гигабайтную флешку, в то время как старый накопитель на 8 ГБ справился с задачей безупречно. Пожалуй, это самая реалистичная иллюстрация буддизма в сфере embedded-разработки.

Планы на будущее

В разработке находится релиз SK2, призванный обеспечить прямой выбор всех восьми источников в соответствии с ранее составленной картой. После этого штатный пульт ДУ сможет активировать нужный вход единственным нажатием — пожалуй, революционная функция для техники образца 2026 года.

Следующий этап лежит уже за пределами реверса самого усилителя: интеграция пользовательских пресетов WiiM Smart Preset, платформы Home Assistant и модифицированных ИК-команд QUAD. Итоговый сценарий прост: одно касание клавиши — и музыка начинает играть. Удивительно длинный путь ради опции, которую вендор мог заложить в микропрограмму силами тех же шести десятков байт.

Источники исторической справки

Материалы исторического раздела опираются на следующие публикации:

  1. QUAD, Our Story. Официальная летопись бренда, основание в 1936 году, переезд в Хантингдон, этимология названия QUAD, усилители QUAD II, акустика ESL, линейки 33/303, 405 и современное возрождение классических серий.

  2. John Atkinson, Peter J. Walker 1916–2003, Stereophile. Биографический очерк о Питере Уокере, истоках компании Acoustical Manufacturing Company, моделях QA12/Pre, QUAD II и электростатах ESL.

  3. QUAD, Electrostatic Speakers / ESL history. Исторический экскурс в разработку модели ESL-57 и последующих поколений электростатических излучателей.

  4. QUAD, 33 & 303 Series. Официальная концепция возрождения легендарных компонентов 33 и 303, мотивация переиздания и преемственность поколений.

  5. What Hi-Fi?, 7 of the best British hi-fi innovations and technologies. Обзор ключевых британских инноваций в сфере Hi-Fi, включая технологии QUAD, ESL и Current Dumping.

  6. QUAD, QUAD 3. Страница продукта: дизайн-концепция, связь с QUAD 22 и новым 33, характеристики чипа ESS9038Q2M, класса AB, трансформатора на 235 В·А, поддержки USB 768kHz/DSD512, HDMI ARC, Bluetooth, фонокорректора и прочих параметров.

  7. What Hi-Fi?, Quad 3 review: vintage looks, modern features, smooth sound, 25 March 2026. Обзор-рецензия с важным уточнением: QUAD 3 не является буквальным клоном старых аппаратов, а выступает в роли совершенно нового интегрального усилителя с ретро-дизайном, вдохновленным моделями 33/303 и 22.

  8. Hi-Fi News, Quad 3 amplifier, September 2025. Тестирование QUAD 3 в контексте возвращения легендарных линеек и общего «ренессанса» философии марки QUAD.

 

Источник

Поделиться:

Похожие статьи

Поиск по играм, новостям и статьям…

Введите не менее двух символов

Введите не менее двух символов