Держу я в руках плату RP2350pc и размышляю. Что интересного можно из неё изобразить?

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

Втыкаем произвольную USB клавиатуру и можем работать в MS-DOS. Не каком-то урезанном, а в последнем версии 7.10. Во внутренней flash памяти находится виртуальный флопик, с которого и грузится операционка при отсутствии прочих устройств. Суём карточку microSD, создаём разделы командой fdisk.exe, форматируем командой format.com. Получаем диск C:, причём с файловой системой FAT32, с длинными именами файлов. Можем подключить внешний USB флоповод и читать-писать-форматировать реальные флопики 3.5” как диск A:.
Как можно такое соорудить? Тут две части, одна очевидная, другая главная. Очевидно, нужен симулятор процессора i386. Более младшие модели не годятся, так как на i286 и ниже последний MS-DOS не работает. Опенсорсных реализаций i386 существует в изобилии. Какой-нибудь да подберём.
Но процессор вовсе не главное в айбиэмовском компьютере. А главный тут биос. Который сам по себе вещь тяжёлая. Но во-первых, существуют опенсорсные биосы. Во-вторых, есть и переписанные целиком на Си, так что можно забыть про ассемблер. И в третьих, не нужно делать из биоса бинарник в ПЗУ. Его будет выполнять процессор RP2350 как родной код RISC-V. По каждой команде INT не прыгать в ПЗУ биоса, а вызывать нужную функцию, написанную на Си.
Получается вполне обозримый проект. И начать можно прямо сейчас, ведь хардвер готов.

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

Втыкаем произвольную USB клавиатуру и можем работать в MS-DOS. Не каком-то урезанном, а в последнем версии 7.10. Во внутренней flash памяти находится виртуальный флопик, с которого и грузится операционка при отсутствии прочих устройств. Суём карточку microSD, создаём разделы командой fdisk.exe, форматируем командой format.com. Получаем диск C:, причём с файловой системой FAT32, с длинными именами файлов. Можем подключить внешний USB флоповод и читать-писать-форматировать реальные флопики 3.5” как диск A:.
Как можно такое соорудить? Тут две части, одна очевидная, другая главная. Очевидно, нужен симулятор процессора i386. Более младшие модели не годятся, так как на i286 и ниже последний MS-DOS не работает. Опенсорсных реализаций i386 существует в изобилии. Какой-нибудь да подберём.
Но процессор вовсе не главное в айбиэмовском компьютере. А главный тут биос. Который сам по себе вещь тяжёлая. Но во-первых, существуют опенсорсные биосы. Во-вторых, есть и переписанные целиком на Си, так что можно забыть про ассемблер. И в третьих, не нужно делать из биоса бинарник в ПЗУ. Его будет выполнять процессор RP2350 как родной код RISC-V. По каждой команде INT не прыгать в ПЗУ биоса, а вызывать нужную функцию, написанную на Си.
Получается вполне обозримый проект. И начать можно прямо сейчас, ведь хардвер готов.

no subject
Date: 2026-01-27 06:31 (UTC)no subject
Date: 2026-01-27 08:28 (UTC)no subject
Date: 2026-01-27 17:40 (UTC)no subject
Date: 2026-01-27 17:07 (UTC)no subject
Date: 2026-01-27 17:40 (UTC)no subject
Date: 2026-01-28 03:21 (UTC)no subject
Date: 2026-01-28 05:31 (UTC)no subject
Date: 2026-01-27 07:07 (UTC)no subject
Date: 2026-01-27 08:27 (UTC)https://github.com/MiSTer-devel/ao486_MiSTer
no subject
Date: 2026-01-27 07:36 (UTC)Зачастую оказывается что на ассемблере проще.
А если API предусматривает callback в пользовательский код - потребуется городить логику переходов между нативным и эмулируемым кодом.
no subject
Date: 2026-01-27 08:30 (UTC)no subject
Date: 2026-01-27 08:44 (UTC)И нужно различать когда это возврат в ассемблерный эмулируемый код, а когда в Си.
Скорее всего потребуется завести "магические адреса" переход на которые вызывает "выход из матрицы"
Я пытался эмулировать BIOS на C#, и пришел к необходимости большие куски писать на ASM.
Hardware намного легче эмулировать, у неё нет стека
no subject
Date: 2026-01-27 17:20 (UTC)А что вызвало потребность писать на ASM?
no subject
Date: 2026-01-27 18:52 (UTC)Иначе потребуется городить многопоточность.
Автор SIMH например намеренно постулировал что его эмулятор одно-поточный, чтобы избежать сложностей.
Но он и не эмулирует API, только аппаратуру
no subject
Date: 2026-01-27 21:06 (UTC)Многопоточности лучше избегать пока можно. Пока я не вижу нужды что-то писать на ASM.
no subject
Date: 2026-01-28 05:35 (UTC)Как можно понять задачи точной потактовой эмуляции изначально не стоит и подход "выполняется за нулевое время" - именно то самое
no subject
Date: 2026-01-27 20:09 (UTC)no subject
Date: 2026-01-27 20:20 (UTC)Далее, надо различать, какие INT являются трамплинами, а какие эмулируемый код для себя использует.
DOS программы могли произвольные вектора прерываний задействовать под свои нужды.
Решение опять сводится к магическим адресам
no subject
Date: 2026-01-27 21:08 (UTC)