ColdFire 版暫定版FM音源プログラム 「TGMCF」 readme 2008/8/24 pcm1723 ●はじめに このプログラムは、CQ 出版発行の「インターフェース」誌 2008 年 9 月号 付属の Freescale ColdFire (MCF52233) マイコン基板「CQ-FRK-MCF52233」用 の暫定版FM音源プログラムです。 インターフェース誌の Web サイトからダウンロードできる gcc & gdb パッケージでコンパイルしてあり、サンプル・プログラムの「cf_led」の Makefile や ld スクリプト、gdb スクリプトを一部変更した上で 利用しています。 非商用利用のみ許可します。 elf のみのパッケージと、ソースリスト一式のパッケージがあります。 多くの部分は ADuC7026版や、V850版と同様なので、Web サイト http://www.geocities.jp/pcm1723/ のADuC7026版や、V850版の説明を参照してください。 含まれている音色データはフリーの「std.sb」から変換したものなので、上記 サイトの記述のように、「MA2 オーサリングツール」付属の音色データと差し 替えることをお勧めします。 ソースファイルの再コンパイルによらず、HEX ファイルの音色データ部分のみを 差し替える方法も用意してあります。 上記サイトの「音色データの差し替え/再コンパイルなしの差し替え」の項 http://www.geocities.jp/pcm1723/compile.htm#fmdata_4 を参照してください。 ただし、パッケージ中には「elf」ファイルしか含まれていませんので、ソース パッケージの場合には make TGMCF.mot を実行して、あらかじめ「mot」ファイルを作成しておいてください。 elf パッケージの場合には、「README_CQ.TXT」を読んで、「objcopy」コマンド を使って「mot」ファイルを作成しておいてください。 出来上がりのファイル名は TGMCF/prj/TGMCFma.mot TGMCF/prj/TGMCFma2.mot となります。 同時発音数と、サンプリング周波数との組み合わせは次の通りです。   同時発音数 サンプリング周波数 sys_mode_index ---------- ------------------ --------------     3 48 kHz 0 6 30 kHz 1 8 24 kHz 2 13 16 kHz 3 16 12 kHz 4 ただし、この暫定版では実行時に同時発音数の切り替えはできません。 デフォルトでは同時発音数 13、サンプリング周波数 16 kHz (sys_mode_index=3) になっています。 これを変えたい場合には、「main.c」の中で「sys_mode_index=3」と設定して いる部分を変更し、コンパイルし直します。 すべての MIDI チャンネルは「モノモード」、つまりチャンネルあたり1音しか 発音できません。 13 音を同時に発音させるためには、13 個の MIDI チャンネルにそれぞれ1音ずつ 分散させてデータを送る必要があります。 通常、MIDI チャンネル 10 はドラム音源用のチャンネルですが、このプログラム ではドラム音に対応していないので、MIDI シーケンサー側でドラム音のデータを 流さないような設定にする必要があります。 通常の MIDI 入力 (31.25 kbps) と、シリアル MIDI 入力 (38.4 kbps) に対応して います。 プログラムを実行すると LED2 (ACTLED) が薄暗く点灯します。 CPU 負荷が小さい時は明るく、負荷が大きい時は暗くなります。 デューティーを測定できるテスターで LED2 の左側の端子を測定すると、CPU 負荷率の大体の値が得られます。 デモ曲演奏時で 80 % 台の数値です。 ●ハードウェア 回路図「TGMCFm.pdf」を、elf パッケージでは、この「readme.txt」ファイルと 同じフォルダ、ソース・パッケージでは「TGMCF\sch」フォルダに置いてあります。 オーディオ出力は内蔵 PWM (PWM1/PWM0) を DAC として利用しています。 PWM の繰り返し周波数は約 58.5 kHz です。   64 ピン・コネクタのピン 30 (*IRQ1/SYNCA/PWM1/PNQ[1]) にローパスフィルタをつないでオーディオ出力を取り出します。 Web サイトには LPF の例 (3 次 Sallen-Key アクティブフィルタおよび 3 次 LC パッシブフィルタ)を載せていますが、簡単な一次 RC フィルタでも、PWM 周波数は 可聴周波数域外ですから、耳で聞く限りは問題ありません。 入力は通常の MIDI 入力 (31.25 kbps) と、シリアル MIDI (38.4 kbps) に対応して います。 具体的なインターフェース回路は、Web サイトを参照してください。 インターフェース回路の「RxD」出力を   64 ピン・コネクタのピン 19 (URXD0/FEC_RXD[0]/PUA[1]) につなぎます。 マイコンは 5V トレラント入力ではありませんから、5V ロジックの出力を直接 つながないように注意してください。 サウンドボート用のいわゆる MIDI ケーブルは +5V 用ですが、GRAVIS ULTRASOUND の MIDI 接続ボックスで試したところ、+3.3V 電源でも動作しました。 回路図の   64 ピン・コネクタのピン 12 (*UCTS1/SYNCA/URXD2/PUB[3]) に 10 kΩを介して接続されている「SENS」は、MIDI/シリアル MIDI のボーレート 切り替え信号で、オープンでシリアル MIDI (38.4 kbps)、GND への接続で通常の MIDI (31.25 kbps)を選択します。 プログラムを実行すると、デモ曲を 3 曲自動演奏しますから、MIDI 入力はなくても 音は出ます。 MIDI / シリアル MIDI 入力から GM/GS/XG システムオンや、オールノートオフ、 システム・リアルタイムメッセージのストップなどを受信すると、デモ演奏を 中止します。 デモ演奏が不要なら、「tonegen.h」ファイルの #define SEQUENCER の行をコメント・アウトしてコンパイルし直してください。 ●パッケージ elf パッケージと、ソース・パッケージを用意してあります。 いずれも、lzh 形式で圧縮されていますので、+Lhaca などのユーティリティーで 解凍してください。 ●実行方法 実行は gdb スタブを利用してフラッシュに書き込む方法のみをサポートしています。 プログラムサイズが大きいので、RAM 上での実行はできません。 gdb スタブなしで、スタンドアロンで実行させる方法についてはテストしていません。 まず、インターフェース誌のダウンロードページ http://www.cqpub.co.jp/interface/download/contents.htm から  「ColdFire用GCC&GDBツール一式」  「サンプルプログラム LED点滅制御プログラム」 をダウンロードし、解凍して現れる README.TXT ファイルや、インターフェース誌 10 月号を参照して、gcc、gdb およびサンプルプログラムをインストールします。 その後、gdb を起動して、サンプルプログラムの「cf_led.elf」が正しく実行 されることを確認しておきます。 サンプル・プログラムがうまく動かない状況では、FM音源プログラムもうまく 動かない可能性が高くなります。 つづいて、elf パッケージでは展開したフォルダ、ソース・パッケージでは 「TGMCF/prj」フォルダにカレント・ディレクトリを移します。 いずれもオブジェクトの elf ファイルは「TGMCF.elf」という名前になっています。 サイズを小さくするためにデバッグ情報を削除してあるので、ソースコード・デバッグ はできません。 必要なら、再コンパイルをしてください。 サンプル・プログラムの実行の場合と同様に「.gdbinit」ファイル中の IP アドレス 設定部を、実際に使っているアドレスに変更しておきます。 target remote udp:192.168.xx.xx:6000 あとはサンプル・プログラムの実行と同様に m68k-elf-gdb で gdb を起動し、「c」コマンドを投入すれば実行が始まります。 HEX ファイルの状態で音色データを書き換えた場合には、「c」コマンド投入の 前に load TGMCFma2.mot などのコマンドを実行して、音色データ書き換え済みのプログラムをロード してください。 あるいは「.gdbinit」ファイルの中で elf ファイルを指定している部分を file TGMCFma2.mot のように書き換えてください。 ●elf パッケージの内容 readme.txt : このファイル TGMCF.elf : elf フォーマットのオブジェクト TGMCFm.pdf : 回路図の pdf ファイル .gdbinit : gdb 用の設定ファイル ●ソース・パッケージの内容 パッケージを解凍すると、「TGMCF」フォルダの下にファイルが展開されます。 以下では、TGMCF フォルダを基準に話を進めます・ \TGMCF | +-- readme.txt : このファイル | +-- licence.txt : ライセンス条件のファイル | +-- \gen_tab : テーブル定義ファイル作成用ツール | | | +-- Makefile : テーブル一括生成のためのメイクファイル | | | +-- *.c : C ソースファイル | | | +-- *.awk : gawk ソースファイル | +-- \src : ソースファイルフォルダ | | | +-- *.c : C ソースファイル | | | +-- *.h : ヘッダ・ファイル | | | +-- *.S : asm ファイル | +-- \prj : gcc & gdb 用 Makefile ファイル/設定ファイル | | | +-- TGMCF.elf : elf 形式オブジェクトファイル | | | +-- Makefile.* : gcc 用 Makefile | | | +-- .gdbinit : gdb 用設定ファイル | | | +-- *.ld : ld スクリプト | | | +-- readme.txt : このファイル | | | +-- README_CQ.TXT : gcc & gdb パッケージ、サンプルプログラムの | オリジナルの README ファイル | +-- \sch : 回路図のフォルダ | | | +-- TGMCFm.ce3 : bsch3v で書いた回路図 | | | +-- TGMCFm.pdf : 回路図の pdf ファイル | +-- \smf : デモ曲の SMF | | | +-- arabesq1.mid : C.A.Debussy: アラベスク第一番 (部分) | | | +-- Chopin66.mid : F.F.Chopin: 幻想即興曲 (部分) | | | +-- invent13.mid : J.S.Bach: インベンション第 13 番 | +-- \obj : コンパイル結果のオブジェクトファイルのフォルダ ●コンパイル方法 ソースファイルを解凍する場所は、どこでも構いません。 ソースツリーの「TGMCF/prj」にカレント・ディレクトリを移動して make でコンパイルできます。 このとき、未使用の変数に関する警告が出ますが、問題はありません。 HEX ファイルの状態で音色データを差し替える場合には、「TGMCF/gen_tab」 フォルダで make する前に make TGMCF.mot を実行して mot ファイルを作成しておいて下さい。