温故知新 - fx-4000P / fx-4500P / fx-4800P
- 搭載プログラミング言語に注目して、プログラム電卓の変遷を考える -
2019/07/14
追記修正 2019/12/03
追記修正 2021/09/11
追記修正 2021/09/27
過去から現在に至る性能や仕様の変化を調べ、プログラミング言語を中心にカシオ製プログラム電卓の系譜を明らかにする。
2. 新しいプログラミング言語の指向 - 可読性の向上
今回取り上げる fx-4000Pシリーズを順に並べると、結構ある。
- fx-4000P
- fx-4100P / fx-4200P
- fx-4500P / fx-4500PA
- fx-4800P / fx-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-4000P、fx-4500P、fx-4800P 3機種の言語仕様をみてゆく。
1990年12月のカタログには、FX-620P (生産中止品として)、FX-603P、fx-4500P の3機種が掲載されている。
2006年9月のカタログでは、fx-5800P 新発売と同時に FX-603P が消えており、fx-4500PA, fx-4800P (生産中止), fx-4850P (生産中止) が掲載されている。
▶ 1990年12月発行のカシオ電卓総合カタログ - FX-602P、FX-603P、fx-4500P
▶ 2006年9月発行のカシオ電卓総合カタログ - fx-4500PA、fx-4800P、fx-4850P、fx-5800P
▋Casio fx-4000P [2019/07/30 追記]
温故知新の企画で色々と調べる過程で fx-4000P がエポックメイキングな製品だとわかり、ほぼ新品状態の程度の良い中古品が入手できた(eBay)。


1985年に発売された fx-4000P は、1桁ごとにドットマトリックスになった液晶が採用された。当時の関数電卓としては処理速度が速く、FX-502P や FX-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 の言語仕様は 4000P シリーズの他のモデルには引き継がれず、時を経て fx-5800P や現在のグラフ関数電卓に引き継がれている点は興味深い。
▋Casio fx-4500P


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時間で、実際に使うと1年は持たない。マイナーアップデート版の fx-4500PA は CR-2032 を2個使うように変更され、仕様上 5000時間駆動となった。
[2021/09/11 追記]
fx-4500P のアルミの裏カバーを外すとバッテリ交換ができる。本体駆動用の CR-2025 1個が挿入・固定されており、裏側から貼り付けた薄い金属部品とネジで導通をとった金属板とで正負の電極を構成している。その左側には既に電池を装着する貫通穴が開けられており(奥の黒い部分は基板に貼り付けられた絶縁用樹脂フィルム)、もう一組の電極部材と導通用に金属ネジを裏から貼り付けることでコイン電池を増設できるようになっている。CR-2025 の代わりに少し厚みのあるだけの(少し容量が大きい) CR-2032 を2個装着し、負極を接続するアルミ板を留める金属ネジを裏から貼り付け、基板と導通をとれば fx-4500PA を構成できるように最初から設計されている。なぜ最初からコイン電池2個で発売しなかったのかは興味のあるところだ。当時はコイン電池が高価で入手しずらかった事情に配慮したのだろうか?

以前、購入後毎日のように使っていた時、そして保管するようになってからも電池の持ちが仕様値よりもかなり短いと感じていた。電池交換をして実際に使わずに1年程度保管すると Battery Low となったり、全く電源が入らないことを何度も経験してた。電源ONにするには [AC] キーを押すのだが、手帳ケースを付けていると 外からケースに力が掛かれば [AC]キーが簡単に押されて電源ONになっていたことに気づいた (保管方法に問題があった)。そして、保管時に手帳型ケース越しに押されないように留意することで、1年以上保管しても Battry Lowにならずに電卓を駆動できるようになった。以前日常的に使っていた時に仕様よりも遙かに電池寿命が短いと思ったのは、カバンの中で電卓が押されて、使わない時にも電源ONになっていたことが原因だった可能性に、最近気がついた。
確かに fx-4500P の [AC] キーは、手帳型ケースの外から押されるだけで簡単に押せてしまう。

ただでさえ電池容量が少ないのに、不要なところで電源ONにされやすいのは問題だ。
一方で、fx-5800P は、[AC] キーの両側にリブ (薄い突起) があり、力が加わってもキーが押されにくくなっている。

fx-4800P にも [AC] キーの周りにこのようなリブ構造はない。fx-4800P と fx-5800P は共にプラスチックのハードケースを備えているので、かなり強い力で押さなければ [AC] キーが押されることはないと思うが、カシオは不用意に [AC] が押される問題をどこかで認識したのだろう。fx-5800P になって改良されていることに今更ながら気づいた。
[2021/09/27 追記]
hangyodon1123 様から、[AC] キーにリブがある fx-4500P もあるとのこと。マイナーバージョンアップ品の可能性あり。

▍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 のプログラム

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

プログラムを実行すると N の入力が求められるので、1000 を入力する。
これと同じ動作を fx-4000P で書くと、句切り文字を使って以下のような1行になる。

同じ動作を fx-4500P で書くと以下になる。

何をやっているのか分かりやすい。
▶数値積分プログラム

FX-502P のプログラム

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

プログラムを実行するとシンプソン法で必要な分割数の入力を求めるので、1000を入力する。
なお、この数値積分はとね日記 - 世界初の手帳型プログラム関数電卓 CASIO FX-502P (1979), FX-602P (1981) で取り上げられているものをそのまま使わせていただく。
これと同じ動作を fx-4000P で書くと以下のように句切り文字を使って1行になる。

同じ動作を fx-4500P で書くと以下になる。

何をやっているのか、可読性が向上した。
計算速度のを比較結果を示す;
加算プログラム | 数値積分プログラム | |||
機種 | 実行時間 | 比較 | 実行時間 (秒) | 比較 |
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-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-4500P では全てキー入力だったが、fx-4800P では多くをソフトウェアメニューで呼び出すように変更された。1つのキーに複数の役割を与えると、キーの周りに小さな文字でゴチャゴチャと印刷する必要がある(それはそれで格好いいと思ったものです)が、ソフトウェアメニューのおかげでスッキリと見やすくなった。


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

fx-4800P fx-5800P
また、ソフトウェアメニューも両者は似ており、操作系もかなり共通している。一方、プログラミング言語に着目すると fx-4800P は 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 のプログラム

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

fx-4000P のプログラム

fx-4500P のプログラム

fx-4800P のプログラム


fx-4800P に追加されたカウントジャンプ Isz を使ったプログラムもテストする。
▶数値積分プログラム

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

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

fx-4000P のプログラム

fx-4500P のプログラム

fx-4800P のプログラム


fx-4800P で追加されたカウントジャンプ Isz を使ったプログラムもテストする。
以上の計算速度のを比較結果を示す;
加算プログラム | 数値積分プログラム | ||||
機種 | 実行時間 | 比較 | 実行時間 (秒) | 比較 | |
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 | B=B+1 | 26.3 秒 | 4.7 倍 | 114.3 秒 | 11.0 倍 |
Isz B | 21.2 秒 | 5.8 倍 | 109.4 秒 | 11.5 倍 |
記念すべき FX-502P を基準に、速度が何倍になっているかも併せて示している。
シリーズ最初の機種 fx-4000P が後継の fx-4500P よりもかなり速いのは上で述べている。
fx-4500P は、四則演算は FX-502P よりも遅い。しかし、関数演算は 1.6 倍だけ高速化している。
fx-4800P はカウントジャンプが追加されており、Isz コマンドの処理が速いことが分かる。fx-4800P は fx-4500P の言語仕様を引き継いでおり、四則演算が高速化され FX-603P よりもさらに速い。関数演算はさらに大幅に高速化されている。
▋プログラム電卓の系譜 - fx-4000シリーズ [2019/08/09 追記修正]
このシリーズでは、可読性の向上を目指して、搭載言語を試行錯誤した跡が見てとれる。単に複数の計算式を繰り返し実行する数式記憶機能だけを搭載した fx-4100P や fx-4200P も含まれるが、これらは冒頭で述べたように特に取り上げていない。
▍fx-4000P
シリーズの中では、他のモデルと異なる言語仕様を採用している。例えば、キー入力には { } でなく ?→ を使い、代入には = ではなく → を使う。ほぼ同じ時期に発売された世界初のグラフ関数電卓 fx-7000G は、グラフ機能以外は同一の仕様になっている。fx-5800P や fx-CG50 は、fx-4000P の直系と言える。
▍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-9860GII
温故知新 - fx-CG10 / fx-CG20
温故知新 - fx-CP400
温故知新 - fx-CG50
温故知新 - fx-9750GIII
温故知新:番外編 - 関数電卓としての使い勝手
温故知新:番外編 - 電卓評価用の積分を解いてみた
応援クリックをお願いします。励みになるので...