Slide 1

Slide 1 text

PC-6001のPSG演奏デモを機会に NetBSDを真面目に説明してみる オープンソースカンファレンス愛媛 2024 レトロパソコン実機デモのために持ってきました Izumi Tsutsui [email protected] Twitter: @tsutsuii Mastodon: @[email protected]

Slide 2

Slide 2 text

ところで、 今日のOSC愛媛の セミナーセッション情報 を見ると……

Slide 3

Slide 3 text

https://event.ospn.jp/osc2024-ehime/session/1757792

Slide 4

Slide 4 text

https://event.ospn.jp/osc2024-ehime/session/1757792

Slide 5

Slide 5 text

学生の方も 来られてるかも なので、 できるだけ(?) 入門編で行きます

Slide 6

Slide 6 text

BSDとは? ●Berkeley Software Distribution ●カリフォルニア大学バークレー校 で開発されたUNIX系OS ●’70年代 UNIX研究として開発開始 ●’80年代 ネットワーク機能、 仮想記憶など現代のOSの 基礎を築く ●UNIXの進化と普及に貢献

Slide 7

Slide 7 text

BSD timeline (1) https://github.com/FabioLolix/BSD-Timeline/releases

Slide 8

Slide 8 text

BSD timeline (1) https://github.com/FabioLolix/BSD-Timeline/releases 1BSD 1978年3月 PDP-11

Slide 9

Slide 9 text

BSD timeline (1) https://github.com/FabioLolix/BSD-Timeline/releases 2BSD 1979年5月 viエディタ

Slide 10

Slide 10 text

BSD timeline (1) https://github.com/FabioLolix/BSD-Timeline/releases 3BSD 1980年3月 VAX 仮想記憶

Slide 11

Slide 11 text

BSD timeline (1) https://github.com/FabioLolix/BSD-Timeline/releases 4.0BSD 1980年10月 signal機構

Slide 12

Slide 12 text

BSD timeline (1) https://github.com/FabioLolix/BSD-Timeline/releases 4.1BSD 1981年7月 性能強化

Slide 13

Slide 13 text

BSD timeline (1) https://github.com/FabioLolix/BSD-Timeline/releases 4.2BSD 1983年8月 TCP/IP

Slide 14

Slide 14 text

BSD timeline (2) https://github.com/FabioLolix/BSD-Timeline/releases 4.3BSD 1986年4月 複数機種対応

Slide 15

Slide 15 text

BSD timeline (2) https://github.com/FabioLolix/BSD-Timeline/releases 4.3BSD Net/2 1991年6月 80386対応

Slide 16

Slide 16 text

BSD timeline (2) https://github.com/FabioLolix/BSD-Timeline/releases 386BSD 0.0 1992年2月 IBM-PC用

Slide 17

Slide 17 text

●Intel 80386プロセッサ向け ●初のオープンソースUNIX系OS? ●4.3BSD Net/2ベース ●企業や大学が主だった UNIX系OSが一般(?)の ユーザでも利用可能に ●実は趣味プロジェクト だった、という話 386BSD

Slide 18

Slide 18 text

●いずれも386BSDをベースとした パッチ集として開始  FreeBSD ➔ 性能重視、x86 PCをターゲット  NetBSD ➔ 設計重視、全CPUをターゲット NetBSD, FreeBSD

Slide 19

Slide 19 text

●“Of course, it runs NetBSD” ➔特定の機種に依存しない設計 ●“Reasonable Goal” ➔性能より「理にかなった」設計 ●仮想記憶やデバイスドライバ等の 一貫性を持つインタフェース設計 NetBSDの特長 

Slide 20

Slide 20 text

●いろんなCPUやデバイスで動く ➔組み込み系での採用例が多い NetBSDの特長  https://x.com/yuyarin/status/1154647238280302593

Slide 21

Slide 21 text

●抽象化されたインタフェース実装 NetBSDの特長  https://social.mikutter.hachune.net/@osa_k/112066453265169340

Slide 22

Slide 22 text

NetBSDを動かしてるマシン展示   SHARP X68030 https://social.mikutter.hachune.net/@tsutsuii/113219497964975269

Slide 23

Slide 23 text

NetBSDを動かしてるマシン展示   Apple Macintosh LC630→  ↓ATARI TT030

Slide 24

Slide 24 text

NetBSDを動かしてるマシン展示  https://x.com/tsutsuii/status/1817601650833670197 https://x.com/tsutsuii/status/1682579308307685378 オムロン LUNA, LUNA-II

Slide 25

Slide 25 text

ところで タイトルにある PC-6001 ってどうなったの? ……と思われる方も いるかもしれません

Slide 26

Slide 26 text

OSC2017京都 PC-6001×LUNAコラボ演奏展示 https://www.nicovideo.jp/watch/sm31732739

Slide 27

Slide 27 text

PC-6001 とは ● NEC製の 8ビットパソコン ●1981年 11月 発売

Slide 28

Slide 28 text

ホビー・教育向け ターゲット https://www.nicovideo.jp/watch/sm1254646

Slide 29

Slide 29 text

PC-6001 スペック ●CPU:8bit Z80 4MHz ●RAM:標準 16KB, 最大32KB ●グラフィック: 128×192ドット 4色 256×192ドット モノクロ2色 ●音源:PSG 3和音 ●標準価格:89,800円

Slide 30

Slide 30 text

●VRAMも共用 → 空きは 7KB ●それでもいろいろ作れた時代  いろいろ遊ぶには32KBに増設しないとキツいかも メモリ 16KB

Slide 31

Slide 31 text

Z80 CPUとは ●1976年発表 8ビットCPU ●’80年代のパソコンに多数採用 ●組み込みでは今も使われている ロングセラー

Slide 32

Slide 32 text

LUNAとPC-6001 https://x.com/tsutsuii/status/802351863836250112

Slide 33

Slide 33 text

PC-6001マスタ・LUNAスレーブ https://www.nicovideo.jp/watch/sm31979305

Slide 34

Slide 34 text

PC-6001マスタ・LUNAスレーブ ●PSG演奏ドライバは2ms割り込み駆動 ●割り込みでジョイスティックポートに 外部駆動信号を出力 ●それをLUNAのシリアルポートに接続 ●LUNAサブCPUのシリアル割り込みで LUNAのPSG楽曲を同期演奏 ……という誰にもわからない デモ展示をやってたのでした

Slide 35

Slide 35 text

Z80 CPU用 UNIX ●“FUZIX”: Z80用 UNIX like OS ●LUNAのZ80互換サブCPUでも動作 ●ブースのエミュレータ上でデモ中 https://x.com/tsutsuii/status/1857612965266231703

Slide 36

Slide 36 text

●聴講者が全員PC-6001を知ってる ●セミナー後にPC-6001ソフト開発 の思い出を語る方 ●展示ブースで Z80マシン語の話 が始まる ……みたいな感じでした ちなみに先週末 11/9 の 関西オープンフォーラムでは

Slide 37

Slide 37 text

……と、 NetBSDマシンと PC-6001の関係を むりやり話したので、 後はPC-6001デモの話 です

Slide 38

Slide 38 text

PC-6001用エミュレータ 実機がなくても遊べます ●2000年頃からPC-6001のエミュレータが 多数開発される ●エミュレータだけでなく、 開発に必要なツールも多数 ●データ記録テーブ模擬 ●テープ音声⇔エミュ用データ変換 ●プログラムテキスト⇔エミュ用変換 ●エミュレータもデバッグ機能が充実

Slide 39

Slide 39 text

PC6001VX http://eighttails.seesaa.net/article/305067428.html https://github.com/eighttails/PC6001VX

Slide 40

Slide 40 text

●READMEより 「PC6001VをLinux等で動作  するよう改変したものです」 「PC6001VXの末尾のXは  クロスプラットフォームの  Xです」 PC6001VX https://github.com/eighttails/PC6001VX

Slide 41

Slide 41 text

●基本的な機能は PC6001V 準拠 ●クロスGUI環境としてQtを使用 ●互換ROM内蔵で 実機ROM不要 ●pkgsrc にしたので NetBSDでも動作可能! ●Android版もあります→ PC6001VX https://github.com/eighttails/PC6001VX

Slide 42

Slide 42 text

NetBSDマシン上で PC6001VXを使ったり たまに実機を使ったり という感じで 遊んでいます

Slide 43

Slide 43 text

●128×192: 横長ドット ●青・赤・緑・黄  (白・橙・紫・水色 のモードもあり) 4色の芸術

Slide 44

Slide 44 text

最近のマイブーム ●パピコン4色 減色画像作成 OSC広島でもひっそり展示してました

Slide 45

Slide 45 text

減色例

Slide 46

Slide 46 text

減色例

Slide 47

Slide 47 text

ところで、KOFのセミナーで このスライドを見られた方から PC-6001の4色モードは 緑・青・赤・黃 ではなく 白・水色・紫・橙 を使うべき! という熱い声をいただきました

Slide 48

Slide 48 text

減色例

Slide 49

Slide 49 text

減色例

Slide 50

Slide 50 text

なぜなら橙を使えば 肌色が出せる! ……ということだったので 画像をKOFのスライドから 差し替えさせていただきました

Slide 51

Slide 51 text

減色方法 ●16色と比べて格段にむずかしい 2016年頃は既存の減色ツールで全部 手動で試行錯誤で作ってました

Slide 52

Slide 52 text

「画像変換 for PC-6001」 ●時代の進化 Web I/Fで各種の減色アルゴリズムや パラメータ調整でいい感じに作ってくれる ページがあります https://nazo.main.jp/prog/retropc/gcp6.html

Slide 53

Slide 53 text

ドット打ち職人 ●細かい調整はGIMPで そこそこ大変ですが、ドット数も色数も 少ないので慣れてくるとなんとかなります

Slide 54

Slide 54 text

そんなことを やっていた中で、 最近よく見ていた 動画がこれ

Slide 55

Slide 55 text

宇宙戦艦ヤマトを熱唱する花梨先輩 feat. 小春六花 @ニコ動 https://www.nicovideo.jp/watch/sm43594193

Slide 56

Slide 56 text

メインを歌う夏色花梨先輩の 歌はすごく良いのに、 手前で合いの手を入れる 小春六花さんのインパクトに すべて持っていかれる動画 (詳しくは視聴してみてください)

Slide 57

Slide 57 text

3色花梨先輩 減色方法は都度試行錯誤で ●輪郭色:青、減色方法:ディザパターン (タイリング)でいい感じに https://nazo.main.jp/prog/retropc/gcp6.html

Slide 58

Slide 58 text

3色花梨先輩 GIMPで編集 ●256x192の元絵と重ねて細かい修正

Slide 59

Slide 59 text

3色花梨先輩 実機表示でも意外といい感じに

Slide 60

Slide 60 text

4色花隈千冬さん 黒髪は変換がむずかしい

Slide 61

Slide 61 text

4色花隈千冬さん 実機表示も見つつひたすらドット修正

Slide 62

Slide 62 text

次は音楽? 動画視聴ヘビーローテーション効果 花梨先輩の歌もリップシンクもいい感じなので もっと注目して欲しいよね と思いながら 改めて何度も動画視聴していてふと思う ●花梨先輩、小春六花、ベースの3パート? ●3パートなら PC-6001 PSGで演奏可能? https://www.nicovideo.jp/watch/sm43594193

Slide 63

Slide 63 text

PSG音源 ●いわゆるピコピコ音 × 3和音 ●元はアーケードゲーム用? ●BASIC言語だと PLAY 文で MML (Music Macro Language) という書式を書いて演奏 こんなの→ "C8D+DD+F"

Slide 64

Slide 64 text

PSG展示@OSC 前述の通りで PC-6001+LUNAで PSG演奏デモとか 展示してました

Slide 65

Slide 65 text

ニコ動にもいくつか上げています http://www.nicovideo.jp/watch/sm29263535 http://www.nicovideo.jp/watch/sm29939586

Slide 66

Slide 66 text

楽曲PSG演奏のためには いわゆる耳コピ ●音声を聞いてパートごとに  音程を取る ●いろいろある採譜支援ツールを  使ってなんとかする ●このへんはWindows用しかなくて  NetBSD的には厳しい感じ

Slide 67

Slide 67 text

採譜ツール WaveTone 周波数解析表示、スロー再生、  ピアノロール上でのノート作成と試聴  等々が可能 https://ackiesound.ifdef.jp/download.html#wt

Slide 68

Slide 68 text

目と耳でピアノロール採譜 ●ボーカル抽出音声を音圧と耳でひたすら 細かく採譜 ●後述のPSG音源ドライバは64分音符が 使えないので気をつけましょう

Slide 69

Slide 69 text

MML編集支援ツール 3ML Editor MIDIデータ→MML変換、編集したMMLの  ピアノロール表示反映や試聴が可能 公式ページはなくなっているので適当にぐぐってください

Slide 70

Slide 70 text

MML編集支援ツール 3ML Editor こんな感じでリアルタイム修正可能

Slide 71

Slide 71 text

PC-6001で 演奏させる手段 について

Slide 72

Slide 72 text

よっしゅさんの PC-6001用 PSG音源ドライバ http://park10.wakwak.com/~yosh/p6.html PC-6001での演奏にはこれを使います

Slide 73

Slide 73 text

TINY野郎さんの MML2P6PSGDRV https://www.tiny-yarou.com/deepp6.html Windows GUI上で MML→PSG演奏データ  の変換が可能

Slide 74

Slide 74 text

PSG演奏データが 作成できたら 次はエミュレータ上 で鳴らします

Slide 75

Slide 75 text

MML修正〜試聴 サイクル ●3MLEでMMLを修正編集 ●3MLEでMIDI出力してWaveToneで  インポートして原曲音程確認 ●書式をMML2P6PSGDRV用に変換 ●MML2P6PSGDRVで演奏データ  バイナリ生成 ●PC6001VXの loadmemコマンドで  演奏データバイナリ読み込み ●PC6001VX上で演奏実行

Slide 76

Slide 76 text

MML修正〜試聴 サイクル ●3MLEでMMLを修正編集 ●3MLEでMIDI出力してWaveToneで  インポートして原曲音程確認 ●書式をMML2P6PSGDRV用に変換 ●MML2P6PSGDRVで演奏データ  バイナリ生成 ●PC6001VXの loadmemコマンドで  演奏データバイナリ読み込み ●PC6001VX上で演奏実行 Windows上 Windows上 NetBSD上 Windows上 NetBSD上 NetBSD上

Slide 77

Slide 77 text

作ってみたPSG曲が かなり良かったので (自画自賛) 花梨先輩のために PC-6001 PSG演奏でも リップシンクするデモ を作ろう、と思い立つ

Slide 78

Slide 78 text

リップシンクデータ作成 ●元動画準拠で あ・い・う・え・お  ・ん・無言 の7パターンを変換 ●「う」がドットが足りずムズい

Slide 79

Slide 79 text

リップシンクデータ作成 ●P6PSGドライバ用MMLの中に リップシンク用データを 埋め込み ●演奏待機中BASICプログラムで PSGドライバの更新データを 見て、リップ部分書換処理を 呼び出す

Slide 80

Slide 80 text

リップシンクデータ作成 ●実際のデータ例 ち きゅ う I2q1c8 I3q0c+48&d16.&c+48 c48&c2&c32 I0r8 I1q1c4&c16.&c24 I0r16 I2q1c8 I3q0c+48&d16.&c+48 c48&c2&c32 I0r8 I1q1c4.&c16. I3q0d48&d+8 d8 I4d48

Slide 81

Slide 81 text

エミュ上で実行して リップ形状と歌詞と PSG音とを目と耳で 確認しながら 不自然なところを ひたすら修正

Slide 82

Slide 82 text

MML修正〜ビルド サイクル ●MML修正と書式変換 ●3MLE上で確認 ●MML2P6PSGDRVで演奏データ  バイナリ生成 ●バイナリ→アセンブラソース変換 ●アセンブルしてZ80バイナリ生成 ●BASICプログラムのDATA文生成と  txt2basによるP6データ生成 ●バイナリ部のP6データ生成 ●なんでもピーガーmkIIでwavファイル作成

Slide 83

Slide 83 text

MML修正〜ビルド サイクル ●MML修正と書式変換 ●3MLE上で確認 ●MML2P6PSGDRVで演奏データ  バイナリ生成 ●バイナリ→アセンブラソース変換 ●アセンブルしてZ80バイナリ生成 ●BASICプログラムのDATA文生成と  txt2basによるP6データ生成 ●バイナリ部のP6データ生成 ●なんでもピーガーmkIIでwavファイル作成 Windows上 NetBSD上 Windows上 NetBSD上 NetBSD上 NetBSD上 NetBSD上 Windows上

Slide 84

Slide 84 text

めんどくさくない? と思われるでしょうが、 元々Windows機もあって NetBSD上のsambaで ファイル共有していると 結構うまく連携できます

Slide 85

Slide 85 text

リップシンクポイント ●「運命背負い」の「うんめい」 を単純4分割するとめちゃ不自然 ➔「うーんめーい」だといい感じ ●サビの「う ちゅ〜う せんかん」    ↑ここは一瞬無音 ●「あ」の後に「マ」「バ」が続く ときはいったん口を閉じると良い 「ヤ〜 マ〜 ト〜〜」 ↑ここ う・ちゅ〜う せん

Slide 86

Slide 86 text

人(AI?)の歌声 ●いわゆる「タメ」がかなりある ●24分音符、つまり72msくらい 半音ズレてるだけでめちゃ違和感 ヤ〜 マ〜 ト〜 ひ とぉ〜 が〜〜〜 ここを24分だけ 半音下げないと すごく変

Slide 87

Slide 87 text

人(AI?)のビブラート ●耳で聞いて定量化はムリ ●いろいろ測って 180ms周期で 半音の1/3くらい揺らすように ●PSGドライバの設定値がわりと謎で 最後は感覚で現物合わせに……

Slide 88

Slide 88 text

そんなこんなで作った 宇宙戦艦ヤマトを熱唱する花梨先輩 feat. PC-6001 の動画はニコ動に上げてあります https://www.nicovideo.jp/watch/sm44314683

Slide 89

Slide 89 text

NetBSDは いろんなマシンで動く + pkgsrcは NetBSDで使える ↓ pkgsrc入りしたアプリを 使えばそれはNetBSDネタ

Slide 90

Slide 90 text

●BSDの歴史をまとめてみました ●PC-6001 はエミュレーターや  各種開発ツールが充実しています ●耳コピはいろいろ奥が深いです ●GUIツールは素直にWindowsで ●必要なところだけWindows、でも  なんとかなります ●自分の作りたいものを作りましょう まとめ