バー ジョン 1.0 40年前のRTOSはなぜ今も動くのか? @noborutkhs 2026/08/02 osdev-jp https://note.com/noborutkhs https://medium.com/@noborutakahashi
@noborutkhs - 1980s リアルタイムOS~商社向け通信システム開発 - 1990s Graphic Creatives Photo/Word Mosaic - 2000s Smart Phone OS開発 - 2010s~現在 組込み向けHMIツール UX PMOとして 展示会デモ開発
発見 ギリギリ「昭和」 1986 - 1988
Spec - CPU : 開発ホスト: コンパイラ: ICE ソース管理: サイズ 68000 Sun-2 Unix 4.2BSD Whitesmiths C アンリツ MC-4501A SCCS 約4.5 KBytes
参照環境(情報源) 1986頃 - リアルタイムシステムの教科書 - 先輩のコード(カーネルとアプリが未分離) - OSSなし - インターネットなし - 商用RTOSドキュメントのみ (VRTX / pSOS)
教科書 - STEPHEN SAVITZKY - Zilog Inc. - 1985 - Chapter 8に一部ソース が載っていた
CHARM-II - 本棚から発掘 - 教科書のコード ↓ VRTX, pSOSの仕様 ↓ 実用RTOS
ソースファイル一覧 User’s Guideより
タスクスイッチ - 教科書にも具体的に書かれていない - 先輩のコードを参考にした - 68000で動作実績あり - 68000で何をやる必要があるかを読み解いた
アプリ開発 -- 商社向け国際通信システム 国際通信網 専用線 受信 送信 モデム x 5 ドットプリンタ モデム 電話網 プリンタ以外は全て RS-232C
アプリ構造 Polling handler TX Modem1 Modem2 RX Modem3 Printer … - Multi-process State machine Message passing
コンペ 会社 vs 町工場 Kxx子会社 CPU 68000 80186 方式 イベント駆動 ポーリング中心 (RTOS) (割り込み+ポーリング)
No Tuning - 特別な最適化をしていない。 - アセンブラはプロセススイッチと割り込みエントリのみ - Cのコードは遅くならないようには気をつけていた - - 当時のコンパイラはほぼオプティマイズほぼなし それでも速かったのは、構造の影響が大きい
Sun-2 Debug - Sun-2: 68010 / ターゲット: 68000 - Unixのプロセスの中にRTOSを疑似的に実装 - 今で言うマルチスレッド的に 動かし、Sun-2で大部分をデバッグ
AI解析: Queue-centric / Event-driven PROCESS (状態管理) Application (通信アプリ /FSM群) メッセージ / イベント EVENTBOX (イベント) EXCHANGE (通信) TIMER (timeout) QUEUE (中核構造) MEMORY (free管理) READY QUEUE INTERRUPT (最小処理のみ) メッセージ投入 PROCESS起床
40年前のRTOSを現代に動かす
1980s の host-target構造 - host : SUN-2 68010 target: 68000 - CPUの互換性を利用し、両方で動かした - 90%のコードをSUN-2でデバッグ - host側はプリエンプティブ処理を実装しないことで簡略化
2026 の host-target構造 - host : Apple Silicon Mac 草案 target: Raspberry Pi Pico - ARM同志で共通化! - と最初は思ったが調べていくと差が大きすぎたのでボツ
2026 の host-target構造 - host : POSIX - ホストはWindows + wsl2でOK - - target: Raspberry Pi Pico AI Agentが適用しやすい runtime として WebAssemblyも追加 - Canvasでグラフィックスが描画できる
1980s - 2026 の host-target構造比較 1980s 2026 host SUN-2 (68010) POSIX target 68000 Raspberry Pi Pico runtime – Web Assembly + Canvas 「まず host上で動かし、最後にtargetに載せる」のは40年前と同じ
なぜ40年前のRTOSが2026で動かせたか? - アセンブラ化されずCのままだった - アセンブラで最適化の想定はあったが、パフォーマンス十分でコンペよ り速かったので見送られた - Whitesmiths スタイルで書かれていた - typedef int VOID; - のような抽象型で書かれていた この時代はまだ普及していなかった
Whitesmiths C std.h https://github.com/hansake/Whitesmit hs-Ccompiler/blob/main/c_compiler_v22_sr c/hdrs/std.h
そして今、実機へ
Raspberry Pi Picoへの移植開始 1986年と同じ手順で移植を開始 POSIX版 CPU非依存部分 (Queue / Event ) Raspberry Pi Pico CPU依存部分 (割り込み・コンテキストスイッチ)
最初のカーネルコードがpicoで動作 実機で確認できたこと ● ● ● q_insert() n_delete() q_delete() を CHARM-II由来のコードそのまま 実行 ● ● USBシリアル経由で動作確認 Primitive Queueテスト PASS 次のステップ ● ● ● タイマ割込み コンテキストスイッチ タスクスケジューラ
情報発信~フィードバック - reddit 海外掲示板 英語 - r/osdev, r/retrocomputing, r/embedded, r/raspberrypipico - 母数が多いのでフィードバック来やすい - AI出しすぎると露骨なディスりも来る - Medium - note - osdev-jp discordも活用したい! 英語 日本語 slop, slopper, Death to AI https://medium.com/@noborutakahashi https://note.com/noborutkhs
今後の進め方 - Raspberry Pi Picoでの実装 - - POSIX, WebAssemblyで動かしているので、直接Picoやるより早いはず! ライセンスクリーン化 - 現代版仕様で全体を書き直し - github公開 - グラフィックスをどうするか? - picoに直接ディスプレイをつなぐと、解像度低い&小さい - シリアルでPCに情報を送ってWASMで表示させる方法も検討