Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
PC-6001のPSG演奏デモを機会にNetBSDを真面目に説明してみる / OSC2024E...
Search
Izumi Tsutsui
November 16, 2024
Programming
0
56
PC-6001のPSG演奏デモを機会にNetBSDを真面目に説明してみる / OSC2024Ehime
オープンソースカンファレンス2024愛媛の「NetBSDのご紹介」のセミナーで発表した『PC-6001のPSG演奏デモを機会にNetBSDを真面目に説明してみる』のスライドです。
Izumi Tsutsui
November 16, 2024
Tweet
Share
More Decks by Izumi Tsutsui
See All by Izumi Tsutsui
PC-6001のPSG演奏デモをなるべくNetBSD環境を使って作った話 / KOF2024
tsutsui
1
53
OSC展示とLUNAとNetBSD / OSC2024Kyoto
tsutsui
1
81
digital VAX, NetBSD/vaxの歴史と VAXstation 3100/m30 展示 / OSC2024Osaka
tsutsui
0
470
SONY NEWS NetBSD移植作業とNWS-3260展示 / KOF2023
tsutsui
0
1.3k
37年前の Sun 3/60 のために最新のNetBSDと最新のX.orgをメンテする話 / KOF2022
tsutsui
1
480
お歳暮で Sun3 が送られてきたので NetBSD/sun3 を展示デモしました / OSC2020Osaka
tsutsui
5
2.8k
NetBSD/zaurus 8.1 を直したあと ブース展示デモ内容を作った話 / OSC2019Tokyo-Fall
tsutsui
0
700
NetBSD/zaurus 8.1 をテストしたら動かなかったので動くまで直した話 / KOF2019-NetBSD
tsutsui
1
1.1k
OSC京都 LUNA展示 9年目 / OSC2019Kyoto
tsutsui
0
640
Other Decks in Programming
See All in Programming
これが俺の”自分戦略” プロセスを楽しんでいこう! - Developers CAREER Boost 2024
niftycorp
PRO
0
190
Semantic Kernelのネイティブプラグインで知識拡張をしてみる
tomokusaba
0
180
Spatial Rendering for Apple Vision Pro
warrenm
0
110
nekko cloudにおけるProxmox VE利用事例
irumaru
3
430
命名をリントする
chiroruxx
1
410
tidymodelsによるtidyな生存時間解析 / Japan.R2024
dropout009
1
790
MCP with Cloudflare Workers
yusukebe
2
220
ドメインイベント増えすぎ問題
h0r15h0
2
330
テストコード書いてみませんか?
onopon
2
120
競技プログラミングへのお誘い@阪大BOOSTセミナー
kotamanegi
0
360
見えないメモリを観測する: PHP 8.4 `pg_result_memory_size()` とSQL結果のメモリ管理
kentaroutakeda
0
360
たのしいparse.y
ydah
3
120
Featured
See All Featured
We Have a Design System, Now What?
morganepeng
51
7.3k
Stop Working from a Prison Cell
hatefulcrawdad
267
20k
How to Think Like a Performance Engineer
csswizardry
22
1.2k
Bash Introduction
62gerente
608
210k
4 Signs Your Business is Dying
shpigford
181
21k
How GitHub (no longer) Works
holman
311
140k
Rails Girls Zürich Keynote
gr2m
94
13k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
127
18k
Unsuck your backbone
ammeep
669
57k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
2
290
VelocityConf: Rendering Performance Case Studies
addyosmani
326
24k
Principles of Awesome APIs and How to Build Them.
keavy
126
17k
Transcript
PC-6001のPSG演奏デモを機会に NetBSDを真面目に説明してみる オープンソースカンファレンス愛媛 2024 レトロパソコン実機デモのために持ってきました Izumi Tsutsui
[email protected]
Twitter: @tsutsuii
Mastodon: @
[email protected]
ところで、 今日のOSC愛媛の セミナーセッション情報 を見ると……
https://event.ospn.jp/osc2024-ehime/session/1757792
https://event.ospn.jp/osc2024-ehime/session/1757792
学生の方も 来られてるかも なので、 できるだけ(?) 入門編で行きます
BSDとは? •Berkeley Software Distribution •カリフォルニア大学バークレー校 で開発されたUNIX系OS •’70年代 UNIX研究として開発開始 •’80年代 ネットワーク機能、
仮想記憶など現代のOSの 基礎を築く •UNIXの進化と普及に貢献
BSD timeline (1) https://github.com/FabioLolix/BSD-Timeline/releases
BSD timeline (1) https://github.com/FabioLolix/BSD-Timeline/releases 1BSD 1978年3月 PDP-11
BSD timeline (1) https://github.com/FabioLolix/BSD-Timeline/releases 2BSD 1979年5月 viエディタ
BSD timeline (1) https://github.com/FabioLolix/BSD-Timeline/releases 3BSD 1980年3月 VAX 仮想記憶
BSD timeline (1) https://github.com/FabioLolix/BSD-Timeline/releases 4.0BSD 1980年10月 signal機構
BSD timeline (1) https://github.com/FabioLolix/BSD-Timeline/releases 4.1BSD 1981年7月 性能強化
BSD timeline (1) https://github.com/FabioLolix/BSD-Timeline/releases 4.2BSD 1983年8月 TCP/IP
BSD timeline (2) https://github.com/FabioLolix/BSD-Timeline/releases 4.3BSD 1986年4月 複数機種対応
BSD timeline (2) https://github.com/FabioLolix/BSD-Timeline/releases 4.3BSD Net/2 1991年6月 80386対応
BSD timeline (2) https://github.com/FabioLolix/BSD-Timeline/releases 386BSD 0.0 1992年2月 IBM-PC用
•Intel 80386プロセッサ向け •初のオープンソースUNIX系OS? •4.3BSD Net/2ベース •企業や大学が主だった UNIX系OSが一般(?)の ユーザでも利用可能に •実は趣味プロジェクト だった、という話
386BSD
•いずれも386BSDをベースとした パッチ集として開始 FreeBSD ➔ 性能重視、x86 PCをターゲット NetBSD ➔
設計重視、全CPUをターゲット NetBSD, FreeBSD
•“Of course, it runs NetBSD” ➔特定の機種に依存しない設計 •“Reasonable Goal” ➔性能より「理にかなった」設計 •仮想記憶やデバイスドライバ等の
一貫性を持つインタフェース設計 NetBSDの特長
•いろんなCPUやデバイスで動く ➔組み込み系での採用例が多い NetBSDの特長 https://x.com/yuyarin/status/1154647238280302593
•抽象化されたインタフェース実装 NetBSDの特長 https://social.mikutter.hachune.net/@osa_k/112066453265169340
NetBSDを動かしてるマシン展示 SHARP X68030 https://social.mikutter.hachune.net/@tsutsuii/113219497964975269
NetBSDを動かしてるマシン展示 Apple Macintosh LC630→ ↓ATARI TT030
NetBSDを動かしてるマシン展示 https://x.com/tsutsuii/status/1817601650833670197 https://x.com/tsutsuii/status/1682579308307685378 オムロン LUNA, LUNA-II
ところで タイトルにある PC-6001 ってどうなったの? ……と思われる方も いるかもしれません
OSC2017京都 PC-6001×LUNAコラボ演奏展示 https://www.nicovideo.jp/watch/sm31732739
PC-6001 とは • NEC製の 8ビットパソコン •1981年 11月 発売
ホビー・教育向け ターゲット https://www.nicovideo.jp/watch/sm1254646
PC-6001 スペック •CPU:8bit Z80 4MHz •RAM:標準 16KB, 最大32KB •グラフィック: 128×192ドット
4色 256×192ドット モノクロ2色 •音源:PSG 3和音 •標準価格:89,800円
•VRAMも共用 → 空きは 7KB •それでもいろいろ作れた時代 いろいろ遊ぶには32KBに増設しないとキツいかも メモリ 16KB
Z80 CPUとは •1976年発表 8ビットCPU •’80年代のパソコンに多数採用 •組み込みでは今も使われている ロングセラー
LUNAとPC-6001 https://x.com/tsutsuii/status/802351863836250112
PC-6001マスタ・LUNAスレーブ https://www.nicovideo.jp/watch/sm31979305
PC-6001マスタ・LUNAスレーブ •PSG演奏ドライバは2ms割り込み駆動 •割り込みでジョイスティックポートに 外部駆動信号を出力 •それをLUNAのシリアルポートに接続 •LUNAサブCPUのシリアル割り込みで LUNAのPSG楽曲を同期演奏 ……という誰にもわからない デモ展示をやってたのでした
Z80 CPU用 UNIX •“FUZIX”: Z80用 UNIX like OS •LUNAのZ80互換サブCPUでも動作 •ブースのエミュレータ上でデモ中
https://x.com/tsutsuii/status/1857612965266231703
•聴講者が全員PC-6001を知ってる •セミナー後にPC-6001ソフト開発 の思い出を語る方 •展示ブースで Z80マシン語の話 が始まる ……みたいな感じでした ちなみに先週末 11/9 の
関西オープンフォーラムでは
……と、 NetBSDマシンと PC-6001の関係を むりやり話したので、 後はPC-6001デモの話 です
PC-6001用エミュレータ 実機がなくても遊べます •2000年頃からPC-6001のエミュレータが 多数開発される •エミュレータだけでなく、 開発に必要なツールも多数 •データ記録テーブ模擬 •テープ音声⇔エミュ用データ変換 •プログラムテキスト⇔エミュ用変換 •エミュレータもデバッグ機能が充実
PC6001VX http://eighttails.seesaa.net/article/305067428.html https://github.com/eighttails/PC6001VX
•READMEより 「PC6001VをLinux等で動作 するよう改変したものです」 「PC6001VXの末尾のXは クロスプラットフォームの Xです」 PC6001VX https://github.com/eighttails/PC6001VX
•基本的な機能は PC6001V 準拠 •クロスGUI環境としてQtを使用 •互換ROM内蔵で 実機ROM不要 •pkgsrc にしたので NetBSDでも動作可能! •Android版もあります→
PC6001VX https://github.com/eighttails/PC6001VX
NetBSDマシン上で PC6001VXを使ったり たまに実機を使ったり という感じで 遊んでいます
•128×192: 横長ドット •青・赤・緑・黄 (白・橙・紫・水色 のモードもあり) 4色の芸術
最近のマイブーム •パピコン4色 減色画像作成 OSC広島でもひっそり展示してました
減色例
減色例
ところで、KOFのセミナーで このスライドを見られた方から PC-6001の4色モードは 緑・青・赤・黃 ではなく 白・水色・紫・橙 を使うべき! という熱い声をいただきました
減色例
減色例
なぜなら橙を使えば 肌色が出せる! ……ということだったので 画像をKOFのスライドから 差し替えさせていただきました
減色方法 •16色と比べて格段にむずかしい 2016年頃は既存の減色ツールで全部 手動で試行錯誤で作ってました
「画像変換 for PC-6001」 •時代の進化 Web I/Fで各種の減色アルゴリズムや パラメータ調整でいい感じに作ってくれる ページがあります https://nazo.main.jp/prog/retropc/gcp6.html
ドット打ち職人 •細かい調整はGIMPで そこそこ大変ですが、ドット数も色数も 少ないので慣れてくるとなんとかなります
そんなことを やっていた中で、 最近よく見ていた 動画がこれ
宇宙戦艦ヤマトを熱唱する花梨先輩 feat. 小春六花 @ニコ動 https://www.nicovideo.jp/watch/sm43594193
メインを歌う夏色花梨先輩の 歌はすごく良いのに、 手前で合いの手を入れる 小春六花さんのインパクトに すべて持っていかれる動画 (詳しくは視聴してみてください)
3色花梨先輩 減色方法は都度試行錯誤で •輪郭色:青、減色方法:ディザパターン (タイリング)でいい感じに https://nazo.main.jp/prog/retropc/gcp6.html
3色花梨先輩 GIMPで編集 •256x192の元絵と重ねて細かい修正
3色花梨先輩 実機表示でも意外といい感じに
4色花隈千冬さん 黒髪は変換がむずかしい
4色花隈千冬さん 実機表示も見つつひたすらドット修正
次は音楽? 動画視聴ヘビーローテーション効果 花梨先輩の歌もリップシンクもいい感じなので もっと注目して欲しいよね と思いながら 改めて何度も動画視聴していてふと思う •花梨先輩、小春六花、ベースの3パート? •3パートなら PC-6001 PSGで演奏可能?
https://www.nicovideo.jp/watch/sm43594193
PSG音源 •いわゆるピコピコ音 × 3和音 •元はアーケードゲーム用? •BASIC言語だと PLAY 文で MML (Music
Macro Language) という書式を書いて演奏 こんなの→ "C8<D+D+8G8F8G8D+>D+DD+F"
PSG展示@OSC 前述の通りで PC-6001+LUNAで PSG演奏デモとか 展示してました
ニコ動にもいくつか上げています http://www.nicovideo.jp/watch/sm29263535 http://www.nicovideo.jp/watch/sm29939586
楽曲PSG演奏のためには いわゆる耳コピ •音声を聞いてパートごとに 音程を取る •いろいろある採譜支援ツールを 使ってなんとかする •このへんはWindows用しかなくて NetBSD的には厳しい感じ
採譜ツール WaveTone 周波数解析表示、スロー再生、 ピアノロール上でのノート作成と試聴 等々が可能 https://ackiesound.ifdef.jp/download.html#wt
目と耳でピアノロール採譜 •ボーカル抽出音声を音圧と耳でひたすら 細かく採譜 •後述のPSG音源ドライバは64分音符が 使えないので気をつけましょう
MML編集支援ツール 3ML Editor MIDIデータ→MML変換、編集したMMLの ピアノロール表示反映や試聴が可能 公式ページはなくなっているので適当にぐぐってください
MML編集支援ツール 3ML Editor こんな感じでリアルタイム修正可能
PC-6001で 演奏させる手段 について
よっしゅさんの PC-6001用 PSG音源ドライバ http://park10.wakwak.com/~yosh/p6.html PC-6001での演奏にはこれを使います
TINY野郎さんの MML2P6PSGDRV https://www.tiny-yarou.com/deepp6.html Windows GUI上で MML→PSG演奏データ の変換が可能
PSG演奏データが 作成できたら 次はエミュレータ上 で鳴らします
MML修正〜試聴 サイクル •3MLEでMMLを修正編集 •3MLEでMIDI出力してWaveToneで インポートして原曲音程確認 •書式をMML2P6PSGDRV用に変換 •MML2P6PSGDRVで演奏データ バイナリ生成 •PC6001VXの loadmemコマンドで
演奏データバイナリ読み込み •PC6001VX上で演奏実行
MML修正〜試聴 サイクル •3MLEでMMLを修正編集 •3MLEでMIDI出力してWaveToneで インポートして原曲音程確認 •書式をMML2P6PSGDRV用に変換 •MML2P6PSGDRVで演奏データ バイナリ生成 •PC6001VXの loadmemコマンドで
演奏データバイナリ読み込み •PC6001VX上で演奏実行 Windows上 Windows上 NetBSD上 Windows上 NetBSD上 NetBSD上
作ってみたPSG曲が かなり良かったので (自画自賛) 花梨先輩のために PC-6001 PSG演奏でも リップシンクするデモ を作ろう、と思い立つ
リップシンクデータ作成 •元動画準拠で あ・い・う・え・お ・ん・無言 の7パターンを変換 •「う」がドットが足りずムズい
リップシンクデータ作成 •P6PSGドライバ用MMLの中に リップシンク用データを 埋め込み •演奏待機中BASICプログラムで PSGドライバの更新データを 見て、リップ部分書換処理を 呼び出す
リップシンクデータ作成 •実際のデータ例 ち きゅ う I2q1c8 I3q0c+48&d16.&c+48 c48&<b48&q1a+16 よ た
び I5q0a+24&b16&>c2&c32 I0r8 I1q1<g8 I2g16&g24&a48 // リップシンク用 I0:無 I1:あ I2:い I3:う I4:え I5:お I6:ん I7:? I8:千 // M 10 さ ら D r2.v15o3 m12,2,1,2 q1I1g8 g16.&I0g32I1 // M 11 ば ち きゅ う D q0g+48&a48&a+24&a+16&b32&>c4&c16.&c24 I0r16 I2q1c8 I3q0c+48&d16.&c+48 c48&<b48&q1a+16 // M 12 よ た び D I5q0a+24&b16&>c2&c32 I0r8 I1q1<g8 I2g16&g24&a48 // M 13 だ つ ふ ね D I1a+24&b16.&>c4.&c16. I3q0d48&d+8 d8 I4<a+16&a+24&>d48
エミュ上で実行して リップ形状と歌詞と PSG音とを目と耳で 確認しながら 不自然なところを ひたすら修正
MML修正〜ビルド サイクル •MML修正と書式変換 •3MLE上で確認 •MML2P6PSGDRVで演奏データ バイナリ生成 •バイナリ→アセンブラソース変換 •アセンブルしてZ80バイナリ生成 •BASICプログラムのDATA文生成と txt2basによるP6データ生成
•バイナリ部のP6データ生成 •なんでもピーガーmkIIでwavファイル作成
MML修正〜ビルド サイクル •MML修正と書式変換 •3MLE上で確認 •MML2P6PSGDRVで演奏データ バイナリ生成 •バイナリ→アセンブラソース変換 •アセンブルしてZ80バイナリ生成 •BASICプログラムのDATA文生成と txt2basによるP6データ生成
•バイナリ部のP6データ生成 •なんでもピーガーmkIIでwavファイル作成 Windows上 NetBSD上 Windows上 NetBSD上 NetBSD上 NetBSD上 NetBSD上 Windows上
めんどくさくない? と思われるでしょうが、 元々Windows機もあって NetBSD上のsambaで ファイル共有していると 結構うまく連携できます
リップシンクポイント •「運命背負い」の「うんめい」 を単純4分割するとめちゃ不自然 ➔「うーんめーい」だといい感じ •サビの「う ちゅ〜う せんかん」 ↑ここは一瞬無音 •「あ」の後に「マ」「バ」が続く
ときはいったん口を閉じると良い 「ヤ〜 マ〜 ト〜〜」 ↑ここ う・ちゅ〜う せん
人(AI?)の歌声 •いわゆる「タメ」がかなりある •24分音符、つまり72msくらい 半音ズレてるだけでめちゃ違和感 ヤ〜 マ〜 ト〜 ひ とぉ〜 が〜〜〜
ここを24分だけ 半音下げないと すごく変
人(AI?)のビブラート •耳で聞いて定量化はムリ •いろいろ測って 180ms周期で 半音の1/3くらい揺らすように •PSGドライバの設定値がわりと謎で 最後は感覚で現物合わせに……
そんなこんなで作った 宇宙戦艦ヤマトを熱唱する花梨先輩 feat. PC-6001 の動画はニコ動に上げてあります https://www.nicovideo.jp/watch/sm44314683
NetBSDは いろんなマシンで動く + pkgsrcは NetBSDで使える ↓ pkgsrc入りしたアプリを 使えばそれはNetBSDネタ
•BSDの歴史をまとめてみました •PC-6001 はエミュレーターや 各種開発ツールが充実しています •耳コピはいろいろ奥が深いです •GUIツールは素直にWindowsで •必要なところだけWindows、でも なんとかなります •自分の作りたいものを作りましょう まとめ