ここから本文です
Dr.Kikkie (KIKI) : 不許無断天才|免責:本稿を真に受けて損害があっても知らん。

書庫過去の投稿日別表示

全1ページ

[1]

自前のDTMFデコーダの完成が待ちきれず、Windowsのフリーソフトでデコードできるか試してみました。結果は大成功!(たぶん)

使ったソフトは「Software DTMF Controller」。Xpまでの対応のせいか、恐る恐るWindows7にインストールすると、1〜2回の試行でフリーズしてしまいましたΣ(・□・;)
やっと撮れたのがこの一枚です。

MSX側で「0123456789ABCDEF」と入力すると、予定どおり2文字ずつにエンコードされました。「0」が「A1」、「1」が「A2」という具合に対応しているようですw
イメージ 1

「3」は「AA」となるべきところ、当初、上位4bit・下位4bit の発声が連続的過ぎて「A」一文字に変換されました。アセンブラソースを見直し、ウエイトを挟んで「AA」と認識されるように調整しました。

MSXのライン出力をパソコンのマイク入力に繋ぎましたが、音量が足りないようで、例によって百均アンプを挟みました。ゲインが大きすぎて少しVRを動かすとガバッと大きな音になります。音量調整にも苦労しました(*´Д`*)

何はともあれ、データが「0〜F」に変換できる目途がついたので、安心してハード・ソフトの開発に専念できます。「A1」が「0」、「A2」が「1」という具合に元に戻せばいいわけですね。
虎の子のDTMFデコーダICを壊さないように、慎重に進めます。

以上、速報でありました。(ペコリ)

DTMFデコーダー考えちう


人騒がせなポート1割り込み仕様の件

DTMFのアイデアの元ネタは、「MSXマガジン」(アスキー)の1991年4月号と5月号です。前回のエンコーダー試作の発声部分は、4月号に掲載されていたBASICプログラムの該当部分をほぼそのままアセンブラに移植したものです。データの与え方はBASICに任せて、汎用性を持たせたつもりです。

さて、次はさっそくデコーダーも5月号からパクリを…と思いましたが、記事に妙なことが書いてありました。
「#15に10000000B(バイナリーコード)を出力すれば、#14にジョイスティックポート1の状態が現れるように思えます。ところが実際にBASICでこれを行ってみると、まったく読み取ることができないのです。これは内部の割り込みに関連して、#15のビット6が0になってくれず、常に1になってしまうためです。つまり、ジョイスティックポート2の状態ならば読めるということなのです。」
だから今回のデータの取り込みにはポート2を使うというのです。
ホンマかいな!? 参考まで、ポートA及びBの各ビットの意味を示します。にゃごすさん主宰の「WEB版MSX2テクニカルハンドブック」から引用。http://ngs.no.coocan.jp/doc/wiki.cgi/TechHan?page=FrontPage

イメージ 1

参考までに最終兵器「MSX1アセンブラリスト」を引っ張り出してきました。PSGレジスタ書き込みBIOS「WRTPSG」は、内部ルーチンで割り込み禁止してアキュムレータの示すレジスタに値を書き込んでいますが、割り込み解除してRETしてます。読み込みBIOS「RDPSG」の本体は、わずか
  OUT (PSG.LW),A
  IN  A,(PSG.DR)
  RET
これだけで、DI も EI もへったくれもありません。
もしMマガ筆者の言うように途中で割り込みがかかって、#15のビット6が知らん間に「1」に書き換えられていたら、プログラマは原因不明の挙動不審に悩まされるでしょう。

なにぶん割り込みがらみのハナシなので、どこから割り込まれているのか発見には至りませんでした。人騒がせな仕様です。日を改めてホンマかどうか確かめてみます。
実は、この記述に今日まで気が付きませんでした。というのは、これまで工作するときは習慣的にポート2を使っていたのです。ポート1は6及び7端子を出力に使わない、いわばゲーム専用と割り切るのが無難でしょう。


6及び7端子を出力に使っていいのか?

まだちょっとナゾというか、気になる点があります。
注目はポートBのbit0〜3。先の にゃごすさん版テクハンでは「汎用I/F1又は2の6又は7端子に接続」と書いてありました。
ところが、本家「MSX2テクニカルハンドブック」(アスキー)では「bit0〜3は使用しない」となっています。

イメージ 2

「使用しない」となると、6及び7端子は入力専用となります。
実は、にゃごすさん版テクハンは、本家テクハンではなく、「MSX-Datapack」の記述と同じなのです。
「汎用I/F1又は2の6又は7端子に接続」という記述は事実を述べているだけで、「だからどうなの?」と考えてしまいます。

この点について、古典「MSX早わかり事典」(朝日新聞社)は明快です。「出力として使わない場合、「H」レベルにしなければならない。」と書かれてます。

イメージ 3

6及び7端子は、「入出力兼用ですから、入力に使う場合には(中略)オープン・コレクター・バッファを入れてポートBからの出力信号を切断します」。なお、デフォルトで「H」になるよう、プルアップ抵抗が入っていると記述されています。確かに、MSX-Datapack の「MSX2+回路例」では、抵抗アレイっぽいものが入っています。

結論、6及び7端子は出力にも使っていい。ただし、ポート1は前述の割り込み問題もあって気を遣う。ポート2の6及び7端子でイタズラするのが無難、というところでしょう。以前から工作にはポート2を使っていたぼくは、結果的に正解だったわけです。エヘン!(笑)


トリガA・B のタイムラグのナゾ

最後に若干小ネタですが、似非職人工房で有名なつじかわさんの指摘を紹介しておきます。「MMCを使ってみよう」のサイトで触れられていたことです。

「それと今回実験に使用したMSX本体(FS-A1GT)のジョイスティックポートで、妙な挙動を発見しました。
MSXは、PSGレジスタR#15のbit2/3でジョイスティックポートBのトリガA/B出力を設定出来ます。bit2/3を同時に変化させれば、トリガA/Bが同時に変化する事が期待されます。
ところが実際には、トリガAの方がBよりも必ず600ns程度先に変化するのです。MSXエンジン(T9769)を使用したMSXで共通なのかも知れません。

MSXではあっても、600nsは決して短い時間ではありません。昔、「シリアル通信」でイタズラしていた頃は、ステート数を計算してギリギリと追い込んだものです。簡単に「600ns遅れるよ」と言われると困るのです。この点もGTだけの問題なのか、後日(いつになることやら)確かめてみたいと思います。

というわけで、汎用ポート周辺事情だけで今回は終わってしまいました。ま、DTMFデコーダ用の収穫として、
 (1)ポート2をターゲットにハード・ソフトを開発する。
 (2)6及び7端子は必要なら出力に使っていい。
というところでしょうか。あ〜疲れた >┼○ バタッ

DTMFエンコーダ試作

どうもブログの書き込みの際、アセンブラソースやBASICリストが蹴られてしまいます。仕方がないので画像で掲載します。流れをなぞっていただいて、こうしたほうがいいのじゃないかという点があれば、ご指摘いただけたら幸いです。

なお、当初は、キー入力バッファにあるだけのデータを一気にピポパとしていましたが、USR関数で与えられた1データ分だけ音を返すようシンプルにしました。

ラベルDACは、USR関数で与えられる引数の2バイトのうち、下1バイトが格納されるワークエリアです。本来は、Math-packで使用されるF7F6Hから始まる16バイトのエリアの一部です。引数が整数で与えられることを前提とした決め打ちのアドレスです。

A1〜A4とB1〜B4はPSGの音程レジスタに与える定数です。
WTは、WAITの長さで、256回の空ループを何回繰り返すかを示します。「50」としたのは仮の数字で、R2-D2っぽいと思ったスピードにしましたw

MAINでは、まず8ビットの上4ビットを音声化し、次に下4ビットを音声化しています。

イメージ 1

JPTBLは力づくのジャンプテーブル。0〜15のどれに相当するか判断してPSGの音程レジスタに与える定数を決めています。
TONEはPSGの2チャンネルを使って、2音を同時発声させています。
ウエイトループを挟んでレジスタ7を操作して、発声チャンネルをON/OFFしています。

1バイトのデータは、4bit+4bitの2音を「ピポ」と発声します。でも、例えばキャラクタ「3」の場合はアスキーコードが「33H」なので、「ピピ」と同じ音が続きます。

長年愛用の「MSX-DOSスーパーハンドブック」掲載のASM.COMを使って、「/B」オプション付きでオブジェクトファイルを作りました。ライブラリもリンカもない、シンプルなアセンブラで気に入っているのですが、2進数表現に対応しないのが残念です。2箇所に2進数表現でコメントを入れているのは、そういう事情です。

さて、次はエンコーダを試すBASICプログラムです。INPUT$()でコントロールコードを含む文字列を取り込んでいます。ただし改行コード(0DH)の場合は文字列の終わりと判断して、発声ルーチンに渡します。従って0DHを含む文字列は、このプログラムでは処理できません。
文字列がヌルだった場合は、プログラムを終了します。

イメージ 2

まだデコードのハードもソフトも出来上がっていないので、果たしてうまくいきますやら?
そもそも、ソースコードを書くのが何年ぶりでしょうかね?(笑)
とんでもない間違いをしているかもしれません。いや、実際に間違いだらけでした。前回から相当修正したのはヒミツですwww

もし万一、ソースをご希望の場合は、…どうやってお渡ししたらよろしいでしょうかね? lhaで圧縮してishでテキスト化すればいいのでしょうか? パソコン通信時代から進化してないのがバレましたw

全1ページ

[1]

1
2
3 4
5
6
7 8 9
10 11 12 13
14
15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31

過去の記事一覧

最新のコメント最新のコメント

すべて表示

kik**41010
kik**41010
非公開 / 非公開
人気度
Yahoo!ブログヘルプ - ブログ人気度について

よしもとブログランキング

もっと見る
本文はここまでですこのページの先頭へ

[PR]お得情報

数量限定!イオンおまとめ企画
「無料お試しクーポン」か
「値引きクーポン」が必ず当たる!
CMで話題のふるさと納税サイトさとふる
毎日お礼品ランキング更新中!
2019年のふるさと納税は≪12/31まで≫

その他のキャンペーン

みんなの更新記事