vak: (Бодхидхарма)
[personal profile] vak
Держу я в руках плату 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 не прыгать в ПЗУ биоса, а вызывать нужную функцию, написанную на Си.

Получается вполне обозримый проект. И начать можно прямо сейчас, ведь хардвер готов.

Date: 2026-01-27 06:31 (UTC)
realwired: (Default)
From: [personal profile] realwired
У меня на Jetson Nano живёт Box86, на нем Wine, а на нем Photoshop CS. Причем живёт полноценно а не показать/удивить :)

Date: 2026-01-27 17:40 (UTC)
realwired: (Default)
From: [personal profile] realwired
Потому что могу

Date: 2026-01-27 17:07 (UTC)
last_least: (Default)
From: [personal profile] last_least
живёт полноценно - в смысле в нем фото редактируются?

Date: 2026-01-27 17:40 (UTC)
realwired: (Default)
From: [personal profile] realwired
Ну да, а зачем же ещё?

Date: 2026-01-28 03:21 (UTC)
last_least: (Default)
From: [personal profile] last_least
Странно просто - и софт старый и железо вроде не особо мощное.

Date: 2026-01-28 05:31 (UTC)
realwired: (Default)
From: [personal profile] realwired
А! SC2 на самом деле, не CS. С одной стороны это всё тот же Фотошоп, то что мне нужно никак не поменялось в нынешних версиях. С другой - самое то для не особенно мощного железа.

Date: 2026-01-27 07:07 (UTC)
ufm: (Default)
From: [personal profile] ufm
Как мне кажется, варианты когда это не програмный эмулятор а на FPGA - прикольнее. :)

Date: 2026-01-27 07:36 (UTC)
ircicq: (Default)
From: [personal profile] ircicq
По каждой команде INT не прыгать в ПЗУ биоса, а вызывать нужную функцию, написанную на Си.

Зачастую оказывается что на ассемблере проще.
А если API предусматривает callback в пользовательский код - потребуется городить логику переходов между нативным и эмулируемым кодом.
Edited Date: 2026-01-27 07:37 (UTC)

Date: 2026-01-27 08:44 (UTC)
ircicq: (Default)
From: [personal profile] ircicq
Возврат из callback по инструкции RET или IRET
И нужно различать когда это возврат в ассемблерный эмулируемый код, а когда в Си.
Скорее всего потребуется завести "магические адреса" переход на которые вызывает "выход из матрицы"

Я пытался эмулировать BIOS на C#, и пришел к необходимости большие куски писать на ASM.
Hardware намного легче эмулировать, у неё нет стека
Edited Date: 2026-01-27 08:45 (UTC)

Date: 2026-01-27 18:52 (UTC)
ircicq: (Default)
From: [personal profile] ircicq
Насколько помню, код ввода/вывода который может прерываться проще выразить на ASM.
Иначе потребуется городить многопоточность.

Автор SIMH например намеренно постулировал что его эмулятор одно-поточный, чтобы избежать сложностей.
Но он и не эмулирует API, только аппаратуру

Date: 2026-01-28 05:35 (UTC)
realwired: (Default)
From: [personal profile] realwired
--- код ввода/вывода который может прерываться

Как можно понять задачи точной потактовой эмуляции изначально не стоит и подход "выполняется за нулевое время" - именно то самое

Date: 2026-01-27 20:09 (UTC)
From: [personal profile] ichthuss
Необязательно магические, можно реальньіе, которьіе ведут на какой-нибудь трамплин с вьізовом софтового прерьівания.

Date: 2026-01-27 20:20 (UTC)
ircicq: (Default)
From: [personal profile] ircicq
Эти трамплины - уже ассемблерный код

Далее, надо различать, какие INT являются трамплинами, а какие эмулируемый код для себя использует.
DOS программы могли произвольные вектора прерываний задействовать под свои нужды.
Решение опять сводится к магическим адресам