play a music on luna-88k2
TRANSCRIPT
OSC 2016 Nagoya
OpenBSD/luna88kのご紹介
FM音源の調べ OSC版〜 Play a music on LUNA 〜
Nagoya *BSD Users' GroupKenji Aoyama / ⻘⼭ 健治
Twitter: @ao_kenji
2
LUNAとは?
• LUNAシリーズ– オムロン株式会社が1980年代後半〜90年代
初めに販売していたワークステーション• LUNA, LUNA-II
– CPU:モトローラ68030/68040(m68k)– NetBSD/luna68kが動きます
• LUNA-88K, LUNA-88K2 – CPU:モトローラ88100(m88k) MP対応– OpenBSD/luna88kが動きます
⾒かけたら保護を!
3
LUNA-88K2:こんなマシンです
前面の液晶パネル
個々のCPU動作状況が分かる
LEDマルチプロセッサ対応
比較的コンパクトな筐体(ご家庭でもOK)
CPU動作状況が分かる電源ボタン
Cバススロット(88K2のみ)
4
LUNAでCバス拡張ボードを使う話
• 昨年のOSC Nagoyaで発表しました• 今日は、Cバス拡張ボードのFM音源をい
じる話です
5
ここから本題:LUNAと音源
• 初代LUNA(68K無印)にはSSG(YM2149)が載っていたようです– ユーザランドからどうやって使っていたのか
気になります…
• 88K2のCバススロットに装着したPC-9801-86(86音源ボード)にもFM音源チップが載ってますよ?– PCM部分のドライバ作った後放置してました
6
FM音源とは?(ざっくり)
• FM(Frequency Modulation)を応用した音色合成チップ
• 少ないパラメータで色々な音が出せる– マシンパワー・メモリが少なくても良い
• ’80〜’90年代のパソコンで流⾏– その後、いわゆるガラケーでも使われていた
• 今どきはソフトウェアでリアルタイム音色合成してエミュレーションできるようです
7
実チップを楽しむコミュニティも
Project RE:birth
G.I.M.I.C Project
http://ym2203.com/rebirth/
http://gimic.net/
8
YM2608(OPNA)とは?
• 86音源ボードに搭載されているFM音源チップ
• FM音源部– 4オペレータ– 同時発音数6音 ステレオ
• SSG– 3音モノラル
• ADPCM• リズム音源
画像出典: Wikipedia
本日のデモ機には後継チップのYMF288が載っています
9
OPNAのいじり方
• アドレスレジスタとデータレジスタによる間接アクセス方式
• pcex(4)ドライバを使えば、ユーザランドからアクセスできる
• 音色を設定して、Key-On/Offしてやると一応音がでた!
出展︓「YM2608 OPNA アプリケーションマニュアル」ヤマハ株式会社
10
さて、演奏は?
• せっかくなので何か曲を演奏させよう• コンピュータで演奏と言えば、
MML(Music Macro Language)でしょ– こんなやつです
• parserを自分で作らないといけない?• と思って色々⾒ていたら…
t120 o4 l4 aab2 aab2 ab>c<b ab8a8f2 ecef ee8c8<b2> ab>c<b ab8a8f2 ecef ee8c8<b2> aab2 aab2 efb8a8f e1
11
いいもの発⾒: A tiny MML parser
http://www.cubeatsystems.com/firmware/tinymml/
12
A tiny MML parser: Features
• Really simple.– The API has only three functions.– It consists of only four small modules.
• Highly portable.– Compatible with C89.– No dependencies. (even libc!)– No dynamic memory allocation. (no need
a operating system!)• …
http://www.cubeatsystems.com/firmware/tinymml/
13
演奏プログラムを作ってみた
https://github.com/ao-kenji/opnaplay/
• ‘A tiny MML parser’ でparseし、OPNAのレジスタを叩いて演奏します
※FM音源の音色パラメータは、VALSOUND FM-Library / (C)Takeshi Abo.http://www.valsound.com/のものを許可を得て使用しています。
14
さらに…
• 単音では寂しいので和音も鳴らしてみたい
• 過去の資産(作品)が演奏できないか?– PC-9801用の音源ドライバ(FMP, PMD)が有
名なようだが、ソースは公開されてなさそう• PC-98ユーザじゃなかったのでよく知りません…
– 「S98フォーマット」なるものがあるらしい
15
S98フォーマットとは?S98はOPNA/OPNを発祥とした音源ログフォーマットです。
[HEADER FORMAT](略)
[DUMP DATA FORMAT]
00 aa dd DEVICE1(normal) aa:レジスタアドレス dd:データ01 aa dd DEVICE1(extend) OPNA1つの場合、00と01を使う02 aa dd DEVICE2(normal)03 aa dd DEVICE2(extend)...FF 1SYNCFE vv nSYNCFD END/LOOP 演奏中のOPNAレジスタ値のダンプみたいなもの︖
このデータをレジスタに書き込んでやれば曲が再⽣できる︖
http://www.vesta.dti.ne.jp/~tsato/arc/s98spec3.zip
16
適当にparseしてOPNAを叩くswitch (buf[0]) {case 0x00:case 0x01:
if (fread(&buf[1], 1, 2, fp) != 2)errx(1, "data read failed");
if (buf[1] == 0x27)buf[2] &= 0xf3; /* disable timer on luna88k */
if (buf[0] == 0)opna_write(buf[1], buf[2]);
elseopna_write_ex(buf[1], buf[2]);
break;(略)default:
errx(1, "strange S98 command 0x%02x", buf[0]);break;
} ワンポイントレッスン︓FM音源チップのタイマ割り込みは使わない!
17
こっちも演奏プログラム作ってみた
https://github.com/ao-kenji/s98play/
展示ブースでのデモ曲は、Project RE:birthのサンプルを使用しています。
18
まとめ(1)
• Cバス拡張ボード上のFM音源チップで遊んでみた– MMLで単音の任意演奏– S98フォーマットデータで和音作品演奏
• 非⼒なマシンでも豊かな音が出せる– 20世紀テクノロジーに感激
• 処理が重くなるとテンポがずれる– ご愛敬ということでお許しください
• 夢の「マルチメディア」にまた近づいた!?
19
まとめ(2)
• 10年以上やってるけど、何が面⽩いのか?• メーカーが想定していないことを実現す
る– 別のOSを動作させる– 非純正ハードを動作させる– そのために試⾏錯誤しながらソフトを書く– これが、もどかしい時もあるけれど楽しい
• 最後は「愛」と「執着心」:-)
20
謝辞
• 荒尾さん・蛯原さん・江富さん– LUNA-88Kを送付いただきました
• 筒井さん– 何回もの電源修理 & いつもアドバイスありが
とうございます• Twitterでfavしていただける方
– 励みになります• 家族
– 怪しげな趣味に対する理解に感謝!
21
あとはNBUGブースで…
<昨年の展示>
Nagoya *BSD Users' GroupKenji Aoyama / ⻘⼭ 健治
Twitter: @ao_kenji
お待ちしてま〜す︕