Что такое Мурмулятор я уже писал тут. Немного повторюсь — это ультрабюджетная «материнская плата», в которую вставляется «процессор» — плата на основе RP2040 (Raspberry Pi Pico) или RP2350 (Raspberry Pi Pico 2). Мурмуляторы бывают разные — и под VGA выход, и под HDMI, и под всякую экзотику типа небольших TFT экранчиков на чипах ILI9341/ST7789. Есть устройства с дополнительной памятью PSRAM, есть с поддержкой дополнительных портов USB через отдельную микросхему‑хаб. И всё это великолепие требует драйверов. Стиль разработки под RP2040/2350 — собрать это всё вместе в один монолит baremetal‑прошивки. И плодятся прошивки кучами... Например, релиз pico‑spec 1.2.C насчитывает более 20-ти вариантов сборки под разное оборудование, и это — не предел.
Чтобы как‑то упорядочить всё это безобразие, была разработана операционная система, которая содержит в себе необходимые драйвера. Идея в том, что настраивать нужно только её, а прикладные программы уже должны использовать API для доступа к функционалу...
Во время разработки МОС существовал только чип RP2040, и про 2350 не было даже слышно, соответственно, разработанная ОС была полностью заточена под этот существующий тогда SoC. О самой ОС и её использовании я как‑то уже выпускал статьи. Поэтому сосредоточусь на ключевых отличиях новой версии.
Никаких новых возможностей версия 2.0 пока не предоставляет. Это просто полное портирование МОС на немного отличающийся SoC.
Первое основное отличие — 2.0 не умеет запускать .uf2-файлы. Для запуска «тяжёлых» приложений необходимо их заранее собрать «с отступом». Такой формат получил название «.m1p2» — т. е. под Мурмулятор первых версий с «пикой» второй версии. Этот же формат использует pico‑launcher для RP2350, который тоже не умеет запускать .uf2-файлы (в отличии от версии под RP2040).
Это ограничение связано с другой моделью запуска приложений. В RP2040 существовал блок boot2 в начале адресного пространства flash‑памяти, который потом уже запускал основную программу. В RP2350 его больше нет. Раньше можно было подменить этот стандартный блок и управлять загрузкой. Теперь же PicoSDK собирает .uf2-файлы так, что полезный код начинается с самого начала области flash‑памяти, и без его повреждения туда вклиниться нельзя (ну, или я не нашёл простой способ это сделать).
Следующее отличие связано с наследием pico-launcher'а — тот занимает первые 64к флэш‑памяти, т. е. для m1p2-формата они бесполезны, поэтому там теперь «живёт» часть ОС, которая в .ld‑файле описана, как LFA (low‑flash‑area). Но, если для pico‑launcher'а этой области достаточно, то ядро МОС с драйверами требует в два раза больше флэш‑памяти. Поэтому, в .ld‑файле прописана ещё одна область зарезервированная за ОС — HFA (high‑flash‑area). В МОС под RP2040 это основная область, в 2.0 — дополнительная. Тут используется тот же трюк, что и ранее — размер флэша всегда предполагается 16 МБ, т.к. это максимальный поддерживаемый объём. Если же установлено меньше, то попытка туда писать приведёт к «завороту адресов». Т. е. мы всё равно попадём в конец адресного пространства флэша, сколько бы его ни было — старшие биты адреса будут игнорироваться при записи и чтении. Для флэшки, скажем, на 4 МБ, с точки зрения софта, там будет 16, но это один и тот же блок в 4М, повторённый 4 раза.
Хорошей опцией RP2350 является обратная совместимость с RP2040, но, к сожалению, неполная. Т. е. система команд RP2350 (ARM v7) является подмножеством RP2040 (ARM v6), но номера некоторых регистров и связанные с ними константы разработчики слегка изменили, и тот софт, что был написан и скомпилирован под МОС ранних версий должен работать на 2.0, но это не всегда так. Часть программ всё же игнорировала API и использовала аппаратуру «напрямую». Такие проги будут глючить или виснуть.
Основная работа по портированию известных мне программ уже проведена, и они все имеются в папке MOS2 соответствующего архива. Поскольку это первый релиз, то основной багфикс ещё впереди. Обсуждение процесса разработки происходит тут. Основные связанные новости можно почитать тут.
Самое важное в RP2350 — на нём просто больше памяти, т. е. шире возможности для программистов. Ну и небольшая ложка мёда — полноценный FPU. На RP2040 стандартный тест на мокрые камни в двойной точности выдавал всего 33 MIPS, а на RP2350 — 333 при частоте чипа 378 Mhz. Для сравнения: AMD K6–2 450 MHz ~320 MFLOPS чуть медленнее RP2350 на 378MHz, а Intel Pentium III 500 MHz ~350 MFLOPS — чуть быстрее. Сравнивать настолько разные чипы, да ещё и не с точно одинаковым тестом — несколько некорректно, но просто для ориентирования — норм.
Ещё, на RP2350 под MOS 2.0 удалось запустить linpack, пусть только в одинарной точности, но хоть что‑то — на 2040, например, не хватало памяти. Этот тест выдал 5.24 Мflops, что на уровне Pentium Overdrive 83 MHz, чуть быстрее Pentium 75, чуть медленнее Pentium 100.
Так как платы захвата у меня нет, то картинки будут «с мобильника»:










Ну, думаю, на сегодня — хватит ) Спасибо за внимание.