← На главную

Project Oberon System 2013 переехал с RISC-5 на RISC-V

09.08.2026 12:43 · hackernews

Репозиторий Project Oberon System 2013 переехал с архитектуры RISC-5 на RISC-V: исходники на Oberon-07 переведены на более распространённый Oberon 90 и собираются свежим компилятором OP2 с бэкендом RV32. В комплекте идёт эмулятор машины, очень похожей на ту, что Вирт описал в книге Project Oberon. Эмулятор построен на базе известного rv32emu, но обрезан до интерпретатора и дополнен собственной реализацией машины и периферии. Карта памяти воспроизведена 1:1, поэтому Kernel.Mod, Display.Mod и Input.Mod не пришлось трогать.

Контекст такой. В 1986–1989 годах Николаус Вирт и Юрг Гуткнехт в ETH Zürich своими силами сделали целую компьютерную систему: операционную систему, компилятор, язык, редакторы текста и графики. В 1992 году вышла книга Project Oberon — The Design of an Operating System and Compiler. После выхода на пенсию Вирт упростил язык до Oberon-07 и выпустил свободную редакцию проекта 2013 года. От коммерческого National Semiconductor NS32032 он отказался в пользу собственного процессора RISC-5. Его реализовали на FPGA — плате Xilinx Spartan-3 от Digilent с 1 МБ статической RAM, а аппаратные модули описали на Verilog. Благодаря простоте языка и процессора даже драйверы и растровые операции теперь на Oberon, а не на ассемблере.

Переход на RISC-V — прагматичный способ запустить Oberon на современном доступном железе. Espressif продаёт дешёвые микроконтроллеры ESP32, а Olimex делает платы вроде ESP32-P4-PC. Oberon не требует MMU, так что подходит для таких микроконтроллеров. Пока система работает на эмулированной RISC-V-машине. Дальше её, а также Oberon System 3, планируют перенести на плату Olimex.

Виртовский компилятор OR целится в RISC-5 и понимает только Oberon-07. Вместо того чтобы добавлять в него RV32-бэкенд, разработчик взял OP2 — компилятор из экосистемы ETH Oberon, который уже использовал для миграции Oberon System 3 на Raspberry Pi. У OP2 разделены фронтенд и бэкенд: один и тот же фронтенд давал код для SPARC, MIPS, i386, ARMv7 и RV32. Так что для обеих миграций держат один компилятор, а исходники остаются близки к книге.

Оригинальный код скачан с projectoberon.net 2026-04-14. При переводе на Oberon 90 пришлось поработать: INTEGER заменить на LONGINT, встроенные функции Oberon-07 вынести в SYS.Mod, байтовые данные оформить через SYSTEM.BYTE или CHAR, типовые case-выражения переписать на IF с IS и type guards, присваивание массивов — на COPY. Строковые литералы вида $..$ инициализируются в рантайме через SYS.PutHex. Из-за особенностей OP2 в некоторых местах используются CHAR вместо ORD(SYSTEM.BYTE) и SYSTEM.BIT с переменным адресом.

Вся система линкуется в загрузочный образ, тела всех модулей выполняются при старте, динамической загрузки нет. Сборка проверена на Debian Bookworm. Есть qmake-проект для VM, который, вероятно, заработает и на macOS, но тестировали его только на Linux. VM собирается также через BUSY build system: нужны C99 и SDL2, проверено на Linux и Windows. На Windows запуск выглядит так: rv32vm.exe --base 0x0 --disk disk.img po.bin. Файлы po.bin и disk.img кроссплатформенные, зависит только сам исполняемый файл rv32vm. Лицензии: на исходники Oberon — oberon_license.txt, на эмулятор — vm/rv32emu/README_orig.md и LICENSE, на Berkeley SoftFloat — vm/softfloat/COPYING.txt. Машина в vm доступна под GNU General Public License версий 2.0 или 3.0.

Читать оригинал →