e-Gadget 開設2周年

2015/10/30

e-Gadget は、カシオ製プログラム電卓 fx-5800P や搭載されているCasio Basicプログラミングをメインテーマとして、2013年10月30日に開設して以来、2周年を迎えました。

開設から2015年10月29日までの当ブログへの来訪者が累計 24,000人を超え、ページビューは 86,000 を超えました。数は少ないのですが、右上がりであることは、とてもうれしく思っています。

Access2015_10_29 
(開設以来、2015年10月29日までのアクセス履歴)


e-Gadget を開設した当時は、fx-5800P の Casio Basic については、まだよく分かっていませんでした。ネットで調べても、fx-5800P のCasio Basic の詳しい説明が見つからなかったので、取りあえずプログラムを色々と作りながら、取扱説明書では分からない Casio Basic の使いこなしを、メモ変わりに公開したのが当ブログの始まりでした。

調べれば調べるほど、Casio Basic が良く出来ていることが分かり、Casio basic 探索が面白くなりました。そして、Casio Basic の使いこなしについて、以下の異なる切り口で紹介するに至りました;
  • Casio Basic 入門講座
  • Casio Basic コマンドリファレンス
  • 逆引き Casio Basic
  • Casio Basic グラフィックス (fx-9860GII 専用)
最初は、fx-5800P のみでしたが、グラフ電卓 fx-9860GII のグラフィックスプログラミングへ広げるようになりました。

探索結果をほぼリアルタイムで公開しているので、間違いを後から訂正したり、タイプミスや誤字脱字などお見苦しい点が多々有りますが、間違いを隠さずに訂正するようにしています。読者の方々には申し訳ありませんが、その方が楽なので、そうさせてもらっています。



fx-5800P が盗難に遭っていなければ...

Casio Basic がよく分からないまま、fx-5800P で適当に作って日常的に使っているプログラムが幾つかありました。ある日、展示会で私の fx-5800P が置き引きに遭いました。

その電卓が無くなってみると、プログラムが使えなくて、たちどころに不便に感じたので、fx-5800P を買い直して、プログラムを入れ直そうとしました。ところがプログラムのソースをきちんと残していなかったので、思い出しながらプログラムを作り直ることになりました。

プログラムを作り直すために一部残っていたソースリストを見ると、その出来の悪さに感心(?)しました。より良いプログラムにしようと思ったのですが、知りたいことは取扱説明書には殆ど書かれていないので、自分で Casio Basic の詳細仕様を調べることにしました。すると Casio Basic は、電卓用の簡易的なものではなくて、なかなか侮れない言語だと分かってきました。

fx-5800P が盗難に遭っていなければ、当ブログは誕生しませんでした。



正直ここまで続くとは...

当初は、すぐにネタ切れになる心配がありました。

ところが色々な発見があり、次々にお宝が見つかるような楽しさを味わいながら、ここまで続いたのは、Casio Basoc が実に良く出来ているためだと思います。

例えば、まさか fx-5800P でモグラ叩きのようなアクションゲームを作れるとは思いませんでした。
また、実用的なユーザーインターフェースを備えたある程度の完成度の実用プログラムが多く作れたことも大きな成果です。実際に、当ブログで紹介しているプログラム以外にも、私自身が日常的に使っているプログラムが複数あります。

なお、これまでの3大トピックスを個人的にピックアップすると、
  • fx-5800P 特有ではあるが、特定キーの二重押しで特殊なキーコードが戻ること
  • Casio Basic でキーの長押しがメニュー操作の定番として使えること
  • Casio Basic 向けの汎用サブルーチン「入力ボックス」を作れたこと
で、Casio Basic プログラミングの幅が大きく広がりました。



特に今考えていること

プログラミングは一部の人の特殊技能と思う人が多いように感じています。一方で、IT業界で仕事をしている人(プログラマやSE)から聞く限り、プログラミング適性は、男女の違い、文系・理系の違いとは無関係、というのが常識のようです。

プログラマは理系じゃないとできないの?

私自身の感覚では、プログラミングは自動車の運転と似ていて、明かに向き不向き、上手下手はあるにしても、最低限の学習と練習をすれば誰でも習得できるものです。必要性や動機さえあれば始められるはずです。

プログラミングとは、手順書を書く作業なので、普通に皆が行っていることと大きく変わらないものです。コンピュータに指示する手順を考えることが、日々の生活や仕事で段取りを考えるのと、いったいどこが違うのか? 変わらないと思います。

プログラミングは、プログラミング言語の文法や単語を多少覚えれば基本的な学習は終わります。あとは実際に作ってみて練習を積めば、少しづつ身に付くものです。


さて、プログラミング初学者は、いったい何に躓ずくのかを調べた論文があります。これは、C言語のプログラミングの例ですが、初学者はキー入力のスペルミスに気付かない、エラーメッセージが理解できない、などプログラミングの本質に至る前に躓くというのです。

プログラミングの写経型学習過程を対象としたつまずきの分析とテキスト教材の改善

ネットで調べると、そもそも開発環境の構築が難しくて分からない、という理由も出てきます。ウィンドウに Hello World と表示するだけでも、覚えることはかなり多くあり、確かに敷居が高いのでしょう。このように、初学者の敵は、プログラミングの本質以外に多くあることが分かります。


面白いことに、プログラム電卓でのプログラミングは、かなり事情が違ってきます。

カシオのプログラム電卓の場合は、開発環境の構築は、Casio Baisc を搭載したプログラム電卓を入手しるだけです。あとはキーを幾つか押すだけで、すぐにプログラミングが始められます。

コマンドの入力は、メニューから選ぶだけなので、スペルミスの可能性は全くありません。エラーメッセージは、その数が少ない上にエラーが発生したところにカーソルが表示されるので、エラーの原因は分かりやすくなっています。

最後に、Casio Basic は覚えるコマンドが圧倒的に少ないので、学習にはとても有利です。

つまり、Casio Basic は、覚えやすく誰にでもプログラミングが出来て、自分専用の実用的なプログラムを作って使う楽しみを与えてくれるものだと思うのです。


最近の Casio Basic は、一昔前の Basic 風言語から大きく進化していて、構造化プログラミングが出来ます。Casio Basic で実際にプログラミングしていない人が取扱説明書を読むだけで大きな誤解をしているケールを、Q&Aサイトで多く見うけます。

実にもったいないと思います。



謝 辞

fx-5800P のみを扱っていたところに、fx-9860GII の面白さや価値を見い出すきっかけを頂いた sentaro様にもお礼を言わなければなりません。sentaro様の アドインプログラム: Ftune2は、fx-9860GIIをオーバークロックするツールですが、これにより、fx-9860GII を高速マシンに変身させます。コーディングが楽な Casio Basic でプログラムを書き、それを高速で実行する環境が手に入れられ、私の興味の対象を大きく広げてくれました。

また、高機能電卓の情報 ブログの管理人 akatuki様との交流で、私はインスパイアされ、まさに同行の士として気持ちの支えになっています。この場を借りて感謝の気持ちを伝えたいと思います。主にHPやTI製プログラム電卓の知見をお持ちで、広い視点から高機能電卓を俯瞰するスタンスで、エンドユーザー・コンピューティングの重要性、必要性にいつも言及されています。

そして、なによりも当ブログにお越し頂く皆様に感謝しています。大いに励みになっています。

ありがとうございます。



2周年記念プレゼント

ご希望の方に、Windows PC で使う "小さな時計 scClock Ver2.1" を差し上げます。
番外編 - 小さな時計 scClock




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

人気ブログランキングへ



関連記事

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

コメントの投稿

非公開コメント

開設2周年おめでとうございます!(^^)

管理人様、こんにちは!

こちらのブログにお邪魔させていただいてから早くも1年と半以上になりますけど、たくさんの興味深い記事をいつもありがとうございます。

昨年の一周年の頃には、ちょうどFtune2/Ptune2プロジェクトが進行中でしたけど、
管理人様にはFtune2エントリーまで作っていただきまして本当に感謝することばかりです。

今年はCasioBasic互換インタプリタ(&コンパイラ)プロジェクトが進行中と相変わらずCASIO漬けの毎日ですけど、
今後ともどうぞよろしくお願いいたします(^^)

Re: 開設2周年おめでとうございます!(^^)

sentaro様

コメントありがとうございます。

> こちらのブログにお邪魔させていただいてから早くも1年と半以上になりますけど、たくさんの興味深い記事をいつもありがとうございます。


そういえば、最初にコメントを頂いたのは、2014/03/21で、Goto のバグの件でしたね。

楽屋裏 - 多重ループの謎;
http://egadget.blog.fc2.com/blog-entry-94.html

sentaro様のコメント;
http://egadget.blog.fc2.com/blog-entry-94.html#comment251

この時は、スタック管理に問題がありそうだという予感はありましたが、sentaro様の実験内容はとても興味深く目が覚める内容でした。

私は、プログラミング好きとは言え、論理的というよりも直感的な考え方をする右脳タイプなので、sentaro様の知識に裏打ちされた論理的な考察はとても参考になりました。



> 昨年の一周年の頃には、ちょうどFtune2/Ptune2プロジェクトが進行中でしたけど、
> 管理人様にはFtune2エントリーまで作っていただきまして本当に感謝することばかりです。

当ブログで自分が作ったもの以外を記事した唯一のものだったりします。



> 今年はCasioBasic互換インタプリタ(&コンパイラ)プロジェクトが進行中と相変わらずCASIO漬けの毎日ですけど、
> 今後ともどうぞよろしくお願いいたします(^^)

直感で行動する右脳タイプの私から見ると、技術があり論理的な sentaro様には憧れさえ感じます。

CBasic プロジェクトについては、応援団長としては当ブログでもサポートできれば嬉しいところです。

アドイン版CasioBasic ver.0.40 テスト版 その4

管理人様、こんにちは!

>そういえば、最初にコメントを頂いたのは、2014/03/21で、Goto のバグの件でしたね。

懐かしいです(^^)
このGotoのバグからCasioBasicの更なる探求が始まってその奥深さに驚くこと多数ですね。

そういえば、このGotoのバグはCBasicではループ構造の実装方法が(たぶん)違っているので再現できてません(^^;


>直感で行動する右脳タイプの私から見ると、技術があり論理的な sentaro様には憧れさえ感じます。

とってももったいないお言葉、恐縮しまくりです。


>CBasic プロジェクトについては、応援団長としては当ブログでもサポートできれば嬉しいところです。

管理人様が応援団長でいてくださるのはとっても心強いです(^^)


ってことで、地道なバージョンアップです。

アドイン版CasioBasic ver.0.40 テスト版 その4
http://pm.matrix.jp/CB/CBASIC040.zip

入力ルーチンをやっと2バイト対応しました。
今のところあまり意味はないですが、?コマンドや変数値入力でCATALOGキーから2バイト系コマンド&文字が入力だけ可能です。

CATALOGキーが実行後に使えなくなっていたのを修正しました。
これはSAVEDISP_PAGE3を使うとNGだったようで本体OSのバージョンアップにSDKが置き去りにされている感じです(^^;

差し替えです(^^;

単純ミスのエンバグしていたので修正差し替えです(^^;

アドイン版CasioBasic ver.0.40 テスト版 その4
http://pm.matrix.jp/CB/CBASIC040.zip

Re: アドイン版CasioBasic ver.0.40 テスト版 その4

sentaro様

Ver 0.40 頂きました。ありがとうございます。


> そういえば、このGotoのバグはCBasicではループ構造の実装方法が(たぶん)違っているので再現できてません(^^;

それは、再現しない方が良いでしょうね(^^;)


> 入力ルーチンをやっと2バイト対応しました。
> 今のところあまり意味はないですが、?コマンドや変数値入力でCATALOGキーから2バイト系コマンド&文字が入力だけ可能です。
> CATALOGキーが実行後に使えなくなっていたのを修正しました。
> これはSAVEDISP_PAGE3を使うとNGだったようで本体OSのバージョンアップにSDKが置き去りにされている感じです(^^;

地道な改良、お疲れ様です。


Prog List でキーを押したら、対応するアルファベットで始まるファイル名にジャンプすることを見つけました。
これって、Ver 0.40 からですか?

CBasicオリジナルの便利機能、良いですね。

そこで、fx-5800P の良さを考えてみると、

・お気に入り登録
・[FILE] キー

だと思います。

そこで、例えばですが、

CBasicの Prog List で、リストの最初にお気に入り(fx-5800Pのように5個に限定することも無いとおもう)表示し、
お気に入りから起動した場合は、強制終了した場合でも EDIT画面に戻らず、Prog List に戻る....

などというのは、可能でしょうか?

いっそ、独立したお気に入り Prog List を表示させ、[AC}の強制終了対応をする方が現実的でしょうか?

如何でしょうか?

お気に入り機能への提案

sentaor様

お気に入り機能のユーザーインターフェースの提案です。

・お気に入り起動専用のアドインにする。
こうすることで、お気に入りプログラム起動の手数を最小限にする。

・お気に入りメニューでは、フォルダと拡張子(g1m) 表示をさせない。

・お気に入り指定したものを上位に表示し、セパレータ以下には、-------オリジナルのプログラムリストと同じ表示にする(但し、フォルダと拡張子は表示しない)。

・お気に入りの登録/解除は、お気に入りアドインで行う。

・ファンクションメニューを例えば以下のようにする
[F1] (EXE)、[F2] (SEL)、[F3] (ON)、 [F6] (OFF) で行う。

・お気に入りの登録/解除は、
- [F1] (SEL) で、ファイル名の左に▶ 表示 (Memory アドインと同じ感じ)
- [F3] (ON) で登録、[F6] (OFF) で解除



こんなので、如何でしょうか?

アドイン版CasioBasic ver.0.41 テスト版 その4.1(カナ対応版)

管理人様、こんにちは!

>Prog List でキーを押したら、対応するアルファベットで始まるファイル名にジャンプすることを見つけました。
>これって、Ver 0.40 からですか?

んと、最初の0.10より一応装備されていました(^^)
fx-5800Pはもちろんですがfx-CG10/20では最初から装備されている機能なのでfx-9860GIIでもということで取り入れました。


>お気に入り機能への提案

今日はカタカナ対応をちょこちょこ作業していたのですが、
お気に入り機能は、管理人様ご提案の内容で次回バージョンアップで実装してみたいと思います。
fx-5800Pの良いところは全部取りいれていきたいですね(^^)



アドイン版CasioBasic ver.0.41 テスト版 その4.1(カナ対応版)

http://pm.matrix.jp/CB/CBASIC041.zip

[F5]CHARメニューの右端[F6]が空いていたのでそこにカナ選択メニューを追加しました。
使い勝手はちょっと不便ですけどとりあえずプログラムでカタカナ表示が出来るようになりました(^^)

Add-In CBasic ver.0.41

setaro様

Ver 0.41 を頂きました、ありがとうございます。

カナ入力、良いですね。
このフォントは、fx-CG10 から持ってきたものですか?
フォントを変更することはできますか?

また、濁点と半濁点付きのカナを増設することはできますか?



> >Prog List でキーを押したら、対応するアルファベットで始まるファイル名にジャンプすることを見つけました。
> >これって、Ver 0.40 からですか?
>
> んと、最初の0.10より一応装備されていました(^^)
> fx-5800Pはもちろんですがfx-CG10/20では最初から装備されている機能なのでfx-9860GIIでもということで取り入れました。

あ”、そうですか。気がつかなかっただけなんですね。失礼しました(^^;)


> >お気に入り機能への提案
>
> 今日はカタカナ対応をちょこちょこ作業していたのですが、
> お気に入り機能は、管理人様ご提案の内容で次回バージョンアップで実装してみたいと思います。
> fx-5800Pの良いところは全部取りいれていきたいですね(^^)

おお、楽しみにしています。

=====

ところで、質問があります。

CBasicでないと出来そうに無いちょっとしたゲームプログラムを作ろうとしていて、CBasicでコーディングしています。
で、チョット質問です。

1) Mat の入力は、Catalogue からしか出来ないようです。EDIT画面のCMD から入力したいです。

2) ついでに、Mat 関係のコマンドについても、CMDから入力できると、将来良いかも知れません。(今は特に使っていませんが...)

3) 以下のコードでエラーが発生します。
 {127,63}→Dim Mat C

エラーメッセージは、

Memory ERROR
ptr:0x5A(90)

です。
これは、エラー不足を意味しているのでしょうか?

ストレージメモリの残量は、439,168 Byte の状況です。

4) エラーメッセージについて
何のエラーか、もう少し具体的な表記があると、親切で良いように思うのですが、如何でしょうか?

おそらく現在は、デバック用途を強く意識したメッセージだと思いますので、今ではなくて、後から出良いので、どうでしょうか?

デバッグ用途は、きっと最後まで残るとは思いますので、それについては

Contact author とか、そんなのにして、

ユーザー側のエラーと明かなものについては、少し詳しい内容にするというのは如何でしょうか?

英語表記については、場合によってはお手伝いしますので...


5) ALPHAモードの大文字<>小文字切り替えについて
オリジナルだと、一旦 ALPHAモードを解除して、再び ALPHAモードにすると、大文字モードになります。
一方、CBasiic では、ALPHA モードを解除 -->復帰 すると、解除前のモードが保存されています。

実は、この仕様は使ってみて便利なので、このままが良いと思うのです。
確かに A<>a と a<>A が切り替わっているのですが、これだと現在のモードがどちらか分かりにくいのです。

もし、現行仕様を維持する場合は、ファンクションメニューの表示を例えば

「黒字に白抜きでA」 <--> 「単に黒文字で a」 を交互に表示するといった感じで、パッと分かりやすいようにすると言うのは、如何でしょうか?

或いは、オリジナルの CasioBasicと同じ仕様にしても良いかも知れませんが...

オリジナルと、CBasic仕様のどちらが良いか...についてもご意見を伺いたいです。


6) FA-124 Ver 2.04 とのデータリンクについて
fx-9860GII と PC をコネクトして、ストレージメモリ内のデータを表示する際、
メインメモリから転送したものが FA-124 上で表示しないのです。

CBasicで作成したものは、表示されます。

ちなみに、メインメモリの g1m ファイルをストレージメモリに転送するのは、未だにFA-124 でのやり方が分からず、電卓本体でやっています。それが原因なのかも知れませんが....

そちらではどんな状況ですか?


No title

管理人様、こんにちは!

早速のver.0.41テストありがとうございます(^^)

>このフォントは、fx-CG10 から持ってきたものですか?

CG10のフォントは、3倍の24x18ドット構成なのでfx-9860GIIにそのまま持ってくると超デカ文字になっちゃいます(^^;

ので、fx-9860GIIの6x8ドットのフォントに合わせたカナフォントデータをどうやって作成するかってところで、
ちょうどこちらのサイトにカナ表示プログラムが例示されてましたのでかなりの部分を参考にさせていただきました。
http://baticadila.dip.jp/fx_sdk_005.html
フォントデータはそっくりそのままではなくて、
以前のCASIO機のカナフォントを参考にしつつ若干の調整をしてあります。

最近気が付いたのですが、fx-603Pもカナフォントを持っているのですよね。
グラフ電卓ではカナフォントを標準搭載しているのはCG10/20くらいですけど、中文フォントの一部なのが難点です(^^;


>フォントを変更することはできますか?

はい、6x8のビットマップデータを作成すれば追加することも可能です。
カナ表示は勝手に拡張した非互換部分なので何でもありです(^^;


>また、濁点と半濁点付きのカナを増設することはできますか?

ドット構成的に若干厳しいのですが、6x8のフォントデータが作成できれば可能です(^^)



>おお、楽しみにしています。

とりあえずは本体でお気に入り登録ができるようにして、それから設定専用の別アドインも作成するようにしてみます。


>1) Mat の入力は、Catalogue からしか出来ないようです。EDIT画面のCMD から入力したいです。

Matは[SHIFT]+[2]で普通に入力可能なのでコマンドリストには入れてなかったのですが、DIMの隣が空いているのでそこに追加しておきます(^^)


>3) 以下のコードでエラーが発生します。
> {127,63}→Dim Mat C

127x63=8001個の配列が必要でそれぞれが8バイト必要ですから64KBオーバーになってメモリ確保できなかったエラーですね。
SDKでは使えるフリーエリアが48KBしかないので、そこからプログラムエリアとか差し引くとMatで使える領域は実質30KB以下しかないです。
本体CsioBasicのように要素数999までとかの制限はない代わりにメモリでの制限で上限となります。
Char型の1バイト配列とかを作成できるようになればエラーはでなくなりますが、この際、配列を独自拡張してみましょうか(^^;

Matで作成できる配列のうち、BとCは1バイト配列、Wは2バイト配列、Lは4バイト配列にするとか…
それぞれ整数限定ですが確保できる要素数が格段に増えます。


>4) エラーメッセージについて
とりあえず出来るだけCasioBasic互換でメッセージを合わせてたのですが、個人的にはCasioBasicのエラーメッセージは若干不親切だと感じてたところで、エラーの原因を細かく分けることは可能なのでその方向で変更してみたいと思います(^^)


>5) ALPHAモードの大文字<>小文字切り替えについて

本来は本体と同じ仕様にするのがよいと思っていたのですが、inp.cの作成の時にファンクションキーでの大文字小文字切り替えを行うとALPHA-LOCKではない単一のALPHAモードだとALPHAモードが解除されてしまうということで今の仕様になったというところです。
ですが、そこのところは解決することができるのでオリジナルと同じ仕様にすることも可能なのですが、
現在の大文字小文字状態を維持する方が私も便利だと思うので、オリジナル仕様ではなく管理人様のおっしゃるようにファンクション表示を分かりやすいように変更してみます(^^)


>6) FA-124 Ver 2.04 とのデータリンクについて
>メインメモリから転送したものが FA-124 上で表示しないのです。

メインメモリからストレージメモリにコピーする場合にスペースが使えないとかファイル名を変更しないとダメな場合がありますけど、
ストレージメモリにコピーが成功してしまえばFA-124で表示されないというのはちょっと不思議です。
そのFA-124で表示されないファイルはメモリマネージャーでは表示されてるでしょうか?


>ちなみに、メインメモリの g1m ファイルをストレージメモリに転送するのは、未だにFA-124 でのやり方が分からず、電卓本体でやっています。それが原因なのかも知れませんが....

FA-124はメインメモリモードとストレージメモリモードがきっちり分かれているので、
メインメモリモードでプログラムファイルをFA-124で転送した後で、そのファイルを一旦PC上にエクスポート(ドラッグ&ドロップ)します。
そしてストレージモードにしてからそのPC上のg1mファイルをアドインのg1aファイルと同じ手順で転送すればOkです。

モロモロ

sentaro様


> fx-9860GIIの6x8ドットのフォントに合わせたカナフォントデータをどうやって作成するかってところで、
> ちょうどこちらのサイトにカナ表示プログラムが例示されてましたのでかなりの部分を参考にさせていただきました。
> http://baticadila.dip.jp/fx_sdk_005.html
> フォントデータはそっくりそのままではなくて、
> 以前のCASIO機のカナフォントを参考にしつつ若干の調整をしてあります。

最初から手作りというのは sentaro様の流儀に反すると思っていたので、そういうことなのですね。


> 最近気が付いたのですが、fx-603Pもカナフォントを持っているのですよね。
> グラフ電卓ではカナフォントを標準搭載しているのはCG10/20くらいですけど、中文フォントの一部なのが難点です(^^;

日本で売ることの優先度が低い現れですね。

アジアの国で日本人は外国語が下手と言われているが、逆に言えば日本語で科学技術を操れるだけの文化を持っていて、大学教育を母国語でやれるのは世界に誇れる日本の文化だと思います。

せめて日本語のかな、カナフォントくらいは実装して欲しいものですね。fx-CG10/20 は中文フォント入れられるのなら日本の漢字フォントだって入れられるのだろうと思います。

カシオ殿は、もっと日本文化を大切にするという精神を取り戻して欲しいものです。


> >フォントを変更することはできますか?
>
> はい、6x8のビットマップデータを作成すれば追加することも可能です。
> カナ表示は勝手に拡張した非互換部分なので何でもありです(^^;
> >また、濁点と半濁点付きのカナを増設することはできますか?
>
> ドット構成的に若干厳しいのですが、6x8のフォントデータが作成できれば可能です(^^)

ご紹介頂いたサイトを拝見しました。エクセルに展開すればフォントのデザインができそうですね。
時間をみて、デザイン変更に挑戦してみたいと思ったりします。


このサイトで、ファイルアクセスのところを見たのですが、フラッシュへの書き込み回数について触れていますが、このあたりどうお考えでしょうか?

CBasic上でコーディングするとフラッシュへの書き込み回数が激増しそうです。
CBasic上では、簡単な編集だけにしておいた方が良いとか....



> とりあえずは本体でお気に入り登録ができるようにして、それから設定専用の別アドインも作成するようにしてみます。

よろしく御願い致します。




> >1) Mat の入力は、Catalogue からしか出来ないようです。EDIT画面のCMD から入力したいです。
>
> Matは[SHIFT]+[2]で普通に入力可能なのでコマンドリストには入れてなかったのですが、DIMの隣が空いているのでそこに追加しておきます(^^)

あ”、[SHIFT] [2] で Mat がありました。失礼しました。
追加スペースがちょうどあったようで、よろしく御願いします。


> >3) 以下のコードでエラーが発生します。
> > {127,63}→Dim Mat C

SDKで使えるフリースペースまで考えが及びませんでした。確かにおっしゃる取りですね。
空きスペースがたっぷりあるから、127 x 63 の行列は 64K ちょっとで、いけると思ってしまったもので...

既にお気づきかも知れませんが、画面のビットパターンを行列に入れておけば、Cbasicの高速性を活かしたグラフィックスプログラムが作れるかも知れないと思ってのことなんです。

なので、fx-9860GII では1バイトで十分。fx-CG10/20 では4バイト対応になりそうですが...


> SDKでは使えるフリーエリアが48KBしかないので、そこからプログラムエリアとか差し引くとMatで使える領域は実質30KB以下しかないです。
> 本体CsioBasicのように要素数999までとかの制限はない代わりにメモリでの制限で上限となります。
> Char型の1バイト配列とかを作成できるようになればエラーはでなくなりますが、この際、配列を独自拡張してみましょうか(^^;
>
> Matで作成できる配列のうち、BとCは1バイト配列、Wは2バイト配列、Lは4バイト配列にするとか…
> それぞれ整数限定ですが確保できる要素数が格段に増えます。

Byte と Char で1バイト、
Word で2バイト、
Long で4バイト、分かりやすいですね。

どうでしょう、Double Byte ってことで、2バイト配列用に D も追加して頂くのは如何でしょうか?

これが出来ると、CBasicの良さが引き立ちそうですが、さてやってみないと分かりませんケド...



> >4) エラーメッセージについて
> とりあえず出来るだけCasioBasic互換でメッセージを合わせてたのですが、個人的にはCasioBasicのエラーメッセージは若干不親切だと感じてたところで、エラーの原因を細かく分けることは可能なのでその方向で変更してみたいと思います(^^)

ありがとうございます。



> >5) ALPHAモードの大文字<>小文字切り替えについて
>
> 本来は本体と同じ仕様にするのがよいと思っていたのですが、inp.cの作成の時にファンクションキーでの大文字小文字切り替えを行うとALPHA-LOCKではない単一のALPHAモードだとALPHAモードが解除されてしまうということで今の仕様になったというところです。
> ですが、そこのところは解決することができるのでオリジナルと同じ仕様にすることも可能なのですが、
> 現在の大文字小文字状態を維持する方が私も便利だと思うので、オリジナル仕様ではなく管理人様のおっしゃるようにファンクション表示を分かりやすいように変更してみます(^^)

やはり、前回の設定を残す方が、使いやすいですよね!
よろしく御願い致します。



> >6) FA-124 Ver 2.04 とのデータリンクについて
> >メインメモリから転送したものが FA-124 上で表示しないのです。
>
> メインメモリからストレージメモリにコピーする場合にスペースが使えないとかファイル名を変更しないとダメな場合がありますけど、
> ストレージメモリにコピーが成功してしまえばFA-124で表示されないというのはちょっと不思議です。
> そのFA-124で表示されないファイルはメモリマネージャーでは表示されてるでしょうか?

はい、メモリマネージャでは見えています。

メモリマネージャでOptimize しても、FA-124A Ver 2.04 で見えるようになりません。


実は、CBasic上で作ったプログラムを、メインメモリへコピーしたいと思ったのが、この問題に出くわしたきっかけです。

で、FA-124A と 電卓をコネクトしてから、青い右矢印のアイコンを押してバックアップしようとしたら、

Selected items are invalid というエラーメッセージが出て、結果的に ストレージメモリ上の g1m ファイルの転送で出来ていないことが分かり、さらに詳しくみると、メインメモリからストレージへ転送したファイルだけが、FX-124A の左ペインに表示されていないことが分かった次第です。

このエラーメッセージは、メインメモリとストレージの両方で発生します。
メインメモリについては、転送に成功したのは、
- Alpha-Mem
- [Program]フォルダ全体
- Setup

飲みで、他の転送に失敗しているようです。

ストレージについては、全く何も転送できない状況です。

但し、電卓本体にあるアドインは全て動作します。


無ければ転送しない筈ですが、何かファイルに問題があるのか、メモリ上に何か問題が発生している可能性がありそうです。

FA-124A を fx-9860GII に貼附のCDから再インストールしても問題解消せず。
さらに、カシオの日本語サイトからダウンロードした FA-124A の最新版 (fa124_inst_204_2.zip) を再インストールしましたが、問題解消せず。

あとは、fx-9860GII 本体の初期化で試すしかなさそうですが、まだやっていません。

FA-124A の異常

sentaro様

ストレージのデータを全てリセットをやってみました。
これは、アドインは消去しません。

システムマネージャーで、[[F5](Reset) [F4](SMEM)

すると、FA-124A にコネクトした時、ストレージのアドインは全て見えました。

その後、g1mファイルの転送を、FA-124を使った方法と、本体だけでの転送の両方で行って、FA-124A にコネクトしたところ、全てのファイルが表示されました。

但し、青矢印アイコンによる全部転送を行うと、Selected Items are invalid のエラーメッセージは依然として現れます。

まだ原因は明かではありませんが、ストレージにあるアドイン以外のデータを消去したらFA-124A で見えるようになったことから、ストレージへのデータ転送で何か起きた可能性(原因とは特定できませんが)があります。

今度は、ストレージ全消去してから、試してみようと思います。

Re: FA-124A の異常

sentaro様

FA-124A での今回の異常についてですが、メインメモリもリセットしたので、完全リセットを行ったことになります。

それにも関わらず、FA-124A の青い矢印アイコンで Selected Items are invalid エラーが相変わらず発生するので、これは FA-124A側の問題の可能性がありそうです。

なお、FA-124A から電卓のストレージ内のファイルが見えなかった件について、1つ可能性があります。

これまで、ストレージに入れたり読み書きしたのは、全てカシオのアドインかseentaro様絡みのアドインと Cbasicで使うデータのみです。但し1つを除いてですが...

この1つが、下記からダウンロードして入れたアドインです。

http://sourceforge.net/projects/edit-fx9860g/

Test Editor for Casio Fx-9860G というものです。

当初は問題なく使えていたのですが、先週電卓をリスタートしないとダメなエラーが頻発しました。これが 10/25 以降です。詳しい日付まで覚えておらず、すみません。

そして、その後に今回の問題が発生。

なので、敢えて言えば、FA-124A でファイルが見えなくなった原因は、このアドインの可能性くらいしか思い当たりません。
ええっと、Cbasic の Ver 0.34 以降も可能性としてはあるのでしょうが、それ以前のバージョンでは問題が無かったので、ファイル書き込み部分に手を入れていなければ、可能性から排除できると思います。

逆に、Ver 0.34 以降でファイルへの書き込み部分を何か変更されていた場合は、ひょっとして、ということで...

取りあえず、Ftune2、CBasic、その他のカシオのアドイン、Casio Basicのプログラムは正常に動いていますので、私のところでの問題は解決です。


アドイン版CasioBasic ver.0.42 テスト版 その4.2(Mat配列バイト対応版)

お気に入り機能はまだ実装途中ですが、
Mat配列の実装を先に済ませたので一応アップしておきます。

アドイン版CasioBasic ver.0.42 テスト版 その4.2(Mat配列バイト対応版
http://pm.matrix.jp/CB/CBASIC042.zip

Mat配列のバイト構成を一部変更しました。
配列名のアルファベットが
C,Bは1バイト配列となります。(-128~127)です。
D,Wは2バイト配列です。(-32768~32767)
I,Lは4バイト配列です。(-2147483648~2147483647)
それ以外は従来同様、8バイトの倍精度実数配列です。

それから、大文字小文字入力での表示を変更しました。

ファイルリストのフォルダ表示を最後尾に表示するようにしました。
これでとりあえず一番目に一番使うファイルを表示することができます。


>最初から手作りというのは sentaro様の流儀に反すると思っていたので、そういうことなのですね。

はい!(^^;
フォントデータを一から作るのはさすがに骨が折れるのでポケコンから吸い出そうかと思っていたところにちょうど見つかりました(^^)


>日本で売ることの優先度が低い現れですね。

そうですね。
それにもはや日本では高機能電卓の開発がされてないということもありそうですね。
製造が中国製っていうだけでなく本体設計も中国製になってそうです。


>時間をみて、デザイン変更に挑戦してみたいと思ったりします。

私はデザイン方面はかなり苦手なのでよろしくお願いします(^^)


>このサイトで、ファイルアクセスのところを見たのですが、フラッシュへの書き込み回数について触れていますが、このあたりどうお考えでしょうか?

フラッシュチップのデータシートを見ると100万回の書換えと20年のデータ保証をしています。
最低限それだけ持つということは毎日100回書き換え(=最適化)してもほぼ気にする必要はなさそうです。
CG10/20の場合は10万回の書換え回数になるので寿命は1/10ですが、使えるエリアが10倍以上ありますから最適化の回数が減るので気にする必要はなさそうです。


>どうでしょう、Double Byte ってことで、2バイト配列用に D も追加して頂くのは如何でしょうか?

はい、そのようにMatを拡張してみました。


>はい、メモリマネージャでは見えています。
>メモリマネージャでOptimize しても、FA-124A Ver 2.04 で見えるようになりません。

ここがかなり不可思議なところですよね。


>実は、CBasic上で作ったプログラムを、メインメモリへコピーしたいと思ったのが、この問題に出くわしたきっかけです。

これは電卓上でメモリマネージャでのメインメモリへのコピーは可能でしょうか?


>で、FA-124A と 電卓をコネクトしてから、青い右矢印のアイコンを押してバックアップしようとしたら、

私はその方法でのバックアップを使ったことがなかったので、
試してみたら、同じくSelected items are invalid が出ました(^^;
ストレージは何も転送できないのも同じでした。
でも、FA-124Aに表示されているファイルをひとつずつドラッグ&ドロップで転送すればだいじょうぶなので気にもしてなかったのですが、
そもそもFA-124Aにファイルが表示されないことにはそれも不可能ですね。

たぶん、なにか不正なファイルが最初にできてしまって、そこからファイルのディレクトリ情報を読むことができなくなっているような感じですね。
ストレージ上に重要なファイルがなければ思い切って完全初期化してみることしかなさそうですね。

Re: FA-124A の異常

管理人様の後の書き込みに気が付かないままに書き込みしてしまいました(^^;

初期化でとりあえず直ったようですね。
よかったです(^^)

>逆に、Ver 0.34 以降でファイルへの書き込み部分を何か変更されていた場合は、ひょっとして、ということで...

ファイルアクセスはシビアなところなので、要の書き込み部分は最初からいじってないです(^^;
ので、ファイルアクセスでの原因はなさそうですが、エディタとインタプリタの実行時にメインメモリを一部破壊していた可能性は捨て切れません(^^;

Re: Re: FA-124A の異常

sentaro様


> 初期化でとりあえず直ったようですね。
> よかったです(^^)

はい、必ずバックアップするようにしているので、最悪でも元に戻せます。

今回は、原因のファイルやデータが分かるかも知れないと思い、最初から完全リセットせずに、データを消してからアドインを消すようにしてみました。で、結果としてデータが悪さしていることが分かったということですね。



> >逆に、Ver 0.34 以降でファイルへの書き込み部分を何か変更されていた場合は、ひょっとして、ということで...
>
> ファイルアクセスはシビアなところなので、要の書き込み部分は最初からいじってないです(^^;
> ので、ファイルアクセスでの原因はなさそうですが、エディタとインタプリタの実行時にメインメモリを一部破壊していた可能性は捨て切れません(^^;

確かに、メインメモリも一部壊れていたようですが、これも完全リセットで解消しています。

ストレージのファイルが FA-124A で見えない原因にメインメモリのデータも関わっているとは思いにくいので、ストレージへのデータ書き込みや消去の際に、何か起きたと思った方が良いのではないでしょうか?


昔、PCのソフトを作っていた時、OSが起動できなくなったことが結構あるので、その当たりのリスクには慣れています。
そんなことから、Windowsが起動できなくなっても、元に復元するソフトを作ったくらいですので...これを使い始めてからWindowsの再インストールは一度もやらずに済みました。但し、Win 98SE までで、XP以降に対応するのがしんどくなって(時間が無くなって)、開発をやめちゃいました。

まぁ、sentaro様のように ハードが壊れるという経験は皆無でして、そこまでガッツリ弄るプログラムは作ったことありません、ハードの詳細はあまり詳しくないので...

Re: アドイン版CasioBasic ver.0.42 テスト版 その4.2(Mat配列バイト対応版)

sentaro様

Ver 0.42を頂きました。ありがとうございます。


> お気に入り機能はまだ実装途中ですが、
> Mat配列の実装を先に済ませたので一応アップしておきます。

お、助かります。

CBasicで作りかけのグラフィックスプログラムは、リセットで消えたので、もう一度作り直しです(^^;
そもそも、電車の中で CBasic でいきなりコーディングしたので、あれやこれや気になってりだしたので、丁度良いタイミング!

経験的に、1から書き直した方が良いコードがかけます...(^_^)/

=====

> Mat配列のバイト構成を一部変更しました。
> 配列名のアルファベットが
> C,Bは1バイト配列となります。(-128~127)です。
> D,Wは2バイト配列です。(-32768~32767)
> I,Lは4バイト配列です。(-2147483648~2147483647)
> それ以外は従来同様、8バイトの倍精度実数配列です。

それぞれ2個づつの構成ですね!



> それから、大文字小文字入力での表示を変更しました。

はい、見やすくなりました(^_^)/



> ファイルリストのフォルダ表示を最後尾に表示するようにしました。
> これでとりあえず一番目に一番使うファイルを表示することができます。

了解です。お気に入りの下には、fx-5800P のようにセパレータを入れて頂くと分かりやすくで良いと思います。



> >最初から手作りというのは sentaro様の流儀に反すると思っていたので、そういうことなのですね。
>
> はい!(^^;
> フォントデータを一から作るのはさすがに骨が折れるのでポケコンから吸い出そうかと思っていたところにちょうど見つかりました(^^)

ポケコンからの吸い出しですか...さすが。
昔の技が活きてくるところでしたね。



> >日本で売ることの優先度が低い現れですね。
>
> そうですね。
> それにもはや日本では高機能電卓の開発がされてないということもありそうですね。
> 製造が中国製っていうだけでなく本体設計も中国製になってそうです。

ありゃ、中国開発とは思いもしませんでしたが、確かにかの国の人はIT強い人が多そうですね。
UFCでも、若い中国人で凄い人が居ますしね...


> >時間をみて、デザイン変更に挑戦してみたいと思ったりします。
>
> 私はデザイン方面はかなり苦手なのでよろしくお願いします(^^)

は~い、ちょっとやってみようと思います。
但し、デザインには強くないので、時間かかると思います。昔作ったWindowsソフトもアイコンはプロのデザイナーの友達に作ってもらったことが多いくらいです(^^;



> >このサイトで、ファイルアクセスのところを見たのですが、フラッシュへの書き込み回数について触れていますが、このあたりどうお考えでしょうか?
>
> フラッシュチップのデータシートを見ると100万回の書換えと20年のデータ保証をしています。
> 最低限それだけ持つということは毎日100回書き換え(=最適化)してもほぼ気にする必要はなさそうです。
> CG10/20の場合は10万回の書換え回数になるので寿命は1/10ですが、使えるエリアが10倍以上ありますから最適化の回数が減るので気にする必要はなさそうです。

それを伺って安心しました。


> >はい、メモリマネージャでは見えています。
> >メモリマネージャでOptimize しても、FA-124A Ver 2.04 で見えるようになりません。
>
> ここがかなり不可思議なところですよね。

> たぶん、なにか不正なファイルが最初にできてしまって、そこからファイルのディレクトリ情報を読むことができなくなっているような感じですね。

そんな感じですね。



> >実は、CBasic上で作ったプログラムを、メインメモリへコピーしたいと思ったのが、この問題に出くわしたきっかけです。
>
> これは電卓上でメモリマネージャでのメインメモリへのコピーは可能でしょうか?

メモリマネージャーでストレージのファイルをコピーしようとしたら、上書きしますか?と聞いてきたので、実際にコピーされていたことに気がつきませんでした。

メインメモリにないファイル名を、ストレージ上のCBasicで作ってコピーしてみたら、メインメモリにコピーされることが確認できました。

いやぁ、そそっかしいです(^^;)



> >で、FA-124A と 電卓をコネクトしてから、青い右矢印のアイコンを押してバックアップしようとしたら、
>
> 私はその方法でのバックアップを使ったことがなかったので、
> 試してみたら、同じくSelected items are invalid が出ました(^^;
> ストレージは何も転送できないのも同じでした。
> でも、FA-124Aに表示されているファイルをひとつずつドラッグ&ドロップで転送すればだいじょうぶなので気にもしてなかったのですが、

私も、ファイルをドラッグ&ドロップで転送していて、今回初めて青矢印アイコンを使ってみたら、Selected Items are invalid に出くわしました。

そちらでも再現したのですね。これはカシオに問い合わせた方が良いかも知れませんね。


Re: Re: FA-124A の異常

sentaro様

Ver 0.42 ですが、
[SHFT] [F1] (Val) が、EDITOR が開いている時に効きません。
一旦、Prog List 画面へ戻れば、効きます。

ご検討頂けますか?


CBasic ver.0.42 テスト版: ループと ' (コメントアウト)

sentaro様

チョット不可解な現象が出てきました。

ClrGraph
Do
While Getkey=47
Text 1,3,"[EXIT]: Down"
WhileEnd
Text 1,3,"[EXIT]: Up "
LpWhile 1

で、2つの Text コマンドをコメントアウトして、

ClrGraph
Do
While Getkey=47
'Text 1,3,"[EXIT]: Down"
WhileEnd
'Text 1,3,"[EXIT]: Up "
LpWhile 1

を実行すると、エラーメッセージが出てきます。

While without WEnd
ptr:0x42(66)

外側のループを While / WhileEnd にしても同様です。

ClrGraph
While 1
While Getkey=47
Text 1,3,"[EXIT]: Down"
WhileEnd
Text 1,3,"[EXIT]: Up "
WhileEnd

で、2つの Text コマンドをコメントアウトして、

ClrGraph
While 1
While Getkey=47
'Text 1,3,"[EXIT]: Down"
WhileEnd
'Text 1,3,"[EXIT]: Up "
WhileEnd

で、全く同じエラーメッセージが出てきます。

===

次に、どちらか一方の Text コマンドだけをコメントアウトすると、実行しても何も表示せず終了( Done 表示) します。

ClrGraph
While 1
While Getkey=47
'Text 1,3,"[EXIT]: Down"
WhileEnd
Text 1,3,"[EXIT]: Up "
WhileEnd



ClrGraph
While 1
While Getkey=47
Text 1,3,"[EXIT]: Down"
WhileEnd
'Text 1,3,"[EXIT]: Up "
WhileEnd

コメントアウト記号が、前後のコードと繋がっておかしなことになっている感じです。

Re: CBasic ver.0.42 テスト版: If、⇒、Isz、Dsz

sentaro様


1バイト行列を実装して頂いたので、CBasic 上で、試しにライフゲームを作ってみることにしました。
CBasicインタープリタの高速性のおかげで、狭い範囲で変化するパターンについては、とても高速に動作することが確認できました。変化する1つひとつのパターンを目で追えないくらいの速さです。

CBasic Ver0.42 インタープリタ用 Life Game Ver 0.3: LIFE03.g1m
http://egadget2.web.fc2.com/archives/LIFE03.html
※ Ftune2 でオーバークロック 280MHz 動作併用です。


■■■■■
■   ■

からスタートするパターン変化は、わりとお気に入りです。


工夫無しで作った最初のバージョンだと、127 x 63 の全てのピクセルの判定を最低でも2回行うロジックで、さすがに CBasicでもかなり遅くなりました。

しかし、パターンに応じて、調べるピクセル範囲を徐々に拡大するようにロジックを変更したところ、上記のように極めて高速に計算とグラフィックス表示ができました。


ところが、今のロジックだと調べるピクセル範囲を広げるだけなので、例えば以下のパターンから始まるグライダーは、移動するに従って調べるピクセル範囲が拡大する一方になります。それに伴って、計算量がどんどん増えてきます。最初は高速でも段々と速度が遅くなってしまいます。

■■■
  ■
 ■


そこで次は、調べるパターンを現実に即して、縮小もできるようなロジックを考えてみようと思っています。これで、グライダーも高速に飛ばせてみようと狙っています。

少なくとも、現時点ではロジック変更で計算量を減らすことで高速化が出来ているので、相対的にグラフィックス表示は十分に高速だと言って良いと思います。

縮小化が実装できたら、その次は、以下のパターンから始まるケースの高速化です。これは、爆発のように破片が広く散らばりながら、その中からグライダーが5機出てくるものです。取りあえず今のバージョンでは、範囲が全画面に近く広がると、画面更新に1秒以上かかるのですが、それでもまだ見ていられる程度です。

 ■■
■■
 ■

今は、BugTraceで使ったルーチンで、最初のパターンを1ピクセルづつ描く方法ですが、最終的には最初のパターンを登録して、リストから選べるようにしたいと思っています。

ライフゲームは、いずれ記事にしようと思っていますが、その前に CBasicインタープリター版の正式公開が先のような気がしています。

=====

とても素晴らしい開発環境を手に入れて、思いっきり楽しんでいます。
本当にありがとうございます。

ひよっとしたら、独自機能追加をお願いしたくなってくるかも知れません。

=====

さて、計算量を減らす作戦を色々と検討しているのですが、コマンドの事項速度も気になっています。

If、⇒、Isz、Dsz はオリジナルの Casio Basic では明かな処理速度の違いがあります。そこで、Cbasicインタープリタでの、下記の実行速度が気になって参りました。

If C:Then [処理]:IfEnd



C⇒[処理]

との実行速度の違い、

C+1→C



Isz C

との速度の違い、そして、

C-1→C



Dsz C

との速度の違いは、実装上はどうなっていますでしょうか?

=====

コメントアウトの不可解な現象ですが、If 文でも問題が発生しましたが、再現性を見つけてからまた報告します。


いずれにしても、Cbasicはインタープリター版でも十分に価値が出そうです。


Life Game : LIFE03 (Ver 0.3) で遊んでみた(1)

sentaro様

本題とは直接関係ありませんが、面白いパターンが見つかりましたので、メモ変わりに書かせてもらいます。

■        ■
■■■■■■■■■■
■        ■


LIFE Ver 0.3 で、最初にプロットする時、画面の中央に十字カーソルが来ます。
そこへ、上のパターンの中心線上の左端のドットを持ってきます。

これで、実行すると丁度画面に収まります。

それほど広がらないのですが、なんと517世代続きます。模様が顔みたいで面白いです。


アドイン版CasioBasic ver.0.50 テスト版 その5(お気に入り対応版)

管理人様、こんにちは!

お気に入りモードの実装にちょっと手間取ってしまいましたけど、なんとか動くようになりました。
別アドインではなく本体内実装なので使い勝手がどうかというところですけど、
fx-5800Pに似た感じにはなったと思います(^^)
ファイルモードの[F6]で追加/解除となります。

>Ver 0.42 ですが、
>[SHFT] [F1] (Val) が、EDITOR が開いている時に効きません。
>一旦、Prog List 画面へ戻れば、効きます。

Cut & Pastモードを実装した時にエンバグしてたようです(^^;


>チョット不可解な現象が出てきました。
>で、2つの Text コマンドをコメントアウトして、
>を実行すると、エラーメッセージが出てきます。

これは…WhileコマンドがWhileEndをサーチしている時にコメント部分を読み飛ばす時に”で囲まれた文字列の中の「:」を区切りと判断していたためにWhileEndを文字列としてスキップしたために起きたエラーでした(^^;


>1バイト行列を実装して頂いたので、CBasic 上で、試しにライフゲームを作ってみることにしました。
>CBasicインタープリタの高速性のおかげで、狭い範囲で変化するパターンについては、とても高速に動作することが確認できました。変化する1つひとつのパターンを目で追えないくらいの速さです。

早速のサンプルプログラムをありがとうございます!
あの127x63配列はこのライフゲームのためだったのですね(^^)

本体CasioBasicではさすがに速度的に諦めてしまうプログラムだと思われますけど、実用的な速度でここまでスムーズに動くのはちょっとびっくりしました。
10倍以上という速度によるアプリケーションの可能性がよくわかるプログラムとしてとっても秀逸ですね(^^)
管理人様の発見されたパターンがまた秀逸です(^^)
オーバークロックと併用すればノーマルからは100倍くらいの速度差になるので、ノーマルクロックで普通に作成したアドインなら勝てるレベルになりますね(^^)


>とても素晴らしい開発環境を手に入れて、思いっきり楽しんでいます。
>本当にありがとうございます。

いえいえ、こちらこそ、超強力なサポートにとても感謝しています(^^)


>ひよっとしたら、独自機能追加をお願いしたくなってくるかも知れません。

どぞどぞ、遠慮なくどんどんお願いします(^^)

あ、ライフゲームで小文字変数が使われているのを発見しました。
こっそり拡張していたところですが早速に取り込んでいるのがさすが管理人様です!(^^)


>との速度の違いは、実装上はどうなっていますでしょうか?

ifと⇒では大差ないのですが、⇒では代入文の直後でもOkなので(独自拡張です)
C+1→C:C⇒[処理]

C+1→C⇒[処理]
と記述することが可能です。
判定式で数式評価を飛ばせるのでその分、速いです。

判定式は短いほど速くなるのはCasioBasicと同じです。
C=0という判定よりもCだけの方が速いです。
ですので、
C=0⇒Goto 1
という処理は
C⇒Goto 2:Goto 1
Lbl 2:
とした方が速くなります。
GotoはCasioBasicのようにLblのサーチをしないでLblのあるところに絶対ジャンプするのでGotoの速度はかなり速いです。

それから、C+1とIszの差は単純ループを回してみるとIszの方が10倍くらい速くなります。
これはIsz/Dszは変数限定コマンドなので数式評価する必要がない分、速くなるというところですね。
ちなみにCBasicのIsz/DszではMat配列も使うことができます。(独自拡張です)

ループ構造で一番速いのはFor~Nextでその次にDszでのループとなります。
WhileやDo、Ifでのループは評価式が入るので一桁くらい遅くなります。
とはいえCasioBasicよりは一桁以上速いです。


というところで、上記のバグを修正+お気に入り対応版です。

アドイン版CasioBasic ver.0.50 テスト版 その5(お気に入り対応版)
http://pm.matrix.jp/CB/CBASIC050.zip

fx-5800P準拠のお気に入りモード追加しました。
それに伴い、設定&変数の保存に対応しました。
このバージョンよりメインメモリに設定値が自動保存されます。
次回起動時には以前の設定が自動復帰します。
ファイル表示をオリジナルの表示形式に合わせました。


それから、管理人様のライフゲームにちょいと刺激されまして、
実数が必要ないプログラムでの更なる高速化の可能性というわけで、
整数版CBasicを作成してみました。
整数しか扱えないのですが、1.5~2倍くらい速くなります。

整数版版CasioBasic ver.0.50 テスト版 その5(お気に入り対応版)
http://pm.matrix.jp/CB/CBASICINT050.zip


今回はファイル関係のバージョンアップなのでストレージ&本体ファイルシステムが壊れる可能性もゼロではないでので、
バックアップ併用での運用をお願いします(^^;

Re: アドイン版CasioBasic ver.0.50 テスト版 その5(お気に入り対応版)

sentaro様

大幅な改造、お疲れさまです。

改造版を頂く前のこと(つまり Ver0.42)でのことですが、

LIFE03 Ver 0.30) で、パターン更新を止めるのに [EXIT] キーを押す仕様になっていますが、
頻繁に [EXIT] を押し続けていたら、リスタートしてしまいました。

ただ再現条件が分かりませんので、CBaiscによるものかどうかも分かりません。オリジナルの Casio Basicでは、未経験なので、一応インシデント報告だけしておきます。

で、早速 CBasic と CbasicInt の Ver 0.5 を使わせて頂いています。
既報の現象は、解消しておりました。
ありがとうございます。

そして、今回の目玉のお気に入り機能、バッチリです。これで fx-9860GII が日常使いに一気に近づきました。

Cbasic / CBasicIint のEDIT画面で、カーソルの点滅がしなくなっているので、これは修正を御願いしたいところです。


以下、個々の点について...

1) お気に入りモード
fx-5800P の使い勝手が再現されていると思います。対象ファイルを指定してからお気に入りを On / Off する操作性はとても分かりやすいです。
さらに、fx-5800P では、お気に入り指定は5個までと限定されているのに対して、6個以上指定可能になっているのは、fx-5800Pを超えた改善ですね!

ユーザーというのはわがままなもので、さらに希望が出てしまいました(^^;
5個以上指定できるということは、あとから指定するお気に入りファイルをトップに持ってきたい時、全てのお気に入りを解除してから指定し直しの操作が必要ですよね?

そこで、お気に入りに指定されたファイルを {F3]と[F4] でその順位を上げたり下げたりできないでしょうか?
ここまで改造なさったのなら、あと一息で実現しそうに思うので、我が儘を言わせて頂きます(^^;


2) 変数閲覧機能
EDIT モードでの動作を確認しました。
ところで、今回お陰様で 1バイト行列を使えることになったので ライフゲームを作れました。
ここで、行列の閲覧機能を追加できませんか?
オリジナルの Casio Basic の行列機能のうち、閲覧機能と行列要素の変更機能の実装の要望です。

オリジナルでは、プログラム中 Mat Z◢ あるいはプログラムの最後に Mat Z があると、自動的に行列閲覧機能が現れるので、もしこれの実装もできると、プログラムから利用できて、さらに有り難いです。

如何でしょうか?


3) コメントアウト - While ループ中の区切り文字の処理
修正を確認しました。

Do ループでは問題ないです。

ところで、If~IfEnd 内の区切り文字処理についても、見直し頂けませんか?
どうも似たような問題があるようです。

例えば、

ClrGraph
If C:Then
Text 1,3,"Test: OK"
0→C
Else
Text 1,3,"Test: NG"
1→C
IfEnd

は、起動するたびに、Test: OK と Test: NG を交互に表示します。

ここで、以下のようにコメントアウトすると、

ClrGraph
'If C:Then
'Text 1,3,"Test: OK"
'0→C
'Else
Text 1,3,"Test: NG"
1→C
'IfEnd

Syntax ERROR
ptr:0x8(8)

のエラーメッセージが現れます。


4) サンプルプログラムとしてのライフゲーム

> あの127x63配列はこのライフゲームのためだったのですね(^^)

はい、基本ロジックが分かりやすいのと、これまでライフゲームを作ったことが無かったので、作ってみようと思ったわけです。

個人的に一番やってみたかったのは、ニューラルネットワークスのシミュレーションなんです。以前ハマったことのあるテーマなんですけど、これだとサンプルプログラムとしては全くウケない....ということで、ライフゲームなんです。


カシオ電卓でグラフ描画ではなくて、グラフィックスプログラミングを行う限界の代表例として、ライフゲームのような全画面描画を高速に行うものだと思っていました。なので、Casio basic でグラフィックスプログラミングをあれこれ試すのには懐疑的ではあるんですね。

でも、詳細を知らずに否定するのは私の流儀に合わないので、Casio Basicグラフィックスを探索しているというわけです。
このあたりの考え方は、以下で白状しています。

http://egadget.blog.fc2.com/blog-entry-448.html

言い換えれば、Cbasic の素晴らしさを示す一例として、ライフゲームなんですね。


> 本体CasioBasicではさすがに速度的に諦めてしまうプログラムだと思われますけど、実用的な速度でここまでスムーズに動くのはちょっとびっくりしました。
> 10倍以上という速度によるアプリケーションの可能性がよくわかるプログラムとしてとっても秀逸ですね(^^)

試しに作ってみて、やっぱり CBasic って凄いや! と感動しています(^_^)/

改めて、ライフゲームについてネットで色々と調べてみたのですが、これは本当にハマリますね!


> 管理人様の発見されたパターンがまた秀逸です(^^)

右脳タイプの脳みそをしているせいでしょうか? こういうのを見つけてしまうんです。なんとなくパターンがある感じですね。


> オーバークロックと併用すればノーマルからは100倍くらいの速度差になるので、ノーマルクロックで普通に作成したアドインなら勝てるレベルになりますね(^^)

Cで書くより遙かに楽な Casio Basic でここまで高速動作できれば、プログラミングの敷居が劇的に下がるのではいかと思います。


> いえいえ、こちらこそ、超強力なサポートにとても感謝しています(^^)

CBasic インタープリタ動作のオーバーヘッドが比較的小さい、つまりは CBasic の特徴に、Ftune2 の効果の合わせ技ですね。

sentaro ワールド全開!!

と言わせて頂きます(^_^)/


5) 小文字変数

> あ、ライフゲームで小文字変数が使われているのを発見しました。
> こっそり拡張していたところですが早速に取り込んでいるのがさすが管理人様です!(^^)

ナハハ、小文字変数は便利ですね。
変数一覧を使っていて、小文字があるのを見つけたので、使ってみたのです。

LIFE3 (Ver 0.3) では、ドットのマッピングエリアを最初は画面中央の点からスタートして、初期パターンの描画や世代更新を行う時に、必要に応じてエリアを拡大しています。現在のエリアを4つの変数で規定するのですが、更新エリアを同じ変数の小文字が使えるので、ソースの可読性向上に大いに寄与してくれています。


6) 機能追加

実は、エリア縮小のアルゴリズムを検討していますが、今は行列計算で対応できないかと...
なので、行列計算に関する機能追加を御願いする可能性があります...まぁ計算量の少ないアルゴリズムがあれば、話は変わりますけど...

ライフゲームに限定せず、グラフィックスプログラミング全体として考えて、価値がありそうなものに限定するつもりではあります。


7) ⇒直前の変数の評価機能

これは、秀逸ですね。

> C⇒Goto 2:Goto 1
> Lbl 2:

これをうまく使えば、10倍遅いと言われた If を使わずに高速化できそうですね。

さらに、switch / case を Lbl / Goto を使って高速に実装できそうです。
具体的には、以下に書いているロジックが、高速化に大きく活きそうです。

http://egadget.blog.fc2.com/blog-entry-76.html

これには、

> GotoはCasioBasicのようにLblのサーチをしないでLblのあるところに絶対ジャンプするのでGotoの速度はかなり速いです。

まさに、CBasic の 高速 Goto に依拠します。


8) Isz / Dsz の高速性

> それから、C+1とIszの差は単純ループを回してみるとIszの方が10倍くらい速くなります。
> これはIsz/Dszは変数限定コマンドなので数式評価する必要がない分、速くなるというところですね。

オリジナルの Casio Basic では、Isz / Dsz の高速化は2倍程度なので、CBasic では遙かに速くなっていますね。


> ちなみにCBasicのIsz/DszではMat配列も使うことができます。(独自拡張です)

これこれ、まさに欲しい機能でした。
つかってみる前で、さらにソースを追いかけずに伺うのは恐縮ですが、Dsz /Isz でジャンプする条件は、Matの場合は、行列の全要素が 0 の時なのでしょうか?


9) Lbl / Goto ループ

> ループ構造で一番速いのはFor~Nextでその次にDszでのループとなります。
> WhileやDo、Ifでのループは評価式が入るので一桁くらい遅くなります。
> とはいえCasioBasicよりは一桁以上速いです。

Lbl / Goto ループが最速ってことですね。

いずれにせよ、Goto が速いというのは、エラー処理や 関数代わりに Goto / Lbl を活用できそうですね。


10) CBasicInt

> それから、管理人様のライフゲームにちょいと刺激されまして、
> 実数が必要ないプログラムでの更なる高速化の可能性というわけで、
> 整数版CBasicを作成してみました。
> 整数しか扱えないのですが、1.5~2倍くらい速くなります。

ライフゲームが目に見えて高速化しました。素晴らしいです。

ところで、ソースの冒頭に、例えば

'#CBasic

が有れば、CBaiscInt で実行させる時に、実行する前にエラーメッセージを出すという機能追加は、如何でしょうか?

とうのも、将来的に CBasicInt の機能を、ソースレベルのオプションスイッチで判別切り替えできると良いと思うからです。
例えば、ソース冒頭に、例えば;

"#CbasicInt

があれば、CBasicInt で動作するという感じです。
アドインファイルサイズが倍になっても、オーバーヘッド増加を最小にできれば、むしろ価値がありそうです。
どう思われますか?

実は、応援団長としては、将来的に CBasic で外部ライブラリ追加ができれば、CBasic ワールドが大きく広がることになり、その伏線にならないでしょうか?

今から、コードの作り込みで多少の考慮があれば、と思ったものですから...

いかがお考えでしょうか?



> 今回はファイル関係のバージョンアップなのでストレージ&本体ファイルシステムが壊れる可能性もゼロではないでので、
> バックアップ併用での運用をお願いします(^^;

今のところ、問題はなさそうです。


言いたい放題でスミマセンm(_ _)m

アドイン版CasioBasic ver.0.50 テスト版 その5修正版

管理人様、こんにちは!

早速のテストありがとうございます(^^)

>LIFE03 Ver 0.30) で、パターン更新を止めるのに [EXIT] キーを押す仕様になっていますが、
>頻繁に [EXIT] を押し続けていたら、リスタートしてしまいました。

もしオーバークロック状態でしたらその影響があるかもしれません。


>そして、今回の目玉のお気に入り機能、バッチリです。これで fx-9860GII が日常使いに一気に近づきました。

日常使い…なかなかにいい響きですね(^^)
アドインでここまで電卓の使い勝手を変えられるとは思わなかったので嬉しい誤算です(^^)


>Cbasic / CBasicIint のEDIT画面で、カーソルの点滅がしなくなっているので、これは修正を御願いしたいところです。

んと、これはどのタイミングで点滅がしなくなっているでしょうか?


>5個以上指定できるということは、あとから指定するお気に入りファイルをトップに持ってきたい時、全てのお気に入りを解除してから指定し直しの操作が必要ですよね?

あまり多くても逆に面倒になるからということで一応現状では7個までの設定ですが、

>そこで、お気に入りに指定されたファイルを {F3]と[F4] でその順位を上げたり下げたりできないでしょうか?
>ここまで改造なさったのなら、あと一息で実現しそうに思うので、我が儘を言わせて頂きます(^^;

順位が操作できると確かに便利ですね。
次回バージョンアップで実装してみます(^^)


>ここで、行列の閲覧機能を追加できませんか?
>オリジナルの Casio Basic の行列機能のうち、閲覧機能と行列要素の変更機能の実装の要望です。

これはいずれ実装しないとと思いつつ後回しになってました。
これも次回バージョンアップでできるだけ実装してみます(^^)


>ところで、If~IfEnd 内の区切り文字処理についても、見直し頂けませんか?
>どうも似たような問題があるようです。

コメントアウトがCasioBasicと同じように「:」を区切りと認識するようになっていました(^^;
これは即修正しました。


>つかってみる前で、さらにソースを追いかけずに伺うのは恐縮ですが、Dsz /Isz でジャンプする条件は、Matの場合は、行列の全要素が 0 の時なのでしょうか?

全要素ではなくて、1要素を通常の変数と同様に扱いますが、バグ見つけました(^^;
バイト、ワード配列対応が出来てませんでした。
ので、バイト、ワード配列で使うと現状ではまずいってことで修正版です(^^;


Dsz /Iszのバイト、ワード配列Mat配列は致命的なバグなのでファイルは0.50を差し替えです(^^;

アドイン版CasioBasic ver.0.50 テスト版 その5(修正版)
http://pm.matrix.jp/CB/CBASIC050.zip

整数版版CasioBasic ver.0.50 テスト版 その5(修正版)
http://pm.matrix.jp/CB/CBASICINT050.zip


今回ライフゲーム用の実験ということで、
CellSum(
コマンドを実装してみました。
本来のコマンドとは全然違う実装なのですが(^^;
CellSum(Mat B[X,Y])→C
という風に使うと、Mat B[X,Y]周辺8ドットの合計値を計算します。

コマンド入力はDim、Matのところに追加してみました。

管理人様ご提案の行列計算コマンドも仕様が固まったら試しに実装してみたいと思います(^^)



>ところで、ソースの冒頭に、例えば
>'#CBasic
>が有れば、CBaiscInt で実行させる時に、実行する前にエラーメッセージを出すという機能追加は、如何でしょうか?

これは整数版のプログラムは整数版インタプリタ、実数版は実数版インタプリタで実行させるということですね。
もしくは1プログラムの中で整数実行と実数実行を切り替えるということも?
プログラムごとに完全に実行形式を分けるのなら割と簡単に実装できそうですが混在だと実数整数変換でオーバーヘッドもそれなりに出そうなので
とりあえずは独立した合体形式でやってみます。

整数版はインタプリタではせいぜい2倍程度のアップ率ですけど、コンパイラになると実数版から一桁以上の高速化が期待できるのでなんとか上手く使えるように実装したいところですね。


>言いたい放題でスミマセンm(_ _)m

あ、いえいえ、要望なくしては進化できないですから、どんなことでも大歓迎です(^^)

Re: アドイン版CasioBasic ver.0.50 テスト版 その5修正版

sentaro様

今日は、出かけていたので、遅くなりました。


> >LIFE03 Ver 0.30) で、パターン更新を止めるのに [EXIT] キーを押す仕様になっていますが、
> >頻繁に [EXIT] を押し続けていたら、リスタートしてしまいました。
>
> もしオーバークロック状態でしたらその影響があるかもしれません。

はい、私の電卓での最高速 287.54MHz で触っていた時の現象だと、あとで気付きました。なので、オーバークロックでありがちなものでした。

> >Cbasic / CBasicIint のEDIT画面で、カーソルの点滅がしなくなっているので、これは修正を御願いしたいところです。
>
> んと、これはどのタイミングで点滅がしなくなっているでしょうか?

これも、最速のチョット不安定な状態での問題で、1段低い常用最高速の 280.17MHz では元に戻りました。
カーソルの点滅の問題もオーバークロックでよくある問題ですよね。
お騒がせしました。


> >そして、今回の目玉のお気に入り機能、バッチリです。これで fx-9860GII が日常使いに一気に近づきました。
>
> 日常使い…なかなかにいい響きですね(^^)
> アドインでここまで電卓の使い勝手を変えられるとは思わなかったので嬉しい誤算です(^^)

fx-5800Pを使い込んだ人なら、絶対に喜んでくれる仕様だと確信してます。


> >5個以上指定できるということは、あとから指定するお気に入りファイルをトップに持ってきたい時、全てのお気に入りを解除してから指定し直しの操作が必要ですよね?
>
> あまり多くても逆に面倒になるからということで一応現状では7個までの設定ですが、

あ”、そうでしたか....(..;)""""> ポリポリ


> >そこで、お気に入りに指定されたファイルを {F3]と[F4] でその順位を上げたり下げたりできないでしょうか?
> >ここまで改造なさったのなら、あと一息で実現しそうに思うので、我が儘を言わせて頂きます(^^;
>
> 順位が操作できると確かに便利ですね。
> 次回バージョンアップで実装してみます(^^)

よろしく御願い致します。


> >ここで、行列の閲覧機能を追加できませんか?
> >オリジナルの Casio Basic の行列機能のうち、閲覧機能と行列要素の変更機能の実装の要望です。
>
> これはいずれ実装しないとと思いつつ後回しになってました。
> これも次回バージョンアップでできるだけ実装してみます(^^)

これができると、ライフゲームでパターンを作るのにとても楽チンになります。
ライフゲーム以外でも、ドット-パターンの作成や編集に役立ちます。
よろしく御願い致します。


> >ところで、If~IfEnd 内の区切り文字処理についても、見直し頂けませんか?
> >どうも似たような問題があるようです。
>
> コメントアウトがCasioBasicと同じように「:」を区切りと認識するようになっていました(^^;
> これは即修正しました。

ありがとうございます。

If と言えば、

K⇒Goto K:Goto Z

での高速化、顕著ですね。ライフゲームでちょこっと利用してみています。


> 全要素ではなくて、1要素を通常の変数と同様に扱いますが、バグ見つけました(^^;
> バイト、ワード配列対応が出来てませんでした。
> ので、バイト、ワード配列で使うと現状ではまずいってことで修正版です(^^;

了解です。


> 今回ライフゲーム用の実験ということで、
> CellSum(
> コマンドを実装してみました。
> 本来のコマンドとは全然違う実装なのですが(^^;
> CellSum(Mat B[X,Y])→C
> という風に使うと、Mat B[X,Y]周辺8ドットの合計値を計算します。

わ、カスタムコマンドですね。これって、LIFE03 で書いてあるコードとロジックは全く同じですか?
例えは、

{1,127}→Dim MatB
で、
X=127 の時
CellSum(Mat B[X,Y])→C
は、128要素目をアクセスするのでエラーになるのですね?


> 管理人様ご提案の行列計算コマンドも仕様が固まったら試しに実装してみたいと思います(^^)

はい、チョット先になると思いますが、よろしく御願い致します。
行列計算を忘れかけていて、こんなのできたっけ...ってな状態なので、大学の時の教科書を引っ張り出しております(^^;



> >ところで、ソースの冒頭に、例えば
> >'#CBasic
> >が有れば、CBaiscInt で実行させる時に、実行する前にエラーメッセージを出すという機能追加は、如何でしょうか?
>
> これは整数版のプログラムは整数版インタプリタ、実数版は実数版インタプリタで実行させるということですね。

プログラムごとの切り替えで、先ずはとても役立つと思います。

> とりあえずは独立した合体形式でやってみます。

はい、それで御願い致します。


> 整数版はインタプリタではせいぜい2倍程度のアップ率ですけど、コンパイラになると実数版から一桁以上の高速化が期待できるのでなんとか上手く使えるように実装したいところですね。

これ、楽しみです(^_^)/


Ftune2 について

sentaro様

Cbasic のエントリーをいずれ作ろうと思っており、その際ライフゲームをサンプルプログラムとして取り上げる際には Ftune2 に触れる必要があります。

そこで、改めて Ftune2 のエントリーをアップしました。
ここでは、デフォルトの [F5]キーで設定できる235.93MHz を先ずは推奨するようにしています。
質問には sentaro様から回答が貰えるかもしれない、とも書いてます。
記述に何か問題があれば、ご指摘頂けませんか?

アドイン版CasioBasic ver.0.60 ちょっと怪しいテスト版 その6(実数+整数版)

管理人様、こんにちは!

実数+整数の合体版がやっとこ出来ましたのでアップです。
重複する機能を削れた分、ファイルサイズは1.5倍以下に収まりました。
ただ、初物なので何かしらバグがまだ残ってそうな感じがするので厳しいテストをよろしくお願いします(^^)

アドイン版CasioBasic ver.0.60 ちょっと怪しいテスト版 その6(実数+整数版)
http://pm.matrix.jp/CB/CBASIC060.zip

実数版との切り替えはSetupから設定するか、
プログラムのコメントで
'#CBINT
または
'#CBint
と記述するとそれ以降のプログラムは整数モードで動きます。
通常の実数モードに戻すには
'#CBASIC
または
'#CBasic
と記述します。
通常変数はそれぞれのモードで独立しています。
ただし、Mat配列は共通で、
実数版では基本が8バイトの倍精度配列、
整数版では基本が4バイトのロング配列で、
共通事項として、
B,Cが1バイト配列限定
W,Dが2バイト配列限定
L,Iが4バイト配列限定
E,Fは8バイト倍精度配列限定となってます。
これにより、配列を使ってそれぞれの変数同士の値の受け渡しが可能になります。
どちらのモードでも変数名は同じ名前なのでちょっとややこしいのですが苦肉の策です(^^;

それから、お気に入りモードの上下移動、[SHIFT]+[F4]or[F5}
およびMat配列の表示&編集モードを追加しました。



>わ、カスタムコマンドですね。これって、LIFE03 で書いてあるコードとロジックは全く同じですか?

はい、全く同じです。

>は、128要素目をアクセスするのでエラーになるのですね?

はい、そういうことになります。


>行列計算を忘れかけていて、こんなのできたっけ...ってな状態なので、大学の時の教科書を引っ張り出しております(^^;


ただただ配列としか実装してないので…私もほぼ忘れています(^^;
CBASIC独自の便利なコマンドが出来ると面白いですね。


>Ftune2 について

思いっきり恐縮しまくりですけど、管理人様の手厚いサポートにいつも感謝です。
記述に特に何も問題は無いと思いますが、235.93MHz推奨はよいですね。
あらゆる場面で安定的に動作する(であろう)設定と考えています(^^)

Ver 0.50 のドキっとするエラー

sentaro様

Ver 0.60 まだ使っていませんが、楽しみです。

その前に、Ver 0.50 でのバグレポートです。
実は、Text コマンドで、表示文字列が長すぎると、以下 System ERROR が再現性良く発生することが分かりました。
電卓をリブートするか初期化するかの選択を迫られます。

System ERROR
REBOOT :[EXIT]
INITIALIZE:[EXE]
TLB ERROR
TARGET=20004AFA
PC =00000000

[EXIT]でリブ-ト(リスタート)すれば大丈夫で、他への影響は無さそうです。
ちょっとドキッとしました。

ノーマルクロックでもオーバークロックでも区別無く発生します。

まだ自信はありませんが、おそらく以下がエラー発生の境目だろうと推測しています。

正常に動作するプログラム;

ClrGraph
PxlOn 1,1
Text 1,1,"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdef" //アルファベット32文字
Text 7,1,"12345678901234567890123456789012" //数字32文字
Text 13,1,"WMWMWMWMWMWMWMWMWMWMWMWMWMWMWMWM" //WとMで合わせて32文字

上の3種類の文字列は、それぞれ1文字以上追加すると、System ERROR になるようです。
これら文字列は、1画面の横幅に収まらず、右端が切れて見えません。画面で見えるかどうか(グラフィックスの横幅)はエラーとは無関係のようです。

幅の異なる文字であっても、32文字を超えると(1文字でも追加すると) System ERROR になるようです。つまり文字数と関係ありそうです。


オリジナルのCasio Basicではエラーにならないので、CBasic とシステムとの間で何か起きているのではないでしょうか?

取り急ぎ、報告です。

Re: アドイン版CasioBasic ver.0.60 ちょっと怪しいテスト版 その6(実数+整数版)

sentaro様

CBasic Ver 0.60 を頂きました。

1) お気に入りの順序変更、やはり良いです。

さらに、

2) 行列参照&編集機能の追加もとてもありがたいです。

但し、これで [SHIFT] でのファンクションメニューが満杯になりましたね。

今後、リストの参照&編集を追加する時困ってしまいそうですね。


3) 実数モード/整数モード切替機能

これを試すために、LIFE04 (Ver0.4) と LIFE05 (Ver0.5) を作って比較してみました。

※ LIFE04(Ver0.4):
http://egadget2.web.fc2.com/archives/LIFE04.html
これは、CellSum()を使わないバージョン

※ LIFE05 (Ver0.5):
http://egadget2.web.fc2.com/archives/LIFE05.html
これは、CellSum()を使うバージョン

Ver 0.4/0.5 いずれも、ステップモードを追加していて、Ver0.3からキー操作を少し変更しています。

※ パターン描画後: パターンの世代更新を始めるのに、[EXIT] だったのを [DEL] に変更。

※ パターン世代更新時:
 ・[(-)] でストップし [(-)]を押すたびに1世代ごとステップ動作
 ・[EXE] で連続動作
 ・[EXIT] で動作完全停止

※ 完全停止後:
 ・[EXE] で、最初のパターン描画モードに戻る。

不要かもしれませんが、起動時にキー操作の説明を入れました(英語なので却って分かりにくいかも...)

将来は、キー操作の説明はサブルーチン化します。


※比較実験:
1. LIFE04 (CellSumなし)で、'#CBINT の有り無し
2. LIFE05 (CellSumアリ)で、'#CBINT の有り無し

速い順で、

・1位: LIFE05: '#CBint + CellSum()
・2位: LIFE05: '#CBintなし + CellSum()

・3位: LIFE04: '#CBint (CellSumなし)
・4位: LIFE04: '#CBintなし (CellSumなし)

で、CellSum()の高速化の効果はとても顕著です。

ここでは、下で紹介した全画面更新するパターンを使いました。


4) 時間計測機能の要望
プログラム終了時にテキスト画面に Run Time の表示が出てくることに気がつきました。
と、いうことは、時間計測機能は内蔵されているようですね。

せっかくなので、プログラムから時間計測を使えるようになりませんか?


5) tune2 について

> 思いっきり恐縮しまくりですけど、管理人様の手厚いサポートにいつも感謝です。

良いと思ったもので、ほぼ1年間じっくりと使わせて貰って問題無しなので、そろそろ安全と言っても良い頃合いかな?と思ったのです。

> 記述に特に何も問題は無いと思いますが、235.93MHz推奨はよいですね。
> あらゆる場面で安定的に動作する(であろう)設定と考えています(^^)

ですよね!
これが、売りの1つですから...


6) セル計算に全画面使うようになるパターン

全画面更新するような、ちょうど良いパターンが見つかったので、これで計算速度の評価ができます。


      (63, 22)
       ↓
□□□□□□□■■■□□□□□□□
□□□□□□□■□■□□□□□□□
□□□□□□□■□■□□□□□□□
□□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□□□□
□□□□□□□□ □□□□□□□□
□□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□□□□
■■■□□□□□□□□□□□■■■
■□■□□□□□□□□□□□■□■
■□■□□□□□□□□□□□■□■
↑             ↑
(56, 42)         (70, 42)

中央の空白が画面の中心です。
LIFE05で表示される座標値(X, Y)を示しています。

グラダー2機が、それぞれ左上の角と右上の隅に到達します。
固定化(寿命)直前にさらに2機が左下と右下へ放出されます。
それ以外は画面の中に収まります。

後半で、X=2~126、Y=2~62 (つまり全画面)を計算するようになります。
280MHz動作ですが、この状態で約1秒で1回更新になます。

まあ実用的な速度かと思います。



CBasic ver.0.60: 数値型設定と変数

sentaro様

数値型設定と変数について、先ほどの混乱したコメントを削除し、書き直します。

先ず、実験してみました。

実験には、LIFE06 (Ver0.6) を使いました。
http://egadget2.web.fc2.com/archives/LIFE06.html

画面キャプチャできるように変更したのと、バージョンが CBasic と同じになって分かりやすいので、バージョンアップしました。このプログラムは、プログラム途中、パターンの計算と更新を行う直前に "#CBint の宣言を入れています。

さて、実験には前のコメントで紹介した全画面更新するパターン(門型が3つのパターン)を使い、以下の条件2つの異なる条件で、340世代になるまでの時間を測定しました。

なお、プログラム起動前に、全ての変数を0にしておきました。

<<測定結果>>
1.Setup で INT mode に設定して測定
 ・測定時間:3分18秒
 ・変数は、大文字・小文字とも INT型変数のみが使われている
 ・プログラム実行前にエディタを開くと INT mode になっていた
 ・プログラム終了後にエディタを開くと INT mode になっていた

2.Setup で Double に設定して測定
 ・測定時間:4分27秒
 ・変数は、大文字・小文字とも Double型変数のみが使われている
 ・プログラム実行前にエディタを開くと Double になっていた
 ・プログラム終了後にエディタを開くと INT mode になっていた

この処理速度の違いは、実数と整数の変数アクセスの時間差のようですね。
プログラム起動時の実行モードによって、実数変数か整数変数かを選択するようになっていて、これは変わらない。
一方、プログラム中の宣言によって、実行モードが切り替わる。

上のケースだと、Doulbeモードで起動して、途中から INTモードに切り替わっても、変数は実数のままなので、アクセス速度の差が処理時間の差に直接反映した....

プッログラム実行中に使われる変数は、実数型か整数型かどちらかが選択され、混在して使われることは無い。プログラム起動時の実行モードで変数の型が決まる。

...というように理解しましたが、正しいでしょうか?

=====

そこで提案ですが、

A) Setup の設定と同じことを、プログラム冒頭の宣言で出来ないか?
追記:変数を最初に使う前に宣言すれば、宣言した型の変数が使われることを確認しました。従って、この要望は取り下げます。

B) 実数大文字、実数小文字、整数大文字、整数小文字を一発でクリア(=0)できないか?

C) 実数大文字、実数小文字、整数大文字、整数小文字をそれぞれ4つのセットごとに、任意の数値で一括初期化できないか?

D) 指定した行列の全要素を、一発でクリア(=0)できないか?

E) 指定した行列の全要素を、任意の数値で一括初期化できないか?

以上、ご検討頂ければ有りがたいです。

Ver 0.60 でもドキっとするエラー

sentaro様

Ver 0.50 のドキッとするエラーは、Ver 0.60 でも同じ再現性で発生します。

....って、当たり前ですけど、一応念のため(^^;

アドイン版CasioBasic ver.0.61 テスト版 その6.1(バグ潰し版)

管理人様、こんにちは!

>実は、Text コマンドで、表示文字列が長すぎると、以下 System ERROR が再現性良く発生することが分かりました。

バッファーオーバーの典型的症状ですね(^^;

確保バッファサイズが32文字だったのでそれを越えると異常動作になってましたので
Locateで32文字まで、Textで64文字までということで修正しました、
文字数オーバーでエラーになります。


>但し、これで [SHIFT] でのファンクションメニューが満杯になりましたね。
>今後、リストの参照&編集を追加する時困ってしまいそうですね。

足りない分はなんとかやりくりして、それが出来ない場合はメニューがどんどん深くなりそうですね(^^;


>これを試すために、LIFE04 (Ver0.4) と LIFE05 (Ver0.5) を作って比較してみました。

早速にテストソースに加えました。ありがとうございます!
起動時の説明がアドインっぽくてなかなかよいです(^^)


>4) 時間計測機能の要望

これは最初からなんとか付けたいと思いつつもCasioBasic互換というところで
現状ではプログラム開始から終了までの時間計測で踏みとどまっていたんですけど、
プログラム内部での計測には対応できなかったので
とりあえず、%を1/128s単位で増えていく読み込み専用変数としました。値は常に整数です。
経過時間に変換するには
最初に読み込んでおいて、
%→S
計測後に
(%-S)/128
引き算すれば経過時間が1/128s精度で計測できます。


>全画面更新するような、ちょうど良いパターンが見つかったので、これで計算速度の評価ができます。

インタプリタの速度チューニングにもってこいですね。
早速に使わせていただきます(^^)


管理人様ご提案の変数&Mat初期化での改善点了解しました。
次回バージョンアップで実装してみます。
ってことで、とりあえずバグ潰し版です。

アドイン版CasioBasic ver.0.61 テスト版 その6.1(実数+整数版)
http://pm.matrix.jp/CB/CBASIC061.zip

今回の追加コマンドは、
Mat B→Mat C
のような全配列データの一括コピーが出来るようにしてみました。
(同じサイズの配列同士でないとNGです)

それから、
またまた独自拡張ですが、(^^;
DotP(
このコマンドは
DotP(Mat B, PX, PY)
の様に使うと、
Mat Bの配列データが0以外では点を打ち、0のところは点を消します。
描画は画面上の絶対座標のPX,PYが開始の原点になります。

LIFE06のソースの
== Update Map ==のところを
Mat C→Mat B
DotP(Mat B, 1, 1)
-------------------------
と置き換えることができます。



>上のケースだと、Doulbeモードで起動して、途中から INTモードに切り替わっても、変数は実数のままなので、アクセス速度の差が処理時間の差に直接反映した....

INTモードになると変数はINT変数に切り替わりますので、実数モードで設定していた値は引き継いで使われることがありません。
実数モードで起動して途中でINTモードにすると正常には動作しないはずですが、INTモードで動作させたときに設定された値がそのまま残っているために動作しているものと思われます。

ということなので、処理時間の差は…はて?(^^;
これはちょっと調べてみます。


>プッログラム実行中に使われる変数は、実数型か整数型かどちらかが選択され、混在して使われることは無い。プログラム起動時の実行モードで変数の型が決まる。

実数型のXとYはPLOT系のコマンドで自動的に書き換わるのでINTモードでも書き換わってしまいますが、それ以外の変数はそれぞれもモードで独立しています。
変数はその動作時点でのモードによってどっちが使われるかが決定されるために起動時の実行モードで決まることは無いです。

Re: アドイン版CasioBasic ver.0.61 テスト版 その6.1(バグ潰し版)

sentaro様

> アドイン版CasioBasic ver.0.61 テスト版 その6.1(実数+整数版)
> http://pm.matrix.jp/CB/CBASIC061.zip

ダウンロードした zipファイルが開けないので、ご確認頂けませんか?

再アップしました(^^;

アップする際にファイルが破損していたようです(^^;
失礼いたしました。

>Setup で、Break Stop をoff にすると無限ループの場合は電卓裏のリスタートボタンをポチっとするしかなくなるのでしょうか?

はい、現状ではオフにすると止められない仕様になってます。
これはSH3機がブレークのチェックが若干重くオーバーヘッドがあるので純粋な実行時間の速度比較のために設けてたものです。

>Time Dispも、ちゃんと用意されているのですね!

はい、表示的に完全な互換性を重視していたので拡張機能はオンオフ出来るようにしてありました。


>Execute mode ですが、提案があります。Casio Basic ソースがデフォルトで動作することがポイントだと思うので、デフォルトでDoubleで、何かソースに記述が有るときに、INTモードが使えるのが良いのではありませんか?

整数モードは制限ありの動作モードなのでその仕様がしっくりきますね。
次回バージョンから起動時は実数仕様固定で、起動後にセットアップで切り替えるかプログラム内で切り替えて整数モードとするようにいたします。
このモードの設定保存は無しということでデフォルトでは実数モードということに変更しておきます。

それから昨日の速度の違いですが原因がわかりました。
プログラムの最初の起動モードでずっと実行されていたのが原因です。
つまり実数モードで実行開始すると途中でINTモードに変更しても一部機能だけが整数モードになって、ほぼすべての動作は実数のままでした。
最初から整数モードで実行開始しないと純粋な整数モードにはなってなかったです。
これも次回に修正しておきます。


>これは、始まりだけでなく、終わりも設定できるようになりませんか?

今の仕様では、配列サイズが縦横のサイズを決定しているので、
配列の一部分の転送には対応してなかったです。
ですが、使い勝手を考えると管理人様のおっしゃる仕様が汎用性があってよいですね。
ちょっとパラメータが増えますが、その仕様で実装しなおしてみます。

Re: アドイン版CasioBasic ver.0.61 テスト版 その6.1(バグ潰し版)

sentaro様

前回のコメントを削除して、修正と追記しました。


Ver0.6 を触っていて、いくつか面白いものを見つけました。


1) Setup - Break Stop
Break Stop をoff にすると [AC] で Break できなくなりますが、無限ループが走っている時は、電卓裏のリスタートボタンをポチっとするしかなくなるのでしょうか?
[EXIT][AC]とか、裏ワザでBreakさせるなどないかな?と探しましたが、見つかってません。

何か意図があるなら、教えて頂けませんか?



2) Setup - Time Disp
これも、用意されていたのですね!



3) Setup - Execute mode
Execute mode ですが、提案があります。Casio Basic ソースがデフォルトで動作することがポイントだと思うので、この設定の On Off に関わらず、デフォルトでは Double で動作した方が良いように思うのです。
INT モードは追加機能なので、ソースに '#CBint か '#CBasic が有るときは、それに連動させると言うのは、如何でしょうか?

LIFE06 で '#CBint の記述より下で初めて出てくる変数は INT 型になり、この記述より上で初めて使う変数は Execute mode に従うことを確認しました。



4) LIFE06 (Ver0.60) の差し替え
上記の確認がとれたので、全ての変数を初めて使う前に '#CBint の記述を移動させ、変更した LIFE06 を同じファイル名でアップしなおしました。
http://pm.matrix.jp/CB/CBASIC061.zip

起動時の説明も、情報を増やして、かつ少し見やすくなりました。



5) 評価用・全画面更新のパターン:より少ないドット数のもの
なお、全画面描画のケースですが、3点少ないパターン(合計18点)を紹介します。(座標値の修正も兼ねさせて頂きます)


        (64, 22)
        ↓
□□□□□□□□■□□□□□□□□
□□□□□□□■■■□□□□□□□
□□□□□□□■□■□□□□□□□
□□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□□□□
□□□□□□□□ □□□□□□□□
□□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□□□□
□■□□□□□□□□□□□□□■□
■■■□□□□□□□□□□□■■■
■□■□□□□□□□□□□□■□■
↑             ↑
(56, 42)         (70, 42)

白抜けになっているのが、画面中央 (64, 32)です。


 ■
■■■
■ ■

この点6個のパターン1つだけでも、174世代で安定する結構面白いものです。
これの1世代あとが、

■■■
■ ■
■ ■

だったりします。


 ■
■■■
■  ■

これの1世代後も

■■■
■ ■
■ ■

になるんですね。



6) 独自コマンド: DoP(

> DotP(
> このコマンドは
> DotP(Mat B, PX, PY)
> の様に使うと、
> Mat Bの配列データが0以外では点を打ち、0のところは点を消します。
> 描画は画面上の絶対座標のPX,PYが開始の原点になります。

これは、始まりだけでなく、終わりも設定できるようになりませんか?

LIFE03~LIFE06 では、MAT B を MAT C へ要素ごとにコピーする時、コピーする要素数を可変にし、徐々に大きくなるようにして速度を稼いでいます。なので、始まりと終わりの両方を指定できると、このアルゴリズムが活かせるかもしれない....と思います。

また、汎用性を考えても、始まりと終わりを指定できたほうが良いかも知れません。 如何でしょうか?


7) 行列丸ごとコピー
Mat B→MatC の追加は助かります。
ありがとうございます。



8) Text と Locate のバッファーオーバーフロー対策
> Locateで32文字まで、Textで64文字までということで修正しました、
> 文字数オーバーでエラーになります。
ありがとうございます。System ERROR でなくて、一歩手前でのエラーメッセージ対応で安心できます。



9) 時間計測機能
> とりあえず、%を1/128s単位で増えていく読み込み専用変数としました。値は常に整数です。
> 経過時間に変換するには
> 最初に読み込んでおいて、
> %→S
> 計測後に
> (%-S)/128
> 引き算すれば経過時間が1/128s精度で計測できます。

これで、高速化の定量評価ができて、うれしいです(^_^)/


10) 変数&Mat初期化での改善
> 次回バージョンアップで実装してみます。

楽しみにしています。

アドイン版CasioBasic ver.0.62 テスト版 その6.2(実数+整数混在版)

管理人様、こんにちは!

実数と整数の切り替えがちょっと中途半端な仕様になってしまってたので
起動時は実数モード固定で、整数モードへの変更はセットアップかプログラム内での指定で変更します。
変数アクセスでは、昔のBasic風に#と%のサフィックスでそれぞれ倍精度と整数変数指定になるようにしました。
整数モードでA#とすると実数変数になります。

それから変数の初期化をいろいろと追加してみました。

整数変数は%、倍精度変数は#を付けると精度指定でアクセスできます。
A%→A#
整数変数のAより倍精度変数Aにコピーします。
倍精度値を整数値に変換する場合、範囲に収まらない場合は0になります。

整数の初期化で整数、倍精度、個別に指定できるようになりました。
0→A~Zの形式に加えて、
0→A~Z#
倍精度変数を初期化します。
0→A~Z%
整数変数を初期化します。

Mat配列の全要素の初期化に対応しました。
0→Mat A
Mat A配列の全要素を0で初期化します。
左辺は任意の値で初期化できます。


アドイン版CasioBasic ver.0.62 テスト版 その6.2(実数+整数混在版)
http://pm.matrix.jp/CB/CBASIC062.zip

今回もかなり変更点多いのでバグ出しよろしくお願いします(^^)



>起動時の説明も、情報を増やして、かつ少し見やすくなりました。

さらにすっきりかっこよくなりましたね(^^)

>この点6個のパターン1つだけでも、174世代で安定する結構面白いものです。

途中の変化が顔みたいなのがいくつも現れて面白すぎます!
これぞライフゲームの真骨頂っていう感じですね(^^)


>また、汎用性を考えても、始まりと終わりを指定できたほうが良いかも知れません。 如何でしょうか?

汎用のビットマップ描画用に使えるように変更してみました。

DotP( Mat A, x,y, px1,py1, px2,py2)
Mat A配列の(x,y)の要素を始点として、画面上の(px1,py1)-(px2,py2)の範囲に点を打ちます。

管理人様のライフゲームのソースでは、
DotP(Mat B,L,T,L,T,R,B)
という感じになります。

絶対座標ピクセル系のコマンドですが、現状ではX,Yの順になっています(^^;

差し替えです(^^;

少数がきちんと入力できないという、しょうもないバグがあったので差し替えました(^^;

Re: アドイン版CasioBasic ver.0.62 テスト版 その6.2(実数+整数混在版)

sentaro様

整数と実数の使い方が、いまいちよく分かっていません。

先ずは、バグ発見。

Isz G#

はエラーになります。Dsz や ⇒、他の条件判定もご確認願います。

'#CBint
0→G

と初期化した場合は、G は G% と同じですね?

同様に、

'#CBasic
0→G

と初期化した場合は、G は G# と同じですね?

その後、プログラム中で '#CBint や '#CBasic を指定すると、

'#CBint の後ろは、G は G% を指し、
'#CBasic の後ろは、G は G# を指すので良いですか?

もっと言うと、


'#CBasic
100→G


'#CBint
200→G


とすれば、

G% には 100 が、G# には 200 が入っているので良いですか?

言い換えれば、

'#CBint は、変数セットを 整数セットに切り替え、
'#CBasic は、変数セットを 実数セットに切り替える。

だから、

'#CBint の後ろで 実数を使いたい場合は G# を使い、
'#CBasic の後ろで、整数を使いたい場合は、G% を使う

...こんな感じで合ってますか?


ところで、'#CBasic は、より明示的に '#CBdbl の方が分かりやすく有りませんか?


=====

DoP( 関数を使うと、全画面ビットマップ描画が倍くらい速くなりますね。素晴らしいです!



実行モード、変数型、Locate 異常

sentaro様

[2015/11/12 追記・修正しました]

差し替え版 Ver 0.62 での内容です:

変数の型の扱いで、混乱している理由として、以下のサンプルプログラムを見て下さい。

While Getkey
WhileEnd
0→D

'#CBint
0→I

Lbl 0
Isz I
I→D
Locate 1,1,I
Getkey=0⇒Goto 0

'#CBasic
Locate 1,2,D%
Locate 1,3,D%÷128


まず、I→D が通ることはOKですか?
整数→実数なので、OKなのかも知れません。

最後の
Locate 1,3,D÷128
は、整数が表示され、小数になりません。

この1行を以下のように変えてみます。

D÷128→D#
Locate 1,3,D#

これでも、整数しか表示されません。

[↓以下、追記・修正↓]
式の評価が整数モードで実行されているので、整数になってしまうことに気付きました。

そこで、上のプログラムに '#CBasic を以下のように追加挿入し、変数型宣言を明確にしてみると、小数計算と表示ができました。

While Getkey
WhileEnd
0→D

'#CBint
0→I

Lbl 0
Isz I
I→D
Locate 1,1,I
Getkey=0⇒Goto 0

Locate 1,2,D
Locate 1,3,D÷128

やっと分かったような気がしますが、別の問題で悩んでいます。

以下のプログラムを実行すると、Locate が正しく動作しないようです。

'#CBint
500→G
2980→S

'#CBasic
Locate 1,1,"G"
Locate 12,1,G%
Locate 1,2,"Time(s)"
S%÷128→S
Locate 12,2,S
Locate 1,3,"Time(m:s)"
Int (S÷60)→M
S-60M→S
Locate 12,3,M
Locate 14,3,":"
Locate 15,3,S

下から3行目の Locate 12,3,M で、位置指定に失敗します。

文字列解析で何か起きている気がします。

文字列解析で言えば、LIFE06 で操作方法の表示の画面で、キャラクタ表示に異常が出たことがあって、直接の原因が分からないのですが、その表示の記述以外の部分を一部修正したら、表示の異常が解消したことがあります。

また、Cbasic Ver 0.60 ではLocate で表示できなかった特殊キャラクタが、Ver 0.62 では正しく表示されており、このあたり黙って修正なさっているのかも知れないとは思っていますが、それだけに変数型のサフィックス % / # の処理が厄介そうですね。

今思えば、上記のキャラクタ表示や Locate の問題は、文字列解析と関係ありそうに思いますが、、如何でしょう?

ビットマップ関連の行列関数の要望

sentaro様


DotP()の出力はLCDですが、出力を別行列にしたもの、行列へのコピー関数を所望致します。

要するに、今あるビットマップ情報を格納した行列から、特定の長方形領域(127 x 63 以下)のデータを別の行列に抜き出すという機能です。
DotT とかDotM とかビットマップ関数の仲間と分かるような名前で、いかがてしょうか?
引数はDotP と同じ!


それから、DotG() とでも言いましょうか、現在のLCDのビットマップ情報を行列に変換する関数も、とても役立ちそうです。

ご検討頂けませんか?


ビットマップと行列あたりの関数やコマンドは、CBasicの高速性をさらにアピールできるので、ポイント高い実装になるのではないかと思っております。

実行モード、変数型、Locate 異常(2)

sentaro様

Locate の異常ですが、私の手元ではチョット不可解なことになりました。


> '#CBint
> 500→G
> 2980→S
>
> '#CBasic
> Locate 1,1,"G"
> Locate 12,1,G%
> Locate 1,2,"Time(s)"
> S%÷128→S
> Locate 12,2,S
> Locate 1,3,"Time(m:s)"
> Int (S÷60)→M
> S-60M→S
> Locate 12,3,M
> Locate 14,3,":"
> Locate 15,3,S
>
> 下から3行目の Locate 12,3,M で、位置指定に失敗します。

先ほどこれを試したら正常に動きます。

上の情報は、勘違いだったのだろうか?????


寝ぼけていたのかも?
#ここのところ、寝不足続きなので....


但し、整数モードや整数変数を使用する、Locate、Int(、log でバグが発生していることが分かりました。

以下を参考にしてください。


0→A~Z#:0→A~Z%
'#CBint
"[EXE]Stop"
Whilr Getkey
WhileEnd
%→S
Lbl 0
Locate 11,1,%-S
Getkey=0⇒Goto 0
%-S→S

'#CBasic
S%÷128→S
Locate 1,2,"Time(s)"
Locate 12,2,S    // ここまでは正常

Int (S÷60)→M   // Int がバグ? 冒頭の変数初期化のためM=0 にまま
S-60M→S
Locate 12,3,M        // M=0 だとして(期待していないが)、Locate は正常動作
Locate 13+Int (log M),3,":" // Locate異常 + Intのバグ?+ log 0 でエラーにならない
Locate 14+int (log M),3,S  // Locate異常 + Intのバグ?+ log 0 でエラーにならない


出力画面は、一例として以下のようになります;


[EXE]Stop 140
Time(s) 1.1015625
.1015625) 0



つまり、

Locate 13+Int (log M),3,":"
Locate 14+int (log M),3,S

は、Int の不具合だけだとすると

Locate 13,3,":"
Locate 14,3,S

となる筈ですが、そうでないのが現状。

ということは、エラーで弾かれない log 0 が野放しになって、Locate に悪影響を与えていることが分かります。

Int の問題は確定的で、あとはLocate の問題なのか、log の問題なのか...といったところです。


よろしく御願い致します。


LIFE06 (Ver 0.6) にタイマー機能を付けて、Step by Step モードでも正味の実行時間を計測して結果を表示するように改造しています。上のサンプルプログラムは、そこから抜き出したものです。

これが解決したら、実行速度の比較が楽になりそうです(^_^)/


変数、行列の表示・編集メニューに一括初期化機能追加できますか?

sentaro様

忘れるといけないので、立て続けで恐縮ですが、変数と行列の初期化機能について、要望があります。

プログラム中での一括初期化コマンドは、とても便利で、上のコメントでのサンプルプログラムでも役立っています。

ところで、デバッグツールとして、変数や行列の表示・編集のメニューに、一括初期化機能を追加して頂けますと、とても有り難いと思います。

ご検討ください。

サブルーチンが見つからないエラー表示、良いです(^_^)/

sentaro様

メモリ内に存在しないファイル名を Prog でコールする記述がある時、このファイルを実行あるいは編集しようとすると

Can't open file
code:-1


とエラーが出てくるのは、とても良いです。

以前のバージョンでこれがあったのに、いつしかエラーが出なくなって、また復活したので、歓迎です。


アドイン版CasioBasic ver.0.63 テスト版 その6.3(Mat配列コマンド増強版)

管理人様、こんにちは!

まだまだバグてんこ盛りですね(^^;
今回はMat配列コマンドを強化してみました。

アドイン版CasioBasic ver.0.63 テスト版 その6.3(Mat配列コマンド増強版)
http://pm.matrix.jp/CB/CBASIC063.zip

DotPコマンドを拡張してMat配列にコピーできるようにしてみました。
(Mat配列の表記を今回より変更しています。)
DotP( Mat A[x,y], x1,y1, x2,y2)→Mat B
Mat A配列の[x,y]を始点として、Mat Bの[x1,y1]-[x2,y2]の範囲にコピーします。
Mat Bがコピー範囲が収まる広さを確保していない場合は、Mat Bに収まる範囲でコピーします。
LCD画面転送は行いません。

DotP( Mat A[x,y], x1,y1, x2,y2)
は従来どおりLCD画面への転送となります。


それから画面取り込みコマンドとしてDotGコマンドを追加です。
DotG( px1,py1, px2,py2)→Mat A[x,y]
画面上の(px1,py1)-(px2,py2)の範囲をMat A[x,y]を始点として取り込みます。
指定範囲よりも配列が足りない場合は配列サイズまで取り込みます。

ところで、行列は縦がX軸で横がY軸なので、Mat配列は[x,y]じゃなくて[y,x]とした方が便利なような気がするんですがどうしましょうか?
もしかしてPxl系コマンドのY,Xというのはここから来ているのかも?


こうなってくるとバイト配列の数が足りないということになりそうなので、
配列確保で1要素のバイト数を個別に指定できるようにしてみました。

{127,63}→Dim Mat A.b
のように最後に[.b]または[.B]を付けるとバイト配列になります。
同様に、
[.w]または[.W]でワード配列
[.l]または[.L]でロング配列
[.f]または[.F]で倍精度実数配列
実数モードでは実数配列が基本で整数モードでは4バイトロング整数が基本ですが
これで自由なバイト構成でMat配列を確保できます。

今まで同様にデフォルトでは
C,Bはバイト配列
W,Sはワード配列
D,Lはロング配列
E,Fは倍精度実数配列
というのは変わらないですが、
上記の設定をすればデフォルトでのバイト指定は無視されて任意バイトサイズのMat配列に設定することができます。



>Isz G#
>はエラーになります。Dsz や ⇒、他の条件判定もご確認願います。

式評価のみ対応してたので他が未対応でした(^^;
ってことで、今回修正しました。


>'#CBint の後ろで 実数を使いたい場合は G# を使い、
>'#CBasic の後ろで、整数を使いたい場合は、G% を使う

整数モードで実数変数の値を参照、
実数モードで整数変数が使えるという形になります。


>式の評価が整数モードで実行されているので、整数になってしまうことに気付きました。

はい、整数モードと実数モードは評価式が整数で計算するか実数で計算するかの切り替えなので、
整数モードでは実数の計算や入力は出来ません。
実数変数#の値の参照は出来ますが結果は整数に丸められます。
逆に実数モードでは整数値が普通に扱えるので整数型変数が余分に使える形になります。


>ところで、'#CBasic は、より明示的に '#CBdbl の方が分かりやすく有りませんか?

そういえばそうですね。
#CBasic
#CBASIC
に加えて
#CBdbl
#CBDBL
追加してみました。
どちらの記述でもOkです(^^)


>また、Cbasic Ver 0.60 ではLocate で表示できなかった特殊キャラクタが、

どのキャラクタでしたでしょうか?
整数モードと実数モードの切り替えの何かでおかしくなったかもしれません(^^;


>下から3行目の Locate 12,3,M で、位置指定に失敗します。

500
23.2125
0 :23.2812
と表示されるようですが、どういう表示になりますか?

野放しのLog 0が原因でした(^^;

管理人様、こんにちは!

>ということは、エラーで弾かれない log 0 が野放しになって、Locate に悪影響を与えていることが分かります。

おっしゃるとおり、野放しのLog 0が原因でした(^^;
Log 0はマイナス無限大になるようで変なことになっていました。

これはMathエラーということで、プログラムでのLog 0 回避をよろしくお願いします。

次回バージョンで修正します。

アドイン版CasioBasic ver.0.63 差し替えです。

アドイン版CasioBasic ver.0.63 テスト版 その6.3(Mat配列コマンド増強版)
http://pm.matrix.jp/CB/CBASIC063.zip

Log 0をMathエラーとしました。

エディタで三乗根が表示できなかったのを修正しました。

CBasic ver.0.63 で Int

sentaro様

Ver 0.63 は大幅な機能追加ですね。

今夜、じっくりと触らせて頂きます。

ところで、log 0 を見落としていたばかりに、お騒がせしてしまったのですが、1点だけ...

Ver 0.62 での話しですが、Int C がファイルの最後にある場合、エラーになります。
C が C% や C# でも同じなので、Int 実装そのものに関わっていそうです。
Int C◢ でもエラーにならず正常です。

ちなみに、オリジナルの Casio Basic ではエラーになりません。

ご確認頂けますか?


ライフゲーム Ver0.63 - CBasic ver.0.63 テスト版 用サンプルプログラム

sentaro様

Cbasic Mat配列強化版 Ver 0.63 向けのサンプルプログラム-ライフゲーム Ver 0.63 です。
http://egadget2.web.fc2.com/archives/LIFE063.html

タイマー機能を追加しました。ステップモードで動かした場合も実際の動作時間を積算するようにしました。

定量的な速度評価が楽にできるようになりました。

Casio Basicでタイマーが使えるのは、、ある意味画期的だと思います(^_^)/


=====

ところで、fx-9860GII のメモリ管理でトラブル発生しましたので、一応情報としてあげておきます。

<<現象>>
メモリーマネージャーで、[F1]Main Memory、ならびに [F2]Storage Memory で見えている g1m ファイルが、PRGM のプログラムリストでは見えない。CBasic でもその見えなくなったファイルを編集したり動作可能。

<<修復作業>>
最終的には、SYSTEM で、[F5]Reset - [F2]Main Memory を選んでメインメモリのクリアをして、
・見えなくなったファイルは、ストレージメモリ(保存メモリ)からメインメモリへコピー(転送)し、他はリンクソフト FA-124 でバックアップから復旧しました。

<<試してうまくゆかなかったこと>>
・メモリマネージャで、ストレージメモリからメインメモリへコピーしても、メインメモリでは見えるのに プログラムリストで見えないまま。
・メモリマネージャでメインメモリで見えている該当ファイルを一旦消去し、ストレージメモリからコピー(転送)しても、症状は改善せず。
・CBasicのプログラムリストで、該当ファイルをリネームし、リネームされたことはメモリマネージャのストレージメモリで確認した上で、メインメモリへコピー(転送)したが、症状改善せず。

<<推論>>
おそらく、ファイルそのものが壊れて、PGRM で認識するのに必要な情報が欠落してしまったと思われます。
言い換えれば、メモリマネージャとプログラムリストでは、全く同じ情報を参照していない可能性がありますね。


私の電卓固有のメモリ異常の可能性も考えられますが、それだと嫌だなぁ...

sentaro様では似たような現状を見たことがありますか?

Re: アドイン版CasioBasic ver.0.63 差し替えです。

sentaro様

CBasic Ver 0.63 差し替え版を頂きました。

サンプルプログラムのライフゲームは、DotPの仕様変更に対応し、タイマー機能を追加して、問題なく動作しています。


> Log 0をMathエラーとしました。

私のような粗忽者には助かります(^^;


> エディタで三乗根が表示できなかったのを修正しました。

三乗根って、上付き3とルートの組み合わせということですか?


そういえば、私が以前のバージョンで遭遇したのは、エディタでは表示されるのに実行したら表示されない特殊キャラクタがあったという話しで、その時ダメだったのは、

[※]、[>>]、[≡] でした。Ver 0.63 でも Text では表示できません。

試しに、全てのキャラクタを " " で表示できるかどうか調べましたが、問題ないです。
おそらく Locate も問題なさそうです。

ところが、Text で表示させるとかなりのキャラクタが表示されませんでした。
カナも "" や Locate ではOKですが、Text では全滅でした。

Text で表示されないというのは、空白2バイト文字として表示されるということです。



アドイン版CasioBasic ver.0.63 テスト版 その6.3(変数&Mat配列初期化追加版)

管理人様、こんにちは!

>Ver 0.62 での話しですが、Int C がファイルの最後にある場合、エラーになります。

これがちょっと再現できないのですが、エラーの出るプログラム例をお願いできますか?


>タイマー機能を追加しました。ステップモードで動かした場合も実際の動作時間を積算するようにしました。

なかなかよいですね(^^)

>Casio Basicでタイマーが使えるのは、、ある意味画期的だと思います(^_^)/

時間計測以外にもいろいろ使い道があるので必須の機能ですね(^^)


>ところで、fx-9860GII のメモリ管理でトラブル発生しましたので、一応情報としてあげておきます。

ファイルが壊れた可能性が大ですね。
メインメモリはCBasicでも変数エリア、プログラムエリア、ヒープとして使いまくりなのでもしメモリアクセスで異常があったら即メインメモリのファイルは壊れる可能性があります。
リブートやリセットでエラーになるならはっきり分かるところですけど、知らぬ間に壊れているというのはかなり困りますね(^^;
壊れることになる現象に再現性があるとよいのですが…。

>メインメモリでは見えるのに プログラムリストで見えないまま。

この見えなくなるファイルをアップしていただくことは可能でしょうか?


Int Cのバグ対策はまだですが、変数の一括初期化に対応してみました。

アドイン版CasioBasic ver.0.64 テスト版 その6.4(変数&Mat配列初期化追加版)
http://pm.matrix.jp/CB/CBASIC064.zip

変数およびMat配列の表示&編集モードに全要素の一括初期化を追加しました。

今回の新規拡張コマンドとして、
Getkeyのキーが押されるまで待つ版、Getkey1を新規追加しました。
(Getkey直後に数字の1です)
SDKのGetKeyと同じですがキーコードはCasioBasicのGetkey互換です。
キー待ちループが必要なくなるので消費電力削減に絶大な効果があります、

行列と配列

sentaro様


> ところで、行列は縦がX軸で横がY軸なので、Mat配列は[x,y]じゃなくて[y,x]とした方が便利なような気がするんですがどうしましょうか?
> もしかしてPxl系コマンドのY,Xというのはここから来ているのかも?

なるほど、行列要素 aij は、今の仕様だと A[j,i] になりますよね。

一方で、配列という言葉を使えば、Mat A は、2次元配列なので、その感覚だと A[X,Y] でピッタリきます。


ビットマップ描画の Pxl系は、行列と整合性があるというのは、言われてみて初めて気付きました。

ということは、

論理座標系描画コマンドの Plot系をプログラミングで優先して使うなら、Mat A は2次元配列の現在の仕様が合いますし、
物理座標系描画コマンドの Pxl系をプログラミングで優先して使うなら、Mat A は2次元行列の仕様にした方が良い...

まだ、行列計算をガシガシ行うプログラムを作ったことが無くて、ブラフィックスで使うなら Plot系が便利だと思う私にとっては、現行仕様で分かりやすい感じです。例えば、DotPやDotG は私から見ればビットマップ操作コマンドなんですね。

う~む、でも今後行列計算の独自コマンドを作ることになった場合は、今とは並びが逆にしましょうか?
コマンド名を Matナントカ と区別して.....

悩ましいところです。


少なくとも、現行仕様だと「行列」ではなくて「配列」という用語を使うべきですね。

実は、私が「行列」と盛んに書いても、sentaro様は必ず「配列と言い換えていたので、何故だか聞きたいと思っていたのです。
理由は、こういうことだったんですね。




> こうなってくるとバイト配列の数が足りないということになりそうなので、
> 配列確保で1要素のバイト数を個別に指定できるようにしてみました。
>
> {127,63}→Dim Mat A.b
> のように最後に[.b]または[.B]を付けるとバイト配列になります。
> 同様に、
> [.w]または[.W]でワード配列
> [.l]または[.L]でロング配列
> [.f]または[.F]で倍精度実数配列
> 実数モードでは実数配列が基本で整数モードでは4バイトロング整数が基本ですが
> これで自由なバイト構成でMat配列を確保できます。

> 今まで同様にデフォルトでは
> C,Bはバイト配列
> W,Sはワード配列
> D,Lはロング配列
> E,Fは倍精度実数配列
> というのは変わらないですが、
> 上記の設定をすればデフォルトでのバイト指定は無視されて任意バイトサイズのMat配列に設定することができます。

これも、画期的で柔軟な実装ですね。とても有り難い仕様です。
手元では、早速使わせてもらっています。


> そういえばそうですね。
> #CBasic
> #CBASIC
> に加えて
> #CBdbl
> #CBDBL
> 追加してみました。
> どちらの記述でもOkです(^^)

上位互換性を考慮したご対応、ありがとうございます。

異常になったファイル

sentaro様

異常を引き起こしたファイルをアップしました。

http://egadget2.web.fc2.com/archives/LMAP.html


このファイルは、異常のあったファイルそのものではなく、別ファイル名で一旦作ったところへ、Cut&Pasteで貼り付けて、その後LMAPにリネームしたものです。

よろしく御願い致します。

Int の謎

sentaro様


エラーが発生したのは、

0.1→C
Int C

および

0→C
Int C


という2行だけのプログラムです。

昨日 Ver 0.62 では発生していたのですが、Ver 0.63 と Ver 0.64 ではエラーになりません。

ファイル自身は、リセットで消えてしまって、今同じコードでファイルを作って試したのです。

謎です...(/_;)


ファイルが見えなくなったのと関係あるのかしらん??

CBasic Ver 0.64

sentaro様

> アドイン版CasioBasic ver.0.64 テスト版 その6.4(変数&Mat配列初期化追加版)
> http://pm.matrix.jp/CB/CBASIC064.zip

CBasic Ver 0.64 を頂きました。


> 変数およびMat配列の表示&編集モードに全要素の一括初期化を追加しました。

動作を確認しました。変数と"配列"の両方を、任意の値で一括初期化できるのは、デバッグにはとても助かります。


> 今回の新規拡張コマンドとして、
> Getkeyのキーが押されるまで待つ版、Getkey1を新規追加しました。
> (Getkey直後に数字の1です)
> SDKのGetKeyと同じですがキーコードはCasioBasicのGetkey互換です。
> キー待ちループが必要なくなるので消費電力削減に絶大な効果があります、

最初、どうやって入力するのか悩みましたが、
単に Getkey 入力後 1 をキー入力するだけなのですね。

ClrGraph
Horizontal 0
Getkey1=44⇒"DEL"

で、機能を試しました。
[DEL]キー以外は、受け付けない....

と思ったら [MENU] は受け付けますが、プログラムは終了せず、MENU画面と実行画面の切り替え...

あと、面白いのは [AC]、[EXIT]、[EXE] の3つのキーは、違う動作!
1回目は、テキスト画面へ移り、2回目に これらののいずれを押すと、AC Break のポップアップ無しでプログラムリストに戻る(正常終了する)のですね。

ちなみに、上のプログラムを起動し、[DEL]以外のキーを押したあとだと、いくら [DEL]を押しても受付つけないようです。

以上は、SDKの動作でしたっけ?


さて、ループでキー入力待ちにしていると、[SHIFT][F6](G↔T) でテキスト画面とグラフィックス画面の切り替えが出来ないのですが、Getkey1 だと切り替えできますね。

あと、暗い時にループの入力待ちだと、[SHIFT][OPTN](LIGHT) でバックライトも使えないのが、使えるのは何かの時に役立ちそうです。

再来週、海外出張なので、暗い飛行機の中で役立つかも知れません(^^;

Normについて

sentaro様

[SHIFT][MENU](Setup) で、

Dispkay  Nrm の設定がありますが、数字が 1 ~ 15 まで選べます。

オリジナルは、Norm1 か Norm2 しか無いのですが、3~15は不要ではありませんか?

0.64差し替えです(^^;

管理人様、こんにちは!

小文字変数の初期化をバグってました(^^;
ので、0.64差し替えです。

>あと、面白いのは [AC]、[EXIT]、[EXE] の3つのキーは、違う動作!
>1回目は無視されます。2回目に これらののいずれを押すと、AC Break のポップアップ無しでプログラムリストに戻るのですね。
>これって、SDKの動作でしたっけ?

あ゛、ちょっと違ってしまってますね(^^;
SDKとCasioBasicではキーコードが違うので、その変換だけしているだけなのに何かが違うのがちょっと不思議ですね。
[AC]キーについては一回目でAC breakになるように修正しました。


>異常になったファイル

早速にありがとうございます!
ストレージからメインメモリにコピーしてPRGMでリストが正常に表示され実行できたのであれれ?という感じです(^^;
バイナリで見ても異常はないようなので、何が原因なのかちょっと分からずです。
メインメモリが破損していたという可能性が一番大きいのでしょうか。



>う~む、でも今後行列計算の独自コマンドを作ることになった場合は、今とは並びが逆にしましょうか?
>コマンド名を Matナントカ と区別して..

配列仕様として使う場合に不便なのはMat表示編集でのXY軸が逆になっていることなので、これを逆にも出来るようにしてみます。
それでとりあえずなんとかなるでしょうか。


>実は、私が「行列」と盛んに書いても、sentaro様は必ず「配列と言い換えていたので、何故だか聞きたいと思っていたのです。
>理由は、こういうことだったんですね。

はい(^^;
Matは最初から行列の概念は無く配列としての実装だったので、Mat表示&編集モードを加えた時に[X,Y]が逆なことに気が付いてちょっと焦りました(^^;

Re:Normについて

>オリジナルは、Norm1 か Norm2 しか無いのですが、3~15は不要ではありませんか?

CBasicではNormは0~15まで選択できますが、これはFixやSciと同じく表示の桁数指定となっています。
0は最大の16桁精度での表示になります。
そのうち、Norm1 と Norm2 がCasioBasic互換で10桁仕様になっています。
ので、3~15でも表示精度の桁数指定の意味があるために残しています。

アドイン版CasioBasic ver.0.65 テスト版 その6.5(Mat表示切替版)

管理人様、こんにちは!

Mat表示&編集モードの縦横を逆にした表示に対応しました。

アドイン版CasioBasic ver.0.65 テスト版 その6.5(Mat表示切替版)
http://pm.matrix.jp/CB/CBASIC065.zip

行列(m,n)および配列(x,y)表示の切り替えとなります。

バグ修正(^^;

管理人様、こんにちは!

?コマンドでの#%が上手くいってなかったので修正しました。
初歩的なバグなので0.65を差し替えました。

あと、Matがバイトの場合にMat表示編集で横を6つまで表示するようにしました。


>三乗根って、上付き3とルートの組み合わせということですか?

はい、一文字目に2バイト幅のキャラクタコードがあると表示できないバグでした(^^;


>ところが、Text で表示させるとかなりのキャラクタが表示されませんでした。
>カナも "" や Locate ではOKですが、Text では全滅でした。

これはほぼすべての特殊キャラクターのミニフォントが内蔵されていないためなのですが、
表示するには自前でカナフォントのようにミニフォントを用意するしかないです(^^;

Cbasic Ver0.65

sentaro様

今日は家内と出かけていて、さっき戻りました。

またまた機能追加とデバッグ版ですね。当初に比べると、とても使いやすくなりましたね(^_^)/


最近になって、独自機能が続々と追加され、色々と隠されていた仕様も分かってきました。
そこで、そろそろ独自機能の仕様をまとめて記録しておいた方が良さそうなので、その前に CBasic Project のカテゴリを追加して、トップ記事を書こうと思います。


1) Getkey1

サンプルプログラム;

ClrGraph
ClrText
While 1
Locate 1,1,Getkey1
WhileEnd


を実行すると [AC]で直ちに Breakすることを確認しました。
SDK の GetKeyと同じく、キー入力待ちを行うのでビジーマーカーが点灯しません。
おっしゃるように、電池消費抑制機能がありそうですね。
なお、SDK の GetKey の仕様と同じで、[MENU] は別扱いですね。これはうまく使えるかも知れません。

なによりもビジーにならないので電卓が持っている機能を使えます。これはGetkey1 の利用価値を高めるポイントになりそうです。

ところで、[SHIFT][OPTN](LIGHT) を押すと、30056 と表示されるのはご存じですか?

そこで、以下のサンプルを作って、他に5桁出力されるケースを捜してみました。

ClrGraph
CliText
While 1
Getkey1→K
Locate 1,1,K
K=44⇒ClrText
WhileEnd

5桁出力された時は、[DEL]でテキスト画面をクリアします。

以下のケースで 30056 が出力されました。結構あります。

[SHIFT] [OPTN]
[SHIFT] [,]
[SHIFT] [→]
[SHIFT] [7] (CATALOG) [実際にカタログ表示もされます]
[SHIFT] [5]
[SHIFT] [6]
[SHIFT] [3]

[ALPHA] [DEL](UNDO)
[ALPHA] [(-)]

[SHIFT] [[7] でカタログ表示

これを知らないとバグになりそうで、直前に[SHIFT]や[ALPHA]が押された場合を排除する処理が必要ですね。

一方で、[SHIFT][7] でキャプチャー機能が使えることを期待しましたがダメでした。これが使えるとグラフィックスプログラムでは便利なことがありそうなので、ちょっと残念です。

このままの仕様にしますか?


2) Mat表示の (m,n) と (X,Y)の切り替え
現在のところ、Mat については配列としての扱いがデフォルトでCasio Basicとは異なる仕様。そして表示上だけ行列の(m,n)表示に切り替える機能を追加したということで良いですか?


3) バイト配列の表示で、横6個までの表示
これは、ビットマップ関連では役立ちます。ありがとうございます。


4) プログラム中での配列表示
少し前のCbasicでは、

Mat B◢

とすると、配列表示画面に切り替わった(と思う)のですが、Ver 0.65では Syntax ERROR となります。
私の勘違いでしょうか?



5) エディタでの上書きモード
エディタで、[SHIFT][DEL]とすると上書きモードになりますが、実はこれを今日初めて試しました。
なんだか妙な動きでうまく入力できないので、ご確認頂けますか?



6) Norm / Sci / Fix
これらは、0~15の値を設定できると教えて貰いましたが、プログラム中でも使えますか?


7) Dispay関数についての要望
これまで、EngOn、EngOf、Eng(fx-5800Pにはない)、そして Norm 1 や Norm 2 をプログラム中で使ってきて、Casio Basicの問題として、現在の設定を取得できないことです。
そこで、例えば、Eng →E とか、Norm →N とっいた感じで現在の設定を取得する独自機能の拡張は如何でしょうか?

プログラム中でこれらの設定を行うと、他のプログラムや電卓として使う時に、思わぬ設定になっていて慌てて設定変更することが結構あります。fx-9860GII を日常使いの電卓にする場合、とてもポイント高いと思うのですが、如何でしょうか?



8) Text での特殊キャラクタ表示
> >ところが、Text で表示させるとかなりのキャラクタが表示されませんでした。
> >カナも "" や Locate ではOKですが、Text では全滅でした。
>
> これはほぼすべての特殊キャラクターのミニフォントが内蔵されていないためなのですが、
> 表示するには自前でカナフォントのようにミニフォントを用意するしかないです(^^;

カナも Text で表示できないのは、別途ミニフォントを作る必要があるわけですね。
いずれフォント作りをするとして、当面は優先度を下げることになりそうですね。


アドイン版CasioBasic ver.0.66 テスト版 その6.6(バグ修正版)

管理人様、おつかれさまです。

>またまた機能追加とデバッグ版ですね。当初に比べると、とても使いやすくなりましたね(^_^)/

管理人様のデバッグ&テスト&アドバイスのおかげで最初に構想していた以上に進化できました。
どうもありがとうございます(^^)

まだまだバグが潜んでる可能性大ありなのでこれからもよろしくお願いします。


>最近になって、独自機能が続々と追加され、色々と隠されていた仕様も分かってきました。
>そこで、そろそろ独自機能の仕様をまとめて記録しておいた方が良さそうなので、その前に CBasic Project のカテゴリを追加して、トップ記事を書こうと思います。

ありがとうございます。
管理人様の手厚いサポートにはいつも大感謝です(^^)


>ところで、[SHIFT][OPTN](LIGHT) を押すと、30056 と表示されるのはご存じですか?

あ゛…GetKeyのキーコードがそのまま出てますね(^^;

それはちょっとまずいかもということで、CasioBasic互換コード以外は0を返すように修正しました。
それからキーバッファクリアしていたためにキャプチャー機能が使えなくなっていたのも修正です。


>現在のところ、Mat については配列としての扱いがデフォルトでCasio Basicとは異なる仕様。そして表示上だけ行列の(m,n)表示に切り替える機能を追加したということで良いですか?

はい、Matの実装は現状では行列のコマンドが一切ないので配列と考えて間違いないです。
表示上の切り替えで行列にも配列にも見えるという感じですね。


>とすると、配列表示画面に切り替わった(と思う)のですが、Ver 0.65では Syntax ERROR となります。
>私の勘違いでしょうか?

いえ、勘違いではないです。
Mat行列の表示は一度も実装してないのでエラーになるのが正解です(^^;

次回バージョンでちょっと実装してみます。


>5) エディタでの上書きモード

ファイルの最後で変なことになっていたのを確認しましたので修正しました。


>これらは、0~15の値を設定できると教えて貰いましたが、プログラム中でも使えますか?

はい、プログラム中でもCasioBasic同様に使えます。
0~9においてはCasioBasic互換です。


>7) Dispay関数についての要望

了解です。
Engモードは変数Engで取得できます。
Eng →A
という感じで使えます。
0:EngOff
1:EngOn

Norm
Fix
Sci
はそれぞれ引数に負数を指定すると現在の設定値を返します。
()は必要はないです。

現在の設定がNorm1の場合の返り値は、
Norm (-1)で1
Fix (-1)では-1
Sci (-1)では-1

現在の設定が Fix 8の場合は、
Norm (-1)で-1
Fix (-1)では 8
Sci (-1)では-1

という感じです。
設定されているモードでのみ現在の設定値が返ります。

例えばプログラム終了時にNorm1に戻したい場合は、

if Norm(-1) < 0
Then Norm 1

という感じです。


Mat行列のプログラム中での表示はまだ未対応ですが、
それ以外修正してみました。

アドイン版CasioBasic ver.0.66 テスト版 その6.6(バグ修正版)

http://pm.matrix.jp/CB/CBASIC066.zip

実行モードのデフォルト設定について

sentaro様

実行モードのデフォルト設定は Double ですが、1つ気がついた点があります。

プログラムAがプログラム中で '#CBint が宣言されていて、そのまま終了した。
Setup では Double モードになっている。

この状態で、実数計算が必要なプログラム(特に動作モードの宣言を含まない)を実行すると、0除算エラーが発生。
100÷log 2→N のところでエラー発生。
Setup で見ると、実行モードが Int になっている。

そこで、何かプログラムを実行する際は、強制的に Doulbeモードへ切り替えるようにすると、Casio Basicとの互換性を担保できて良いと思うのですが、如何でしょうか?

=====

ところで、多桁円周率計算プログラムの話しの発端は、「高機能電卓の情報」ブログで akatuki様が提示されたプログラムでした。これは一見効率の良いプログラムでしたが、カシオの電卓は10桁精度しかないので、Base を6にしないと計算結果が正しくならなかったと思います。このプログラムの良いところに、10桁ごとに整形して出力することがありましたが、Base を 6 にすると6桁で整形されてしまいます。

CBasic で Norm 15 として、Base を 10 に設定すると、100桁の場合は正しい計算結果になり、10桁整形で出力します。
(1000桁指定すると、200桁目は既に計算が違ってしまいます。何故だかはまだ分かりませんが、取りあえず100桁限定での話しとしてください)

Norm 15 という CBasic の独自機能の良さが、ここでも証明された面白い事例だと思います。

この最初のプログラムを Casio Basic に移植したのが下記です。
http://egadget2.web.fc2.com/archives/picalc.html


その後、sentaro様と一緒に高速化を試み、CBasic だと1000桁が36秒と桁数が格段に増えたので、出力に桁数も付記するように改造したものを作ってみました。

これについては、以下で速度比較を行って、CBasic の高速化の事例として紹介しました。

http://egadget.blog.fc2.com/blog-entry-491.html


CBasic Ver 0.66 について

sentaro様

Ver 0.66 を頂きました。ありがとうございます。

CBasic プロジェクトのトップページに、ライフゲームの実際の動画を追加しました。これで、CBasic の高速性が一目瞭然だと思います。
http://egadget.blog.fc2.com/blog-entry-491.html

いつもは、静かな環境で動画撮影しているのですが、今回は騒がしいところで撮影したので、後で音声を削除するのに手間取ってしまいました(初めての経験なもので...)。

合わせて、ライフゲームのページにも同じ動画を追加して、ライフゲームの簡単な説明も加えてみました。
http://egadget.blog.fc2.com/blog-entry-492.html

これで、CBasic ファンへの注目が増えると良いのですが...


1) Getkey1 の改善

生のキーコードが出なくなりました。

ClrGraph
ClrText
Getkey1→K
Locate 1,1," "
Locate 1,1,K
K=44⇒ClrText
WhileEnd

で確認しました。

あと、[SHIFT][7](CAPTURE) でキャプチャー機能が使えるように改善されたのも助かります。


2) Mat配列/行列のプログラムからの表示

> >とすると、配列表示画面に切り替わった(と思う)のですが、Ver 0.65では Syntax ERROR となります。
> >私の勘違いでしょうか?
>
> いえ、勘違いではないです。
> Mat行列の表示は一度も実装してないのでエラーになるのが正解です(^^;

> 次回バージョンでちょっと実装してみます。

よろしく御願い致します。


3) エディタでの上書きモードの異常解消

> ファイルの最後で変なことになっていたのを確認しましたので修正しました。

確認しました。



4) Displayコマンド

> Engモードは変数Engで取得できます。
> Eng →A
> という感じで使えます。
> 0:EngOff
> 1:EngOn
>
> Norm
> Fix
> Sci
> はそれぞれ引数に負数を指定すると現在の設定値を返します。
> ()は必要はないです。
>
> 現在の設定がNorm1の場合の返り値は、
> Norm (-1)で1
> Fix (-1)では-1
> Sci (-1)では-1
>
> 現在の設定が Fix 8の場合は、
> Norm (-1)で-1
> Fix (-1)では 8
> Sci (-1)では-1
>
> という感じです。
> 設定されているモードでのみ現在の設定値が返ります。
>
> 例えばプログラム終了時にNorm1に戻したい場合は、
>
> if Norm(-1) < 0
> Then Norm 1
>
> という感じです。

これで、Casio Basic の弱点が1つ克服されました。


お疲れ様でした。

アドイン版CasioBasic ver.0.7 テスト版 その7(Mat表示+Continue追加版)

管理人様、こんにちは!

>そこで、何かプログラムを実行する際は、強制的に Doulbeモードへ切り替えるようにすると、Casio Basicとの互換性を担保できて良いと思うのですが、如何でしょうか?

セットアップでの切り替えとプログラム内の切り替えが連動していたので、
セットアップの切り替えをデフォルトモードとしました。
セットアップで実数モードにすると常にプログラムが実数モードでスタートします。
逆に整数モードにすると常に整数モードでスタートします。
ということで、セットアップでの設定が強制的実数/整数モードの選択となります。
CasioBasic互換で使う場合はセットアップで実数モードにしておけば常に実数モードでプログラムもエディタも始まります。


>カシオの電卓は10桁精度しかないので、Base を6にしないと計算結果が正しくならなかったと思います。

んと、Spigotアルゴリズムの円周率計算だと有効桁の半分のBaseにしないといけないので、
CasioBasicの場合は内部精度が13桁相当ということで6桁以下にしないと正しく計算ができません。
CBasicでは内部16桁の精度があるので100桁計算であれば8桁以下にすれば正しく計算できます(^^)


>この最初のプログラムを Casio Basic に移植したのが下記です。

PICALC5を実行させようとしたらいきなりのCan't open fileエラーが(^^;
そのままEXITで抜けて実行させたらリセットに(^^;
ってことで、このエラー処理を改善しました。

最初にサブプログラムが存在しない時のエラー処理で、エラー表示ポップアップにて読み込めなかったプログラム名、そしてエラー箇所がエディタで表示されるようにしました。


>これについては、以下で速度比較を行って、CBasic の高速化の事例として紹介しました。

結構劇的な速度アップですよね(^^)
インタプリタのままでもここまでいけるというのがすごいですね。
ありがとうございます(^^)


>いつもは、静かな環境で動画撮影しているのですが、今回は騒がしいところで撮影したので、後で音声を削除するのに手間取ってしまいました(初めての経験なもので...)。

動画は一目瞭然ですね(^^)
これがインタプリタで動くとはちょっとびっくりですね。



プログラム中でのMat行列の表示はMat B◢ の形式のみのサポートです。
Matエディタ画面を呼び出すだけなのでたいしたことではないのですが(^^;
CasioBasicでは編集は不可ですが編集できることで困ることもないと思うのでそのままです。



アドイン版CasioBasic ver.0.7 テスト版 その7(Mat表示+Continue追加版)
http://pm.matrix.jp/CB/CBASIC070.zip

今回の目玉はプログラムの[AC]による一時中断からの再開、つまりContinueが可能になったというところですが、
[AC]Breakでプログラムを途中中断した後、エディタの[F6]がContに変わります。
一時停止した箇所、または任意の箇所よりプログラムを再開できるようになりました。

昔のBASICにはあった機能ですがCasioBasicでは装備されていなかったので実装してみました。
途中で止めて変数確認後、再開とかでのデバッグに有効かと思います(^^)

Re: アドイン版CasioBasic ver.0.7 テスト版 その7(Mat表示+Continue追加版)

sentaro様


> PICALC5を実行させようとしたらいきなりのCan't open fileエラーが(^^;
> そのままEXITで抜けて実行させたらリセットに(^^;
> ってことで、このエラー処理を改善しました。
>
> 最初にサブプログラムが存在しない時のエラー処理で、エラー表示ポップアップにて読み込めなかったプログラム名、そしてエラー箇所がエディタで表示されるようにしました。

ありゃ、Prog "PIDISP2"

とすべきところ、Prog "PIDISP" のままでアップしてしまったようです。
先ほど、正しいものに差し替えておきました。

確かに、読み込めないファイル呼び出しのところにカーソルが来るのは親切ですね。
特に、複数のサブルーチンを呼びだしている時は、手間が減ってとても良いと思います。



> >カシオの電卓は10桁精度しかないので、Base を6にしないと計算結果が正しくならなかったと思います。
>
> んと、Spigotアルゴリズムの円周率計算だと有効桁の半分のBaseにしないといけないので、
> CasioBasicの場合は内部精度が13桁相当ということで6桁以下にしないと正しく計算ができません。
> CBasicでは内部16桁の精度があるので100桁計算であれば8桁以下にすれば正しく計算できます(^^)

お、そうでしかた....もう忘れてしまっていました(/_;)

CBasicの内部精度は16桁ですか...

Casio Basic の内部精度が13桁相当というのは、Base が6以下でないと正確な計算をしないことから、逆の推測なんでしょうか?

私は、あまり深く考えずに、Baseを色々と変えてみたところ、6以下で計算が正しいことを見つけただけなんです....




> >これについては、以下で速度比較を行って、CBasic の高速化の事例として紹介しました。
>
> 結構劇的な速度アップですよね(^^)
> インタプリタのままでもここまでいけるというのがすごいですね。
> ありがとうございます(^^)

実は、280MHz にすると1000桁計算は30秒で終わります。キリの良い値です。
当面は、e-Gadget では、安全のため Ftune2 のオーバークロック=236MHz にしておこうと思っています。



> >いつもは、静かな環境で動画撮影しているのですが、今回は騒がしいところで撮影したので、後で音声を削除するのに手間取ってしまいました(初めての経験なもので...)。
>
> 動画は一目瞭然ですね(^^)
> これがインタプリタで動くとはちょっとびっくりですね。

そうなんです、これを見て貰わないと始まらない...

CellSumという隠し技のお陰も大きいのですが、開き直ってこれも CBasicの一部ですからね(^^;



> プログラム中でのMat行列の表示はMat B◢ の形式のみのサポートです。
> Matエディタ画面を呼び出すだけなのでたいしたことではないのですが(^^;
> CasioBasicでは編集は不可ですが編集できることで困ることもないと思うのでそのままです。


@@今回の目玉@@

> 今回の目玉はプログラムの[AC]による一時中断からの再開、つまりContinueが可能になったというところですが、
> [AC]Breakでプログラムを途中中断した後、エディタの[F6]がContに変わります。
> 一時停止した箇所、または任意の箇所よりプログラムを再開できるようになりました。
>
> 昔のBASICにはあった機能ですがCasioBasicでは装備されていなかったので実装してみました。
> 途中で止めて変数確認後、再開とかでのデバッグに有効かと思います(^^)

これ、面白いですね。
さっそく、しっかり使わせてもらっています。


で、デバッグツールとして、機能追加の提案です。

エディタで、文字/文字列検索機能が欲しいです。

昔作ったプログラムを改造するのに、既に使われている変数を探し出すのにこれが是非とも欲しいと思うもので....
ご検討いただけますか?


Ver 0.70 ちょっとマズイ問題

sentaro様

私のストレージメモリに、LIFE070.g1m と LMAP.g1m があります。

Ver 0.70 で、LIFR070を開こうとすると LMAP が開いてしまいます。LAMP は正しく開きます。

そこで、試しに Ver 0.66 に戻すと、LIFE070 は正しく開きます。LMAP も問題ありません。

そこで、もう一度 Ver 0.70 に戻すと問題が再現します。

そこで、問題のファイル2つをアップしましたので、ご調査頂けませんか?

http://egadget2.web.fc2.com/archives/Debug.html


Re:Ver 0.70 ちょっとマズイ問題

管理人様、

間違えて開くのが再現しないのでちょっと謎なのですが…(^^;
Ver.0.66で大丈夫だとするとVer.0.70で何かしらやらかしたかもしれないです。

とりあえず、アップ後に見つけたバグ修正版を差し替え再アップしましたのでこちらのファイルで試してみて下さい。

アドイン版CasioBasic ver.0.7 テスト版 その7(Mat表示+Continue追加版)
http://pm.matrix.jp/CB/CBASIC070.zip


>文字/文字列検索機能

私も欲しいと思っていましたので次回バージョンで実装してみたいと思います(^^)

Re: Re:Ver 0.70 ちょっとマズイ問題

sentaro様

fx-9860GII を工場出荷状態に戻し、順にアドインをインストールしてみました。

・GEOMETRY
・PHYSIUM
・Ftune2
・CBasic

CBasic Ver 0.70ですと、LINE070 を開こうとすると LMAPが開く異常が再現しました。
CBasic Ver 0.66 の場合は、両方とも正常に開きます。

やはり Cbasic Ver 0.70 に何かありそうです。

CBasic066に変えて LIFE070を起動した時に最初に表示する操作説明方法が一部文字化けします。そのままプログラムを走らせ正常終了させた後、再度起動した時、文字化けは消えていました。

以前も、文字化けが発生して、いつのまにか消えたことを経験しています。



Re:Re:Re:Ver 0.70 ちょっとマズイ問題

管理人様、こんにちは!

間違えて開く現象、確認しました。
[F1]の実行でばかり試していたので気が付くのが遅れました(^^;
[F2]エディタで試すと、思いっきりバグってました。

ってことで、致命的バグということで、v.70差し替えしました。

Ver 0.70 の緊急対応

sentaro様

Ver 0.70 あぶないバグの緊急対応、ありがとうございます。

朝にアップされているなんて、恐縮です。

エディタで正常に開くようになりました。

検索機能、良いですね。
最初に検索かけると、[F1] (SRC) のファンクションメニューが出て、連続検索できる点、ユーザーフレンドリーです。

あと、[AC] Break からの復帰機能も面白いです。
特にループ内の動きを変数から追いかけるときに役立ちます。

ところで、Ver 0.66 で出なかったエラーで、Ver 0.70 でよく出くわすのが、以下のものです;

Not enough Memory
ptr:0x308(776)

これが出る時の傾向ですが、メインルーチンからサブルーチンを呼びだし、そこでエラーか[AC] Breakでソース編集画面に戻った時、編集しようとするとこのエラーが出ます。

そこで、一旦保存しようとすると、サブルーチンだけでなく、メインルーチンの編集画面も現れて保存するように言ってきます。
おそらく、2つ分のプログラムソースが開かれた状態なので、メモリ足りなくなるものと推測しています。

両方とも保存してから、一方だけを開いて編集する時には、このエラーには一度もお目にかかりません。

[AC] Breakからの復帰機能の実装と関係ありそうですね。

アドイン版CasioBasic ver.0.71 テスト版 その7.1(サーチ機能追加版)

管理人様、こんにちは!

>朝にアップされているなんて、恐縮です。

いえいえ、本来なら昨晩に気が付いてないといけなかったので、こちらこそ申し訳なかったです。
朝、時間があったので修正アップしました。

>検索機能、良いですね。
>最初に検索かけると、[F1] (SRC) のファンクションメニューが出て、連続検索できる点、ユーザーフレンドリーです。

あ゛、早速にバレちゃってますね(^^;
仕様的にはCasioBasicの踏襲ですが、0.70での実装では検索できなかった場合の使い勝手が同じ仕様にはなっていなかったのでそこのあたりを本体CasioBasicと同じ仕様に合わせました。
それと検索距離が長くなるとちょっと時間がかかってしまうバグがあったので修正しました。


>これが出る時の傾向ですが、メインルーチンからサブルーチンを呼びだし、そこでエラーか[AC] Breakでソース編集画面に戻った時、編集しようとするとこのエラーが出ます。

確認しました。
実行時にサブルーチンを読み込む時に編集用バッファを確保できてなかったので修正しました。
編集用バッファは新規ファイルで2Kバイト、通常開いた場合には1KBとなっていてこれ以上のサイズになる編集を行うとNot enough Memory となります。
つまり元が1KBのファイルを編集する場合は2KBまでということになっています。
大きなプログラムになった場合にNot enough Memoryが出たら、一旦保存してまた開くと編集エリアが1KB増える仕様です。

[AC] Breakから[EXIT]で抜ける場合は一気にファイルモードに抜けないでサブルーチンからメインルーチンへという形になるのは今のところはそういう仕様にしてあります。

>[AC] Breakからの復帰機能の実装と関係ありそうですね。

まさにその通りです。
新機能追加はバグの宝庫ですね(^^;
これからもチェック&テストよろしくお願いします(^^)

ということで、そこのあたりの修正版です。

アドイン版CasioBasic ver.0.71 テスト版 その7.1(サーチ機能追加版)
http://pm.matrix.jp/CB/CBASIC071.zip

Re: アドイン版CasioBasic ver.0.71 テスト版 その7.1(サーチ機能追加版)

sentaro様

CBasic Ver 0.71 を頂きました。

エディタが安定して使い易くなって助かります。ありがとうございます。


> いえいえ、本来なら昨晩に気が付いてないといけなかったので、こちらこそ申し訳なかったです。
> 朝、時間があったので修正アップしました。

お陰様で、サクサクとコーディングできるようになったので、ライフゲームで、プリセットした初期パターンを選べるように機能追加できました。プリセットパターン機能は、サブルーチン LMAP1.g1m に分けましたが、データが殆どを占めて、結構大きなファイルになってしまいました。

http://egadget.blog.fc2.com/blog-entry-492.html

プリセットのパターンに、手書きで書き加えることもできるのが、チョットポイントだったりします(^^;


> 実行時にサブルーチンを読み込む時に編集用バッファを確保できてなかったので修正しました。
> 編集用バッファは新規ファイルで2Kバイト、通常開いた場合には1KBとなっていてこれ以上のサイズになる編集を行うとNot enough Memory となります。
> つまり元が1KBのファイルを編集する場合は2KBまでということになっています。
> 大きなプログラムになった場合にNot enough Memoryが出たら、一旦保存してまた開くと編集エリアが1KB増える仕様です。

なるほど、動的な管理でできるだけ大きなファイルを扱えるようになっているのですね。


> [AC] Breakから[EXIT]で抜ける場合は一気にファイルモードに抜けないでサブルーチンからメインルーチンへという形になるのは今のところはそういう仕様にしてあります。

了解です。


Re: アドイン版CasioBasic ver.0.71 テスト版 その7.1(サーチ機能追加版)

sentaro様


CBasic Ver 0.71 で気付いたことがあります。

Ver 0.66 や 0.70 では、オーバークロックし時のエディタで、カーソルが点滅しなかったり、見えなくなったりしていました。

ところが、Ver 0.70 では点滅カーソルがきちんと表示されています。

意図的に調整なさったのでしょうか?

今後の機能追加で、カーソルの見やすさは確保して頂きたいと思うので、敢えてこの話題をアップしました。

Re: アドイン版CasioBasic ver.0.71 テスト版 その7.1(サーチ機能追加版)

sentaro様

Ver 0.71 添付の readme1.txt がアップデートされているのを見つけました。

これまでに履歴も含めて、独自拡張機能が整理されているのは助かります。....ということで、Cbasic プロジェクトのエントリーを大幅に改訂しちゃいました。
http://egadget.blog.fc2.com/blog-entry-491.html


一方、ライフゲームですが、ゼロから CBasic のエディタで作っていて、改めてソースを書き出してみると、結構な分量でビックリしました。

ここで気付いたのは、エディタの出来の良さです!
なので、バカみたいにソースを掲載しましたが、こんなのが電卓だけで作れてしまうのは、エディタが良く出来ているからだヨ!

....とアピールしてみました(^^;

まぁ、Casio Basic が構造化言語だというのが、最大の理由と言えなくも無いですが...


独自拡張部分については、他のサンプルプログラムも作ってみて、検証を進めようと思います。


Not enough memory エラーの改善については、とても助かっています。

アドイン版CasioBasic ver.0.72 テスト版 その7.2(サーチ機能バグ修正版)

管理人様、こんにちは!

>プリセットのパターンに、手書きで書き加えることもできるのが、チョットポイントだったりします(^^;

ライフゲームは初期プリセットデータが利用できるようになってすごく便利になりましたね(^^)
初期に設定するドットが多くなると結構大変なので助かります。
そして、後でちょい足し変更できる点もなかなか便利です(^^)


>ところが、Ver 0.70 では点滅カーソルがきちんと表示されています。
>意図的に調整なさったのでしょうか?

調整という感じではないのですが、サーチ機能追加でちょこっといじった部分があるのでそれがよい結果になっているのかもしれません。


>これまでに履歴も含めて、独自拡張機能が整理されているのは助かります。....ということで、Cbasic プロジェクトのエントリーを大幅に改訂しちゃいました。

なんか、恐縮するばかりですね(^^;
どうもありがとうございます!


>一方、ライフゲームですが、ゼロから CBasic のエディタで作っていて、改めてソースを書き出してみると、結構な分量でビックリしました。

機能別に整理されてコメントがわかりやすくてよいですね(^^)


>ここで気付いたのは、エディタの出来の良さです!

これは、元のCasioBasicのエディタの設計が良いってことですね(^^)

そして、

>まぁ、Casio Basic が構造化言語だというのが、最大の理由と言えなくも無いですが..

はい、構造化言語であるというのはやはりかなりポイント高いです。

ということで、今日もバグ発見なので修正版です。


アドイン版CasioBasic ver.0.72 テスト版 その7.2(サーチ機能バグ修正版)
http://pm.matrix.jp/CB/CBASIC072.zip

2バイトコマンド文字列の検索で失敗していたので修正です。
それから、キーバッファをクリアしてから入力するGetkey2を追加しました。
最初のCaptureが利用できないGetkey1の仕様を追加しました。
これはGetkey1がSH3機で上手く動作しない場合があるためで、その場合はGetkey1の代わりにGetkey2を使用してください。

CBasic ver.0.72 について

sentaro様

Ver 0.72 (サーチ機能バグ修正版)を頂きました。

ところで、サーチの際 [F5](A<>a) と [F6](CHAR) となっていますが、これらを1つ左へずらせませんか?
編集モードでは、[F4](A<>a) [F5](CHAR) となっていて、それに体が慣れているので、サーチの際にミスタッチしてしまうのです。ユーサーインターフェースの面でも、同じの方が良くありませんか?

それから、CLIP&PASTE 機能でソースからサーチ文字列へコピーできませんか?仕様上1行以内の範囲なら、可能ではないでしょうか?

ご検討を御願い致します。
併せて、readme1.txt の改訂も御願い致します(^^;)




> ライフゲームは初期プリセットデータが利用できるようになってすごく便利になりましたね(^^)
> 初期に設定するドットが多くなると結構大変なので助かります。
> そして、後でちょい足し変更できる点もなかなか便利です(^^)

ライフゲームでは、まだ使っていない DotG() と Mat A.b を活用して機能追加をしてみたいと思っています。

ライフゲームを追求するのは、所詮電卓では無理があるので、電卓で楽しめる範囲内で CBasic を使いこなすのが主目的です(^O^)v


> >ところが、Ver 0.70 では点滅カーソルがきちんと表示されています。
> >意図的に調整なさったのでしょうか?
>
> 調整という感じではないのですが、サーチ機能追加でちょこっといじった部分があるのでそれがよい結果になっているのかもしれません。

現状が、丁度良い感じなので、是非維持して頂きたいところです....無理をいってすみませんが...



> これは、元のCasioBasicのエディタの設計が良いってことですね(^^)

CLIP&PASTE 機能追加で超えちゃってください(^_^)/



ライフゲームを弄る際に、サブルーチンからさらにサブルーチンを呼びだす構造を試してみようと思います。Not enough memory 関連がどうなるのか? 確認のためもあります。

幸か不幸か、ライフゲームは思ったよりもファイルが大きくなってしまっているので、メモリ使いまくりの事例になりそうですね。


=====

実は、拡張機能について相談があります。

既存の配列 Mat A があるとして、これを画面のビットマップに見立ててください。
画面ビットマップなので、{127,63}→Dim Mat A で領域確保しています。

され、このビットマップの周囲の空白を削除する機能、トリミング機能とでも言いましょうか? そんなコマンドは出来ないものでしょうか?

画面全域のピットマップ配列から、On になっている(要素が0以外)ピクセルだけを最小の長方形範囲で切り出して出力する機能です。

結構な計算量になるので動作が重くなりそうです。すみません、まだ既存のコマンドを使ってディスクリートで作っておらず(??意味分かりますよね??)、思案中です。できればICチップみたいにコマンドがあれば良いなぁ...と

例えば、

DotPやDotGと同じく物理座標系コマンドで、

DotT(Mat A[x,y],X,Y)→Mat B

Mat A[x,y]の位置から [x+X,y+Y]までをトリミング対象とし、
事前に {X,Y}→Dim Mat B を記述(或いはこの機能も内蔵してしまう)し、
コマンド動作後は、Mat B はトリミング結果のビットマップ配列、X と Y は Mat Bの配列サイズを格納する

...こんな感じ...

ご検討頂けませんか?

=====

ところで、「アドイン版 Casio Basic」という名称へのsentaro様のこだわりを感じているので、私もそれに倣ってこの名称で新しいカテゴリを作りました。

一方で、"CBasic" という名称にはどんな感覚をお持ちでしょうか?

CBasic は、多分私が言い出したと思っています。Casio Basic 上位互換で、簡潔な表記だし、Cで作るアドインで、将来は Compiler にもなるから、「C」がポイントと感じていて、だから C + Basic で CBasic なんです。

但し、CBASIC で検索したら、以下が出てきました。
・ https://en.wikipedia.org/wiki/CBASIC
・ http://www.dvorak.org/blog/whatever-happened-to-cbasic/

CBASICはどうなった?なんて記事もあるくらいなので、今は無き CBASICかも知れません。商標とか引っかかるのもつまらないし、CBASICファンだった方にも申し訳ない。

"C BASIC" や "C-Basic" というキーワードでの検索で出てくるのは、「Cの基礎」みたいなものばかりです。

そこで、今ならまだ変更しても余裕でOKな気がしますし..."C-Basic"、"C:Basic" なんてのはどうでしょうか?

面白いのが、C:Basic で検索すると file:///C:/basic を検索することになって、"C:Basic" と" で括らないと検索できないことに改めて気付きました。

お茶目に、検索にかかりにくいのを使って、「検索するときは "C:Basic"としてください」と注釈を入れるという...個人的にはこれが好みです...

お考えをお聞かせください。

Getkey1 と Getkey2

sentaro様

> それから、キーバッファをクリアしてから入力するGetkey2を追加しました。
> 最初のCaptureが利用できないGetkey1の仕様を追加しました。
> これはGetkey1がSH3機で上手く動作しない場合があるためで、その場合はGetkey1の代わりにGetkey2を使用してください。

既に Ver 0.72 をインストールしていますが、Getkey1 で入力待ちになっている時に [SHIFT][7](CAPTURE) ができますが、これは改善結果ということで良いですか?

Getkey2 のキーバッファークリアですが、例えばプログラム起動直後に Getkey1 を使う、或いは何かのキー入力で画面更新直後に別のキー入力をさせうような場合ですと、[EXE]や他のキーを検出してしまう問題があります。

このようなケースでは、
While Getkey
WhileEnd

の2行でキーアップ検出する関所を設けています。

その代わりに、Getkey2 を使えばOK、つまりキーバッファをクリアした後入力待ち動作をするという使い方ができそうです。

それなら、SH3以外でも利用価値がありそうです。

CBasic ver.0.72でシステムエラー

sentaro様

Ver0.72 でDotP を使ってLCDでなくて配列へコピーするコードを書いて動作させて、プログラムリストでいきなり一番下のファイルまでカーソルが飛んだ瞬間、システムエラー。

電卓をリスタートして復帰。ところが作っていたファイルを実行或いは編集させようとしても、Can't find file エラーでどうにもなりません。ファイルが壊れたようです。

DotP で配列へコピーは、実は一度もうまくいった事がなく、使わずにいたのですが、今回正しい使い方を突き止めようと触っていたら、Syntax ERRORが何度もでて、そのうちシステムエラー。

間違った使い方を繰り返したのが原因の可能性ありますが、システムエラーの前に、通常エラーで止まったほうが良さそうです。

アドイン版CasioBasic ver.0.73 テスト版 その7.3(DotTrim&バグ修正版)

管理人様、こんにちは!

>ところで、サーチの際 [F5](A<>a) と [F6](CHAR) となっていますが、これらを1つ左へずらせませんか?

言われてみればそうでした。ってことでこれはサクッと修正です。

>それから、CLIP&PASTE 機能でソースからサーチ文字列へコピーできませんか?仕様上1行以内の範囲なら、可能ではないでしょうか?

はい、これもサクッと修正してみました。

>併せて、readme1.txt の改訂も御願い致します(^^;)

ちょこっと改訂しました。
全面的改訂は少しお待ちくださいませ(^^;


>CLIP&PASTE 機能追加で超えちゃってください(^_^)/

管理人様に超えたと感じていただければOkですね(^^)

>DotPやDotGと同じく物理座標系コマンドで、
>DotT(Mat A[x,y],X,Y)→Mat B

管理人様の仕様でDotTrim(コマンドを実装してみました。

DotTrim(Mat A, x1,y1,x2,y2)→Mat B
Mat配列内の[X1,y1]-[x2,y2]範囲の0ではないデータの矩形領域をトリミングしてMat B配列にコピーします。
コピーする配列が確保されてない場合は新たに確保されます。

DotTrim(px1,py1,px2,py2)→Mat A
こちらはLCD画面からトリミング入力ですが、
LCDの(px1,py1)-(px2,py2)の範囲のドットが打たれている矩形領域をMat A配列にコピーします。
矩形領域サイズ(Mat配列の確保サイズ)はX,Y変数に自動的に入ります。

こんな感じでいかがでしょう?


>ところで、「アドイン版 Casio Basic」という名称へのsentaro様のこだわりを感じているので、私もそれに倣ってこの名称で新しいカテゴリを作りました。

上手いネーミングが思いつかなかったのでとりあえず安直に「アドイン版 Casio Basic」となってます(^^;


>一方で、"CBasic" という名称にはどんな感覚をお持ちでしょうか?

CasioBasicの省略形、そしてCをベースにしたBasicで、CBasicという感覚は管理人様と同じですね。
昔のCASIO製のパソコンに搭載されていたBASICはCA-BASICとなってましたので、そういう流れも感じますね。
正式な名前はおいおい考えればいいかなと思ってたのでアイコンは単にCBasicにしてあったのですが、

>但し、CBASIC で検索したら、以下が出てきました。

従来からある名称だったのですね(^^;
これは英文字一文字だけなのでシンプルさゆえに仕方ないところですね。

>お茶目に、検索にかかりにくいのを使って、「検索するときは "C:Basic"としてください」と注釈を入れるという...個人的にはこれが好みです...

それ名案です!
それでいきましょう(^^)
今のところはインタプリタだけなので「C.Basic」というところでしょうか(笑)


>既に Ver 0.72 をインストールしていますが、Getkey1 で入力待ちになっている時に [SHIFT][7](CAPTURE) ができますが、これは改善結果ということで良いですか?

はい、キーバッファのクリアをすると機能しなくなるのでSDKに合わせたシンプルな方がGetkey1ですね。
Getkey1コマンド実行前にキーバッファクリアするのを追加したのがGetkey2となります。


>DotP で配列へコピーは、実は一度もうまくいった事がなく、使わずにいたのですが、今回正しい使い方を突き止めようと触っていたら、Syntax ERRORが何度もでて、そのうちシステムエラー。

すみません、Mat配列のアクセス関連でちょっとバグってたようです(^^;
今回のバージョンで直ったかどうか細かなチェックができてないのでまだ怪しいところですが、
とりあえずテストお願いします。


アドイン版CasioBasic ver.0.73 テスト版 その7.3(DotTrim&バグ修正版)
http://pm.matrix.jp/CB/CBASIC073.zip

0.73差し替えです

0.73差し替えです。

ちょっとブレイク

sentaro様

素早い Ver 0.73 の公開、ありがとうございます。

只今、仕事が目茶苦茶立て込んでいて、評価に手が回りません。
来週の海外出張の飛行機の中で、じっくりと触る予定です(なんせ長いフライトなもんで...)。

名称 C:Basic でいきますね。

インタプリタ版が C.Basic で点が一個無いのは、ナイスです!
即、採用させて頂きました。

とりあえず、インタプリタ版が C.Basic で、コンパイラ導入版が C:Basic ということで、C:Basic プロジェクトのエントリーとライフゲームのエントリーは、表記を変更しました(^^;


コマンド名変更;
- DotP ⇒ DotPut
- DotG ⇒ DotGet

について、手元のライフゲームは、これに対応して Ver 0.73 にして、来週出張先のホテルからでも、アップして記事を更新しようと思います。


思えば、昨年も一昨年も、丁度同じ週に海外におりました。

2013年は、ロサンゼルスの量販店での fx-9860GII や fx-CG10 の価格チェック(&易ければ購入)を忘れたというイタイ経験が...

この時は、滞在中に素因数分解の話題について読者の方からご指摘とご提案を頂いて、ホテルの部屋で fx-5800P の画面と睨めっこしてたのを思い出します。

2014年は、ドイツのハンブルクで 現地の量販店をチェックしたら、グラフ関数電卓を置いていなくて、fx-5800P やスタンダード関数電卓のみ、それもカシオ機以外は置いていないというレポートをしたと思います。

私のプログラム電卓ライフも、ずいぶん遠くに来たものです(^_^)/
1年前は、今の状況を想像もできていませんでした。


=====

ところで、行列と配列ですが、純正 Casio Basicとの互換性を考えると、Mat はデフォルトで行列とすべきかも知れませんね。
その代わり、何かサフィックスを付けて 配列<-->行列の設定を自由に出来るのが良いように思えてきました。
例えば、

Mat A はデフォルトでは行列。
但し、一例として、[.a] で配列(arrray)、[.m] で行列(matrix) などして、
Mat A.a は配列並び、Mat A.m で行列並びに切り替える...

という感じは、どうでしょうか?

あ、要素の型も入れたら、

Mat A.ab とか Mat A.ba で整数要素の配列、といったようにしないといけませんね。

ビットマップコマンドの DotPut、DotGet、DotoTrim はこれまでの配列並びとして良いと思います。



再び、Ver 0.73 差し替えです(^^;

管理人様、こんにちは!

DotGetとDotPutに関して、またちょこちょことバグが見つかったので修正していたら、
あろうことか、新規プログラムが一文字も入力できないことになっていたので修正です。
新規ファイルが作れなくなっていたのはVer 0.71からエンバグしていたようです(^^;

動作上、ちょっと致命的なバグばかりなので、差し替えでVer 0.73を再アップしました。


>只今、仕事が目茶苦茶立て込んでいて、評価に手が回りません。
>来週の海外出張の飛行機の中で、じっくりと触る予定です(なんせ長いフライトなもんで...)。

海外の電卓事情に触れる機会もあるとよいですね(^^)
あわよくばCG10が安価で売られていたり?


>名称 C:Basic でいきますね。

ありそうでないネーミングがなかなかよいですね。
普通に検索できないというのもなかなかにツボです(^^)


>私のプログラム電卓ライフも、ずいぶん遠くに来たものです(^_^)/
>1年前は、今の状況を想像もできていませんでした。

私も今の状況は全く想像もできてなかったですね。
まさか、電卓でインタプリタ(+コンパイラ)を作成するようなことになるとは…、
とても一人で完遂できるプロジェクトではないので、管理人様の手厚いサポートにはいつも感謝しています(^^)


>ところで、行列と配列ですが、純正 Casio Basicとの互換性を考えると、Mat はデフォルトで行列とすべきかも知れませんね。

はい、Matは行列なので、基本仕様はどこまでいっても行列ということになりますよね。
配列として流用する場合は、Mat A[m,n]=Mat A[Y,X]なので
配列Mat A[X,Y]で使いたい場合に縦横が逆になって都合が悪いわけです。
今のC.Basicでは縦横を逆に表示可能にすることでそれに対応しているのですが、
それを明示的に指定するということですね。
将来的に行列機能を実装した場合に型指定を追加してみたいと思います(^^)

Re: 再び、Ver 0.73 差し替えです(^^;

sentaro様

緊急差し替え版アップ、お疲れ様です。

先ほど、これを頂いて電卓へ転送しました。動作確認は明後日の飛行機の中でじっくりとやらせて頂きます。


> 新規ファイルが作れなくなっていたのはVer 0.71からエンバグしていたようです(^^;

私が触っている限り、Ver 0.71では新規ファイルでトラブルを経験せず、Ver 0.73 の前の版では、新規ファイルでシステムエラーを経験しました。Ver 0.71では運が良かったのかも知れません。


> 海外の電卓事情に触れる機会もあるとよいですね(^^)
> あわよくばCG10が安価で売られていたり?

おっとぉ、背中がグィと押されてしまいました...

11/22(日)に時間が取れそうなので、現地で量販店視察をしようかと...
帰りにどうなっているのかは、お楽しみ、ということで(^^;


> >名称 C:Basic でいきますね。
>
> ありそうでないネーミングがなかなかよいですね。
> 普通に検索できないというのもなかなかにツボです(^^)

ばい、普通に検索できないところがポイントです!


> 私も今の状況は全く想像もできてなかったですね。
> まさか、電卓でインタプリタ(+コンパイラ)を作成するようなことになるとは…、
> とても一人で完遂できるプロジェクトではないので、管理人様の手厚いサポートにはいつも感謝しています(^^)

なんだか、昔の NIFTY-Serve を思い出してしまいます。
ソフトウェア・ギャラリーというフォーラムに出没しておりました。
NIFTYは、sentaro様もご存じでしょう?


> はい、Matは行列なので、基本仕様はどこまでいっても行列ということになりますよね。
> 配列として流用する場合は、Mat A[m,n]=Mat A[Y,X]なので
> 配列Mat A[X,Y]で使いたい場合に縦横が逆になって都合が悪いわけです。
> 今のC.Basicでは縦横を逆に表示可能にすることでそれに対応しているのですが、
> それを明示的に指定するということですね。
> 将来的に行列機能を実装した場合に型指定を追加してみたいと思います(^^)

はい、よろしく御願い致します。


今日、明日、そして明後日の出国直前まで仕事です(/_;)

fx-CG10 PRIZM (追記あり)

sentaro様

> 海外の電卓事情に触れる機会もあるとよいですね(^^)
> あわよくばCG10が安価で売られていたり?

ちょっと気になって、調べていたら fx-CG10 が $100.01
http://www.walmart.com/ip/Casio-PRIZM-FXCG10-Graphing-Calculator/15657837

ウォルマートのネットサイトなので、店頭価格ではないのでしょうが、やはり安いです。
今 1ドル=123円として¥12,300。Amazonに出店しているジョーシン価格で ¥19,148。
日本国内の保証がグレーなのですが、大きく心がうごかされます。

ちなみに、fx-9860GII が $65.13 なので、およそ¥8010。一時期のAmazonではこのレベルまで下がったことがありますが、今は並行輸入品でも¥13,000程度。

気になっていた HP 50g が まだ売られていて、$60.54。これも悩まされます。

今からネットで注文しておいて、現地のウォルマートで受け取り...なんてできたら、さらに迷いそう...

fc-CG10 + HP 50g で、締めて¥19,745 程度、Amazonでfx-CG20 1台買うのとほぼ同じ....


ああ、今はこんなことに悩んでいる暇は無いのですが....


ところで、昨晩ふと気になって、C:Basic の表記を全部小文字にした方がクールかもしれない...と、試しに C:Basic プロジェクトの記事で、c:basic や c.basic に置き換えてみました。

今、改めて見てみると、c:basic や c.basic はイマイチな感じなので、また元に戻しておきました。但しフォントを決めずに一概にどちらが良いか悪いかというのも決められないのですけど...

ま、一種のロゴ遊びなんですが、あまりバカにできないのもロゴの力ですので、気になっています。

c:basic とか、c:Basic とか、c:BASIC とか、比べてみると結構印象が違って見えますちよね!

Re:fx-CG10 PRIZM (追記あり)

管理人様、こんにちは!

Ver.0.73の補足です。
DotTrim(コマンドは実行後にはX,Yにはトリミングサイズ、小文字のx,yにはトリミング開始の始点x,y座標が入ります。


>11/22(日)に時間が取れそうなので、現地で量販店視察をしようかと...
>帰りにどうなっているのかは、お楽しみ、ということで(^^;

お!、量販店視察は期待大ですね(^^)


>なんだか、昔の NIFTY-Serve を思い出してしまいます。
>ソフトウェア・ギャラリーというフォーラムに出没しておりました。
>NIFTYは、sentaro様もご存じでしょう?

パソコン通信時代はネットに繋げていなかったので、ちょっとというか完全に出遅れました(^^;
後でNIFTYの話を聞くたびに羨ましかった思いがありますね。


>fc-CG10 + HP 50g で、締めて¥19,745 程度、Amazonでfx-CG20 1台買うのとほぼ同じ..

現状、日本では不可能に近い価格なのでこれはもうほぼ決まりですね(^^)
もしかしたら…NspireCX CASを見かけてまた悩んでしまうというのもあるかもですが…(^^;


>c:basic とか、c:Basic とか、c:BASIC とか、比べてみると結構印象が違って見えますちよね!

そうですね。
さらに、一文字だけ大文字とか小文字とかにするのもありでしょうか。
フォント&ロゴに関しては管理人様にお任せしたいと思います(^^)

Re: Re:fx-CG10 PRIZM (追記あり)

sentaro様


無事に到着し、今日しか自由時間がとれそうにないので、量販店のチェックをやってきました。

近くには Walmart が3店舗あったので見て回りましたが、グラフ電卓はTIのみしか置いていませんでいた。Casioは関数電卓のみ。さすがアメリカと思ったのですが、HP機は Prime しか置いていませんでした。


> パソコン通信時代はネットに繋げていなかったので、ちょっとというか完全に出遅れました(^^;
> 後でNIFTYの話を聞くたびに羨ましかった思いがありますね。

当時は、PC-VAN も有りましたね。


> さらに、一文字だけ大文字とか小文字とかにするのもありでしょうか。
> フォント&ロゴに関しては管理人様にお任せしたいと思います(^^)

はい、では少し検討させていただこうと思います。但し、C:Basic が最有力です。


No title

管理人様、おつかれさまです。

無事到着されて何よりです。

>近くには Walmart が3店舗あったので見て回りましたが、グラフ電卓はTIのみしか置いていませんでいた。Casioは関数電卓のみ。さすがアメリカと思ったのですが、HP機は Prime しか置いていませんでした。

うわ、北米ではCASIOのグラフ電卓は店頭撤退状態ですか…。
HPもPrimeのみとは…ほとんどTI独占状態なのですね。
欧州方面でもCG20は試験対応の後継機が出てないので在庫分は投げ売りされてたりとかで、今後は中国か日本だけしか見かけないことになるのかもですね(^^;
CG10/20はカラー版CasioBasic機なのでなんとか継続して欲しいところです。

Walmart の次は BestBuy

Sentaro様

Walmart以外で、アメリカで有名な量販店に BestBuy があります。仕事で訪問先の人に聞いたところ、会社の近くにある BestBuy は品揃えが豊富でカシオ機も置いている可能性が高いと教えて貰いました。

そこで、時間があれば BestBuyで調査してみようと思います。お楽しみに...



Re: Walmart の次は BestBuy (追記あり)

> Sentaro様
>
> Walmart以外で、アメリカで有名な量販店に BestBuy があります。仕事で訪問先の人に聞いたところ、会社の近くにある BestBuy は品揃えが豊富でカシオ機も置いている可能性が高いと教えて貰いました。
>
> そこで、時間があれば BestBuyで調査してみようと思います。お楽しみに...


(追記)

ネット販売の Bestbuy.com で調べて見たところ、$147 もすることが判明。
http://www.bestbuy.com/site/searchpage.jsp?st=Casio+fx-CG10&_dyncharset=UTF-8&id=pcat17071&type=page&sc=Global&cp=1&nrp=&sp=&qp=&list=n&iht=y&usc=All+Categories&ks=960&keys=keys

あまり時間がとれそうにないので、無理してまで行くこともなさそう....ということで時間があれば...と予定変更です。

BestBuyも店頭には無かった(/_;)

sentaro様

昨日帰国しましたが、現地は Thanks Giving 連休が木曜から始まるので、どこも水曜がほぼ半日勤務で、午後は道路も空港も激混みの状態でした。ココは、連休初日に激混みになる日本と違って、さすがアメリカと言うべきでしょうか?

連休初日に現地を離れて帰国したのですが、本当に道路は空いていました。ホテルから空港へ向かう際、直線道路で目の前に1台も車が見えないという、車社会アメリカでは異常とも言える光景でした。ただ、空港は、それでも移動する人で国内線のターミナルは結構な混雑でした。

で、水曜の夕方に BestBuy に立ち寄ったのですが、関数電卓は Casio 機が置いてありましたが、プログラム電卓はTIのみという状況。

なので、次回アメリカへゆく機会があったら、予めネットで購入して発送先を訪問先の会社にしておいて、親しい人宛にしておくという技を使うのが一番良いという結論になりました。これは今回訪問した会社の社長からの提案なので、次回同じ会社を訪問する際には実行しようと思います。この社長とはいわゆる飲み友達なので、こんな話しが可能でして、かなり親しくないと使えない手ではありますケド...


...ということで、今回は手ぶらで戻って参りました。

アドイン版CasioBasic ver.0.74 テスト版 その7.4(バグ修正版)

管理人様、北米出張おつかれさまでした。

>で、水曜の夕方に BestBuy に立ち寄ったのですが、関数電卓は Casio 機が置いてありましたが、プログラム電卓はTIのみという状況。

大手でこの状況だと、もはや店頭ではCASIOのグラフ電卓は見られ無くなっているのですね。
TI84CEシリーズへの対抗機種のアナウンスもない状況なので、今後も北米ではかなり厳しいでしょうか。


>なので、次回アメリカへゆく機会があったら、予めネットで購入して発送先を訪問先の会社にしておいて、親しい人宛にしておくという技を使うのが一番良いという結論になりました
ネットしか在庫がないというのが今の北米事情という感じですけど、店頭在庫が無い以上はその方法が一番よさそうですね。



C:Basicにいくつかバグが見つかったので修正版です。

アドイン版CasioBasic ver.0.74 テスト版 その7.4(バグ修正版)
http://pm.matrix.jp/CB/CBASIC074.zip

エディタで一行の文字数が6行よりも多くなった場合にカーソル移動が異常になるバグを修正しました。
アイコンをC.Basicに変更しました(^^)

Re: アドイン版CasioBasic ver.0.74 テスト版 その7.4(バグ修正版)

sentaro様

さっそく、Ver 0.74 を頂きました。

> エディタで一行の文字数が6行よりも多くなった場合にカーソル移動が異常になるバグを修正しました。
> アイコンをC.Basicに変更しました(^^)

あ、やはりバグだったのですね。行末のカーソルを下矢印で移動させると2行飛んだりしていたので、あれっ?と思っていましたが、きれいに直っていました。小さなストレスを感じていたのですが、これでスッキリです。

あと、アイコンは C.Basic の表記に加えて、恰好よくなりましたね!



C:Basic のエントリーで最新の Ver 0.74 に差し替えておきますね。




> >なので、次回アメリカへゆく機会があったら、予めネットで購入して発送先を訪問先の会社にしておいて、親しい人宛にしておくという技を使うのが一番良いという結論になりました
> ネットしか在庫がないというのが今の北米事情という感じですけど、店頭在庫が無い以上はその方法が一番よさそうですね。

ええっと、Casio fx-7000番台の古いのはあったりしましたが、結構高いので驚きました。

ソルトレイクシティーという、まぁある意味田舎なので、都会では事情が違う可能性はあります。


DotTrimについて

sentaro様


Ver 0.74 の readme_J.txt ですが、DotTrimが返す X, Y , x, y の説明を追加して更新されませんか?


さて、DotTrim で返す x, y ですが、本来の値からそれぞれ+1だけズレているようです。

時差ボケで、私の頭がズレていないと良いのですが...


//初期設定
{127,63}→Dim Mat B
64→X:32→Y

//パターンをMat B に書き込む
0→Mat B
1→Mat B[X,Y-1]
1→Mat B[X+9,Y-1]
1→Mat B[X,Y]
1→Mat B[X+1,Y]
1→Mat B[X+2,Y]
1→Mat B[X+3,Y]
1→Mat B[X+4,Y]
1→Mat B[X+5,Y]
1→Mat B[X+6,Y]
1→Mat B[X+7,Y]
1→Mat B[X+8,Y]
1→Mat B[X+9,Y]
1→Mat B[X,Y+1]
1→Mat B[X+9,Y+1]
// 画面クリア後、Mat B を画面に描画
Cls
FotPut(Mat B[X,Y-1],X,Y-1,X+9,Y+1)◢

// 表示パターンを Mat D に取り込む
DotTrim(1,1,127,63)→Mat D
// 画面消去後、Mat D を画面に描画
Cls
DotPut(Mat D[1,1],x,y,x+X-1,y+Y-1)


最後に描画した Mat D のパターンは、最初の Mat B の描画パターンと重なると思うのですが、右下に1ドットずれます。

ご検討頂けますか?


Re:DotTrimについて

管理人様、こんにちは!

>あ、やはりバグだったのですね。行末のカーソルを下矢印で移動させると2行飛んだりしていたので、あれっ?と思っていましたが、きれいに直っていました。小さなストレスを感じていたのですが、これでスッキリです。

はい、思いっきりバグが残ってました(^^;
エディタは結構複雑な動作になってしまってるので、もしかしたらまだ何かおかしな動作になる可能性もありますが、とりあえずはだいじょうぶだと思います(^^)


>あと、アイコンは C.Basic の表記に加えて、恰好よくなりましたね!

ありがとうございます!
管理人様のネーミングセンスのおかげですね(^^)
一日も早くフルスペックのC:Basicになるようにバージョンアップを重ねないとですね。


>C:Basic のエントリーで最新の Ver 0.74 に差し替えておきますね。

毎度お手数おかけします。


>Ver 0.74 の readme_J.txt ですが、DotTrimが返す X, Y , x, y の説明を追加して更新されませんか?

簡単ですが追加修正しておきました。


>さて、DotTrim で返す x, y ですが、本来の値からそれぞれ+1だけズレているようです。

LCDからのトリミングがずれていました(^^;
ので、早速修正して、0.74を差し替えました。

再度0.74差し替えです(^^;

ちょいミスで再度0.74差し替えです(^^;

Re: 再度0.74差し替えです(^^;

sentaro様

再度差し替え版 Ver 0.74 を頂きました。

DotTrimのLCDからの取得については、バグ修正確認しました。

ありがとうございます。


DotGet と DotTrim はもう少し、使い込んでみますね。


Re: Re:DotTrimについて

sentaro様


> >Ver 0.74 の readme_J.txt ですが、DotTrimが返す X, Y , x, y の説明を追加して更新されませんか?
>
> 簡単ですが追加修正しておきました。


ええっと、Ver 0.74 の更新履歴の中の記述について、以下のように修正したものを C:Basic の記事で掲載しておきました。

DotTrim(px1,py1,px2,py2)→Mat A
LCD画面からトリミング入力の場合に
0ではないデータの矩形領域の左上 x, y の座標が+1ずれていたのを修正しました。


これで、良いですよね?

Re:Re: Re:DotTrimについて

管理人様、こんにちは!

>ええっと、Ver 0.74 の更新履歴の中の記述について、以下のように修正したものを C:Basic の記事で掲載しておきました。
>これで、良いですよね?

はい!お手数おかけしました。

今のところ、新規コマンドは暫定仕様なので
リファレンスはまた仕様が固まったら改めてということで(^^;

Re: Re:Re: Re:DotTrimについて

sentaro様


> 今のところ、新規コマンドは暫定仕様なので
> リファレンスはまた仕様が固まったら改めてということで(^^;

そうですね、今後の独自機能追加に伴って、仕様の見直しもありそうですし...

ところで、ライフゲームを作ってみて、C.Basic がインタプリタにも関わらず、ここまで高速なのには驚くとともに、嬉しくなってきます。

そこで、ついついストライプ機能があれば、かなり使い手がでてくるのでは、と思ってしまいます。先ずは、DotTrim でビットマップ情報から、対象ビットマップの最小限の配列データと、その位置とサイズが得られるのは大きいです。で、ストライプが使えるともっと楽しくなりそうだというわけです。

例えば、ビットマップの移動や回転を高速かつ楽にコーディングできたらいいな...といった感じです。

配列が正方配列(行列)でない場合、大きめの正方配列を作っておいて、回転データを作ることをやってみています。その過程で、システムエラーや LCDからのDotTrimでの1ドットずれが見つかったというわけなんですが...

例えば任意のビットマップ配列から、最小の正方配列を作る独自拡張機能があると、ビットマップ回転には便利になると思います。

アニメ表示のために、ビットマップ切り替え(ストライプ)が出来たらもっと楽しくなるかも知れませんね!

CellSum で実感したのは、配列計算を独自拡張機能でやると、格段に処理速度が速くなることです。なので、こんなことを申し上げています。

アドイン版 C.Basic ver.0.80 テスト版 その8(若干高速化版)

管理人様、こんにちは!

年末モードでちょっとバタバタしております(^^;

>ところで、ライフゲームを作ってみて、C.Basic がインタプリタにも関わらず、ここまで高速なのには驚くとともに、嬉しくなってきます。

どうもありがとうございます!
速度に関しては、そもそもCasioBasicが多機能ゆえの速度低下とUSB関連で足を引っ張られてさらに遅くなっていることもあって、初期の段階では5倍速くらいになれば良いかなとと考えていたところ、予想以上に高速に動作して結果的に10倍以上という高速動作ができました。
変数名やラベルが1文字限定とか、Casio Basicのシンプルな基本仕様も好都合だった感じですね。


>例えば、ビットマップの移動や回転を高速かつ楽にコーディングできたらいいな...といった感じです。

自在に移動回転が出来るようになるといろいろと面白そうですね(^^)


>アニメ表示のために、ビットマップ切り替え(ストライプ)が出来たらもっと楽しくなるかも知れませんね!

具体的なコマンド仕様が固まれば試しに実装してみます(^^)


>CellSum で実感したのは、配列計算を独自拡張機能でやると、格段に処理速度が速くなることです。

SHネイティブでコンパイラが動くようになればプログラムで独自拡張コマンド並みの速度が出せると思われるので、早くコンパイラ実装を進めないとですね。

その前に、インタプリタでどこまで高速化出来るかということでちょこっと高速化してみました。

アドイン版 C.Basic ver.0.80 テスト版 その8(若干高速化版)
http://pm.matrix.jp/CB/CBASIC080.zip

式評価の改善とIfコマンドでのジャンプ先サーチでキャッシュを使用するようにしてみました。
式評価の改善は単項式と2項式の評価を単純化して軽くしました。
その結果、単純な式評価で最高2倍位の速度アップが可能になる代わりに、3項以上の式だと若干オーバーヘッドが出て以前よりも遅くなることがあります(^^;
これの回避策としては括弧( )を使ってすべての式を2項の式として評価させるようにします。

A+B×C
は3項の式ですが、()を明示的に使って単項としてまとめて、
A+(B×C)
2項式の形にすれば従来より遅くなることはありません。
乗算の省略は遅くなるので明示的に×を使うのが裏技です。

というのが今回のバージョンでの特徴ですが、コンパイラになればあまり意味のない裏技とはいえ、ライフゲームでは2倍以上速くなってると思います(^^)

Re: アドイン版 C.Basic ver.0.80 テスト版 その8(若干高速化版)

sentaro様

> 年末モードでちょっとバタバタしております(^^;

この時期、しかたありませんよね。


> 速度に関しては、そもそもCasioBasicが多機能ゆえの速度低下とUSB関連で足を引っ張られてさらに遅くなっていることもあって、初期の段階では5倍速くらいになれば良いかなとと考えていたところ、予想以上に高速に動作して結果的に10倍以上という高速動作ができました。
> 変数名やラベルが1文字限定とか、Casio Basicのシンプルな基本仕様も好都合だった感じですね。

USB関連というところにチョット興味ありです。


> その前に、インタプリタでどこまで高速化出来るかということでちょこっと高速化してみました。
>
> アドイン版 C.Basic ver.0.80 テスト版 その8(若干高速化版)
> http://pm.matrix.jp/CB/CBASIC080.zip


C.Basic Ver 0.80 をいただき、処理速度向上を実感しています。
その結果を以下にまとめました;

・C:Basic プロジェクト:http://egadget.blog.fc2.com/blog-entry-491.html

・ライフゲーム:http://egadget.blog.fc2.com/blog-entry-492.html

ライフゲームについて、USBに刺した状態と刺さない状態で比較したのですが、USBに刺してた状態でも速度が変わりません。
C.Basic ではその影響が出ていない模様です。純正Casio Basicでは影響があるのは承知しています...

...なので、USBの影響とは...に興味ありです。


> 式評価の改善とIfコマンドでのジャンプ先サーチでキャッシュを使用するようにしてみました。
> 式評価の改善は単項式と2項式の評価を単純化して軽くしました。
> その結果、単純な式評価で最高2倍位の速度アップが可能になる代わりに、3項以上の式だと若干オーバーヘッドが出て以前よりも遅くなることがあります(^^;
> これの回避策としては括弧( )を使ってすべての式を2項の式として評価させるようにします。
>
> A+B×C
> は3項の式ですが、()を明示的に使って単項としてまとめて、
> A+(B×C)
> 2項式の形にすれば従来より遅くなることはありません。
> 乗算の省略は遅くなるので明示的に×を使うのが裏技です。
>
> というのが今回のバージョンでの特徴ですが、コンパイラになればあまり意味のない裏技とはいえ、ライフゲームでは2倍以上速くなってると思います(^^)


これまでは、極力If文を使わないようにコーディングしていました。というのも、⇒に比べてIfは10倍遅いと伺っていたからです。現状で、Ifはどのくらい速くなる目算でしょうか?
仮にIfが倍速になっても、依然として ⇒ の方が速いわけでから...

横着ですみません、実測すれば良い話しですけれど....いずれ以前やったのと同じ手法で実測してみようと思います。
2項式が速くなったというのは、覚えておく必要ありますね、ここ重要!!



> >例えば、ビットマップの移動や回転を高速かつ楽にコーディングできたらいいな...といった感じです。
> 自在に移動回転が出来るようになるといろいろと面白そうですね(^^)
>
> >アニメ表示のために、ビットマップ切り替え(ストライプ)が出来たらもっと楽しくなるかも知れませんね!
> 具体的なコマンド仕様が固まれば試しに実装してみます(^^)

そうですね。私の手元でも何かサンプルプログラムを作ってみようとは思っています。それをベースに比較がでると面白いかも知れません。

(ここのところ、プログラミングに時間が取れずにおりますが...)


> SHネイティブでコンパイラが動くようになればプログラムで独自拡張コマンド並みの速度が出せると思われるので、早くコンパイラ実装を進めないとですね。

そこが、当初の狙い目ですよね。C.Basic インタプリタで追加した独自拡張機能ですが、コンパイラ実装時に外部ライブラリとして追加するといったこおとは可能でしょうか?

それが出来れば、今後他の方による新しいライブラリ作りの参考になりそうに思うのですが、如何でしょうか?
いきなり敷居を上げるようなことを申し上げて、すみません(/_;)

ライフゲームの高速化を見ておりますが、当初難しいだろうと思っていたFFTライブラリなども可能性を帯びてきている感じですので...



Re: アドイン版 C.Basic ver.0.80 テスト版 その8(若干高速化版)

sentaro様

そういえば、当ブログのサブタイトルがチョット変更されています(多分11月初旬に)...

e-Gadget - プログラム関数電卓
プログラム電卓の濃い話: 今は fx-5800P / fx-9860GII と Casio Basicプログラミングが中心

readme_J.txt で修正していただければ有り難いです。


C:Basicプロジェクトのエントリーでは修正しております。

Re:Re: アドイン版 C.Basic ver.0.80 テスト版 その8(若干高速化版)

管理人様、こんにちは!

>USB関連というところにチョット興味ありです。
>...なので、USBの影響とは...に興味ありです。

CasioBasicや標準装備のアプリでUSBを挿した時に速くなる、逆にいえばノーマルでは本来の速度よりも遅くなってしまっているということだったのですが、これはアドインでは無関係なのでC.Basicの優位な点でもありますね(^^)
GIIタイプではSH4A機だけでなくSh3機でも遅くなる傾向があるのでGII以降でのUSB周りの仕様みたいです。
アドイン実行時(キー入力待ち以外)はUSBを挿しても無反応なので、アドインではUSBチェックは自前でしなければいけないということになります。


>C.Basic Ver 0.80 をいただき、処理速度向上を実感しています。
>その結果を以下にまとめました;
>・C:Basic プロジェクト:http://egadget.blog.fc2.com/blog-entry-491.html
>・ライフゲーム:http://egadget.blog.fc2.com/blog-entry-492.html

早速にありがとうございます!
こうして比べると整数モードを追加した時よりも高速化効果が出てる感じですね。
円周率計算で見るとあと少しで20倍速もいけそうです(^^)


>これまでは、極力If文を使わないようにコーディングしていました。というのも、⇒に比べてIfは10倍遅いと伺っていたからです。現状で、Ifはどのくらい速くなる目算でしょうか?
仮にIfが倍速になっても、依然として ⇒ の方が速いわけでから...

んと、10倍違うのはIfと⇒ではなくて、Ifと⇒を使ったループよりもDsz/Iszを使ったループが10倍速くなるということですね。

例えば、
A=1000
Lbl 0
A+1→A
If A<1000 : Then Goto 0

の最後を
A<1000⇒Goto 0
に変えても3割増し位の違いしか無いです。

Ifが遅くなる原因はElseやIfEndまでの間が長くなった場合にコマンドを読み飛ばすことに時間がかかるためで、
その場合には1コマンドしか飛び越す必要のない⇒の方が10倍速くなるということはあり得ます。
そこで、今回その読み飛ばし時間を短縮するために飛び先をキャッシュして、次回はそれを参照するようにして高速化を図ったわけですが、
高速化の度合いはIf~Endifの間にどれだけコマンドがあるかに左右されるので何倍速くなるかはプログラム次第ですね。
ライフゲームではIf~Endif間がそこそこ長いので効果がかなり出ましたが、単純に読み飛ばした方が速い場合には逆効果になる場合もあります(^^;


>そこが、当初の狙い目ですよね。C.Basic インタプリタで追加した独自拡張機能ですが、コンパイラ実装時に外部ライブラリとして追加するといったこおとは可能でしょうか?
>それが出来れば、今後他の方による新しいライブラリ作りの参考になりそうに思うのですが、如何でしょうか?
>いきなり敷居を上げるようなことを申し上げて、すみません(/_;)

まずはコンパイラ実装ですが、外部ライブラリ機能は拡張機能として付けたいですね。
コンパイルしたユーザープログラムを独自拡張コマンドとして使用出来るようにするのもありですね。


>ライフゲームの高速化を見ておりますが、当初難しいだろうと思っていたFFTライブラリなども可能性を帯びてきている感じですので...

今のところ、実数型コンパイラだとよくて数倍くらいの高速化見通しですが、
整数モードだと桁違いに高速化出来るでしょうからいろいろと可能になるかもしれません。


>e-Gadget - プログラム関数電卓
>プログラム電卓の濃い話: 今は fx-5800P / fx-9860GII と Casio Basicプログラミングが中心
>readme_J.txt で修正していただければ有り難いです。
>C:Basicプロジェクトのエントリーでは修正しております。

毎度お手数おかけしてます。
修正済み版を差し替えアップしておきました(^^)
最新記事
最新コメント
カテゴリ
C# (3)
検索フォーム
Visitors
Online Counter
現在の閲覧者数:
プロフィール

やす (Krtyski)

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


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

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

おもしろい・役に立つならクリックしてください。励みになります。

人気ブログランキングへ


FC2ブログランキングへ


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

リンク
月別アーカイブ
Sitemap

全ての記事を表示する

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

この人とブロともになる

QRコード
QR