IchigoJam BASIC で EEPROM が扱えるようになり、
多くのプログラムを保存できるようになったのですが、
その時どのプログラムが何番なのか残しておくのを
どうするかが悩みの種でした。
ある人は紙に書いて、ある人はファイルに入れて、
自分は Google ドライブ の表計算で一覧にしていました。
でもこれを画面で表示できるようになったら……
そんな夢がついに実現したのです。
秘密は IchigoJam BASIC の I2C 制御対応。
EEPROM で使われていた仕組みを汎用性を持たせて、
様々なデバイスを操作できるようになりました。
EEPROM もプログラムに限らず
自由に読み書きが可能になりました。
早速これを用いて一覧表示にしたのがこのプログラム。
一覧表示し、実行したいプログラム番号を入力するだけ。
1画面に表示しきれない時は単に enter (return) キーで続きを表示します。
プログラムとして表示する部分はそれぞれのプログラムの先頭行です。
' になってあればコメント文を表示し、それ以外は行番号を除いたプログラムを表示します。
1 '(プログラム名) を加えておくのが良いでしょう。
一覧表示で文字化けする部分がある場合は NEW や 1 ' だけのプログラムにして
該当のプログラム番号を SAVE して下さい。数が多い場合は
NEW:FOR I=(開始番号) TO (終了番号):? I:SAVE I:NEXT
として簡単に初期化できます。(プログラムを削除する可能性がある事にご注意下さい)
福野さんがサンプルとして EEPROM のプログラム一覧表示を公開してくれたので、
こちらをベースとして自分が実行などの改良を加えています。
この元のプログラムをベースに IchigoJam BASIC には 1.0.0 beta 11 より FILES が含まれました。
IchigoJam、待望のファイル一覧表示! つつじマラソン&プログラミングスタートアップforキッズな日曜日 | 福野泰介の一日一創
注意: IchigoJam BASIC 1.0.1 からは EEPROM を含めたファイル一覧表示は FILES 0 とします。FILES では本体のみを表示します。
FILES は本体のプログラムも表示できる、プログラムに関係なく表示できるメリットがある一方で、
この「プログラム一覧・ローダー」はページ単位で表示できるメリットがあるため、公開を続けています。
IchigoJam BASIC 1.0.0 beta 3 以降と表記していますが、
IchigoJam BASIC 0.9.9 RC9〜RC10 も I2CR だったため使用できるかもしれません。
IchigoJam BASIC 0.9.9 RC11〜1.0.0 beta 2 では I2CR・I2CW が I2C になっていましたので、
現在公開されている版では使用できません。
0.9.9 RC11〜1.0.0 beta 2 対応版・最新版も使用可能 (Facebook グループ IchigoJam-FAN 内)
IchigoJam BASIC RPi は EEPROM が対応している IchigoJam BASIC RPi 1.2.5RPi・1.2b16RPi 以降で動作します。
(IchigoJam BASIC RPi 1.2.4RPi までは SD カードのみになっているため、EEPROM は使用不可)
I2CR コマンドで直接 EEPROM から読み込んでいるので、SD カードは対象ではありません。
下の項目 FILES 版は SD カードも表示できますので、IchigoJam BASIC RPi は FILES 版がおすすめです。
IchigoCake BASIC では使用できないため、動作できない対応を行っています。
IchigoCake BASIC で使用する場合は、このページ下にある FILES 版を使用する事ができます。
10 'Program LIST / Loader
20 CLV
30 P=PEEK(#C00)
40 IF P=0 ?"Only IchigoJam":END
50 L=63:'1M=127 512K=63 256K=31
60 FOR J=0 TO L
70 POKE #FD0,J*4,3
80 A=#50+(J>63)*4
90 R=I2CR(A,#FD0,2,#FD2,27)
100 ? J+100;" ";
110 N=PEEK(#FD2)
120 IF N=255 GOTO 190
130 I=0
140 POKE #FED,0
150 IF N=39 I=1
160 C=PEEK(#FD2+I)
170 IF C ?CHR$(C);:I=I+1
180 IF C GOTO 160
190 ?
200 K=0
210 IF J%23<>22 K=K+1
220 IF J<>L K=K+1
230 IF K=2 GOTO 320
240 ?"RUN(100~";L+100;"),MORE";
250 INPUT N
260 IF N=0 GOTO 320
270 POKE #FFE,N
280 CLP
290 CLT
300 CLV
310 LRUN PEEK(#FFE)
320 NEXT
MixJuice ダウンロード ?"MJ GET kidspod.club/mj/625
MicJack ダウンロード ?"MJ GKP 625
EEPROM を交換する事がなければ 0 番に SAVE すると、ボタンを押しながら電源を入れて実行できるので便利です。
運営者は容量の異なる EEPROM を多数扱うため、100 番に SAVE していますが、
そのような場合は、10 LRUN 100 とだけ入れたプログラムを 0 番に SAVE しておくと便利です。
このプログラムを公開し、その後 FILES でも採用されてから、
IchigoJam BASIC プログラムの先頭行は ' プログラム名 で公開されるのが標準となりました。
オリジナルとほぼ同じ動きで FILES を使用したバージョンです。
FILES を使用する事で EEPROM だけではなく、
IchigoJam 本体にあるファイルも一覧表示できます。
IchigoJam BASIC RPi では SD カードのファイルを一覧表示可能です。
また 1 文字ずつ出力するオリジナル版より高速に表示します。
ただし、IchigoJam BASIC 1.0.0〜1.0.1 では動作しませんので、
1.0 でも動作させたい場合は上のオリジナル版を使用して下さい。
IchigoJam BASIC RPi の SD カードで
同じ表示を実現できるように作成したものです。
そのため IchigoJam BASIC RPi 全バージョンで動作可能です。
(右画面は IchigoJam BASIC RPi での実行画面)
20 行の S と L が表示するプログラム番号の範囲です。
IchigoJam BASIC 1.2.3・1.2b55 および
IchigoJam BASIC RPi 1.2.4RPi・1.2b19RPi までは
0 を指定すると意図しない動作になります。範囲は 1〜227 となります。
IchigoJam BASIC 1.2.4・1.2b56 および
IchigoJam BASIC RPi 1.2.5RPi・1.2b20RPi より
IchigoJam BASIC の FILES 仕様が変わり、
0 も正常に動作するようになっています。範囲は 0〜227 となります。
旧バージョンで使用する可能性がある場合は 0 を範囲指定しないで下さい。
0 または 100 にプログラムを入れた前提で次のとおりです。
IchigoJam BASIC では本体 0〜3 と EEPROM 100〜227 に分かれ、
EEPROM はサイズによって使用できるプログラム番号が変わってきます。
そのため、本体・SD カードは 0 番、EEPROM は 100 番に入れて
LRUN 0 または LRUN 100 で実行するのが良いでしょう。
10 'Program LIST/Loader FILES
20 S=101:L=227:'1~3,1~99,101~227
30 FOR J=S TO L
40 FILES J,J
50 K=0
60 IF (J-S)%23<>22 K=K+1
70 IF J<>L K=K+1
80 IF K=2 GOTO 170
90 ?"RUN(";S;"~";L;"),MORE";
100 INPUT N
110 IF N=0 GOTO 170
120 POKE #FFE,N
130 CLP
140 CLT
150 CLV
160 LRUN PEEK(#FFE)
170 NEXT
MixJuice ダウンロード ?"MJ GET kidspod.club/mj/626
MicJack ダウンロード ?"MJ GKP 626
IchigoJam BIG の幅で表示できるように調整したバージョンです。
当時の FILES では考慮されていないため、その対策として作りました。
(1.3.2b で VIDEO に応じて表示単位が変わっています)
IchigoJam BASIC 1.2.2 以降ではVIDEO 3 で同じ表示になるため、
これに対応し、1.2.2 以降で実行すると拡大表示で実行されます。
大きな文字で一覧表示したい時に便利です。
ただし VIDEO 3 のまま他のプログラムを実行しているので、
必要に応じて 165 VIDEO 1 を加えるなど、調整して下さい。
IchigoCake BASIC では動作しないよう対応してあります。
10 'Program LIST / Loader
20 CLV
30 P=PEEK(#C00)
40 IF P=0 ?"Only IchigoJam":END
50 L=63:'1M=127 512K=63 256K=31
60 IF VER()>12233 VIDEO 3
70 FOR J=0 TO L
80 POKE #FD0,J*4,3
90 A=#50+(J>63)*4
100 R=I2CR(A,#FD0,2,#FD2,27)
110 ? J+100;" ";
120 N=PEEK(#FD2)
130 IF N=255 GOTO 200
140 I=0
150 POKE #FDE,0
160 IF N=39 I=1
170 C=PEEK(#FD2+I)
180 IF C ?CHR$(C);:I=I+1
190 IF C GOTO 170
200 ?
210 K=0
220 IF J%11<>10 K=K+1
230 IF J<>L K=K+1
240 IF K=2 GOTO 330
250 ?"RUN,MORE";
260 INPUT N
270 IF N=0 GOTO 330
280 POKE #FFE,N
290 CLP
300 CLT
310 CLV
320 LRUN PEEK(#FFE)
330 NEXT
MixJuice ダウンロード ?"MJ GET kidspod.club/mj/648
MicJack ダウンロード ?"MJ GKP 648
SkyBerryJAM は 栃木県立栃木工業高等学校 が管理する登録商標であり、
SkyBerryJAM は 栃木県立栃木工業高等学校 の商標です。
Raspberry Pi は
Raspberry Pi 財団 の登録商標です。
Raspberry Pi is a registered trademark or
trademark of
the Raspberry Pi Foundation.
"RISC-V" の商品名は RISC-Vインターナショナル が管理する登録商標です。
The “RISC-V” trade name is a registered trade mark of
RISC-V International.