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










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