|
以前から考えていたものの、なかなか着手せずにいた、MSXによるシリアル通信に着手。 ■1 仕様 (1) ベースはBASIC やっつけ仕事に柔軟に対応できるBASICをベースとする。当然、USR関数による引数渡し。 CLEAR 200,&HBFFF:DEFUSR=&HC000 A$="ABC":DUMMY$=USR(A$) てな調子である。 (2) RS232Cっぽい仕様 転送速度は9600bps固定。スタートビット1、データビット8、パリティなし、ストップビット1。フロー制御なし。 なぜ9600bps固定かというと、転送タイミングを機械語命令数に依存しているため。 今どきの機器は9600bpsでも十分こなせるはず。 PC/AT互換機のシリアルポートに似ていることもあり、例によって汎用入出力ポートを使用。 (3) RS232Cぽくない仕様 12Vレベル変換は行わず、TTLレベルのまんまとする。 今どきの機器は、内部では5Vとか3.3Vで処理しているくせに、シリアルポート部分だけは12Vに上げたり下げたりしている。んな面倒なことはしない。 ■2 ソフトウエア ざっと仕様を書いたところで、アセンブラソースを書き始める。いつものとおり、ASM.COM用である。 動作の概略は次のとおり。 (1) USR関数の変数型チェック。文字列でなければリターン。 (2) 文字列の長さをチェック。ゼロならリターン。 (3) 文字列の長さがゼロになるまで、信号を送出する。 ※ここまでは、「MSX2テクニカル・ハンドブック」と、ほぼ同じ。PSGレジスタ#15のデータ保存を紛れ込ませている程度の改変。 (4) まず8ピンを下げて、ストップビットの送出。 (5) LSBから順番に8ピンを上げ下げ。 (6) 最後に8ピンを上げて、ストップビットを送出。 ※「上げ下げ」とソースコードが逆ではないかと思っている人がいるかもしれないが、その点は後述。 (7)サブルールーチンは、PSGレジスタ#15のデータセーブ。8ピンの上げ下げ。ウエイトループ。 ※NOP命令を繰り返しているが、DJNZで結構時間を喰ってしまい、大味なウエイトループになっている。もうちょびっとウエイトがほしいので、ループ外にもNOPを足している。 ■3 ハードウエア (1) 主な部品 ・Dサブ9ピンコネクタ(メス):金属部分を外して、ポートに接続しやすくした。 ・74LS14:MSXの起動時点では8ピンはLOWであることに後から気が付いて、論理を反転するために入れたもの。このため、上述のソフトウエアの論理をもう一度反転するさせた。考えてみれば、サブルーチンの中で反転しておけば読みやすかったかもしれない。CPLなんて命令も入っていて、まるで「反対の反対なのだ!」状態である。 ・USBシリアル変換アダプタ:ここではFT232RLを使ったsparkfunの製品を使用。 (2) 結線 ・MSXの5VとGNDを74LS14に結線。 ・MSXの8ピンを74LS14の1ピンに結線。 ・74LS14の2ピンをアダプタのRXに、GNDをGNDに結線。 ・パスコンとかプルダウンは適宜。 ■まとめ さて、どうなることやら。続きはコマーシャルのあとで。 http://art19.photozou.jp/pub/378/247378/photo/29273001.jpg 赤くてかわいいブレッドボード。これがインターフェース。 74LS14とsparkfunのFTDI Basic Breakout(5V)が載っている。後者は秋月のUSB-シリアル変換モジュールも使えるはず。 |
過去の投稿日別表示
-
詳細
2009年11月13日
全1ページ
[1]
コメント(0)
全1ページ
[1]


