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環境を使って作った話 / KOF2024
Search
Izumi Tsutsui
November 09, 2024
Programming
1
34
PC-6001のPSG演奏デモをなるべくNetBSD環境を使って作った話 / KOF2024
KOF2024の「BSDなひととき」のセミナーで発表した『PC-6001のPSG演奏デモをなるべくNetBSD環境を使って作った話』のスライドです。
Izumi Tsutsui
November 09, 2024
Tweet
Share
More Decks by Izumi Tsutsui
See All by Izumi Tsutsui
OSC展示とLUNAとNetBSD / OSC2024Kyoto
tsutsui
1
62
digital VAX, NetBSD/vaxの歴史と VAXstation 3100/m30 展示 / OSC2024Osaka
tsutsui
0
440
SONY NEWS NetBSD移植作業とNWS-3260展示 / KOF2023
tsutsui
0
1.3k
37年前の Sun 3/60 のために最新のNetBSDと最新のX.orgをメンテする話 / KOF2022
tsutsui
1
460
お歳暮で Sun3 が送られてきたので NetBSD/sun3 を展示デモしました / OSC2020Osaka
tsutsui
5
2.7k
NetBSD/zaurus 8.1 を直したあと ブース展示デモ内容を作った話 / OSC2019Tokyo-Fall
tsutsui
0
690
NetBSD/zaurus 8.1 をテストしたら動かなかったので動くまで直した話 / KOF2019-NetBSD
tsutsui
1
1.1k
OSC京都 LUNA展示 9年目 / OSC2019Kyoto
tsutsui
0
620
NetBSDておくれLive Image UEFI対応 設計仕様検討メモ / NetBSD UEFI Live Image
tsutsui
0
440
Other Decks in Programming
See All in Programming
Snowflake x dbtで作るセキュアでアジャイルなデータ基盤
tsoshiro
2
500
Duckdb-Wasmでローカルダッシュボードを作ってみた
nkforwork
0
100
Amazon Bedrock Agentsを用いてアプリ開発してみた!
har1101
0
300
Click-free releases & the making of a CLI app
oheyadam
2
100
讓數據說話:用 Python、Prometheus 和 Grafana 講故事
eddie
0
390
OpenTelemetryでRailsのパフォーマンス分析を始めてみよう(KoR2024)
ymtdzzz
5
2k
Amazon Qを使ってIaCを触ろう!
maruto
0
370
Importmapを使ったJavaScriptの 読み込みとブラウザアドオンの影響
swamp09
4
1.3k
CSC509 Lecture 09
javiergs
PRO
0
140
Compose 1.7のTextFieldはPOBox Plusで日本語変換できない
tomoya0x00
0
160
役立つログに取り組もう
irof
28
9.3k
開発効率向上のためのリファクタリングの一歩目の選択肢 ~コード分割~ / JJUG CCC 2024 Fall
ryounasso
0
420
Featured
See All Featured
Measuring & Analyzing Core Web Vitals
bluesmoon
2
75
Scaling GitHub
holman
458
140k
Art, The Web, and Tiny UX
lynnandtonic
297
20k
What’s in a name? Adding method to the madness
productmarketing
PRO
22
3.1k
5 minutes of I Can Smell Your CMS
philhawksworth
202
19k
Being A Developer After 40
akosma
86
590k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
231
17k
Optimising Largest Contentful Paint
csswizardry
33
2.9k
BBQ
matthewcrist
85
9.3k
Why Our Code Smells
bkeepers
PRO
334
57k
Building a Modern Day E-commerce SEO Strategy
aleyda
38
6.9k
Visualization
eitanlees
145
15k
Transcript
PC-6001のPSG演奏デモを なるべくNetBSD環境を使って 作った話 関西オープンフォーラム 2024 いつもと毛色の違う謎マシンです Izumi Tsutsui
[email protected]
Twitter:
@tsutsuii Mastodon: @
[email protected]
2017年1月 OSC大阪前の やりとり
https://twitter.com/tsutsuii/status/822684506545000449
https://twitter.com/ebijun/status/822685193811042304
https://twitter.com/tsutsuii/status/822728091810152448
https://twitter.com/ebijun/status/822779295873404928
というわけで 今回もむりやりで PC-6001の開発を なるべくNetBSDで やってみた話 です
今年も k-of.jp に記載の タイムテーブルを 見ると……
KOF タイムテーブル 「BSDなひととき」 https://www.k-of.jp/2024/session/bsd
KOF タイムテーブル 「BSDなひととき」 https://www.k-of.jp/2024/session/bsd 4.4BSDの流れをくむ FreeBSD/NetBSD/OpenBSDなど、 BSD系UNIXのユーザグループ合同で、 BSD系UNIX全般を対象とした 幅広いテーマで議論します。
過去は LUNA 一昨年は Sun 去年は NEWS 今年は パピコン と レトロ系ばかりで
すいません
PC-6001 とは • NEC製の 8ビットパソコン •1981年 11月 発売
PC-6001 スペック •CPU: 8bit Z80互換 4MHz •RAM: 標準 16KB, 最大32KB
•グラフィック: 128×192ドット 4色 256×192ドット モノクロ2色 •音源:PSG 3和音 •標準価格:89,800円
ホビー・教育向け ターゲット http://www.nicovideo.jp/watch/sm1254646
•VRAMも共用 → 空きは 7KB •それでもいろいろ作れた時代 いろいろ遊ぶには32KBに増設しないとキツいかも メモリ 16KB
•128×192: 横長ドット •青・赤・緑・黄 (白・橙・紫・水色 のモードもあり) 4色の芸術
最近のマイブーム •パピコン4色 減色画像作成 OSC広島でもひっそり展示してました
減色例
減色例
減色例
減色例
減色方法 •16色と比べて格段にむずかしい 2016年頃は既存の減色ツールで全部 手動で試行錯誤で作ってました
「画像変換 for PC-6001」 •時代の進化 Web I/Fで各種の減色アルゴリズムや パラメータ調整でいい感じに作ってくれる ページがあります https://nazo.main.jp/prog/retropc/gcp6.html
ドット打ち職人 •細かい調整はGIMPで そこそこ大変ですが、ドット数も色数も 少ないので慣れてくるとなんとかなります
TINY Bitmap Converter もう一つの減色ツール •Windows用の各機種用減色変換ツール •「テープイメージ出力」を使うと エミュレータや実機でも即実行可能 https://www.tiny-yarou.com/tinybmpconv.html
そんなことを やっていた中で、 最近よく見ていた 動画がこれ
宇宙戦艦ヤマトを熱唱する花梨先輩 feat. 小春六花 @ニコ動 https://www.nicovideo.jp/watch/sm43594193
メインを歌う夏色花梨先輩の 歌はすごく良いのに、 手前で合いの手を入れる 小春六花さんのインパクトに すべて持っていかれる動画 (詳しくは視聴してみてください)
3色花梨先輩 例によって PC-6001 •使われている外箱式花梨先輩をP6減色 •実機表示でも意外といい感じに https://seiga.nicovideo.jp/seiga/im10924527
次は音楽? 動画視聴ヘビーローテーション効果 花梨先輩の歌もリップシンクもいい感じなので もっと注目して欲しいよね と思いながら 改めて何度も動画視聴していてふと思う •花梨先輩、小春六花、ベースの3パート? •3パートなら PC-6001 PSGで演奏可能?
https://www.nicovideo.jp/watch/sm43594193
PSG音源 • いわゆるピコピコ音 × 3和音 • 元はアーケードゲーム用? • BASICだと PLAY
文で MMLという書式を書いて演奏 こんなの→ "C8<D+D+8G8F8G8D+>D+DD+F"
PSG展示@OSC OSCでもPC-6001と LUNAで PSG演奏デモ とか展示してました
ニコ動にいくつか上げています http://www.nicovideo.jp/watch/sm29263535 http://www.nicovideo.jp/watch/sm29939586
楽曲PSG演奏のためには いわゆる耳コピ •音声を聞いてパートごとに 音程を取る •いろいろある採譜支援ツールを 使ってなんとかする •このへんはWindows用しかなくて NetBSD的には厳しい感じ
採譜ツール① York Trail ボーカル、ベース他の音源パート 分離機能が便利! https://ss1.xrea.com/theta.s57.xrea.com/software/#yorktrail
採譜ツール② WaveTone 周波数解析表示、スロー再生、 ピアノロール上でのノート作成と試聴 等々が可能 https://ackiesound.ifdef.jp/download.html#wt
MML編集支援ツール 3ML Editor MIDIデータ→MML変換、編集したMMLの ピアノロール表示反映や試聴が可能 公式ページはなくなっているので適当にぐぐってください
MMLが書けたら 次は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演奏データが 作成できたら 次はエミュレータ上 で鳴らします
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不要 •Android版もあり •pkgsrc にしたので NetBSDでも 動作可能!
PC6001VX https://github.com/eighttails/PC6001VX
演奏試聴手順 •MML2P6PSGDRVには実機演奏用 プログラムの出力機能あり •PC6001VXでそれを実行しておく •PC6001VXの「どこでもセーブ」 でそのステートを保存 •PC6001VXのデバッガの 「ファイルからメモリにロード」 コマンドでPSGデータを読み込み •PC6001VX上で演奏実行して試聴
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演奏でも リップシンクするデモ を作ろう、と思い立つ
リップシンクデータ作成 •元データはpsd →GIMPで編集可能 •元動画準拠で あ・い・う・え・お ・ん・無言 の7パターンを変換 •口部分のVRAMデータ切り出し
リップシンクデータ作成 •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&<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
エミュレータで一通 り演奏が動いたら、 次は実機動作用の データローダを 作成します
Macroassember AS •過去はWindowsでzasm.exeを使用 •いろいろ探して NetBSDでも動く Z80の使えるアセンブラとして Macroassembler ASを採用 •ZASMとほぼ同様の書式 •include文が使えるので生成データ
組み込みも簡単に書ける http://john.ccac.rwth-aachen.de:8000/as/
PC-6001用 txt2bas •N60-BASICプログラムテキストを PC-6001データレコーダ形式 (P6形式)に変換するツール •CUIでソースコードもあるので NetBSD上でも動作可能 http://retropc.net/isio/mysoft/
なんでもピーガーmkII •TINY野郎さん作成の PC-6001データレコーダ形式 (P6形式)から実機のデータ レコーダで読めるwavを生成する Windows用ツール https://www.tiny-yarou.com/datarec.html
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で ファイル共有していると 結構うまく連携できます
そんなこんなで なるべくNetBSD環境で作った 宇宙戦艦ヤマトを熱唱する花梨先輩 feat. PC-6001 のリプレイ動画
NetBSDは いろんなマシンで動く + pkgsrcは NetBSDで使える ↓ pkgsrc入りしたアプリを 使えばそれはNetBSDネタ
今回の開発のターゲットとして 初代PC-6001を使っていて、 今回の展示もそれを持ち込むつもり だったのですが、 11/8(金)の準備で本体内部を 改修していたところ誤って ヒューズを飛ばしてしまい、 KOF出発までに代替品を用意できず PC-6001mkIIでの展示となりました おことわり
•PC-6001 はエミュレーターや 各種開発ツールが充実しています •耳コピは作った分だけすぐ聞ける のがよいですね •GUIツールは NetBSDでは厳しい •必要なところだけWindows、でも なんとかなります •自分の作りたいものを作りましょう
まとめ