プログラム電卓 温故知新 -
搭載プログラミング言語に注目して、プログラム電卓の変遷を考える -
2019/08/14
追記修正 2019/12/03
過去から現在に至る性能や仕様の変化を調べ、プログラミング言語を中心にカシオ製プログラム電卓の系譜を明らかにする。
4. Casio Basic 登場 - 可読性と機能の向上 (1)今回は、世界初のグラフ関数電卓
fx-7000P シリーズの後、プログラム言語としてターニングポイントとなる仕様追加を果たした
CFX-9850G を取り上げる。
1996年に発売された
CFX-9850G には、いくつかの Basic コマンドが追加されており、
Locate と
Getkey コマンドが初めて搭載されたことは、電卓で実用的なプログラムを作るためには非常に重要な出来事と言って良いと思う。
当ブログで使っている
Casio Basic という呼称は、カシオが公式に使っているものではないが、欧米のプログラム電卓愛好家のコミュニティでは以前から使われている。当ブログでは、当初管理人が
CasioBasic と呼んでいたが、その後海外のコミュニティで同じ名称が使われているのを知った。
但しそれらの海外のコミュニティにおいて
Casio Basic の明確な定義が見当たらない。当ブログでは以前から、Basic風のコマンドが追加された搭載言語を "
Casio Basic" と呼んでいる。
さらに進化して下記の条件を備えたものを当ブログでは
"新世代Casio Basic" と呼んでいる。
- Locate と Getkey を含んだ Basic コマンドが追加されている
- 行頭の改行がエラーにならない
- Then と Else 直後の改行がエラーにならない今回は、
"新世代" 前夜の
"Casio Basic" に焦点を当てる。
▋Basicコマンドの追加ネットで得られる操作マニュアルを調べたところ、最初にBasicコマンドが追加されたのは、1995年フランスで発売された
GRAPH 20 (fx-9610aG) であり、世界市場で最初に Basicコマンドが搭載されたのは、1996年発売の
fx-7400G であった。
▶ GRAPH 20 (fx-9610aG) の User's Manual ▶ fx-7400G の User's Manual - Programming編これらでは、
If 文、For 文、Do 文、While 文、Break、Return、Stop が追加されている。
▋Locate, Getkey の追加カシオのプログラム電卓で、初めて
Locate コマンドと
Getkey コマンドが追加されたのは、1996年発売の
CFX-9850G であった。
それまでの搭載言語では、入力検知できるのはテンキーと[EXE]キーのみ、文字列や数値の出力は
" " コマンドや
◢ コマンドで行うが出力位置は指定できなかった。ところが、
Getkey コマンドが追加されたことで、
[AC]キー以外の全てのキーの入力を個別に検知できるようになり、
Locate コマンドが追加されたことで、出力位置を自由に設定できるようになった。これにより、画面がスクロールしないプログラムを書けるようになり、プログラムの自由度が格段に向上した。極めて大きな進化といえる。
CFX-9850G は、
Locate と
Getkey が初めて追加された機種だ。カシオのプログラム電卓の系譜で重要なマイルストーンだ。
CFX-9850G の系統には下記がある。
- CFX-9850G / CFX-9850G Plus / CFX-9850GA Plus / CFX-9850GB Plus (1996 1998)
- CFX-9950G / CFX-9959GB Plus (1996 - 2003)
- CFX-9850GC Plus (2004 - 2010、2005年国内発売)
CFX-9850G が発売された頃は、
fx-4500P や
fx-4800P が販売されていた。
▶ 1996年4月発行のカシオ電卓総合カタログ -
CFX-9850G (国内では 1996年3月発売), fx-4500P, fx-4800P▋Casio CFX-9850G
2GBのメモリに、プログラム領域26KBが含まれる。
CFXシリーズは、3色カラー液晶搭載のグラフ関数電卓で、デフォルトがブルーで、オレンジとグリーンを追加した3色が使える。実際の画面は、輝度も色もコントラストが低い。液晶を見る角度でコントラストや色合いが大きく変化するのも見づらさの原因だ。明るいところでは問題ないが、少し暗くなると見づらいと感じる。この3色カラー液晶は応答性が悪い。
▍プログラムの転送
▶ PCリンク3pin-USBケーブル (SB-88) と プログラムリンク ソフトウェア (FA-124) を使えばPCリンクや電卓の画面取得が可能になる。
3pin-USBケーブル (SB-88)現在は製造中止品だが、
takumako様により互換ケーブルが有償頒布されている。
プログラムリンク ソフトウェア (FA-124)カシオのサイトから
無償ダウンロードできる。
▶ 電卓間転送3pin-3pinケーブル (SB-62) を使えば、3pin端子のあるグラフ関数電卓とプログラムの転送ができる。
3pin-3pinケーブル (SB-62)まだ販売されている。
takumako様により互換ケーブルが有償頒布されている。
ところで、電卓本体右下にある3pinコネクタには、防塵防滴用と思われるゴム製の "栓" が刺さっている。ある程度使われた中古品だとこれが無くなっているケースが多いのではないかと思う。
▍搭載言語 (Casio Basic) の概要Basicコマンドが追加されたことでプログラムの可読性と機能が向上し、さらに
Getkey と
Locate が追加されたことでプログラムの自由度が向上している。
▶ 主なコマンド - 入力:?→, Getkey
- 出力:" ", ◢, Locate
- カラーコマンド:Orange, Green (" "とSketchコマンドにのみ有効)
- 無条件ジャンプ:Goto / Lbl
- 条件ジャンプ:⇒ (fx-4000P、7000G と同じ仕様)
- カウントジャンプ:Isz, Dsz
- 条件分岐:If / Then / Else / IfEnd
- For ループ:For / To / Step / Next
- Do ループ:Do / LpWhile
- While ループ:While / WhileEnd
- 制御コマンド:Break, Return, Stop
- 比較演算: =, ≠, >, <, ≧, ≦
- 論理演算: And, Or, Not
- 配列:無し
- リスト:List (配列としても使える)
- 行列:Mat (配列としても使える)、但し初期化コマンド Dim は適用できない - 各種関数
※
GRAPH20 や
fx-7400G 以降で追加されたBasicコマンドを
青色で示す
※
CFX-9850G で追加されたコマンドを
赤色で示す
但し、以下の要因により可読性が損なわれている。
-
Then / Else 直後の改行:Syn ERROR になる
- 行頭での改行 (空白行):Sys ERROR になる
▶ 主なグラフィックス コマンド - グラフ設定:
CoordOn/
CoordOff,
GridOn/
GridOff,
AxesOn/
AxesOff,
LabelOn/
LabelOff - 座標系設定:
ViewWindow,
Xmax/Xmin/Xscl/Xfct, Ymax/Ymin/Yscl/Yfct - 消去コマンド:
ClrGraph, Cls -
Sketchコマンド:
Plot, PlotOn/PlotOff, PlotChg, PxlOn, PxlOff, PxlTest Line, F-Line, Vertical, Horizontal, Circle但し、
Plot, PlotOn, PlotOff, PlotChg, PxlOn, PxlOff, PxlChg, Circle の詳細仕様は、後継の
fx-9860G 以降とは異なる。
CFX-9850G ではこれらのコマンドのパラメータに X, Y を使うと誤動作する。X, Y は内部動作のために予約されていると思われ、コード上予期せぬ値が X, Y に自動的に入力されてしまう。つまり、X, Y をパラメータに使ってはいけない。
後継機種である
fx-9860G 以降
fx-CG50 までのグラフ関数電卓では、上記のコマンドで X, Y を使える。各コマンド実行後に、それぞれのコマンドの詳細仕様に従った正しい値 (論理座標系での値) が自動的に入力されるので、それを正しく理解すれば X, Y をパラメータとして使っても問題ない (積極的に使えば有用なこともある)。
▍プログラムの作成と実行
キーコード取得プログラム
GETKEY を入力してみた。コマンドを入力するためのキー (キープレス) は、
fx-9860Gシリーズや最新の
fx-CGシリーズと全く同じだ。
言語機能の基本仕様はこの機種の頃から固まっていることが分かる。
ファイル名:GETKEYLocate 1,1,"=== GET KEYCODE ==="
Locate 1,3,"KEYCODE ="
Locate 10,5,"HIT ANY KEY"
Locate 13,7,"[AC]:QUIT"
While Getkey
WhileEnd
Do
Do:Getkey→K
LpWhile K=0
Locate 9,3,"= " (スペース6個)
Locate 11,3,K
LpWhile
[DEL]キーを押したところ、キーコード44が表示されている。
fx-9860Gシリーズや
fx-CGシリーズと同様に、テキスト表示の範囲は21桁7行だ。
[AC]キーを押してプログラムを終了させると、画面下8行目に
Break と表示される。
ここで、
[EXE] を押すとプログラムが再起動し、もう一度
[AC] を押すと
Program List に戻らず
RUNモードに切り替わる。
この仕様は、
fx-9860Gシリーズや
fx-CGシリーズとは異なる。完成したプログラムを繰り返し使うには便利な仕様だ。一方、プログラムを試してから修正する場合は面倒だ。
RUNモードに戻った後、
[MENU] を押して
PRGMモードに移行して編集するプログラムを探す必要がある。
Program List には、プログラム名 (ファイル名) は入力した順序で並んでおり、アルファベット順になっていない。プログラムの数が多いと、編集あるいは実行したいプログラムを探す最善の方法は、サーチ(検索)機能だ。
Program List 画面で [F6] (▷) - [F1] (SRC) と押せば
Search For Program 画面が現れるので、そこで探しているプログラム名の頭のアルファベットを押せば良い。すると同じ頭文字で始まるプログラム名が全て表示される。この機能は必須だ。
▍プログラムの編集プログラム編集画面は使いにくい。
パソコンで文章を書く時は、通常は挿入モードで利用しているはずで、上書きモードは必要な時のみ切り替えて使うと思う。
fx-9860Gシリーズや
fx-CGシリーズでも、プログラム編集画面は常に挿入モードになっていて、必要な時に
[SHIFT]-[DELL](INS) と押して上書きモードに切り替えて使う。
ところが、
CFX-9850G は、通常が上書きモードになっていて、必要な時に
[SHIFT]-[DELL](INS) を押して挿入モードに切り替える。一旦挿入モードに切り替えると、カーソルのある行内で挿入モードが維持されるが、カーソルが別の行に移ると上書きモードに戻ってしまう。
▋fx-9860Gシリーズからのプログラムの移植
以前
fx-9860Gシリーズで作ったプログラムを
CFX-9850G に転送した。fx-9860Gシリーズは
"次世代Casio Basic"を搭載しており、
CFX-9850G への移植にはコードへの若干の手直しが必要だ。多くの場合はなんとかなるが、移植不可能、あるいは極めて困難なケースもある。
▶ モグラ叩きゲーム
fx-9860GIIで作った
アクションゲーム - "Whack-a-Mole(もぐら叩き)" は移植できた。トップ画面のタイトルをオレンジにしてみた。
CFX-9850G の処理速度に対応するために、
WHACKAMO の冒頭にある変数A の初期化を
2→A と変更しただけで、ロジックは変えていない。実際に遊んでみると、液晶の応答性が悪さは、さほど気にならない。
⇒ Whack-a-Mole のダウンロード▶キーコード取得プログラムfx-9860GIIで作った
キーコード取得プログラムを移植した後、
CFX-9850G 用になるよう表示を一部変更した。
左:起動直後の画面、右:キーコード取得プログラム、
[MENU] キーを押したところ。
CFX-9850G は、
fx-9860Gシリーズや
fx-CGシリーズと全く同じキーを備えており、キーコードも同一になっている。
⇒ Keycode のダウンロードところで、上記2つの移植したプログラムでは小文字アルファベットが表示されている。
CFX-9850G 本体では、プログラム編集画面で小文字アルファベットを入力する方法が無いが、小文字を使ったプログラムを転送すると小文字が表示される。システムには既に小文字フォントが準備されていることが分かる。
プログラムリンクソフトウェアFA-124でCATファイルを開くとコードを編集できる。そこで出力文字列を小文字アルファベットに変更できる。変更後のCATファイルを保存し、CFX-9850G に転送すれば、プログラムで小文字アルファベットを表示可能になる。
▋処理速度の比較▍四則演算および関数計算
▶加算プログラム
プログラムを起動し、N に 1000 を入力して実行時間を計る。
CFX-9850G のプログラム
繰り返しに
Goto / Lbl を使うケース(左)と
For を使うケース(右)の2通りで処理速度を調べる。
▶数値積分プログラム
この通史積分は、とね日記 -
席初の手帳型プログラム関数電卓 CASIO FX-502P (1979), FX602P (1981) で取り上げられているものをそのまま使わせていただく。
プログラム起動し、分割数として 1000 を入力して、時効時間を計る。
CFX-9850G のプログラム
クリア絵師に Goto / Lbl を使うケース(左)と For を使うケース(右)の2通りで処理速度を調べる。
以前調べた結果と併せて、上記の計算速度のを比較結果を示す
[2019/07/31 修正];
| 加算プログラム | 数値積分プログラム |
機種 | 実行時間 | 比較 | 実行時間 (秒) | 比較 |
FX-502P | 123.1 秒 | --- | 1261.8 秒 | --- |
FX-602P | 111.2 秒 | 1.1 倍 | 716.5 秒 | 1.8 倍 |
FX-603P | 37.8 秒 | 3.3 倍 | 166.2 秒 | 7.6 倍 |
fx-4000P | 61.7 秒 | 2.0 倍 | 349.1秒 | 3.6 倍 |
fx-4500P | 195.0 秒 | 0.6 倍 | 798.1 秒 | 1.6 倍 |
fx-4800P | A=A+1 | 26.3 秒 | 4.7 倍 | 114.3 秒 | 11.0 倍 |
Isz A | 21.2. 秒 | 5.8 倍 | 109.4 秒 | 11.5 秒 |
fx-7000G | A=A+1 | 20.7 秒 | 5.9 倍 | 146.1 秒 | 8.6 倍 |
Isz A | 19.3 秒 | 6.4 倍 | 143.2 秒 | 8.8 倍 |
CFX-9850G | Goto | 20.9 秒 | 5.9 倍 | 98.3 秒 | 12.8 倍 |
For | 9.2 秒 | 13.4 倍 | 84.3 秒 | 15.0 倍 |
記念すべき
FX-502P を基準に、速度が何倍になっているかも併せて示している。
Basicコマンドとして追加された
For 文は効率化、高速化している。Basicコマンドは可読性向上だけでは無いことが分かる。併せて関数処理も高速化していることが分かる。
▍グラフィックス描画▶ ドット描画プログラム
fx-7000G のグラフィック画面が 95 x 63 ドットなので、それに合わせて
CFX-9850G でも 95 x 63 ドットを塗りつぶして処理速度を比較する。
fx-7000G のプログラム
CFX-9850G のプログラム
Plot を使うケース(左)と
PxlOn を使うケースの2通りで処理速度を調べる。
| Plot | PxlOn |
fx-7000G | 213 秒 | | | |
CFX-9850G | 926.5 秒 | 0.23 倍 | 496.0 秒 | 0.43 倍 |
fx-7000G では
Rangeコマンドで指定した論理座標系に従って
Plot コマンドでドットを描画する。
CFX-9860G では
ViewWindowコマンドで指定した論理座標系に従って
Plot コマンドでドットを描画する。
For 文は効率化・高速化されていることは上の例で分かっているが、ドット塗りつぶしプログラムでは
CFX-9850G がかなり処理が遅い。グラフィック画面へのデータ転送に時間がかかっており、それがボトルネックになっていると考えられる。
fx-7000G の液晶は 95 x 63 = 5985 ドット、
CGX-9850G は 127 x 63 = 8001 ドット、その差 2016 ドット。1ドット出力するたびに転送しているなら、CFX-9850G のグラフィック画面への転送は fx-7000G よりもデータが多いから転送が重い理由となり得る。
CFX-9850G には、
PxlOn コマンドが追加されている。このコマンドは左上が原点 (1, 1) の物理座標系でのドット描画コマンドであり、
Plot よりは約2倍高速だ。
PlxOn は論理座標系のように座標計算が不要なので高速になっていると考えられる。
▍画面更新プログラム
上で、画面へのデータ転送が処理速度のボトルネックになることが分かったので、頻繁に画面更新するプログラムを実行して、その処理速度を調べて比較することにする。
ところで
Getkey コマンドの追加によりテンキーと
[EXE]キーだけでなく、
[AC]を除く全てのキー入力が検知可能になり、
Locate コマンドの追加により任意の位置への出力が可能になったので、プログラムの自由度が大きく向上し、画面がスクロールしないプログラムを書けるようになった。画面がスクロールしないプログラムでは、画面更新速度は重要な評価ポイントになる。
出力画面は、テキスト画面とグラフィックス画面 (グラフ画面) の2つがあり、これらは同時に表示できない。そこでテキスト画面の高速更新プログラムとグラフィックス画面の高速更新プログラムを作成して評価に利用することにする。
第一弾として
CFX-9850G で調べる。
▶ グラフィックス画面更新プログラム - モンテカルロ法にょる円周率計算
⇒ プログラムのダウンロード - Montecar.cat を電卓に転送する
⇒ プログラムの詳細は
こちらランダムに500回点を打って出力するまでの時間を調べると、165.6 秒であった。
▶ テキスト画面更新プログラム - ピタゴラス数の計算
⇒ プログラムのダウンロード - Pytha.cat を電卓に転送する
⇒ プログラムの詳細は
こちらピタゴラス数500個を計算して結果を出力するまでの時間を調べると、294.3 秒であった。
▋プログラム電卓の系譜1996年発売の
CFX-9850G は
Getkey と
Locate コマンドを初めて搭載した、これは
Casio Basicの極めて大きな進化と言える。
世界初の手帳サイズのプログラム関数電卓として1978年に発売された
FX-502P のプログラミング言語はキーストローク型で、表示レジスタやメモリに直接アクセスして演算を行うことで効率の高い処理が行え、プログラムのサイズも小さく抑えられる。一方でコードの可読性はアセンプラに似て決して良くない。シリーズ最終の
FX-603P は1990年に発売され、CPUの高速化、メモリの増強、シリアル通信機能とPCリンク機能などハードウェアが充実しており、2006年の生産中止までの16年間製造が続いた。この間ポケットコンピュータが市場に登場し消えてゆき、プログラム関数電卓が生き残ったのは興味深い。
fx-3000Pシリーズや
fx-4000Pシリーズでは、大きく異なる2系統の言語を搭載された機種が発売された。これらはいずれもコードの可読性が向上している。シンプルな計算マクロ言語を搭載した機種も発売された。シリーズ最終の
fx-4850P は1997年に発売され、CPUの高速化、メモリ増強(26KB)などバードウェアが充実し 2006年まで生産が継続された。ハードウェアデザインやソフトウェアメニューが
fx-5800P に引き継がれたが、一方で
fx-4850P に搭載されていた言語は主流とはならず、1985年発売の
fx-4000P の搭載言語の系統がその後のグラフ関数電卓の主流となり、
fx-5800P にも搭載されたのが大変興味深い。
世界初のグラフ関数電卓
fx-7000G が1985年に発売された。
fx-4000Pシリーズの初号機
fx-4000P も同年に発売されている。
fx-7000G はグラフ機能以外は
fx-4000P と同一の関数電卓としての機能とキーレイアウト、そして同一の搭載言語を有しているのは着目すべきだろう。
fx-7000G と
fx-4000P が同時開発された可能性が考えられるが、それが偶然なのか意図的なのかは大変興味がある。
いずれにせよ、グラフ関数電卓初代の
fx-7000G の言語系統がそのままグラフ関数電卓で発展してきている。これはネットで確認できるマニュアルを調べると明らかだ。1995年フランスモデルとして発売されたグラフ関数電卓
GRAPH 20、そして1996年に世界で発売された
fx-7400G で初めてBasicコマンドが追加された。追加されたのは 条件分岐
(If) とループ
(For, Do, While) 関連のコマンドで、処理効率の向上が図られた。また明らかにコードの可読性も向上した。
Casio Basic の登場である。しかし残念なことに、入力がテンキーと
[EXE]キーに限定されており、出力位置もプログラムで制御できないものであった。
1996年に発売された
CFX-9850G では、[AC]キー以外の全てのキーの入力を検知できる
Getkey コマンド、そして任意の位置に出力できる
Locate コマンドが追加された。このたかだか2つのコマンドの追加により、プログラムの自由度が飛躍的に向上した。大きな進化と言える。現行の最新機種
fx-CG50 や1つ前の
fx-9860GII で動作するプログラムの多くが、
CFX-9850G で動作するのは、その進化の大きさを示している。
但し
CFX-9850G は、行頭に改行があると Syn ERROR となり、空行が許されない。さらに
If 文で使う
Then と
Else の直後が改行だと Syn ERRORになってしまう。この残念な仕様のためコードの可読性が損なわれている。
それだけではなく、行列の初期化コマンドが無いので変数を用いた行列の初期化ができない、現行最新機種に搭載されている便利な関数が不足しているなど、まだ発展途上と言える。
なお、ドット描画コマンド Plot と PxlOn / PxlOff の詳細仕様が現行の最新機種とは異なり、理解できない動作をする。これについては
温故知新 - CFX-9850GC PLUS で述べる。
温故知新 - FX-502P / FX-602P / FX-603P温故知新 - fx-4000P / fx-4500P / fx-4800P温故知新 - fx-7000G温故知新 - CFX-9850G
温故知新 - CFX-9850GC PLUS温故知新 - fx-9860G温故知新 - fx-5800P温故知新 - fx-9860GII
温故知新 - fx-CG20
温故知新 - fx-CG50
温故知新 - fx-CP400
温故知新:番外編 - 関数電卓としての使い勝手応援クリックをお願いします。励みになるので...