Slide 1

Slide 1 text

PC-6001のPSG演奏デモを なるべくNetBSD環境を使って 作った話 関西オープンフォーラム 2024 いつもと毛色の違う謎マシンです Izumi Tsutsui [email protected] Twitter: @tsutsuii Mastodon: @[email protected]

Slide 2

Slide 2 text

2017年1月 OSC大阪前の やりとり

Slide 3

Slide 3 text

https://twitter.com/tsutsuii/status/822684506545000449

Slide 4

Slide 4 text

https://twitter.com/ebijun/status/822685193811042304

Slide 5

Slide 5 text

https://twitter.com/tsutsuii/status/822728091810152448

Slide 6

Slide 6 text

https://twitter.com/ebijun/status/822779295873404928

Slide 7

Slide 7 text

というわけで 今回もむりやりで PC-6001の開発を なるべくNetBSDで やってみた話 です

Slide 8

Slide 8 text

今年も k-of.jp に記載の タイムテーブルを 見ると……

Slide 9

Slide 9 text

KOF タイムテーブル  「BSDなひととき」 https://www.k-of.jp/2024/session/bsd

Slide 10

Slide 10 text

KOF タイムテーブル  「BSDなひととき」 https://www.k-of.jp/2024/session/bsd 4.4BSDの流れをくむ FreeBSD/NetBSD/OpenBSDなど、 BSD系UNIXのユーザグループ合同で、 BSD系UNIX全般を対象とした 幅広いテーマで議論します。

Slide 11

Slide 11 text

過去は LUNA 一昨年は Sun 去年は NEWS 今年は パピコン と レトロ系ばかりで すいません

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

減色例

Slide 19

Slide 19 text

減色例

Slide 20

Slide 20 text

減色例

Slide 21

Slide 21 text

減色例

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

TINY Bitmap Converter もう一つの減色ツール ●Windows用の各機種用減色変換ツール ●「テープイメージ出力」を使うと  エミュレータや実機でも即実行可能 https://www.tiny-yarou.com/tinybmpconv.html

Slide 26

Slide 26 text

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

Slide 27

Slide 27 text

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

Slide 28

Slide 28 text

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

Slide 29

Slide 29 text

3色花梨先輩 例によって PC-6001 ●使われている外箱式花梨先輩をP6減色 ●実機表示でも意外といい感じに https://seiga.nicovideo.jp/seiga/im10924527

Slide 30

Slide 30 text

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

Slide 31

Slide 31 text

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

Slide 32

Slide 32 text

PSG展示@OSC OSCでもPC-6001と LUNAで PSG演奏デモ とか展示してました

Slide 33

Slide 33 text

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

Slide 34

Slide 34 text

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

Slide 35

Slide 35 text

採譜ツール① York Trail ボーカル、ベース他の音源パート  分離機能が便利! https://ss1.xrea.com/theta.s57.xrea.com/software/#yorktrail

Slide 36

Slide 36 text

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

Slide 37

Slide 37 text

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

Slide 38

Slide 38 text

MMLが書けたら 次はPC-6001で 演奏させる手段が 必要なので用意

Slide 39

Slide 39 text

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

Slide 40

Slide 40 text

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

Slide 41

Slide 41 text

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

Slide 42

Slide 42 text

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

Slide 43

Slide 43 text

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

Slide 44

Slide 44 text

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

Slide 45

Slide 45 text

演奏試聴手順 ●MML2P6PSGDRVには実機演奏用  プログラムの出力機能あり ●PC6001VXでそれを実行しておく ●PC6001VXの「どこでもセーブ」  でそのステートを保存 ●PC6001VXのデバッガの  「ファイルからメモリにロード」  コマンドでPSGデータを読み込み ●PC6001VX上で演奏実行して試聴

Slide 46

Slide 46 text

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

Slide 47

Slide 47 text

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

Slide 48

Slide 48 text

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

Slide 49

Slide 49 text

リップシンクデータ作成 ●元データはpsd →GIMPで編集可能 ●元動画準拠で あ・い・う・え・お  ・ん・無言 の7パターンを変換 ●口部分のVRAMデータ切り出し

Slide 50

Slide 50 text

リップシンクデータ作成 ●P6PSGドライバ用MMLの中に  リップシンク用データを埋め込み ●演奏待機中のBASICプログラムで  PSGドライバが更新するデータを  見て、リップ部分書き換え処理を  呼び出す、という想定 // リップシンク用 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&c2&c32 I0r8 I1q1c4.&c16. I3q0d48&d+8 d8 I4d48

Slide 51

Slide 51 text

エミュレータで一通 り演奏が動いたら、 次は実機動作用の データローダを 作成します

Slide 52

Slide 52 text

Macroassember AS ●過去はWindowsでzasm.exeを使用 ●いろいろ探して NetBSDでも動く  Z80の使えるアセンブラとして  Macroassembler ASを採用 ●ZASMとほぼ同様の書式 ●include文が使えるので生成データ  組み込みも簡単に書ける http://john.ccac.rwth-aachen.de:8000/as/

Slide 53

Slide 53 text

PC-6001用 txt2bas ●N60-BASICプログラムテキストを  PC-6001データレコーダ形式  (P6形式)に変換するツール ●CUIでソースコードもあるので  NetBSD上でも動作可能 http://retropc.net/isio/mysoft/

Slide 54

Slide 54 text

なんでもピーガーmkII ●TINY野郎さん作成の  PC-6001データレコーダ形式  (P6形式)から実機のデータ  レコーダで読めるwavを生成する  Windows用ツール https://www.tiny-yarou.com/datarec.html

Slide 55

Slide 55 text

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

Slide 56

Slide 56 text

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

Slide 57

Slide 57 text

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

Slide 58

Slide 58 text

そんなこんなで なるべくNetBSD環境で作った 宇宙戦艦ヤマトを熱唱する花梨先輩 feat. PC-6001 のリプレイ動画

Slide 59

Slide 59 text

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

Slide 60

Slide 60 text

今回の開発のターゲットとして 初代PC-6001を使っていて、 今回の展示もそれを持ち込むつもり だったのですが、 11/8(金)の準備で本体内部を 改修していたところ誤って ヒューズを飛ばしてしまい、 KOF出発までに代替品を用意できず PC-6001mkIIでの展示となりました おことわり

Slide 61

Slide 61 text

●PC-6001 はエミュレーターや  各種開発ツールが充実しています ●耳コピは作った分だけすぐ聞ける  のがよいですね ●GUIツールは NetBSDでは厳しい ●必要なところだけWindows、でも  なんとかなります ●自分の作りたいものを作りましょう まとめ