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

NetBSD+Raspberry Piで 本物のPSGを鳴らすデモを ブラッシュアップしました...

NetBSD+Raspberry Piで 本物のPSGを鳴らすデモを ブラッシュアップしました / osc2026Tokyo-spring

オープンソースカンファレンス 2026 Tokyo/Springの「NetBSDのご紹介」のセミナーで発表した『NetBSD+Raspberry Piで 本物のPSGを鳴らすデモを ブラッシュアップしました』のスライドです。(セミナー発表時から一部誤記や体裁の修正、URL追記等をしています)

Avatar for Izumi Tsutsui

Izumi Tsutsui

February 27, 2026
Tweet

More Decks by Izumi Tsutsui

Other Decks in Programming

Transcript

  1. PC-6001 スペック •CPU: 8bit Z80互換 4MHz •RAM: 標準 16KB, 最大32KB

    •グラフィック: 128×192ドット 4色 256×192ドット モノクロ2色 •音源:PSG 3和音 •標準価格:89,800円
  2. PSG音源 •いわゆるピコピコ音 × 3和音 •元はアーケードゲーム用? •BASIC言語だと PLAY 文で MML (Music

    Macro Language) という書式を書いて演奏 こんなの→ "d4b4&b32r16.b8.r16q2b8b8b8" •“d” が「レ」、“4” が「4分音符の長さ」  “&” がタイで音をつなげる、といった具合
  3. 展示デモRTAリザルト  OSCイベント駆動 + ChatGPTブースト •1/24 回路図と基板パターン図作成 •1/25 手配線基板作成して動作テストまで完 •1/26

    GPIO mmap版+2ms周期演奏動作 •1/27 演奏展示用 PSG演奏状態表示デモ動作 •1/28 ネストコマンドとデチューンを実装 •1/29 ビブラートとソフトエンベロープ調査① •1/30 同 調査②(計6時間半)と実装(3時間) •1/31未明 セミナースライド作成(5時間)
  4. リファクタリング後API最終版 /* process-local resources */ int (*init)(psg_backend_t *psgbe); /* 初期化

    */ void (*fini)(psg_backend_t *psgbe); /* 終了処理 */ /* external side effects boundary */ int (*enable)(psg_backend_t *psgbe); /* 有効化 */ void (*disable)(psg_backend_t *psgbe); /* 無効化 */ /* PSG operations (valid only while enabled) */ int (*reset)(psg_backend_t *psgbe); int (*write_reg)(psg_backend_t *psgbe, uint8_t reg, uint8_t val); ➔これが伏線なので覚えておいてください
  5. 可能です。 ソフトでGPIOをトグルして作る (busy loop / タイマ割り込み) のは 2MHz 級だと厳しいですが、 Raspberry

    Pi には GPCLKという “ハードウェアのクロック出力” が あり、これを使うと 1.5〜2MHzを GPIOピンから出せます。
  6. PC6001VX “realhw” PSG対応  ChatGPT × リファクタリング活用 •PC6001VXの ay8930.cpp を投げて

     「PSGアクセスこのへん?」と聞く •「OKだからバックエンド見せて」  と言われて改修版実装を見せる •「Cソースはこう組み込めばいいよ」  「初期化はC++でこうするといい」  「プロジェクトファイルはこう」 ➔バックエンド実装を1行も変えずに動作!