LoginSignup

技術力をスコア化して市場価値をチェックしてみませんか?PR

ブログやSNSのアウトプットをAIが分析。技術力の順位を算出!自分の市場価値を測ってみませんか?

45
37

More than 5 years have passed since last update.

I2Cで制御できるSCC+互換チップ

Last updated at Posted at 2016-04-13

概要

以前、I2Cで制御できる80円のPSG互換チップで遊ぼうという内容で投稿したわけですが、その続編です。予告通りPSG以外の音源にも対応。KonamiのSCC+音源互換です。というか、前回の段階でほとんどできてたんですが、一箇所バグがあって音が腐ってたんでOFFにしてありました。

SoundCortex

特徴

詳細は前回の投稿を見ていただくとして、LPC810を使って色々な音源チップをエミュレートしていこう、というモノです。パソコン上でエミュレートするのと比べると以下の様なメリットがあります。

  • チップから音が出るのでカッコいい
  • 自分の電子工作に組み込んで使える
  • I2Cで制御できる(マイコンに優しい)
  • 0.1ms以下の超低レイテンシ

IMG_20160413_015559.jpg

SCC+互換モード

I2C slave address 0x51でアクセスできます。書き込みはPSG互換モード同様に2 bytes単位で行って下さい。最初の1 byteがSCC+のレジスタアドレス(MSXのメモリにマップされている時の下位8bit)、続く1 byteが書き込む値です。

拡張機能としてレジスタ0xFFに0を書き込むと3.579545MHz(デフォルト)、0以外を書き込むと4MHzのオシレータを繋げたSCCとして動作します。実機はMSXで動くものしか存在しないので4MHzは意味がないのですが、PSGの4MHzモードとセットで使えるように4MHzモードも用意しました。

また0xFFを読みだすとメジャーバージョン1、0xFEを読みだすとマイナーバージョン0が読み出されるはずです。

念のためにSCC+のレジスタマップを載せておきます。ちなみにSCC+はいわゆる(SD)スナッチャーROMに載ってる5音全部の音色が設定できる、GRADIUS 2とかよりちょっとだけ豪華なやつです。波形モーフィングとか?(実装してないです)

レジスタ内容
0x00-0x1FCh.A 波形テーブル
0x20-0x3FCh.B 波形テーブル
0x40-0x5FCh.C 波形テーブル
0x60-0x7FCh.D 波形テーブル
0x80-0x9FCh.E 波形テーブル
0xA0Ch.A TP[7:0]
0xA1Ch.A TP[11:8]
0xA2Ch.B TP[7:0]
0xA3Ch.B TP[11:8]
0xA4Ch.C TP[7:0]
0xA5Ch.C TP[11:8]
0xA6Ch.D TP[7:0]
0xA7Ch.D TP[11:8]
0xA8Ch.E TP[7:0]
0xA9Ch.E TP[11:8]
0xAACh.A 音量[3:0]
0xABCh.B 音量[3:0]
0xACCh.C 音量[3:0]
0xADCh.D 音量[3:0]
0xAECh.E 音量[3:0]
0xAFミキサー

0xE0-0xFFあたりにあるモード設定レジスタは詳しく知らないので未対応。波形テーブルはint8_t[32]です。TPはPSGと同じ。音量はPSGとは違って線形になってます。ミキサーはbit 0側がCh.Aに対応。PSGが不論理なのに対してSCCは正論理。

デモ

YouTubeにGRADIUS 2のオープニングを鳴らしてみた的な動画をあげてあります。冒頭のぶ〜〜〜〜〜〜〜ん……とかめちゃくちゃいい感じに鳴ってます。

最後に

使ってみてね

ファームウェアは全てGitHubにて公開しています。PSGとSCC+の両方を有効にしたprebuiltバイナリも置いてありますので、そのまま焼けば美味しく頂けます。一応prebuilt版は24MHz動作にしてみました。9-bit/46.875kHzでの再生です。オーバークロックの48MHzでも安定して動作してるので、最新のソースでは48MHz動作の10-bit/46.875kHz再生にしてあります。まぁ、OPLLを追加するための準備でもあります。

今後の予定

MIDIメッセージを受けてADSR付きPSG/SCC+音源として制御するミドルとか作りたいなー、とは思ってます。あと、今の手応えだとPSG/SCC+/OPLL全部が1 chipで回せそうな予感がしてます。OPNやOPMも個別のチップで作れそうですね。あとは気力だけ。

いいわけ

モード設定レジスタが未実装って以外に、なんか少しバグってる気がします。音が消えて欲しいところで残ることがあるので……SCCも何度か作ってるけど、モードレジスタ実装しなくてもこういう問題は出なかったはず。
あんまり時間かけられてないので、つまらないバグかも。何か気づいたらGitHubでpull requestして頂けるとハッピーです。

(2016/8/14追記:0xAFのミキサーがバグってるようだ、という報告を頂き修正しました。minor versionを1に上げたバイナリをアップしてあります)

45
37
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
Linked from these articles

Comments

Yakatano
@Yakatano(Katano Yasuo)

質問させてください。

この方法で和音を出したいのですが、CH_Aは出力されるのですが、B,C,D以降音が出ません。
http://wp.hrmux.com/?p=2595
http://curious4dev.mydns.jp/post-2972/
などを参考に
Mixerの設定を0x00001 -> 0x11111に変更し、それぞれSetVolume、SetWabeTableを設定しているのですが、B以降の音がでません。どのように設定したら良いのでしょうか

アドバイスお願いします

0
toyoshim
@toyoshim

コメントの範囲で気になる点は、ミキサーに入れてる値ですね。記載ミスかもしれませんが、16進数では0x1fになります。C++14以降なら2進数も0b11111で通ると思いますが、Arduinoで通るか試したことないです(今、携帯からなので試せない)

0
Yakatano
@Yakatano(Katano Yasuo)

ありがとうございました.
解決しました.

おっしゃる通り,0x111ではなく,0x0fで設定することで解決しました.
0b1111は入れてみたのですが,うまく動きませんでした.

あと,このような波形テーブルのデータってどこかに落ちてないですかね.
http://wp.hrmux.com/?p=2633
ここにあったMAPPYのゲーム音は
https://github.com/keim/SiONMML/blob/master/mmltalks/20110422_LinearDrive_%5BAC%5D_MAPPY_-_MISS_-_(C)namco_1983.sionmml
このあたりから漁ってきたのですが,他がなかなかみつかりません.

どこかにサンプルなど心当たりありませんか?
Wave Shape Editor
http://keim.hatenablog.com/entry/20120806/p1
このツールで自作しようとも画策しましたが,今年の3月にカヤックさんの
wonderfl build flash online
がサービス終了してしまったようで,使えません.

なにかよいアドバイスがあれば教えてください.

0
toyoshim
@toyoshim

TSSCP用のデータとかネットに残ってれば参考になるかもしれません。

あと、僕のデータからでよければ、以下のファイルの#wav文に定義されてるのがSCC用の波形データです。たぶんGRADIUS 2あたりで使われてた音色を拝借してます。
http://yuri.twintail.org/experiments/tss/data/tss.c/data/GRADIUS_GENERATION_STAGE1.tss

他はVSTiのChip32あたりを使って自作するとかでしょうか。あちらの音色データがどうなってるのか知らないので、そこから変換でまた一手間かかるかもしれません。でもまぁ、そうですね。ウェブベースの音色エディタあると便利かもしれませんね。TODOリストに入れときます。

0

Let's comment your feelings that are more than good

Being held Article posting campaign

paiza×Qiita記事投稿キャンペーン「プログラミング問題をやってみて書いたコードを投稿しよう!」

~
View details
45
37

Login to continue?

Login or Sign up with social account

Login or Sign up with your email address