Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Play a music on LUNA-88K2

633 views

Published on

Play a music using FM-synth chip on LUNA-88K2. This talk is held in Nagoya *BSD Users' Group session at Open Source Conference 2016 Nagoya.

Published in: Software
  • Be the first to comment

  • Be the first to like this

Play a music on LUNA-88K2

  1. 1. OSC 2016 Nagoya OpenBSD/luna88kのご紹介 FM音源の調べ OSC版 〜 Play a music on LUNA 〜 Nagoya *BSD Users' Group Kenji Aoyama / ⻘⼭ 健治 Twitter: @ao_kenji
  2. 2. 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. 3. 3 LUNA-88K2:こんなマシンです 前面の 液晶パネル 個々のCPU動作 状況が分かる LEDマルチプロセッサ 対応 比較的 コンパクトな筐体 (ご家庭でもOK) CPU動作状況が 分かる電源ボタン Cバススロット (88K2のみ)
  4. 4. 4 LUNAでCバス拡張ボードを使う話 • 昨年のOSC Nagoyaで発表しました • 今日は、Cバス拡張ボードのFM音源をい じる話です
  5. 5. 5 ここから本題:LUNAと音源 • 初代LUNA(68K無印)にはSSG(YM2149) が載っていたようです – ユーザランドからどうやって使っていたのか 気になります… • 88K2のCバススロットに装着したPC- 9801-86(86音源ボード)にもFM音源チッ プが載ってますよ? – PCM部分のドライバ作った後放置してました
  6. 6. 6 FM音源とは?(ざっくり) • FM(Frequency Modulation)を応用した音色合 成チップ • 少ないパラメータで色々な音が出せる – マシンパワー・メモリが少なくても良い • ’80〜’90年代のパソコンで流⾏ – その後、いわゆるガラケーでも使われていた • 今どきはソフトウェアでリアルタイム音色合成 してエミュレーションできるようです
  7. 7. 7 実チップを楽しむコミュニティも Project RE:birth G.I.M.I.C Project http://ym2203.com/rebirth/ http://gimic.net/
  8. 8. 8 YM2608(OPNA)とは? • 86音源ボードに搭載されているFM音源 チップ • FM音源部 – 4オペレータ – 同時発音数6音 ステレオ • SSG – 3音モノラル • ADPCM • リズム音源 画像出典: Wikipedia 本日のデモ機には 後継チップのYMF288が 載っています
  9. 9. 9 OPNAのいじり方 • アドレスレジスタと データレジスタによ る間接アクセス方式 • pcex(4)ドライバを使 えば、ユーザランド からアクセスできる • 音色を設定して、 Key-On/Offしてやる と一応音がでた! 出展︓「YM2608 OPNA アプリケーションマニュアル」ヤマハ株式会社
  10. 10. 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. 11. 11 いいもの発⾒: A tiny MML parser http://www.cubeatsystems.com/firmware/tinymml/
  12. 12. 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. 13. 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. 14. 14 さらに… • 単音では寂しいので和音も鳴らしてみた い • 過去の資産(作品)が演奏できないか? – PC-9801用の音源ドライバ(FMP, PMD)が有 名なようだが、ソースは公開されてなさそう • PC-98ユーザじゃなかったのでよく知りません… – 「S98フォーマット」なるものがあるらしい
  15. 15. 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. 16. 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. 17. 17 こっちも演奏プログラム作ってみた https://github.com/ao-kenji/s98play/ 展示ブースでのデモ曲は、 Project RE:birthのサンプルを使用しています。
  18. 18. 18 まとめ(1) • Cバス拡張ボード上のFM音源チップで遊 んでみた – MMLで単音の任意演奏 – S98フォーマットデータで和音作品演奏 • 非⼒なマシンでも豊かな音が出せる – 20世紀テクノロジーに感激 • 処理が重くなるとテンポがずれる – ご愛敬ということでお許しください • 夢の「マルチメディア」にまた近づいた!?
  19. 19. 19 まとめ(2) • 10年以上やってるけど、何が面⽩いのか? • メーカーが想定していないことを実現す る – 別のOSを動作させる – 非純正ハードを動作させる – そのために試⾏錯誤しながらソフトを書く – これが、もどかしい時もあるけれど楽しい • 最後は「愛」と「執着心」:-)
  20. 20. 20 謝辞 • 荒尾さん・蛯原さん・江富さん – LUNA-88Kを送付いただきました • 筒井さん – 何回もの電源修理 & いつもアドバイスありが とうございます • Twitterでfavしていただける方 – 励みになります • 家族 – 怪しげな趣味に対する理解に感謝!
  21. 21. 21 あとはNBUGブースで… <昨年の展示> Nagoya *BSD Users' Group Kenji Aoyama / ⻘⼭ 健治 Twitter: @ao_kenji お待ちしてま〜す︕

×