|
■テストプログラム(その2) 今回は、Baboo! JAPAN電子掲示板の質問への回答例として掲載されていたMIDI IN表示プログラムを若干改変。主な改変は次のとおり。 (1)16進や10進表記されていたI/Oポートへの出力値を2進表記にして、レジスタのビット毎の対応を見やすくした。 (2)プログラムの冒頭で、変数について整数型の使用宣言及び初期値設定。少しはスピードアップしたかも? (3)248と254の非表示。ちなみに、248はタイミングクロック、254はアクティブセンシングを示すシステムメッセージであり、絶えず出力されて表示が煩わしい。「MSX-Datapack (Volime3)」のサンプルプログラム「THRU.MAC」でも、OUT端子への出力は行うものの、画面表示はしないようにしている。 100 '=============== 110 ' TEST MID2.BAS 120 '=============== 130 'SAVE "TESTMID2.BAS" 140 CLS:DEFINT A-Z:D=0:F=0 150 '--INIT 8154 TIMER#0 160 OUT &HEF,&B00010110 170 OUT &HEC,&B00001000 180 '--INIT 8151 190 OUT &HE9,0 200 OUT &HE9,0 210 OUT &HE9,0 220 OUT &HE9,&B01000000 230 OUT &HE9,&B01001110 240 OUT &HE9,&B00000101 250 '--RESET FLAG 260 D=INP(&HE8) 270 '--MAIN LOOP 280 IF (INP(&HE9) AND 2)=0 THEN 280 290 D=INP(&HE8):F=(D=248)+(D=254) 300 IF F=0 THEN PRINT D 310 GOTO 280 ■実験 今回のプログラムの要点は次のとおり。 (1)前回は、インターフェースのテスト用にデータをループバックさせるプログラムを流用したため不要部分があったが、今回は、最低限必要な初期設定のみ行っている。 (2)260行で一度データを読み捨てて、ステータスレジスタの割込みフラグをリセットしている。 (3)280行で受信バッファにデータがあるかチェックしている。 前回同様に、キーボードのピッチベンドホイールを動かして、データが拾えるか試してみる(右写真)。 ホイールをゆっくり動かしたこともあるが、明らかにデータの取得が前回より改善されている。これは受信バッファチェックが功を奏したのかもしれない。 ■まとめ BASICを用いたMIDI IN へのアクセスは、いったん了とする。 それにしても「MIDI規格やシリアル通信に関しても知識が足りず、MSXにも詳しくなく、マシン語等は全く解らない」という質問者は、「MIDI ch1のノートナンバーを表示するだけの簡単な物を作りたい。」とのこと。 何を作ろうとされているのだろう? ノートナンバーといえば音程を示すから、ch1の音程の変化を数値的に捉えたいということかな? MIDIのデータフォーマットによれば、「10010000」のステータスバイトが掴まえられれば、直後のデータがch1のノートナンバーになるはずであるが、連続する2バイトのデータを掴まえるのはBASICでは難しかろう。 そのうち機械語による処理を考えてみよう。(という締め括り方で、ハナシが続いたためしがないのだが。) |
全体表示
-
詳細
コメント(0)
|
■テストプログラム 前回紹介した資料のうち、「MSX用MIDIインターフェース3」のテストプログラムを流用。外付けのMIDIインターフェース用プログラムであるが、GTと同じI/Oポートアドレスを用いているので流用が利く。 今回は、8251と8254の設定はそのままに、MIDIキーボードからデータを送信し、GTで受信できるかテストしてみた(写真上)。 プログラムは次のとおり。元のプログラムをコンパクトにしたほか、I/Oポートに出力する値の16進表記をビット毎にどんな値を設定しているのか確認しやすいよう、2進表記に改めた。 100 '=============== 110 ' TEST MIDI.BAS 120 '=============== 130 'SAVE "TESTMIDI.BAS" 140 DEFINT A-Z:F=0:D=0 150 '--INIT 8254 COUNTER#0 160 OUT &HEF,&B00010110 170 OUT &HEC,&B00001000 180 '--INIT 8254 COUNTER#2 190 OUT &HEF,&B10110100 200 OUT &HEE,&B11111111 210 OUT &HEE,&B11111111 220 '--INIT 8251 230 OUT &HE9,&B10110000 240 OUT &HE9,&B00000000 250 OUT &HE9,&B00000000 260 OUT &HE9,&B01000000 270 OUT &HE9,&B01001110 280 OUT &HE9,&B00000101 290 '--MAIN LOOP 300 CLS 310 D=INP(&HE8):F=(D=248)+(D=254) 320 IF F=0 THEN PRINT D 330 GOTO 310 ■実験結果 I/Oポートからのデータをそのまま表示すると、248と254がやたらと出てきて煩わしいので、この二つは表示しないようにした。 キーボードのピッチベンドホイールをなるべく一定に動かして、きちんとデータが拾えるか試してみた(右写真下)。 0〜127のデータを送っているようであるが、飛び飛びになっているうえ、変な数字が挟まっている。 BASICでもMIDI INのデータを拾えなくはないが、データのモニタとしては実用的でない、というのが一応の結論となろう。 ■まとめ あまり強力でないとはいえ、MIDI端子を装備している点はGTのユニークなところである。 出力データをプログラムでコントロールすることができ、たとえば、一音ずつランダムな音像定位で発声させる、といったことができる。スタジオ中デタラメに駆け回って演奏している感じである。 いつになく取り急ぎまとめたので、間違い箇所もあると思うが、それ以上に、ほぼ一日で2回分、よくまとめたなと自分を褒めてやりたい。最後は常に自画自賛である。 |
|
Baboo! JAPAN電子掲示板を眺めていたら、「職人養成道場」の質問「BASICでGTのMIDI INを使うには?」に対し、なんとこのブログが「具体的に参考になるでしょう」と紹介されていた。 う〜ん、恐縮ながらPSGのI/Oポートはちょこっと叩いたことはあるものの、MIDIのI/Oポートは触ったことがない。 申し訳ないので取り急ぎ調べてみた。 ■ハードウエアとI/Oポート MSX-MIDI では、MIDIデータ通信用IC として8251、タイマーIC として8253又は8254が指定されている。 GTではそれぞれ、82C51A及び82C54が用いられている。 これらのICはI/Oポートからアクセスする。諸元については右表にまとめた。「I/O」はI/Oポートアドレス、「R/W」はリード又はライトを示す。 なお、インターフェースが内蔵か外付けかでI/Oポートは異なるが、今回はGTに機種限定のため、内蔵インターフェース決め打ちで記述、タイマーICは8254と表記した。 ■アクセス手順 まず、MIDI インターフェースとして使えるように、8254のタイミング設定及び8251の通信制御設定を行う。 次にデータのリード・ライトであるが、比較的処理が単純なOUTに比べ、INはタイミングが厳しく、BASICではまともな処理は困難と思われる。 ということで、資料調べはいったんここまで。 あとは実験で試してみることにする。 ■資料 ○「MSX-Datapack (Volime3)」(1991年12月1日第1版第1刷 (株)アスキー)本文p631〜644及び添付サンプルプログラムTHRU.MAC ○「MSX magazine」(1992年1月号及び4月号 (株)アスキー)掲載「テクニカル・アナリシス」 ○「Panasonic Technical Guide FS-A1GT」(平成4年2月松下電器産業株式会社) ○「鈴見咲@vectorさんのMSXセクション」で紹介されている藤本昌利さん作「MSX用MIDIインターフェース3」添付文書 http://hp.vector.co.jp/authors/VA011751/MSXMIDII.HTM |
|
■プリンタテスト mosakuさんのブログで教えていただい(有)ユウピット電子のプリンタインターフェースを試す。 先日の動作確認では、インクリボンも感熱紙も手持ちがなく、まさに「動くこと」の確認だけだった。 今回は、ちゃんと感熱紙を用意してテスト。備えあればうれしいな、である。 プリンタはパナソニックFS-PC1。 「OPEN “LPRT:”」、「LLIST」と入力。 ガチャガチャジージーと打ち出されたのは、もちろん「かえるのうた」のリスト。 無事出力された。 次に、SONYのHBP-F1に換えてテスト。 あれれ? 文字化けがひどい。接点をクリーニングしてテスト。やはり文字化け。テストを繰り返してみると、文字化け箇所に規則性がない。 プリンタケーブルの接触不良を疑うが、今のところ原因不明。SONYのことだからどうせタイマーだろうと片付ける。 ■ポケコンとMSX データレコーダー、プリンタとMSX用周辺機器の使い回しが利いて、その点ではポケコンはMSXと「おともだち」な気がする。 次はジョイスティックかな? いや、ここはパドルであろう。先に作ったパドルI/Fと、BIOSルーチンの入出力部分及びウエイトループを書き換えれば、実現できるはず。いつになるかは分からないけど。 周辺機器の共有もさることながら、MSXとの接続も試してみたい。 ポケコンとMSXが手を結べば、本当に「おともだち」ではないかと思う今日この頃である。 |
|
■ポケコンその後 さて、にわかに興味を持って購入したポケコンだが、購入したとたんにサンハヤトが撤退を決めた。自分が通い始めると、その店はすぐに潰れるのが常なのだが、ポケコンもまた同じ運命を辿るのであろうか。 サンハヤト撤退の報せを聞いて、おっとビックリ、おっとっとを食べながら、おっとりしている場合ではない。おっとり刀で電器店に馳せ参じ、とりあえずUSB経由でパソコンと接続する「CT-441」をゲットした。これで電池切れでプログラムが消える心配はない。 ほっとして、店内に流れる「蛍の光」を背に家路についたのである。 ■とか言いながら せっかく「ポケコン拡張インターフェース」(というほど大層なものではないが)を作ったので、圧電ブザー以外の物を作ってみた。 右写真の「カセットインターフェース」である(本体左側の基盤)。 850Vは、BSAVEとBLOADのBASICコマンドがあり、これらはMSXでいうCSAVE、CLOADと同様な働きをする。(850V以前は、ポケコンでもCSAVEとCLOADであったらしい。なぜ名称変更されたのかは知らない。) データレコーダーへの出力側は圧電ブザーと同じ7ピンから。入力側は直流成分をカットするためコンデンサを挟んで6ピンへ。 データレコーダーはMSXでよく使われていたAIWAのDR-2。録音中の「ピーガガ」音をモニタできるほか、波形の位相を合わせるための反転スイッチがある。ちなみに、MSXの場合、低速・高信頼性の1200モードと高速・低信頼性の2400モードがあったが、DR-2は、1200モードで記録したデータを倍速再生して2400モードにできる。信頼性と高速性を両立させる機能である。 さて、実験はすんなり成功。MSXと同様な操作性で、プログラム等の保存ができるようになった。それにしても「ピーガガ」、懐かしいなあ。 ■今後の展開 実は既にプリンタI/Fも組み立て済みで、MSXプリンタで動作確認している。たぶん、ちゃんと動いている。「たぶん」というのは、インクリボンも感熱紙もないので、動作を見る限り、のハナシである。 USB、カセット、プリンタとくれば、あとはRS232Cのシリアル対応であろう。(USBもシリアルだけどね。) そしてあと2点。 まず、このプリンタI/F、1chipMSX用に使えないだろうか? I/Fとポケコンとの接続は電源のほか、出力3本、入力1本で、74LS164を用いてシリアル/パラレル変換している。これならMSXの汎用入出力ポートで使えそうである。 次に、シリアル通信であるが、ポケコン本体でシリアル通信制御機能を有しており、通常はレベル変換を介してRS232C接続するが、相手がMSXならレベル変換するまでもなく、そのままTTL接続すればいいのではないか。つまり、MSX側でアクロバット232のような汎用入出力ポート経由のターミナルソフトを使えば、簡単な配線でポケコンと通信できるのではないか。 こうして、いじっているうちに色々とアイデアが生まれてくるのである。(実現するのはいつかは知らんがね。) |





