play a music on luna-88k2

21
OSC 2016 Nagoya OpenBSD/luna88kのご紹介 FM音源の調べ OSC版 Play a music on LUNA 〜 Nagoya *BSD Users' Group Kenji Aoyama / ⻘⼭ Twitter: @ao_kenji

Upload: kenji-aoyama

Post on 24-Jan-2017

301 views

Category:

Software


3 download

TRANSCRIPT

Page 1: Play a music on LUNA-88K2

OSC 2016 Nagoya

OpenBSD/luna88kのご紹介

FM音源の調べ OSC版〜 Play a music on LUNA 〜

Nagoya *BSD Users' GroupKenji Aoyama / ⻘⼭ 健治

Twitter: @ao_kenji

Page 2: Play a music on LUNA-88K2

2

LUNAとは?

• LUNAシリーズ– オムロン株式会社が1980年代後半〜90年代

初めに販売していたワークステーション• LUNA, LUNA-II

– CPU:モトローラ68030/68040(m68k)– NetBSD/luna68kが動きます

• LUNA-88K, LUNA-88K2 – CPU:モトローラ88100(m88k) MP対応– OpenBSD/luna88kが動きます

⾒かけたら保護を!

Page 3: Play a music on LUNA-88K2

3

LUNA-88K2:こんなマシンです

前面の液晶パネル

個々のCPU動作状況が分かる

LEDマルチプロセッサ対応

比較的コンパクトな筐体(ご家庭でもOK)

CPU動作状況が分かる電源ボタン

Cバススロット(88K2のみ)

Page 4: Play a music on LUNA-88K2

4

LUNAでCバス拡張ボードを使う話

• 昨年のOSC Nagoyaで発表しました• 今日は、Cバス拡張ボードのFM音源をい

じる話です

Page 5: Play a music on LUNA-88K2

5

ここから本題:LUNAと音源

• 初代LUNA(68K無印)にはSSG(YM2149)が載っていたようです– ユーザランドからどうやって使っていたのか

気になります…

• 88K2のCバススロットに装着したPC-9801-86(86音源ボード)にもFM音源チップが載ってますよ?– PCM部分のドライバ作った後放置してました

Page 6: Play a music on LUNA-88K2

6

FM音源とは?(ざっくり)

• FM(Frequency Modulation)を応用した音色合成チップ

• 少ないパラメータで色々な音が出せる– マシンパワー・メモリが少なくても良い

• ’80〜’90年代のパソコンで流⾏– その後、いわゆるガラケーでも使われていた

• 今どきはソフトウェアでリアルタイム音色合成してエミュレーションできるようです

Page 7: Play a music on LUNA-88K2

7

実チップを楽しむコミュニティも

Project RE:birth

G.I.M.I.C Project

http://ym2203.com/rebirth/

http://gimic.net/

Page 8: Play a music on LUNA-88K2

8

YM2608(OPNA)とは?

• 86音源ボードに搭載されているFM音源チップ

• FM音源部– 4オペレータ– 同時発音数6音 ステレオ

• SSG– 3音モノラル

• ADPCM• リズム音源

画像出典: Wikipedia

本日のデモ機には後継チップのYMF288が載っています

Page 9: Play a music on LUNA-88K2

9

OPNAのいじり方

• アドレスレジスタとデータレジスタによる間接アクセス方式

• pcex(4)ドライバを使えば、ユーザランドからアクセスできる

• 音色を設定して、Key-On/Offしてやると一応音がでた!

出展︓「YM2608 OPNA アプリケーションマニュアル」ヤマハ株式会社

Page 10: Play a music on LUNA-88K2

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

Page 11: Play a music on LUNA-88K2

11

いいもの発⾒: A tiny MML parser

http://www.cubeatsystems.com/firmware/tinymml/

Page 12: Play a music on LUNA-88K2

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/

Page 13: Play a music on LUNA-88K2

13

演奏プログラムを作ってみた

https://github.com/ao-kenji/opnaplay/

• ‘A tiny MML parser’ でparseし、OPNAのレジスタを叩いて演奏します

※FM音源の音色パラメータは、VALSOUND FM-Library / (C)Takeshi Abo.http://www.valsound.com/のものを許可を得て使用しています。

Page 14: Play a music on LUNA-88K2

14

さらに…

• 単音では寂しいので和音も鳴らしてみたい

• 過去の資産(作品)が演奏できないか?– PC-9801用の音源ドライバ(FMP, PMD)が有

名なようだが、ソースは公開されてなさそう• PC-98ユーザじゃなかったのでよく知りません…

– 「S98フォーマット」なるものがあるらしい

Page 15: Play a music on LUNA-88K2

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

Page 16: Play a music on LUNA-88K2

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音源チップのタイマ割り込みは使わない!

Page 17: Play a music on LUNA-88K2

17

こっちも演奏プログラム作ってみた

https://github.com/ao-kenji/s98play/

展示ブースでのデモ曲は、Project RE:birthのサンプルを使用しています。

Page 18: Play a music on LUNA-88K2

18

まとめ(1)

• Cバス拡張ボード上のFM音源チップで遊んでみた– MMLで単音の任意演奏– S98フォーマットデータで和音作品演奏

• 非⼒なマシンでも豊かな音が出せる– 20世紀テクノロジーに感激

• 処理が重くなるとテンポがずれる– ご愛敬ということでお許しください

• 夢の「マルチメディア」にまた近づいた!?

Page 19: Play a music on LUNA-88K2

19

まとめ(2)

• 10年以上やってるけど、何が面⽩いのか?• メーカーが想定していないことを実現す

る– 別のOSを動作させる– 非純正ハードを動作させる– そのために試⾏錯誤しながらソフトを書く– これが、もどかしい時もあるけれど楽しい

• 最後は「愛」と「執着心」:-)

Page 20: Play a music on LUNA-88K2

20

謝辞

• 荒尾さん・蛯原さん・江富さん– LUNA-88Kを送付いただきました

• 筒井さん– 何回もの電源修理 & いつもアドバイスありが

とうございます• Twitterでfavしていただける方

– 励みになります• 家族

– 怪しげな趣味に対する理解に感謝!

Page 21: Play a music on LUNA-88K2

21

あとはNBUGブースで…

<昨年の展示>

Nagoya *BSD Users' GroupKenji Aoyama / ⻘⼭ 健治

Twitter: @ao_kenji

お待ちしてま〜す︕