
2026/08/09 21:43
Show HN: プロジェクト・オーベルンの RISC-V アーキテクチャによるシステムバージョン
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
Project Oberon システムは、1986 年および 1989 年にスイス連邦チューリッヒ大学(ETH Zürich)で確立されたシンプルさと規則性の核心原則を保持しつつ、Niklaus Wirth の歴史的コードベースを最新の RISC-V ハードウェアへ成功裏に移行しました。当初は 1990 年代に FPGA チップ上の専用 RISC-5 アーキテクチャ向け(NS32032 プロセッサ概念に基づく)として設計されたこのアップデート版は、断片化されたコード管理を避けるために OR というレガシーツールを維持するのではなく OP2 コンパイラを利用します。この戦略的転換により、既存のクロスプラットフォームサポートを活用し、projectoberon.net から当初ダウンロードされたソース(Oberon 07)を Oberon 90 への移行に再利用しています。これは、データ型の名前変更(INTEGER を LONGINT に)や命令セットの更新といった特定のソース調整を含むものです。現在、シミュレータ環境である RISC-V エミュレーション(RV32emu)上で動作していますが、将来は ESP32 ファミリーのような物理チップへの展開を想定しており、Wirth の哲学と RISC-V が共有する設計目標から恩恵を受けています。この進化により、複雑なメモリ管理ユニット(MMU)を必要とせずに、Olimex ESP32-P4-PC などの手頃な価格のボードでの実行が可能になります。標準的な Linux または Windows マシンの上でコンパイルでき、すべてのプラットフォーム用プリコンパイル済みバイナリを提供し、主に Debian Bookworm でテストされたビルドスクリプトを備えることで、本プロジェクトは数十年前の研究を今日的の実用的実験のためにアクセス可能にしています。
本文
Project Oberon システム 2013(RISC-V 移植版)について
Project Oberon システム 2013 は、Oberon 07 からより一般的な Oberon 90 に移植されたプロジェクトのバージョンです。最新の OP2 コンパイラ(RISC-V RV32 バックエンド付き)を採用しています。
メインの特徴
- VM エミュレータの実装: Wirth 氏の名著『Project Oberon』に記述されている機械(VM)と同様のアーキテクチャを、RV32 エミュレータをベースとして実装しています。これは Interpreter みを組み合わせた簡素化かつ微修正されたバージョンです。
- メモリマップの忠実性: Wirth 氏の機械におけるメモリマップは 1:1 に再現されています。
- コアモジュールの変更なし:
、Kernel.Mod
、Display.Mod
は原版のまま変更されていません。Input.Mod
以下は、RISC-V VM でネイティブに動作するシステムのスクリーンショットです。
Project Oberon システム 2013 とは何か
1986 年から 1989 年の間に、ETH Zürich の Niklaus Wirth氏と Jürg Gutknecht 氏は、ほぼ独自に以下のコンピュータシステムを設計・実装しました。
- オペレーティングシステム
- コンパイラ
- プログラミング言語
- テキストエディタ
- グラフィックエディタ
その全ては 1992 年の書籍『Project Oberon - オペレーティングシステムとコンパイラの設計』に文書化されました。Wirth 氏は引退後もこのプロジェクトを継続しています。
- ソースコードの基盤:
に公開されているソースコードは、Wirth 氏による言語の最も激しい簡素化である Oberon-07 で記述されています。projectoberon.net - 書籍版との関係: 書籍の 2013 年版という無料のリビジョンも存在します。
- プロジェクトの目的: 1992 年版と同様に、「実際に存在し、実際の使用されているシステムの実例として、かつ全ての詳細を説明する単一の書籍を提供すること」にあります。
ハードウェア・プロセッサの変遷
- 元のアーキテクチャ: 1992 年のプロジェクトでは National Semiconductor の NS32032 プロセッサが使用されていましたが、現在は入手できずアーキテクチャも推奨されません。
- RISC-5 の設計: 商用アーキテクチャへの再ターゲットではなく、Wirth 氏は「ハードウェアへのシンプルさと規則性への願い」のために独自のプロセッサ RISC-5を設計しました。
- 実装: プログラブルゲートアレイ(FPGA)を用いて実装され、「単一チップ上の実際に機能するプロセッサ」となりました。
- 動作環境: 低コストの開発ボード(Digilent 製の Xilinx Spartan-3 に 1MB のスタティック RAM を搭載)上で動作し、システム全体(コンパイラを含む)を容易に受け入れることができます。
システムの革新性
- ハードウェア/ソフトウェア契約: システム全体はメモリマップと命令セットで構成され、初めてソフトウェアだけでなくハードウェアも完全に厳密に記述されました。
- ハードウェアモジュールは Verilog で実装されており、
で入手可能です。projectoberon.net
- ハードウェアモジュールは Verilog で実装されており、
- 言語の進化: 言語とプロセッサの簡素化により、1992 年にはアセンブリ言語のみで記述されていたデバイスドライバーからラスタ操作に至るまで、Oberon 言語でも表現できるようになりました。
- 開発思想: Wirth 氏は新システムを直接元の Ceres バージョンに基づき、後続の Oberon シリーズの特徴を排除しました。「25 年前に存在したままのシステムを本質的に提示したい」というのが目的です。
- その結果、小さく十分完結しており、よく文書化されており、他のアーキテクチャへの移行も容易なシステムになりました。
なぜこの移植なのか
RISC-V と RISC-5 の親縁関係 名称の衝突はユーモラスですが、設計哲学のレベルでは実在する親族関係があります。2010 年以降 UC Berkeley で開発された RISC-V は、Berkeley リーンシリーズの第五世代であり、Berkeley と Wirth の双方は共通な設計目標と特徴を共有しています。
- 規則的な 32 ビットロード・ストア
- コンパイラ 친화的な ISA(命令セットアーキテクチャ)
- 固定された 32 ビット基底命令エンコーディング
移植の意義
Project Oberon システムを RISC-5 から RISC-V へ移行することは、Oberon の価値をもたらす原理を保ちつつ、システムを広く入手可能な現代のハードウェアに導入するための実用的な方法です。
採用されたハードウェア
- Espressif 社: ESP32 ファミリの安価で入手しやすいマイコンを提供しています。
- Olimex など: これらを中心に実用的な開発ボードを作成(例:Oberon システムに必要な全リソースを非常に魅力的な価格で提供する ESP32-P4-PC)。
- 適合性: Oberon システムは MMU を必要としないため、このタイプのマイコンに適しています。
現在のステータスと将来計画
現在は、デバッグコードの維持と書籍との親和性を両立させるために、エミュレートされた RISC-V マシン上で移行を実行しています。将来的には上記の Olimex ボードへ移行予定です。
- コンパイラの変更点:
- Wirth 氏自身のコンパイラ(OR)は彼自身の RISC-5 アーキテクチャを対象とし Oberon-07 をコンパイルします。
- RV32 バックエンドを追加することも可能でしたが、代わりに既存の OP2 コンパイラを再利用しています(Raspberry Pi 移植でも実績あり)。
- OP2 は ETH Oberon の遺産であり、フロントエンド/バックエンドの分離設計により SPARC, MIPS, i386, ARMv7 および RV32 向けコードを生成可能です。
- 移行の利点: システムを 1990 年の言語へ移行することで、両方の移行済みシステムに共通のコンパイラを持ち、ソースコードも書籍に十分近く、有用性を保ちます。
移植の詳細
ソースコードの入手
Project Oberon ソースコードのオリジナルバージョンは
https://www.projectoberon.net/ より以下のアーカイブをダウンロードしました(最新ファイル修飾日:2018-11-28)。
- http://www.projectoberon.net/zip/inner.zip
- http://www.projectoberon.net/zip/outer.zip
- http://www.projectoberon.net/zip/systools.zip
- http://www.projectoberon.net/zip/graph.zip
- http://www.projectoberon.net/zip/apptools.zip
リポジトリの各サブディレクトリは同名のアーカイブに対応しており、
apptools と systools を例外としてファイルに統合しています。
Oberon 07 から Oberon 90 への移植注記
全てのソースコードを Oberon 90 に移植し、ActiveOberon プロジェクトの
o2c コンパイラおよび OP2 でコンパイル可能にするよう変更を行いました。
主な変更点は以下の通りです:
- 型名の統一:
が全体を通じてINTEGER
に改名されました。LONGINT - ビルトイン関数:
は、Oberon 90 には存在しない Oberon 07 のビルトイン関数を提供します。SYS.Mod - データ型の変換: バイトサイズのデータは、可能な限り
に変更され、避けられない場合はSYSTEM.BYTE
へ変更されました。CHAR - 条件分岐の表現: タイプケース文は、
構文とIF
関係、およびタイプガードを用いて表現されました。IS - 配列割当て: Oberon 90 が拒否する配列割当ては
を使用します。COPY - 文字列リテラル: Oberon 07 のバイト文字列リテラル(
)は、$..$
によるランタイム初期化に置き換えられました。SYS.PutHex
は OP2 で符号付きであるため、必要に応じてORD(SYSTEM.BYTE)
を使用しています。CHAR
- アドレス参照: OP2 の問題により、定数アドレスではなく変数アドレスを持つ
への変更が必要です。SYSTEM.BIT
VM エミュレータの実装
Wirth 氏の書籍で記述された RISC-5 に基づく RISC-V マシン(
rv32emuベース)を実装し、Oberon コードを動かすために必要な(最小限の)変更を行いました。
- 全てのモジュールはブートリンカーによってブートイメージにリンクされ、起動時に本体が実行されます。
- 動的ロードはありません。
- 追加的なアプリケーションも実装済みで、対応するサブディレクトリの
を参照してください。readme
事前コンパイルバージョン
現時点で利用可能なプラットフォームは以下の通りです:
- Linux x64
- Windows x86
ファイルの動作状況:
とpo.bin
は全てのプラットフォームで動作します。disk.img
実行ファイルのみがプラットフォーム依存です。rv32vm- 他のプラットフォームで VM をビルドしたい場合、他のファイルを再利用できます。
ビルド方法
Linux x64 / macOS
vm サブディレクトリには build.sh が存在し、最初にこれを実行する必要があります。その後、ルートディレクトリの build.sh を使用します。
利用可能なコマンド:
-
システムをコンパイル・パックして実行する場合
./build.sh run -
実行せずにシステムをビルド・パックする場合
./build.sh disk -
ディスクを作成せず実行せずにシステムをビルド・リンクする場合
./build.sh link -
全ての Oberon モジュールをコンパイルして終了する場合
./build.sh
環境要件と構成
- テスト環境: ビルドスクリプトは Debian Bookworm Linux で実装・テストされました。macOS でも動作する可能性がありますが、現時点では Linux でのみテストされています。
- VM の構築:
ビルドシステムでも構築可能です。BUSY - 必要なツール:
コンパイラとC99
だけが必要です(Linux および Windows で成功してテスト済み)。SDL2- ツールチェーンに合った SDL2 開発パッケージをダウンロードする必要があります。
Windows での実行
Windows でシステムを実行するには、以下のコマンドを使用します:
rv32vm.exe --base 0x0 --disk disk.img po.bin
SDL2 のパス指定が必要な場合は、
-P win_sdl_dir=<path> オプションを使い、SDL2 ディレクトリのルート(SDL2/include と SDL2/lib が存在する場所)へのパスを指定します。
クレジット
- Oberon ソースコードおよびドキュメント:
のライセンスが適用されます。oberon_license.txt - RISC-V エミュレータ:
vm/rv32emu/README_orig.mdvm/rv32emu/LICENSE
- Berkeley SoftFloat ライブラリ:
vm/softfloat/README_orig.mdvm/softfloat/COPYING.txt
vm サブディレクトリのマシンは、Free Software Foundation が公開する GNU 一般公共ライセンス(GPL)バージョン 2.0 または 3.0 の条件下で利用可能です。