福野泰介の一日一創 - create every day

かつてはたどり着けなかったパソコンの深い世界。ネットがある今なら、サクサク!
思い出のMSX1パソコン、CANON V-10のジョイスティックポートを経由して、IchigoJamからプログラムを送り込むことに成功!


左はIchigoJamの画面、右はMSXの画面(COLOR15,1,1で色変更)
IchigoJam側で打ち込んだ文字をOUT1とOUT2を使って、SPI非同期通信。MSX BASICで書いた受信プログラムで受け取ったデータを表示しつつ、マシン語用に確保したメモリに書き込めた。


どこかで100円で購入したD-Sub9ピンのオスケーブルを、ブレッドボードで使えるように準備。
テスターで導通チェックしながら、1から9番ピンまで並べます。(シールドも9番のGNDにはんだづけしましたが、どうだろう)


ピンはどちらでも使えるように、長ピンソケットをはんだづけしてできあがり!


ジョイスティックポート、MSX BASICのSTRIG命令を使ってボタンの押し下げを取得できます。 8番ピンを6番や7番へショートすれば、押したなることを確認できます。確認用のMSX BASICプログラムはこれだけ!

10 ?STRIG(1),STRIG(3):GOTO 10

続いて、IchigoJamとの接続です。


IchigoJamのOUT1とOUT2を、6番、7番ピンへ接続。9番ピンのGNDの接続ついでに、5番ピンの5VをIchigoJam用に拝借!

IchigoJamから確認してみましょう

OUT1,1 OUT1,0 OUT2,1 OUT2,0


無事、IchigoJamからMSXへ伝わりました!
(IchigoJam同士でOUT1からIN1へ接続しても遊べます)

あとは、この2本を使って送受信プログラムをつくるだけ。最初のMSX BASIC上のプログラムは手で打ち込まないといけないので、できるだけ短く実装できる、通信方式に同期式通信であるSPIを採用。

IchigoJam用送信プログラム

10 OUT1,1:OUT2,1:W=2 20 K=INKEY():IF!KCONT 30 FORI=7TO0STEP-1:OUT2,~K>>I&1:OUT1,0:WAITW:OUT1,1:WAITW:NEXT 40 GOTO 20

MSX BASIC用受信プログラム

10 CLEAR200,&HCFFF:DEFINTA-Z:A=&HD000 20 N=0:B=128 30 IF NOT STRIG(1) THEN 30 40 N=N+(STRIG(3)AND1)*B 50 IF STRIG(1) THEN 50 60 B=B/2:IF B THEN 30 70 ?CHR$(N); 80 POKE A,N:A=A+1:GOTO 20

BASICのプログラムも、中間コードをバイナリ#D000以降に受け取ったデータを、#8000や#C000などのBASICプログラム領域にコピーすればOK!

Z80用のCコンパイラ&アセンブラなどのツールキット「Z88DK」もいい感じに動いたので、いろいろ捗りそうです。

STICKコマンドを含めて、BASICでも最大6つの信号を受け取れるので、MSXをIchigoJamから音源としてとして使う、PanCake的にグラフィックボード的に使うなどもありですね! 身近なコンピューター、いろいろつないで遊んでみましょう!

Tweet
クリエイティブ・コモンズ・ライセンス
この作品は「Creative Commons — CC BY 4.0」の下に提供されています。
CC BY 福野泰介 - Taisuke Fukuno / @taisukef / アイコン画像 / プロフィール画像