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

書庫過去の投稿日別表示

全1ページ

[1]

STICK通信

長年、MSXと「通信」に特に興味を持って過ごしてまいりました。ず〜っと以前には、Arduinoとの間で「PDL通信」てなものも考えましたっけ。MSXのPDL関数は、入力されたパルスの長さを0〜255の256段階に認識するのであります。

タイトーのゲーム「アルカノイド」シリーズは自前のルーチンを用意しBIOSに頼らなかったので、PDL関数が削除されたturboRでも遊べました。しかし、PDL関数を使って「スカッシュ」などのゲームを作っていたアマチュアは、turboRの仕打ちによって自作ハードウエアとともに奈落の底に落ちたのであります。

もちろん、Arduinoとの「PDL通信」もおじゃんとなりました。Arduino側でのPWMの調整も微妙過ぎたという反省もあって、実は自分でもあまり使う気にならなかったのでありました(爆)

捲土重来、起死回生。
いつものようにJポート(「ジョイスティックポート」あるいは「汎用入出力ポート」を慣用的にぼくは「Jポート」と呼んでいます)を眺めていて、ふと思いつきました。
「これってArduino→MSXの通信に使えるんじゃないの?」

何を今さらとお思いでしょうが、お聞きください。
ついついピン1〜4の4ビットで信号入力と思いがちでしたが、そのためにはマシン語の助けを借りないといけません。BASICのSTICK関数を使えば「0〜8」をMSXは受け取ることができるのです。同じ機能のBIOSも用意されています。
↓STICK関数で受け取れる数字。

イメージ 1

これを通信に応用するとすれば、Arduinoのデジタル出力を4ピンを使って、アイドリング時は「1111」を出力します。MSXにとっては「0」です。「1110」を出力するとMSXにとっては「1(Up)」です。というわけで、「0〜8」の9通りの信号をMSXに渡すとすれば、別途CLKも要りません。一例として次のような手順が考えられるでしょう。
 (1) 「0」が続く間、MSXは受信データ待ち。
 (2) 「0」以外が来たとき、MSXはデータとして受け取る。(受信スタート)
 (3) データとデータの間には「0」を挟む。
 (4) 例えば30秒間「0」が続いたら通信終了とみなす。
通信終了の方法はケース・バイ・ケースで考える必要があります。

1000 DEFINT A-Z:DIM A(200):N=0
1010 ON INTERVAL>1800 GOSUB 2000
1020 INTERVAL ON
1030 D=STICK(2):IF D=0 THEN 1030  'JPort-B
1040 INTERVAL OFF
1050 A(N)=D-1:N=N+1:IF N=200 GOSUB 2000
1060 TIME=0:GOTO 1020
1070 '
2000 INTERVAL OFF:RETURN 2010
2010 END

Arduinoが今ちょっとアレなので、まだ実際には動かしていませんが、こんな感じで配列Aに200個のデータが格納できるのではないでしょうか?200個未満で通信終了したときは、Nに受信数+1が入っているで正しいかな?(・∀・)?

【追記】このままではオクタルなので使いにくいですね。16進数が使えるように、もう一工夫要るようです。
Arduino側で、まず8で割った整数除算の商を、次に剰余を送信して、MSX側でふたつのデータから16進数に組み立て直すとか?
何とかしてください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

過去の記事一覧

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

すべて表示

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

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

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

[PR]お得情報

ふるさと納税サイト≪さとふる≫
実質2000円で好きなお礼品を選べる
毎日人気ランキング更新中!
数量限定!イオンおまとめ企画
「無料お試しクーポン」か
「値引きクーポン」が必ず当たる!

その他のキャンペーン

みんなの更新記事