|
|||||||
Подключение к встроенному шеллу на синтезаторе Yamaha PSR-E473
Время создания: 26.03.2025 12:16
Автор: Xintrea
Текстовые метки: yamaha, PSR, e473, синтезатор, клавиши, MIDI, USB, интерфейс, шелл, shell, консоль, datasheet
Раздел: Музыка - Пианино - Yamaha
Запись: xintrea/mytetra_syncro/master/base/17429806165yp7w437tg/text.html на raw.github.com
|
|||||||
|
|||||||
Как оказалось, самая актуальная модель линейки PSR на 2023-2025 год - а именно синтезатор Yamaha PSR E-473, имеет встроенный отладочный shell, к которому можно подключиться по USB-кабелю, через разъем, в котором совмещены USB и MIDI протоколы. Наличие такого шелла обнаружила исследователь "огороженной" техники Portasynthinca3 в момент, когда она пыталась запустить мультфильм Bad Apple на экране своей старенькой Yamaha PSR E-433, модель 2012 года. (Есть такой челленж в среде хакеров - запустить DOOM на каком-нибудь не предназначенном для этого оборудовании. Показать клип Bad Apple на устройстве, совершенно не предназначенном для этого - из той же серии). Естественно, компания Yamaha всячески скрывает информацию о том, как устроены их синтезаторы с точки зрения схемотехники. В сети Интернет с большим трудом можно найти Service Manual на какие-нибудь устаревшие модели, но даже в этих документах никаких подробностей об устройстве программной части, о возможностях подключения, отладки и изменения настроек - никакой информации нет. Всего из пары источников можно узнать хотя бы то, что Ямаховский чип SWL - это на самом деле микроконтроллер с архитектурой ARM7. В общем, я установил и подправил скрипты, которые Portasynthinca3 сделала во время своих изысканий, и оказалось, что в моем более новом синтезаторе этот метод подключения все так же работает! Да, прошло более 10 лет, были выпущены модели E-433, E-443, E-453, E-463, E-473, и по-всей видимости, во всех них имеется отладочный шелл, который можно использовать для исследования внутренностей синтезатора. Что нужно изменить в скрипте shell.py, чтобы подключиться к своему синтезатору? Надо подключить USB-кабель к компьютеру, и дать команду: > amidi -l Dir Device Name IO hw:1,0,0 Digital Keyboard MIDI 1 Значение Name, т. е. строку "Digital Keyboard MIDI 1" надо прописать в shell.py в переменных in_port и out_port. Вот что мой синтезатор Yamaha E-473 рассказывает о себе и командах шелла: login passwd? #0000 login OK > help logout help ? info ver stack perf-on perf-off perf-disp d dp d xxxxx d/s xxxxx m ADDRESS DATA m/b ADDRESS DATA m/w ADDRESS DATA m/l ADDRESS DATA regist voiceset ots func mdb backup chkprm freearea jobconid dispinfo swmask ioport getsw pushsw sendsw perf-key perf-sw perf-pedal perf-wheel perf-vol sound-cnt-start sound-cnt-disp flash-write voice-time regist-time Ого, по сравнению с версией от MAY 16 2012, в этом шелле добавилось 25 новых команд! Вот что показывают команды, выводящие основную информацию о синтезаторе: > info DevelopName PSR-E473 DevelopNumber #4022 Main DevelopNumber #4022 Make data & time MAY 28 2021 14:21:36 J/E Select English > ver Main Version 1.01 Boot Version 1.00 Style Version 1.00 Song Version 1.00 Param Version 1.01 Wave Version 1.00 Pattern Version 1.00 Unshi Version No Data Adss Version No Data Manufacturer : 0105 : YAMAHA. Product version : 0200 : V.2.00.00 Я все делал поздно ночью, и пока не стал запускать неизвестные команды, с которыми еще надо разобраться. Так что в данный момент рассказываю о самой возможности получения низкоуровневого доступа к внутреннему устройству Yamaha PSR E-473. Некоторые сведения о командах и о том как получить дамп памяти, можно посмотреть в следующем обсуждении: https://github.com/portasynthinca3/swl01u/issues/1 Имеется так же описание команд встроенного шелла Yamaha на русском языке. Продолжение. Вот какие сведения можно получить из шелла. Дамп первых байт > d 0 00000000 00 80 01 01 01 04 00 00 05 01 00 00 0B 01 00 00 00000010 11 01 00 00 17 01 00 00 1D 01 00 00 23 01 00 00 # 00000020 29 01 00 00 2F 01 00 00 35 01 00 00 3B 01 00 00 ) / 5 ; 00000030 41 01 00 00 47 01 00 00 4D 01 00 00 53 01 00 00 A G M S 00000040 59 01 00 00 5F 01 00 00 65 01 00 00 6B 01 00 00 Y _ e k 00000050 71 01 00 00 77 01 00 00 7D 01 00 00 83 01 00 00 q w } 00000060 89 01 00 00 8F 01 00 00 95 01 00 00 9B 01 00 00 00000070 A1 01 00 00 A7 01 00 00 AD 01 00 00 B3 01 00 00 00000080 B9 01 00 00 BF 01 00 00 C5 01 00 00 CB 01 00 00 00000090 D1 01 00 00 D7 01 00 00 DD 01 00 00 E3 01 00 00 000000A0 E9 01 00 00 EF 01 00 00 F5 01 00 00 FB 01 00 00 000000B0 01 02 00 00 07 02 00 00 0D 02 00 00 13 02 00 00 000000C0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 000000D0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 000000E0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 000000F0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 > d 100 00000100 FF F7 FE BF 02 20 FF F7 FB BF 03 20 FF F7 F8 BF 00000110 04 20 FF F7 F5 BF 05 20 FF F7 F2 BF 06 20 FF F7 00000120 EF BF 07 20 FF F7 EC BF 08 20 FF F7 E9 BF 09 20 00000130 FF F7 E6 BF 0A 20 FF F7 E3 BF 0B 20 FF F7 E0 BF 00000140 0C 20 FF F7 DD BF 0D 20 FF F7 DA BF 0E 20 FF F7 00000150 D7 BF 0F 20 FF F7 D4 BF 10 20 FF F7 D1 BF 11 20 00000160 FF F7 CE BF 12 20 FF F7 CB BF 13 20 FF F7 C8 BF 00000170 14 20 FF F7 C5 BF 15 20 FF F7 C2 BF 16 20 FF F7 00000180 BF BF 17 20 FF F7 BC BF 18 20 FF F7 B9 BF 19 20 00000190 FF F7 B6 BF 1A 20 FF F7 B3 BF 1B 20 FF F7 B0 BF 000001A0 1C 20 FF F7 AD BF 1D 20 FF F7 AA BF 1E 20 FF F7 000001B0 A7 BF 1F 20 FF F7 A4 BF 20 20 FF F7 A1 BF 21 20 ! 000001C0 FF F7 9E BF 22 20 FF F7 9B BF 23 20 FF F7 98 BF " # 000001D0 24 20 FF F7 95 BF 25 20 FF F7 92 BF 26 20 FF F7 $ % & 000001E0 8F BF 27 20 FF F7 8C BF 28 20 FF F7 89 BF 29 20 ' ( ) 000001F0 FF F7 86 BF 2A 20 FF F7 83 BF 2B 20 FF F7 80 BF * + Примечание: попытка сделать дамп с адреса 0x01018000 приводит к зависанию. Замер производительности и задачи через perf-disp Команда perf-disp показывает 44 задачи. Перед командой perf-disp надо сделать команду perf-on, а когда замеры закончены - perf-off. > perf-disp -9Sec -8Sec -7Sec -6Sec -5Sec -4Sec -3Sec -2Sec -1Sec 0Sec (MAX=100%) ID 00 Task 0.5 0.5 0.5 0.6 0.5 0.5 0.5 0.7 0.7 0.2 ID 01 Task 0.0 0.0 0.5 0.1 0.1 0.0 0.0 0.0 0.0 0.0 ID 02 Task 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 ID 03 Task 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 ID 04 Task 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 ID 05 Task 0.0 0.0 0.1 0.0 0.0 0.0 0.0 0.0 0.0 0.0 ID 06 Task 0.0 0.0 0.0 0.0 0.0 0.0 0.1 0.0 0.0 0.0 ID 07 Task 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 ID 08 Task 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 ID 09 Task 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 ID 10 Task 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 ID 11 Task 1.8 1.7 1.9 1.6 1.6 1.6 1.7 1.4 1.7 0.9 ID 12 Task 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 ID 13 Task 0.2 0.1 0.3 0.0 0.1 0.1 0.1 0.1 0.1 0.1 ID 14 Task 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 ID 15 Task 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 ID 16 Task 2.8 1.5 1.8 1.8 2.7 1.8 2.8 2.3 1.9 1.1 ID 17 Task 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 ID 18 Task 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 ID 19 Task 0.3 0.4 0.4 0.5 0.4 0.3 0.5 0.3 0.6 0.1 ID 20 Task 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 ID 22 Task 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 ID 23 Task 0.2 0.4 0.1 0.2 0.2 0.2 0.1 0.0 0.2 0.1 ID 24 Task 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 ID 25 Task 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 ID 26 Task 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 ID 29 Task 1.6 1.8 1.9 1.4 1.8 1.7 1.7 1.5 1.7 1.0 ID 30 Task 0.3 0.4 0.3 0.4 0.3 0.2 0.3 0.5 0.3 0.1 ID 31 Task 0.3 0.2 0.3 0.3 0.1 0.2 0.4 0.1 0.3 0.2 ID 33 Task 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 ID 34 Task 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 ID 35 Task 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 ID 36 Task 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 ID 37 Task 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 ID 39 Task 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 ID 40 Task 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 ID 43 Task 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 ID 44 Task 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 Значения управляющих регистров Команда regist показывает следующую информацию: > regist ========= Regist Parameter ========= Part param Main Dual Left On/Off : 127 000 000 Voice No. : 000 107 088 Bank MSB : 000 000 000 Bank LSB : 115 112 112 Prg Change : 000 048 033 Volume : 110 045 080 Octave : 000 000 -001 Panpot : 064 064 064 Rev Depth : 016 090 008 Cho Depth : 000 000 000 Attk Time : 064 064 064 Rel Time : 064 064 064 Fil Cutoff : 064 064 064 Fil Reso : 064 064 064 Common Param Rev Type : 003 Cho Type : 003 Rev Total : 064 Style No. : 000 Acmp On/Off : 001 Style Sect : 005 Acmp Volume : 100 Transpose : 000 Pitch BendR : 002 Acmp Split : 054 Split Point : 054 DSP1 Type : 042 DSP2 Type : 001 DSP2 Part : 001 Harm On/Off : 000 Harm Type : 002 Harm Volume : 080 Tempo : 117 Nkob Asin : 000 Apg On/Off : 000 Apg Type : 000 Apg Vel : 001 Apg Quan : 002 Apg Pdl Fnc : 000 Acmp Part : 0xFFFFFF00 ==================================== Настройки голоса Команда voiceset, похоже, показывает настройки, с которыми воспроизводится основной голос: > voiceset ======== Voiceset Parameter ======== Part param Main Dual Left On/Off : 127 000 000 Voice No. : 000 107 088 Bank MSB : 000 000 000 Bank LSB : 115 112 112 Prg Change : 000 048 033 Volume : 110 045 080 Octave : 000 000 -001 Panpot : 064 064 064 Rev Depth : 016 090 008 Cho Depth : 000 000 000 Vel Depth : 064 066 064 Vel Offset : 064 064 064 Fil Cutoff : 064 064 064 Fil Reso : 064 064 064 Trns On/Off : 001 001 001 Common Param Cho Type : 003 DSP1 Type : 042 DSP2 Type : 001 Harm On/Off : 000 Harm Type : 002 Harm Volume : 080 Apg On/Off : 000 Apg Type : 000 Apg Pdl Fnc : 000 ==================================== Настройки OTS Не совсем понятно, это настройки чего. Возможно это настройки голоса, который включится если нажать кнопку OTS. > ots =========== OTS Parameter ========== Part param Main Dual Left On/Off : 127 000 000 Voice No. : 000 107 088 Bank MSB : 000 000 000 Bank LSB : 115 112 112 Prg Change : 000 048 033 Volume : 110 045 080 Octave : 000 000 -001 Panpot : 064 064 064 Rev Depth : 016 090 008 Cho Depth : 000 000 000 Attk Time : 064 064 064 Rel Time : 064 064 064 Fil Cutoff : 064 064 064 Fil Reso : 064 064 064 Common Param DSP1 Type : 042 DSP2 Type : 001 Harm On/Off : 000 Harm Type : 002 Harm Volume : 080 Apg On/Off : 000 Apg Type : 000 ==================================== Значения всех функций инструмента В синтезаторе есть функции, значениями которых можно управлять через панель управления синтезатором. Все функции описаны в документации. Команда func выводит все значения в консоль: > func ======== Function Parameter ======== Part param Main Dual Left Voice No. : 000 107 088 Volume : 110 045 080 Octave : 000 000 -001 Panpot : 064 064 064 Rev Depth : 016 090 008 Cho Depth : 000 000 000 Attk Time : 064 064 064 Rel Time : 064 064 064 Fil Cutoff : 064 064 064 Fil Reso : 064 064 064 Common Param Rev Type : 003 Cho Type : 003 Rev Total : 064 M EQ Type : 002 Acmp Volume : 100 Song Volume : 100 Pattern Vol : 100 Aux Volume : 050 USB Volume : 100 Transpose : 000 Master Tune : 000 Pitch BendR : 002 Acmp Split : 054 Split Point : 054 Tch Sense : 002 Msp On/Off : 000 Msp Pan : 064 DSP1 Type : 042 DSP2 Type : 001 DSP2 Part : 001 Mic Volume : 127 Mic Pan : 064 Mic Reverb Depth: 127 Mic Chorus Depth: 127 Blank Cut : 127 Harm Type : 002 Harm Volume : 080 Apg Type : 000 Apg Vel : 001 Apg Quan : 002 Apg Pdl Fnc : 000 Style Freeze : 000 Transpose Freeze: 000 Voice Freeze : 000 Pst Scale : 000 Base Note : 000 Tune Note : 000 S. Tune C : 000 S. Tune Cs : 000 S. Tune D : 000 S. Tune Ef : 000 S. Tune E : 000 S. Tune F : 000 S. Tune Fs : 000 S. Tune G : 000 S. Tune Af : 000 S. Tune A : 000 S. Tune Bf : 000 S. Tune B : 000 LocalOn/Off : 127 Ext Clock : 000 Key Out : 127 Style Out : 000 Song Out : 000 Loop Back : 001 Metro Sig : 004 Metro Den : 002 Metro Vol : 100 Lsn Trk R : 000 Lsn Trk L : 001 Wait Mode : 002 Demo Group : 002 Demo Play : 001 SP Mute : 001 A Pow Off : 000 Battery Sel : 000 Language : 000 ==================================== Сохраняемые параметры Команда backup показывает, какие параметры с какими значениями сохраняются в долгосрочную память, которая хранит значения между выключениями синтезатора. > backup ======= Backup Ram Parameter ======= Part param Main Dual Left Common Param Rev Total : 064 M EQ Type : 002 Acmp Volume : 100 Song Volume : 100 Pattern Vol : 100 Master Tune : 000 Pitch BendR : 002 Acmp Split : 054 Split Point : 054 Tch Sense : 002 Mic Volume : 127 Mic Pan : 064 Mic Reverb Depth: 127 Mic Chorus Depth: 127 Blank Cut : 127 Style Freeze : 000 Transpose Freeze: 000 Voice Freeze : 000 Loop Back : 001 Metro Vol : 100 Grade : 127 Wait Mode : 002 Demo Group : 002 Demo Play : 001 Demo Cancel : 000 A Pow Off : 000 Battery Sel : 000 Language : 000 ==================================== Непонятная команда chkprm Следующая команда непонятно что делает. Судя по названию, должна проверять какие-то параметры. Вывод команды chkprm следующий: > chkprm ========== Check Parameter ========= Part param Main Dual Left Common Param Msp On/Off : 000 ==================================== Свободное место на диске Непонятно, на каком диске. Возможно, на воткнутой в инструмент флешке. > freearea Disk Free Area 1811456 Команда jobconid Данная команда как-то связана с состоянием дисплея (экрана) инструмента. Как она изменяется написано в следующем разделе. > jobconid Jobcon ID [Alert 000] [Popup 000] [Hold3 000] [Hold2 000] [Hold1 000] [Base 004] [Active 004] [Char Active Jobcon ID 004] Команда dispinfo Данная команда, похоже, отображает состояние дисплея инструмента, (то есть режим работы, который в данный момент используется?) Ниже показывается как меняется состояние jobconid и dispinfo при последовательном нажатии кнопок Voice - Style - Groove Creator - Voice. Когда Voice: > jobconid Jobcon ID [Alert 000] [Popup 000] [Hold3 000] [Hold2 000] [Hold1 000] [Base 004] [Active 004] [Char Active Jobcon ID 004] > dispinfo Display ID 002 (Jobcon ID:004)% Когда Style: > jobconid Jobcon ID [Alert 000] [Popup 000] [Hold3 000] [Hold2 000] [Hold1 000] [Base 005] [Active 005] [Char Active Jobcon ID 005] > dispinfo Display ID 003 (Jobcon ID:005)% Когда Groove Creator: > jobconid Jobcon ID [Alert 000] [Popup 000] [Hold3 000] [Hold2 000] [Hold1 000] [Base 005] [Active 005] [Char Active Jobcon ID 005] > dispinfo Display ID 003 (Jobcon ID:005)% Когда опять Voice: > jobconid Jobcon ID [Alert 000] [Popup 000] [Hold3 000] [Hold2 000] [Hold1 000] [Base 004] [Active 004] [Char Active Jobcon ID 004] > dispinfo Display ID 002 (Jobcon ID:004)% Команда swmask Возможно, эта команда показывает или задает маску на клавиши панели управления (свитчи, switch). Сказать точно что делает данная команда пока сложно. > swmask Mask Pattern None Адреса портов ввода-вывода микроконтроллера Адреса показывает команда ioport: > ioport I/O Port CPIO39_32 0x0000000F CPIO31_16 0x00000000 GPIO15_00 0x00000CFD CPO11_00 0x000006A5 CPI08_00 0x00000081 Просмотр истории нажатия клавиш на панели управления Нажатие клавиш на панели управления. Не реагирует на клавиши фортепиано. Были последовательно нажаты клавиши:
В списке ниже их коды получаются задом-наперед: > getsw SW History new 018 (0x12) 019 (0x13) 018 (0x12) 146 (0x92) 145 (0x91) 144 (0x90) 019 (0x13) 146 (0x92) 145 (0x91) 144 (0x90) old Для дальнейшего эксперимента записаны коды кнопок:
Команды pushsw и sendsw Через sendsw можно делать нажатия клавиш Voice, Style, Groove, Song и других. Например, перейти в режим Voice из любого другого режима: sendsw 12 Перейти в режим Style: sendsw 13 Нажатие кнопки Старт в режиме Song. Начнет проигрываться демонстрационная мелодия 004 Gp demo: > pushsw 3C > sendsw 3C Останавливается этими же двумя командами. Без pushsw 3C не работает. Запускается демо-мелодия потому, что был режим Song. В режиме Voice можно запустить автоаккомпаниент, сделать Fill, остановить автоаккомпанимент: Start > pushsw 3с > sendsw 3c Fill > pushsw 39 > sendsw 39 Start (срабатывает как стоп) > pushsw 3c > sendsw 3c Однозначно сказать, что делает команда pushsw, пока невозможно. То ли это аналог нажатия без отпускания (удерживание кнопки), то ли еще что-то. Группа команд perf-* Имеется четыре комнды, начинающиеся на perf. Непонятно что они делают. Наверно, какие-то измерения. > perf-key Illegal Debug Sw : SYS_MEASURE_OP_PERF > perf-sw Illegal Debug Sw : SYS_MEASURE_OP_PERF > perf-pedal Illegal Debug Sw : SYS_MEASURE_OP_PERF > perf-wheel Illegal Debug Sw : SYS_MEASURE_OP_PERF > perf-vol Illegal Debug Sw : SYS_MEASURE_OP_PERF Предварительный ввод команды perf-on ни к чему не приводит. Команды sound-cnt-start и sound-cnt-disp Непонятно, что они должны показывать. > sound-cnt-start > sound-cnt-disp TG Sound Count Max = 0 Проигрывние автоаккомпанимента, игра мелодии, нажатие звуков Quick Sample к изменению значения не приводят. Надо понять, что значит сокращение TG. Команды и regist-time Возможно, какие-то замеры времени исполнения. > voice-time Illegal Debug Sw : VOICE_CHG_TIME_PERF_MEASURE > regist-time Illegal Debug Sw : REGIST_PLAY_TIME_PERF_MEASURE Команда flash-write Запускать не стал во избежание деструктивных действий. Возможно, это команда всего лишь записывает что-то на внешнюю флешку. А может быть перезаписывает прошивку на микросхему FLASH с файла с внешней флешки. Пока неясно, надо разбираться с архитектурой и дизассемблить. |
|||||||
Так же в этом разделе:
|
|||||||
![]() |
|||||||
|
|||||||
|