SlideShare a Scribd company logo
1 of 21
Download to read offline
OSC 2016 Nagoya
OpenBSD/luna88kのご紹介
FM音源の調べ OSC版
〜 Play a music on LUNA 〜
Nagoya *BSD Users' Group
Kenji 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 1SYNC
FE vv nSYNC
FD 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]);
else
opna_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' Group
Kenji Aoyama / ⻘⼭ 健治
Twitter: @ao_kenji
お待ちしてま〜す︕

More Related Content

What's hot

OSunC Chiba LT Ubuntu 14.04 to 16.04.1 upgrade with ConfigDrive cloud image
OSunC Chiba LT Ubuntu 14.04 to 16.04.1 upgrade with ConfigDrive cloud imageOSunC Chiba LT Ubuntu 14.04 to 16.04.1 upgrade with ConfigDrive cloud image
OSunC Chiba LT Ubuntu 14.04 to 16.04.1 upgrade with ConfigDrive cloud imageNaoto Gohko
 
"PC-9801-86 sound board on LUNA", at NBUG Meeting 2014-12
"PC-9801-86 sound board on LUNA", at NBUG Meeting 2014-12"PC-9801-86 sound board on LUNA", at NBUG Meeting 2014-12
"PC-9801-86 sound board on LUNA", at NBUG Meeting 2014-12Kenji Aoyama
 
2016 0626 ubuntu 1604 LTS party LT
2016 0626 ubuntu 1604 LTS party LT2016 0626 ubuntu 1604 LTS party LT
2016 0626 ubuntu 1604 LTS party LTNaoto Gohko
 
衛星をインターバル撮影して合成
衛星をインターバル撮影して合成衛星をインターバル撮影して合成
衛星をインターバル撮影して合成Kenichiro MATOHARA
 
ちょっと古いマシンにLinuxを
ちょっと古いマシンにLinuxをちょっと古いマシンにLinuxを
ちょっと古いマシンにLinuxをKenichiro MATOHARA
 
FM音源シールド for GR-SAKURA
FM音源シールド for GR-SAKURAFM音源シールド for GR-SAKURA
FM音源シールド for GR-SAKURABizan Nishimura
 
YM2151でFM音源演奏
YM2151でFM音源演奏YM2151でFM音源演奏
YM2151でFM音源演奏Tomona Nanase
 

What's hot (7)

OSunC Chiba LT Ubuntu 14.04 to 16.04.1 upgrade with ConfigDrive cloud image
OSunC Chiba LT Ubuntu 14.04 to 16.04.1 upgrade with ConfigDrive cloud imageOSunC Chiba LT Ubuntu 14.04 to 16.04.1 upgrade with ConfigDrive cloud image
OSunC Chiba LT Ubuntu 14.04 to 16.04.1 upgrade with ConfigDrive cloud image
 
"PC-9801-86 sound board on LUNA", at NBUG Meeting 2014-12
"PC-9801-86 sound board on LUNA", at NBUG Meeting 2014-12"PC-9801-86 sound board on LUNA", at NBUG Meeting 2014-12
"PC-9801-86 sound board on LUNA", at NBUG Meeting 2014-12
 
2016 0626 ubuntu 1604 LTS party LT
2016 0626 ubuntu 1604 LTS party LT2016 0626 ubuntu 1604 LTS party LT
2016 0626 ubuntu 1604 LTS party LT
 
衛星をインターバル撮影して合成
衛星をインターバル撮影して合成衛星をインターバル撮影して合成
衛星をインターバル撮影して合成
 
ちょっと古いマシンにLinuxを
ちょっと古いマシンにLinuxをちょっと古いマシンにLinuxを
ちょっと古いマシンにLinuxを
 
FM音源シールド for GR-SAKURA
FM音源シールド for GR-SAKURAFM音源シールド for GR-SAKURA
FM音源シールド for GR-SAKURA
 
YM2151でFM音源演奏
YM2151でFM音源演奏YM2151でFM音源演奏
YM2151でFM音源演奏
 

Viewers also liked

Using FM-synth chip on LUNA-88K2, at NBUG meeting 2015-10
Using FM-synth chip on LUNA-88K2, at NBUG meeting 2015-10Using FM-synth chip on LUNA-88K2, at NBUG meeting 2015-10
Using FM-synth chip on LUNA-88K2, at NBUG meeting 2015-10Kenji Aoyama
 
OpenBSD/luna88k news at NBUG Meeting 2013-12
OpenBSD/luna88k news at NBUG Meeting 2013-12OpenBSD/luna88k news at NBUG Meeting 2013-12
OpenBSD/luna88k news at NBUG Meeting 2013-12Kenji Aoyama
 
OpenBSD/luna88k news at NBUG Meeting 2013-09
OpenBSD/luna88k news at NBUG Meeting 2013-09OpenBSD/luna88k news at NBUG Meeting 2013-09
OpenBSD/luna88k news at NBUG Meeting 2013-09Kenji Aoyama
 
Does LUNA-88K2 dream of PC Card? / Using PC Card on OpenBSD/luna88k
Does LUNA-88K2 dream of PC Card? / Using PC Card on OpenBSD/luna88kDoes LUNA-88K2 dream of PC Card? / Using PC Card on OpenBSD/luna88k
Does LUNA-88K2 dream of PC Card? / Using PC Card on OpenBSD/luna88kKenji Aoyama
 
OpenBSD/luna88k news at NBUG meeting 2014-04
OpenBSD/luna88k news at NBUG meeting 2014-04OpenBSD/luna88k news at NBUG meeting 2014-04
OpenBSD/luna88k news at NBUG meeting 2014-04Kenji Aoyama
 
オープンソース開発と、 あるフレームバッファコンソールの話 ~名古屋応用編~
オープンソース開発と、あるフレームバッファコンソールの話~名古屋応用編~オープンソース開発と、あるフレームバッファコンソールの話~名古屋応用編~
オープンソース開発と、 あるフレームバッファコンソールの話 ~名古屋応用編~nullnilaki
 
"yaft on LUNA" at NBUG Meeting 2014-11
"yaft on LUNA" at NBUG Meeting 2014-11"yaft on LUNA" at NBUG Meeting 2014-11
"yaft on LUNA" at NBUG Meeting 2014-11Kenji Aoyama
 
OpenBSD/luna88k on LUNA-88K2, at OSC 2013 Nagoya
OpenBSD/luna88k on LUNA-88K2, at OSC 2013 NagoyaOpenBSD/luna88k on LUNA-88K2, at OSC 2013 Nagoya
OpenBSD/luna88k on LUNA-88K2, at OSC 2013 NagoyaKenji Aoyama
 
Using "C-bus" extension boards on LUNA-88K2 (at OSC 2015 Nagoya)
Using "C-bus" extension boards on LUNA-88K2 (at OSC 2015 Nagoya)Using "C-bus" extension boards on LUNA-88K2 (at OSC 2015 Nagoya)
Using "C-bus" extension boards on LUNA-88K2 (at OSC 2015 Nagoya)Kenji Aoyama
 
A story of porting OpenBSD/luna88k
A story of porting OpenBSD/luna88kA story of porting OpenBSD/luna88k
A story of porting OpenBSD/luna88kKenji Aoyama
 
Introduction of OpenBSD/luna88k at OSC 2014 Nagoya
Introduction of OpenBSD/luna88k at OSC 2014 NagoyaIntroduction of OpenBSD/luna88k at OSC 2014 Nagoya
Introduction of OpenBSD/luna88k at OSC 2014 NagoyaKenji Aoyama
 

Viewers also liked (12)

Using FM-synth chip on LUNA-88K2, at NBUG meeting 2015-10
Using FM-synth chip on LUNA-88K2, at NBUG meeting 2015-10Using FM-synth chip on LUNA-88K2, at NBUG meeting 2015-10
Using FM-synth chip on LUNA-88K2, at NBUG meeting 2015-10
 
OpenBSD/luna88k news at NBUG Meeting 2013-12
OpenBSD/luna88k news at NBUG Meeting 2013-12OpenBSD/luna88k news at NBUG Meeting 2013-12
OpenBSD/luna88k news at NBUG Meeting 2013-12
 
OpenBSD/luna88k news at NBUG Meeting 2013-09
OpenBSD/luna88k news at NBUG Meeting 2013-09OpenBSD/luna88k news at NBUG Meeting 2013-09
OpenBSD/luna88k news at NBUG Meeting 2013-09
 
Nbug201503
Nbug201503Nbug201503
Nbug201503
 
Does LUNA-88K2 dream of PC Card? / Using PC Card on OpenBSD/luna88k
Does LUNA-88K2 dream of PC Card? / Using PC Card on OpenBSD/luna88kDoes LUNA-88K2 dream of PC Card? / Using PC Card on OpenBSD/luna88k
Does LUNA-88K2 dream of PC Card? / Using PC Card on OpenBSD/luna88k
 
OpenBSD/luna88k news at NBUG meeting 2014-04
OpenBSD/luna88k news at NBUG meeting 2014-04OpenBSD/luna88k news at NBUG meeting 2014-04
OpenBSD/luna88k news at NBUG meeting 2014-04
 
オープンソース開発と、 あるフレームバッファコンソールの話 ~名古屋応用編~
オープンソース開発と、あるフレームバッファコンソールの話~名古屋応用編~オープンソース開発と、あるフレームバッファコンソールの話~名古屋応用編~
オープンソース開発と、 あるフレームバッファコンソールの話 ~名古屋応用編~
 
"yaft on LUNA" at NBUG Meeting 2014-11
"yaft on LUNA" at NBUG Meeting 2014-11"yaft on LUNA" at NBUG Meeting 2014-11
"yaft on LUNA" at NBUG Meeting 2014-11
 
OpenBSD/luna88k on LUNA-88K2, at OSC 2013 Nagoya
OpenBSD/luna88k on LUNA-88K2, at OSC 2013 NagoyaOpenBSD/luna88k on LUNA-88K2, at OSC 2013 Nagoya
OpenBSD/luna88k on LUNA-88K2, at OSC 2013 Nagoya
 
Using "C-bus" extension boards on LUNA-88K2 (at OSC 2015 Nagoya)
Using "C-bus" extension boards on LUNA-88K2 (at OSC 2015 Nagoya)Using "C-bus" extension boards on LUNA-88K2 (at OSC 2015 Nagoya)
Using "C-bus" extension boards on LUNA-88K2 (at OSC 2015 Nagoya)
 
A story of porting OpenBSD/luna88k
A story of porting OpenBSD/luna88kA story of porting OpenBSD/luna88k
A story of porting OpenBSD/luna88k
 
Introduction of OpenBSD/luna88k at OSC 2014 Nagoya
Introduction of OpenBSD/luna88k at OSC 2014 NagoyaIntroduction of OpenBSD/luna88k at OSC 2014 Nagoya
Introduction of OpenBSD/luna88k at OSC 2014 Nagoya
 

Play a music on LUNA-88K2