ここから本文です
Dr.KIKKIE(KIKI) MSX DeuxLaque
免責:記載誤りによる損害一切

書庫全体表示

シリアル通信(1)

イメージ 1
以前から考えていたものの、なかなか着手せずにいた、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-シリアル変換モジュールも使えるはず。
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
Dr.KIKKIE(KIKI)
Dr.KIKKIE(KIKI)
非公開 / 非公開
人気度
Yahoo!ブログヘルプ - ブログ人気度について

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

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

[PR]お得情報

ふるさと納税サイト『さとふる』
実質2000円で特産品がお手元に
10/31まで秋の行楽キャンペーン実施中

その他のキャンペーン

みんなの更新記事