温故知新 - CFX-9850GC PLUS
プログラム電卓 温故知新
- 搭載プログラミング言語に注目して、プログラム電卓の変遷を考える -
2019/06/23
追記修正 2020/01/04
追記修正 2021/01/11
追記修正 2021/08/15
過去から現在に至る性能や仕様の変化を調べ、プログラミング言語を中心にカシオ製プログラム電卓の系譜を明らかにする。
5. 新世代 Casio Basic 登場前夜 - 可読性と機能の向上(2)
今回は、2004年発売の CFX-9850GC PLUS を取り上げる。国内では 2005年1月に発売された。海外では2010年まで発売されていたが、国内では2006年には生産中止扱いになり、2007年にはカタログに掲載されなくなった。国内でのカタログ掲載期間は1年8ヶ月と短かった。
▶ 2005年1月発行のカシオ電卓総合カタログ
▶ 2006年9月発行のカシオ電卓総合カタログ
カシオ機に搭載されたプログラム言語で、Basicコマンドが追加されたものを欧米のプログラム電卓コミュニティでは Casio Basic と呼ばれている。私も当ブログ開設当初から Casio Basic という呼称を使っていた。
Casio Basic に Getkey と Locate が追加されたのが CFX-9850G であった。その後、コマンドや関数が追加され、シリーズ最終の CFX-9850GC PLUS が登場した。この機種の後継として fx-9860G が発売され、これ以降の機種に搭載された言語を当ブログでは "次世代Casio Basic" と呼称している。
fx-9860G の1つ前の機種である CFX-9850GC PLUS はCFXシリーズの最終形であり、新世代Casio Basic 登場前夜と言える。
▋Casio CFX-9850GC PLUS


2004年海外で発売、2005年1月 に国内発売開始、海外では2004年発売。
カタログ 取扱説明書 (Casioサイト) 取扱説明書 (e=Gadgetサイト)
64KBのメモリ領域にシステムも含まれており、それ以外がプログラムやデータに使える。取扱説明書の表紙から分かるのは、fx-9750G PLUS(モノクロ液晶)など複数の機種とほぼ共通の仕様になっている。
取扱説明書で分からない Casio Basic の使いこなし が当ブログのメインテーマなので、実際に触ってみたいと思い、以前から中古品を探していた。
▋実際に入手した CFX-9850GC PLUS
幸運なことに、eBayで "未使用品 - 動作確認のため開封" というものを見つけたので入手した。EU域内保証書が添付されていた。
実際に傷や汚れが一切なく、新品状態であった。
CFXシリーズは、3色カラー液晶搭載のグラフ関数電卓で、デフォルトがブルーで、オレンジとグリーンを追加した3色が使える。実際の画面は、輝度も色もコントラストが低い。液晶を見る角度でコントラストや色合いが大きく変化するのも見づらさの原因だ。明るいところでは問題ないが、少し暗くなると見づらいと感じる。実際にしばらく使い続けると多少は慣れた。
fx-9860GIIシリーズのメニュー画面を比較する。
液晶のバックグランドが黄色みが強いことも視認性の悪さの原因だと感じる。
また、この3色カラー液晶は応答性が悪い。
なお、CFX-9850GC PLUSの液晶画面のサイズは、fx-9860Gシリーズと比較すると小さいことが分かる。
▋関数電卓としての性能 [2019/06/25 追記]
キーの種類と配置は、後継機のfx-9860Gシリーズと同じになっている。但し、[SHIFT] と一緒に押して選ぶ裏の機能やファンクションメニューの機能は fx-9860G よりは少なく、当然ながら後継機で進化しているわけだ 。
▶分数表示と演算精度
235÷658 を計算すると 0.3571428571 と表示される。計算精度は内部15桁で、後継機種 fx-9860Gと同じ。
ここで、[F↔D] キーを押しても 5/14 にはならない。ここは、後継機種 fx-9860Gと異なる。
▶複素指数関数
eπi を計算してみる。計算できれば答えは -1 になる。
fx-9850GC PLUS では複素指数関数の計算ができず、演算エラー(Ma ERROR) になる。但し、複素数の加減乗除はできる。
後継機種の fx-9860G以降のモデルでは複素指数関数の計算に対応している。
▋搭載言語 (Casio Basic) の概要 [2019/8/18 追記]
追加されているBasicコマンドによりプログラムの可読性と機能が向上し、さらに Getkey と Locate が追加されているのでプログラムの自由度が向上している。さらに CFX-9850G よりも関数が追加されている。
▶ 主なコマンド
- 入力:?→, 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 が追加されているが ClrMat が無いので、プログラム内で行列領域を削除できない。
- 各種関数
但し、以下の要因により可読性が損なわれている。
- Then / Else 直後の改行:Syn ERROR になる
- 行頭での改行 (空白行):Sys ERROR になる
▶ 主なグラフィック コマンド
- グラフ設定:CoordOn/CoordOff, GridOn/GridOff,
AxesOn/AxesOff, LabelOn/LabelOff
- 座標系設定:ViewWindow,
Xmax/Xmin/Xscl/Xfct, Xdot, Ymax/Ymin/Yscl/Yfct Xdotが追加されている
- 消去コマンド:ClrGraph, Cls
- Sketchコマンド:Plot, PlotOn/PlotOff, PlotChg, LINE,
PxlOn, PxlOff, PxlTest, Text,
F-Line, Vertical, Horizontal, Circle
- 各種グラフコマンド
但し、Plot, PlotOn, PlotOff, PlotChg, PxlOn, PxlOff, PxlChg, Circle の詳細仕様は、後継の fx-9860G 以降とは異なる。CFX-9850GC PLUS ではこれらのコマンドのパラメータに X, Y を使うと誤動作する。X, Y は内部動作のために予約されていると思われ、これらのコマンドを実行すると予期せぬ値が X, Y に自動的に入力されてしまう。つまり、X, Y をパラメータに使ってはいけない。
後継機種である fx-9860G 以降 fx-CG50 までのグラフ関数電卓では上記のコマンド実行後に、それぞれのコマンドの詳細仕様に従った正しい値が X と Y に自動的に入力される。つまり、その詳細仕様を理解していれば上記のコマンドのパラメータに X, Y を使える。
▋プログラムの作成と実行
キーコード取得プログラム GETKEY を入力してみた。コマンドを入力するためのキー (キープレス) は、fx-9860Gシリーズや最新の fx-CGシリーズと全く同じだ。言語機能の基本仕様はこの機種の頃から固まっていることが分かる。
ファイル名:GETKEY
Locate 1,1,"=== GET KEYCODE ==="
Locate 1,3,"KEYCODE ="
Locate 10,5,"HIT ANY KEY"
Locate 13,7,"[AC]:QUIT"
Do
While Getkey
WhileEnd
Do:Getkey→K
LpWhile K=0
Locate 9,3,"= " (スペース6個)
Locate 11,3,K
LpWhile 1
[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 には、プログラム名 (ファイル名) は入力した順序で並んでおり、アルファベット順になっていない。プログラムの数が多いと、編集あるいは実行したいプログラムを探すのが楽ではない。
CFX-9850GC PLUS の Program List でプログラムを探す最善の方法は、サーチ(検索)機能だ。Program List 画面で [F6] (▷) - [F1] (SRC) と押せば Search For Program 画面が現れるので、そこで探しているプログラム名の頭のアルファベットを押せば良い。すると同じ頭文字で始まるプログラム名が全て表示される。この機能は必須だ。
ところで、取扱説明書には、以下の記述がある。

繰り返し計算や複雑な計算を便利に実行するのが、プログラム機能の主目的だと考えれば、プログラム終了後に Program List 画面に戻らず、RUMモードになる仕様は、理にかなっている。
▋プログラムの編集 [2019/07/01 修正]
プログラム編集画面は、極めて使いにくい。
パソコンで文章を書く時は、通常は挿入モードで利用しているはずで、上書きモードは必要な時のみ切り替えて使うと思う。fx-9860Gシリーズや fx-CGシリーズでも、プログラム編集画面は常に挿入モードになっていて、必要な時に [SHIFT]-[DELL](INS) と押して上書きモードに切り替えて使う。
ところが、CFX-9850GC PLUS は、通常が上書きモードになっていて、[SHIFT]-[DELL](INS) を押して挿入モードに切り替える必要がある。一旦挿入モードに切り替えると、改行を超えない範囲でカーソル移動する限りは挿入モードが維持されるが、カーソルが改行を超えると上書きモードに戻ってしまう。改行から改行までを1行として認識し、その行内なら挿入モードが維持されるのは、ラインエディタの仕様をそのままマルチラインのエディタに持ち込んでると考えるのが妥当であろう。そのためマルチラインエディタとして編集の利便性が得られず残念な仕様と言える。
昔のプログラム電卓やポケコンで、区切り文字を使ってプログラムをズラズラと1行に書く時の仕様を、そのまま引きずっているのではないかと想像している。
▋プログラムの転送 [2019/08/15 追記修正]
▶ 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様により互換ケーブルが有償頒布されている。SB-62 は fx-9860Gシリーズや fx-CGシリーズの国内正規版には標準添付されている。
PCへ転送されるファイルは CAT ファイル (拡張子 cat) だ。CATファイルには複数プログラムを格納できる。
具体的な操作方法は FA-124 のマニュアルを参照のこと。
ところで、電卓本体右下にある3pinコネクタには、防塵防滴用と思われるゴム製の "栓" が刺さっている。ある程度使われた中古品だとこれが無くなっているケースが多いのではないかと思う。無くしやすいので要注意だ。
▋fx-9860Gシリーズからのプログラムの移植
以前作ったプログラムの入った fx-9860Gシリーズと CFX-9850GC PLUS を 3pinケーブル (SB-62) で接続し、プログラムを CFX-9850GC PLUS に転送する。次にプログラムを走らせ、エラーが出たら [◀] か [▶] キーを押すとエラーが発生したコマンドにカーソルが表示されている。そこでカーソルのある部分を修正できるので、移植作業は比較的楽だ。当然エラーが発生している原因と対策を知っておく必要がある。具体的には、以下で紹介しているので、参照ください。
▍テキストベース・プログラム
▶ モグラ叩きゲーム
以前作ったアクションゲーム - "Whack-a-Mole(もぐら叩き)" を転送して、必要な変更を行ってから遊んでみた。ついでにトップ画面のタイトルをオレンジにしてみた。デフォルトはブルーになっている。
ここで転送して修正したプログラムファイルは、WHACKAMO、WAM、INPI の3つだ。
⇒ プログラムのダウンロード - ダウンロードした Whackamo.cat には上記3つのプログラムを含む
CFX-9850GC PLUS の処理速度に対応するために、WHACKAMO の冒頭にある変数A の初期化を 2→A と変更しただけで、ロジックは変えていない。他は CFX-9850GC PLUS の搭載言語の制限に合わせて、エラーが出なくなるように修正を行うだけで移植は完了する。搭載言語のこの制限と修正方法については後述する。
実際に遊んでみると、液晶のハードウェアとしての応答性が悪い割にはゲームとして遊べて、それほど悪い感じはしない。表示が始まってところで反応できるから、表示が完了するまでのタイムラグが問題にならないのだろうと思う。
▶キーコード取得プログラム
以前作ったキーコード取得プログラムを転送し、エラーが出なくなるように必要な修正を行って CFX-9850GC PLUS / fx-9750G 専用に変更した。
⇒ プログラムのダウンロード - Keycode.cat
左:起動直後の画面、右:キーコード取得プログラム、[EXIT] キーを押してみたところ。
CFX-9850GC PLUS と fx-9860Gシリーズ / fx-CG シリーズは、全く同じキーを備えており、キーコードも同一になっている。従って、CFX-9850GC PLUS 特有の修正を行えば、ロジックや数値を変更せずに移植が可能となる。
さて、このプログラムや上のモグラ叩きゲームで、アルファベットの小文字が表示されていることにお気づきだろうか?
CFX-9850GC PLUS 本体では、プログラム編集画面で小文字アルファベットを入力する方法が見つからない。ところが、小文字を使ったプログラムを fx-9860Gシリーズから転送したら小文字が表示されているのだ。
システムには既に小文字フォントが準備されていて、コードさえ入力されればプログラムで使えるようになっている。fx-5800P も同じ事情で、CcEditor / CcLinker を使えば 小文字アルファベットやその他フォントが使える。
▶温度換算プログラム
以前作った温度換算プログラムを転送し、エラーが出なくなるように必要な修正を行った。
ここで、転送・修正したプログラムファイルは、TEMPCONV と IN の2つだ。
⇒ プログラムのダウンロード - ダウンロードした TempConv.cat には TEMPCONV と IN が含まれる
プログラムの構造、ロジックは全く変更せず、プログラムが正常に動作する。
▶和暦-西暦換算・年齢推定プログラム - あの人の歳は今いくつ?
以前作った 和暦-西暦換算・年齢推定プログラムを転送して、エラーを解消する変更を実施した。長押し判定のカウンタの初期値Lを実機の処理速度に合わせて30に変更した (プログラム冒頭に 30→L と変更)。
転送・修正したプログラムファイルは、YEARCONV、YRC、YRD、INPI の4つだ。
⇒ プログラムのダウンロード - ダウンロードした YearConv.cat には YEARCONV, YRC, YRD, INPI の4つが含まれる。
ある程度複雑な構造でも、CFX-9850CG PLUS 搭載言語の制限や欠点を理解すれば、移植できることが分かった。
▋CFX-9850GC PLUS でのプログラミング
▍プログラミング上の制限と注意点 - fx-9860Gシリーズ / fx-CGシリーズとの比較
▶空行 (改行のみの行) はSyn ERROR になる
※対策:空行を削除する
対策を実施すると、ソースコードが非常に見づらくなる。特にブロック構造を意識した分かりやすいプログラミングには困った仕様だ。幸いコメントアウト ' が使えるので、空行の代わりに
'==
などと書けば良いが、ソースレベルでブロック構造を分かりやすく見るには空行はとても便利だ。それが出来ないのは発展途上の欠点だと敢えて申し上げたい。これは、昔の1行プログラミングの時代の影響を引きすっていると感じられる。
▶Then / Else の直後を改行すると Syn ERROR になる
※対策:Then / Else 直後の改行を削除する
対策を実施すると、ソースコードが見づらくなる。上の空行禁止を組み合わさると、If ステートメントが非常に分かりにくくなる。ソースレベルで、ブロック構造を意識した見やすいコードを書けないにのは困った仕様だ。
これも、昔の1行プログラミングの影響をまだ引きずっている結果だと感じられる。
▶ループ (While / Do) の2重構造で、内側のループと If の入れ子構造が共存すると IfEnd のところで Syn ERROR になる
※対策:外側のWhile / Do を Lbl / Goto に置き換える。Break が有れば新たに Goto ジャンプに置き換える
対策を施すと、スパゲティ化の第一歩となり、分かりやすいブロック構造を意識したプログラミングの大敵だ。個人的には最大の問題と感じている。
このエラーは、上記の 温度換算プログラムと和暦・西暦換算・年齢推定プログラムをfx-9860GII から転送して発見した。
While / Do と If の構造制御のスタック管理に失敗しているバグと考えている。昔は Goto / Lbl しか無かったところに構造制御ステートメントを追加している過渡期に潜り込んだバグがまだ解消していないのだろう。
取扱説明書の第22章ライブラリー編に掲載されているサンプルプログラムでは、構造制御に While / Do を使ったものが無く、全て Lbl / Goto が使われていることから、この時点で While / Do の機能が不完全だったと考えている。
▶出力 "" で内部カーソルが改行されない
※対策:"" で内部カーソルの改行機能を当てにせず Locate で表示位置を明示的に指定する
"" はNOP (何もしない) 処理になっているかも知れない。
"" で内部カーソル行を制御しているプログラム (fx-5800P や fx-9860G 以降のグラフ関数電卓で正常動作しているもの) を転送した場合、CFX-9850GC PLUS では画面配置が崩れる。
▶行末に区切り文字 : があると Syn ERROR になる
※対策:行末の区切り文字 : を削除する
対策を実施しても大きな問題はない。
区切り文字は改行と同じ内部実装になっていれば、空行でエラーになるのと同じ原因なのだろう。
▶カラーコマンドは " " 出力には有効だが、Locate 出力には無効 [2019/05/25 追記]
※対策:有効な対策はない。"" で内部カーソルが改行されないので Locate を " "出力に変更できないことが多いためだ。
カラーコマンドには、Orange と Green がある。Orange "String" と書けば String がオレンジ色で表示される。
一方、Locate コマンドで出力する場合は、カラーコマンドを追加すると Syn ERRORになる。
▶出力文字列に : を含む行を ' でコメントアウトすると Syn ERRORになる
※対策:機切り文字 : の直後に ' を付加する
この問題は、fx-9860Gシリーズや fx-CGシリーズにも残っており、カシオは操作マニュアルを修正して対応している。
詳しくは 楽屋裏 - Casio Basic コメントアウト ' のバグ を参照
▶出力文字列に : を含んでも Syn ERRORにならない
これは、後継機種の fx-9860Gの OS2.1 かそれ以前のバージョンではエラーになっており、OS2.04 以降で修正されており、この修正は fx-9860GII や fx-CG20、そして最新の fx-CG50 まで維持されている。それなのに fx-9860G よりも古い CFX-9850GC PLUS で同じエラーが発生するかと思えば、エラーにならないのは、面白い。
改行のみの空行や区切り文字が行末にあることを許すように変更した際に、新たにバグが入り込んだと推測される。細かいようではあるが、このような開発の苦労や経緯が透けてくるのは面白い。
▶出力命令 " " では1文字ごとに出力する
"Strings" を実行するとタイプライターのように1左から1文字づつ出力される。一方 Locate 1,1,"Strings" を実行すると、文字列が一度に出力される。
▶fx-9860Gシリーズ以降の機種からの移植では、実装されていない関数やコマンドで Syn ERROR
※対策:使えるコマンドを使って別表現に変更する (当たり前ですね)
今回移植を試みたプログラムには一例として、RanInt#( があったので、それぞれ以下のように別表現にした。
- RanInt#(1,9) を Int(90Ran#÷10)+1 に変更
- RanInt#(1,3) を Int(30Ran#÷10)+1 に変更
- RanInt#(0,9) を Int(10Ran#) に変更
▶Do / While / For ループからの脱出に Dsz / Isz を使うと Syn ERROR になる [2019/06/30 追記]
※対策:ループを Lbl / Goto に置き換えるか、ループ脱出に Break を使う
この現象は、fx-5800P や fx-9860G 以降のグラフ関数電卓でも存在することが確認されている。
⇒ 楽屋裏 - Dsz にとるループ脱出 参照
カシオとのやりとりの結果、ループの後 (必ずしも直後でなくても良い) に Goto 0:Lbl 0 と記述することでこのエラーを回避できることが分かっている (詳細は上記記事参照)。ところが、CFX-9850GC PLUS では、この対処方法が効かない。
▋処理速度の比較
▍四則演算および関数計算
▶加算プログラム
プログラムを起動し、N に 1000 を入力して実行時間を計る。
CFX-9850GC PLUS のプログラム
繰り返しに Goto / Lbl を使うケース(左)と For を使うケース(右)の2通りで処理速度を調べる。
▶数値積分プログラム
この通史積分は、とね日記 - 席初の手帳型プログラム関数電卓 CASIO FX-502P (1979), FX602P (1981) で取り上げられているものをそのまま使わせていただく。
プログラム起動し、分割数として 1000 を入力して、時効時間を計る。
CFX-9850GC PLUS のプログラム
クリア絵師に Goto / Lbl を使うケース(左)と For を使うケース(右)の2通りで処理速度を調べる。
以前調べた結果と併せて、上記の計算速度のを比較結果を示す [2019/07/31 修正];
記念すべき FX-502P を基準に、速度が何倍になっているかも併せて示している。
Basicコマンドとして追加された For 文は効率化、高速化している。Basicコマンドは可読性向上だけでは無いことが分かる。併せて関数処理も高速化していることが分かる。但し、CFXシリーズ初号機である CFX-9850G よりは少し遅くなっている。インタープリター言語なので、コマンドが追加されたことが原因だと思われる。
▍グラフィックス描画
▶ ドット描画プログラム
fx-7000G のグラフィック画面が 95 x 63 ドットなので、それに合わせて CFX-9850GC PLUS でも 95 x 63 ドットを塗りつぶして処理速度を比較する。
fx-7000G のプログラム
CFX-9850GC PLUS のプログラム
Plot を使うケース(左)と PxlOn を使うケースの2通りで処理速度を調べる。
CFX-9850G と全く同じコードであるにも関わらず、CFX-9850GC PLUS では遅くなっている。
PxlOn によるドット描画は、CFX-9850G の2倍の時間がかかった。
fx-7000G と比べると、処理が4倍以上遅くなった。
▍画面更新プログラム
上で、画面へのデータ転送が処理速度のボトルネックになることが分かったので、頻繁に画面更新するプログラムを実行して、その処理速度を調べて比較することにする。
ところで Getkey コマンドの追加によりテンキーと[EXE]キーだけでなく、[AC]を除く全てのキー入力が検知可能になり、Locate コマンドの追加により任意の位置への出力が可能になったので、プログラムの自由度が大きく向上し、画面がスクロールしないプログラムを書けるようになった。画面がスクロールしないプログラムでは、画面更新速度は重要な評価ポイントになる。
出力画面は、テキスト画面とグラフィックス画面 (グラフ画面) の2つがあり、これらは同時に表示できない。そこでテキスト画面の高速更新プログラムとグラフィックス画面の高速更新プログラムを作成して評価に利用することにする。
CFX-9850GC PLUS で調べる。
以下は CFX-9850G の結果で、CFX-9850GC PLUS のデータを後日追加する。
▶ グラフィックス画面更新プログラム - モンテカルロ法にょる円周率計算
⇒ プログラムのダウンロード - Montecar.cat を電卓に転送する
⇒ プログラムの詳細はこちら
ランダムに500回点を打って出力するまでの時間を調べる。
▶ テキスト画面更新プログラム - ピタゴラス数の計算
⇒ プログラムのダウンロード - Pytha.cat を電卓に転送する
⇒ プログラムの詳細はこちら
ピタゴラス数500個を計算して結果を出力するまでの時間を調べる。
[2020/01/04 追記]
Getkey と Locate が初めて搭載された CFX-9850G と CFX-9850GC PLUS の結果を比較した。
CFX-9850G に比べてグラフィック画面出力 (MONTECAR) と テキスト画面出力 (PYTHA) ともに遅くなった。
特に、テキスト画面への繰り返し出力は60%程度に速度低下している。関数やコマンドが追加されたので、当然ながら処理が遅くなったと言える。速度向上には、CPUやOSの大きな改訂が必要であり、次の機種である fx-0860G でそれが実現されている。
▋プログラム電卓の系譜 [2019/08/15 追記修正]
CFXシリーズの最終機種である CFX-9850GC PLUS は、CFX-シリーズの初号機 CFX-9850G と同じ仕様の言語を搭載しているが、処理速度が遅くなっている。CFX-9850G よりも関数や機能が増強されているので多少処理が遅くなるだろうと思う。しかしグラフィックスのドット描画については、特に PxlOn の処理が倍程度遅くなっているのは意外であった、
さて、CFX-9850GC PLUS に搭載されたプログラミング言語は、CFX-9850G と同様に Baiscコマンドとして If / For / While / Do / Getkey / Locate などが追加されているが、編集画面で考えながらコーディングするのは難しいと思う。
後継機種である fx-9860G では、搭載言語と編集画面の大幅な修正が行われた。この改良は、fx-9860G と同年に発売された fx-5800P にも反映されている。
編集画面については、FX-502P / FX-602P / FX-603P では、デフォルトで挿入モードになっており、必要に応じて 上書きモードに切り替える仕様になっている。ところが、その後の fx-3650P や fx-4000P シリーズ、fx-7000G シリーズ そして CFXシリーズの最終モデル CFX-9850GC PLUS に至るまで、デフォルトで上書きモードになっていた。
当時、欧米市場での競合であった TI の電卓でも84シリーズのような古くからある機種では上書きモードが主流であった (sentaro様による情報、コメント欄参照)。
ところが、2005年に発売された機種、fx-71F、fx-5800P、fx-9860G では、一斉に挿入モードに切り替わっている。プログラミングのできない関数電卓においても、fx-991MS まではデフォルトで上書きモードで、2005年発売の次機種 fx-991ES から挿入モードに切り替わっている (2005年1月の電卓総合カタログ参照。
[2019/07/01 追記]
コメント欄に情報をお寄せいただいたsentaro様によれば、SHARP製の関数電卓も以前は上書きモードだったが、2004年以降のモデルは挿入モードに変わっているとのこと。Casioとほぼ同時期に変更されているようだ。
sentaro様の考察によれば(コメント欄参照)、欧米、特に北米での学校販売ビジネスでしのぎを削っていた TI 機と使い勝手の異なる挿入モード機を一斉に投入するには、ビジネス上のリスクを伴う大きな判断があったに違いないとのことだ。私もそれに賛同する。その上で、一斉に挿入モードに切り替えたのは、グラフ関数電卓やプログラム関数電卓の将来の目標 / ビジョンがあったのではないかと私は想像している。それは計算補助のマクロ機能を超えて、より柔軟な一般的なプログラミングが可能な言語仕様を目指すことであった、と想像している。
Locate や Getley コマンドの存在は、スクロールしないプログラムを可能にするが、これらのコマンドは CFXシリーズの初代 CFX-9860G に初めて追加された。CFXシリーズは、プログラム関数電卓、ポケコン、グラフ関数電卓それぞれで個別に開発が進んでいた搭載言語が、ようやく1つの方向性に収束し、Locate / Getkey コマンドを追加することで柔軟なプログラミングが可能になり、大きく進化した。3色限定とは言えカラー表示を可能にしたのも CFXシリーズの特徴であり、各種コマンドや関数を増強した最終機種 CFX-9850GC PLUS は、カシオ機搭載のプログラミング言語の歴史の重要な転換点を示しており、次世代Casio Basic 登場前夜の記念すべきモデルと言える。
Casio Baisc は fx-9860G シリーズでさらに進化してゆく。
温故知新 - 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-CG10 / CG20
温故知新 - fx-CP400
温故知新 - fx-CG50
温故知新 - fx-9750GIII
温故知新:番外編 - 関数電卓としての使い勝手
温故知新:番外編 - 電卓評価用の積分を解いてみた
温故知新:番外編 - 電卓評価用の複素数を解いてみた
応援クリックをお願いします。励みになるので...
- 搭載プログラミング言語に注目して、プログラム電卓の変遷を考える -
2019/06/23
追記修正 2020/01/04
追記修正 2021/01/11
追記修正 2021/08/15
過去から現在に至る性能や仕様の変化を調べ、プログラミング言語を中心にカシオ製プログラム電卓の系譜を明らかにする。
5. 新世代 Casio Basic 登場前夜 - 可読性と機能の向上(2)
今回は、2004年発売の CFX-9850GC PLUS を取り上げる。国内では 2005年1月に発売された。海外では2010年まで発売されていたが、国内では2006年には生産中止扱いになり、2007年にはカタログに掲載されなくなった。国内でのカタログ掲載期間は1年8ヶ月と短かった。
▶ 2005年1月発行のカシオ電卓総合カタログ
▶ 2006年9月発行のカシオ電卓総合カタログ
カシオ機に搭載されたプログラム言語で、Basicコマンドが追加されたものを欧米のプログラム電卓コミュニティでは Casio Basic と呼ばれている。私も当ブログ開設当初から Casio Basic という呼称を使っていた。
Casio Basic に Getkey と Locate が追加されたのが CFX-9850G であった。その後、コマンドや関数が追加され、シリーズ最終の CFX-9850GC PLUS が登場した。この機種の後継として fx-9860G が発売され、これ以降の機種に搭載された言語を当ブログでは "次世代Casio Basic" と呼称している。
fx-9860G の1つ前の機種である CFX-9850GC PLUS はCFXシリーズの最終形であり、新世代Casio Basic 登場前夜と言える。
▋Casio CFX-9850GC PLUS


2004年海外で発売、2005年1月 に国内発売開始、海外では2004年発売。
カタログ 取扱説明書 (Casioサイト) 取扱説明書 (e=Gadgetサイト)
64KBのメモリ領域にシステムも含まれており、それ以外がプログラムやデータに使える。取扱説明書の表紙から分かるのは、fx-9750G PLUS(モノクロ液晶)など複数の機種とほぼ共通の仕様になっている。
取扱説明書で分からない Casio Basic の使いこなし が当ブログのメインテーマなので、実際に触ってみたいと思い、以前から中古品を探していた。
▋実際に入手した CFX-9850GC PLUS
幸運なことに、eBayで "未使用品 - 動作確認のため開封" というものを見つけたので入手した。EU域内保証書が添付されていた。


実際に傷や汚れが一切なく、新品状態であった。
CFXシリーズは、3色カラー液晶搭載のグラフ関数電卓で、デフォルトがブルーで、オレンジとグリーンを追加した3色が使える。実際の画面は、輝度も色もコントラストが低い。液晶を見る角度でコントラストや色合いが大きく変化するのも見づらさの原因だ。明るいところでは問題ないが、少し暗くなると見づらいと感じる。実際にしばらく使い続けると多少は慣れた。

fx-9860GIIシリーズのメニュー画面を比較する。


また、この3色カラー液晶は応答性が悪い。
なお、CFX-9850GC PLUSの液晶画面のサイズは、fx-9860Gシリーズと比較すると小さいことが分かる。

▋関数電卓としての性能 [2019/06/25 追記]
キーの種類と配置は、後継機のfx-9860Gシリーズと同じになっている。但し、[SHIFT] と一緒に押して選ぶ裏の機能やファンクションメニューの機能は fx-9860G よりは少なく、当然ながら後継機で進化しているわけだ 。
▶分数表示と演算精度
235÷658 を計算すると 0.3571428571 と表示される。計算精度は内部15桁で、後継機種 fx-9860Gと同じ。
ここで、[F↔D] キーを押しても 5/14 にはならない。ここは、後継機種 fx-9860Gと異なる。
▶複素指数関数
eπi を計算してみる。計算できれば答えは -1 になる。

fx-9850GC PLUS では複素指数関数の計算ができず、演算エラー(Ma ERROR) になる。但し、複素数の加減乗除はできる。
後継機種の fx-9860G以降のモデルでは複素指数関数の計算に対応している。
▋搭載言語 (Casio Basic) の概要 [2019/8/18 追記]
追加されているBasicコマンドによりプログラムの可読性と機能が向上し、さらに Getkey と Locate が追加されているのでプログラムの自由度が向上している。さらに CFX-9850G よりも関数が追加されている。
▶ 主なコマンド
- 入力:?→, 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 が追加されているが ClrMat が無いので、プログラム内で行列領域を削除できない。
- 各種関数
但し、以下の要因により可読性が損なわれている。
- Then / Else 直後の改行:Syn ERROR になる
- 行頭での改行 (空白行):Sys ERROR になる
▶ 主なグラフィック コマンド
- グラフ設定:CoordOn/CoordOff, GridOn/GridOff,
AxesOn/AxesOff, LabelOn/LabelOff
- 座標系設定:ViewWindow,
Xmax/Xmin/Xscl/Xfct, Xdot, Ymax/Ymin/Yscl/Yfct Xdotが追加されている
- 消去コマンド:ClrGraph, Cls
- Sketchコマンド:Plot, PlotOn/PlotOff, PlotChg, LINE,
PxlOn, PxlOff, PxlTest, Text,
F-Line, Vertical, Horizontal, Circle
- 各種グラフコマンド
但し、Plot, PlotOn, PlotOff, PlotChg, PxlOn, PxlOff, PxlChg, Circle の詳細仕様は、後継の fx-9860G 以降とは異なる。CFX-9850GC PLUS ではこれらのコマンドのパラメータに X, Y を使うと誤動作する。X, Y は内部動作のために予約されていると思われ、これらのコマンドを実行すると予期せぬ値が X, Y に自動的に入力されてしまう。つまり、X, Y をパラメータに使ってはいけない。
後継機種である fx-9860G 以降 fx-CG50 までのグラフ関数電卓では上記のコマンド実行後に、それぞれのコマンドの詳細仕様に従った正しい値が X と Y に自動的に入力される。つまり、その詳細仕様を理解していれば上記のコマンドのパラメータに X, Y を使える。
▋プログラムの作成と実行
キーコード取得プログラム GETKEY を入力してみた。コマンドを入力するためのキー (キープレス) は、fx-9860Gシリーズや最新の fx-CGシリーズと全く同じだ。言語機能の基本仕様はこの機種の頃から固まっていることが分かる。
ファイル名:GETKEY
Locate 1,1,"=== GET KEYCODE ==="
Locate 1,3,"KEYCODE ="
Locate 10,5,"HIT ANY KEY"
Locate 13,7,"[AC]:QUIT"
Do
While Getkey
WhileEnd
Do:Getkey→K
LpWhile K=0
Locate 9,3,"= " (スペース6個)
Locate 11,3,K
LpWhile 1

[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 には、プログラム名 (ファイル名) は入力した順序で並んでおり、アルファベット順になっていない。プログラムの数が多いと、編集あるいは実行したいプログラムを探すのが楽ではない。
CFX-9850GC PLUS の Program List でプログラムを探す最善の方法は、サーチ(検索)機能だ。Program List 画面で [F6] (▷) - [F1] (SRC) と押せば Search For Program 画面が現れるので、そこで探しているプログラム名の頭のアルファベットを押せば良い。すると同じ頭文字で始まるプログラム名が全て表示される。この機能は必須だ。
ところで、取扱説明書には、以下の記述がある。

繰り返し計算や複雑な計算を便利に実行するのが、プログラム機能の主目的だと考えれば、プログラム終了後に Program List 画面に戻らず、RUMモードになる仕様は、理にかなっている。
▋プログラムの編集 [2019/07/01 修正]
プログラム編集画面は、極めて使いにくい。
パソコンで文章を書く時は、通常は挿入モードで利用しているはずで、上書きモードは必要な時のみ切り替えて使うと思う。fx-9860Gシリーズや fx-CGシリーズでも、プログラム編集画面は常に挿入モードになっていて、必要な時に [SHIFT]-[DELL](INS) と押して上書きモードに切り替えて使う。
ところが、CFX-9850GC PLUS は、通常が上書きモードになっていて、[SHIFT]-[DELL](INS) を押して挿入モードに切り替える必要がある。一旦挿入モードに切り替えると、改行を超えない範囲でカーソル移動する限りは挿入モードが維持されるが、カーソルが改行を超えると上書きモードに戻ってしまう。改行から改行までを1行として認識し、その行内なら挿入モードが維持されるのは、ラインエディタの仕様をそのままマルチラインのエディタに持ち込んでると考えるのが妥当であろう。そのためマルチラインエディタとして編集の利便性が得られず残念な仕様と言える。
昔のプログラム電卓やポケコンで、区切り文字を使ってプログラムをズラズラと1行に書く時の仕様を、そのまま引きずっているのではないかと想像している。
▋プログラムの転送 [2019/08/15 追記修正]

3pin-USBケーブル (SB-88) と プログラムリンク ソフトウェア (FA-124) を使えばPCリンクや電卓の画面取得が可能になる。
3pin-USBケーブル (SB-88)
現在は製造中止品だが、takumako様により互換ケーブルが有償頒布されているので私はこれを利用した。
プログラムリンク ソフトウェア (FA-124)
カシオのサイトから無償ダウンロードできる。
▶ 電卓間転送
3pin-3pinケーブル (SB-62) を使えば、3pin端子のあるグラフ関数電卓とプログラムの転送ができる。
3pin-3pinケーブル (SB-62)
まだ販売されているが、takumako様により互換ケーブルが有償頒布されている。SB-62 は fx-9860Gシリーズや fx-CGシリーズの国内正規版には標準添付されている。
PCへ転送されるファイルは CAT ファイル (拡張子 cat) だ。CATファイルには複数プログラムを格納できる。
具体的な操作方法は FA-124 のマニュアルを参照のこと。
ところで、電卓本体右下にある3pinコネクタには、防塵防滴用と思われるゴム製の "栓" が刺さっている。ある程度使われた中古品だとこれが無くなっているケースが多いのではないかと思う。無くしやすいので要注意だ。
▋fx-9860Gシリーズからのプログラムの移植
以前作ったプログラムの入った fx-9860Gシリーズと CFX-9850GC PLUS を 3pinケーブル (SB-62) で接続し、プログラムを CFX-9850GC PLUS に転送する。次にプログラムを走らせ、エラーが出たら [◀] か [▶] キーを押すとエラーが発生したコマンドにカーソルが表示されている。そこでカーソルのある部分を修正できるので、移植作業は比較的楽だ。当然エラーが発生している原因と対策を知っておく必要がある。具体的には、以下で紹介しているので、参照ください。
▍テキストベース・プログラム
▶ モグラ叩きゲーム
以前作ったアクションゲーム - "Whack-a-Mole(もぐら叩き)" を転送して、必要な変更を行ってから遊んでみた。ついでにトップ画面のタイトルをオレンジにしてみた。デフォルトはブルーになっている。
ここで転送して修正したプログラムファイルは、WHACKAMO、WAM、INPI の3つだ。
⇒ プログラムのダウンロード - ダウンロードした Whackamo.cat には上記3つのプログラムを含む

CFX-9850GC PLUS の処理速度に対応するために、WHACKAMO の冒頭にある変数A の初期化を 2→A と変更しただけで、ロジックは変えていない。他は CFX-9850GC PLUS の搭載言語の制限に合わせて、エラーが出なくなるように修正を行うだけで移植は完了する。搭載言語のこの制限と修正方法については後述する。
実際に遊んでみると、液晶のハードウェアとしての応答性が悪い割にはゲームとして遊べて、それほど悪い感じはしない。表示が始まってところで反応できるから、表示が完了するまでのタイムラグが問題にならないのだろうと思う。
▶キーコード取得プログラム
以前作ったキーコード取得プログラムを転送し、エラーが出なくなるように必要な修正を行って CFX-9850GC PLUS / fx-9750G 専用に変更した。
⇒ プログラムのダウンロード - Keycode.cat


左:起動直後の画面、右:キーコード取得プログラム、[EXIT] キーを押してみたところ。
CFX-9850GC PLUS と fx-9860Gシリーズ / fx-CG シリーズは、全く同じキーを備えており、キーコードも同一になっている。従って、CFX-9850GC PLUS 特有の修正を行えば、ロジックや数値を変更せずに移植が可能となる。
さて、このプログラムや上のモグラ叩きゲームで、アルファベットの小文字が表示されていることにお気づきだろうか?
CFX-9850GC PLUS 本体では、プログラム編集画面で小文字アルファベットを入力する方法が見つからない。ところが、小文字を使ったプログラムを fx-9860Gシリーズから転送したら小文字が表示されているのだ。
システムには既に小文字フォントが準備されていて、コードさえ入力されればプログラムで使えるようになっている。fx-5800P も同じ事情で、CcEditor / CcLinker を使えば 小文字アルファベットやその他フォントが使える。
▶温度換算プログラム
以前作った温度換算プログラムを転送し、エラーが出なくなるように必要な修正を行った。
ここで、転送・修正したプログラムファイルは、TEMPCONV と IN の2つだ。
⇒ プログラムのダウンロード - ダウンロードした TempConv.cat には TEMPCONV と IN が含まれる

プログラムの構造、ロジックは全く変更せず、プログラムが正常に動作する。
▶和暦-西暦換算・年齢推定プログラム - あの人の歳は今いくつ?
以前作った 和暦-西暦換算・年齢推定プログラムを転送して、エラーを解消する変更を実施した。長押し判定のカウンタの初期値Lを実機の処理速度に合わせて30に変更した (プログラム冒頭に 30→L と変更)。
転送・修正したプログラムファイルは、YEARCONV、YRC、YRD、INPI の4つだ。
⇒ プログラムのダウンロード - ダウンロードした YearConv.cat には YEARCONV, YRC, YRD, INPI の4つが含まれる。

ある程度複雑な構造でも、CFX-9850CG PLUS 搭載言語の制限や欠点を理解すれば、移植できることが分かった。
▋CFX-9850GC PLUS でのプログラミング
▍プログラミング上の制限と注意点 - fx-9860Gシリーズ / fx-CGシリーズとの比較
▶空行 (改行のみの行) はSyn ERROR になる
※対策:空行を削除する
対策を実施すると、ソースコードが非常に見づらくなる。特にブロック構造を意識した分かりやすいプログラミングには困った仕様だ。幸いコメントアウト ' が使えるので、空行の代わりに
'==
などと書けば良いが、ソースレベルでブロック構造を分かりやすく見るには空行はとても便利だ。それが出来ないのは発展途上の欠点だと敢えて申し上げたい。これは、昔の1行プログラミングの時代の影響を引きすっていると感じられる。
▶Then / Else の直後を改行すると Syn ERROR になる
※対策:Then / Else 直後の改行を削除する
対策を実施すると、ソースコードが見づらくなる。上の空行禁止を組み合わさると、If ステートメントが非常に分かりにくくなる。ソースレベルで、ブロック構造を意識した見やすいコードを書けないにのは困った仕様だ。
これも、昔の1行プログラミングの影響をまだ引きずっている結果だと感じられる。
▶ループ (While / Do) の2重構造で、内側のループと If の入れ子構造が共存すると IfEnd のところで Syn ERROR になる
※対策:外側のWhile / Do を Lbl / Goto に置き換える。Break が有れば新たに Goto ジャンプに置き換える
対策を施すと、スパゲティ化の第一歩となり、分かりやすいブロック構造を意識したプログラミングの大敵だ。個人的には最大の問題と感じている。
このエラーは、上記の 温度換算プログラムと和暦・西暦換算・年齢推定プログラムをfx-9860GII から転送して発見した。
While / Do と If の構造制御のスタック管理に失敗しているバグと考えている。昔は Goto / Lbl しか無かったところに構造制御ステートメントを追加している過渡期に潜り込んだバグがまだ解消していないのだろう。
取扱説明書の第22章ライブラリー編に掲載されているサンプルプログラムでは、構造制御に While / Do を使ったものが無く、全て Lbl / Goto が使われていることから、この時点で While / Do の機能が不完全だったと考えている。
▶出力 "" で内部カーソルが改行されない
※対策:"" で内部カーソルの改行機能を当てにせず Locate で表示位置を明示的に指定する
"" はNOP (何もしない) 処理になっているかも知れない。
"" で内部カーソル行を制御しているプログラム (fx-5800P や fx-9860G 以降のグラフ関数電卓で正常動作しているもの) を転送した場合、CFX-9850GC PLUS では画面配置が崩れる。
▶行末に区切り文字 : があると Syn ERROR になる
※対策:行末の区切り文字 : を削除する
対策を実施しても大きな問題はない。
区切り文字は改行と同じ内部実装になっていれば、空行でエラーになるのと同じ原因なのだろう。
▶カラーコマンドは " " 出力には有効だが、Locate 出力には無効 [2019/05/25 追記]
※対策:有効な対策はない。"" で内部カーソルが改行されないので Locate を " "出力に変更できないことが多いためだ。
カラーコマンドには、Orange と Green がある。Orange "String" と書けば String がオレンジ色で表示される。
一方、Locate コマンドで出力する場合は、カラーコマンドを追加すると Syn ERRORになる。
▶出力文字列に : を含む行を ' でコメントアウトすると Syn ERRORになる
※対策:機切り文字 : の直後に ' を付加する
この問題は、fx-9860Gシリーズや fx-CGシリーズにも残っており、カシオは操作マニュアルを修正して対応している。
詳しくは 楽屋裏 - Casio Basic コメントアウト ' のバグ を参照
▶出力文字列に : を含んでも Syn ERRORにならない
これは、後継機種の fx-9860Gの OS2.1 かそれ以前のバージョンではエラーになっており、OS2.04 以降で修正されており、この修正は fx-9860GII や fx-CG20、そして最新の fx-CG50 まで維持されている。それなのに fx-9860G よりも古い CFX-9850GC PLUS で同じエラーが発生するかと思えば、エラーにならないのは、面白い。
改行のみの空行や区切り文字が行末にあることを許すように変更した際に、新たにバグが入り込んだと推測される。細かいようではあるが、このような開発の苦労や経緯が透けてくるのは面白い。
▶出力命令 " " では1文字ごとに出力する
"Strings" を実行するとタイプライターのように1左から1文字づつ出力される。一方 Locate 1,1,"Strings" を実行すると、文字列が一度に出力される。
▶fx-9860Gシリーズ以降の機種からの移植では、実装されていない関数やコマンドで Syn ERROR
※対策:使えるコマンドを使って別表現に変更する (当たり前ですね)
今回移植を試みたプログラムには一例として、RanInt#( があったので、それぞれ以下のように別表現にした。
- RanInt#(1,9) を Int(90Ran#÷10)+1 に変更
- RanInt#(1,3) を Int(30Ran#÷10)+1 に変更
- RanInt#(0,9) を Int(10Ran#) に変更
▶Do / While / For ループからの脱出に Dsz / Isz を使うと Syn ERROR になる [2019/06/30 追記]
※対策:ループを Lbl / Goto に置き換えるか、ループ脱出に Break を使う
この現象は、fx-5800P や fx-9860G 以降のグラフ関数電卓でも存在することが確認されている。
⇒ 楽屋裏 - Dsz にとるループ脱出 参照
カシオとのやりとりの結果、ループの後 (必ずしも直後でなくても良い) に Goto 0:Lbl 0 と記述することでこのエラーを回避できることが分かっている (詳細は上記記事参照)。ところが、CFX-9850GC PLUS では、この対処方法が効かない。
▋処理速度の比較
▍四則演算および関数計算
▶加算プログラム

プログラムを起動し、N に 1000 を入力して実行時間を計る。
CFX-9850GC PLUS のプログラム


繰り返しに Goto / Lbl を使うケース(左)と For を使うケース(右)の2通りで処理速度を調べる。
▶数値積分プログラム

この通史積分は、とね日記 - 席初の手帳型プログラム関数電卓 CASIO FX-502P (1979), FX602P (1981) で取り上げられているものをそのまま使わせていただく。
プログラム起動し、分割数として 1000 を入力して、時効時間を計る。
CFX-9850GC PLUS のプログラム


クリア絵師に 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 倍 | |
CFX-9850GC PLUS | Goto | 22.0 秒 | 5.6 倍 | 100 秒 | 12.6 倍 |
For | 9.2 秒 | 13.4 倍 | 85.4秒 | 14.8 倍 |
Basicコマンドとして追加された For 文は効率化、高速化している。Basicコマンドは可読性向上だけでは無いことが分かる。併せて関数処理も高速化していることが分かる。但し、CFXシリーズ初号機である CFX-9850G よりは少し遅くなっている。インタープリター言語なので、コマンドが追加されたことが原因だと思われる。
▍グラフィックス描画
▶ ドット描画プログラム
fx-7000G のグラフィック画面が 95 x 63 ドットなので、それに合わせて CFX-9850GC PLUS でも 95 x 63 ドットを塗りつぶして処理速度を比較する。
fx-7000G のプログラム


CFX-9850GC PLUS のプログラム



Plot を使うケース(左)と PxlOn を使うケースの2通りで処理速度を調べる。
Plot | PxlOn | |||
fx-7000G | 213 秒 | |||
CFX-9850G | 926.5 秒 | 0.23 倍 | 496.0 秒 | 0.43 倍 |
CFX-9850GC PLUS | 901.1 秒 | 0.24 倍 | 929.1 秒 | 0.23 倍 |
CFX-9850G と全く同じコードであるにも関わらず、CFX-9850GC PLUS では遅くなっている。
PxlOn によるドット描画は、CFX-9850G の2倍の時間がかかった。
fx-7000G と比べると、処理が4倍以上遅くなった。
▍画面更新プログラム
上で、画面へのデータ転送が処理速度のボトルネックになることが分かったので、頻繁に画面更新するプログラムを実行して、その処理速度を調べて比較することにする。
ところで Getkey コマンドの追加によりテンキーと[EXE]キーだけでなく、[AC]を除く全てのキー入力が検知可能になり、Locate コマンドの追加により任意の位置への出力が可能になったので、プログラムの自由度が大きく向上し、画面がスクロールしないプログラムを書けるようになった。画面がスクロールしないプログラムでは、画面更新速度は重要な評価ポイントになる。
出力画面は、テキスト画面とグラフィックス画面 (グラフ画面) の2つがあり、これらは同時に表示できない。そこでテキスト画面の高速更新プログラムとグラフィックス画面の高速更新プログラムを作成して評価に利用することにする。
CFX-9850GC PLUS で調べる。
以下は CFX-9850G の結果で、CFX-9850GC PLUS のデータを後日追加する。
▶ グラフィックス画面更新プログラム - モンテカルロ法にょる円周率計算

⇒ プログラムのダウンロード - Montecar.cat を電卓に転送する
⇒ プログラムの詳細はこちら
ランダムに500回点を打って出力するまでの時間を調べる。
▶ テキスト画面更新プログラム - ピタゴラス数の計算

⇒ プログラムのダウンロード - Pytha.cat を電卓に転送する
⇒ プログラムの詳細はこちら
ピタゴラス数500個を計算して結果を出力するまでの時間を調べる。
[2020/01/04 追記]
Getkey と Locate が初めて搭載された CFX-9850G と CFX-9850GC PLUS の結果を比較した。
PYTHA | MONTECAR | ||||
CFX-9850G | 294.3 秒 | --- | 165.6 秒 | --- | |
CFX-9850GC PLUS | 295.2 秒 | 0.99 倍 | 267.7 秒 | 0.62 倍 |
CFX-9850G に比べてグラフィック画面出力 (MONTECAR) と テキスト画面出力 (PYTHA) ともに遅くなった。
特に、テキスト画面への繰り返し出力は60%程度に速度低下している。関数やコマンドが追加されたので、当然ながら処理が遅くなったと言える。速度向上には、CPUやOSの大きな改訂が必要であり、次の機種である fx-0860G でそれが実現されている。
▋プログラム電卓の系譜 [2019/08/15 追記修正]
CFXシリーズの最終機種である CFX-9850GC PLUS は、CFX-シリーズの初号機 CFX-9850G と同じ仕様の言語を搭載しているが、処理速度が遅くなっている。CFX-9850G よりも関数や機能が増強されているので多少処理が遅くなるだろうと思う。しかしグラフィックスのドット描画については、特に PxlOn の処理が倍程度遅くなっているのは意外であった、
さて、CFX-9850GC PLUS に搭載されたプログラミング言語は、CFX-9850G と同様に Baiscコマンドとして If / For / While / Do / Getkey / Locate などが追加されているが、編集画面で考えながらコーディングするのは難しいと思う。
後継機種である fx-9860G では、搭載言語と編集画面の大幅な修正が行われた。この改良は、fx-9860G と同年に発売された fx-5800P にも反映されている。
編集画面については、FX-502P / FX-602P / FX-603P では、デフォルトで挿入モードになっており、必要に応じて 上書きモードに切り替える仕様になっている。ところが、その後の fx-3650P や fx-4000P シリーズ、fx-7000G シリーズ そして CFXシリーズの最終モデル CFX-9850GC PLUS に至るまで、デフォルトで上書きモードになっていた。
当時、欧米市場での競合であった TI の電卓でも84シリーズのような古くからある機種では上書きモードが主流であった (sentaro様による情報、コメント欄参照)。
ところが、2005年に発売された機種、fx-71F、fx-5800P、fx-9860G では、一斉に挿入モードに切り替わっている。プログラミングのできない関数電卓においても、fx-991MS まではデフォルトで上書きモードで、2005年発売の次機種 fx-991ES から挿入モードに切り替わっている (2005年1月の電卓総合カタログ参照。
[2019/07/01 追記]
コメント欄に情報をお寄せいただいたsentaro様によれば、SHARP製の関数電卓も以前は上書きモードだったが、2004年以降のモデルは挿入モードに変わっているとのこと。Casioとほぼ同時期に変更されているようだ。
sentaro様の考察によれば(コメント欄参照)、欧米、特に北米での学校販売ビジネスでしのぎを削っていた TI 機と使い勝手の異なる挿入モード機を一斉に投入するには、ビジネス上のリスクを伴う大きな判断があったに違いないとのことだ。私もそれに賛同する。その上で、一斉に挿入モードに切り替えたのは、グラフ関数電卓やプログラム関数電卓の将来の目標 / ビジョンがあったのではないかと私は想像している。それは計算補助のマクロ機能を超えて、より柔軟な一般的なプログラミングが可能な言語仕様を目指すことであった、と想像している。
Locate や Getley コマンドの存在は、スクロールしないプログラムを可能にするが、これらのコマンドは CFXシリーズの初代 CFX-9860G に初めて追加された。CFXシリーズは、プログラム関数電卓、ポケコン、グラフ関数電卓それぞれで個別に開発が進んでいた搭載言語が、ようやく1つの方向性に収束し、Locate / Getkey コマンドを追加することで柔軟なプログラミングが可能になり、大きく進化した。3色限定とは言えカラー表示を可能にしたのも CFXシリーズの特徴であり、各種コマンドや関数を増強した最終機種 CFX-9850GC PLUS は、カシオ機搭載のプログラミング言語の歴史の重要な転換点を示しており、次世代Casio Basic 登場前夜の記念すべきモデルと言える。
Casio Baisc は fx-9860G シリーズでさらに進化してゆく。
温故知新 - 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-CG10 / CG20
温故知新 - fx-CP400
温故知新 - fx-CG50
温故知新 - fx-9750GIII
温故知新:番外編 - 関数電卓としての使い勝手
温故知新:番外編 - 電卓評価用の積分を解いてみた
温故知新:番外編 - 電卓評価用の複素数を解いてみた
応援クリックをお願いします。励みになるので...