Upgrade to Pro — share decks privately, control downloads, hide ads and more …

SONY CISC-NEWS NWS-1750 + NWB-225 フレームバッファの Net...

SONY CISC-NEWS NWS-1750 + NWB-225 フレームバッファの NetBSD/news68k ドライバ実装 / OSC2026Hiroshima

2026/9/12(土)に行われたオープンソースカンファレンス2026広島の「NetBSDのご紹介」のセミナーで発表したスライドです。セミナー時のスライドからURLリンク追加など一部追記修正しています。

Avatar for Izumi Tsutsui

Izumi Tsutsui

September 12, 2026

More Decks by Izumi Tsutsui

Other Decks in Programming

Transcript

  1. NetBSD 11.0 ハイライト 一応いろいろ更新あります •Nintendo Wii, WiiU (NetBSD/evbppc) 実は最速3コアPowerPCマシン? いつもブース展示されてるやつです

    → •NetBSD/virt68k QEMUやnonoなどのm68kエミュレータ用 •NetBSD/riscv Allwinner D1, StarTech JH7100等のRISC-V SoC用 •NetBSD/m68k ソースコード共用化推進 luna68k固有更新はありませんがm68k周辺が地味に更新 ➔他のm68k更新はいさきさんから紹介あるんじゃないかと… •NetBSD/hp300 HP9000/362, 382 Xサーバー 「私が書きました」案件 https://www.netbsd.org/releases/formal-11/NetBSD-11.0.html
  2. SONY NEWS (ニューズ)  Wikipedia より 「NEWS(ニューズ、頭字語: Network Engineering WorkStation)とは、

    1980年代後半から1990年代前半にかけて ソニーが開発・発売した UNIXワークステーションシリーズ」 「デジタルオーディオで活躍していた 土井利忠を中心に社内ベンチャーの形で 開発され、1987年に最初のモデルが 発売された」 https://ja.wikipedia.org/wiki/NEWS_(%E3%82%BD%E3%83%8B%E3%83%BC)
  3. NEWS-OSと4.4BSD/news3400  WIDEプロジェクトによるBSD移植 すべて(?)のBSDのベースである カリフォルニア大バークレー校による 4.4BSDでは、NEWS3400もサポート 4.4BSDリリースノート記載のサポート機種: HP 9000/300 68000-based

    workstations • DECstation 3100 and 5000 MIPS-based workstations • Sparcstation I & II SPARC-based workstations • Sony News MIPS-based workstations • Omron Luna 68000-based workstations • Intel 386/486-based machines (ISA/AT or EISA bus only) •
  4. NetBSD/newsmips  NetBSD移植職人? •過去に sun3/80 への移植をされ、 その後PowerPC Macへの移植もされた つばいさん による1997年6月の

    メーリングリストアナウンス: 「最近 SONY NEWS34xx で NetBSDを 動かして遊んでいます」 「まだまだいじっている途中ですが、 きりがないのでとりあえず公開します」
  5. 並行でNetBSD自体の把握  同じ m68k 機種の実装をひたすら読む •locore.s のアセンブラソースの“start”関数から •だいたい以下のような感じ ①キャッシュ無効化と割り込み禁止など初期設定 ②CPU種別判定

    (68020/030/040/060) ③機種判別 (HP9000/300 シリーズの どれか 等) ④MMU (仮想記憶設定)のページテーブル作成と カーネル初期メモリ領域割り当て ⑤MMU 有効化 ⑥物理メモリ登録と機種別固有初期化処理 ⑦共通部 init_main.c の main() 関数呼び出し
  6. NetBSD/news68kまでの道  機種に歴史あり •1999/4/26 •1999/5/6 •1999/5/30 •1999/6/3 •1999/6/6 •1999/9/24 •1999/10/28

    •1999/11/16 •1999/12/9 検討開始 実機入手 カーネルリンク カーネル printf 動作 single user 到達 SCSI PIO動作 SCSI DMA動作 キャッシュ問題解決 NetBSD本家にコミット
  7. そんなこんなで 半年後  “Initial import of news68k” Module Name: syssrc

    Committed By: tsutsui Date: Thu Dec 9 14:53:25 UTC 1999 Added Files: syssrc/sys/arch/news68k: Makefile syssrc/sys/arch/news68k/compile: .keep_me syssrc/sys/arch/news68k/conf: GENERIC INSTALL LIBERO Makefile.news68k files.news68k std.news68k syssrc/sys/arch/news68k/dev: clock_hb.c dmac_0266.h hb.c hbvar.h if_le.c md_root.c ncr5380sbc.c si.c zs.c syssrc/sys/arch/news68k/include: Makefile ansi.h aout_machdep.h asm.h autoconf.h bswap.h cdefs.h cpu.h db_machdep.h disklabel.h [略] Log Message: Initial import of news68k port. https://mail-index.netbsd.org/source-changes/1999/12/09/0011.html
  8. NetBSDの wscons とは  「特定の機種に依存しない」コンソール構造 •NetBSDの「Machine Independent」な コンソールフレームワーク •wsdisplay /

    wskbd / wsmouse というAPIで ユーザーランド側のアクセス方法を統一 (各アプリが固有のハードウェア仕様を意識する必要がない) •各機種のドライバでは実ハードウェアに アクセスする固有部分だけを実装
  9. NetBSDの wscons とは  「特定の機種に依存しない」コンソール構造 •階層化イメージ ユーザープログラム (シェル・エディタ等) カーネル 機種共通部

    端末 (tty) 階層 wscons (wsdisplay / wskbd / wsmouse) 端末表示/キーボード/マウス の 機種共通層 カーネル 機種依存部 機種別画面表示 ドライバ1 機種別画面表示 ドライバ2 機種別キーボード 機種別キーボード ドライバ1 ドライバ2 VGA Sun 各種 フレームバッファ PS/2 キーボード ハードウェア Sun キーボード
  10. またもハード仕様調査の壁  「種類が多い」フレームバッファ •キーボードはアドレス違いくらいだったので 2001年11月に実装 •しかしフレームバッファは仕様が異なる •NWS-3470: NWB-253 モノクロ VRAM仕様

    •NWS-1750: 拡張スロット内 NWB-225 •表示用VRAMの仕様がわかれば wscons が提供するMIドライバの 「rasops」ですぐに表示できるのですが……
  11. 2011年 OSC神戸→関西@京都  (自分にとっての)OSC展示黎明期 •「展示もやってみよう」と SHARP X68030と ATARI TT030 をOSC神戸に持っていって展示

    •「次の京都もm68kマシン展示を」と考えて 「京都だからLUNAか」のネタだったのですが 実は NetBSD/news68k のコンソール表示 も どうにかしたい、と考えていました
  12. コンソール表示仕様検討  OSC展示駆動開発!? •NetBSD/news68kでも ブートローダーでは 内蔵ROMルーチンの画面表示は動作実績あり ➔カーネルでもROM内ルーチンを使えないか? •ただし入力(キーボード)は入力待ちになるので ROM内ルーチンは使えない ➔調べると

    sun3では「画面出力はROMルーチン」 「キーボードは別ドライバ」のtty実装と判明 •OSC関西@京都展示に向けて (luna68k準備の裏で) 突貫で「既存wskbd入力+ROMルーチン出力」 の展示デモ用コンソールドライバを1日で実装
  13. OSC2011関西@京都  NetBSD/m68k Never die! ウサギ (NEWS) と 月 (LUNA)

    と 太陽 (SUN)と ※当時 NEWS の広告にはウサギのマスコットが使われていました  ご当地 LUNAと SUNとセットでお披露目展示 詳細はこちら http://www.ceres.dti.ne.jp/tsutsui/osc2011kyoto/index.html
  14. ROMルーチン側は11月にコミット  “demonstrated at Open Source Conference” Module Name: Committed

    By: Date: src tsutsui Sun Nov 20 15:38:00 UTC 2011 Modified Files: src/sys/arch/news68k/conf: GENERIC INSTALL files.news68k majors.news68k src/sys/arch/news68k/dev: if_le.c kb_hb.c si.c zs.c src/sys/arch/news68k/include: cpu.h vmparam.h src/sys/arch/news68k/news68k: locore.s machdep.c pmap_bootstrap.c Added Files: src/sys/arch/news68k/news68k: romcalls.S romcons.c Log Message: Add preliminary PROM internal function based framebuffer console support, which was demonstrated at Open Source Conference 2011 Kansai @ Kyoto back in July: http://www.NetBSD.org/gallery/events.html#opensourceconf2011-Kansai https://mail-index.netbsd.org/source-changes/2011/11/20/msg029148.html
  15. が、キーボード側の問題が……  キーボード実装選択問題 •キーコード生値→wskbdコード変換は使いたい •しかし wskbd 実装は wsdisplay 側とセットで 使うことしか考慮されていない

    ➔ROMルーチン+wskbd組み合わせ tty 実装はMI修正必要 •sun3は非wskbdドライバを使っていたが、 wskbdではない NEWSキーボードドライバを 別に書くのもなんか違う •wscons実装も難しすぎて、どうすべきかの 判断が困難で、ML相談の作文も思いつかない
  16. 気を取り直してMLに投げてみる  tech-kern Mailing List To: tech-kern@ Subject: [RFC] new

    APIs to use wskbd(4) input on non-wsdisplay tty devices From: Izumi Tsutsui Date: Sat, 6 Apr 2024 23:56:27 +0900 # tl;dr I'd like to add new APIs to use wskbd(4) input on non-wsdisplay tty devices, especially news68k that can use a putchar function provided by firmware PROM as a kernel console device. https://mail-index.netbsd.org/tech-kern/2024/04/06/msg029551.html
  17. やはり「スッキリしない」問題  「イマイチ」と言われるけど解決策が出ない •そもそも wscons 実装がややこしいので 初手から論点が発散する (ドキュメントもない) •putchar という関数の役割の誤解

    (1文字描画かVT端末制御操作込みか; ROMルーチンは後者) •“wsemul_dumb” という紛らわしい実装の存在 •自分の技術力と説明能力と英作文能力の限界 ➔各意見に対して、合意形成まで持って行く 元気が出ず、またしても挫折
  18. OSC京都の後も m68k NEW PMAP とかを ChatGPTに投げているうちに ふと news68k wscons の

    tech-kern ML ネタ を思い出して 投げてみたところ……
  19. ふたたび wsdisplay 構造説明  wsdisplay の階層 MIカーネル tty層 出力側 ↓

    VT100的な端末画面制御 ↓ 文字描画/行単位範囲コピー消去/行内コピー消去 で構成される「emulops 抽象操作API」 ↓ 実フレームバッファ操作ドライバ ↓ ハードウェア操作
  20. wsdisplay rasopsの場合の構造  wsdisplay の階層 MIカーネル tty層 出力側 ↓ VT100的な端末画面制御

    ↓ 文字描画/行単位範囲コピー消去/行内コピー消去 で構成される「emulops 抽象操作API」 ↓ MI rasops(9) + 機種別の VRAM パラメータ設定 ↓ VRAMデータ読み書き
  21. NWB-225の場合の構造  wsdisplay の階層 MIカーネル tty層 出力側 ↓ VT100的な端末画面制御 ↓

    文字描画/行単位範囲コピー消去/行内コピー消去 で構成される「emulops 抽象操作API」 ↓ NWB-225の 矩形領域コピー操作・ ホスト→フレームバッファ書き込み等の ハードウェアROP操作
  22. 設計書の実装仕様について •wsdisplay の ROPに必要なところと、 NetBSDデバイスドライバ一般のところは詳細を書く •ハードウェア寄りの ROP操作のところは 「NEWS-OSのこの操作をほぼそのまま持ってくる」 という概要レベルで書く •デバイス名称、関数分割単位、関数名称等々の

    細かい実装選択も議論 •デバイス検出層、wsdisplay 呼び出し層、等々、 人間が実装するときの順番で設計検討と内容指摘 という具合で設計書作成とレビューを複数回繰り返し 8/22(土) 18:00
  23. あとはいつもの通りに実装  描画が動けば過去の経験の繰り返し •/dev/ttyE0 でログインできることの確認 •フレームバッファコンソール設定での 起動時初期化 consinit() 実装 •元々予定していたmonoGIFplay改良版の設計書

    更新と実装 •monoGIFplayを動かすための 「矩形ビットマップデータ描画」の 展示デモ用の仮 ioctl を設計させて実装 •monoGIFplayの news68k 仮 ioctl 対応版の 設計書更新と実装