ちょっとカテゴリ違う気がするけど、書くところが無いのでここにくっつけておきます。
GB には音声出力端子があります。これを通信ポートに見立てて GB から外部にデータを送信することが出来ます。
原理としてはこれまで書いた他の方法と同じく、デジタルデータの 0 と 1 を音声の OFF/ON として出力するだけです。
音声の出力に関しては ch.3 波形メモリ音源を使います。
ch.1/2 の矩形波出力は、それ自体が 0/1 を繰り返していて使いづらいので。ch.4 のノイズ音源はいわずもがな。
波形メモリ音源は 16byte の波形設定領域を持っています。1byte を上下 4bit ずつに分けるので、全部で 32step。
4bit なので音量は 16 段階ということになります。
ここで設定した 32step は音源レジスタに設定した周波数値で自動的に再生され、最後まで行くと最初に戻ります。
たとえば音量を 0->15 になるように 32 step かけて上がっていくような感じの波形を設定すると「のこぎり波」として聞こえます。
今回は必要なのは 0 と 1 なので、波形は 16byte を全部 $FF にします。音量最大がずっと続く感じです。
この波形をずっと再生しっぱなしにして、on/off は ch.3 音源レジスタで再生/消音の切り替えで制御します。
改めて通信の説明。
データを出力する場合、受信側で「どこからどこまでが 8bit=1byte」なのかが分からないと都合が悪いです。
もしデータがずっと $00 だったり $FF だったりしたら、通信が始まったことすらわからないですからね。
というわけで、こういうときは「スタートビット」「ストップビット」というのを追加します。
最初は送信側はずっと 1 にしておき、受信側は 0 が来るのをずっと待ち続けます(あるいは 0->1 でも良い)。
0 が来たらそこから通信開始と認識して、続く 8 個のビットをデータの本体であると見なすのです。終端は 1 を立てて再びスタートビットを待ちます。
こういった送信側・受信側双方において、あらかじめ約束事(プロトコル)を取り決めておくことが大事です。
1byte = $CA = %11001010 を送るの図。
見て分かるとおり、1byte=8bit を送るのに計 11bit 必要になります。
今回はストップビットは 2bit ですが、場合によっては 1bit だったり、別にパリティビットが加わったりします。
受信に使う PC 側のツールに MSX 用のテープ音声変換ツールを使う予定なので、今回は以上のような設計にしています。
さらに 0/1 の部分は MSX テープのフォーマットに合わせて 2400Hz/4800Hz の周波数を刻むものとします。2400baud。
また、テープの場合は頭にヘッダという「ピー」音が入るので、これも併せて取り入れることにします。
こういうフォーマットにするのは、受信側ツールを新規に作るのが面倒という筆者の都合によるものなので
ツールから自作する場合は好きにするといいです。2byte ずつ送受信するとか。
GB 側のテストプログラムは以下。2400Hz/4800Hz はソフト的につくりだします。
クロックを数えてタイミングを合わせるのが少し大変です。
exporttest_20190407.zip
A ボタンを押すとピーガー鳴り出します。この音声を PC 側マイク端子で録音します。
今回は 44100Hz ステレオで録音しました。
wav からの変換には
castools (http://home.kabelfoon.nl/~vincentd/)を使います。
wav ファイルをドラッグ&ドロップ。
phase shift signal にチェックを入れてから convert to .cas で変換。
できあがった .cas ファイルには MSX テープフォーマット由来のヘッダ情報がついているので先頭から 8byte は手動で削除します。
これもツールの流用が原因なので、完全に自前で作るならもっと便利にできるはず。
拡張子を .cas から .png に戻すと、、、
以下のように、GB から送った画像データが PC 上で復元できました。
出典:いらすとや『AI(人工知能)が搭載されたロボットがパソコンの操作(RPA)をしているイラスト』 50% 縮小・白黒化。
シュールですね。
この方式の利点はなんといっても簡便さにあります。
どこの家庭にもある(?)ミニプラグ音声ケーブル一本で PC に送信できるので、追加投資はほぼ必要ありません。
PC 側も特別なドライバをインストールしたりする手間は要らず、録音も標準の「サウンドレコーダー」で十分です。