ゲーム ~ マスターマインド (fx-9860GII)

作者のコメント追記 2017/10/08
追記1 2017/10/09
追記2 2017/10/09


グラフ関数電卓で遊べるゲーム:マスターマインド を紹介する。


以前 fx-5800P 用の Hit & Blow ゲームのプログラムを紹介している。

fx-5800P【ゲーム】:Hit & Blow
fx-5800P:Hit&Blow【完成版】

当ブログ読者のツル様から Hit & BlowMaster Mind (マスターマインド) というゲームの派生版だと教えて頂いた。マスターマインドは、色の違う8つのピンの並びを当てるゲームで、同じ色が同じ位置にあれば Hit、同じ色が違う位置にあれば Blow と教えてくれて、それを元にピンの並びを当てるゲーム。推測した履歴が残るのでそれをヒントにできる。色の代わりに数字を用いたり、同じ数字の重複を認めたりと、様々なローカルルールがあるのだそうだ。

そして、ツル様がマスターマインドを fx-9860GII で作成された。これが結構遊べるので紹介したい。

ツル様は、初心者だと謙遜されているが、過去にポケコンでプログラムを作成して仕事などで活用なさっていたとのこと。プログラミング経験者だが Casio Basic 初心者と言える。ご本人曰く "初心者" でも、ここまで作り込めるので、自称初心者の方には大いに参考になると思う。


プログラムのダウンロード

ツル様作成 マスターマインド (fx-9860GII 用)
 
ダウンロードしたファイル MASTMIND.g1m を ファイル転送ツール FA-124 を使って fx-9860GII の <PROGRAM> フォルダに転送後、電卓の Program List から実行する。



遊び方の概要

MASTMIND を起動すると、
MasterMind_1st image 
スプラッシュ画面が表示され、1~9を使って4桁の数を当てるゲームだと分かる。

ここで、[ー] キーを押して次へ進むと、
MasterMind_2nd image 
ゲームの説明画面が現れる。
プログラムが自動作成する4桁の数の答えを当てる。但し4桁とも全て異なる数字になる。
数と桁が一致すれば Hit で、数は一致しても桁が異なれば 〇Blow と教えてくれる。但し HitBlow の数だけを教えてくれ、どの桁が HitBlow かは分からない。

ここで、[EXE] キーを押せばゲームスタート。
MasterMind_Game Start 
右上からスタートして、左下までの最大10回のトライで4桁を当てる。10トライで当たらなければ終了して、新たな出題で次のゲームになる。

少し待つと、数字が入力できるようになる。
MasterMind input 1 
入力するところに ? が表示される。

結構難しいと思う。私はマスターマインドは初めて遊ぶが、正解できる時は平均的に7トライ要した。
MasterMind done 

考え方のコツが分かればもっと正解率が上がりそうだ。管理人が作成した Hit&Blow は4桁で遊ぶと難易度が高すぎてつまらない。しかしこのマスターマインドは、入力履歴を参考にできるので面白くなる。



対応機種

◆ fx-9860GII、fx-CG20、fx-CG50

プログラムファイルは fx-9860GII 用の g1m ファイルだが、この g1m ファイルを fx-CG20 や fx-CG50 に転送すると、自動的に g3m ファイルに変換され、そのまま遊べるので、fx-CG20 / fx-CG50 にも対応する。管理人は fx-CG50 で遊んでいる。



作者(ツル様)のコメント

MASTER MIND自体はかなり以前から楽しんでいたゲームですが、もっといつでもどこでも楽しめるようにしたい。それをプログラム電卓で願望を叶えてくれたのがfx-9860GII です。丁度良い大きさの画面とバックライトに、プログラムの作りやすさがありました。

ゲーム実機では、判定をするためにもう一人必要ですが、これなら一人で楽しめます。予想数値を入力したらノーヒットノーブローでがっかり・・・ いえいえノーヒットノーブローということはその数値は使われていないという最大のヒントなのです。それを私は「ノーヒットノーブローの喜び」と呼んでいます(笑)


1.当MASTER MINDは、ゲーム実機に近い感覚で遊べるよう考えております。
fx-9860GII電卓の処理速度は早いので、入力に対する判定は一瞬なのですが、敢えて人が相手をしているかのように、わざと判定に時間をかけています。
(とは言え、実際レベルだともっさりしてくるので早め)

2.管理人様のProg作りへのポリシーにもありましたが、次に押すべきキーが表示されるような配慮もしております。

3.プロ電での自作なので、実機にはないブリンク表示もさせて、達成欲をくすぐる配慮もしました。(実はこの点がオリジナル)

4.モグラ叩きでも賞金稼ぎへ変更したように、賞金制にしてみました。
(-)で回答を見てからの入力では賞金は無しです。終了画面下のPが賞金残高です。

終了時は、回答を見たかどうかが画面表示で分かるようになっています。
(正解画面ではしゃぐ子供の横で、画面を見て突っ込む親がいるシチュエーションを浮かべながら作りました(笑))
回答を見てからでは、終了時は左側の▶が▶のままですが、見ないで自力正解の場合は▷になります。入力各段の4桁目で(-)を押すと回答が見られますが、3桁目入力待ち時点で消えるようにしています。

5.入力ミスの場合、4桁内に同じキー入力があると元に戻ります。
 (結構便利です)

使用している変数の説明
A: 表示用答え
B: ブローの数
C: ゲーム毎のトライ数
E: 入力値エラー
F: 表示位置のX値
G: 表示位置のY値
H: ヒットの数
J: 判定の値
K, L, M, N: 自動生成する答えの各桁
P: ポイント
Q: 降参時の回答表示
R: 判定計算用
S: For Nextでの時間作り用
U: ブリンク表示調整
W, X, Y, Z: 入力する値の各桁

今回のはVer3ですが、製作当初は?入力にして配列変数を使っていましたが、希望の位置に入力=表示になるよう変えていったら、配列変数なしでやれました。

自作ながら、正解して白黒ピンのブリンカーを見ると嬉しいです。自分としてはマスターマインドはやっぱり4桁が丁度良いです。
所有の実機では8色から4色を選ぶルールなのですが、1~9とやや難しくしました。

海外製の複数のMASTER MIND Progと比べても遊びやすい筈です。某フランス製のでは、判定ピンが入力ピンと位置が連動していて簡単過ぎでした。

世間では、6色から4色を選ぶルールだけれど、問題に重複ありやブランクありなどのローカルルールもあるようで、このVer3を改変して様々楽しんでみたいです。

管理人様がブログに書いていらっしゃる、「プログラム電卓は、プログラムを使ってナンボ!」という文言が大好きです。(笑)

最後に、制作にあたっては、管理人様のHIT & BLOWのコードを大いに参考にさせて頂きました。御礼申し上げます。



ツル様、ありがとうございます。



改 変 [2017/10/09 追記2]

ツル様から自由な改変の了承を頂いているので、2つの点を改変する。
  • [EXIT] キーで正常終了するようにする
  • 正解後の [EXE] を軽く受け付けるようにする
具体的には、ゲーム ~ マスターマインド (fx-CG20 / fx-CG50) に記載しているので、それを参照ください。

ダウンロード
改変した マスターマインド (fx-9860GII) MASTMIND




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



  


keywords: プログラム関数電卓、Casio Basic、ゲーム、マスターマインド、fx-9860GII、fx-CG20、fx-CG50

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

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

Casio fx-9860GII SD と fx-9860GII (OS 2.09)

2017/08/15


fx-9860GII & fx-9860GII SD  
最近 fx-9860GII SD と fx-9860GII を購入した。既に 2014年に入手して使っている国内正規版の fx-9860GII との違いについて、気がついた点を紹介する。

左が fx-9860GII SD で、写真では分かりにくいが、シルバーと濃紺のツートーンカラーで、若干高級感が漂う。機種名から分かるように SDカードスロットがありプログラムやデータを SD カードに保存でき、プログラムやデータのバックアップやPCとのやりとりに役立つ。残念ながら国内では未発売だ。

カシオの日本語サイトでは、fx-9860GII は生産中止となっているが、大型量販店ではまだ販売されているので、しばらくは在庫で対応しているのだと思う。ちなみに fx-CG20 も生産中止となっていて、国内ではグラフ関数電卓は全て生産中止になった格好だ。一方で、国内では未発売で、欧米で2017年3月末に発売された fx-CG50 が、いずれ国内でも発売されるのではないかと思っている (Casio fx-CG50 の概要 参照)。

Amazon Japan では、fx-9860GII 国内正規品の取り扱いが無くなっており、並行輸入品は¥11,000 程度と高価だが、Amazon USA では $66.96 で日本への送料を含めても ¥7,757 (1$ = ¥109) とかなり安く入手できる (2017年8月時点)。Amazon USA でポチッとしてから配達まで11日かかった。

国内未発売の fx-9860GII SD は Amazon USA で $127 で、日本への送料を含めると¥16,700 (1$ = ¥109)でかなり高価になる (2017年8月時点)。ポチッとしてから配達まで17日かかった。

Casio プログラム電卓の価格動向


OS バージョンと製造時期

カシオのグラフ関数電卓のソフトウェアは、OS とアドインプログラムから校正されていて、関数電卓としての機能や Casio Basic は OS
 に含まれる。2014年に入手した国内正規品」のOSバージョンは 2.04 で、今回購入した2機種の OS は共に 2.09 となっている。生産中止になって、まだ国内販売されているものは OS2.04 のままで、カシオのソフトウェアアップデートのページを見ると 最終 OS は 2.04 のままだ、ところが、ダウンロードできる取扱説明書は OS 2.09 になっているのが興味深い。
OS 2.04 から 2.09 へのアップデートにより、試験持ち込み時に電卓機能を制限できるようになる。

fx-9860GII シリーズは、電卓の裏側に英数字のコードが印刷されたステッカーが貼り付けられている。

[数字3桁] + "AW" + [英数2桁] + [アルファベット2桁] + [シリアル番号(6桁)]

- 数字3桁: fx-9860GII は 994、fx-9860GII SD は 997 となっているようだ。
- 英数2桁: 1桁目は製造年 (2009年以降の20XN年の N) + 2桁目は製造月 (1~9月は数字、10月はX、11月はY、12月はZ) 


私が所有しているのは、
- 2014年入手の fx-9860GII:   英数2桁 = 44 ⇒ 2014年4月製造、OS 2.04
- 2017年入手の fx-9860GII:   英数2桁 = 74 ⇒ 2017年4月製造、OS 2.09
- 2017年入手の fx-9860GII SD: 英数2桁 = 6Y ⇒ 2016年11月製造、OS 2.09


同梱品

2014年入手の fx-9860GII は、以下が同梱されていた;
- 電卓本体 + クイックマニュアル + 保証書 + USB ケーブル + 3Pケーブル + CD

ところが、2017年入手の fx-9860GII / fx-9860GII SD は以下のように同梱物が削減されている;
- 電卓本体 + クイックマニュアル + 保証書 + USBケーブル



矢印キー

2014年に入手した fx-9860GII の矢印キーは、特定方向のキーを押すとキーと筐体が干渉してギシギシ音が鳴る。当ブログの読者の sentaro様や AkSd 様からも同じ問題の報告を頂いている。

2017年4月製造の fx-9860GII はこの問題が見られず、地道な改善が行われている可能性がある。なお 2016年製造11月の fx-9860GII SD は矢印キーの問題が残っている。


SDカードの効用

SDカードには、プログラムやデータの保存のみができる。SD に保存した Casio Basic プログラムを直接起動できあにし、Casio Basic プログラムから SDカードのデータにアクセスすることはできない。とは言うものの、PCに繋がなくても アドインプログラムやCasio Basic プログラムを保存できるのはとても便利だ。

SD規格の高速なものが良く、SDH や SDXC 規格だと却ってアクセスが遅くなるとのことだ (sentaro様による情報)。

なお、アドイン版Casio Basi (C.Basic) では、SD上のプログラムを起動でき、SDカード上のプログラムやデータにアクセス可能だ。私は  Panasonic のHigh Speed SD 512MB を使っている。




機能・性能

機能や性能は、SDカードを使えるかどうかを除けば、他は全く同じだ。





何か新たなことが分かれば、追記してゆく。



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


 

keywords: CasioBasicプログラム電卓、fx-9860GII SD、fx-9860GII
リンク集 | ブログ内マップ

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

fx-9860GII への移植 - 厄介な 旧来の命令

2015/01/12 追記
2017/06/29 更新


fx-5800P から fx-9860GII への移植

5800と9860、外観 
fx-9860GIIfx-5800P


これまで、fx-5800P のCasio Basicで作ったプログラムを fx-9860GII へ移植してきて、留意点がだいたい分かってきました。以下の項目以外は、ほぼコンパチと思ってよさそうです。


1) Getkey
キーコードはハードウェア依存するのでキーコードさえ変更すれば、Getkey コマンド自体の動作は同じなので移植に問題なし。
 ⇒ Casio Basic コマンドリファレンス - Getkey

2) Locate
Locate コマンドの動作は同じで fx-5800P からそのまま移植可能。fx-9860GII が持つ広い画面に合わせて最適化する場合は、引数を変更すれば良い。
 ⇒ Casio Basic コマンドリファレンス - Locate

3) Cls
fx-5800P 搭載 Casio Basic の Cls は、fx-9860GII では ClrText に相当する。機能は全く同じ。内部カーソル行のリセット機能まで同じ。
 ⇒ Casio Basic コマンドリファレンス - Cls


4) 配列変数
fx-5800P 搭載 Casio Basic の配列変数は、fx-9860GII の Caso Basicには含まれていないため、代わりに行列を使えば良い。


5) ◢ (出力)命令
出力動作後、一時停止状態の際、- DISP - と表示される。その表示行は完全に占拠されるためプログラムで使えなくなる。今のところ - DISP - の表示を止める方法が見つかっていない。fx-5800P で 命令を使った画面構成は、fx-9860GIIでは崩れてしまう。画面構成を壊したくないなら、 命令を使わずに Locate を使い、さらに以下のような [EXE] キー待ちのコード(2行)加えると、 命令と同様に一時停止し  [EXE] キーでプログラムを先に進めるようにできる。

Locate X,Y,"HogeHoge"
Do
LpWhile Getkey≠31



6) " " (出力)命令
fx-9860GII 搭載 Casio Basic の " " (出力)命令は、fx-5800P とは別物といって良く、私はプログラムでは使えないと思う。
以下の2行のコードを、fx-5800P と fx-9860GII の両方で走らすと、その違いが分かるだろう。

Locate 10,1,"RIGHT"
"LEFT"


fx-5800P での出力は、
LEFT     RIGHT

fx-9860GIIでの出力は
LEFT

上の2行のコードの1行目と2行目を入れ替えれば、fx-5800P と fx-9860GII は同じ表示結果になる。

fx-9860II 搭載の Casio Basic の " " (出力)命令は、チョット我が強く、1行丸々自分のために占拠する。◢ (出力)命令も1行丸々占拠するので、このあたりは同じ。fx-9860GII の Casio Basic はマイナーバージョンアップしており、その際に旧来の命令の仕様が変わったと思われる。

[追記]: CFX-9850GC (PLUS は付かない)、PRIZM fx-CG10 (fx-CG20と同じのUS版) でも fx-9860GII と同じ動作とのこと。従って、fx-5800P だけが独自のチューニングを行っていると思われる。


7) ?→ (入力)命令
我の強い " "(出力)命令の性格を引きづり、fx-9860GII では使いにくいものになっている。
上記の" "(入力)命令の違いを示すコードと同様にして、以下を fx-5800P と fx-9860GII で動作させると、違いが分かる。

Locate 10,1,"RIGHT"
"INPUT"?→A


fx-5800Pでの出力は、
INPUT?   RIGHT
[入力桁]

fx-9860GIIでの出力は、
INPUT?
「入力桁]

RIGHT が出力される前提で書いた fx-5800P のコードは、そのまま fx-9860GII では使えない。
RIGHT 表示を右側に残して INPUT? と表示させ、1行下が入力行となるのがfx-5800P の動作だが、fx-9860GII では頑固な " " 出力に占拠された1行目に RIGHT を表示させた状態で入力させることは不可能(と思います)。


8) ?(入力)命令
fx-5800P では、?記号単独で入力命令として使えるが、fx-9860GII ではこれが使えない。

fx-5800P では、以下のコードが書ける。

"INPUT"?A

すると、予め A に代入されている値が表示される。これの良いところは、プログラムを使っていて A の値を変更する必要が無い場合は、数値入力せずに [EXE] キーを押すだけで入力が確定するので、入力の手間が省ける。

fx-9860GII では?に続いて → (代入命令) が必要であり、必ず数値入力をしないと [EXE] で確定できない。

'INPUT"?→A

なお fx-5800P でも上記 8) で示したように、この記法は可能であり、?(入力)命令に柔軟性がある。fx-FD10 Pro でもこの記法が可能なようである。


9) 関数
関数の ( ) の扱いが変更されている。fx-5800P では関数の後に ( が必要なので入力時に ( が自動的に付加される。fx-9860GII では入力時に ( が付かず代わりにスペースが入るように変更されている。但し ( ) を付けても問題なく動作するので fx-5800P からの移植性には影響しない。

しかし、fx-9860GII では関数入力時に ( が自動的に付かないので、計算の優先度については、より注意が必要。例えば、

fx-5800P での

Int(log(X)+1)→G ・・・(1)

は、fx-9860GII でそのまま使える。

fx-5800P で Int を入力すると Int( と表示されますが、fx-9860GII では Int + [スペース] と表示され、以下のように ( ) なしでの記述が可能で、エラー無しに動作する。

log X

sin X

Int log X +1→G ・・・(2)
 
(1) と 式 (2) は異なる結果を与えることに注意が必要だ。

(2)を式 (1) と同じ結果になるように書き換えると、

Int (log X) + 1 → G

となる。

式(1)と(2) が異なる結果を与える原因は、Int 関数が及ぶ範囲が異なっているためだ。つまり  fx-9860GII で関数を使う際には、計算の優先度と順序をよく考えてなくてはいけない。入力時に ( ) を付けなくて良い仕様は、数式通り入力の機能を Casio Basic にそのまま適用したことによると推察されるが、プログラミングの立場から見れば改悪だと思う。fx-5800P の括弧付きの仕様に戻すべきだ。[2017/06/29 更新]

(1)と同じにするには、

Int (log X +1)→G

とする。



fx-5800P から fx-9860GII に Casio Basic プログラムを移植する際、同一の動作をしない命令/コマンドをリストアップしたが、その中でも fx-9860GII 搭載 Caso Basic の " " (出力)命令は、完全互換の動作にするには、旧来の命令を使わずに Basic コマンドのみで互換動作を実現すればなんとかなりますが、fx-5800P からの移植の際に大幅にコードを書き直さなければならないケースがあります (経験済みです)。

これで苦労するくらいなら、" " (出力)命令を使わず、当ブログオリジナルの汎用サブルーチンである 入力ボックス 2.1G (fx-9860GII 専用) を使って入力部分を書き直す方が楽になることもあり(経験済み)、お勧めです。[2017/06/29 更新]

fx-5800P 搭載 Casio Basic は旧来の入出力命令とBasic準拠命令の折り合いがまだ良いのですが、fx-9860GII 搭載のマイナーバージョンアップした Casio Basic は旧来の入出力命令が使いにくくなっています。

旧来の入出力命令は fx-5800P でも柔軟だとは言えないのですが、fx-9860GII でさらに柔軟性が損なわれています。Casio Basic プログラムを書く時は、旧来の入出力命令を使わない方が良いのではないかと、私は思います。

Caso Basic進化に伴って旧来の命令を軽視する方向性が心配されますが、一方で 最新機種 fx-FD10 Pro では、単独の?(入力)命令が復活しています(マニュアルを読む限り)。旧来から慣れ親しんだ命令を多用するユーザーが多いのかも知れず、そのユーザーの利便性に配慮した復活かも知れません。

Basic準拠のコマンドについては、If 文、Do / While / For 文、その他制御命令や、電卓の表示方法を指定する ENG / Norm / FIX コマンドなど互換性はあるようです。



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



  

keywords: fx-5800P、fx-9860GIICasioBasicプログラム関数電卓

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


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

fx-9860GII のオーバークロック - Ftune 2 -

更新 2016/10/08

※画像と文章が重なって表示されることがありますが、その際は再読込すると正しく表示されます。


[2016/04/23 追記]
fx-CG20 を入手し、専用オーバークロック・アドイン Ptune2 を使い始めました。このタイミングで、Ftune2Ptune2 がアップデートされました。以下では、Ptune2 についても合わせて紹介しています。


fx-9860GII
入手している Casio fx-9860GII について、目下の興味は fx-5800P の Casio Basic プログラムの移植、そしてその結果の処理速度向上です。

 ⇒ fx-9860GII への移植 - ピタゴラス数
 ⇒ fx-9860GII への移植 - 素因数分解

fx-9860GII は、fx-9860G のマイナーバージョンアップの3代目ですが、マイナーバージョンアップするたびに処理速度が遅くなると言う不思議(/_;) fx-9860G の時に入手していれば良かったと後悔するも、時既に遅し。 

ところが、sentaro様のオーバークロック・アドイン - Ftune 2 - に出会って、事態は一変しました。最新の fx-9860GII 搭載の CPU の潜在能力を引っ張り出すオーバークロックを行うと、最新バージョンが最も速くなるようです。

現行機種の fx-9860GII (SH-4A搭載) は、ノーマルで 29MHz 程度。それを一気に 236MHz にしてくれます。その差は歴然で、上記の2つの移植記事の動画やデータを是非ご覧ください。

fx-9860GII は、対応SDKを用いてC言語でアドインプログラム開発でき、私は当初 プログラムをCで書いて処理速度を上げようと考えていましたが、Ftune2 を使えば、開発が楽な Casio Basic で十分だと言う気がしてきています。

[2015/02/16 追記]
グラフィックス描画のプログラムを作っていると、ノーマルクロックでは描画が遅くて、表示の確認に時間がかかることがあります。そんな時にオーバークロックを行えば、結果の確認が速くてストレスが減りますので、お勧めです。Ftune2 はプリセットクロックに簡単に切り替えができるのも、このような用途に向いています。通常はノーマルで必要な時だけクロックを上げて使えば良いのです。
 ⇒ fx-9860GII グラフィックス - モンテカルロ法

[2016/04/23 追記]
fx-CG20 を入手し、fx-9860GII の Casio Basic プログラムを移植しています。fx-CG20 は高精細カラー液晶を搭載していて、表現力が向上していますが、グラフィックス描画速度は fx-9860GII よりもかなり遅いことが気になっています。そこで、fx-CG2010 用のオーバークロックツール Ptne2 を使った高速化の恩恵を受けています。



カシオ グラフ関数電卓のオーバークロック・アドイン

オーバークロックツールは、当ブログの読者 sentaro様の作品で、アドインプログラムです。

作品群の概要は、

CASIO グラフ関数電卓を限界までチューンアップ 

を参照。

作品群には、以下のものがあります。
  • Ftune: CPU に SH3 を搭載した fx-9860G シリーズ、fx-9860GII POWER USB GRAPHIC(末尾に 2 が付かない)が対象
  • Ftune2: CPU に SH4A を搭載した fx-9860GII USB POWER GRAPHIC 2 が対象
  • Ptune2: fx-CG20 / fx-CG10 が対象

[2016/10/08 追記]
現在の最新バージョンは、1.11 です。マイナーバージョンアップでより確実かつ安全に使えるようになっています。

最新版 のダウンロード
Ftune Ver 1.01
Ftune2 Ver 1.11
Ptune2 Ver 1.11

Ver 1.01 以降;
CPU周波数限界やPLL周波数限界が低い個体によっては、メモリーチェックでエラーになることがあり、これを修正。
機能面は修正していないので、問題なく使えます。ver 1.00b で問題が発生していない場合は、特にバージョンアップの必要はありません。

祝!Ftuneシリーズのファンが、海外でも増えています(^_^)/
海外にて、Ptun2, Ftune2 の優秀性が認められ、絶賛の嵐!確実にファンを増やしています。詳しくは、Sentaro様のオリジナルダウンロードページの一番下にある、それぞれのリンクを見てください(^^;) 開発の苦労話しや、安全性を確保する考え方(保証はありませんが...)...などが読めます。和訳は各自で御願いします(^^;)
==========


このエントリーのコメント欄を利用して、Ftune2 / Ptune2 のQ&A を 開発者の sentaro 様自らご対応頂けます。私自身、幾つかの質問があるので、この機会に色々と教えて頂こうと思います。よろしく御願い致します。
 


オーバークロックとはどのようなものか? [2014/12/15 追記]

半導体製品を工場で作る際、当然のことながら品質管理されています。製造工程では、製品の性能や品質にはバラツキがあり、従って全く同じものが100%正確に製造されると言うことは絶対にありません。製品仕様は製造工程での性能や品質のバラツキを考慮して、保証できる安全な範囲で決定されます。さらには技術論だけではなく、販売戦略上の理由も仕様決定に影響があります。程度の差はありますが実際に行われていることです。通常はかなりの安全マージンを取っていることが多いようです。

言い変えると、実際に出荷される半導体製品は仕様より必ず性能が高いわけです。そして仕様と実際の個体の実力の差に目を付けて、仕様以上の実際の性能を引き出すのがオーバークロックです。製品保証外の動作をさせるので、保証対象外の行為だと言うことは自覚してください。

仕様以上の性能を引き出すオーバークロックは、メーカーの代わりに高負荷試験を行っているのと全く同じと言えます。幸運なら何も起こりません。逆に不運なら製品寿命が短くなる可能性があります。つまり、自己責任の世界です。

さて、Ftune2 は、過激な設定変更をさせないために設定範囲を決めるメニューを備えています。だから私は使用しており、本エントリーで取り上げさせて頂きました。

万一 fx-9860GII が故障したとしても、それはオーバークロックを行ったあなた自身の責任ということは、忘れないでください。当ブログで情報は提供しますが、不運な結果については作者や私が責任を負うことはありませんので、ご留意ください。


とは言っても...

CPUのクロック以外にも、種々の設定をバランス良く試してみることで、色々と違った結果が出ます。 
ベンチマークとして高い数値を狙うもよし、実際の Casio Basic を動かす時の高速化を狙うもよし、C言語で作ったアドインの高速化を狙うもよし、様々な魅力、魔力があるのが、オーバークロックの世界です。

私は、リスクを承知の上で、色々と遊ばせてもらっています。








応援クリックをお願いします。励みになるので...

人気ブログランキングへ


FC2ブログランキングへ




keywords: fx-9860GIIプログラム関数電卓、オーバークロック

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

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

fx-9860GII 高速化 - Ftune2 の導入

2015/11/08

fx-9860GII を高速化するアドインプログラム Ftune2 については、既に紹介しています。
fx-9860GII のオーバークロック - Ftune2 -

今回は、Ftune2 の導入を、簡単に説明してみます。


fx-9860GIIはじめに

カシオのグラフ関数電卓 fx-9860GII は、fx-5800P で動作する Casio Basic プログラムの移植性が高く、ともに構造化プログラミングが可能な新世代Casio Basic を搭載しています。但し同じ Casio Basic プログラムは fx-9860GII の方が fx-5800P よりもかなり高速に動作します。


fx-9860GII と fx-5800P

fx-5800P は Casio Basic 入門機と言えますが、fx-9860GII は 1段アップグレードした Casio Basic 開発環境で、さらにアドインプログラムが使えます。なお、fx-FD10 Pro は fx-9860GII のハードウェアに近いのですが、Casio Basic 専用プラットフォームの位置づけで、 アドイン機能は使えません。


fx-9860GII のアドイン機能

アドイン機能は電卓に新たなプログラムを導入して使うものです。但し、Casio Basic でアドインプログラムを作る環境はカシオにより準備されていませんし、世界中の Casio Fan による多くの作品の中にも、今のところ Casio Basic でアドインを作る開発環境は発表されていないようです。

アドインを作るには、C言語でのプログラミングが必要で、カシオが fx-9860G 用に開発したものをベースに fx-9860FII 用にも提供している SDK が最有力開発環境です。世界中の Casio Fan によりアドイン作成用のライブラリの提供や、CPUベースの深い情報が発信されています。 


Casio Basic と C言語

アドインプログラムはC言語で開発するので、Casio Basic より10倍程度高速動作し、Casio Basic で出来ないことができます。例えばファンクションキーを使ったメニュー表示は、SDK を使ったアドインならではのもので、これを Casio Basic で実現するのは出来ないとは言えませんが(Pict コマンドを使うなど)、あまり現実的ではありません。アドイン作成は、C言語でのプログラミングが必要なので、ハードルが高いと言えます。

一方で、Casio Basic は、既に当ブログで紹介しているように、敷居が低く生産性の高い開発言語です。電卓ならではのプログラムを簡単に作れるのが、新世代 Casio Basic の最大の存在価値です。例えば、fx-FD10 Pro に搭載されている土木・測量向けのプログラムは Casio Basic で書かれていますし、当ブログで紹介して内容を使えば、それらのプログラムをより使いやすくアップグレードすることも可能です。

高速動作させたいなら、C言語でアドインプログラムを作るのが確実です。


Casio Basic プログラムの高速化

Casio Basic プログラムを速く動作させるには、ロジックの見直しなどを最初に考えるべきですが、それも限度があります。手っ取り早く高速化するには、そもそも電卓の動作速度を向上すれば良いわけです。そこで役立つのが、 fx-9860GII の処理速度を大幅に向上させる、Ftune 2 というプログラムです。これはアドインプログラムです。

Ftune2 は、当ブログの読者のお一人 sentaro様の作品です。fx-9860GII のCPUは、実際の能力よりもかなり低い状態で使われていて、実際の能力を引き出すことで処理速度を高速化するのが、このアドインの仕事です。

Ftune シリーズは、以下のカシオのグラフ関数電卓に対応しています。
  • Ftune: fx-9860G、fx-9860GII USB POWER GRAPHIC (いずれもCPUに SH3 を使った製品)
  • Ftune2: fx-9860GII USB POWER GRAPHIC 2 (fx-9860GII はマイナーアップデートしている)
  • Ptune2: fx-CG20、fx-CG10 Prizm (アメリカ専用モデル)
fx-9860GII は、発売当初は CPU に SH3 を使っていたのですが、マイナーアップデートして SH4 搭載機に変わっています。これらのマイナーバージョンの一番簡単な見分け方は、液晶パネルの下に印字されている USB POWER GRAPHC 2 か、USB POWER GRAPHIC かの違いです。末尾に 2 が付いていないものが、初期モデルの SH3 搭載機、2 が付いているのが後期モデルの SH4 搭載機です。

国内で店頭で売られているのは後期モデルですが、購入前には確認されると良いでしょう。ネット販売や並行輸入品購入の場合は、特に注意が必要かも知れません。

これらの中で最も高速化できるのが、fx-9860GII 後期モデルで、オリジナルの10倍以上の高速化が可能になります。計算量の多いプログラムやグラフィックスプログラムの実行に、このアドインの最大のメリットがあります。


Ftune2 利用の前に

オーバークロックを行う場合の注意事項があります。詳しくは下記記事の オーバークロックとはどのようなものか? を必ずお読み下さい。簡単に言えば、メーカー保証外の使用方法なので、オーバークロックに起因する不具合は保証対象外になります。
fx-9860GII のオーバークロック - Ftune2 -


それでも Ftune2 を紹介する理由

Ftune2 は、海外でも取り上げられており、世界で愛好者が増えています。
その最大の理由が、できるだけ安全に利用できる配慮がされていることです。そして、これまで作者の sentaro様との11ヶ月間以上のやりとりから、プログラミングスキルと、プログラム作成に関する考え方、プログラミングへの取り組む姿勢、そしてお人柄が分かるにつれ、このアドインの安全性への配慮には疑いがないと考えています。

sentaro様の発言は、当ブログ、高機能電卓の情報、Universal Casio Forum 、CEMETECH、に残っていますので、気になる方はじっくりとお読みください(Universal Casio Forum や CEMETEC では sentaro21 というハンドルネームをお使いです)。

オーバークロックには避けられないリスクがあるわけですが、それでも Ftune2 を改めて紹介するのは、この作者個人への信頼性が最大の理由です。言い換えれば、Ftune2 のリスクは、アドイン自体にはほぼないと言わせて頂きます。リスクがあるとすれば、入手した電卓個体によるもの、要は当たり外れです。、

私自身、Ftune2 を使い始めたのが 2014年12月で、これを書いている時点で11ヶ月の利用になりますが、オーバークロックによる致命的なトラブルはありません。仮に電卓の動作がおかしくなっても、リスタートさせれば元に戻ります。そこで、遅ればせながら改めて Ftune2 利用の手引きを書くことにしました。

長々と前置きを書いたのも、このアドインの性格を正しく理解して、正しく使って頂きたいからです。


Ftune2 を使ってみよう

先ずは、電卓に保存されているデータやプログラムを全てバックアップしておき、電卓をリスタートしたり工場出荷状態にリセットした後に、データやプログラムを元に戻せるように準備することが最も重要です。
  1. FA-124 のインストール: PCと fx-9860GII のリンクソフト "PROGRAM-LINK FA-124 Ver 2.04 を fx-9860GII 添付のアプリケーションCDからインストールします。インストール時に日本語を選択すると FA-124 の日本語マニュアルもインストールされます。
  2. FA-124のマニュアルを表示: FA-124 のメニュー [Help] - [Manual] から表示します。
  3. データのバックアップ: FA-124 を使って、fx-9860GII のメインメモリ保存メモリの両方のバックアップをPCに保存します。FA-124 のマニュアルにある「3. fx-9860Gシリーズ/fx-9750GII/fx-7400FIIとパソコンとのデータ転送」を参照し、先ずメインメモリの内容を表示してから、青い右矢印のアイコンをクリックしてメインメモリをバックアップ。次に保存メモリの内容を表示してから、青い右矢印のアイコンをクリックして保存メモリをバックアップします。なお Selected items are invalid というエラーメッセージが表示されることがあるようですが、特に問題はなさそうです。
  4. ダウンロードFtune2 のサイトから、Ftune2 をダウンロードします。間違って FtunePtune2 をダウンロードしないように!
  5. インストール: FA-124 のマニュアルにある「10. アドインのインストール」に従って、Ftune2 をインストールします。
  6. MAIN MENU: fx-9860GII で [MENU] キーをクリックして MAIN MENU 画面を表示します。
  7. Ftune2 起動: MAIN MENU 画面で、ftune のアイコンを選んで Ftune2 を起動します。
  8. メモリチェック: 始めて起動すると自動的にメモリチェックが始まります。安全対策の1つです。
  9. ノーマルクロック: ノーマルクロックが 29.49MHz と表示されます。
  10. オーバークロック:  [F5] キーを押すと 235.93MHz と表示されます。これでオーバークロック終了です。
  11. MAIN MENU[MENU] キーを押して MAIN MENU に戻ります。
しばらくプログラムを走らせてみたり、その他の電卓の機能を使ってみて、画面表示や、キーの応答性などに異常が無いことを確認します。


さらに高速化してみる
私の事例では、現在使用している fx-9860GII は、オーバークロックで 280MHz で動作させています。機種個別に注目点が異なりますので、さらに高速化したい場合の疑問点については、コメント欄でご質問ください。
作者の sentaro様からの回答が貰えるかも知れません。


基本的な考え方は、安全動作できる最高クロックより1段低いところで使うことです。

私の使用機では、287.54MHz で動作するので、一段低い280.17MHz で使うようにしています。
具体的には、Ftune2 を起動して、[SHIFT] [MENU] で出てくる 安全設定メニューで、以下のようになっています。

ROM margin: 3%
RAM margin: 3%
PLL CLK Max: 800.00MHz
CPU CLK max: 287.00MHz
Shw CLK Max: 180.00MHz
Bus CLK Max: 180.00MHz
I/O CLK Max: 40.00MHz
Start MemCK: on
F1 Yes/No: off
Wait Auto -: on
RAM WW Auto: on
ROM IWW At-: on
PFC Auto Up: on
FLL Diso: on
Batt Disp: on

主に、下線の値を変更します。
この設定は、これ以上の厳しい設定が出来なくするためのもので、Ftune2 の安全対策の1つです。
[EXIT] キーを押してメイン画面に戻ってから、[F1] キーでこの設定を保存しておきます。
そして、メイン画面でまず [F5] キーで 235.93MHz にしてから、右矢印キーを押してクロックを上げて行きます。そしてこの設定以上の値にはできないようになっています。

電卓個体によって、設定は変わってきますので、デフォルトの [F5] (235.93MHz) より高いクロックに設定する際は、注意が必要です。
何かおかしくなって、リスタートして元に戻るのなら、多くの場合大丈夫のようです。

デフォルトの [F5] の 235.93MHz で使えばかなり安心できますので、先ずはここから高速化の世界を体験してみてください。



アマループ

オーバークロックは電力消費が激しいので、集中的に使えば2~3日で LOW BATTERY になってしまいます。そこで、ニッケル水素充電池をお勧めします。初期は乾電池よりも電圧が高いのがニッケル水素電池ですが、fx-9860GII では問題なく使えます。

私は、Amazonブランドのエネループ(アマループ(^^;)を愛用しています。富士通グループのFDK株式会社製で、性能は三洋電機が以前製造していたエネループと同等です。三洋電機から正式に製造移管(売却)されて製造していますので、三洋電機製と同等の性能や品質なので、安心しています。特に最新の最高性能である必要もなく、とにかく安い(Panasonic製の半値近い)アマループが気に入っています。

エネループはニッケル水素電池の一種ですが、お勧めの記事;
エネループを購入するときに候補にしたいアマゾン版エネループ、通称『アマループ』ができるヤツ。
アマゾンのエネループ、通称アマループを買ってみた

さらに、詳しく興味があれば以下が面白いです;
第10回:ニッケル水素電池はどれを使えば良い?国内メーカーガチンコ対決!【前編】


アマゾンでは、本日時点で、単四8本パックで、¥1,380 と、市販のエネループの半額近くなっています。
⇒ Amazonベーシック 充電式ニッケル水素電池 単4形8個パック (最小容量750mAh、約1000回使用可能)

私は、充電した4本を常に準備しています。海外出張などでは、8本を持ち歩きます。
1000回充電可能と謳っていますが、経験的には300回程度で充電容量が低下しますが、300回ということは1年以上使える計算で、それが690円(4本分)なので、これで十分でしょう。


保管や持ち歩き用の電池ケースは以下を使っています。
★クリア★単3形&単4形電池兼用電池ケース。単3、単4兼用!収納保管ケースエネループ・エネロング等の充電池の保管に最適!単3形電池なら4本まで単4電池なら5本まで収納可能パーテーション(間仕切り)で電池を固定!

1個99円ですが、配送料が82円かかるので、4つほどまとめて購入しています。このケースは繋げて使えるので便利です。


充電器は、4本同時に充電できて、1本づつ充電状態を制御&表示できる機能のあるものを強く勧めます。私は既に持っていた Panasonic のENELOOP PRO 用の、単三/単四向け充電器を使っています。これで、アマループを含めた全てのニッケル水素充電池に対応するので、敢えてグレードの高いものを購入しました。出張時には持って行きます。





応援クリックをお願いします。励みになるので...


人気ブログランキングへ


FC2ブログランキングへ







keywords: fx-9860GIICasioBasic

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






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

fx-9860GII 液晶のライン抜け不良

追記 2015/07/04

昨年12月に購入した fx-9860GII の液晶が不良になりました。気がついたのは一昨日。購入して半年です。

全ピクセルを塗り尽くすプログラムを走らすと、以下のようにライン抜けしていることが分かります。

ClrGraph
AxesOff
GridOff
ViewWindow 0,127,1,0,63,1
For 0→Y To 63
For 0→X To 127
PlotOn X,Y
Next
Next


fx-9860GII 液晶ライン抜け

丁寧に使っていて、落下したこともなく、筐体やカバーには傷ひとつありません。購入半年でこうなるのは、普通に考えれば製造不良でしょう。

これでは使いづらい(使い物にならない?)ので、これからどうするか検討します。と言うのも、Amazonで並行輸入品を購入したので、保証の扱いがどうなるかグレーだからです。

英語で書かれた保証書が同梱されています。そこには、

本保証書は、製品を購入した国の中でのみ有効。(THIS WARRANTY CARD IS VALID ONLY ON PRODUTCT IN THE COUNTRY OF PURCHASE.)

とあります。ここがグレーゾーンで、色々な解釈ができます。私は、日本国内で Amazon から買ったから、日本で保証が有効と解釈します。さて、どうなることやら...

最悪、新品購入しかないのかも知れません。


2015/06/11 追記:
カシオのお客様サポートセンターへ連絡を取ったところ、液晶の交換修理が必要で、今回は保証期間内対応として頂くことになりました。
購入してから半年、状態がきれい(傷一つない)、国内販売品と全く同一の製品、などなど(全て想像ですが...)色々な判断材料があったのだと思います。日曜に異常品を発送したところ、火曜日には修理部署の方から受け取ったとの連絡、さらに修理の際に工場出荷状態に戻すことになることの連絡と承諾の確認がありました。このような対応に接すると、カシオ製品は、使って安心という思いが強くなります。


2015/06/18 追記
修理から戻って来ました。本体交換とのことです。本体をよく見ると、液晶の下には USB POWER GRAPHIC とあります。修理に出した本体は、上の写真にあるように、最後に2 が付いているものです。OS バージョンが異なります。さらに搭載CPU が異なります。

先ず始めに、違う製品に交換した事情を問い合わたところ、OSを私がアップグレードするか送り返したらアップグレードをする。ハードウェアは違ったものだが性能が同じなので、了解できないか?とのことでした。ここは、微妙なところですが、同じハードウェアが欲しい旨を伝えました。何を提供できるか、検討しますとのことです。

私は、そもそもSH4A 搭載品が欲しく買ったのですから、SH3 搭載品は要りません。SH3 でも電卓としての性能が同じとの説明を繰り返すかどうか、回答を待とうと思います。

今回の対応では、カスタマーサポートと修理センターの温度差を感じています。
当方の希望に添えるよう検討をしている、とのご一報を頂きました。


2015/06/25 追記
fx-9860GII SH4-Aバージョンでご対応頂けるとの一報あり。なお先週、ご丁寧に一報を頂き、今週中に検討状況をおしらせ下さるとのこと。修理対応品発送まで、もう少しだけ時間がかかるようですが、安心して待つことが出来ます。


2015/07/05 追記
fx-9860GII SH4-Aバージョンが届きました。日本国内販売の梱包のまま丸ごとの交換対応となりました。まさに神対応と言わせて頂きます。カシオ殿にはお礼を申し上げます。






応援クリックをお願いします。励みになるので...

人気ブログランキングへ


FC2ブログランキングへ



keywords: fx-9860GIIプログラム関数電卓

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

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

fx-9860GII グラフィックス - モンテカルロ法

2015/02/16
2015/02/17 修正
2015/02/22 追記
2015/02/28 追記

fx-9860GII のCasio Basic でグラフィックス表示のプログラムを作ってみようと、色々なコマンドを試行錯誤して試しています。先ずは第一段階として簡単なプログラムを作ってみました。

以前モンテカルロ法による円周率:π を計算するプログラムを fx-5800P で作ったので、今回はこれにグラフィックス表示を追加したプログラムを fx-9860GII で作ってみることにします。
 ⇒ 海外コミュニティー(UCF)での近況

fx-5800P でのモンテカルロ法のプログラム
0→I:0→O
Lbl 1
Ran#2+Ran#2<1⇒Isz I
Isz O
Locate 1,1,O
Locate 1,2,4I÷O
Getkey=0⇒Goto 1


※ 上記エントリーのコメント欄での sentaro様のご指摘に基づき変更しています。


さて、このコンテカルロ法は、2 x 2 の正方形に内接する半径 1 の円を描いておき、その正方形内にランダムに点を打ってゆく時、正方形の中の点の数と円内の点の数から、円周率を求めようと言う考え方です。

 ・[正方形の面積] = 2 × 2 = 4
 ・[円の面積] = 1 × 1 × π = π
なので、
 [正方形の面積] : [円の面積] = 4:π
となります。

これから、
 π = 4 × [円の面積] / [正方形の面積]
となって、円周率の計算ができます。

ところで、ランダムに点を打ってゆくと、円内の点の数(I) が円の面積、正方形内の点の数(O) が正方形の面積としても良いので、円周率:π は以下のようにして求められます。
 π = 4I ÷ O

上のプログラムは、この理屈で(実際は円の1/4 しか使っていませんが...)計算しています。



そこで、今回は同じ理屈で、正方形と内接円に実際にランダムに点を打ってゆく様子をグラフィックス表示しながら、πの計算値がどのように変化してゆくのかを表示するプログラムを、fx-9860GII で作ってみました。但し円全体を使うようにグラフィックスを描画します(円周率の計算は同じです)。

先ずは、プログラムを示します。

プログラム名: MONTECAR
CoordOff
GridOff
AxesOff
LabelOff
ViewWindow -2.8,1.3,0,-1.0087,1.0087,0

0→I:0→O
Circle 0,0,1
Text 1,3,"C="
Text 7,1,"π="
Text 51,3,"(-):Stop"
Text 58,5,"AC:Quit"

Lbl 1

1-2Ran# →X
1-2Ran# →Y
Plot X,Y
X2+Y2<1⇒Isz I
Isz O
Text 1,11,O
Text 7,11,4I÷O

If Getkey=41:Then
Text 51,1,"EXE:Start"
While Getkey  [2015/02/17 削除]
WhileEnd     [2015/02/17 削除]
While Getkey≠31

WhileEnd
Text 51,1,"  "
 (スペース3個)
Text 51,3,"(-):Stop "
 (スペース2個)
IfEnd

Goto 1



プログラム構造

[座標設定]

[初期化処理]

Lbl 1

 [ランダム点の座標計算]

 [ランダム点の描画]

 [点の総数とπの計算値の表示]

 [一端停止と停止解除の処理]

Goto 1

[2015/02/28 追記]
fx-9860GII のプログラムファイル montecar.g1m のダウンロード




まだ、fx-9860GII の Casio Basic コマンドが、メニュー階層のどこにあるのか、完全に把握しきれていないので、コマンドを探すのにチョット苦労しています。とりあえず、以下の入り口から探せばどこかにあり、最悪は [SHIFT] [4] (CATALOG) で探せば必ずあります。

[SHIFT] [F2] (Zoom)
[SHIFT] [F3] (V-Window)
[SHIFT] [F4] (Sketch)

[OPTN]

[SHIFT] [VARS] (PRGM)


[SHIFT] [MENU] (SET UP)


これを起動したところの画面は以下のようになります。

Montecaro-1 

画面左上のCは打った点の総数、π はこの段階で計算した円周率です。
なお、画面左下に

(-):Stop
 AC:Quit


と表示していて、起動直後に [(-)] キーを押してプログラムを一端停止させると、ランダムの点はまばらで、以下のようになります。

Montecaro-2 

[EXE] キーを押して、一端停止を解除し、計算を続行させます。点が少し増えたところで、再び [(-)] を押して実行を止めると以下のようになります。

Montecaro-3 

さらに計算を継続させると、

Montecaro-4 

点の数がかなり増えています。

放置しておくと、正方形の範囲が殆ど塗りつぶされます。

Montecaro-5 

C=27875 にもなっても、まだ一回も点が打たれていないところがあります。Ran# 関数が本当にランダムではないのでしょう。たまたま、円周率の値にかなり近くなっていますが、この Ran# 関数を使ったモンテカルロ法の精度は、あまり高くないと言えそうです。
本エントリーは、グラフィックス描画を試してみるのが目的なので、精度は気にしないでおきましょう。


ところで、点が次々に増えてゆくダイナミックな状態は、見ていて面白いものです。


※ この動画終了後に Functions と言う表示が出ますが、YouTube が勝手に次の動画を紹介しているだけで、本動画とは無関係ですので、無視してください。

この動画は、ノーマルで 29MHz のところ、オーバークロック 280MHz で動作させた時のものです。

描画に時間のかかるグラフィックスプログラムを作って動作確認をする時、待ち時間を短くして動作結果が速く分かるのは、便利です。時間のかかるグラフィックス描画を作る時は、オーバークロック動作をさせています。

私は、オーバークロックには以下のアドインを愛用しています。

 sentaro様作成:Ftune2

オーバークロックでの動作のリスクはゼロではありませんが、このアドインは、プリセットで5つの設定があり、簡単にクロック数を切り替えられます。そして、表示や動作パラメータを確認しながらの設定変更も可能です。リスク低減の配慮がなされており、納得しながらリスクを減らせられるので愛用しています。詳しくは、以下のエントリーをご覧の上、ご興味があれば自己責任でお使いください。
 ⇒ fx-9860GII のオーバークロック - Ftune2 -



さて、今回のプログラムを作るにあたって試行錯誤の結果、Casio Basic でのグラフィックス描画について、いくつか気がついたことがありますので、それを紹介します。


画面のグラフィックス座標設定

グラフィックスは、横127ドット、縦63ドットのドットマトリックス液晶画面で描画します。

点を打つ時は、Plot コマンドでX座標とY座標を指定して、
 Plot X,Y
の書式で点を描画します。X, Y で決まる位置のドット1つが表示されます。

Plot の入力:
[SHIFT] [F4] (Sketch) [F6] [F1] (PLOT) [F1] (Plot)


円の描画は、Circle コマンドで、円の中心のX座標、Y座標、そして円の半径を指定して、
 Circle [中心のX座標],[中心のY座標],[半径]
の書式で円を描画します。

Circle の入力:
[SHIFT] [4] (Sketch) [F6] [F3] (Crcl)

今回は、円の中心が原点(X=0、Y=0)、半径 1 の円を描くので、
 Circle 0,0,1
となります。

実は、fx-9860GII の Casio Basic では、グラフを描画する際には、ViewWindow コマンドで、X軸とY軸の範囲を指定することで、画面全体の座標系を決めます。これを利用すれば、例えばX軸の範囲、つまりXの最小値と最大値を -2.0 と 2.0 に設定すると座標の原点は中央に来ます。Xの最小値を -3.0、最大値を 1.0 にすれば、原点は中央から右にずれます。

ViewWindow の入力:
[SHIF] [F3] (V・WIN) [F1] (V・WIN

ViewWindow は、グラフ用紙のようなものです。グラフ用紙に円を描き、用紙を右に移動させれば、当然ながら描いた円も一緒に移動します。

そこで、今回のプッログラムでは座標の設定を以下のようにしました。

ViewWindow -2.8,1.3,0,0-1.0087,1.0087,0

書式は、以下になります。
ViewWinow [X最小値],[X最大値],[X軸の目盛り間隔],[Y最小値],[Y最大値],[Y軸の目盛り間隔]

今回のプログラムでは、
 ・X最小値: -2.8
 ・X最大値: 1.3
 ・X軸の目盛り間隔: 0
 ・Y最小値: -1.0087
 ・Y最大値: 1.0087
 ・Y軸の目盛り間隔: 0

としています。

なお、画面のX方向(左右)は、左端のドットの中心と右端のドットの中心の距離は 126 ドット分 、これに対して左右のXの範囲は 1.3 - (-2.8) = 4.1 に相当します。
液晶上端のドット中心と下端ドット中心の距離は 62 ドット分なので、左右と同じ縮尺で上下のYの範囲を設定するには、

4.1:[Yの範囲] = 126:62

従って、[Yの範囲] = 4.1/126 × 62 = 2.017460317 なので、ここでは半分の値を使って、
 ・Y最小値: -1.0087
 ・Y最大値: 1.0087
と、上下は対称になるように設定しました。

画面の横幅(126ドット分)と縦幅(62ドット分)は厳密に 2:1 にはなっていないので、126対62になるように細かく設定することで、原点の回りに対称な円を描けました。

もしX軸とY軸の縮尺が異なると、この円は真円にならず、楕円になります。ゴムの上に円を書き、ゴムを一方向に引っ張ると円が楕円になるのと同じです。

この円の直径は 2 ですが、座標の設定で上下と右端に少し余裕を持たせていることに、お気づきでしょう。敢えて余裕を持たせています。

なお、引数の3つめと6つめのX軸とY軸の目盛り間隔ですが、これを 0 に設定してもエラーにならないので、今回は 0 としました。仮に 1 としても描画に変化がありません。以下に説明するように 座標軸の表示をしない設定(AxesOff コマンド使用)にしているので、影響が無いと思われます。 


このように、fx-9860GII の Casio Basicでは、グラフィックスを描画する前にグラフの描画範囲(座標)をうまく設定するのがコツのようです。最初に ViewWindowで座標を決めれば、PlotCircle はその座標系で描画できます。ViewWindow で座標設定が簡単にできるので、利便性が高いと思います。

但し、ブラフ表示を目的として各種コマンドが準備されていると考えるべきで、その場合は軸の名前(X や Y)の表示、グリッド表示、座標軸表示、目盛り表示、ラベル表示は今回のプログラムでは不要です。幸いなことに、これらの表示をオフにするコマンドが準備されているので、それを使います。

CoordOff
GridOff
AxiesOff
LabelOff


CoordOff の入力:
[SHIFT] [MENU] (SET UP) [F2] (COOR) [F2] (Off)

GridOff の入力:
[SHIFT] [MENU] (SET UP) [F3] (GRID) [F2] (Off)

AxesOff の入力:
[SHIFT] [MENU] (SET UP) [F4] (AXES) [F2] (Off)

LabelOff の入力:
[SHIFT] [MENU] (SET UP) [F5] (LABL) [F2] (Off)



テキスト表示

fx-5800P で作ったプログラムのように、打った点の数と円周率π の計算値を画面表示させます。
Locate コマンドを使うと、画面がちらつきます。Locate" " (出力)命令などのテキスト表示の時にはグラフィックスが表示されず、グラフィックス表示の時にはテキストが表示されません。結果的にテキスト表示とグラフ表示が頻繁に切り替わるので、表示がちらつきます。テキスト表示とグラフィックス表示では異なるRAMを使っていると思われ、同時表示の方法がまだ見つかっていません(できないかも知れません)。

Text の入力:
[SHIFT] [F4] (Sketch) [F6] [F6] [F2] (Text)

Text の書式:
 Text [文字の左上のドットのY座標],[文字の左上のドットのX座標],[表示内容]
 ※ 表示内容には、数値、変数、式、戻り値のある関数が使えます(Locate と同様)

一方、Locate の書式は、Locate [X座標],[Y座標],[表示内容]

なので、座標指定のXとYが互いに逆になっています。

なお、Text コマンドで表示される文字や数字は、Locateコマンド" "(出力)命令 のような見やすいフォントを使った表示ではなくて、液晶のドットを使った単純な文字表示です。そして、1文字の表示で使う縦横のドット数が異なりますので、表示位置のY座標とX座標は文字に合わせて微調整しました。

数字は、縦5ドット、横3ドットのようですが、小さな数字も使えるので、その場合は文字に合わせる必要があります。一方で、表示の位置は Locate コマンドのように縦横の位置が決まっていないので、好きな位置に表示可能な利点もあります(面倒ですが...)。



ランダムな点の位置計算と描画

ランダムな点を Plot X,Y で表示させています。

fx-5800P で作ったプログラムでは、ランダムな点の座標(X,Y) のXとYは、いずれも 0~1 の範囲の正の数としていました。

今回は、グラフィックスの見栄えを考えて、半径1の円に外接する1辺が 2 の正方形の範囲全体にランダムに点を打つようにしています。従って、X と Y は、それぞれ -1 ~ +1 の範囲の値にしたいわけです。

そこで、一旦 Ran# 関数で、0~1 の値を得るまでは同じですが、これを 2 倍して、1 から引き算することで、-1 ~ +1 を算出するように変更しました。

1-2Ran# →X
1-2Ran# →Y


次に、点(X,Y) が円の中に入っているかどうかは、

X2+Y2<1

で判定し、これが正しい時に 円内の点の数 I を1つ増やす処理を行っています。

X2+Y2<1⇒Isz I

X と Y は、必ず -1 ~ +1 の間の数なので、必ず 2x2 の正方形の中の点です。そこで、無条件に Isz O で1つ増やす処理にしています。また、点は 必ず 2x 2 の正方形内に打たれることが、上記から保証されるので、描画範囲を決める座標設定 (ViewWindowコマンド) で、2 x 2 よりも少し広い範囲に設定しても問題がなく、見栄えが良くなるわけです。

打った点の総数やπの計算値の表示には Text コマンドを使って、以下のようにグラフィックス画面に表示します。

初期表示の部分で、

Text 1,3,"C="
Text 7,1,"π="


とし、Lbl 1/Goto 1 ループの中では、点1を1つ打つたびに、以下の表示を行います。

Text 1,11,O
Text 7,11,4I÷O




プログラム操作に関する部分

[(-)] キーを押した時、プログラムを一旦停止させ、[EXE] キーで一旦停止を解除する部分、それに伴う表示の変更は、以下のようにしました。

[(-)] キー(キーコード41)が押された時の必要な処理を行うので、

If Getkey=41:Then
[必要な処理]
IfEnd


としました。
プログラム全体は、Lbl 1 / Goto 1 で無限ループになっていて、If Geykey=41 はループが回るたびに実行されるので、上記のようにできます。

[必要な処理] については、 [EXE] キー(キーコード31)が押されるまでループを回し続けてプログラムが先に進むのを防ぎ、これが押されたら次へ進む、と言うロジックにしています。

表示の変更も織り込みました。

If Getkey=41:Then
Text 51,1,"EXE:Start"

While Getkey≠31
WhileEnd
Text 51,1,"  "
  (スペース3つ)
Text 51,3,"(-):Stop "
 (スペース2つ)
IfEnd


スペースは、上書きして前の表示を違和感なく消すために使っています。


[2015/02/27 修正]
当初、[EXE]のトグル操作で一旦停止と解除を実装していて、そのために以下の赤文字の2行を入れていました。
If Getkey=31:Then
Text 51,1,"EXE:Start"
While Getkey
WhileEnd

While Getkey≠31
WhileEnd
Text 51,1,"EXE:Stop"
IfEnd


その後、グラフィックス以外のコードを単純化するために今回の仕様に変更しましたが、その際不要なコード2行を削除し忘れていました。



今回のプログラムを作ってみて分かったことは、グラフィックス描画の前に、画面全体の座標設定(座標変換)を ViewWindow コマンドで行うと、この座標系で PlotCircle コマンドによる点や円の描画が楽にできるということです。

テキスト表示も Text  コマンドが使えて、Locate コマンドよりも柔軟性が高いことも分かりました。但しフォントが少しお粗末ですが...

実は、今回のプログラムの ViewWindow コマンドの部分を、以下の2行に置き換えるだけで(他の部分の変更無しで)、ほぼ同じように正常動作します。

ViewWindow -20.85,19.35,0,-10.05, 10.05,0
Factor 10,10


これについては、もう少し調べたいことがあるので、とりあえずメモ代わりにここに置かせてもらいます。



[2015/02/22 追記]

グラフィックス描画速度について

今回の Casio Basicプログラムとほぼ同じロジックを使って、sentaro様が Add-in プログラムを作ってくださいました(コメント欄参照)。そこで、画面描画もほぼ同じになるように改造させて頂きました。実行速度に大きな違いはありませんが、add-in 作成の練習を兼ねて改造させてもらいました。
 ⇒ sentaro様作成の Add-in、montecar.g1a: ダウンロード
 ⇒ 私が手を入れた Add-in、monteca2.g1a: ダウンロード
※ ダウンロードした ZIP ファイルには、add-in プログラムと Casio SDK でビルド可能なソースファイルが含まれています。

Add-in プログラム monteca2.g1a を fx-9860GII に転送すると、[MENU] キーで現れる MAIN MENU 画面に、この Add-in が表示されています(画面の右下)。

Main_Menu_Monteca2 

なお、この add-in には、実行時間を計測するルーチンが組み込まれていて、ストップウォッチ無しでも実行時間の計測ができるようになっています(この部分が sentaro様オリジナルの非常に役立つルーチンで、(ここだけがオリジナルの Casio Basic プログラムと異なります)。

Add-in_Monteca2 

Casio Basic プログラムと、ほぼ同じ画面になっていることが分かります。なお、 t= 7.04s と実行時間が表示されています。

やはりC言語で作るプログラムは Casio Basic よりも圧倒的に速いです。どれぐらい速いか、見てみましょう。



これは、ノーマルクロック (29MHz) でのものです。
動作モードメニューで、

 F1:MonteCarlo 1/1
 F2:MonteCarlo 1/10
 F3:MonteCarlo 1/100
 
 F5:MonteCarlo bench
 F6:MonteCarlo bench 2


と表示され、上から順に [F1] から順に [F6] まで実行しています。

オーバークロック (280MHz) では、さらに速くなります。



[F1] から順に [6] まで5つの動作モードで動作しています。圧倒的速さを実感できます。

さて、fx-9860GII のノーマルクロック 約29MHzと、オーバークロックした約 280MHz も併せて試した結果を以下に示します。
測定は、点の総数が100個程度になったら実行を止めて、その時間と点の総数を5回測定。これから点100個あたりの時間を計算し、最大値と最小値を取り除き、残る3回の平均を計算して、ループ1回あたりの実行時間を得ました。Add-in は、複数の動作モードから、オリジナルの Caso Basic に最も近い [F1] のモードを使用しました。

プログラムCasio BasicAdd-in
動作クロック (MHz)約29約280約29約280
ループ1回の実行時間 (ミリ秒)27843.621.07.40
速度比率 (全体)16.4倍13.2倍37.6倍
速度比率 (Basic と Add-inの比較) - 280MHz---1---5.9倍
速度比較 (29MHz と 280Mhzの比較 - Add-in------12.8倍

・ ノーマルクロックでは、Casio Basic のままオーバークロックするよりも、C言語によるAdd-in の高速化が顕著(2倍)です。

・ オーバークロックの効果は、C言語による Add-in よりも Casio Basicの方がその効果は顕著(約2倍)です。

今回のように、画面を埋め尽くすようなグラフィックス描画を高速に動作させたい場合は、C言語による Add-in を考えるべきです。

しかしCasio SDK によるプログラム作成の敷居の高さを考えると、次善の策として Casio Basic で作ってオーバークロックと言う方法があります。

そして、fx-9860GII USB POWER GRAPHIC2 (現行機種) は、他のグラフ関数電卓の現行機種と比べて、オーバークロックツール Ftune2 で最大限の効果が得られます(コメント欄参照)。モノクロ表示ですが、fx-9860GII の価値は高いと言えます。

Casio Basic 搭載のグラフィックス機能は、グラフ描画機能に特化したもので、グラフ作成のための多彩な機能がある一方で、描画点数の多いグラフィックス表示は、かなり遅いことが定量的にわかりました。


なお、この測定のために、円の描画と必要な表示の後に一端停止し、[EXE] キーで停止を解除するように Casio Basic プログラムを変更しました(下記参照、追加した部分を赤文字で示す)。Add-in プログラムの時間測定が、初期描画終了後、ループに入る手前で測定開始するようになっているので、それに合わせました。

※ fx-9860GII に転送して使える Montecar.g1m のダウンロード

fx-9860GII プログラム: Montecar
CoordOff
GridOff
AxesOff
LabelOff
ViewWindow -2.8,1.3,0,-1.0087,1.0087,0

0→I:0→O
Circle 0,0,1
Text 1,3,"C="
Text 7,1,"π="
Text 51,3,"EXE:Start"
Text 58,5,"AC:Quit"

While Getkey≠31
WhileEnd
Text 51.1." "
Text 51,3,"(-):Stop "


Lbl 1

1-2Ran# →X
1-2Ran# →Y
Plot X,Y
X2+Y2<1⇒Isz I
Isz O
Text 1,11,O
Text 7,11,4I÷O

If Getkey=41:Then
Text 51,1,"EXE:Start"
While Getkey≠31
WhileEnd
Text 51,1,"  "
 (スペース3個)
Text 51,3,"(-):Stop "
 (スペース2個)
IfEnd

Goto 1







応援クリックをお願いします。励みになるので...

人気ブログランキングへ


FC2ブログランキングへ



 


keywords: fx-9860GIICasioBasicプログラム関数電卓

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


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

fx-9860GII USB POWER GRAPHIC 2

2014年12月09日
2015年1月13日 追記


やっぱり fx-5800P が好き

5800と9860、外観 

fx-9860GII と fx-5800P を並べてみる。このくらい違う。厚みが倍近いので、fx-5800P の一回り大きいのが fx-9860GII。やはり、持ち歩くなら fx-5800P のほうが良いと思います。小型・軽量・十分な機能を備えているからです。


関数電卓として

fx-5800P の方が、ひと押しで使える関数キーが多いので、一見 fx-5800P が良いように思えますが、これは慣れの問題だと思います。

ところで、

235÷658

と入力して [EXE] キーを押すと、

fx-9860GII は、0.3571428571 と表示し、[F-D] キーを押すと、5/14 と分数表示になります。
fx-5800P は、5/14 と先ず表示し、[S-D] キーを押すと 0.3571428571 と表示が変わります。

電卓で計算する時、欲しいのは小数であって、分数でないことが殆どです。fx-9860GII の方が優れていると言えます。


5800と9860、複素数 

上の写真の両機の画面を見てください。πi  を計算させようとしています。

この は複素指数関数で、複素数計算を非常に楽にしてくれる便利モノです(大学理工系で出てくると思います)。

 e(a+bi) = (cos b + i sin b)

例えば、a = 0、b = π の場合は、π = -1 と言う「オイラーの恒等式」が得られます。映画「博士の愛した数式」で有名になったものですね。

私が知っている範囲の国産のスタンダード関数電卓やプログラム関数電卓で、これを正しく計算できるものはこれまで見たことがありませんでした。グラフ関数電卓はワンランク上なのですね(グラフ関数電卓を初めて触った感想)。

左の fx-5800P は、a + bi 形式や極形式の複素数計算はできますが、このような複素指数関数を使って、このまま [EXE] キーを押すとエラーになって計算できません。

ところが、fx-9860GII ではこれを計算でき、正しく -1 と結果がでました。これは、チョット感動モノです。
(5/3)π を計算させると、1/2 - (√3/2)i と正しく答えが得られます。


プログラム電卓として

さて、両機ともプログラミング言語として Casio Basic が使えます。fx-5800P の Casio Basic で作ったプログラムの幾つかを fx-9860GII に移植していますが、比較的移植性は高いと言えます。

 ⇒ プログラムライブラリ - キーコード取得
 ⇒ fx-9860GII への移植 - ピタゴラス数
 ⇒ fx-9860GII への移植 - 素因数素分解
 ⇒ fx-9860GII への移植 - 厄介な旧来の命令

[2015/01/13 追記]
Casio Basic は、古くからのカシオのプログラム電卓との互換性を保つための旧来の命令とBasicコマンドから成り立っています。Basic命令については fx-5800P との互換性は非常に高いと言えますが、旧来の命令については細かいところで fx-5800P との互換性が崩れています。但し対処方法はあります(上記の移植に関する記事参照)。詳細に見てゆくと旧来の命令とBasicコマンドが最もバランス良く実装されているのが fx-5800P と言えます。

fx-9860GII でプログラムを走らせる最大の利点が、その処理速度でしょう。加えて、文字列が扱えること、I/O機能、プログラムのPCへの保存機能なども fx-9860GII の利点です。

fx-9860GII は C言語開発SDK を使ってPCで作ったアドイン・プログラムを転送して使えます。Casio Basic では出来ないことが、C言語で出来るし、同じプログラムなら C で書いた方が動作が格段に速くなります。これも利点の1つでしょう。

ちなみに、fx-9860GII は、CPUのクロックアップが可能で、かなりの高速化が可能になります。
sentaro様が開発された Ftune 2 と言うアドインを、私は使っていて、高速動作をしたい時は、ノーマルの 29MHz程度から一気に 236 MHz のオーバークロック動作ができます。その差は歴然です(上記の2つの移植記事を参照)。

 ⇒ Ftune 2: fx-9860GII のオーバークロック・アドイン、他の機種への対応バージョンもあります。


プログラムの動作速度だけが評価基準ではありません。作ったプログラムの使いやすさを考えますと、チョット話しが違ってきます。

私自身が 必要に迫られて、そしてあったら便利だと思って、複数のプログラムを作って、ほぼ毎日使っています。 fx-5800P では [FILE] キーを押せば、プログラムリストが出てきます。最大5つのプログラムをリストのトップに表示させることもできます。日常使いのプログラムは、このトップ5に入っています。

電源ON [FILE] キー [▼] キー数回

これで、プログラムを呼び出して実行できます。
トップ5にないプログラムを探す際には、プログラムリストが表示されている時は、自動的にアルファベット入力モードになっているので、プログラム名の頭のアルファベットのキーを押すだけで、近い名前のプログラムが呼び出されます。非常によく考えられています。

残念ながら、fx-9860GII では、このようなことが出来ません。

このプログラム呼び出しの迅速性、関数電卓としての操作性、そして携帯性の良さから、私は fx-5800P を日常使いから外すことはないと思います。fx-9860GII が日常使いになるには、何か新しい事情が必要でしょう。

まだ、グラフ機能や作表機能を試していません。プログラムからグラフ機能を使うことも出来ますので、このあたりに fx-9860GII の下克上の可能性はありそうです。


最近の価格

Casio fx-9860GII は、グラフ関数電卓と言われるジャンルの製品で、電卓製品のなかでは最も高機能なものです。その分販売価格も高くなっています。日本では、アメリカの2倍近い価格設定なので、日本国内で入手しようという気は全くありません。

先週末 Amazon で並行輸入品が ¥9,000 でありました。本日見ると ¥8,980 と、ついに8,000円台に突入しました。
fx-5800P が Amazon で¥6,261 なので、fx-9860GII は買い時になったと思われます。

[2014/12/20 追記] 
昨日 Amazon を見てみると、fx-9860GII 並行輸入品が ¥8,500 とさらに値下げされていました。年末セールなのかも知れませんが、どこまで下がるのか楽しみです。ちなみに fx-5800P は¥6,235 になっていて、これも値下げが進んでいます。
恐らく、今の年末セールから3~4月の新学期シーズンまでが安値が期待できるように思います。


製品保証?

上記の価格は並行輸入品のものですから、製品保証の問題がグレーゾーン。保証書の紙は製品に添付されていますが、販売店のスタンプが押されていません。購入店のある国内でのみ保証有効、との注意書きの紙も添付されていました。私はアマゾンで購入しましたが、それは日本国かどうかがグレーです。国内で対応してくれるかは分かりません。




 


応援クリックをお願いします。励みになるので...

人気ブログランキングへ


FC2ブログランキングへ

 


keywords: fx-5800P、fx-9860GIICasioBasic、プログラム関数電卓

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


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

fx-9860GII への移植 - 素因数分解

2014/12/13: 修正
2015/02/28: 追記

これまで、fx-5800P の Casio Basic で素因数分解のプログラムを紹介してきたが、これを fx-9860GII へ移植してみました。

今回のプログラム移植にあたっては、fx-5800P にある 配列変数 Z[ ] が fx-9860GII には無いので、これをどうするか、が主なテーマです。今回は、配列変数の代わりに行列を用いることにします。

なお、出力命令 ◢ を使った時の動作が、fx-5800P と fx-9860GII では異なることは、ピタゴラス数探索プログラムの fx-9860GII への移植 で経験しています。⇒ こちらの記事

これは、本来表示される筈の行が上書きされて - Disp - と表示されてしまう問題です。今のところ、決定的な解決策がまだ見つかっていないので、表示全体を1行下に下げると言う方法で回避することにします。



配列変数を行列に置き換える

配列変数 Z[N] は、1行N列の行列と同じなので、以下のようにします。

1. 領域確保 (要素20個を確保して、各要素を 0 で初期化する)
  ・配列変数の確保: 20→DimZ
   の代わりに
  ・1行20列の行列確保: {1,20}→Dim Mat Z
   [[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]]→Mat Z これでも間違いないが、効率が悪い。
   fx-9860GII の Casio Basic では 最大999行999列の行列まで使えるので、Dim コマンドを用いるべき。

   [2014/12/08 sentaro様のご指摘により記述を修正]

2. 使い方
  ・ 配列変数: Z[K]
   の代わりに
  ・行列 Z : Mat Z[1,K]

3. 領域解放
  ・配列変数の解放: 0→DimZ
   の代わりに
  ・行列 Z の解放: ClrMat Z

要するに、プログラムの記述を、上のように置き換えれば動作するはずです。



- Disp - 表示による問題の回避

Locate コマンドで指定する座標を 下に1つ増やす (Y座標を1つ増やす) ことで対応します。
今回は、多くの Locate コマンドの座標指定に変数や式を用いているので、チョット注意が必要です。但し、今回のプログラムで使っているLocate コマンドのY座標は、変数 L やLを使った式で指定しているので、L の値を1つ増やすように変更すれば良さそうです。具体的には、一番下に示すプログラムを見てください。



全画面消去コマンドの変更

fx-5800P の全画面消去は Cls コマンドを使用します。テキスト表示の全消去機能です。
一方、fx-9860GII は、テキスト表示とグラフィック表示の両方の機能があり、テキスト表示の全消去は ClrText コマンドを使います。
ちなみに、グラフィック表示の全消去は ClrGraph コマンドです。


今回は、配列の扱い、出力命令の動作と画面行数に合わせたLocateコマンド引数の修正のみで、fx-9860GII に移植したプログラムは問題なく動作しました。要所を分かっていれば、Casio Basic は移植性が高いと言えます。



プログラム実行画面

fx-5800P と fx-9860GII の両方で、ほぼ同じ Casio Basic プログラムを走らせた時の、画面表示の比較です。


※プログラムを起動した時の画面:

PD_5800P_1 PD_9860GII_1 


※数を入力する:

PD_5800P_2 PD_9860GII_2  


※素因数分解を最後まで計算したあとで、結果を表示:

PD_5800P_3 PD_9860GII_3  

1行表示されたら [EXE] キーを押して次の行を表示させます。
これを繰り返して、上のように が表示されたらそれが最後の素因数です。
ここで、 [EXE] キーを押せば最初の入力画面に戻ります。

fx-5800P では4行を超えると再び1行目から上書きします。
fx-9860GII では7行を超えると再び行目から上書きします。



計算速度の比較

fx-9860GII は、ノーマル (約29MHz) と オーバークロック (約236MHz) で測定しました。

入力した自然数結果fx-5800Pfx-9860GII (29MHz)fx-9860GII (236MHz)
123453 x 5 x 8232.2秒0.5秒 (4.4倍)計測不能 (一瞬)
12345626 x 3 x 6432.6秒0.6秒 (4.3倍)計測不能 (一瞬)
1234567127 x 97216.5秒1.5秒 (4.3倍)0.3秒
123456782 x 32 x 47 x 145936.6秒1.5秒 (4.3倍)0.4秒
12345678932 x 3607 x 38032分43秒33秒 (4.9倍)7.2秒
98765432132 x 172 x 37972128秒6秒 (4.7倍)1.3秒
9876543223 x 37 x 33366727秒5.5秒 (4.9倍)1.3秒
98765433 x 227 x 1450311秒2.4秒 (4.6倍)0.6秒
9876542 x 3 x 97 x 16975秒1.3秒 (3.8倍)0.4秒
987655 x 197537秒1.6秒 4.3倍)0.3秒
987622 x 3 x 8233秒0.7秒 (4.3倍)計測不能 (一瞬)

今回の速度比較には、表示速度は含まれず、プログラムの実行速度の差が反映されていると考えられます。

※ オーバークロックは、sentaro様作のアドイン Ftune 2 を使用しています。Ftune 2 については、こちら を参照のこと。




プログラムの比較

左が fx-5800P 用プログラム、その右に fx-9860GII 用に変更したプログラムを並べ、変更箇所を赤文字で示しています。

[2015/02/28 追記]
※ fx-9860GII へ転送して使えるプログラムファイル prime.g1m のダウンロード

素因数分解_改造版ソース PD2_9860GII_src 



応援クリックをお願いします。励みになるので...

人気ブログランキングへ


FC2ブログランキングへ


 

keywords: fx-5800P、fx-9860GII素因数分解、プログラム関数電卓

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


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

fx-9860GII への移植 - ピタゴラス数

2014年12月06日
2014/12/07: fx-9860GII オーバークロックでのテストを追加
2014年12月14日: 配列変数の代わりには行列が良い点を追記

fx-9860GII を入手したので、さっそくピタゴラス数探索プログラムを fx-5800P から移植してみました。
 ⇒ fx-5800P でピタゴラス数

このプログラムについて、fx-5800P のプログラムとの違いは、以下を考慮すれば良いだけの筈です。

・キーコード: Getkey が返す値が 全く異なる
・Locate コマンドの引数: 画面が 21 x 7 と広い

ところで、キーコードを調べるプログラム GET KEYCODE (プログラムライブラリ - キーコード取得 参照) は、そのまま100% 互換で移植できます。fx-9860GII はプログラム名を8文字以内で指定しなければならないので、fx-9860GII のプログラム名を KEYCODE としました。
 ⇒ プログラムライブラリ - キーコード取得

具体的な比較は上記参照。これでキーコードを調べると、[EXE] キーは 31、[(-)] キーは 41 でした。


さて、fx-5800P用のピタゴラス数探索プログラムで、キーコードのみを変更してfx-9860GII で走らせてみると、画面の1行目に

- Disp -

と表示されてしまい、1行目の表示に上書きされていまうことが分かったので、Locate の引数を変更して、表示全体を1行下にずらすようにしました。

表示行を1行下にずらした - ステップモード

9860_Pytha1 


表示を1行下にずらした - 連続モード

9860_Pytha2 


fx-9860GIIピタゴラス数探索プログラム: PYTHA
3→M:1→N:1→D:1→D:1→E     (初期化処理)
Locate 1,3,"A="            
(初期画面表示)
Locate 1,4,"B="
Locate 1,5,"C="

Lbl 0

E=0⇒Locate 14,2,"(-):Stop"
(M2-N2)÷2→A             
(ピタゴラス数の計算)
MN→B
(M2+N2)÷2→C

Locate 1,1,D              (見つかった回数の表示)
Locate 3,2,"          "    (スペース19個)
Locate 3,2,A              
(ピタゴラス数の表示)
Locate 3,3,"          "    (スペース19個)
Locate 3,3,B              (ピタゴラス数の表示)
Locate 3,4,"          "    (スペース19個)
Locate 3,4,C              (ピタゴラス数の表示)

Getkey=41⇒1→E
0→K
While Getkey=31
Isz K:K=20⇒Break
WhileEnd:K=20⇒0→E

Locate 14,2,"EXE:Next"◢    
(操作法表示&プログラム一時停止)

Do                     
(次の M と N を探す)
N-2→N
If N<0:Then
M+2→M:M-2→N
IfEnd
N=1⇒Break
LpWhile Frac(M÷N)=0
Isz D                    
(見つかった回数を1つ増やす)

Goto 0



fx-9860GII は fx-5800P よりもかなり動作が速いようで、[EXE] キー長押しの時間を長く設定しないと長押しにならないことから、fx-5800P で長押し時間のカウンタ 7 だったのを、20 に変更しました。

ピタゴラス数100個を探索する時間を比較してみると

・ fx-5800P:                 40秒
・ fx-9860GII (ノーマル 29MHz):       18秒
・ fx-9860GII (オーバークロック 236MHz):  4秒  [2014/12/07 追記]

と、sentaro様のご報告と同様に、fx-9860GII (ノーマル) は約2倍の速さでした。

[2014/12/07 追記]
ちなみに、sentaro様作アドイン Ftune 2 によるオーバークロックで 約236MHz にすると、上記の通り fx-5800P の10倍の速度となりました。

Ftune 2 は、
こちら
このアドインを起動後、メモリーチェックを行い、F5 キーで上記設定ができました。

なお、オーバークロックに合わせて、長押し検出のカウンタは 150 にしています(そうでないと速すぎてステップモードに切り替えが難しい)。



実際見た目も速くなっています。

ノーマル (29MHz)




オーバークロック (236MHz)



これは、凄い速さですね!



fx-9860GII は、並行輸入品 (¥9,000) なので、マニュアル類に日本語はありません。ところが、添付CDに、日本語のマニュアルがありました。但し、fx-5800P と同様、プログラミングに関しては殆ど役に立たない、最低限の内容しか記載がありません。

そこで、開封し、電池を入れて、マニュアルなしでいきなり キーコード取得プログラムを入力してみました。
たった20行のプログラムですが、コマンドをどこから選んで良いのか、最初はサッパリ分からず、結構な時間をかけて入力完了!
これで、大雑把に、どこにどのコマンドがあるのかが分かりました。

このプログラムは、手直し無しで正常動作しました。fx-5800P から fx-9860GII への互換性がかなり高いことが証明されました。

次にピタゴラス数探索プログラムの入力は、かなり楽になりましたが、ここで - Disp - 表示という思わぬ罠がありました。
この表示は、出力命令 ◢ を使うと、現れるようです。

例えば、1行だけのプログラム

Locate 1,1 "1ST LINE"

を実行すると、1行目の左端から、

1ST LINE

と表示されますが、出力命令 ◢ を使って、

Locate 1,1,"1ST LINE"◢

として、実行してみると、1行目の右端に

- Disp -

と表示され、1ST LINE が表示されません。

- Disp - が表示されるとき、その行全体を左端から上書きして表示されているために、1ST LINE が消えているようです。

次に、

""
""
""
""
""
""
Locate 1,1,"1ST LINE"◢


を実行してみると、"" で内部カーソルが6回改行され、7行目に - Disp - が表示されるので、1行目の 1ST LINE は上書きされずに、きちんと表示されます。

このことから、- Disp - は現在の内部カーソルの位置を示していると思われます。

Locate 1,1,"1ST LINE"◢

が正常に表示されない問題を避ける方法がないものか、もう少し調べて見ようと思います。


他にも、色々と触っていて気付いたのですが、fx-9860GII には配列変数がありません。その代わりに List コマンドを使うしかないのかなぁ、と思いますが、その処理速度がどの程度か、いずれ調べてみようと思います。

[2014年12月13日 追記]
fx-9860GII (ノーマルクロック: 約29MHz) でリストと行列のアクセス速度を測定したところ、行列の方が速いことが分かりました。速度と汎用性を考えると、fx-5800P の配列変数の代わりに fx-9860GII で行列を使うのが正解です。

処理内容処理時間 (ミリ秒)
リスト読み出し13.2
リスト書き込み17.6
行列読み出し10.7
行列書き込み12.0
※ 測定はココ の方法に準じて実施。但しループ回数は2000回とした。


fx-9860GII は標準で 29MHz程度。クロックが8倍速くなっているのに、表示まで含めた速度は4.5倍程度にとどまっている、という上記の結果から、表示(描画)速度がかなり遅くて、これが全体の速度を決めてしまう(律速)ことになっているようです。

fx-5800P が14MHzも無いとするならば、fx-5800P の描画速度がfx-9860GII に比べて速いと言えます。




fx-9860GII 用ピタゴラス数探索プログラム: PYTHA

※ fx-9860GII へ転送して使える プログラムファイル pytha.g1m のダウンロード

fx-9860GII PYTHA_src 
 ※ 13行目、15行目、17行目の Locateコマンドの空白はスペース19個




応援クリックをお願いします。励みになるので...

人気ブログランキングへ


FC2ブログランキングへ

 

keywords: プログラム関数電卓、fx-5800P、fx-9860GII、キー長押し、CasioBasic、 ピタゴラス数

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

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

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

やす (Krtyski)

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


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

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

おもしろい・役に立つならクリックしてください。励みになります。
にほんブログ村 IT技術ブログ 開発言語へ
にほんブログ村


人気ブログランキングへ


FC2ブログランキングへ


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

リンク
月別アーカイブ
Sitemap

全ての記事を表示する

RSSリンクの表示
最新トラックバック
ブロとも申請フォーム

この人とブロともになる

QRコード
QR