Что такое Мурмулятор я уже писал тут. Немного повторюсь - это ультрабюджетная "материнская плата", в которую вставляется "процессор" - плата на основе 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-памяти, который потом уже запускал основную программу. В RP2340 его больше нет. Раньше можно было подменить этот стандартный блок и управлять загрузкой. Теперь же 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.

Так как платы захвата у меня нет, то картинки будут "с мобильника":

Murmulator Commander
Murmulator Commander
Момент загрузки ОС, до старта приложений
Момент загрузки ОС, до старта приложений
стандартный тест скорости SRAM
стандартный тест скорости SRAM
Пространство Мандельброта - программа на Бейсике под МОС
Пространство Мандельброта - программа на Бейсике под МОС
утилитка отображения состояния памяти
утилитка отображения состояния памяти
тестирование дополнительной памяти во внешнем чипе PSRAM
тестирование дополнительной памяти во внешнем чипе PSRAM
Тест на "сухие камни" - уровень Pentium Pro 200
Тест на "сухие камни" - уровень Pentium Pro 200
тест на "мокрые камни"
тест на "мокрые камни"
знаменитый linpack
знаменитый linpack
утилитка тестирования swap-файла
утилитка тестирования swap-файла

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

Комментарии (1)


  1. Grommy
    16.08.2025 05:16

    Спасибо! Пока только с первым играюсь иногда :)