Raspberry Pi PicoでPicoMite(MMBasic)を使う〜MMBasicのプログラムを書いてみよう

Raspberry Pico PicoでPicoMiteが動作するようになったのでMMBasicでプログラムを入力・実行する方法を示します。

# フルスクリーンエディタ

PicoMiteにはMMBasicのプログラム編集のためのフルスクリーンエディターが内蔵されている。フルスクリーンエディタはコマンドプロンプトで`Edit`コマンドまたは`F4`キーで起動する。

![スクリーンショット 2025-04-25 19.28.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72921/f44bfc36-c369-40da-949e-273e04d5ae53.png)


フルスクリーンエディタが起動すると画面の一番下の行にファンクションキーが表示される。
それぞれのキーは表に示す機能がある。

| キー     | 動作                                                                                 |
|----------|--------------------------------------------------------------------------------------|
| ESC      | 変更を破棄し、コマンドプロンプトにもどる。変更がある場合は破棄するか否かを問われる。 |
| F1:Save  | 入力したプログラムをプログラムメモリに保存する。                                     |
| F2:Run   | プログラムをプログラムメモリに保存し、実行する。                                     |
| F3:Find  | 文字列検索。Shift-F3で繰り返し検索                                                   |
| F4:Mark  | 文字列選択のマーク開始位置の指定。矢印キーでマーク範囲を指定する。（マークモード）   |
| F5:Paste | クリップボードの内容(コピーもしくはカットした文字列)を貼り付ける                     |

※ なぜか私の環境のminicomではF5キーに割り当てられたPasteやCopy機能が動作しない。

F4キーでマークモードになると、矢印キーで範囲をしてしたらカット（切り取り）、コピー、削除の操作を下記のキーで指定できる。

| キー    | 動作                                                     |
|---------|----------------------------------------------------------|
| ESC     | 何もせず、マークモードを終了                             |
| F4:Cut  | マークした文字列を切り取り、クリップボードにコピーする。 |
| F5:Copy | マークした文字列をクリップボードにコピーする。           |
| DELETE  | マークした文字列を削除する。クリップボードに変更はない。 |

ファンクションキーの代替キーとして下記のキーコンビネーションが利用できる。

| キー | 代替キー | キー    | 代替キー | キー   | 代替キー | キー   | 代替キー |
|------|----------|---------|----------|--------|----------|--------|----------|
| LEFT | Ctrl-S   | RIGHT   | Ctrl-D   | UP     | Ctrl-E   | DOWN   | Ctrl-X   |
| HOME | Ctrl-U   | END     | Ctrl-K   | PageUp | Ctrl-P   | PageDn | Ctrl-L   |
| DEL  | Ctrl-]   | INSERT  | Ctrl-N   | F1     | Ctrl-Q   | F2     | Ctrl-W   |
| F3   | Ctrl-R   | ShiftF3 | Ctrl-G   | F4     | Ctrl-T   | F5     | Ctrl-Y   |


# プログラムの入力と実行 #

エディタを起動したので次のプログラムを入力し、実行してみる。

```BASIC
Print "Hello World!"

For i = 1 To 10
  print i
Next i
```

入力できたら`F2(Save)`キーを押してプログラムを保存し、実行する。エディタが終了し、実行結果が表示される。

<!-- ここに図 -->
![スクリーンショット 2025-04-25 20.32.56.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72921/26b97eee-8aac-4b30-97d9-7a091d834dce.jpeg)

もし、文法上のエラーがあればその理由などが表示されるので再度`EDIT`コマンドを実行するとエラーのあった行に自動的にカーソルが移動する。

<!-- ここに図 -->
![スクリーンショット 2025-04-25 20.35.27.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72921/82ac6e2f-a538-4d45-b0da-82651fd4c176.jpeg)

コマンドプロンプトでは起動時からのコマンド履歴を保存しているので矢印キーで呼び出して再実行できる。

フルスクリーンエディタは構文のカラー表示に対応しているが初期状態では無効化されているので`OPTION`コマンドで有効化する。

```
> OPTION COLOURCODE ON
```
![スクリーンショット 2025-04-25 20.41.04.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72921/00c30648-6158-403b-b557-f7f5eb9a55c2.jpeg)


オプションコマンドは無効化するまで再起動しても保持され続ける。

- MMBasicは、行番号が不要です。GOTO文などで制御を飛ばしたい場合には、飛び先にラベルを設定し、そのラベルを飛び先に指定します。
- 命令文などは大文字小文字は区別しません。


# プログラムの保存場所 #

## プログラムメモリ ##

エディタで入力したプログラムはRaspberry Pi Picoの**プログラムメモリ**と呼ぶフラッシュメモリ内の領域に保存されます。このプログラムメモリはフラッシュメモリ内にあるため、電源を切ってもその内容は失われません。

プログラムメモリの使用量やRAM容量は`MEMORY`コマンドで確認できる。
実行例を示す。Program:の次の行がプログラムメモリの使用量とプログラムの行数を示している。

```
> MEMORY
Program:
   1K ( 1%) Program (4 lines) <-プログラムメモリの使用量
 127K (99%) Free

Saved Variables:
  16K (100%) Free

RAM:
   0K ( 0%) 0 Variables
   0K ( 0%) General
 156K (100%) Free
>
```

## フラッシュファイルシステム ##

ディスクドライブと同様の保存場所としてフラッシュメモリの領域に`フラッシュファイルシステム`が自動的に作成されます。

フラッシュファイルシステムはドライブA:となり、SAVE、RUN、OPENコマンドで保存、実行、参照が可能です。

先ほど入力・実行したプログラムを`SAVE`コマンドでフラッシュファイルシステムにtest.basとして保存してみます。その後、`FILES`コマンドで保存されているかを確認します。

```
> SAVE "test1.bas"
> FILES
A:/
   <DIR>  .
   <DIR>  ..
00:00 01-01-2024          4  bootcount
02:40 01-01-2024         56  test.bas     <- 保存されいる
2 directories, 2 files, 724992 bytes free
```

フラッシュファイルシステムのファイルをの内容は`LIST`コマンドで表示できます。

先ほど保存したtest.basの内容を表示してみます。Aドライブにあるのでファイル名をA:/test.basとして指定します。

```BASIC
> LIST "A:/test.bas"
Print "Hello World!"
For i = 0  10
  Print i
Next i
>
```

# 日時について

Raspberry Pi PicoはRTCを内蔵していないため、PicoMiteのクロックは起動時に2024年1月1日 00時00分に設定されます。RTCハードウェアを接続指定いない場合は手動で日時を設定しなければならい。

日時を2025年4月25日 22:00:00に設定するコマンドを以下に示す。

```
> DATE$="2025/04/25"
> TIME$="22:00:00"
```

現在の日時は`DATETIME$()`関数で引数にNOWを指定して確認する。
出力される日付は`日-月-年`の形式となる。

```
> PRINT DATETIME$(NOW)
25-04-2025 22:11:17
```

# コマンドプロンプトのショートカットキー #

コマンドプロントでは表に示すショートカットキーが定義されている。

| キー | 機能       | キー | 機能       |
|------|------------|------|------------|
| F2   | RUN        | F3   | LIST       |
| F4   | EDIT       | F5   | 画面クリア |
| F10  | 自動保存   |
| F11  | XMODEM受信 |
| F12  | XMODEM送信 |