温故知新 - CFX-9850GC PLUS

プログラム電卓 温故知新
 - 搭載プログラミング言語に注目して、プログラム電卓の変遷を考える -

 
2019/06/23
追記修正 2019/06/24
追記修正 2019/06/25
追記修正 2019/06/30
追記修正 2019/07/01
追記修正 2019/08/17
追記 2019/08/22


特定のカシオ製プログラム電卓に搭載されたプログラミング言語にスポットライトを当てて、過去から現在に至る仕様の変化を調べる。

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 BasicGetkeyLocate が追加されたのが CFX-9850G であった。その後、コマンドや関数が追加され、シリーズ最終の CFX-9850GC PLUS が登場した。この機種の後継として fx-9860G が発売され、これ以降の機種に搭載された言語を私は "次世代Casio Basic" と呼称している。詳しくは fx-9860G を取り上げる時に紹介したい。

CFX-9850GC PLUS はCFXシリーズの最終形であり、新世代Casio Basic 登場前夜と言える。



Casio CFX-9850GC PLUS

CFX-9850GC_PLUSCFX-9850GC_PLUS_Manual

2004年海外で発売、2005年1月 に国内発売開始、海外では2004年発売。
カタログ 取扱説明書 (Casioサイト) 取扱説明書 (e=Gadgetサイト) 

64KBのメモリ領域にシステムも含まれており、それ以外がプログラムやデータに使える。取扱説明書の表紙から分かるのは、fx-9750G PLUS(モノクロ液晶)など複数の機種とほぼ共通の仕様になっている。

取扱説明書で分からない Casio Basic の使いこなし が当ブログのメインテーマなので、実際に触ってみたいと思い、以前から中古品を探していた。



実際に入手した CFX-9850GC PLUS
幸運なことに、eBayで "未使用品 - 動作確認のため開封" というものを見つけたので入手した。EU域内保証書が添付されていた。
 CFX-9860GC_PLUS_1 CFX-9850GC_PLUS_2 
実際に傷や汚れが一切なく、新品状態であった。

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

fx-9860GIIシリーズのメニュー画面を比較する。
CFX-9850GC_PLUS_Display fx-9860GII_SD_Display 
液晶のバックグランドが黄色みが強いことも視認性の悪さの原因だと感じる。
また、この3色カラー液晶は応答性が悪い。

なお、CFX-9850GC PLUSの液晶画面のサイズは、fx-9860Gシリーズと比較すると小さいことが分かる。
Disp_Size_9859GC_9860GII 



関数電卓としての性能 [2019/06/25 追記]
キーの種類と配置は、後継機のfx-9860Gシリーズと同じになっている。但し、[SHIFT] と一緒に押して選ぶ裏の機能やファンクションメニューの機能は fx-9860G よりは少なく、当然ながら後継機で進化しているわけだ 。

分数表示と演算精度
235÷658 を計算すると 0.3571428571 と表示される。計算制度は内部15桁で、後継機種 fx-9860Gと同じ。
ここで、[F↔D] キーを押しても 5/14 にはならない。ここは、後継機種 fx-9860Gと異なる。
最初に 235/658 と入力し [EXE] を押すと、5/14 と表示され、[F↔D] キーを押すと 0.3571428571 と表示が変わる。

複素指数関数
eπi を計算してみる。計算できれば答えは -1 になる。
Complex 
fx-9850GC PLUS では複素指数関数の計算ができず、演算エラー(Ma ERROR) になる。但し、複素数の加減乗除はできる。
後継機種の fx-9860G以降のモデルでは複素指数関数の計算に対応している。



搭載言語 (Casio Basic) の概要 [2019/8/18 追記]

追加されているBasicコマンドによりプログラムの可読性と機能が向上し、さらに GetkeyLocate が追加されているのでプログラムの自由度が向上している。さらに 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 が追加されている
 - 各種関数

但し、以下の要因により可読性が損なわれている。
 - Then / Else 直後の改行:Syn ERROR になる
 - 行頭での改行 (空白行):Sys ERROR になる

 主なグラフィック コマンド
 - グラフ設定:CoordOn/CoordOff, GridOn/GridOff,
        AxesOn/AxesOff, LabelOn/LabelOff
 - 座標系設定:ViewWindow,
        Xmax/Xmin/Xscl/Xfct, XdotYmax/Ymin/Yscl/
Yfct  Xdotが追加されている
 - 消去コマンド: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-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"
While Getkey
WhileEnd
Do
Do:Getkey→K
LpWhile K=0
Locate 9,3,"=   "
(スペース6個)
Locate 11,3,K
LpWhile


GETKEY 
[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 PLUSProgram List でプログラムを探す最善の方法は、サーチ(検索)機能だ。Program List 画面で [F6] (▷) - [F1] (SRC) と押せば Search For Program 画面が現れるので、そこで探しているプログラム名の頭のアルファベットを押せば良い。すると同じ頭文字で始まるプログラム名が全て表示される。この機能は必須だ。

ところで、取扱説明書には、以下の記述がある。
Program_Manual_Note
繰り返し計算や複雑な計算を便利に実行するのが、プログラム機能の主目的だと考えれば、プログラム終了後に Program List 画面に戻らず、RUMモードになる仕様は、理にかなっている。



プログラムの編集 [2019/07/01 修正]
プログラム編集画面は、極めて使いにくい。

パソコンで文章を書く時は、通常は挿入モードで利用しているはずで、上書きモードは必要な時のみ切り替えて使うと思う。fx-9860Gシリーズや fx-CGシリーズでも、プログラム編集画面は常に挿入モードになっていて、必要な時に [SHIFT]-[DELL](INS) と押して上書きモードに切り替えて使う。

ところが、CFX-9850GC PLUS は、通常が上書きモードになっていて、[SHIFT]-[DELL](INS) を押して挿入モードに切り替える必要がある。一旦挿入モードに切り替えると、改行を超えない範囲でカーソル移動する限りは挿入モードが維持されるが、カーソルが改行を超えると上書きモードに戻ってしまう。改行から改行までを1行として認識し、その行内なら挿入モードが維持されるのは、ラインエディタの仕様をそのままマルチラインのエディタに持ち込んでると考えるのが妥当であろう。そのためマルチラインエディタとして編集の利便性が得られず残念な仕様と言える。

昔のプログラム電卓やポケコンで、区切り文字を使ってプログラムをズラズラと1行に書く時の仕様を、そのまま引きずっているのではないかと想像している。



プログラムの転送 [2019/08/15 追記修正]

PClink_9850GC_Plus2 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ファイルには複数プログラムを格納できる。

ところで、電卓本体右下にある3pinコネクタには、防塵防滴用と思われるゴム製の "栓" が刺さっている。ある程度使われた中古品だとこれが無くなっているケースが多いのではないかと思う。



fx-9860Gシリーズからのプログラムの移植
以前作ったプログラムの入った fx-9860Gシリーズと CFX-9850GC PLUS を 3pinケーブル (SB-62) で接続し、プログラムを CFX-9850GC PLUS に転送する。次にプログラムを走らせ、エラーが出たら [◀] か [▶] キーを押すとエラーが発生したコマンドにカーソルが表示されている。そこでカーソルのある部分を修正できるので、移植作業は比較的楽だ。当然エラーが発生している原因と対策を知っておく必要がある。具体的には、以下で紹介しているので、参照ください。

テキストベース・プログラム
モグラ叩きゲーム
以前作ったアクションゲーム - "Whack-a-Mole(もぐら叩き)" を転送して、必要な変更を行ってから遊んでみた。ついでにトップ画面のタイトルをオレンジにしてみた。デフォルトはブルーになっている。
ここで転送して修正したプログラムファイルは、WHACKAMOWAMINPI の3つだ。
プログラムのダウンロード - ダウンロードした Whackamo.cat には上記3つのプログラムを含む
Whack-a-Mole_9850GC 

CFX-9850GC PLUS の処理速度に対応するために、WHACKAMO の冒頭にある変数A の初期化を 2→A と変更しただけで、ロジックは変えていない。他は CFX-9850GC PLUS の搭載言語の制限に合わせて、エラーが出なくなるように修正を行うだけで移植は完了する。搭載言語のこの制限と修正方法については後述する。

実際に遊んでみると、液晶のハードウェアとしての応答性が悪い割にはゲームとして遊べて、それほど悪い感じはしない。表示が始まってところで反応できるから、表示が完了するまでのタイムラグが問題にならないのだろうと思う。

キーコード取得プログラム
以前作ったキーコード取得プログラムを転送し、エラーが出なくなるように必要な修正を行って CFX-9850GC PLUS / fx-9750G 専用に変更した。
プログラムのダウンロード - Keycode.cat
GetKey_1 GetKey_2 
左:起動直後の画面、右:キーコード取得プログラム、[EXIT] キーを押してみたところ。

CFX-9850GC PLUSfx-9860Gシリーズ / fx-CG シリーズは、全く同じキーを備えており、キーコードも同一になっている。従って、CFX-9850GC PLUS 特有の修正を行えば、ロジックや数値を変更せずに移植が可能となる。

さて、このプログラムや上のモグラ叩きゲームで、アルファベットの小文字が表示されていることにお気づきだろうか?

CFX-9850GC PLUS
 本体では、プログラム編集画面で小文字アルファベットを入力する方法が見つからない。ところが、小文字を使ったプログラムを fx-9860Gシリーズから転送したら小文字が表示されているのだ。

システムには既に小文字フォントが準備されていて、コードさえ入力されればプログラムで使えるようになっている。fx-5800P も同じ事情で、CcEditor / CcLinker を使えば 小文字アルファベットやその他フォントが使える。

温度換算プログラム
以前作った温度換算プログラムを転送し、エラーが出なくなるように必要な修正を行った。
ここで、転送・修正したプログラムファイルは、TEMPCONV と IN の2つだ。
プログラムのダウンロード - ダウンロードした TempConv.cat には TEMPCONV と IN が含まれる
TempConv 

プログラムの構造、ロジックは全く変更せず、プログラムが正常に動作する。

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

ある程度複雑な構造でも、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 / DoLbl / Goto に置き換える。Break が有れば新たに Goto ジャンプに置き換える
 対策を施すと、スパゲティ化の第一歩となり、分かりやすいブロック構造を意識したプログラミングの大敵だ。個人的には最大の問題と感じている。
このエラーは、上記の 温度換算プログラムと和暦・西暦換算・年齢推定プログラムをfx-9860GII から転送して発見した。
While / DoIf の構造制御のスタック管理に失敗しているバグと考えている。昔は Goto / Lbl しか無かったところに構造制御ステートメントを追加している過渡期に潜り込んだバグがまだ解消していないのだろう。
取扱説明書の第22章ライブラリー編に掲載されているサンプルプログラムでは、構造制御に While / Do を使ったものが無く、全て Lbl / Goto が使われていることから、この時点で While / Do の機能が不完全だったと考えている。 

出力 "" で内部カーソルが改行されない
 ※対策"" で内部カーソルの改行機能を当てにせず Locate で表示位置を明示的に指定する
"" はNOP (何もしない) 処理になっているかも知れない。
"" で内部カーソル行を制御しているプログラム (fx-5800Pfx-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-9860GIIfx-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-5800Pfx-9860G 以降のグラフ関数電卓でも存在することが確認されている。
⇒ 楽屋裏 - Dsz にとるループ脱出 参照
カシオとのやりとりの結果、ループの後 (必ずしも直後でなくても良い) に Goto 0:Lbl 0 と記述することでこのエラーを回避できることが分かっている (詳細は上記記事参照)。ところが、CFX-9850GC PLUS では、この対処方法が効かない。



処理速度の比較

四則演算および関数計算

加算プログラム
加算 

プログラムを起動し、N に 1000 を入力して実行時間を計る。

CFX-9850GC PLUS のプログラム
fx7000G_source_adding_up_Isz2 AddTest_For 
繰り返しに Goto / Lbl を使うケース(左)と For を使うケース(右)の2通りで処理速度を調べる。


数値積分プログラム
関数 

この通史積分は、とね日記 - 席初の手帳型プログラム関数電卓 CASIO FX-502P (1979), FX602P (1981) で取り上げられているものをそのまま使わせていただく。

プログラム起動し、分割数として 1000 を入力して、時効時間を計る。

CFX-9850GC PLUS のプログラム
FuncTest_Goto_9850 FuncTest_For_985 
クリア絵師に Goto / Lbl を使うケース(左)と For を使うケース(右)の2通りで処理速度を調べる。

以前調べた結果と併せて、上記の計算速度のを比較結果を示す [2019/07/31 修正]
加算プログラム数値積分プログラム
機種実行時間比較実行時間 (秒)比較
FX-502P123.1 秒---1261.8 秒---
FX-602P111.2 秒1.1 倍716.5 秒1.8 倍
FX-603P37.8 秒3.3 倍166.2 秒7.6 倍
fx-4000P61.7 秒2.0 倍349.1秒3.6 倍
fx-4500P195.0 秒0.6 倍798.1 秒1.6 倍
fx-4800PA=A+126.3 秒4.7 倍114.3 秒11.0 倍
Isz A21.2. 秒5.8 倍109.4 秒11.5 秒 
fx-7000GA=A+120.7 秒5.9 倍146.1 秒8.6 倍
Isz A19.3 秒6.4 倍143.2 秒8.8 倍
CFX-9850GGoto20.9 秒5.9 倍98.3 秒12.8  倍
For9.2 秒13.4 倍84.3 秒15.0 倍
CFX-9850GC PLUS
Goto22.0 秒5.6 倍100 秒12.6 倍
For9.2 秒13.4 倍85.4秒14.8 倍
記念すべき FX-502P を基準に、速度が何倍になっているかも併せて示している。

Basicコマンドとして追加された For 文は効率化、高速化している。Basicコマンドは可読性向上だけでは無いことが分かる。併せて関数処理も高速化していることが分かる。但し、CFXシリーズ初号機である CFX-9850G よりは少し遅くなっている。インタープリター言語なので、コマンドが追加されたことが原因だと思われる。


グラフィックス描画
▶ ドット描画プログラム

fx-7000G のグラフィック画面が 95 x 63 ドットなので、それに合わせて CFX-9850GC PLUS でも 95 x 63 ドットを塗りつぶして処理速度を比較する。

fx-7000G のプログラム
fx7000G_Dot DOT_fx7000G  

CFX-9850GC PLUS のプログラム
Dot_Plot Dot_Pxl fx9850GC_Plus_Dot 
Plot を使うケース(左)と PxlOn を使うケースの2通りで処理速度を調べる。

PlotPxlOn
fx-7000G213 秒
CFX-9850G926.5 秒0.23 倍496.0 秒0.43 倍
CFX-9850GC PLUS901.1 秒0.24 倍929.1 秒0.23 倍

CFX-9860G と全く同じコードであるにも関わらず、CFX-9850GC PLUS では遅くなっている。
PxlOn によるドット描画は、CFX-9850G の2倍の時間がかかった。
fx-7000G と比べると、処理が4倍以上遅くなった。


画面更新プログラム
上で、画面へのデータ転送が処理速度のボトルネックになることが分かったので、頻繁に画面更新するプログラムを実行して、その処理速度を調べて比較することにする。

ところで Getkey コマンドの追加によりテンキーと[EXE]キーだけでなく、[AC]を除く全てのキー入力が検知可能になり、Locate コマンドの追加により任意の位置への出力が可能になったので、プログラムの自由度が大きく向上し、画面がスクロールしないプログラムを書けるようになった。画面がスクロールしないプログラムでは、画面更新速度は重要な評価ポイントになる。

出力画面は、テキスト画面とグラフィックス画面 (グラフ画面) の2つがあり、これらは同時に表示できない。そこでテキスト画面の高速更新プログラムとグラフィックス画面の高速更新プログラムを作成して評価に利用することにする。

CFX-9850GC PLUS で調べる。
以下は CFX-9850G の結果で、CFX-9850GC PLUS のデータを後日追加する。

グラフィックス画面更新プログラム - モンテカルロ法にょる円周率計算
fx9850GCplus_Montekar 
プログラムのダウンロード - Montecar.cat を電卓に転送する
プログラムの詳細はこちら
ランダムに500回点を打って出力するまでの時間を調べると、165.6 秒であった。

テキスト画面更新プログラム - ピタゴラス数の計算
CFX9860GCplus_Pytha 
プログラムのダウンロード - Pytha.cat を電卓に転送する
プログラムの詳細はこちら
ピタゴラス数500個を計算して結果を出力するまでの時間を調べると、294.3 秒であった。



プログラム電卓の系譜 [2019/08/15 追記修正]

CFXシリーズの最終機種である CFX-9850GC PLUS は、CFX-シリーズの初号機 CFX-9850G と同じ仕様の言語を搭載しているが、処理速度が遅くなっている。CFX-9850G よりも関数や機能が増強されているので多少処理が遅くなるだろうと思う。しかしグラフィックスのドット描画については、特に PxlOn の処理が倍程度遅くなっているのは意外であった、

さて、CFX-9850GC PLUS に搭載されたプログラミング言語は、CFX-9850G と同様に Baiscコマンドとして IfFor / While / Do / Getkey / Locate などが追加されているが、編集画面で考えながらコーディングするのは難しいと思う。

後継機種である fx-9860G では、搭載言語と編集画面の大幅な修正が行われた。この改良は、fx-9860G と同年に発売された fx-5800P にも反映されている。

編集画面については、FX-502P / FX-602P / FX-603P では、デフォルトで挿入モードになっており、必要に応じて 上書きモードに切り替える仕様になっている。ところが、その後の fx-3650Pfx-4000P シリーズ、fx-7000G シリーズ そして CFXシリーズの最終モデル CFX-9850GC PLUS に至るまで、デフォルトで上書きモードになっていた。

当時、欧米市場での競合であった TI の電卓でも84シリーズのような古くからある機種では上書きモードが主流であった (sentaro様による情報、コメント欄参照)。

ところが、2005年に発売された機種、fx-71Ffx-5800Pfx-9860G では、一斉に挿入モードに切り替わっている。プログラミングのできない関数電卓においても、fx-991MS まではデフォルトで上書きモードで、2005年発売の次機種 fx-991ES から挿入モードに切り替わっている (2005年1月の電卓総合カタログ参照。

[2019/07/01 追記]
コメント欄に情報をお寄せいただいたsentaro様によれば、SHARP製の関数電卓も以前は上書きモードだったが、2004年以降のモデルは挿入モードに変わっているとのこと。Casioとほぼ同時期に変更されているようだ。

sentaro様の考察によれば(コメント欄参照)、欧米、特に北米での学校販売ビジネスでしのぎを削っていた TI 機と使い勝手の異なる挿入モード機を一斉に投入するには、ビジネス上のリスクを伴う大きな判断があったに違いないとのことだ。私もそれに賛同する。その上で、一斉に挿入モードに切り替えたのは、グラフ関数電卓やプログラム関数電卓の将来の目標 / ビジョンがあったのではないかと私は想像している。それは計算補助のマクロ機能を超えて、より柔軟な一般的なプログラミングが可能な言語仕様を目指すことであった、と想像している。

LocateGetley コマンドの存在は、スクロールしないプログラムを可能にするが、これらのコマンドは 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-CP400
温故知新:番外編 - 関数電卓としての使い勝手



応援クリックをお願いします。励みになるので...
にほんブログ村 IT技術ブログ 開発言語へ


 


keywords: プログラム関数電卓、プログラミング、Casio Basic、CFX-9850GC PLUS

リンク集 | ブログ内マップ













テーマ : プログラム関数電卓
ジャンル : コンピュータ

温故知新 - CFX-9850G

プログラム電卓 温故知新
 - 搭載プログラミング言語に注目して、プログラム電卓の変遷を考える -

 
2019/08/14
追記修正 2019/08/15
追記修正 2018/08/18


特定のカシオ製プログラム電卓に搭載されたプログラミング言語にスポットライトを当てて、過去から現在に至る仕様の変化を調べる。


4. Casio Basic 登場 - 可読性と機能の向上 (1)


今回は、fx-7000P シリーズ登場後 CFX-9850G に至る搭載言語の変遷を取り扱う。

1996年に発売された CFX-9850G には、Basic コマンドが追加されている。特に CFX-9850G の最大の特徴は LocateGetkey コマンドが初めて搭載された点にある。

ところで Casio Basic という呼称は、カシオが公式に使っているものではないが、欧米のプログラム電卓愛好家のコミュニティでは以前から使われている。当ブログでは、当初管理人が CasioBasic と呼んでいたが、その後海外のコミュニティで同じ名称が使われているのを知った。

但しそれらの海外のコミュニティにおいて Casio Basic の明確な定義が見当たらない。当ブログでは以前から、Basic風のコマンドが追加された搭載言語を "Casio Basic" と呼んでいる。それには LocateGetkey コマンドが追加されたもの (CFX-9850G が初)も含む。
次に、下記の条件を備えたものを "新世代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 は、LocateGetkey が初めて追加された機種だ。カシオのプログラム電卓の系譜で重要なマイルストーンだ。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-4500Pfx-4800P が販売されていた。
1996年4月発行のカシオ電卓総合カタログ - CFX-9850G (国内では 1996年3月発売), fx-4500P, fx-4800P


Casio CFX-9850G

CFX-9850G_22GBのメモリに、プログラム領域26KBが含まれる。

CFXシリーズは、3色カラー液晶搭載のグラフ関数電卓で、デフォルトがブルーで、オレンジとグリーンを追加した3色が使える。実際の画面は、輝度も色もコントラストが低い。液晶を見る角度でコントラストや色合いが大きく変化するのも見づらさの原因だ。明るいところでは問題ないが、少し暗くなると見づらいと感じる。この3色カラー液晶は応答性が悪い。

CFX9850G_Display 

プログラムの転送
PClink_9850G_2 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コマンドが追加されたことでプログラムの可読性と機能が向上し、さらに GetkeyLocate が追加されたことでプログラムの自由度が向上している。

主なコマンド
 - 入力:?→, 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 は適用できない
 - 各種関数
GRAPH20fx-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シリーズと全く同じだ。言語機能の基本仕様はこの機種の頃から固まっていることが分かる

ファイル名:GETKEY
Locate 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


Getkeycode_1 Getkeycode_DEL  
[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 への移植にはコードへの若干の手直しが必要だ。多くの場合はなんとかなるが、移植不可能、あるいは極めて困難なケースもある。

モグラ叩きゲーム
Whack-a-Mole_1 Whack-a-Mole_2  
fx-9860GII
で作ったアクションゲーム - "Whack-a-Mole(もぐら叩き)" は移植できた。トップ画面のタイトルをオレンジにしてみた。CFX-9850G の処理速度に対応するために、WHACKAMO の冒頭にある変数A の初期化を 2→A と変更しただけで、ロジックは変えていない。実際に遊んでみると、液晶の応答性が悪さは、さほど気にならない。
 Whack-a-Mole のダウンロード

キーコード取得プログラム
fx-9860GIIで作ったキーコード取得プログラムを移植した後、CFX-9850G 用になるよう表示を一部変更した。
 Keycode_1 Keycode_MENU 
左:起動直後の画面、右:キーコード取得プログラム、[MENU] キーを押したところ。

CFX-9850G は、fx-9860Gシリーズや fx-CGシリーズと全く同じキーを備えており、キーコードも同一になっている。
 Keycode のダウンロード

ところで、上記2つの移植したプログラムでは小文字アルファベットが表示されている。CFX-9850G 本体では、プログラム編集画面で小文字アルファベットを入力する方法が無いが、小文字を使ったプログラムを転送すると小文字が表示される。システムには既に小文字フォントが準備されていることが分かる。

プログラムリンクソフトウェアFA-124でCATファイルを開くとコードを編集できる。そこで出力文字列を小文字アルファベットに変更できる。変更後のCATファイルを保存し、CFX-9850G に転送すれば、プログラムで小文字アルファベットを表示可能になる。 



処理速度の比較

四則演算および関数計算

加算プログラム
加算 

プログラムを起動し、N に 1000 を入力して実行時間を計る。

CFX-9850G のプログラム
fx7000G_source_adding_up_Isz2 AddTest_For 
繰り返しに Goto / Lbl を使うケース(左)と For を使うケース(右)の2通りで処理速度を調べる。


数値積分プログラム
関数 

この通史積分は、とね日記 - 席初の手帳型プログラム関数電卓 CASIO FX-502P (1979), FX602P (1981) で取り上げられているものをそのまま使わせていただく。

プログラム起動し、分割数として 1000 を入力して、時効時間を計る。

CFX-9850G のプログラム
FuncTest_Goto_9850 FuncTest_For_985 
クリア絵師に Goto / Lbl を使うケース(左)と For を使うケース(右)の2通りで処理速度を調べる。

以前調べた結果と併せて、上記の計算速度のを比較結果を示す [2019/07/31 修正]
加算プログラム数値積分プログラム
機種実行時間比較実行時間 (秒)比較
FX-502P123.1 秒---1261.8 秒---
FX-602P111.2 秒1.1 倍716.5 秒1.8 倍
FX-603P37.8 秒3.3 倍166.2 秒7.6 倍
fx-4000P61.7 秒2.0 倍349.1秒3.6 倍
fx-4500P195.0 秒0.6 倍798.1 秒1.6 倍
fx-4800PA=A+126.3 秒4.7 倍114.3 秒11.0 倍
Isz A21.2. 秒5.8 倍109.4 秒11.5 秒 
fx-7000GA=A+120.7 秒5.9 倍146.1 秒8.6 倍
Isz A19.3 秒6.4 倍143.2 秒8.8 倍
CFX-9850GGoto20.9 秒5.9 倍98.3 秒12.8  倍
For9.2 秒13.4 倍84.3 秒15.0 倍
記念すべき FX-502P を基準に、速度が何倍になっているかも併せて示している。

Basicコマンドとして追加された For 文は効率化、高速化している。Basicコマンドは可読性向上だけでは無いことが分かる。併せて関数処理も高速化していることが分かる。


グラフィックス描画
▶ ドット描画プログラム

fx-7000G のグラフィック画面が 95 x 63 ドットなので、それに合わせて CFX-9850G でも 95 x 63 ドットを塗りつぶして処理速度を比較する。

fx-7000G のプログラム
fx7000G_Dot DOT_fx7000G  

CFX-9850G のプログラム
Dot_Plot Dot_Pxl Dot_9850 
Plot を使うケース(左)と PxlOn を使うケースの2通りで処理速度を調べる。

PlotPxlOn
fx-7000G213 秒
CFX-9850G926.5 秒0.23 倍496.0 秒0.43 倍

fx-7000G では Rangeコマンドで指定した論理座標系に従って Plot コマンドでドットを描画する。CFX-9860G では ViewWindowコマンドで指定した論理座標系に従って Plot コマンドでドットを描画する。

For 文は効率化・高速化されていることは上の例で分かっているが、ドット塗りつぶしプログラムでは CFX-9850G がかなり処理が遅い。グラフィック画面へのデータ転送に時間がかかっており、それがボトルネックになっていると考えられる。
fx-7000G の液晶は 95 x 63 = 5085 ドット、CGX-9850G は 127 x 63 = 6001 ドット、その差 2016 ドット。1ドット出力するたびに転送しているなら、CFX-9850G のグラフィック画面への転送は fx-7000G よりもデータが多いから転送が重い理由となり得る。 

CFX-9850G には、PxlOn コマンドが追加されている。このコマンドは左上が原点 (1, 1) の物理座標系でのドット描画コマンドであり、Plot よりは約2倍高速だ。PlxOn は論理座標系のように座標計算が不要なので高速になっていると考えられる。


画面更新プログラム
上で、画面へのデータ転送が処理速度のボトルネックになることが分かったので、頻繁に画面更新するプログラムを実行して、その処理速度を調べて比較することにする。

ところで Getkey コマンドの追加によりテンキーと[EXE]キーだけでなく、[AC]を除く全てのキー入力が検知可能になり、Locate コマンドの追加により任意の位置への出力が可能になったので、プログラムの自由度が大きく向上し、画面がスクロールしないプログラムを書けるようになった。画面がスクロールしないプログラムでは、画面更新速度は重要な評価ポイントになる。

出力画面は、テキスト画面とグラフィックス画面 (グラフ画面) の2つがあり、これらは同時に表示できない。そこでテキスト画面の高速更新プログラムとグラフィックス画面の高速更新プログラムを作成して評価に利用することにする。

第一弾として CFX-9850G で調べる。

グラフィックス画面更新プログラム - モンテカルロ法にょる円周率計算
MonteCar_9859 
プログラムのダウンロード - Montecar.cat を電卓に転送する
プログラムの詳細はこちら
ランダムに500回点を打って出力するまでの時間を調べると、165.6 秒であった。

テキスト画面更新プログラム - ピタゴラス数の計算
Pytha_9850 
プログラムのダウンロード - Pytha.cat を電卓に転送する
プログラムの詳細はこちら
ピタゴラス数500個を計算して結果を出力するまでの時間を調べると、294.3 秒であった。


プログラム電卓の系譜

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-7000Gfx-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 文で使う ThenElse の直後が開業だと Syn ERRORになってしまう。この残念な仕様のためコードの可読性が損なわれている。
それだけではなく、行列の初期化コマンドが無いので変数を用いた行列の初期化ができない、現行最新機種に搭載されている便利な関数が不足しているなど、まだ発展途上と言える。

なお、ドット描画コマンド Plot と PxlOn / PxlOff の詳細仕様が現行の最新機種とは異なり、理解できない動作をする。これについては調査継続中だ。



温故知新 - FX-502P / FX-602P / FX-603P
温故知新 - fx-4000P / fx-4500P / fx-4800P
温故知新 - fx-7000G
温故知新 - CFX-9850G
温故知新 - CFX-9850GC PLUS

温故知新 - fx-9860G
温故知新 - fx-5800P
温故知新 - fx-CP400
温故知新:番外編 - 関数電卓としての使い勝手



応援クリックをお願いします。励みになるので...
にほんブログ村 IT技術ブログ 開発言語へ


 


keywords: プログラム関数電卓、プログラミング、Casio Basic、CFX-9850GC PLUS

リンク集 | ブログ内マップ













テーマ : プログラム関数電卓
ジャンル : コンピュータ

温故知新:番外編 - 関数電卓としての使い勝手

プログラム電卓 温故知新
 - 搭載プログラミング言語に注目して、プログラム電卓の変遷を考える -

 
2019/08/11
追記修正 2019/08/12


番外編 - 関数電卓としての使い勝手

プログラム電卓を関数電卓として使わない人は少ないと思う。

私自身は、特定のプログラム電卓を普段使いとして持ち歩き、日常的には業務上自作のプログラムを使うだけでなく、チョットした技術計算を行うために関数電卓として使うことも多い。

その際、感覚的に関数電卓としての使いやすさの優劣を付けている。そこで、過去からの代表的なプログラム電卓を関数電卓として使った時に使い勝手について、定量的に評価してみようと思う。


評価対象

以下の、スタンダード関数電卓2機種とプログラム電卓7機種。
Calcs

- fx-JP900:スタンダード関数電卓の最新機種
- fx-260 Solar II:1行表示の古いタイプの関数電卓
- FX-603PFX-502P, FX-602P とキーレイアウトが同一。長く愛用した。
- fx-4000P:fx-7000G のグラフキーを除けば、残りのキーレイアウトは同一。
- CFX-9850G:分数変換 (仮分数⇔帯分数変換)キーが無い以外は fx-9860G シリーズと同一。 
- fx-9860Gfx-9860GII ともキーレイアウトが同一、まとめて 9860G シリーズとする。
- fx-5800P:プログラム関数電卓の最新機種。
- fx-CG50fx-9860G シリーズ、fx-CG10 / CG20 とキーレイアウトは同一。
- fx-CP400:カシオ最高機能電卓。キーではなく、スタイラスによるタッピングが主な入力方法。


関数電卓としての使い勝手の評価方法

関数電卓として使う時に押すキーのうち、シングルアクションで使えるオモテのキーが多いほど使いやすく、続いて [SHIFT]に続いて押すダブルアクションで機能するウラのキーが多いほど使いやすいという基準で評価した。

但し、以下の条件も考慮した (私の個人的な使用パターンも含む)。

※1)繰り返しの無い計算を行う際に使うキーを対象にした。
※2)キーを1回押して機能を発揮するものを "1 Action" (シングルアクション) として、
   [SHIFT] の後に押すキーは "2 Action" (ダブルアクション) キーとしてカウントした。
※3)分度秒に関する入力や変換は余り使わないので対象外とした。
※4)メモリへの保存や呼び出しは殆ど使わないので、[STO], [RCL], [M+] などは対象外とした。 
※5)双曲線関数で使う hypキーは [SHIFT] を使わない "2 Action" (ダブルアクション) とした。
※6)fx-CP400 では、[keyboard]を押した後、ソフトウェアキーボードを1回タップして使える機能
   を "2 Action" (ダブルアクション) とした。



評価結果
Result_Table
 ※ クリックして拡大できます

表の下3行には、"1 Action"(シングルアクション)のキーつまり表のキーの数、"2 Action"(ダブルアクション)のキーつまり裏のキーの数、そしてそれらの合計を示している。ダブルアクションまででカバーできる関数が一番多いのが fx-4000P、次点が fx-9860Gシリーズ、fx-5800Pfx-CGシリーズという結果になった。

1行表示の電卓としては fx-4000P はとても使いやすいという感覚は、結果の数値が裏付けたと思う。

結果の数値から、fx-5800Pfx-9860G シリーズ、fx-CG10/CG20/CG50 が同点2位を示していて意外な結果だ。fx-5800P が関数電卓として一番使いやすいと思っている。結果の数値が、太いフォントで4行表示の画面による見やすさが感覚に反映していると思う。

グラフ関数電卓は大きく重いことが使いやすさの感覚に影響していると思う。私の場合は、fx-5800Pfx-CG50 を普段使いしているが、fx-5800P の方が使いやすいと感じているが、微妙な差でしかない。

実は最近入手した fx-4000P が小型軽量でとても使い易い関数電卓と感じている(とても気に入った)。以前は技術者や学生の間で人気の高い機種だったと見聞きしている。シングルアクションでもダブルアクションでえる関数キーが最も多い 上記の結果は、過去の人気を裏付けていると思う。  


皆様は、どうであろうか?



温故知新 - FX-502P / FX-602P / FX-603P
温故知新 - fx-4000P / fx-4500P / fx-4800P
温故知新 - fx-7000G
温故知新 - CFX-9850G
温故知新 - CFX-9850GC PLUS
温故知新 - fx-9860G
温故知新 - fx-5800P
温故知新 - fx-CP400
温故知新:番外編 - 関数電卓としての使い勝手



応援クリックをお願いします。励みになるので...
にほんブログ村 IT技術ブログ 開発言語へ


 


keywords: プログラム関数電卓、プログラミング、Casio Basic、CFX-9850GC PLUS

リンク集 | ブログ内マップ

テーマ : プログラム関数電卓
ジャンル : コンピュータ

温故知新 - fx-7000G

プログラム電卓 温故知新
 - 搭載プログラミング言語に注目して、プログラム電卓の変遷を考える -

 
追記修正 2019/08/09


特定のカシオ製プログラム電卓に搭載されたプログラミング言語にスポットライトを当てて、過去から現在に至る仕様の変化を調べる。

3. グラフ機能の追加 

今回は、世界初グラフ関数電卓 fx-7000G を取り上げる。

このシリーズには、発売順で下記の機種がある;
- fx-7000G
- fx-7200G
- fx-7500G
- fx-7000GA
- fx-7000GB
- fx-7300G

1985年に fx-7000G が発売された。
言語使用については、グラフィックコマンド (グラフィック画面消去の Cls コマンド含む) を除けば fx-7000G 搭載言語およびコマンド類は同年発売された fx-4000P と全く同じである。一方プログラム処理速度は fx-7000G の方が fx-4000P よりも2~3倍速い。fx-7000G で保存出来るプログラムステップは最大 422ステップで、fx-4000P の最大 550ステップより少ない。

N-fx-4000P_7000G_Keys
左がfx-7000G、右が fx-4000P のキーボード
 
fx-7000G の上部キーで上から2行目のキーはグラフィックス関係 (写真左側)。この行を除けば、テンキーを含む他のキーの種類と配置が fx-4000P (写真右側) と全く同じで、[SHIFT] や [Alpha] キーと共に使う機能の割り当ても全く同じだ。同時期に発売されたことから、開発が同時に進められた可能性も考えられ、興味深い。

翌年 1986年には fx-7200G が発売された。fx-7000G と同じ機能を持っているとの情報 (Kyoro's Room Blog - Casio グラフ関数電卓 fx-7200G) があるが、ネットではマニュアルやその他情報が殆ど得られない。あまり出回らなかった機種かも知れない。カシオの関数電卓 のサイトによれば、fx-7200Gfx-7000G よりも処理速度が僅かに速い (四則演算は 1.1倍、グラフィックス描画はほぼ同じ)。

1988年には fx-7500G が発売された。これは 折りたたみ式だが、マニュアルを見る限り言語仕様は fx-7000G と変わりが無い。但し保存できるプログラムステップが最大 4009 と大幅に増量された。カシオの関数電卓 のサイトによれば、fx-7000Gシリーズの中で fx-7500G の処理速度が最も速い (四則演算は 1.2倍、グラフィックス描画は 1.35倍)。

1990年には fx-7000GA が、1991年には fx-7000GB が発売された。これらの言語仕様もマニュアルを見る限り fx-7000G と変わりが無く、保存できるプログラムも最大422ステップと同じだ。カシオの関数電卓 のサイトによれは、GAは省電力の代わりに処理速度が遅くなり、GB で多少速くなったが fx-7000G よりは遅いとある。



Casio fx-7000G

casio-fx7000g   fx-7000G 

fx-7000G のマニュアルはネットで見つからないが、機能上(消費電力以外)は、ほぼ同じと思われる fx-7000GA のマニュアルは以下からダウンロードできる。
fx-7000GA のマニュアル

関数電卓としては、内部演算精度が13桁で、よく使う関数キーが[SHIFT]キー無しで押せる(表に出ている)ので、例えば fx-5800P よりも使いやすい。

ドットマトリックス液晶ディスプレイは、テキスト表示が16桁8行である点は、使い勝手を大幅に改善してくれる。液晶自体は 96ドットx64ドットだが、グラフィック表示の範囲はの95ドットx63ドットになっていて、上端1ラインと左端1ラインはグラフ (グラフィック) の描画コマンド (Sketchコマンド)である PlotLine の描画領域に含まれない。

ちなみに、カシオの関数電卓 のサイトではベンチマークで 96dot x 64dot の塗りつぶしを行っているが、無用な塗りつぶし動作が含まれる結果になっているので、その分時計な時間がかかっている。95dot x 63dot の塗りつぶしで良いと思う。他の機種についても描画範囲を超えた範囲での描画をベンチマークで行っているので、その意味で同条件のベンチマークなので問題が無いのは言うまでも無い。

さて、プログラミング環境については、先ず保存容量が 422 ステップとかなり少ない。 プログラム編集画面は、デフォルトで上書きモードなので、PCや最近の電卓の挿入モードに慣れていると、とても使いにくい。
なお、カシオの電卓は、スタンダード関数電卓を含めて 2005年発売の機種から一斉にデフォルトで挿入モードに切り替わって使いやすくなっている。


数値演算
fx-7000G 搭載言語のグラフィックス意外の主なコマンドは、
・キー入力: ?→A
・出力:" ",
・代入:
・無条件ジャンプ:Goto/Lbl
・条件ジャンプ:
・カウントジャンプ: Isz, Dsz
・比較演算:=, ≠, <, >, ≦, ≧
・サブルーチンコール: Prog
・配列変数 A[ ] が使える。
これらは全てキーに割り振られている。

なお、条件ジャンプ () は、[条件式]⇒[文1]:[文2] という書式で、1行に書かないとエラーになる。

この条件分岐は、
If [条件式]
Then
 [文1]
Else
 [文2]
IfEnd

と同じだ。但し、文1 と 文2 は1つの文しか使えず、句切り文字 : を使ってマルチ文を書くことは許されない仕様だ。

これらの仕様は、同時期の 1985年に発売されたプログラム関数電卓 fx-4000P に極めて似ており、fx-7000G にある Cls コマンドが唯一違うくらいだ。但し、Cls コマンドはグラフィック画面の消去でありテキスト画面を消去するコマンドは備わっていない。また、文字列出力コマンド " " は内部カーソルの改行を伴う。

上記の fx-7000G 搭載言語の仕様は、時を経て現在のグラフ関数電卓に引き継がれている点は興味深い。私が調べている限り、fx-7000G や fx-4000P の搭載言語は現在のグラフ関数電卓やプログラム関数電卓に引き継がれている。一例として以下に示す4つのプログラムは、CFX-9850G シリーズ、fx-9860G シリーズ、fx-CGシリーズ、fx-5800P でもそのまま動作する。


数値演算プログラム例
上で比較した「加算プログラム」と「数値積分プログラム」を fx-4800P と fx-5800P も加えて、実行速度比較を比較する。

加算プログラム
加算 

プログラムを起動し、N に 1000 を入力して実行時間を計る。

fx-7000G のプログラム
fx7000G_source_adding_up2 fx7000G_source_adding_up_Isz2 
変数 I のカウントアップに I+1→IIsz I の2通りで処理速度を調べることにする。


数値積分プログラム
関数 

この通史積分は、とね日記 - 席初の手帳型プログラム関数電卓 CASIO FX-502P (1979), FX602P (1981) で取り上げられているものをそのまま使わせていただく。

プログラム起動し、分割数として 1000 を入力して、時効時間を計る。

fx-7000G のプログラム
fx7000P_souce_func3 fx7000P_souce_func_Isz3 
変数 B のカウントアップに B+1→BIsz B の2通りで処理速度を調べることにする。

以前調べた結果と併せて、上記の計算速度のを比較結果を示す [2019/07/31 修正]
加算プログラム数値積分プログラム
機種実行時間比較実行時間 (秒)比較
FX-502P123.1 秒---1261.8 秒---
FX-602P111.2 秒1.1 倍716.5 秒1.8 倍
FX-603P37.8 秒3.3 倍166.2 秒7.6 倍
fx-4000P61.7 秒2.0 倍349.1秒3.6 倍
fx-4500P195.0 秒0.6 倍798.1 秒1.6 倍
fx-4800PA=A+126.3 秒4.7 倍114.3 秒11.0 倍
Isz A21.2. 秒5.8 倍109.4 秒11.5 秒 
fx-7000GA=A+120.7 秒5.9 倍146.1 秒8.6 倍
Isz A19.3 秒6.4 倍143.2 秒8.8 倍
fx-7000G の A=A+1 と Isz A の結果が逆になっていたので修正した [2019/07/31] 

記念すべき FX-502P を基準に、速度が何倍になっているかも併せて示している。

同じ年(1985年)に発売された fx-4000P よりも処理がかなり速い。11年後 (1996年) 発売の fx-4800P は関数処理が速くなり、上表の関数計算が最速になっているが、発売当時の製品としては fx-7000G はかなり速い機種と言える。


グラフィック描画

fx-7000G 搭載言語のブラフィックコマンドは以下の通り;
Cls (グラフィック画面消去)
Graph (数式からグラフを描画する)
Range (描画範囲を座標で定義する)
Plot (点を描画する / ポインタを描画する)
Line (線を描画する)
Factor (描画グラフの倍率を設定する)

これらは、全てキーに割り振られている。

数式をグラフ化する機能としては、最低限のコマンド類で、グラフィック描画と言うよりもグラフ描画と言うべきだ。


グラフィックプログラム例

グラフィック画面で全てのドットを塗りつぶしてみる。
fx7000G_Dot DOT 

描画には 213秒 (3分33秒) 要した。
fx-7000G 以降のグラフ関数電卓でも上記のコードがそのまま走る。ところで2001年以降に発売されたグラフ関数電卓の中では fx-9860G が最もグラフィックス描画が速いのだが、同じコードの実行に 260秒程度かかり、fx-7000G よりも遅い。fx-7000G のグラフィック描画が意外に速いことが分かる。



プログラム電卓の系譜 [2019/08/08 修正]

FX-502P で手帳型のプログラム電卓の市場が形成され、カシオが世界で認知されるブランドになった。fx-4000PFX-502P よりも小さく軽く、処理速度も速いことから、多くのエンジニアに支持されたようだ。

fx-4000P とほぼ同時発売された fx-7000G は世界初のグラフ関数電卓だが、グラフ描画コマンドは至ってシンプルだ。グラフ機能以外のコマンドは プログラム関数電卓 fx-4000P と同一で、現在の機種からみればシンプルだが、配列が使え、構造制御を行うための必要なものは揃っている。足りないのはプログラム保存容量 (422ステップ)と言えよう。ところでプログラム編集画面は、デフォルトで上書きモードなので使いづらい。ちなみに FX-502P / FX-602P / FX-603P は挿入モードで使いやすかった。

カシオのプログラム電卓の系譜において、その黎明期のマイルストーンといえる機種を並べてみた。
N-FX502P_fx4000P_fx7000G 
左から、FX-502P、fx-4000P、fx-7000G

fx-4000P にグラフ機能を付加してまとめたのが fx-7000G と考えて差し支えないだろう。これら2機種の搭載言語仕様は、その後のプログラム電卓の系譜の原点に位置づけられる。fx-7000G 搭載のコマンドは、現在最新のグラフ関数電卓 fx-CG50 にほぼそのまま採用されており、fx-7000G から fx-CG50 に繋がる系譜が現在の主流になっている。 

なお、詳しくは "温故知新" の fx-5800P 編で触れる予定だが、fx-4000P から 最新のプログラム関数電卓 fx-5800P への進化の系譜は、直接繋がっていない。fx-4000 の系統は独自に進化しておらず、fx-7000G の系統に受け継がれている。fx-4500P から fx-4850P に至る流れは fx-4000P とは別系統であることは言語仕様から明白で、この系統は今は途絶えている。これは言語仕様からの見方である。一方、ハードウェアやデザインなどの言語仕様以外に着目すれば、fx-5800Pfx-4800P 4850P  の後継機といっても良いだろう。fx-4800P の言語仕様の系統は途絶えていても、それ以外は fx-5800P に無駄なく引き継がれている。

現在主流のグラフ関数電卓に搭載されている言語の系統は、fx-7000G の後、ハードウェアの進化やOSの進化を経て、一旦 CFX-9850G で大きな進化を見せる。



温故知新 - FX-502P / FX-602P / FX-603P
温故知新 - fx-4000P / fx-4500P / fx-4800P
温故知新 - fx-7000G
温故知新 - CFX-9850G
温故知新 - CFX-9850GC PLUS
温故知新 - fx-9860G
温故知新 - fx-5800P
温故知新 - fx-CP400
温故知新:番外編 - 関数電卓としての使い勝手



応援クリックをお願いします。励みになるので...
にほんブログ村 IT技術ブログ 開発言語へ


 


keywords: プログラム関数電卓、プログラミング、Casio Basic、CFX-9850GC PLUS

リンク集 | ブログ内マップ

テーマ : プログラム関数電卓
ジャンル : コンピュータ

温故知新 - fx-4000P / fx-4500P / fx-4800P

プログラム電卓 温故知新
 - 搭載プログラミング言語に注目して、プログラム電卓の変遷を考える -

 
2019/07/14
追記修正 2019/08/09


特定のカシオ製プログラム電卓に搭載されたプログラミング言語にスポットライトを当てて、過去から現在に至る仕様の変化を調べる。

2. 新しいプログラミング言語の指向 - 可読性の向上

今回取り上げる fx-4000Pシリーズを順に並べると、結構ある。
- fx-4000P
- fx-4100Pfx-4200P
- fx-4500Pfx-4500PA
fx-4800Pfx-4850P 

1985年にシリーズ最初の fx-4000P が発売された。構造制御を行う各種ジャンプコマンドや配列変数が使え、最大550ステップのメモリ容量がある。搭載言語は FX-502P / FX-602P / FX-603P とは大きく異なり、可読性が大きく向上した。同じ年には 世界初グラフ関数電卓 fx-7000G も登場していて、ほぼ同じ仕様の言語と422ステップの容量がある。

fx-4100P と fx-4200P は実機を持っていないがダウンロードしたマニュアルを見る限り、数式記憶機能はあるが、構造制御コマンドが無いので対象外とする。
fx-4100P Manual
fx-4200P Manual

1989年に fx-4500P が発売された。プログラム保存のメモリ容量は 1103ステップとなり、fx-4000P の550ステップからほぼ倍増された。但し、搭載言語仕様は fx-4000P の延長線上にない点に注目したい。例えば、カウントジャンプ機能が無くなって不便になった一方、条件ジャンプ機能は、条件分岐後のマルチ文が使えるように改善された。
プログラム処理速度は 同時期に発売されていた FX-602P よりもかなり遅くなった。 
なお、fx-4500P をマイナーアップデートした fx-4500PA はバッテリー駆動時間が延長されている。マニュアルを見る限り言語仕様は fx-4500P と変わっていない。

1996年2月に後継の fx-4800P が登場。画面は4行表示と広くなり普通の関数電卓としても使いやすい。言語仕様は fx-4500P の延長線上にあり、カウントジャンプコマンドが追加された。プログラム保存容量の標記は、ステップ数からバイト数に変更され、最大4500バイトになった、プログラム処理も fx-4500P より格段に速くなった。

1997年に発売された fx-4850P は、このシリーズの最終モデルになる。但し中文のマニュアルしか見つからず、理解可能な範囲で見る限り、言語仕様は Cls コマンドが追加された以外は fx-4800P と違いが無さそうだ。但しプログラム保存容量は 28Kバイトと 6倍増強された。
2006年に fx-5800P が発売された時に fx-4850P は生産中止となった(発売は継続)。fx-4000P 発売開始からシリーズ全体は21年間続いたことになる。


今回は、fx-4500P と fx-4800P の言語仕様をみてゆく。fx-4000P は持っていないが、sentaro様にベンチマークテストでご協力を頂いた。

1990年12月のカタログには、FX-620P (生産中止品として)、FX-603Pfx-4500P の3機種が掲載されている。
2006年9月のカタログでは、fx-5800P 新発売と同時に FX-603P が消えており、fx-4500PA, fx-4800P (生産中止), fx-4850P (生産中止) が掲載されている。
1990年12月発行のカシオ電卓総合カタログ - FX-602PFX-603Pfx-4500P
2006年9月発行のカシオ電卓総合カタログ - fx-4500PA、fx-4800Pfx-4850Pfx-5800P



Casio fx-4000P [2019/07/30 追記]

ほぼ新品状態の程度の良い中古品を入手できた。
fx-4000PN-New_fx-4000P 

1985年に発売された fx-4000P は、1桁ごとにドットマトリックスになった液晶を採用。当時の関数電卓としては処理速度が速く、FX-502PFX-602P よりも小型の優れた機種だ。但しプログラムは 句切り文字を使って、全て1行に入力する。

搭載言語の主なコマンドは以下の通り。 
fx-4000P Manual

・キー入力: ?→A
・代入:
・無条件ジャンプ:Goto/Lbl
・条件ジャンプ:
・カウントジャンプ: Isz, Dsz
・比較演算:=, ≠, <, >, ≦, ≧
・サブルーチンコール: Prog
・配列変数 A[ ] が使える。

なお、条件ジャンプ () は、[条件式]⇒[文1]:[文2] という書式で、1行に書かないとエラーになる。

この条件分岐は、
If [条件式]
Then
 [文1]
Else
 [文2]
IfEnd

と同じだ。但し、文1 と 文2 は1つの文しか使えず、句切り文字 : を使ってマルチ文を書くことは許されない仕様だ。

これらの仕様は、同時期の 1985年に発売された世界最初のグラフ関数電卓 fx-7000G のグラフィックスを除けば、全く同じである。この仕様は fx-4000P シリーズの後継機には引き継がれず、時を経て fx-5800P や現在のグラフ関数電卓に引き継がれている点は興味深い。



Casio fx-4500P

fx-4500P fx-4500P&manual   

fx-4500P が1989年に発売された時 (発売年情報はこちら) は FX-602P も併売されており、FX-602P のプログラム容量 512ステップから、fx-4500P は1103ステップに増え、プログラムエリア(保存できるプログラム数) はメモリ容量内なら無制限になった(FX-602P は20)。

fx-4500P のディスプレイは、上段ドットマトリックス、下段7セグメントの2行表示に進化した。ほぼ同時期、1年後発売の FX-603P も2行表示に進化した。メモリ保護用に CR-1216を1個、本体駆動用に CR-2025を1個使う。仕様上の連続稼働時間は 3000時間で、実際に使うと2年は持たない。マイナーアップデート版の fx-4500PA は CR-2032 を2個使うように変更され、仕様上 5000時間駆動となった。


fx-4500P 搭載のプログラミング言語の特徴
fx-4500P 搭載の言語は、fx-4000P からキー入力コマンドや代入コマンドが変更され、条件ジャンプの仕様も変更されており、fx-4000P のアップデート版というよりも、別系統を目指したと思われる。

・キー入力:{A} (キー入力した数値を変数Aに代入)
・代入:=
・無条件ジャンプ: Goto/Lbl
・条件ジャンプ: ⇒ / ≠⇒
・カウントジャンプ: 無くなった
・比較演算: =, ≠, <, >, ≦, ≧
・サブルーチンコール: Prog
・配列変数 A[ ] が使える。

条件ジャンプの仕様も fx-4000P から変更され、
書式は、

[条件]⇒[文1]:[文2]: ・・・ :[文m]≠⇒[文m+1]:[文m+2]:  ・・・ :[文n]Δ

となり、新たに追加された ≠⇒Δ コードを使って、マルチ文を書けるようになった。

If [条件] 
Then
 [文1]:[文2]:  ・・・  ・:[文m]
Else
 [文m+1]:[文m+2]: ・・・ :[文n]
IfEnd

と同じで、条件ジャンプは fx-4000P よりも実用性が向上した。

fx-4500P のプログラム編集は、上書きモードがデフォルトになっており、PCや最近のプログラム電卓の挿入モードに慣れていると、かなり使いにくい。


実際のプログラム例
さて実際に「加算プログラム」と「数値積分プログラム」を作り、FX-502P, FX-602P そして FX603P と実行速度を比較してみた。

加算プログラム
加算 

FX-502P のプログラム
FX502P_source_adding_up 

FX-602P / FX-603P のプログラム
FX602P_source_adding_up
 
プログラムを実行すると N の入力が求められるので、1000 を入力する。

これと同じ動作を fx-4000P で書くと、句切り文字を使って以下のような1行になる。
fx4000P_source_adding_up2 

同じ動作を fx-4500P で書くと以下になる。
fx4500P_source_adding_up 
何をやっているのか分かりやすい。


数値積分プログラム
関数 

FX-502P のプログラム
FX502P_source_func 

FX-602P / FX-603P のプログラム
FX602P_souce_function 
プログラムを実行するとシンプソン法で必要な分割数の入力を求めるので、1000を入力する。
なお、この数値積分はとね日記 - 世界初の手帳型プログラム関数電卓 CASIO FX-502P (1979), FX-602P (1981) で取り上げられているものをそのまま使わせていただく。

これと同じ動作を fx-4000P で書くと以下のように句切り文字を使って1行になる。
fx4000P_souce_func2 

同じ動作を fx-4500P で書くと以下になる。
fx4800P_souce_func 
何をやっているのか、可読性が向上した。

計算速度のを比較結果を示す;
加算プログラム数値積分プログラム
機種実行時間比較実行時間 (秒)比較
FX-502P123.1 秒---1261.8 秒---
FX-602P111.2 秒1.1 倍716.5 秒1.8 倍
FX-603P37.8 秒3.3 倍166.2 秒7.6 倍
fx-4000P61.7 秒2.0 倍349.1秒3.6 倍
fx-4500P195.0 秒0.6 倍798.1 秒1.6 倍

sentaro様がお持ちの fx-4000P で同じベンチマークを実施してい頂いた結果も加えている。シリーズ最初の機種 fx-4000P が後継の fx-4500P よりもかなり速い。Kyoro's Room Blog の fx-4000P を取り上げた記事 によれば、CPUには ポケコン (後期のPBシリーズ) で使われている HD61747 が使われているそうだ。なるほど速いわけだ。

fx-4500P は、FX502P / FX-602P / FX-603P に対してプログラムの可読性が向上したが、処理速度はかなり遅い。新たな言語の処理に必要なパワーと、搭載CPUの能力のバランスの問題だ。



Casio fx-4800P

fx-4800P-S fx-4800P_w_Manual
(fx-4800P の左の画像は色合いが忠実に再現されているので、関数電卓マニアの部屋 - 絶版コレクション fx-4800P から拝借した)

関数や各種設定、そしてプログラムコマンドの呼び出しは、fx-4500P では全てキー入力だったが、fx-4800P では多くをソフトウェアメニューで呼び出すように変更された。1つのキーに複数の役割を与えると、キーの周りに小さな文字でゴチャゴチャと印刷する必要があるが、ソフトウェアメニューのおかげでスッキリと見やすくなった。

4500P_keys 4800P_keys 
      fx-4500P のキー           fx-4800P のキー

さて、fx-4800Pfx-5800P は、キー配列やハードウェアデザインがかなり似ている。

4800P_5800P 
      fx-4800P          fx-5800P

また、ソフトウェアメニューも両者は似ており、操作系もかなり共通している。一方、プログラミング言語に着目すると fx-4800P は fx-5800P とは大きく異なる。fx-5800P については別途取り上げる。


fx-4800P 搭載のプログラミング言語の特徴
fx-4800P 搭載の言語は、fx-4500P と殆ど同じだが、一旦 fx-4500P で消えたカウントジャンプが 復活した。fx-4000P とは別系統なのは明らかだ

・キー入力:{A} (キー入力した数値を変数Aに代入)
・代入:=
・無条件ジャンプ: Goto/Lbl
・条件ジャンプ: ⇒ / ≠⇒
・カウントジャンプ: Isz, Dsz 復活した
・比較演算: =, ≠, <, >, ≦, ≧
・サブルーチンコール: Prog
・配列変数 A[ ] が使える。

条件ジャンプの仕様は fx-4500P と全く同じだ。

プログラム編集は、fx-4500P と同様に上書きモードがデフォルトになっており、PCや最近のプログラム電卓の挿入モードに慣れていると、かなり使いにくい。

[2019/07/15 追記] fx-4800P の裏技
sentaro様の情報で、fx-4800Pでは使用する変数によって処理速度が異なるとのこと。
以下原文;
"同時期に販売されていたと思われるグラフ電卓のfx-9700GEも同じ仕様です。
 A~Zまでの1文字変数は固定領域で確保されているのが通常なので速度は変わらないはずですが、これらの機種では変数Aが一番早くZが一番遅いというへんてこな仕様です。
通常のBASIC言語では変数は使われた順(=登録された順)に速いという原則がありますが、それとはまた違ったくせのある仕様です。ということで、使用する変数はAから順に使うのが速く動作させるための秘訣です。(^^;"



実際のプログラム例
上で比較した「加算プログラム」と「数値積分プログラム」を fx-4800P と fx-5800P も加えて、実行速度比較を比較する。

加算プログラム
加算 

プログラムを起動し、N に 1000 を入力して実行時間を計る。

FX-502P のプログラム
FX502P_source_adding_up 

FX-602P / FX-603P のプログラム;
FX602P_source_adding_up 

fx-4000P のプログラム
fx4000P_source_adding_up2 

fx-4500P のプログラム
fx4500P_source_adding_up 

fx-4800P のプログラム
fx4800P_source_adding_up fx4800P_source_adding_up_Isz 
fx-4800P に追加されたカウントジャンプ Isz を使ったプログラムもテストする。


数値積分プログラム
関数 

この通史積分は、とね日記 - 席初の手帳型プログラム関数電卓 CASIO FX-502P (1979), FX602P (1981) で取り上げられているものをそのまま使わせていただく。

プログラム起動し、分割数として 1000 を入力して、時効時間を計る。

FX-502P のプログラム
FX502P_source_func 

FX-602P / FX-603P のプログラム
FX602P_souce_function
 

fx-4000P のプログラム
fx4000P_souce_func2 

fx-4500P のプログラム
fx4800P_souce_func 

fx-4800P のプログラム
fx4800P_souce_func fx4800P_souce_func_Isz 
fx-4800P で追加されたカウントジャンプ Isz を使ったプログラムもテストする。


以上の計算速度のを比較結果を示す;
加算プログラム数値積分プログラム
機種実行時間比較実行時間 (秒)比較
FX-502P123.1 秒---1261.8 秒---
FX-602P111.2 秒1.1 倍716.5 秒1.8 倍
FX-603P37.8 秒3.3 倍166.2 秒7.6 倍
fx-4000P61.7 秒2.0 倍349.1秒3.6 倍
fx-4500P195.0 秒0.6 倍798.1 秒1.6 倍
fx-4800PB=B+126.3 秒4.7 倍114.3 秒11.0 倍
Isz B21.2 秒5.8 倍109.4 秒11.5 倍

記念すべき FX-502P を基準に、速度が何倍になっているかも併せて示している。

sentaro様がお持ちの fx-4000P でベンチマークを実施してい頂いた結果も加えている。シリーズ最初の機種 fx-4000P が後継の fx-4500P よりもかなり速い。Kyoro's Room Blog の fx-4000P を取り上げた記事 によれば、CPUには ポケコン (後期のPBシリーズ) で使われている HD61747 が使われているそうだ。なるほど速いわけだ。

fx-4500P は、四則演算は FX-502P よりも遅い。しかし、関数演算は 1.6 倍だけ高速化している。

fx-4800P はカウントジャンプが追加されており、Isz コマンドの処理が速いことが分かる。fx-4500P の言語仕様を引き付いているが、四則演算が高速化されており、FX-603P よりも速い。また、関数演算は大幅に高速化されている。



プログラム電卓の系譜 - fx-4000シリーズ [2019/08/09 追記修正]

このシリーズでは、可読性の向上を目指して、搭載言語を試行錯誤した跡が見てとれる。単に複数の計算式を繰り返し実行する数式記憶機能だけを搭載した fx-4100Pfx-4200P も含まれるが、これらは冒頭で述べたように特に取り上げていない。

fx-4000P
シリーズの中では、他のモデルと異なる言語仕様を採用している。例えば、キー入力には { } でなく ?→ を使い、代入には = ではなく を使う。ほぼ同じ時期に発売された世界初のグラフ関数電卓 fx-7000G は、グラフ機能痛いは同一の仕様になっている。fx-5800Pfx-CG50 は、fx-4000P の直系と言える。その後、BASIC風のコマンドを追加・増強し、CPUや液晶の性能を向上させるのが主流となっている。

fx-4500P
言語仕様からみて、fx-4000P とは異なる系統の言語が搭載されている。fx-4000P にあったカウントジャンプが無くなったのは不便だ。一方で、のは、新たな系統の実装が理由だと思われる。改善例を挙げるなら、fx-4000P では条件分岐においてマルチ文が使えなかったが、fx-4500P では ≠⇒Δ コードを追加することでマルチ文を使えるようになっている。メモリがほぼ倍増したのは良いが、プログラム処理速度が大幅に低下した。新しい言語仕様導入の過渡期のため処理速度まで手が回らなかったと思われる。

fx-4800P / fx-4850P
fx-4500P で無くなった条件ジャンプ (Isz, Dsz) が追加 (復帰) され、さらに処理速度が大幅に向上した。fx-4500P の系統でのプログラミング言語搭載機は、メモリ増強と実行速度の向上により、ようやく実用的になった。また、fx-4500P までは関数やコマンドは全て多機能キーで入力する仕様だったが、fx-4800P / fx-4850P ではソフトウェアメニューが導入された。

このソフトウェアメニューやハードウェアは fx-5800P に色濃く引き継がれた。一方で別系統の fx-4000P のプログラミング言語の仕様が fx-5800P に引き継がれた。それぞれ良い点が引き継がれたと言える。

fx-4000Pシリーズは、数式記憶機能のみのモデルが含まれたり、異なる系統の言語仕様が混在したり、ポケコン用CPUと関数電卓用CPUが混在したりと、シリーズとしての統一性が無く、試行錯誤の跡が見られ、将来のプログラム電卓の進化に貢献したシリーズと言える。



温故知新 - FX-502P / FX-602P / FX-603P
温故知新 - fx-4000P / fx-4500P / fx-4800P
温故知新 - fx-7000G
温故知新 - CFX-9850G
温故知新 - CFX-9850GC PLUS

温故知新 - fx-9860G
温故知新 - fx-5800P
温故知新 - fx-CP400
温故知新:番外編 - 関数電卓としての使い勝手



応援クリックをお願いします。励みになるので...
にほんブログ村 IT技術ブログ 開発言語へ


 


keywords: プログラム関数電卓、プログラミング、Casio Basic、CFX-9850GC PLUS

リンク集 | ブログ内マップ

テーマ : プログラム関数電卓
ジャンル : コンピュータ

温故知新 - FX-502P / FX-602P / FX-603P

プログラム電卓 温故知新
 - 搭載プログラミング言語に注目して、プログラム電卓の変遷を考える -

 
2019/06/30
追記修正 2019/08/09

特定のカシオ製プログラム電卓に搭載されたプログラミング言語にスポットライトを当てて、過去から現在に至る仕様の変化を調べる。

1. キーストローク式言語 - 携帯型プログラム電卓の普及

最初に取り上げるのは、1978年発売の世界初の手帳サイズのプログラム関数電卓 FX-502P。これは、手帳サイズの薄型、軽量でボタン電池駆動の省電力設計といった、プログラミング環境をだれでも手軽に持ち歩ける画期的な製品だった。

そして僅か3年後の 1981年にはメモリ容量が256ステップから512ステップに倍増した  FX-602P が発売された。カシオ初(国内初か?)のアルファベット出力機能が付き、関数演算がほぼ倍速化された。使い勝手(特にプログラミング)が改善され、FX-502P と同じサイズで大幅に機能向上したせいか、海外でも広く普及し国際的なカシオファンを生み出した記念すべき製品だ。

さらに 1990年に FX-603P が発売された。ポケコンに使われていた CPU (日立 HD62002) を搭載し、PCリンクが可能になり、大幅に高速化された。この製品は 2006年に fx-5800P が発売されるまでの16年の間、継続販売された。

1981年2月発行のカシオ電卓総合カタログ - FX-502P
1981年6月発行のカシオ電卓総合カタログ - FX-602P
1990年12月発行のカシオ電卓総合カタログ - FX-603P


Casio FX-502P

FX-502P_3  FX-502P&Manual_2  

厚い本「プログラムライブラリ」も付属していたが、紛失してしまったので写真には写っていない。定数早見表なるカードも付属していた。

私が購入したのが 1979年で、今年で40年になるが、問題無く動作するのには驚かされる。駆動部分が無いとは言え、スイッチや電池ホルダ内のバネ状の電極も劣化していない。2~3年ごとに動作確認と電池交換をしていたのが良かったのだと思う。さらに付属品の手帳型カバーは経年劣化で多少硬化しているが、割れもなく、殆ど変色もしていない。付属品であっても、きちんとした製造品質だったと今になって分かる。

取扱説明書の中にある [GOTO]キーの説明部分を見ると、思わず時代を感じさせてくれる。
FX502P_Desc 
今時、"ゴーツー"  という人は見かけない(^_^;

FX-502P 搭載のプログラミング言語の特徴
さて、このモデルでは、マニュアル計算を行う時に押すキーの順序通りに記録することでプログラミングする、いわゆるキーストローク式の言語で、言い換えれば表示レジスタの内容に対して演算を施すようにコーディングする方式だ。このモデルは古い関数電卓共通の関数後置式が採用されていて、[3] [0] [cos] と入力すると cos 30 を計算するので、これをそのまま記録してプログラミングする。加えて GOTO / LBL による無条件ジャンプ機能、表示レジスタや特定レジスタの値を利用した条件ジャンプ機能、特定レジスタを利用したカウントジャンプ機能、さらには間接ジャンプ機能など用いて、プログラムの構造制御を行う。

このモデルの言語の優れている点の1つとして、間接ジャンプ機能を挙げたい。特定メモリにジャンプ先の番号 (LBL N の N)が格納されていると、LBL N にジャンプする機能だ。現在のプログラミング言語で普通に使われている switchSelect ステートメントと同じ動作を間接ジャンプで実現できる。

もう一つ特徴的なのは、ISZDSZ コマンドによるカウントジャンプ機能だ。このモデルの場合は、0番メモリに格納されている数値を、1づつ増やす (ISZ) か減らして (DSZ) ゆき、0になったら、次のコマンドを飛ばして2つ先のコマンドを実行する機能だ。興味深いのは、カシオの最新のプログラム電卓 fx-5800Pfx-CG50 でもこのカウントジャンプコマンドが搭載されていることだ。現在の仕様では、特定メモリではなくて任意の変数を指定できるが、基本は同じだ。IszDsz はカシオ独自のコマンドであり Basic コマンドとしては異質であるが、非力なCPUで効率良く処理をするには不可欠だ。ジャンプ機能としてでなく、単にインクリメント、ディクリメントするだけでも効率よく高速に行えるのも有用な点といえる。

実際のプログラム例
整数1からNまで順に加える「加算プログラム」を例にあげる。
加算 

FX-502P のプログラムは以下のようになる (19ステップ)。
FX502P_source_adding_up 

入力には HLT コマンドで入力待ち、入力後、表示レジスタメモリ1番に取り込む (HLT Min0)。

x≧0 は条件ジャンプコマンドで、表示レジスタの値が ≧0 (0以上) なら、次のコマンドを実行、そうれなければ2つ先のコマンドを実行する。

FX-502P の液晶は7セグメント表示であるため、コマンドをそのまま表示できない。そこで7セグで表示可能なキャラクタを使ったコードでの表示になる。コード判読のために、各キーのコードが記入されたシートをキーボードの上に被せて使う。慣れればコードも覚えてしまうが、コード表示が FX-502P でのコーディングの欠点といえる。



Casio FX-602P

FX-602P FX-602P&Manual_s

FX-602P はドットマトリックス液晶を搭載し、アルファベット表示が可能になった。これにより、コマンドがコード表示しかできなかった FX-502P の欠点が解消された。使えるメモリが増えたため、メモリ指定は2桁になった。

ところで、[GOTO]キーの説明は、依然笑える(^_^;
FX602_Desc 

さて、FX-602P は、FX-502P のプログラムが使える互換性が確保されている。

実際のプログラム例と処理速度の比較
シンプソン法で数値積分を実行する「数値積分プログラム」を例に挙げる。
関数 

この数値積分は、とね日記 - 世界初の手帳型プログラム関数電卓 CASIO fx-502P (1979)、fx-602P (1981) で取り上げられているので、そのまま利用させていただく。

FX-602P のプログラムは以下のようになる (39ステップ)。とね日記で紹介されているものから余計なステップを省略した。
FX602P_souce_function 


さて、「加算プログラム」と「数値積分プログラム」の実行速度を比較してみた。

加算プログラム
加算 
FX602P_source_adding_up 
プログラムを実行すると N の入力が求められるので、1000 を入力する。

数値積分プログラム
関数 
FX602P_souce_function 
プログラムを実行するとシンプソン法で必要な分割数の入力を求めるので、1000を入力する。

実行結果を示す;
加算プログラム数値積分プログラム
機種実行時間比較実行時間 (秒)比較
FX-502P123.1 秒---1261.8 秒---
FX-602P111.2 秒1.1 倍716.5 秒1.8 倍

両機種で共通しているのは、四則演算(加算プログラム)よりも関数(数値積分プログラム)の方が処理に時間がかかること。

2機種を比較してみると、2機種の間で四則演算の処理能力には大きな違いは無い。この結果から1000回の無条件ジャンプの処理速度は FX-602P が若干速いが、ほぼ同じと言える。一方、三角関数の処理能力には 1.8 倍の明らかな差が見られたので、FX-602P では関数処理の能力を向上させたことが分かる。



Casio FX-603P

FX-603P_1 FX-603O&Manual_s 

FX-603P は、ドットマトリックスの2行表示になり、プログラム保存のメモリ容量は 6144ステップと FX-602P の12倍に増え、RS-232Cでのシリアルポートが追加内蔵され、PCリンクも可能になった。処理速度も大幅に向上した。ハードウェアの進化に伴い消費電力が増え、連続使用時間は FX-602P の600時間から160時間へと大幅に低下した。またサイズが少し大きくなり、重量は FX-602P の100gから136gへと大幅に増えた。実際に手に取るとズッシリと重く感じる。
502P_602P_603P 

ところで、[GOTO]キーの説明だが、
FX603P_Desc 
1990年で改善、とはいってもカタカナ表記が依然気になる!
今時の説明書なら、"GOTO / SAVE / POKE キー" といった感じが普通では?

さて、FX-603P は、FX-502P / FX-602P の上位互換機であり、プログラムは共通して使える。

今回は FX-602P のソースをそのまま使用して上記の2つのプログラムを実行し、比較してみた。
加算プログラム数値積分プログラム
機種実行時間比較実行時間 (秒)比較
FX-502P123.1 秒---1261.8 秒---
FX-602P111.2 秒1.1 倍716.5 秒1.8 倍
FX-603P37.8 秒3.3 倍166.2 秒7.6 倍

FX-603P では、四則演算だけでなく、関数処理能力がさらに向上した。



プログラム電卓の系譜 - FX-502シリーズ [2019/08/09 追記修正]

FX-502P
 に搭載されたプログラミング言語は、レジスタやメモリの値を直接処理するので、アセンプラのように効率が良い。しかしプログラムコードの可読性は悪く、デバッグは楽ではない。その後メモリが増強され、CPUが高速化され、通信機能が搭載され FX-603P でこの系統の完成形となる。

このようなキーストローク式のプログラミング言語ではあるが、1978年の FX-502P の登場から、2006年に FX-603P が生産中止されるまでの28年間もの長期間、広く世界市場で支持された。

FX-502P シリーズは、ポケットに収まる手帳型でありながら、関数電卓としての性能と効率の良いプログラミング性能を提供したことで、プログラム電卓が市場で広く認知される役割を果たしたと言える。

この系統と並行して、カシオ電卓のプログラミング言語は可読性の向上を指向することになる。そして、fx-3000P シリーズを経て、プログラミング言語の系譜におけるマイルストーンというべき fx-4000P が登場する。



温故知新 - FX-502P / FX-602P / FX-603P
温故知新 - fx-4000P / fx-4500P / fx-4800P
温故知新 - fx-7000G
温故知新 - CFX-9850G
温故知新 - CFX-9850GC PLUS

温故知新 - fx-9860G
温故知新 - fx-5800P
温故知新 - fx-CP400
温故知新:番外編 - 関数電卓としての使い勝手




応援クリックをお願いします。励みになるので...
にほんブログ村 IT技術ブログ 開発言語へ


 


keywords: プログラム関数電卓、プログラミング、Casio Basic、CFX-9850GC PLUS

リンク集 | ブログ内マップ













テーマ : プログラム関数電卓
ジャンル : コンピュータ

最新記事
検索フォーム
最新コメント
カテゴリ
C# (3)
Visitors
Online Counter
現在の閲覧者数:
プロフィール

やす (Krtyski)

Author:やす (Krtyski)
since Oct 30, 2013


プログラム電卓は、プログラムを作って、使ってナンボ!

実際に触って気づいたこと、自作プログラム、電卓プログラミングについて書いています。

なお管理人はカシオ計算機の関係者ではなく、Casio Basicが面白いと感じる1ユーザーです。


写真: 「4駆で泥んこ遊び@オックスフォード郊外」

リンク
月別アーカイブ
Sitemap

全ての記事を表示する

ブロとも申請フォーム

この人とブロともになる

QRコード
QR