はじめに
PicoCalcのキーボードでプログラムを入力するのがちょっと面倒なのでMacでMacで入力・編集することが多いです。そのプログラムの実行までには意外と手間がかかるのでMachiKaniaに簡単に転送できないかなと思い、シリアル通信でプログラムを転送する方法を試してましたのでそれをまとめました。
Macで入力・編集したプログラムをMachiKaniaで実行するまでの流れ
MachiKaniaで実行するプログラムをMacで入力・編集した場合、そのプログラムを実行するには次の手順を経ます。
- Macのエディタでプログラムを入力・編集
- MachiKania用のSDカードをMacにマウント
- 入力・編集したプログラムをSDカードにコピー
- SDカードをMacからアンマウント
- SDカードをPicoCalcに挿入
- PicoCalcの電源を投入
-
F1
キーを押してファイル一覧を表示 - 実行するプログラムを選択してロード
-
F4
キーを押してプログラムを実行
以上のように意外と手間がかかります。
検証環境
今回は下記の環境でプログラムを作成し、動作を確認しました。
- macOS : 15.6.1
- PicoCalc : Raspberry Pi Pico 2 W搭載
- MachiKania : PicoCalc版Phyllosoma 1.6.0
- USB-シリアルモジュール:CP2102 USB to UART Bridge Controller
USB-シリアルモジュールは数年前にIchigojam用に購入したものです。
接続
MacとPicoCalcをUSB-シリアルモジュールで接続します。接続するピンは次のとおりです。
USB-リアルモジュール | PicoCalc |
---|---|
RX | UART0_TX |
TX | UART0_RX |
GND | GND |
PicoCalcのGPIO端子のUART端子はRaspberry Pi Picoの次の端子に繋がっています(clockworks_Mainboard_V2.0_Schematic.pdfにより)
PicoCalc外部端子 | Raspberry Pi Pico |
---|---|
UART0_RX | GP1 |
UART0_TX | GP0 |
UART1_RX | GP12 |
UART1_TX | GP11 |
MachiKaniaではUARTに使用するGPIOピンはSDカード内の設定ファイルMACHIKAP.INI
の131,132行目で次に示すように送受信に使用するGPIOピンを指定します。
131:UARTTX=0
132:UARTRX=1
シリアル通信で転送の流れ
Macに保存されているBASICのプログラムをシリアル通信でMachiKania(PicoCalc)に転送する手順は次のとおりです。
- MacとMachiKania(PicoCalc)をUSB-シリアルモジュールで接続
- MachiKaniaで受信プログラムを実行
- Macのターミナルで転送用コマンドでBASICのプログラムを送信
- MachiKaniaの受信プログラムを終了
受信プログラム
MachiKaniaの受信プログラムは入門MachiKaniaの35ページ目のシリアル通信の使用例(1)「 115.2Kbpsでシリアルデータを読み込み、SDカードに「TEST.TXT」というファイル名で保存する。ESCキーで終了する。」のプログラムを流用し、保存するファイルの入力をプログラムを冒頭に追加しました。
プログラムの流れは次のとおりです。
- 受信したプログラムを保存するファイル名を入力
- 同じ名前のファイルがある場合は再入力
- 115200bpsでシリアル回線を開く
- 入力されたファイル名のファイルを書き込みモードで開く
- シリアル回線から受信したデータをファイルに書き込む
- ESCキーが押されるまで受信を繰り返す
PRINT "=== Serial receive ==="
DO
PRINT "Enter FILENAME: ";
F$ = INPUT$()
L = LEN(FFIND$(F$))
IF L != 0 then PRINT "File ";F$;" is existed!"
LOOP UNTIL L = 0
SERIAL 115200,0
FOPEN F$,"W"
WHILE 1
A=SERIALIN()
IF A>=0 THEN FPUTC A
IF INKEY() = 27 THEN BREAK
WEND
FCLOSE
END
Macからプログラムをシリアル転送
Macからのシリアル転送のためにminicom
を使います。インストールされていない場合はbrew
でインストールします。
$ brew install minicom
minicom
をインストールするとASCIIファイル転送コマンドのascii-xfr
も同時にインストールされるのでこのコマンドとminicom
を組み合わせてBASICのソースファイルを転送します。
以下がそのシェルスクリプトです。
ascii-xfrの出力をパイプでminicomへ渡して転送します。
#!/bin/bash
echo "File send to MachiKania"
if [ -f $1 ]
then
DEV=`ls /dev/cu.usb* | grep usb`
FILE="$1"
ascii-xfr -s -v -n "$FILE" | minicom -D "$DEV" -b 115200 -o
else
echo "File $1 not found!"
fi
ascii-xfrコマンドのオプションの意味は次のとおりです。
オプション | 意味 |
---|---|
-s | ファイル送信 |
-v | 進捗表示 |
-n | CRからCRLF、その逆の変換をしない |
minicomのオプションの意味は次のとおりです。
オプション | 意味 |
---|---|
-D | デバイスファイルの指定 |
-b | 転送速度の指定 |
-o | 初期化をスキップ |
スクリプトの引数に転送するBASICのプログラムのファイル名を指定します。
実行例
MachiKaniで受信プログラムを実行し、保存するファイル名を入力します。
次にMacのターミナルで転送するソースファイル、たとえばJMA.basを転送するときの例を示します。スクリプトの実行が完了すると画面がクリアされます。
$ ./tx.sh JMA.bas
File send to MachiKania
ASCII upload of "JMA.bas"
0.4 Kbytes transferred at 401 CPS... Done.
Welcome to minicom 2.10
OPTIONS:
Compiled on Feb 22 2025, 10:10:35.
Port /dev/cu.usbserial-0001, 20:09:25 [F]
Press Meta-Z for help on special keys
$
Macのシェルスクリプトの実行が完了したらMachiKaniaで実行中のプログラムをESC
キーを押して終了します。
F1
キーでファイル一覧を表示して、転送されていることを確認し、ロード後実行します。
さいごに
シリアル通信でのMacからMachiKaniaへのBASICプログラムの転送ができました。機器を直結しているので特に問題なく転送できています。
今回の逆のプログラムも作らないといけないですね。