C:Basic プロジェクト

アドイン版 Casio Basic
<トップページ>

誤字脱字・記載ミスや分かりにくい表現は随時追記・修正します

動画追加 2015/11/15
改訂 2015/12/06
最終更新 2016/02/11


※ 最新バージョンは <トップページ>からダウンロードできます. 


C:Basic とは?

コーディングが楽な Casio Basic を使って、高速なプログラムを作りたい...
そんな望みに応えるために、Casio Basic が高速で動作する環境をアドインで提供する試みが C:Basic プロジェクトです。

C:Basic: アドインCasio Basic インタープリタ & コンパイラ

現在のところ、インタープリタ C.Basic (ドット1個) の開発段階です。C.BasicC:Basic の一部です。


1. 高速動作
グラフ関数電卓 fx-9860GII の 純正 Casio Basic のグラフィックス描画はとても遅く、127×63 ドットの画面を点で埋めるには、かなり待たされます。また、計算量の多いプログラムも、かなり遅くなります。純正 Casio Basic のプログラムソースをそのまま高速動作できるのがC:Basic です。


2. Casio Basic の上位互換の言語仕様
純正 Casio Basic のソースがそのまま使えることを基本に、より便利になるような機能や高速化を実現するような独自機能を追加してゆきます。


3. 電卓で完結する開発環境
プログラムの作成・編集の全てを電卓上で行えて、パソコン不要の開発環境です。C:Basic はアドインとして提供されます。純正 Casio Basic 準拠のエディタも内蔵して、むしろ純正よりも使いやすくなっていると思います。さらに、作ったプログラムを少ない手数で呼びだせる機能を持たせるなど、fx-5800P を超える利便性を fx-9860GII で実現する開発&実行環境です。
純正 Casio Basic にはないデバッグ機能も搭載 (Ver 0.99以降)。


4. 高速・高性能インタープリタ(+コンパイラ)
・インタープリタで高速動作させたい!
・ビットマップグラフィックスをプログラミングをしたい!
ライフゲーム Ver 0.73 (C.Basic Ver 0.70 ~ 0,99l に対応) / ライフゲーム Ver 0.74 (C.basic Ver 0.63 以降) を作って確認しました。

将来予定しているコンパイラ版の可能性を見るために、ライフゲーム のプログラム中、繰り返し処理で時間のかかる部分を sentaro様がごっそりとコマンド化してみたものを使ってライフゲーム Ver 0.83 (C.Basic Ver 0.73 ~ Ver 0.99l に対応) / ライフゲーム Ver 0.84 (C.Basic Ver 0.93 以降) を作りました。

コマンド化=ネイティブコード化、なのでコンパイラ版に近い処理速度になります。以下の動画で示している初期パターンで517世代までの時間を計ると、この動画(C.Basic Ver 0.73で撮影) の 20倍の高速化、C.Basic Ver 0.83 に対しては10倍の高速化となりました!
コンパイル版のさらなる高速化が期待できそうです。

※ 現在は、インタープリタのみ実装しているので、C.Basic です。コンパイラ実装時には、・が1個増えて C:Basic となります。


▋ プロジェクトメンバー
  • 設計&作成: sentaro様
  • サンプルプログラム作成&テスト、マニュアル&コマンドリファレンス作成: 管理人(私)
  • 有志の方 (2016/02/01時点でアクティブな方: ガノー様)
今のところ、細かいやりとりは e-Gadget 開設2周年 のコメント欄で行われています。
[2015/12/12 追記]
その後の流れで、このエントリーのコメント欄に移ってきた感じ...


C.Basic テスト版

安定(と思われる)最新バージョンはこちらから
  • ZIPファイルで提供
  • ソースファイル(C言語)を公開
  • ソースファイル中にある CBASIC.G1A がアドインプログラム
  • CBASIC.G1A を fx-9860GII へインストール
  • 基本的な使い方は、ソースファイル中にある README_J.txt を参照。大きなバージョンアップの際に更新される傾向。

C.Basic 用サンプルプログラム

 当ブログ掲載の fx-9860GII 用純正 Casio Basic 用プログラムは、C.Basicで動作すると思います。

ここでは、以下の2つのサンプルプログラムで、C.Basicの良さを紹介します。


多桁円周率計算
Casio Basic 互換で動作する

⇒ ダウンロード: 多桁円周率計算プログラム
  - メインプログラムとサブルーチンの2つをダウンロード。
  - 実行は、メインプログラム PICALC5 を起動。

※ 計算量の多い 純正 Casio Basic プログラムをそのまま使って、C.Basic での高速化を評価する事例です。

使い方:
1) Picalc5を起動
2) 計算したい桁数を入力
3) [EXE] で計算開始
4) 計算終了すると、結果表示
5) [EXE] 押すたびに10桁表示
6) 最後まで表示したら [EXIT] でプログラム終了

※ 計算量の多いプログラムを使って、処理速度を評価する事例です。
  • 円周率を100桁、1000桁 と多くの桁まで正しく計算するプログラム。
  • Casio Basic のプログラムは、そのまま c.Basic で動作します。
純正 Casio Basic に比べて C.Basic の高速性が分かります!

<< C.Basic Ver 0.74 >>
実行環境桁数ノーマルクロック
29MHz
オーバークロック
236MHz
Casio Basic10087秒16秒
C.Basic ver 0.741006秒1秒
C.Basic ver 0.741000360秒36秒
※ オーバークロックを併用した時の効果も一目瞭然です。

<< C.Basic Ver 0.80 >>
実行環境桁数ノーマルクロック
29MHz
オーバークロック
236MHz
Casio Basic10087秒16秒
C.Basic ver 0.801004.8秒<1秒 (測定不能)
C.Basic ver 0.801000219秒33秒
※ C.Basic Ver 0.80 で処理速度が向上しています!


ライフゲーム
C.Basic 独自拡張機能で動作する

ダウンロード:
  ライフゲーム Ver 0.74 (C.Basic Ver0.63 以降に対応)
  ※ 最新の C.Basic Ver 0.99m 以降でも動作するようにVer 0.73 からバージョンアップ
  ※ 実行速度は変わりません。
  
  - メインプログラムとサブルーチンの2つをダウンロード
  - 実行は、メインプログラム LIFE074 を起動。
  C.Basic の独自拡張機能を使っているので、純正 Casio Basic では動作しません。

※ 計算量が多く、さらにグラフィックス負荷の大きなプログラムを使って、処理速度を評価する事例です。

さらに高速化するオーバークロック・ツール Ftune2 を併用した結果をご覧いただく;

1. C.Basic Ver 0.74ライフゲーム Ver 0.73 を動作させた時
 
C.Basic Ver 0.74ライフゲーム Ver 0.73 を実行したとき

2. C.Basic Ver 0.83ライフゲーム Ver 0.73 を動作させた時

C.Basic Ver 0.83 に進化すると、約2倍高速化している

3. C.Basic Ver 0.83ライフゲーム Ver 0.83 を動作させた時

※ 一部ネイティブコードを採用したライフゲーム Ver 0.83 は、さらに10倍高速化
C:Basic (コンパイラ版) の高速化の可能性を示唆している。

ダウンロード:
  ライフゲーム Ver 0.84 (C.Basic Ver 0.63 以降に対応)
  ※ 最新版 C.Basic Ver 0.99m 以降でも動作するように Ver 0.83 からバージョンアップ
  ※ 実行速度は変わりません

※C-Basicの処理速度の変遷: 変化がなくなる517世代までの時間: [時間(相対速度)] 2016/05/02更新
C.Basic のバージョンVer0.74Ver 0.80Ver 0.83aVer 0.99m
ノーマルクロック (29MHz)796秒 (0.4)347秒 (0.94)325秒 (1.0)330秒
オーバークロック (236MHz)115秒 (2.8)51秒 (6.4)48秒 (6.8)52秒
オーバークロック (280MHz)95秒 (3.4)43秒 (7.5)40秒 (8.1)44秒

C.Basic のバージョンアップに伴う機能追加にも関わらず、今のところ大きな速度低下はみられない。
Ver 0.83a では過去最高速度を示したが、それ以外は概ね Ver 0.80 と同等レベルを維持している。

※ ライフゲーム Ver 0.74 の詳細は、ライフゲーム を参照してください。
※ このプログラムは、高速化ツール Ftune2 併用を推奨します。



グラフ関数電卓の高速化ツール

CPU の性能を引き出して、電卓そのものを高速化できる、オーバークロックツールを紹介します。

fx-9860GII の高速化 - Ftune2 の導入
fx-9860GII のオーバークロック - Ftune2 -

高速化を極めたい場合は、C.BasicFtune2 と併用すると良いでしょう。



Top へ戻る




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

人気ブログランキングへ


FC2ブログランキングへ







keywords: fx-9860GIICasioBasic、プログラミング入門グラフィックスプログラム関数電卓

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



関連記事

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

コメントの投稿

非公開コメント

アドイン版 C.Basic ver.0.81 テスト版 その8.1(若干高速化版)

管理人様、こんにちは!

インタプリタとしては骨格が定まってきたのでSH3機とSh4A機のベンチマークを改めて計測してみました。

アドイン版 C.Basic ver.0.81 テスト版 その8.1(若干高速化版)
http://pm.matrix.jp/CB/CBASIC081.zip

コメントでも飛び越し先をキャッシュするようにしたバージョンです。
プログラムループ内にコメントがあっても速度低下が最小限に抑えられます。


測定プログラムは管理人様と同じくPICALC5と、
ループ内の演算式を2項式の形に変更したPICAL5Aを使用しました。

-------------------------PICAL5
2J-1→D
TJ+BMat Z[J,1])→M
Int (M÷D)→T
W-DT→Mat Z[J,1]
-------------------------
↓ ↓ ↓
-------------------------PICAL5A
(J+J)-1→D
(T×J)+(B×Mat Z[J,1])→M
Int (M÷D)→T
W-(D×T)→Mat Z[J,1]
-------------------------

--------------------------------------------------PICAL5
SH3 PICAL5  100桁  1000桁  1000桁(118MHz)
CasioBasic    60秒
Ver.0.74       5.3秒   286秒  111秒
Ver.0.80       4.9秒   262秒  103秒
Ver.0.81       4.9秒   256秒  101秒

SH4A PICAL5  100桁  1000桁   1000桁(236MHz)
CasioBasic     87秒
Ver.0.74       5.0秒   240秒   36.0秒
Ver.0.80       4.6秒   219秒   33.3秒
Ver.0.81       4.6秒   216秒   32.7秒
--------------------------------------------------PICAL5A
SH3 PICAL5A  100桁  1000桁  1000桁(118MHz)
CasioBasic    60秒
Ver.0.74       5.9秒   339秒  131秒
Ver.0.80       4.2秒   194秒  77.5秒
Ver.0.81       4.1秒   187秒  75.6秒

SH4A PICAL5A 100桁  1000桁   1000桁(236MHz)
CasioBasic     88秒
Ver.0.74        5.6秒   290秒   43.2秒
Ver.0.80        4.0秒   158秒   24.3秒
Ver.0.81        3.9秒   154秒   23.7秒
--------------------------------------------------


デフォルトのCasioBasicではSH3機が速いですが、C.BasicになるとCPUの性能差がはっきり出てきますね。
Ver.0.80以降で2項式が速くなったので式を2項式に変更したPICALC5Aではより高速化効果が出ています。
逆に以前のバージョンでは遅くなってしまいます…(^^;
CasioBasicから比較するとSH3でも15倍速近く、SH4Aでは20倍速以上となりました(^^)



それからライフゲームLIFE073の517世代までの結果です。

------------------------------------------------------------------
SH3                Ver0.74   Ver 0.80  Ver 0.81
ノーマルクロック (29MHz)   1046秒   528秒    496秒
オーバークロック (118MHz)   364秒   185秒    175秒
------------------------------------------------------------------
SH4A               Ver0.74   Ver 0.80  Ver 0.81
ノーマルクロック (29MHz)    778秒   346秒    318秒
オーバークロック (236MHz)   110秒   50秒    47秒
------------------------------------------------------------------

SH3とSh4Aでは同クロックでも1.3~1.5倍位の差が出ているのですが、オーバークロック併用では3倍以上の差になります。
C.BasicはSH4Aで本領発揮と言えそうですね。

Re: アドイン版 C.Basic ver.0.81 テスト版 その8.1(若干高速化版)

sentaro様

遅くなってすみません。

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

> コメントでも飛び越し先をキャッシュするようにしたバージョンです。
> プログラムループ内にコメントがあっても速度低下が最小限に抑えられます。

この効果は、ライフゲームで顕著に現れていますね!

> SH3とSh4Aでは同クロックでも1.3~1.5倍位の差が出ているのですが、オーバークロック併用では3倍以上の差になります。
> C.BasicはSH4Aで本領発揮と言えそうですね。

そうですね、fx-9860GIIの値打ちがぐっとアップですね(^_^)/


> 測定プログラムは管理人様と同じくPICALC5と、
> ループ内の演算式を2項式の形に変更したPICAL5Aを使用しました。
>
> -------------------------PICAL5
> 2J-1→D
> TJ+BMat Z[J,1])→M
> Int (M÷D)→T
> W-DT→Mat Z[J,1]
> -------------------------
> ↓ ↓ ↓
> -------------------------PICAL5A
> (J+J)-1→D
> (T×J)+(B×Mat Z[J,1])→M
> Int (M÷D)→T
> W-(D×T)→Mat Z[J,1]
> -------------------------

ベンチマーク、ありがとうございます。

C.BasicのEecute Time機能を使うため、Setupでこの機能をOnにし、高速化対応した PICALC5A をさらに以下のように変更してみました。

------- 冒頭部分 ------
ClrMat Z
"== π Calculation =="
"What Digits"?→A
-----------------------

を以下のように変更;

------- 変更した冒頭部分 -----
ClrMat Z
"== π Calculation =="
0→M
"Bench Mark"
"1:Yes / 0:No"?→M
"What Digits"?→A
------------------------------

----- PICALC5Aの最後の部分 -----
ClrText
Prog "PIDISP2"
ClrMat Z
--------------------------------

を以下のように変更;

----- PICALC5Aの最後の部分 -----
ClrText
M=0⇒Prog "PIDISP2"
ClrMat Z
--------------------------------

ここで、ふと思ったのですが、実行環境がC.Basicであるかどうかの判定ができると、純正Casio BasicとC.Basicでソースレベルの互換が取れて嬉しい、と思うのが私だけでないと思うのですが、如何でしょうか?

純正Casio Basicでは無視されてC.Basicで認識される記述を考えると、' で始まる文字列のコマンドが良いように思います。


ところで、メモリ関係で問題が発生し、それが Ver0.81と関係あるかどうか不明ですが、報告致します。

ストレージメモリでメインメモリのバックアップを取り、PRGM のProgram ListでPICALC5 を PICALC5Aにリネームし、Memory Managerへ戻って 取ったバックアップのコピー → [F6] を連打して全てコピーしない、とすると メインメモリの PROGRAM フォルダに PICALC5 と PICALC5Aの2つができます。

次に、Memory Managerへ戻り、メインメモリの PROGRAMフォルダの中で、PICALC5Aのコピーを行うとこれがストレージメモリへコピーされます。そして、C.BasicでPICALC5Aにリネームしてから、sentaro様に提示頂いた修正を行います。

この段階では、PRGM のProgram List にも C.Basicのプログラムリストにも PICALC5Aがあります。

そして、PICALC5Aを 純正 Casio Basic で宇土化したり、C.Basicで実行したりして、しばらく遊んでから、PRGM の Program Listを見ると、PICALC5Aが表示されていません。
Memory Manager では、メインメモリの PROGRAMフォルダには PICALC5A が有ります。

そこで、Memory Manager でストレージにある PICALC5A を再びメインメモリにコピーをしてみても、PRGMのProgram Listには PICALC5Aが現れません。

なにか、妙なものがメインメモリに書き込まれてしまっている可能性もありますが、原因がよくわかりません。

もしもということもあるので、Ver 0.81 でメインメモリへの書き込み部分をご確認頂けませんか?

リセットして復帰は問題無くできると思いますので、トラブルシューティングのお役にたつかもしれないので、しばらくこのままにしておきますね。

はじめまして

管理人様、sentaro様、はじめまして。最近5800からfx-9860GIIへ乗り換えたものです。

FTune2に感動しました。グラフィック命令と棒倒し法で迷路生成するプログラムを作って動かすと、体感で20倍~ぐらいになりました。
カップラーメンが作れなくなりました。

さて、そのプログラムを作る基になったLocateで20*6の領域に迷路を生成するプログラムをC.Basicに移植してみたところ、意図した動作にならかったためソースをご報告致します。

For 2→Y To 6 Step 2
For 2→X To 20 Step 2
Locate X,Y,"■"
If Y=2
Then RanInt#(1,4)→R
Else RanInt#(1,3)→R
IfEnd
R=1⇒Locate X+1,Y,"■"
R=2⇒Locate X-1,Y,"■"
R=3⇒Locate X,Y+1,"■"
R=4⇒Locate X,Y-1,"■"
Next
Next

具体的にはY=2の時は問題ないのですが、
それ以外の時にRが一定の値になる模様(R=1)です。
純正の方では問題なく動作するため、
多分最適化の兼ね合いと思われます。
[[追記2015/12/11 18:33]]
バージョンは0.80を使わせて頂きました。

以上、これからも応援しています。

アドイン版 C.Basic ver.0.82 テスト版 その8.2(バグ修正版)

管理人様、こんにちは!

PICALC5Aがコピー出来ない問題はファイル名が8文字になった場合にファイルのヘッダが一部壊れていたことが判明しました(^^;
ファイルのプログラム本体ではなくヘッダの一部ですが、それが書き換わっていたためにBasicファイルとして認識できなくなっていました。
今回のバグ修正版で修正しました。
以前の8文字のファイル名を持つファイルはすべて壊れている可能性があるので、エディタで一旦編集状態にして再度保存し直すことで正常なファイルに戻すことが出来ます。

>ここで、ふと思ったのですが、実行環境がC.Basicであるかどうかの判定ができると、純正Casio BasicとC.Basicでソースレベルの互換が取れて嬉しい、と思うのが私だけでないと思うのですが、如何でしょうか?
>純正Casio Basicでは無視されてC.Basicで認識される記述を考えると、' で始まる文字列のコマンドが良いように思います。

それは名案です!
今まではそれぞれ独自ファイルになっていたのがそのまま使えるのでポイント高いですね。
互換を考えると管理人様がおっしゃるようにコメントから始まるようにするしかないので、
’’と2つ続けた場合、CasioBasicではそのままコメントで認識されるので、C.Basicではコメントを解除するようにしてみました。


>そうですね、fx-9860GIIの値打ちがぐっとアップですね(^_^)/

はい、SH4Aの真価がフルに発揮できるようになった感じですね(^^)

ところで、
海外のCasioでfx-9860GIIの新バージョンOS 2.09が発表されたようなのですが、
https://edu.casio.com/
フランスでの試験モード対応が主なようで、それ以外のポイントはバッテリーインジケータくらいしか無いですね。
とりあえず、一台バージョンアップしてみたところ、若干Basicが速くなっているのが確認できました(^^)




ガノー様、初めまして!

>FTune2に感動しました。グラフィック命令と棒倒し法で迷路生成するプログラムを作って動かすと、体感で20倍~ぐらいになりました。
>カップラーメンが作れなくなりました。

Ftune2をとても効果的に使っていただきましてありがとうございます!
迷路作成は面白そうですね(^^)

C.Basicで動けばさらに体感20倍~になるかも?


>さて、そのプログラムを作る基になったLocateで20*6の領域に迷路を生成するプログラムをC.Basicに移植してみたところ、意図した動作にならかったためソースをご報告致します。

RanInt#関数の超初歩的なバグがありました。
第一引数と第二引数の順序が逆になってて、従来バージョンではRanInt#(4,1)とかしないと正常動作しませんでした(^^;
お知らせいただきまして感謝です!

ということで、そこのあたり修正したバージョンです。
まだまだバグありの可能性大ですが今後もよろしくお願いいたします(^^)


アドイン版 C.Basic ver.0.82 テスト版 その8.2(バグ修正版)
http://pm.matrix.jp/CB/CBASIC082.zip

・8文字のファイル名で保存やリネームするとファイルが壊れていたのを修正しました。

・RanInt#関数のバグを修正しました。

・ストレージメモリの空き少ない場合に保存やリネームをしようとした場合、
 既存のファイルを保護するために”Not enough SMEM”エラーメッセージを出すようにしました。
 エラーが出た場合はストレージメモリの最適化処理が必要です。

・’(コメント)の直後が’(コメント)の場合、
 「’’」以降はコメントではなくコマンドとして実行します。
 C.Basic動作時にのみ実行するコマンドを記述できます。

・ライフゲーム専用コマンド、DotLife(コマンドを追加しました。
 DotLife( Mat A, x1,y1,x2,y2)→Mat B
 Mat Aの座標(x1,y1)-(x2,y2)の範囲をライフゲーム演算してMat Bに格納します。
 Mat AとMat Bは同じサイズの配列である必要があります。
 コマンド実行後に有効なセルのある矩形範囲の座標が整数変数に自動的に入ります。
 整数変数L:左端座標
 整数変数R:右端座標
 整数変数T:上端座標
 整数変数B:下端座標


DotLife(コマンドは管理人様のライフゲームのロジックをそのままコマンド化しているので、

'== Calc Next Map ==
DotLife( Mat B, L,T,R,B)→Mat C
'== Update Map ==

だけで良くなります(^^)

このコマンドがC:Basicだけで作成できるようになるのが当面の課題ですね。
コンパイラの最終到達速度目標として実験的に実装してみました。

RanInt#(の件

こんにちは。早速お返事ありがとうございます。

なるほど、了解しました。
今PCが手元にないので0.8の状態で引数を入れ替えてみたところ、動作ばっちりでした。そして、、、速度がやっぱり早かったです。

Ftune2+本家だけでも、前述のプログラムは高速ですが、一瞬迷路を描いている過程が見えていました。

Ftune2+C.Basicで、、、迷路を描いている過程さえも見えなくなりました。やばいですねw

家に帰ったら0.82にあげてからグラフィック版の奴も移植してみます!ありがとうございました!


そして話は変わりますが、1点お願いがあります。

CMDにある「=」ですが、もし可能なら「⇒」に変更できませんか? 理由は「=」は通常の画面でも「Shift+.」で入力できるからです。
意外と「⇒」や比較演算子をちょくちょく使うため良ければご検討下さい。

以上、宜しくお願い致します。

Re: RanInt#(の件

ガノー様

ようこそいらっしゃいました(^_^)/

ちょっと出遅れてしまいました。


> Ftune2+本家だけでも、前述のプログラムは高速ですが、一瞬迷路を描いている過程が見えていました。
>
> Ftune2+C.Basicで、、、迷路を描いている過程さえも見えなくなりました。やばいですねw

Ftune2 + C.Basic ってかなりやばいでしょ?

私も、すっかりハマッています。


> 家に帰ったら0.82にあげてからグラフィック版の奴も移植してみます!ありがとうございました!

迷路プログラムは、結構見ていて面白いです。描画の過程を見るのもそれなりに面白いのですが、超高速版で描画できれば、迷路パズルとして立派に成立すると思います。

もしよろしければ、完成版のプログラムを公開しませんか?

C.Basic の良さをアピールする目的で、新しいエントリー「C.Basic サンプルプログラム」を作ろうかどうしようか、考えていたのですが、ライフゲームと多桁円周率計算だけでは寂しいので、まだ作っていません。

そこで、迷路作成プログラムのテキスト表示版とグラフィックス表示版の2つとも紹介させてもらえませんか?。

無理に御願いするのではなくて、もしよければ...ということで...

よろしければ、プログラムファイルのURLをコメント欄に張ってください。それを利用させて頂きたいと思います。あるいは e-Gadgetアーカイブのホームページに収録して、それへのリンクを新エントリーの記事に貼り付ける方法もあります。

もし、どこかでプログラムの説明と共に既に紹介なさっているのなら、そのURLをリンクさせてもらいます。

-----

> そして話は変わりますが、1点お願いがあります。
>
> CMDにある「=」ですが、もし可能なら「⇒」に変更できませんか? 理由は「=」は通常の画面でも「Shift+.」で入力できるからです。
> 意外と「⇒」や比較演算子をちょくちょく使うため良ければご検討下さい。

例えば、以下のような感じで御願いするのは、如何でしょうか?

-----現行-----
[F5]: "="
[F6]: "≠"
--------------

これを、
-----要望-----
[F5]: "⇒"
[F6]: "REL" 表示で、比較演算子一覧へ...
   一覧で、"=", "≠", "<", ">", "≦", "≧" (ちょうど6個) を選択
--------------

sentaro様、ガノー様、如何でしょうか?

Re: アドイン版 C.Basic ver.0.82 テスト版 その8.2(バグ修正版)

sentaro様

[2015/12/12 16:05 追記]


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


> PICALC5Aがコピー出来ない問題はファイル名が8文字になった場合にファイルのヘッダが一部壊れていたことが判明しました(^^;
> ファイルのプログラム本体ではなくヘッダの一部ですが、それが書き換わっていたためにBasicファイルとして認識できなくなっていました。
> 今回のバグ修正版で修正しました。
> 以前の8文字のファイル名を持つファイルはすべて壊れている可能性があるので、エディタで一旦編集状態にして再度保存し直すことで正常なファイルに戻すことが出来ます。


修正の結果が良好なのを確認しました。
ありがとうございます。


ところで、サブルーチンに指定したファイルが見つからない時に表示するエラーメッセージが

Can't open file
[ファイル名]

となっていますが、これを

Can't find file
[ファイル名]

と変更しませんか?
ファイルオープンできない原因で、悩むユーザーが出てくる可能性が考えられ、むしろ「ファイルが見つかりません」の方が、ファブルーチンファイルが見つからないことに近いと思うんです。

如何でしょうか?


もう一つ、Ver 0.81までは、オーバークロック時のカーソルの点滅が見えていたのですが、0.82 になってカーソル点滅が速すぎるか遅すぎて、見えなくなってしまいました。チューニング可能でしょうか?


最後に、' を2つ繋げて使う記述について...

> ’’と2つ続けた場合、CasioBasicではそのままコメントで認識されるので、C.Basicではコメントを解除するようにしてみました。


これを使って、PICALC5 と PICALC5A を修正して、それぞれ PICALC6 と PICALC6A としました。
ついでに、PIDISP2 も [EXE] を連打で終了せず [EXIT] で終了するように変更して、PIDISP3 としました。

- PiCalc6: http://egadget2.web.fc2.com/archives/PiCalc6.html
- PiCalc6A: http://egadget2.web.fc2.com/archives/PiCalc6A.html

- PiDisp3: http://egadget2.web.fc2.com/archives/PiDisp3.html

これで、まったく同じソースを純正Casio Basic と C.Basic で共用できるようになりました。

但し、'を2つ連続して記述する方法で、気になることが2つばかりあります。

PiCalc6A のソースコード
ClrMat Z
"== #E64F Calculation =="
0→M
''Bench Mark"
''1-Yes / 0-No"?→M
"What Digits"?→A
6→K
10^K→B
Int (K÷log 2)→E
Int (A÷log 2)+1→F
Int (A÷K)+1→H
Int ((F-1)÷E)+1-H→L
H+L
F+H+L
F→N
{F+H+L,1}→Dim Mat Z
"EXE To Go"◢

ClrText
For 1→I To N
Locate 2,1," "
Locate 1,1,I
Int (B÷5)→Mat Z[I,1]
Next

0→C:1→I
Do
Locate 2,1," "
Locate 1,1,N

0→T
For N-→J To 1 Step -1
'Locate 2,2," "
'Locate 1,2,J
(J+J)-1→D
(T×J)+BMat Z[J,1]→W
Int (W÷D)→T
W-(D×T)→Mat Z[J,1]
Next

Int (T÷B)→W
C+W→Mat Z[F+I,1]
T-BW→C
Isz I:N-E→N
LpWhile N>0

ClrText
M=0⇒Prog "PIDISP2"
ClrMat Z


PiCalc5A から変更したのは、上の太文字の4行のみです。

さて、下から2行目を以下のように変更してみます(変更の必要は無いのですが...)

''If M=0
''Then
Prog "PIDISP2"
''IfEnd

これを実行すると、Syntax ERRORが発生し、''Then の行頭にカーソルが来ます。ご確認ください。


それと、' を2つ繋げる記法に加えて、複数行を一気に C.Basic だけで有効にするコマンドもあると助かりますが、如何でしょうか?
そこで、改めて気になる点の2つめとして、' を2つ並べて記述する方法ですが、

' x 2 と " x1 の区別がエディタ画面ではできますが、テキストにした時に区別しにくい(できない?)点です。
複数行への対応をご検討頂くならば、この仕様を変更して、'/ を利用することにして、複数行の場合は、終わりを /' にするように、C言語のコメントアウトの仕様を頂くってのは、どうでしょうか?

せっかくコメントアウトのバッファリングで高速化したところですが、併せてご検討頂けませんか?



> 海外のCasioでfx-9860GIIの新バージョンOS 2.09が発表されたようなのですが、
> https://edu.casio.com/
> フランスでの試験モード対応が主なようで、それ以外のポイントはバッテリーインジケータくらいしか無いですね。
> とりあえず、一台バージョンアップしてみたところ、若干Basicが速くなっているのが確認できました(^^)

お、面白いですね。
ところで、Ver 2.09 のマニュアルはありますか?
そこで、コメントアウトに関する説明のバグ修正(以前カシオが言っていた件;'のバグでなくてマニュアルのバグという話し)が反映されているのか、チョット興味があります。

[2015/12/12 16:05 追記]
ダウンロードしてみましたが、マニュアル類はないようですね。
このバージョンに関する説明って、どこにあります?


> ・ライフゲーム専用コマンド、DotLife(コマンドを追加しました。
>  DotLife( Mat A, x1,y1,x2,y2)→Mat B
>  Mat Aの座標(x1,y1)-(x2,y2)の範囲をライフゲーム演算してMat Bに格納します。
>  Mat AとMat Bは同じサイズの配列である必要があります。
>  コマンド実行後に有効なセルのある矩形範囲の座標が整数変数に自動的に入ります。
>  整数変数L:左端座標
>  整数変数R:右端座標
>  整数変数T:上端座標
>  整数変数B:下端座標
>
>
> DotLife(コマンドは管理人様のライフゲームのロジックをそのままコマンド化しているので、
>
> '== Calc Next Map ==
> DotLife( Mat B, L,T,R,B)→Mat C
> '== Update Map ==
>
> だけで良くなります(^^)
>
> このコマンドがC:Basicだけで作成できるようになるのが当面の課題ですね。
> コンパイラの最終到達速度目標として実験的に実装してみました。

面白い試みですね!

あとで、DotLifeを実装してみます。

ところで、readme_J.txt での DotLife の説明(=上記)で、

>  コマンド実行後に有効なセルのある矩形範囲の座標が整数変数に自動的に入ります。
>  整数変数L:左端座標
>  整数変数R:右端座標
>  整数変数T:上端座標
>  整数変数B:下端座標

この部分ですが、このコマンドはコンパイラ検討用で、実際に最小ビットマップ範囲として、ドットのある領域よりも+1だけ広い範囲になっていて、それも拡大する一方で縮小はしない、ということも追記した方が良いように思います。
もっよ良い表現があれば良いのですが...

そうでないと、勘違いしてバグだと悩むユーザーが現れるのを心配します。


以上、よろしく御願い致します。


迷路プログラム(テキスト版)

ガノー様
sentaro様

[2015/12/12/ 17:35 追記]

ガノー様の迷路プログラムのお陰で、C.Basicでの改善点が見つかりました。


> For 2→Y To 6 Step 2
> For 2→X To 20 Step 2
> Locate X,Y,"■"
> If Y=2
> Then RanInt#(1,4)→R
> Else RanInt#(1,3)→R
> IfEnd
> R=1⇒Locate X+1,Y,"■"
> R=2⇒Locate X-1,Y,"■"
> R=3⇒Locate X,Y+1,"■"
> R=4⇒Locate X,Y-1,"■"
> Next
> Next

私の手元では、プログラム名を仮に MAZET (テキスト版迷路)としています。

fx-9860GII の純正Casio Basic走らすときれいに迷路が表示されます。

ところで、これをC.Basicで走らすと、一番上の行が消去された上で 右端に Done と表示されます。
Setup で Time Disp 表示機能を On にしていると、2行目に Execute Time が表示されてしまいます。

純正Casio Basicとの互換性という目で見ると、対策が欲しくなります。

先ずDone 表示についてですが、テキスト画面でのコマンドで終わる場合は Done表示をスキップするのが純正の仕様のようです。
例えば、上のプログラムの頭に ClrGraphを追加、さらに最後に Horizontal 0 を追加してみますと、プログラムはグラフィックス画面で水平線の描画状態を示して終了します。ここで [F6] (G<->)を押せば、テキスト画面に切り替わり、そこでは1行目右端に Done と表示されます。これは純正Casio Basicの動作であり、現行 C.Basic でもこの仕様に準拠しているので問題ありません。

MAZETのようにテキスト画面描画で終了する場合は、Done 表示がスキップされるのが純正の仕様とすれば(このあたり確信がまだ持てず、あれこれと調べていたのですが、どうもこの仕様のようです。いままで見落としていたかもしれません)、C.Basicもこれに合わせると良いと思います。


さらに、Setup での Time Disp 機能ですが、これはプログラム中で On/Off できるとより親切に思うのですが、このあたりは好みの問題そしてC.Basic実装上の都合に関わるので、sentaro様のご意見を伺いたいと思います。

[2015/12/12/ 17:35 追記部分]
デバッグやプログラム処理速度計測用の特別なものが Time Disp 機能だとすれば、通常は この機能は Off にし使うのが前提で、必要な時だけ On にして使うという位置づけなら、特に対応は不要なようにも思います。

如何でしょうか?

アドイン版 C.Basic ver.0.83 テスト版 その8.3(バグ修正版)

ガノー様、こんにちは!

>CMDにある「=」ですが、もし可能なら「⇒」に変更できませんか? 理由は「=」は通常の画面でも「Shift+.」で入力できるからです。
>意外と「⇒」や比較演算子をちょくちょく使うため良ければご検討下さい。

管理人様にもご提案いただきましたので、その方向で仕様変更というか、
F4に「⇒」を追加して、
F5を「’」
F6を「/」にしました。
比較演算子は[SHIFT]を押した時に6つ全部出るように変更しました。


>家に帰ったら0.82にあげてからグラフィック版の奴も移植してみます!ありがとうございました!

Ftune2+C.Basicであれば、3D版の迷路とかも可能かもですね。
グラフィック版、楽しみです(^^)




管理人様、こんにちは!

>Can't find file
>[ファイル名]
>と変更しませんか?

了解です。0.83より変更してみました。
英語表記に関しては管理人様頼みなので、今後もよろしくお願いします(^^)


>もう一つ、Ver 0.81までは、オーバークロック時のカーソルの点滅が見えていたのですが、0.82 になってカーソル点滅が速すぎるか遅すぎて、見えなくなってしまいました。チューニング可能でしょうか?

それはカーソル点滅が全面的に見えない状態でしょうか?
それともカーソル移動した時に見えなくなるという感じでしょうか?

SH4Aに対応していないSDKでのコンパイルでは、SH4Aではコンパイルするたびに若干、というかほんの僅かですが動作速度に差が出てしまうのでそれが原因かと思われるのですが、カーソルがバージョンによって見えたり見えなかったりするのはなかなかシビアなタイミングですよね(^^;
カーソルの点滅速度のタイミング変更が出来ればいいのですが、変更方法が見つかったら変更できるようにしてみます。


>最後に、' を2つ繋げて使う記述について...
>これを実行すると、Syntax ERRORが発生し、''Then の行頭にカーソルが来ます。ご確認ください。

コマンド解釈の変更が不完全でしたので対策しました。


>' x 2 と " x1 の区別がエディタ画面ではできますが、テキストにした時に区別しにくい(できない?)点です。

了解です。
ぱっと見た目で分かりにくにはちょっとNGですね(^^;
文字は自由に変更できるのでとりあえず「/」に変更してみました。


>複数行への対応をご検討頂くならば、この仕様を変更して、'/ を利用することにして、複数行の場合は、終わりを /' にするように、C言語のコメントアウトの仕様を頂くってのは、どうでしょうか?

CasioBasicとの互換を取るためにはすべてコメント行にする必要ありなので、そこのあたりはどうしましょう?


>このバージョンに関する説明って、どこにあります?

バージョンアップ情報を見つけたのはフランスのTI-Planetからですけど、2.09で何やら不都合な仕様になっているらしく前のバージョン2.05に戻すのを推奨しているようです(^^;
CG20もCG20Eという試験対応機種が出るようですが今回のバージョンアップは日本ではあまり関係ないことかもしれませんね。
ちなみにfx-9860GIIの新バージョン2.09はSH4A限定版なのでついにSH3機は全機種が新OSには未対応となりました(^^;


>MAZETのようにテキスト画面描画で終了する場合は、Done 表示がスキップされるのが純正の仕様とすれば(このあたり確信がまだ持てず、あれこれと調べていたのですが、どうもこの仕様のようです。いままで見落としていたかもしれません)、C.Basicもこれに合わせると良いと思います。

今回のバグは単独のLocateでは問題ないのでちょっと?でしたけど「=>」コマンドがバグの原因でした。


>デバッグやプログラム処理速度計測用の特別なものが Time Disp 機能だとすれば、通常は この機能は Off にし使うのが前提で、必要な時だけ On にして使うという位置づけなら、特に対応は不要なようにも思います。

最初に実装したきっかけがCasioBasicソースそのままでの実行速度の測定のためだったので今の仕様なわけですが、管理人様のおっしゃるようにoffで使うのがデフォルト仕様で、C.Basicでの時間計測には%変数が実装されたのでそれを使うのを推奨したいです(^^)


ということで、今回見つかったバグを修正したバージョンです。

アドイン版 C.Basic ver.0.83 テスト版 その8.3(バグ修正版)
http://pm.matrix.jp/CB/CBASIC083.zip

・コマンド入力「CMD」画面でファンクションキーに「=>」を追加しました。
 比較演算子は[SHIFT]キーを押すと6種類全部出てきます。

・「’」(コメント)の直後が「’」(コメント)の場合を
 「’」(コメント)の直後が「/」の場合に変更しました。
 「’/」以降はコメントではなくコマンドとして実行します。

・「=>」コマンドが「true/false」の「false」で終了した場合の処理を修正しました。

Re: アドイン版 C.Basic ver.0.83 テスト版 その8.3(バグ修正版)

sentaro様

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


1) ⇒、/、 および論理演算記号の入力
これで、入力が楽になりますね。
論理演算記号リストを [SHIFT]で呼び出すのはナイスです!
C.Basicのみで有効にするための / もショートカットできて、助かります。


2) サブルーチンファイルが見つからない時のエラー
Can't find file.
への変更確認しました。
やはり、このほうが分かりやすいですね。

> 英語表記に関しては管理人様頼みなので、今後もよろしくお願いします(^^)

だはは、こちらこそよろしくです...ってどこかでエラーメッセージをまとめてチェックをしなければ....


3) オーバークロック時のカーソル点滅

> それはカーソル点滅が全面的に見えない状態でしょうか?
> それともカーソル移動した時に見えなくなるという感じでしょうか?
カーソルが全面的に見えない状態でした....

が、Ver 0.83 できれいに見えるようになっています。
ありがとうございます。

> SH4Aに対応していないSDKでのコンパイルでは、SH4Aではコンパイルするたびに若干、というかほんの僅かですが動作速度に差が出てしまうのでそれが原因かと思われるのですが、カーソルがバージョンによって見えたり見えなかったりするのはなかなかシビアなタイミングですよね(^^;
> カーソルの点滅速度のタイミング変更が出来ればいいのですが、変更方法が見つかったら変更できるようにしてみます。

なかなか微妙なんですね。今回のコンパイルではうまくいってます....


4) ' を2つ繋げて使う記述のバグ

> >これを実行すると、Syntax ERRORが発生し、''Then の行頭にカーソルが来ます。ご確認ください。
>
> コマンド解釈の変更が不完全でしたので対策しました。

修正を確認しました。


5) "/ への変更について
> 文字は自由に変更できるのでとりあえず「/」に変更してみました。

動作確認しました。


※ ところで、PICAL6 と PICAL6A の速度比較をしてみると、Ver 0.83では PICALC6A の方が遅くなっています。
高速化のためのコメント行の読み飛ばしが、まだ変更されていないのでしょうか?



6) 複数行のコメントアウト
> >複数行への対応をご検討頂くならば、この仕様を変更して、'/ を利用することにして、複数行の場合は、終わりを /' にするように、C言語のコメントアウトの仕様を頂くってのは、どうでしょうか?
>
> CasioBasicとの互換を取るためにはすべてコメント行にする必要ありなので、そこのあたりはどうしましょう?

わっ、全てコメント行にするというのは、なんだか本末転倒のような気がしますよね。
それよりも複数行コメントアウトの優先度は、うんと低いと思うので、全てコメント行対応は止めた方が良いと思います。


7) OS Ver 2.09
> バージョンアップ情報を見つけたのはフランスのTI-Planetからですけど、2.09で何やら不都合な仕様になっているらしく前のバージョン2.05に戻すのを推奨しているようです(^^;

プログラム利用に制限ってことでしょうか?
試験対策なら有り得そうですが、それではマズイですね!
フランスでは OS Ver 2.05が正規の最新版なんですか?
日本では 2.04 ですから....

> CG20もCG20Eという試験対応機種が出るようですが今回のバージョンアップは日本ではあまり関係ないことかもしれませんね。
> ちなみにfx-9860GIIの新バージョン2.09はSH4A限定版なのでついにSH3機は全機種が新OSには未対応となりました(^^;
ありゃ、ついに SH3搭載機 はレジェンド製品になってしまったとは...(/_;)

ますます、SH4版 fx-9850GII のポイントアップとなりますね。


8) テキスト画面で終了時の画面表示について

> >MAZETのようにテキスト画面描画で終了する場合は、Done 表示がスキップされるのが純正の仕様とすれば(このあたり確信がまだ持てず、あれこれと調べていたのですが、どうもこの仕様のようです。いままで見落としていたかもしれません)、C.Basicもこれに合わせると良いと思います。
>
> 今回のバグは単独のLocateでは問題ないのでちょっと?でしたけど「=>」コマンドがバグの原因でした。

了解です!修正を確認しました。


9) Time Disp機能について
> 最初に実装したきっかけがCasioBasicソースそのままでの実行速度の測定のためだったので今の仕様なわけですが、管理人様のおっしゃるようにoffで使うのがデフォルト仕様で、C.Basicでの時間計測には%変数が実装されたのでそれを使うのを推奨したいです(^^)

は~い、了解致しました。

アドイン版 C.Basic ver.0.83a テスト版 その8.3a(バグ修正版)

管理人様、こんにちは!

アドイン版 C.Basic ver.0.83a テスト版 その8.3a(バグ修正版)
http://pm.matrix.jp/CB/CBASIC083.zip

プログラム中で整数モードに変更できないという致命的なエンバグしていたので差し替えアップしました。
コメント関連で修正した時にエンバグしてました(^^;

それと、

>※ ところで、PICAL6 と PICAL6A の速度比較をしてみると、Ver 0.83では PICALC6A の方が遅くなっています。
>高速化のためのコメント行の読み飛ばしが、まだ変更されていないのでしょうか?

時間測定のリセットはプログラム開始時と?コマンド直後でリセットするようになっていたのですが、◢ の直後でリセットするのが抜けていました。
そのために時間測定が不正確になったものと思われます。
この不具合というか仕様を修正をしました。



>プログラム利用に制限ってことでしょうか?
>試験対策なら有り得そうですが、それではマズイですね!
>フランスでは OS Ver 2.05が正規の最新版なんですか?
>日本では 2.04 ですから....

フランスでは試験対応版の新機種が出ていて最後にEがつく機種があります。
Graph75+というのがフランス版fx-9860GIIなのですが、
それに試験モード確認用にLEDが付いたGraph75+Eというバージョンが発売されていてその搭載OSが2.05です。
CG20にもCG20Eというのが出るそうなのでCG20はそのまま継続するみたいですね。

試験モードは便利な機能はすべて停止されるので、通常の関数電卓並みに基本的な計算しかできなくなります(^^;


>ありゃ、ついに SH3搭載機 はレジェンド製品になってしまったとは...(/_;)
>ますます、SH4版 fx-9850GII のポイントアップとなりますね。

そうなんです。今後はSH4A版しかバージョンアップされないので、SH3版はついに終息に…。

C.BasicではSH3版とSH4A版の差がはっきり出るのでSH4A版が標準になってくれるのは好都合ではありますね。

Re: アドイン版 C.Basic ver.0.83a テスト版 その8.3a(バグ修正版)

sentaro様

修正版 Ver 0.83a を頂きました。

> プログラム中で整数モードに変更できないという致命的なエンバグしていたので差し替えアップしました。
> コメント関連で修正した時にエンバグしてました(^^;

ライフゲームが遅くなったのは、主にこれが原因だったのですね!


> 時間測定のリセットはプログラム開始時と?コマンド直後でリセットするようになっていたのですが、◢ の直後でリセットするのが抜けていました。
> そのために時間測定が不正確になったものと思われます。
> この不具合というか仕様を修正をしました。

◢ で入力待ちになったところでの人間の反応速度の影響があったということなのですね。



ところで、ライフゲーム Ver 0.73 に DotLife() を適用して Ver 0.83 にして実行したら...

爆速!

ベンチマークのパターンで、517世代までの時間が、3.98秒 (゜Д゜)
... 280MHz での計測ですが....

Ver 0.73 で 40.7秒だったので、さらに10倍の高速化!!
ライフゲームプログラムとしては、もう眺めて楽しむ領域を遙かに超えてしまい、原則機能を追加せねばなりません(--;
Ver 0.83a が Ver 0.80 よりも若干速度低下していますが、そんなのはどーでも良いと思えます。

いずれにせよ、コンパイラ化で10倍高速化の目安が得られたのは、とても楽しみなことになりました(^_^)/

インタープリター版もも固まってきたようなので、そろそろ、コマンドリファレンスを作り始めようと思います。
純正 Casio Basic と併せて、和文/英文 で作るつもりなので、まぁ長い目で見てやってください。


> フランスでは試験対応版の新機種が出ていて最後にEがつく機種があります。
> Graph75+というのがフランス版fx-9860GIIなのですが、
> それに試験モード確認用にLEDが付いたGraph75+Eというバージョンが発売されていてその搭載OSが2.05です。
> CG20にもCG20Eというのが出るそうなのでCG20はそのまま継続するみたいですね。
>
> 試験モードは便利な機能はすべて停止されるので、通常の関数電卓並みに基本的な計算しかできなくなります(^^;

日本でも販売したら、文科省や学校に受け入れられるかも...
そして、プログラム電卓の普及の起爆剤にならないだろうか?などと思ってしまいます。


> >ありゃ、ついに SH3搭載機 はレジェンド製品になってしまったとは...(/_;)
> >ますます、SH4版 fx-9850GII のポイントアップとなりますね。
>
> そうなんです。今後はSH4A版しかバージョンアップされないので、SH3版はついに終息に…。
>
> C.BasicではSH3版とSH4A版の差がはっきり出るのでSH4A版が標準になってくれるのは好都合ではありますね。

SH4Aが主流となれば、C.Basic / C:Basic の良さが一段と輝きを増しますね!

Re: アドイン版 C.Basic ver.0.83a テスト版 その8.3a(バグ修正版)

sentaro様

C:Basic プロジェクトのエントリーを更新して、C.Basic 高速化の進化と、コンパイラ版の可能性を動画で示しました。
http://egadget.blog.fc2.com/blog-entry-491.html

アドイン版 C.Basic ver.0.83b テスト版 その8.3b(微妙に高速化版)

管理人様、こんにちは!

>ライフゲームが遅くなったのは、主にこれが原因だったのですね!

はい!新機能追加で多々あるエンバグでした(^^;


>ところで、ライフゲーム Ver 0.73 に DotLife() を適用して Ver 0.83 にして実行したら...
>爆速!

整数演算での実装だったのでかなりのスピードアップになりました(^^)


>ライフゲームプログラムとしては、もう眺めて楽しむ領域を遙かに超えてしまい、原則機能を追加せねばなりません(--;

原則、もとい減速しなければならないほどというのがすごいですよね(^^;
ま、要部分がほとんどネイティブ動作になってるのでインタプリタ関係ない話になってしまってるのですが(^^;
アドインにした場合とほとんど同等の速度が出ている状況ですね。


>Ver 0.83a が Ver 0.80 よりも若干速度低下していますが、そんなのはどーでも良いと思えます。

10倍の速度になると数%の差はたしかにどうでも良くなります(笑)

ですが、速くなる可能性はないかとSDKのコンパイルオプションをSPEED指定で試してみたところ、最大5%程度高速化出来ました。
オーバークロックでカーソルが見えなくなる可能性ありなのでとりあえず別バージョンとしてみました。

アドイン版 C.Basic ver.0.83b テスト版 その8.3b(微妙に高速化版)
http://pm.matrix.jp/CB/CBASIC083b.zip

機能的には何も変更はないです。


>インタープリター版もも固まってきたようなので、そろそろ、コマンドリファレンスを作り始めようと思います。
>純正 Casio Basic と併せて、和文/英文 で作るつもりなので、まぁ長い目で見てやってください。

いつもありがとうございます!
コンパイラとして動き始めるまではまだちょっとかかりそうですが、10倍の速度を早く実現したいです(^^)


>C:Basic プロジェクトのエントリーを更新して、C.Basic 高速化の進化と、コンパイラ版の可能性を動画で示しました。

動画で見ると強烈すぎますね!(^^)
2倍でもかなり速さを感じるのですが、10倍となるともはや何が起きてるのか分からないという感じです(^^;
ノーマルクロック状態でオーバークロックの速度を出せてるということになりますね。


>日本でも販売したら、文科省や学校に受け入れられるかも...
>そして、プログラム電卓の普及の起爆剤にならないだろうか?などと思ってしまいます。

日本だとJP900、いやJP500で十分ってことになりそうなのですが、
JP900のプログラム電卓版はいつ出てくるんでしょうか?(^^;

最新OSの2.09ですが、C.Basicで文字表示が微妙に遅くなるのを確認したので、バッテリインジケータのみでは特にメリットは無いということで、以前の2.04に戻しました(^^;
元に戻すには手順が若干ややこしいので、日本のCASIOサイトにアップされるまではバージョンアップしない方が良さそうです。

Re: アドイン版 C.Basic ver.0.83b テスト版 その8.3b(微妙に高速化版)

sentaro様

Ver 0.80 と Ver 0.83a ですが、改めて517世代までの時間比較すると、Ver 0.83a の方がライフゲームについては若干速くなっていました。以前測定したときは、Ver 0.83a の方が若干遅かったのですが...私の勘違い(例えば 236MHz と280MHz の設定を取り違えていたとか...)かも知れません。

ところで、何度か測定していると、Ver 0.83a では処理速度がいきなり倍近くかかることがあります。ノーマルクロックでも236MHzでも 280MHz でも観測しました。

プログラム内コマンドによる整数モードへの切り替えに失敗することがあるような感じを受けています。
チョット調べてみて頂けませんか?


ところで、Ver 0.83b では、おっしゃるように少しですがスピードアップしていますが、カーソルの点滅が非常に遅くて、ONの時間もOFFの時間も長いため、有るときはしっかり見えていて、有るときはまったく見えないということになっています。

なので、今は Ver 0.83a に戻しています。

<<ライフゲーム Ver 0.73で 517世代までの測定時間 at 236MHz>>
- Ver 0.80: 50.5秒
- Ver 0.83a: 47.7秒
- Ver 0.83b: 45.0秒

> 原則、もとい減速しなければならないほどというのがすごいですよね(^^;
> ま、要部分がほとんどネイティブ動作になってるのでインタプリタ関係ない話になってしまってるのですが(^^;
> アドインにした場合とほとんど同等の速度が出ている状況ですね。

ノーマルクロックでも、インタープリタのオーバークロックよりも速いです。なんと、517世代まで 25秒!


> ですが、速くなる可能性はないかとSDKのコンパイルオプションをSPEED指定で試してみたところ、最大5%程度高速化出来ました。
> オーバークロックでカーソルが見えなくなる可能性ありなのでとりあえず別バージョンとしてみました。
>
> アドイン版 C.Basic ver.0.83b テスト版 その8.3b(微妙に高速化版)
> http://pm.matrix.jp/CB/CBASIC083b.zip

遅くなるケースを解消頂くろ、Ver 0,83b でカーソルがうまく表示されるかも知れませんね...(^^;

宝くじよりは遙かに当たる確率が高いので、期待しちゃいます。


> >C:Basic プロジェクトのエントリーを更新して、C.Basic 高速化の進化と、コンパイラ版の可能性を動画で示しました。
>
> 動画で見ると強烈すぎますね!(^^)

百聞は一見に如かずとは、よく言ったものです。鮮烈な印象!


> 2倍でもかなり速さを感じるのですが、10倍となるともはや何が起きてるのか分からないという感じです(^^;
はい、なにがなにやらで、ゲームとしては破綻しています(/_;)

減速モードとか、速度設定機能を付けなければ.....



> >日本でも販売したら、文科省や学校に受け入れられるかも...
> >そして、プログラム電卓の普及の起爆剤にならないだろうか?などと思ってしまいます。
>
> 日本だとJP900、いやJP500で十分ってことになりそうなのですが、

あぁ、それがありましたね...なんせ安いですし...


> JP900のプログラム電卓版はいつ出てくるんでしょうか?(^^;

fx-9860GII が延命されそうな感じなので、なかなか出てこないかも知れません...


> 最新OSの2.09ですが、C.Basicで文字表示が微妙に遅くなるのを確認したので、バッテリインジケータのみでは特にメリットは無いということで、以前の2.04に戻しました(^^;
> 元に戻すには手順が若干ややこしいので、日本のCASIOサイトにアップされるまではバージョンアップしない方が良さそうです。

はい、よい子はおとなしくしています....(^^; ナハハ

迷路のグラフィック

■sentaro様

●0.83
要望の御対応ありがとうございました。使いやすいです。


●0.82
MAZEG(グラフィック対応版)をC.Basicに移植し、速度計測しました。
Ftune2無しで0.93秒(Int)で動作しました(Doubleでも1.67秒)。62*126のサイズでしかもグラフィック画面を用いているにも関わらずです。脱帽です。

そして、Ftune2を用いると0.13秒です。もともカップラーメンが作れるぐらい処理にまたされたのにwww

●追加要望
度々申し訳ありませんが、要望させてください。

・「CHAR」で出した文字パレット(?)の画面を一時的に固定できるよになりませんか?
理由は「ローマ字入力でコメント」を残したいからです。

' アイウエオ
と入力したい場合、CHAR、ア、EXE、CHAR、⇒、EXE、CHAR、⇒…
と何度もCHARを押すのがちょっと大変です。
(ローマ字未対応の純正とは雲泥の差ですが^^;)

↓これを

CHAR⇒(例えば)SHIFTキーを押すと文字パレットが固定される
  ⇒アイウエオを選択してEXEを順次押す
  ⇒再度SHIFTキーを押すと文字パレットが閉じる

よろしければご考慮お願い致します!


■管理者様

MAZEGは以下にソースを貼り付けます。お役に立てば幸いです。
(サンプルという扱いで改変自由でお願い致します!)

' GRAPHICS SETTING
ClrGraph
CoordOff
GridOff
AxesOff
LabelOff
ViewWindow 0,126,0,62,0
' DRAW FRAME
Vertical 0
Vertical 126
Horizontal 0
Horizontal 62
' CREATE MAZE
For 2→B To 60 Step 2
SketchDot Horizontal B
For 2→A To 124 Step 2
B=2⇒RanInt#(1,4)→R
B≠2⇒RanInf#(1,3)→R
R=1⇒PlotOn A+1,B
R=2⇒PlotOn A,B+1
R=3⇒PlotOn A-1,B
R=4⇒PlotOn A,B-1
Next
Next

※純正とC.Basicで描画方向が違う??
※ViewWindowの設定がちんぷんかんぷんだったので
 こちらのサイトがとても参考になりました。

Re: 迷路のグラフィック

ガノー様

早速遊んでみました。やはりこれくらい細かくないと、迷路とは言えないですね。

全画面描画が、C.Basicで高速化できる良いサンプルで、かつ純正とソースレベルで完全コンパチなので、サンプルプログラムとして掲載させて頂きますね。


> ※純正とC.Basicで描画方向が違う??
> ※ViewWindowの設定がちんぷんかんぷんだったので
>  こちらのサイトがとても参考になりました。

これは、もう解決されました?

Re: Re: 迷路のグラフィック

> ※純正とC.Basicで描画方向が違う??
> ※ViewWindowの設定がちんぷんかんぷんだったので
>  こちらのサイトがとても参考になりました。

>これは、もう解決されました?

前掲のサンプルにて既にViewWindowは正しく設定しておりますし、別段バグといったものはありません。
純正と同じソースで描画方向の結果が異なっているので、C.BasicのPlotOn等の座標の解釈が逆なのかもしれません。

原因を追究すべくPxlOnで書きなおしてみたところ、
ドットの描画方向は同じになりましたが、Horizontalの解釈が異なる模様でC.Basicと純正で不一致になりました。
不一致になったか所を「'純正」、「''C.Basic」で示します。
※環境に合わせて有効化してください。
※前述のMAZEGとの違いは太字で示します。

' GRAPHICS SETTING
ClrGraph
CoordOff
GridOff
AxesOff
LabelOff
ViewWindow 0,126,0,62,0
' DRAW FRAME
Vertical 0
Vertical 126
Horizontal 0
Horizontal 62
' CREATE MAZE
For 3→B To 61 Step 2
'SketchDot Horizontal 63-B
''SketchDot Horizontal B-1
For 3→A To 125 Step 2
B=3⇒RanInt#(1,4)→R
B≠3⇒RanInf#(1,3)→R
R=1⇒PxlOn B,A+1
R=2⇒PxlOn B+1,A
R=3⇒PxlOn B,A-1
R=4⇒PxlOn B-1,A
Next
Next

多分ですが、座標系の解釈が異なっているのだと思われます。
また、PxlOnで書きなおしてみた副産物ですが、更に高速になりました。(更に0.03秒くらい早くなってる)
C.Basicの実力は底が知れませんね。。。

[追記]

sentaro様

多分ですが、以下のような相違が純正とC.Basicであると思われます。。。ご確認の程宜しくお願い申し上げます。

・PlotOn、HorizontalのY座標の解釈が逆かも?

※間違いのようです。 2015/12/14/ 22:40

Re: Re: Re: 迷路のグラフィック

ガノー様

> 前掲のサンプルにて既にViewWindowは正しく設定しておりますし、別段バグといったものはありません。
> 純正と同じソースで描画方向の結果が異なっているので、C.BasicのPlotOn等の座標の解釈が逆なのかもしれません。

私の手元では、同じ問題が再現していません。

というのも、前掲のソースを入力して純正とC.Basicで走らせてみていますが、共に PlotOn は、左上から右、そして下へ点を描画するようです。

ViewWindows 0,126,0,62,0

と記述されていますが、最後の ,0 が省略されていますが、それでも

ViewWindow 0,126,0,62,0,0

と本来の6つのパラメータ指定と同じ動作をすることは、私も確認しています。
従って、この ViewWindow設定には間違いは無いと思います。

この設定は、画面の左上を (x, y) = (0, 0) と原点設定するものですね。

ちなみに、PxlOnを利用されるときは、ViewWindow 1,127,0,63,1,0 とすると、物理座標系に近い設定ができるので、For 文のスタートと To のあとの数値を1増やすだけで、同じ要に動作します。

併せて、Horizontal のパラメータも B から B+1 に変更すれば良い筈です。


どうも、私のところでは同じ問題が再現しないのです。


いちど、お手元で 最初の MAZEG を実行してみてから、[SHIFT] [F3] でViewWindow設定を確認してみると、何か分かるかも知れません。

私の手元では、以下のようになっています;

View Window
Xmin :0
max :126
scale:0
dot :1
Ymin :62
max :0
scale:1

もし、ViewWindow に6つめのパラメータを 0 と指定すれば、上の最後の sale は 0 となります。


何か分かれば良いのですが...

To 管理者様(原因判明)

原因が判明しました。
純正側が間違っておりました。
ViewWindow 0,126,0,0,62,0

C.Basicに移植した際に修正したつもりが純正側に反映し忘れ。
ViewWindow 0,126,0,62,0

原因はご指摘通りViewWindowの設定だった模様です。
ということで、最終版は以下でお願いします。

' GRAPHICS SETTING
ClrGraph
CoordOff
GridOff
AxesOff
LabelOff
ViewWindow 0,126,0,62,0,0
' DRAW FRAME
Vertical 0
Vertical 126
Horizontal 0
Horizontal 62
' CREATE MAZE
For 3→B To 61 Step 2
SketchDot Horizontal B-1
For 3→A To 125 Step 2
B=3⇒RanInt#(1,4)→R
B≠3⇒RanInf#(1,3)→R
R=1⇒PxlOn B,A+1
R=2⇒PxlOn B+1,A
R=3⇒PxlOn B,A-1
R=4⇒PxlOn B-1,A
Next
Next

以上、ありがとうございました!
また宜しくお願い申し上げます!

[2015/12/15 追記]
※ViewWindowの最後に0を追加。orz。

アドイン版 C.Basic ver.0.84 テスト版 その8.4(連続キャラ入力版)

管理人様、こんにちは!

>プログラム内コマンドによる整数モードへの切り替えに失敗することがあるような感じを受けています。
>チョット調べてみて頂けませんか?

今回のバージョンで整数モードへの切り替え処理をちょっとだけ変えてみました。
これで失敗することが無くなればよいのですが…。


>ところで、Ver 0.83b では、おっしゃるように少しですがスピードアップしていますが、カーソルの点滅が非常に遅くて、ONの時間もOFFの時間も長いため、有るときはしっかり見えていて、有るときはまったく見えないということになっています。

管理人様のカーソルが見えなくなる現象がうちの個体では280MHzを超えても全然再現しないのでちょっと悩むところなのですが(^^;
不具合の起きるクロック設定は限定されている状況でしょうか?

今回のバージョンアップでどうなるかというところですね(^^;


>ノーマルクロックでも、インタープリタのオーバークロックよりも速いです。なんと、517世代まで 25秒!

消費電力的にはノーマルで速いのが一番ですが、更にオーバークロックで数倍になる余力があるというのがなかなか魅力的ですよね(^^)




ガノー様、こんにちは!

迷路のグラフィック版、なかなか面白いです。公開ありがとうございます!
CasioBasicとの互換性の原因が判明してよかったです。
ViewWindowの仕様は分かってしまえばどうってことはないのですが、ちょっとややこしいですよね(^^;

>Ftune2無しで0.93秒(Int)で動作しました(Doubleでも1.67秒)。62*126のサイズでしかもグラフィック画面を用いているにも関わらずです。脱帽です。

CasioBasicで実行させると確かにカップラーメンが作れるくらいですね(^^;
そこから比較すると100倍速になっている計算で、ここまで違いが出るとグラフィックアプリも実用になりますね。

>また、PxlOnで書きなおしてみた副産物ですが、更に高速になりました。(更に0.03秒くらい早くなってる)

Pxl系コマンドは整数モードでは更に速くなるようになっています(^^)


>・「CHAR」で出した文字パレット(?)の画面を一時的に固定できるよになりませんか?

今回のバージョンアップで連続でキャラクタ入力出来るように変更してみました。

ガノー様の仕様をそのまま頂いて、
キャラクタ選択画面で[SHIFT]もしくは[F1]~[F6]を二度押しすることで連続入力モードになります。
エコーバックは無いのでちゃんと入力できたかの確認はキャラクタ選択画面を抜けた後になります。
連続入力モードを抜けるには[EXIT]もしくは[AC]です。


アドイン版 C.Basic ver.0.84 テスト版 その8.4(連続キャラ入力版)
http://pm.matrix.jp/CB/CBASIC084.zip

SH4A機ではアドインプログラムのサイズが変わる度に動作速度が微妙に違ってきてしまうので、数%の速度差は誤差の範囲ということでお願いします(^^;

Re: アドイン版 C.Basic ver.0.84 テスト版 その8.4(連続キャラ入力版)

sentaro様

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

> 今回のバージョンで整数モードへの切り替え処理をちょっとだけ変えてみました。
> これで失敗することが無くなればよいのですが…。

Ver 0.83b だとライフゲームを5回走らせると1回くらい失敗していましたが、Ver.0.84 で6回走らせたところで失敗は有りません。改善したのは間違い無いです。もうしばらく使ってみて確認を継続しますね。


> >ところで、Ver 0.83b では、おっしゃるように少しですがスピードアップしていますが、カーソルの点滅が非常に遅くて、ONの時間もOFFの時間も長いため、有るときはしっかり見えていて、有るときはまったく見えないということになっています。
>
> 管理人様のカーソルが見えなくなる現象がうちの個体では280MHzを超えても全然再現しないのでちょっと悩むところなのですが(^^;
> 不具合の起きるクロック設定は限定されている状況でしょうか?

取りあえず、Ver0.84 ではカーソルの点滅はうまくいっています。
不具合については、私の手元ではノーマルクロックと 236MHz 、280MHzでしか試しておらず、ノーマルでは問題なくオーバークロックすると見えない、あるいは見えづらいことがあります。

そちらで再現しないとのことですが、Ftune2 のバージョンの影響って有り得ますか?
私は、SH4専用(以前統合版を作っていただいたことがありますよね)の最後に頂いたバージョンで、一般にダウンロードできる Ver1.01では無いのを使っています。


> 今回のバージョンアップでどうなるかというところですね(^^;

なかなか厄介な問題のようですね。

再現条件が見つかると良いのですが...


> 消費電力的にはノーマルで速いのが一番ですが、更にオーバークロックで数倍になる余力があるというのがなかなか魅力的ですよね(^^)

はい、アマループがあるので消費電力は殆ど気にしていないです(^^;


あと、キャラクター連続入力機能も確認しました。
これ、なかなか便利ですね!


%変数の件

■管理人様

アマループ、、、お勧めされていたので
サイバーマンデーで購入しました。多分明日届きます(^^)



■sentaro様

CHAR画面の固定、本当にありがとうございました。
(日本人なので日本語でコメントが書けて最高です。)


さて、最近は
C.Basicでゲームを作ろうとわくわくしています。
C.Basicなら超速なので昔のN88BASICを彷彿させるようなゲームがいくらでも作れそうですね!

そこでゲームを作ろうと思うと、純正には無い、C.Basicの「%」変数が非常に重要になってきます。

While Getkey>9
WhileEnd
While Getkey<10
Locate 1,1,%
WhileEnd

こちらの動作を見ると、javaやcでも御馴染みのtickcountっぽい動作のようですよね。そして、C.Basic同梱の説明書から%は1/128秒枚に1ずつカウントアップしているのだと理解しています。

この前提を基に、実際に得られた値を考えると、
%の値 1466000

/128 ⇒ 11453.125 秒
/60  ⇒ 190.88542 分
/60  ⇒ 3.1814237 時間

となりますが、この値の初期値(初期化)はどのようなタイミングなのでしょうか?
というのも、C.Basicは超速なので入力待ちを考慮する必要が出てくるため、この%変数がどのタイミングで「初期化」されるのかを知っておいた方が良いためです。

例えばこの%が桁フロー対策で一定値に到達すると0からループするような場合、実装次第でバグってしまうためです。
(もしかしたらfx-9860GIIの累計起動時間? ブラックボックスでないことを願います^^;)

暫定仕様なのは承知していますが、現状分かっている内容があればお教えいただければ幸いです!

■追伸
御二方とも体調に気を付けてください。
今後ともよろしくお願い致します。

Re: %変数の件 - 追記有り

ガノー様

迷路作成サンプルプログラムのエントリーをアップしました。

目の前に迷路があるので、これで遊びたくなってしまい、サクッと迷路通過プログラムを作ってみました。併せてこおのエントリーにアップしました。

迷路プログラム:http://egadget.blog.fc2.com/blog-entry-496.html



> アマループ、、、お勧めされていたので
> サイバーマンデーで購入しました。多分明日届きます(^^)

コスパがとても良いですよね!


ところで、sentaro様へのご質問の % 変数ですが、上の迷路で遊ぶプログラムで使っています。
最初に %→A で取り込んだ A を基準に、%-A で経過時間を求めています。


> さて、最近は
> C.Basicでゲームを作ろうとわくわくしています。
> C.Basicなら超速なので昔のN88BASICを彷彿させるようなゲームがいくらでも作れそうですね!

私もワクワクしながら、少しでも多くの方に C:Basic プロジェクトを知って貰いたくと思っています。

是非宣伝してください!
また、サンプルプログラムを作られたら、是非教えて下さい。

あとは、sentaro様からの回答にお任せ致します。私も聞いておきたい質問です。


> ■追伸
> 御二方とも体調に気を付けてください。
> 今後ともよろしくお願い致します。

ご丁寧に、恐れ入ります。


sentaro様
ガノー様のタイマーがリセットされる可能性と、そのときの内部対応に関するご質問ですが、ライフゲームで時間測定がおかしくなる現象と、関連性あります?

この可能性を完全に見落としてましたが、寄せられた質問がタイムリーなので、お尋ね致します。

確か、キチンとしたタイマーてはなくて、デバッグ用のものを私の要望で%変数としてそのまま実装してもらったことを思い出しました。

Re:%変数の件

管理人様、こんにちは!

>Ver 0.83b だとライフゲームを5回走らせると1回くらい失敗していましたが、Ver.0.84 で6回走らせたところで失敗は有りません。改善したのは間違い無いです。もうしばらく使ってみて確認を継続しますね。

5回に1回の失敗というのはかなり確率高いですよね(^^;
原因がまだ掴めてないのですが、とりあえず失敗が無くなったとのことなのでよかったです。


>不具合については、私の手元ではノーマルクロックと 236MHz 、280MHzでしか試しておらず、ノーマルでは問題なくオーバークロックすると見えない、あるいは見えづらいことがあります。
>そちらで再現しないとのことですが、Ftune2 のバージョンの影響って有り得ますか?

Ftune2のバージョンでの違いは影響ないと思われますので、各周波数やメモリのウエイト設定値がポイントですね。
デフォルトの236MHzでも起きるとなると普通に再現してもいいはずなのですが、手持ちの2台ともに現象が再現しないのでなかなかシビアな状況です(^^;
見えなくなるバージョンで周波数を落としていって普通に見える境目はどの周波数のあたりでしょうか?
それから見えなくなる周波数設定でPFCだけを半分に落としても見えにくい状況に変化はないでしょうか?
メモリのウエイトを増やしても変化はないでしょうか?
[×]でROMウエイト、[+]でRAMウエイトが増えます。


>迷路作成サンプルプログラムのエントリーをアップしました。

早速にゲーム化されているのが管理人様ですね!
あ゛、プログラムのリンク先がLIFE063.G1Mのままです(^^;


>ガノー様のタイマーがリセットされる可能性と、そのときの内部対応に関するご質問ですが、ライフゲームで時間測定がおかしくなる現象と、関連性あります?

24時間でリセットされるのでその境目に当たるとおかしくなる可能性ありですね。




ガノー様、こんにちは!

>CHAR画面の固定、本当にありがとうございました。
>(日本人なので日本語でコメントが書けて最高です。)

カナフォントが実装されていないfx-9860GIIだけに実験的な実装に留まっていたところでしたけど、
ガノー様の追加仕様のご提案のおかげで実用性が増したのは大きいです。
こちらこそありがとうございます(^^)


>さて、最近は
>C.Basicでゲームを作ろうとわくわくしています。
>C.Basicなら超速なので昔のN88BASICを彷彿させるようなゲームがいくらでも作れそうですね!

おお!いいですね!
ご期待しています(^^)

また何かこんなコマンド&追加機能があればいいなというのがありましたらどんどんお願いします。


>となりますが、この値の初期値(初期化)はどのようなタイミングなのでしょうか?

%で読み出される値はCPUに実装されている1/128s分解能のRTCのカウントデータがそのまま読み出されているっぽいので、
最大値は24×60×60×128=11059200までということになります。
つまり24時間ごとにリセットされます。
任意の値にセットすることは可能なので次期バージョンで%変数の初期化機能(→%)を実装してみます。


>■追伸
>御二方とも体調に気を付けてください。
>今後ともよろしくお願い致します。

ありがとうございます!
こちらこそよろしくお願い致します(^^)

Re: Re:%変数の件

sentaro様

> あ゛、プログラムのリンク先がLIFE063.G1Mのままです(^^;

これ何度も確認したのですが、どうもFC2のシステム異常のような感じです。

しばらく待って、もう一度確認してみます。


> Ftune2のバージョンでの違いは影響ないと思われますので、各周波数やメモリのウエイト設定値がポイントですね。
> デフォルトの236MHzでも起きるとなると普通に再現してもいいはずなのですが、手持ちの2台ともに現象が再現しないのでなかなかシビアな状況です(^^;
> 見えなくなるバージョンで周波数を落としていって普通に見える境目はどの周波数のあたりでしょうか?
> それから見えなくなる周波数設定でPFCだけを半分に落としても見えにくい状況に変化はないでしょうか?
> メモリのウエイトを増やしても変化はないでしょうか?
> [×]でROMウエイト、[+]でRAMウエイトが増えます。

今度調べて、報告しますね。



> >迷路作成サンプルプログラムのエントリーをアップしました。
>
> 早速にゲーム化されているのが管理人様ですね!

いつものように、通勤電車でポチポチとプログラミングです。


> 24時間でリセットされるのでその境目に当たるとおかしくなる可能性ありですね。

なるほど、そりゃそうですね。


> 任意の値にセットすることは可能なので次期バージョンで%変数の初期化機能(→%)を実装してみます。

楽しみです。


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

アドイン版 C.Basic ver.0.85 テスト版 その8.5(タイム変数%初期化版)

管理人様、こんにちは!

>これ何度も確認したのですが、どうもFC2のシステム異常のような感じです。

なるほど、そういうことだったのですね。
今は正常になってますね(^^)

で、迷路がゲームになるとちょっとハマりますね(^^)


>今度調べて、報告しますね。

なかなかシビアなタイミングな感じがするので、また今回のバージョンアップでどうなるかというところなのですが…、


アドイン版 C.Basic ver.0.85 テスト版 その8.5(タイム変数%初期化版)
http://pm.matrix.jp/CB/CBASIC085.zip

1/128秒単位でカウントされる時間計測用の%変数への初期化が出来るようになりました。

0→%
ゼロからカウント開始します。

%変数は24時間制のタイマーで1/128秒単位でカウントアップしていきます。
時×分×秒×128が%変数のとる値となります。

Re: アドイン版 C.Basic ver.0.85 テスト版 その8.5(タイム変数%初期化版)

sentaro様

変数型式指定記号, % と # について、チョット混乱しているので、再確認させてください。

話をしやすくするために、以下のプログラムを挙げます。

'#CBint
CltText
0→%
%→T
While 1
Getkey→K
(%-T)÷128→T#
Locate 7,4,T#
WhileEnd

私の理解では、Intモードでも T# とすれば、実数変数T が使われるので、Locate 7,4,T# は小数表示をする筈。
ところが整数表示になります。


次に、冒頭の '#CBint をコメントアウトし、Execute mode を double と int の2通りに切り替えて実行してみます。
結果は、doulbeモードでは小数表示、intモードでは整数表示、となりました。

どうも、T# が実数変数にならないようです。
変数参照機能で調べても、上の通りの結果が確認できます。


仕様の問題なのか?或いはバグなのか?、も含めてお尋ね致します。


追加要望あれこれ

管理者様

操作して遊べると楽しいですね!
1点だけ。本文の部分部分でゼノーとなっているか所があるので修正して頂ければ幸いです(^^)。

ちなみに、
棒倒し法だとスタート時は上側を通り右側を抜けてゴールに向かう迷路ばかりが作られます。これを知るともっと複雑な迷路生成アルゴリズムを移植したくなります(^^;)


sentaro様
・%を任意に0クリアできるようになると安心ですね。

ゲームを作る用途では、必要十分な機能だと思います!

そしてまた、要望が出てきました…。

ゲームを作る際のデータ定義として、純正にある以下の行列初期化構文を使いたかったのですが、C.Basicでは構文エラーになるようです。任意値で初期化する用途はゲームでは結構出てくると思うのでよろしければご検討いただきたく、お願い申し上げます。

例)

L=1⇒[[3,1,2,3]]→Mat D
L=2⇒[[5,3,3,4,2,6]]→Mat D


要素数、データ1、データ2、データ3のようにして定義したデータを、ステージ毎に切り替えるといった用途です。

以上、宜しくお願い致します。

アドイン版 C.Basic ver.0.86 テスト版 その8.6(Mat行列個別初期化追加版)

管理人様、こんにちは!

>私の理解では、Intモードでも T# とすれば、実数変数T が使われるので、Locate 7,4,T# は小数表示をする筈。
>ところが整数表示になります。

C.Basicの実数モードと整数モードの違いは、プログラム内での式評価を実数で行うか整数で行うかの違いなので、コマンドの中で扱われる数値もそのモードに支配されます。
つまり、整数モードではどのコマンドでも扱われる数値が整数値として計算、評価されるので、実数変数を明示的に指定してもコマンドに渡される数値としては整数値となります。
ということなので、

T#と実数変数を指定してもLocateコマンドに渡されるときには整数値になっているために整数表示になってしまいますので、実数表示をするためにはLocateコマンド実行前に実数モードに切り替える必要ありです。

逆に実数モードでは実数が整数の範囲をすべて含むために整数変数を混在させても何も問題なく期待通りに動作することになります。

なぜにこういう仕様になったかというと、最初は整数版C.Basicという形で別のアドインでしたけど、従来の実数版と統合するときに実数ベースで整数演算を扱えるようにしてもそこまでの高速化が出来なかったので、扱えるのは整数だけと割り切った整数限定モードでパフォーマンスを最大限に発揮させようということでした(^^;



ガノー様、こんにちは!

>ゲームを作る際のデータ定義として、純正にある以下の行列初期化構文を使いたかったのですが、C.Basicでは構文エラーになるようです。任意値で初期化する用途はゲームでは結構出てくると思うのでよろしければご検討いただきたく、お願い申し上げます。

了解しました。
CasioBasicでのMat行列の初期化方法としては普通に用いられる形式だと思うので実装しておかないとまずいですね(^^;

ってことで、

アドイン版 C.Basic ver.0.86 テスト版 その8.6(Mat行列個別初期化追加版)
http://pm.matrix.jp/CB/CBASIC086.zip

CasioBasic準拠のMat行列の個別初期化に対応しました。
(例)[[1,2,3][4,5,6]]→Mat A

以前よりMat配列と表記していたところをMat行列と書き換えました(^^;

Re: 追加要望あれこれ

ガノー様

> 1点だけ。本文の部分部分でゼノーとなっているか所があるので修正して頂ければ幸いです(^^)。

コメント頂いて、取りあえずスグに修正しています。失礼しました。Ganot と頭にインプットしたので、これからは間違えないと思います(^^;


> ちなみに、
> 棒倒し法だとスタート時は上側を通り右側を抜けてゴールに向かう迷路ばかりが作られます。これを知るともっと複雑な迷路生成アルゴリズムを移植したくなります(^^;)

今回のがきっかけて、迷路作成アルゴリズムについて初めてググってみたのですが、色々あるのですね。
複数の異なるアルゴリズムの迷路を、ランダムに選んで表示すれば、プレイヤーは決め打ちができないので、ゲームとしては面白くなりそうです。

他のも移植できた時は、是非また教えてください。
TryMageプログラムを人のふんどしでグレードアップさせて頂きます...(*^-^*)



sentaro様


> ゲームを作る際のデータ定義として、純正にある以下の行列初期化構文を使いたかったのですが、C.Basicでは構文エラーになるようです。任意値で初期化する用途はゲームでは結構出てくると思うのでよろしければご検討いただきたく、お願い申し上げます。
>
> 例)
>
> L=1⇒[[3,1,2,3]]→Mat D
> L=2⇒[[5,3,3,4,2,6]]→Mat D
> :
>
> 要素数、データ1、データ2、データ3のようにして定義したデータを、ステージ毎に切り替えるといった用途です。


そういえば、以前のエントリーで私が [[ ..... ]] で初期化するソースを書いたら、{}→ で楽に初期化できると sentaro様から教わって、それをすっかりきれいに忘れていました。

http://egadget.blog.fc2.com/blog-category-19.html


で、Ver 0.86 頂きました。

ここで、カーソルに変化が現れたので、Ftune2 の設定について報告致します。

> 見えなくなるバージョンで周波数を落としていって普通に見える境目はどの周波数のあたりでしょうか?
> それから見えなくなる周波数設定でPFCだけを半分に落としても見えにくい状況に変化はないでしょうか?
> メモリのウエイトを増やしても変化はないでしょうか?
> [×]でROMウエイト、[+]でRAMウエイトが増えます。

先ずは、カーソルの現状;
点滅せず、現れっぱなしの状況。でカーソルを動かすと消えてなくなることがたまに発生。

[SHIFT] [MENU] (setup) での設定状況は以下の通り;

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

デフォルトの[F5] (235.93MHz) 設定で、PFC を /16 から /32 にすると、カーソルが点滅してくれます。

そこで、この状態から PLL X38 の PLL にカーソルのある時に右矢印を押して 280.17MHz にすると、カーソルが見えっぱなしと消えて見えないという上記の状況が出ました。ここで、[+] や [×]で ROM と RAM のウェイトを数段階づつ増やしていっても、カーソルの状況改善せず。

ところで、PFC Auto Up: on を off に変えても、PFC 1/32 の設定が保存できないのですが、保存方法と条件設定がよくわかりません。

...といった感じです。

以前、カーソル表示がうまくいっている場合は、236MHz や 280Mhz でもカーソルに問題はでないんです。

No title

■管理者様

修正の件確認しました。ありがとうございます!

ちなみに、実は迷路作成は同じ仕組みですが、3D迷路を現在作成中です。
もし完成した暁には、管理者様の御眼鏡にかなえばこちらのサイトにて公開させて頂ければなぁと思っています。
多少長くなるため、g1mを自分のファイル公開スペースにあげたいと思っています。

宜しければご一考くださいませ!

■sentaro様

C.Basicは処理速度もですが、sentaro様は本当に開発速度も爆速ですね。
Matの初期化、御対応有難うございました。

そして、、、更に要望が出てきましたのでご検討お願い致します。

●デバッグ機能関連

リストエディタから直接変数や行列を変更できるのは高機能なIDEがついているようなものですね!
純正より迅速にデバッグできてありがたいのですが、更に欲が出てしまったので(^^;)、以下ご検討いただければと思います。

・ご報告:Mat Editorでフリーズする

デバッグ機能としてMat Editorを搭載しておりますが、一つのセル(?)の値を編集して値を確定するとき、稀にフリーズするようです(感覚的に1/10程度?)。本体のリセットボタンをポンすれば全然OKなので気が向いたら御調査頂ければと思います。


・要望:リストエディターからグラフィック画面やテキスト画面へ切り替えたい

プログラムにてエラーが出た場合、エラーメッセージ表示後にリストエディタが表示されますが、そこにも「G←→T」ボタン出して、それを押してグラフィック画面やテキスト画面へ切り替えられると、更にデバッグがし易くなると思います。




●グラフィック関連

以下の機能は純正に無いため、C.Basicの理念的に合うか不明ですが、宜しければご考慮頂ければ幸いです。

・白線を描くスタイル(ピクセルオフにしSkechDotみたいにF-Lineで使える)、若しくはピクセルをオフにする線描画命令が欲しい
・四角形描画機能/領域塗りつぶし命令(Rect、FillRect)が欲しい



■管理者様&sentaro様

任意領域のピクセルをオフにする命令が純正には圧倒的に少なく、PxlOff/PxlChange程度しかありません(多分)。
3D迷路を作っている過程で、左半分に迷路を描き、右半分に3D描画をしていますが、画面内の部分クリアで良いアイディアはあるでしょうか?

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

を参考にし、
純正では一度描いた画面をStoPictしておき、ClrGraphしてRclPictをするようなことが必要になる(?)と思われますが、機種によっては遅い(みたい?…まだ初心者なので判別がつかず)みたいでこの方法に踏み切るか躊躇しています。

宜しければご意見を頂けたら幸いです。

以上、宜しくお願い申し上げます!

新機能への考察

ガノー様

> ちなみに、実は迷路作成は同じ仕組みですが、3D迷路を現在作成中です。
> もし完成した暁には、管理者様の御眼鏡にかなえばこちらのサイトにて公開させて頂ければなぁと思っています。
> 多少長くなるため、g1mを自分のファイル公開スペースにあげたいと思っています。
>
> 宜しければご一考くださいませ!

完成時は、是非お知らせください。
楽しみです。



> ●デバッグ機能関連
>
> リストエディタから直接変数や行列を変更できるのは高機能なIDEがついているようなものですね!
> 純正より迅速にデバッグできてありがたいのですが、更に欲が出てしまったので(^^;)、以下ご検討いただければと思います。
>
> ・ご報告:Mat Editorでフリーズする
>
> デバッグ機能としてMat Editorを搭載しておりますが、一つのセル(?)の値を編集して値を確定するとき、稀にフリーズするようです(感覚的に1/10程度?)。本体のリセットボタンをポンすれば全然OKなので気が向いたら御調査頂ければと思います。

以前のバージョンではこういう状況は未経験ですが、Ver 8.0 以降は Matエディタをあまり使っていないので、気付きませんでした。

やはり使う人が増えた方が良いですね。



> ・要望:リストエディターからグラフィック画面やテキスト画面へ切り替えたい
>
> プログラムにてエラーが出た場合、エラーメッセージ表示後にリストエディタが表示されますが、そこにも「G←→T」ボタン出して、それを押してグラフィック画面やテキスト画面へ切り替えられると、更にデバッグがし易くなると思います。

私は、エラーが出る直前でプログラムを止めるように変更して、画面の確認をしていました。しかしこの機能はあったら助かると思います。




> 任意領域のピクセルをオフにする命令が純正には圧倒的に少なく、PxlOff/PxlChange程度しかありません(多分)。
> 3D迷路を作っている過程で、左半分に迷路を描き、右半分に3D描画をしていますが、画面内の部分クリアで良いアイディアはあるでしょうか?
>
> http://egadget.blog.fc2.com/blog-entry-458.html
>
> を参考にし、
> 純正では一度描いた画面をStoPictしておき、ClrGraphしてRclPictをするようなことが必要になる(?)と思われますが、機種によっては遅い(みたい?…まだ初心者なので判別がつかず)みたいでこの方法に踏み切るか躊躇しています。

RclPict は、純正Casio Basicではメインメモリ領域を使いますが、C.Basicではストレージメモリを使う仕様になっているため、動作が遅くなります。C.Basicの高速性が損なわれるので、他に方法がなければ速度を犠牲にするしかない...と私は思っていました。

先ずは2D迷路の場合、別アプローチとして迷路の作成は Mat変数を利用して画面のビットマップを作っておき、完成後 DotPutコマンド(C.Basic 独自拡張機能)で一気に描画する。或いは、画面分割して、小さめの Mat変数にビットマップを作っておき、繰り返し描画する...といった方法を考えていました。おそらくこの方が高速化するだろうと期待しています(すみません実際に作って確認するまでには至っていません)。

ビットマップ関連では、DotGetコマンドで、画面やMat配列変数から、好きなところを切り取る機能や、DotTrimコマンドで、最低限のサイズで切り取る機能などを、御願いして作っていただいています。これらは、メモリ上で迷路を作る際には、役立つかも知れません。


で、何故2D迷路の話しを申し上げたかと言いますと、同じ手法(メモリ上で作る)を3Dで行うには多くのMat変数が必要になるだろうと想像していて、整数型のMat変数でも、メモリ制限から十分な個数のMat変数を使えないだろう....という感じがしています。

なので、白線、や Rect, FillRect などのコマンドがあれば、ビットマップコマンドだけで出来ないことが、出来るようになりそうだなぁ...と

ガノー様のお考えの焼き直しを、お話してしいるだけかも知れませんが、その場合はご容赦ください。


で、この際ですが、既にある F-Line, Vertical, Horizontal に反転機能を追加(例えば、Getkey1 のように コマンド名末尾に 'R' を付加する仕様などが実装に良いかも...)し、Rect、RectFill も反転機能を付けて実装する...というのは、如何なものでしょうか?> ガノー様、sentaro様

貴重なアドバイス有難うございました。

To:管理者様

貴重なアドバイス&情報ありがとうございました!

純正では{126,62}→Dim Mat Mをすると即座に領域不足が出てしまったため(他の行列や内部メモリに簡単に影響を及ぼすようなので)全体を取り込んだりメモリ上で作るのを断念しました。。。

そして、迷路作成で純正が鈍速なので、62*62に領域を狭めました(それでも1分強かかりますが^^;)。62*62の行列なら意外と領域確保エラーは起こっていませんが、結局発生する確率が1/2~1/4程度(?)になるだけの気がして領域確保を止めています。
(迷路としてこれ以上縮めると狭い、、、という理由もあります^^;)


また、実際の所3D表示部は3*3の範囲だけを表示するという手抜き実装(予定)なので↓実は今回の実装では使用メモリーを大幅に節約することになりました。

https://twitter.com/Garnot1/status/677412505849692160



さて、実行速度を判断するために、固定的なMAPで3D描画を行う部分を作成し、C.Basic/純正にて各工程で速度を計測し比較しました。

検証プログラムの動作
  ①3D描画→②ストアに保持→③画面消去→④ストアから読込

C.Basic    純正
①0.05秒  3.5秒程度
②0.62秒  0.3秒程度
③0.02秒  0.1秒程度
④0.15秒  0.1秒程度

※純正は凡そ目視で体感。

これはあくまで計測用のプログラムの構造ですので、実際は

②→「③→④→①」をキー入力毎に処理してループ

という構造になるため「②ストアに保持」が1度だけで済むことになります。
ゲームではキー押下後の反応が0.3秒以下なら概ね問題ないと(私は)判断していますので、その条件を満たしそうです。

そのため完全コンパチを目指しつつ、グラフィック命令が増えたら(図々しいですがお許しを…^^;)その機能を採用したバージョンも作ることにしようと思います!

(ちなみに、純正は…迷路生成で1分ちょっと、キー操作毎に4秒弱かかるという・・・計算です。。。とりあえず動くレベルの想定です^^;)



>>>DotTrimやDotGet、DotPut
なるほど、
DotTrimやDotGet、DotPutは便利ですね。これがあればBitBltというかスプライトのような使い方ができますね!!
キャラクターを動かすようなゲームも作ろうと思っているので、とても参考になりました!

以上、色々と有難うございます。今後ともよろしくお願い致します!

No title

管理人様、こんにちは!

>デフォルトの[F5] (235.93MHz) 設定で、PFC を /16 から /32 にすると、カーソルが点滅してくれます。

PFCクロックを下げることで点滅が復活したということは、PFCクロックがカーソル点滅に関わっているということになりますね。
PFCをオーバークロックしても動作上の影響はほぼ無いと思っていたのですがそうではなかったということで、PFCクロックはデフォルトに近い周波数に設定しておくのが良さそうですね。

幸いアドインではPFCクロックは実行速度にはほとんど影響がないのでデフォルトの14.74MHzでも特に問題はなさそうです。
C.Basicでの改善策が見つかるまではとりあえずPFCを下げることで対策をお願いします。


>ところで、PFC Auto Up: on を off に変えても、PFC 1/32 の設定が保存できないのですが、保存方法と条件設定がよくわかりません。

PFC Auto Upの設定はPLL周波数を動かした時に自動的にPFCを上げるかどうかなので設定の保存とは関係ないです。

設定保存するためには[SHIFT]+[F2~F5]を押してファンクションキーに保存してから、[SHIFT]+[F1}でメインメモリーに保存です。
私もこの設定保存の手順をちょっと忘れていて[SHIFT]+[F1}だけの操作で保存できてない?!ってちょっと焦りました(^^;


>以前、カーソル表示がうまくいっている場合は、236MHz や 280Mhz でもカーソルに問題はでないんです。

CasioBasicでカーソル異常にならない以上は、C.Basicの問題なのでなんとか改善できるように頑張ってみます(^^)



ガノー様、こんにちは!

>C.Basicは処理速度もですが、sentaro様は本当に開発速度も爆速ですね。

恐縮です。
デバッグでハマるとなかなか上手くいかないこともありますけど、
すぐに実装できる部分であれば割と簡単なのでサクッといけますね(^^;

>・ご報告:Mat Editorでフリーズする

これは確認しました。
ですが、どの条件で起きているかがまだ掴めてないので少しお待ち下さい(^^;


>・要望:リストエディターからグラフィック画面やテキスト画面へ切り替えたい

了解しました。
画面確認が出来れば確実に便利ですね。
これは簡単に実装できると思います(^^)


>●グラフィック関連

管理人様にもご提案いただきましたので互換性を損なわないように拡張実装してみます。

Re: No title

sentaro様

> 幸いアドインではPFCクロックは実行速度にはほとんど影響がないのでデフォルトの14.74MHzでも特に問題はなさそうです。
> C.Basicでの改善策が見つかるまではとりあえずPFCを下げることで対策をお願いします。

了解です。

> >ところで、PFC Auto Up: on を off に変えても、PFC 1/32 の設定が保存できないのですが、保存方法と条件設定がよくわかりません。
>
> PFC Auto Upの設定はPLL周波数を動かした時に自動的にPFCを上げるかどうかなので設定の保存とは関係ないです。
>
> 設定保存するためには[SHIFT]+[F2~F5]を押してファンクションキーに保存してから、[SHIFT]+[F1}でメインメモリーに保存です。
> 私もこの設定保存の手順をちょっと忘れていて[SHIFT]+[F1}だけの操作で保存できてない?!ってちょっと焦りました(^^;

わ、そうでしたか...で、うまく保存できました。
PFCをデフォルトの 14.7MHz にしておけば、236Mhz でも 280MHz でもカーソルが点滅してくれました。


> CasioBasicでカーソル異常にならない以上は、C.Basicの問題なのでなんとか改善できるように頑張ってみます(^^)

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


で、取りあえずアドイン版 Casio Basic のトップページを作りました。目次ページの位置づけです。
ここから、C.Basic の使い方、コマンドリファレンスを見られるようにする予定です。

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


ついでに、海外進出に備えて、英語版も作っておきました。日本誤版トップページに<Top Page>としてリンクを張ったので、和英両方のトップページで言語を切り替える感じです。

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

例によって英語版を先につくって和訳のスタイルです。これが一番楽ですね。
今後、ボチボチと和英両方で、使い方とコマンドリファレンスを書き足して行きますね。

で、併せて純正Casio Basicについてのまとめは、始めていた Inside Casio Basic を継続....と


なんだか、C:Basic の海外進出の布石...メッチャやり応えありますね(^^;

アドイン版 C.Basic ver.0.87 テスト版 その8.7(Rectコマンド追加版)

管理人様、こんにちは!

>PFCをデフォルトの 14.7MHz にしておけば、236Mhz でも 280MHz でもカーソルが点滅してくれました。

PFCはI/O関連のクロックなのでカーソル動作に何かしら関連があるのは間違いないですね。
CasioBasicでは今までに不都合なことはなかったのですが、
もしかしたらCasioBasicでもあまり上げないほうがいいのかもしれません(^^;


>で、取りあえずアドイン版 Casio Basic のトップページを作りました。目次ページの位置づけです。
>ここから、C.Basic の使い方、コマンドリファレンスを見られるようにする予定です。

おお!いいですね!
本格的なマニュアルが出来ると取っ付き易くなりますね(^^)


>ついでに、海外進出に備えて、英語版も作っておきました。日本誤版トップページに<Top Page>としてリンクを張ったので、和英両方のトップページで言語を切り替える感じです。

これはまたすごいです!
海外の方が来てもこれで安心ですね(^^)

添付マニュアルの英語版は管理人様のこのページを参考に、というか、英語版は丸ごと管理人様にお願いしたいところです(^^;


というところで、ガノー様のご要望に基づいたグラフィック関連のコマンド拡張版です。

アドイン版 C.Basic ver.0.87 テスト版 その8.7(Rectコマンド追加版)
http://pm.matrix.jp/CB/CBASIC087.zip

・エディタでG<>T切り替えを[SHIFT]-[F6]に実装しました。そのために検索[SRC]キーの割当が[F5]に移動しました。

・RectおよびFillRectコマンドを追加しました。Pxl系コマンドで実座標指定となります。
 (例)Rect 1,1,127,63
   画面いっぱいに枠を描きます。
 (例)FillRect 1,1,127,63
   画面を塗り潰します。

・グラフィックコマンドの末尾に[,C]を加えると消去します。[,X]で反転します。
 (例)FLine 1,1,30,20,C
 対象コマンドは、Line,FLine,Vertical,Horizontal,Circle,Rect,FillRectとなります。

それから、ガノー様のStoPict/RclPictベンチマークから、C.Basic唯一?の弱点ということで、
・StoPict/RclPictコマンドを内部ヒープメモリに対応しました。(メインメモリ互換ではないです(^^;)
 Setupにてストレージメモリとの切り替え動作になります。
 Pictファイルの互換が無くなる代わりに速度向上しました。
 Basic動作上の互換性は確保されていますので、CasioBasicのソースはそのままで動きます。

あと、微妙にオーバークロックでのカーソル対応してみたのですが、どうでしょうか?

Matエディタでのバグは今のところまだ解消できた見込みがないので、たぶんまだバグります(^^;
それ以外にもエンバグしている可能性もあるので、今回のバージョンは若干要注意版です(^^;

アドイン版 C.Basic ver.0.87a テスト版 その8.7a(バグ修正版)

管理人様、ガノー様、こんにちは!

Ver.0.87に細かなバグが見つかりましたので修正です(^^;
あと、SH4Aのキャッシュの動作のせいなのかよくわからないのですが描画関連で微妙に速度低下が目立っていたので修正しました。
ですが、また逆に遅くなった別の箇所があるかもしれません(^^;

Matエディタのフリーズは最優先課題なのですが、なかなか再現性が良くないので今回もまだ直っているかどうかというところです。
それから、管理人様のカーソルが異常になる状況がやっと再現しました。
USBを繋いだ状態でオーバークロックすると発生します。オーバークロックした状態でUSBを繋いでも同様です。
カーソルが異常な状況はPFCを14.75MHzにしても解消せず、メモリクロックを下げてやっと解消しました。
USBを挿さない状態だとカーソル異常は発生しないので、USBを挿した状態では何かしら電卓の動作状況が変化することが確定です。

管理人様のfx-9860GIIではUSB関係無しで発生しているので、何かしら根本的な対策が必要なのは間違いないですね。

アドイン版 C.Basic ver.0.87a テスト版 その8.7a(バグ修正版)
http://pm.matrix.jp/CB/CBASIC087a.zip

アドイン版 C.Basic ver.0.87b テスト版 その8.7b(キーリピート設定版)

カーソルが表示できなくなる原因として関係あるのかどうなのかというところなのですが、
C.BasicではCasioBasicのデフォルト設定よりも若干リピート速度を速くしていたので(125ms→75ms)
キーリピートタイムの設定を自由に出来るようにしてみました。

最初の起動時はCasioBasicのデフォルト速度となります。
セットアップで設定すれば次回はその設定で起動します。


アドイン版 C.Basic ver.0.87b テスト版 その8.7b(キーリピート設定版)
http://pm.matrix.jp/CB/CBASIC087b.zip

・エディタ等でのキーリピート時間の設定が出来るようになりました。
 セットアップから指定できます。
 Key 1st time: 25ms~1000ms (デフォルト値 500ms)
  リピート開始までの時間 (25ms単位)
 Key Rep time: 25ms~500ms (デフォルト値 125ms)
  リピート継続時間 (25ms単位)

・変数表示を区別しやすいように整数変数に%を付けました。


2015-12-21 追記
RectとFillRectにちょいバグ見つかったので 0.87b差し替え再アップしました。

Re: アドイン版 C.Basic ver.0.87b テスト版 その8.7b(キーリピート設定版)

sentaro様

ここのところ、反応が遅くて申し訳ありません。

fx-9860GII は最近日常使いで、毎日仕事で使っています。なんと言っても C.Basic の Program List のお気に入り機能のお陰です。

私の場合、科学技術計算をガシガシ行うことはあまりなく、大抵は予め作っておいた技術計算プログラムで用が足りるので、fx-9860GII を関数電卓として使うよりも、プログラム実行環境と、簡単な四則演算用電卓として使うのが現状です。

その場合、fx-9860GIIは立派な日常使い電卓になっています。科学技術計算をバリバリ行うには、fx-5800Pの方が使いやすそうな感じではあります。


さて、どうにも時間が取れず、精力的なアップデートに追従できずにおります。申し訳ありませんが、チョット時間をください。

その間、アップデートがどんどん進むかも知れませんが、ご容赦を...

No title

管理人様、おつかれさまです。

>fx-9860GII は最近日常使いで、毎日仕事で使っています。なんと言っても C.Basic の Program List のお気に入り機能のお陰です。

普段使いとしてはfx-5800Pに負けていた部分が多々あるfx-9860GIIですけど、C.Basicでプログラムに関しては使い勝手でもかなり迫ったでしょうか(^^)


>その場合、fx-9860GIIは立派な日常使い電卓になっています。科学技術計算をバリバリ行うには、fx-5800Pの方が使いやすそうな感じではあります。

考えてみるとfx-5800Pは本当にバランスのよい機種ですね。
ライバル機が全く無いのもこの完成度を超えるのは簡単ではないというところでしょう。


>さて、どうにも時間が取れず、精力的なアップデートに追従できずにおります。申し訳ありませんが、チョット時間をください。
>その間、アップデートがどんどん進むかも知れませんが、ご容赦を...

了解しましたです。
今のところ、残っているバグを早く見つけて潰して、安心して使える安定環境とならないとという段階です(^^;

3D迷路一応完成、0.87SystemError発生その他諸々

■To:管理者様

年末大変そうですね!私の所は今週末からようやくドタバタすると思いますが、まだ平常運航です^^;

前回お話している3D迷路は動作するものになっていますが、少し変な挙動があるためもうちょっと時間がかかりそうですm(_ _)m


■To:sentaro様

3D迷路を作りました。
C.Basic⇒純正⇒C.Basicと開発し、一応両方で「動作する」ことは確認致しました。

しかし、問題が2点あります。

もしよろしければ、当該のソースを以下にアップしていますので動作を確認して頂ければと思います。

MAZ3D.G1M(迷路のメイン部、迷路作成/ループ)
https://dl.dropboxusercontent.com/u/93225197/fx9860gii/MAZ3D.G1M

MAZ3DDRW.G1M(迷路の3D描画部)
https://dl.dropboxusercontent.com/u/93225197/fx9860gii/MAZ3DDRW.G1M

POLYLINE.G1M(純正コンパチ用に定義した折れ線描画ルーチン)
https://dl.dropboxusercontent.com/u/93225197/fx9860gii/POLYLINE.G1M



●1:C.Basic側で描画がおかしい挙動をする
純正コンパチの為に、StoPict後にClrGraph後RclPictする仕組みを使っています。

問題はその後3D描画を行うためのサブルーチンであるMAZ3DDRWを呼び出しても、描画が中途半端になってしまうことが多発します。

原因追究の結果、回避策としてキー入力ループで以下を入れ込むと大幅に改善(今の所問題が起こらない)ことが分かりました。

Do
'/PxlOn 1,125
Getkey→K
LpWhile K<10

※この現象の確認は0.86でのみ行っています。0.87は以下に示す問題が発生するため未検証です。



●0.87にてMAZ3D.G1Mを編集しようとすると特定行でSystemErrorが100%起こります。
発生する箇所は30行目前後(睡眠不足で、目視で行をカウントしているのでずれているかも)の内容で、
[[5,67,6,121,6,121,60,67,60,67,6]]→Mat L:Prog "POLYLINE"

です。
ファイル編集→「↓」キー連打でここを表示するとエラー発生します。発生内容は、以下です。

System ERROR
REBOOT :[EXIT]
INITIALIZE:[EXE]
TLB ERROR
TARGET=003A83F1
PC =00000001

が出てきます。
ちなみに、

・ファイル編集せず実行すると正常に実行できます。
・ファイル編集→BTMでも発生します
・このファイルは、C.Basic0.86で開発→純正に取り込んでC.Basic依存コードの修正→0.87へアップグレード後C.Basic0.87で編集しようとしたものです。
・他のMAZ3DDRW.G1MやPOLYLINE.G1Mではこのエラーは発生しません

■その他の点

ここ以降は、前述の迷路のファイルとは無関係に、気になった点を列挙致します。

'Test:Best
While Getkey>10
WhileEnd
While Getkey<10
Locate 1,1,%
WhileEnd

●0.87にて、右上の実行中の■がチラついたり、ゆっくり点滅したりします。管理者様のおっしゃっている現象と同じなのでしょうか?・・・。

●このコードの先頭に0→%を入れ込み、TimeDspをOnにすると、終了時の時間がマイナスになります。

●以下のようなコメントの場合、純正はコメント内の「:」でも、行の終了(結局コメントの終了と見なされる)ようです。
どう見ても純正側のバグですが、一応統一した方が良いかと思いましたので連絡しておきます。

'Test:Best

[[追記]]
一応、ご報告ですが、動作検証動画を作りました。

3D迷路動作確認動画(クリアまでの動作)
https://www.youtube.com/watch?v=v0wuaTdwVY4

3D迷路の純正とC.Basicの動作比較
https://www.youtube.com/watch?v=ltqq_SKGLzs

以上、追記終わり

アドイン版 C.Basic ver.0.88 テスト版 その8.8(ビットマップコマンド拡張&バグ修正版)

ガノー様、こんにちは!

3D迷路プログラム頂きました。
3Dになると臨場感が違ってきますね。ちょっと油断すると今どこにいるのか道に迷ってしまう感覚が超懐かしいです。
これは遊びだすとハマります!
そして、CasioBasicコンパチで動くのはなかなか良いです(^^)

動作検証動画はまさに百聞は一見に如かずですね。
どうもありがとうございます!!


>●1:C.Basic側で描画がおかしい挙動をする

これは右上の実行中の■のちらつきとも関連するのですが、C.Basicの現在の仕様として描画系コマンドではLocateとText以外のコマンドは画面更新がコマンド終了ごとではなく、直前の画面更新からの経過時間がある一定時間(約1/40秒)過ぎないと画面更新をスキップするようになっているために(約1/40秒)以内で描画処理が終了すると画面更新が行われないまま次のコマンドに実行が移ってしまい描画未完という状況になってしまいます。
そのためにを強制的に画面更新する場合は、Textコマンドを使って、
Text 1,1,""
というようにTextコマンドを使用します。この例では何も表示しないので画面に影響は出ませんが画面更新は必ず行われるのでそれまでの未描画状況が確実に更新されます。

しかし、Textコマンドでも後に続く区切り文字が「:」の場合は画面更新が全くされなくなります。これはLocateでもClr系コマンドでも同様です。
内部処理だけになるので裏で画面を描いてから一度に書き換え表示ということが出来るようにこういう仕様を追加してあります。

(約1/40秒)ごとの画面更新は右上の実行中の■がちらつかないようにすることと不必要な画面更新を抑制するためにこういう仕様になっているのですが、互換動作としては若干の違いが出てしまうのでそこは少しだけ対策が必要ということになりますね(^^;

ガノー様の対策はPxlOnをキー入力待ちループに組み込んでいるのでループ中に(約1/40秒)経過すれば画面更新がきっちりされてるという感じですね。


>●0.87にてMAZ3D.G1Mを編集しようとすると特定行でSystemErrorが100%起こります。

これはカナ文字(2バイトコード)のコード処理にバグがあったためにそれがフリーズの原因になってましたので修正しました。
純正のエディタでMAZ3D.G1Mを開くと、
[[5,67,6,121,6,121,60,67,60,67,6]]→Mat L:Prog "POLYLINE"
の次のコメント行の
'Create a maze.
の最初のCの左側でカーソルが一旦止まる状況になると思います。
この箇所にカナ文字の1バイト目が残っているためにC.Basicのエディタでカナ文字表示がコード範囲外になってバグってました。
おそらくカナ文字コメントのソースを純正側に持って行って化けた部分を削除した時にカナ文字のコードの1バイト目が残ってしまったためかと思われます。
このバグはカナ文字が導入された当初より存在していたと思われるのですが(^^;カナ文字を使用してないと出現しないであろうバグだったので助かりました。
発見していただきまして感謝です!


>●0.87にて、右上の実行中の■がチラついたり、ゆっくり点滅したりします。管理者様のおっしゃっている現象と同じなのでしょうか?・・・。

右上のマーカーは表示期間が次の描画更新のタイミングまでなので画面更新の頻度が増えると見えにくくなってしまいます。
毎回画面更新するLocateとTextコマンドが連続してくるとそうなってくるわけですが、管理人様のカーソルが消える現象はまた別の要因(まだちょっと掴めてないです…)のようです。


>●このコードの先頭に0→%を入れ込み、TimeDspをOnにすると、終了時の時間がマイナスになります。

修正というか補正しました(^^;


>●以下のようなコメントの場合、純正はコメント内の「:」でも、行の終了(結局コメントの終了と見なされる)ようです。

この部分では現状非互換となってしまってますが、プログラム内の複数コマンドありの行単位でコメントアウトしたり戻したりという時には純正仕様はちょっと不都合な状況になるので現在の仕様なのですが、
CasioBasicとのソース互換を取る場合はコメント中では「:」を使わないという方法でどうでしょうか?(^^;


というところで、致命的バグのエディタ部分+αを速攻修正です。

アドイン版 C.Basic ver.0.88 テスト版 その8.8(ビットマップコマンド拡張&バグ修正版)
http://pm.matrix.jp/CB/CBASIC088.zip

・カナ文字を使うとエディタがフリーズするバグを修正しました。
・キャラクタ連続入力モードで1文字目が入力されなかったのを修正しました。
・プログラム内でタイム変数%を変更した場合にプログラムの時間計測が不正確になるのを修正しました。

・Locateコマンドの表示指定を追加しました。
 コマンドの最後に[,R]で反転表示となります。
(例)Locate 1,2,"Test",R
  "Test"がテキスト座標(1,2)に反転表示で表示されます。

・Textコマンドの表示指定を追加しました。
 コマンドの最後に[,R]で反転表示、[,O]でOr表示、[,V]で反転Or表示となります。
 [.N] Normal
 [.R] Reverse
 [,O] Or
 [,V] reVerse or
(例)Text 20,80,"Test",R
  "Test"がグラフィック座標(80,20)に反転表示で表示されます。

・グラフィック画面にLocateと同じ文字表示をするLocateYXコマンドを追加しました。
 座標指定はTextコマンドと同じくY座標が先になります。
 コマンドの最後に[,R]で反転表示となります。
(例)LocateYX 20,80,"Test",R
  "Test"がグラフィック座標(80,20)に反転表示で表示されます。

・グラフィック画面のビットマップデータをビット単位で読み取るReadGraph(コマンドを追加しました。
(書式1)ReadGraph(px1,py1,px2,py2)→Mat A
  グラフィック画面の(px1,py1)-(px2,py2)の範囲をMat A行列(強制的にバイト指定)に取り込みます。
  行列は事前に確保しておく必要はありません。自動的に適切な行列サイズで確保します。
  WriteGraphコマンドでそのまま使えるデータとなります。

・ビットマップデータを表示するWriteGraphコマンドを追加しました。
 ビットマップデータは予めMat行列に入力しておきます。
(書式1)WriteGraph x,y,dx,dy,Mat A ,P1[,P2]
  グラフィック画面の座標(x,y)より幅dx、高さdyの範囲にMat Aのデータを描画します。
  P1はデータの表示前加工指定で[,N]でそのまま加工無し、[,R]で反転、[,M]でメッシュ加工、
  P2は指定無しでオーバーライト表示、[,A]でAnd表示、[,O]でOr表示、[,X]でXor表示となります。
(例)[[1,2,4,8,16,32,64,128]]→Mat A
  WriteGraph 80,20, 8,8, Mat A, N
  グラフィック画面の座標(80,20)より斜めの線[/]が描画されます。

(書式1)WriteGraph x,y,dx,dy,Mat A[m,n] ,P1[,P2]
  グラフィック画面の座標(x,y)より幅dx、高さdyの範囲にMat Aの[m,n]からのデータを描画します。
(例)[[16,32,64,128][128,64,32,16]]→Mat A
  WriteGraph 80,20, 4,4, Mat A[1,1], N
  WriteGraph 80,24, 4,4, Mat A[2,1], N
  グラフィック画面の座標(80,20)より[<]の図形が描画されます。

  WriteGraph 80,20, 4,8, Mat A, N
  でも同じ結果となります。

今回のビットマップコマンドはSDKの標準グラフィックライブラリの仕様に沿った拡張なのでちょっとややこしいのですが、アドインと同等の画面描画が可能になります(^^)

3D迷路完成、その他お願い

To:sentaro 様

■描画更新の件

ネイティブにダブルバッファリング対応しているようなものですね。
これは知ってしまえばとても重要な仕様ですね。
Textで「:」の制約があっても、強制表示できることも了解しました。

C.Basicは「'/」があるので互換性を失わずに対策ができるので良いですね。
コメント行の「:」の件も、了解です。

また、カナの件有難うございます。
因みに、0.88で編集できるようになりましたが、コメントを削除して
打ち直す対策の最中にフリーズする状況を発見しました。

前述のファイルMAZ3D.G1Mで「' ~」となっている箇所にカーソルを合わせてスペースの後ろの文字にカーソルを合わせて、←キーを押すとフリーズしました。ここで←を押さずDELで消すと問題は起こっていません。

カナ対応前のファイルを編集して起こった問題ってだけですので、0.88で作成すればそもそも起こる可能性が無ければ気にしないで頂ければと思います(^^;)


■グラフィック系の追加コマンド

素晴らしい!!!! まだ使っていませんが、作れないゲームなんか無くなりますね!!!!
(ゲームばかり作りたくなる人間なのでとっても嬉しい機能です!)

■更なる追加要望

さて、実はもう純正でプログラムを書く気は御座いません。
そう、C.Basicで全て事足りるからです(^^;)。

そして、、、その為にも以下をご考慮頂けると幸いです。

①"ElseIf"を追加して頂けませんか?
If ~:Then ~:Else If ~:Then ~:IfEnd:IfEnd
↓以下の形式も許可して頂ければありがたいです。
If ~:Then ~:ElseIf ~:Then ~:IfEnd

②Ifに対応するIfEndが無い場合、実行時エラーにするオプションと、エラー時に該当のIf文にカーソルしてくれる機能を追加して頂けませんか?

③行の先頭に空白を置くことを許可して頂けませんか?
(インデント用に)

今後超大なソースコードを書こうと思った場合、インデントとElseIf、Ifの閉じ忘れ防止はあった方が良いと感じました。
(お恥ずかしい話ですが、3D迷路描画部を開発中に1カ所Ifの閉じ忘れがあり、それを探すのにちょっと面倒を感じました^^;)

宜しくご考慮お願い致します!

■To:管理者様、sentaro様

3D迷路の最終版を以下にアップロードしました。
https://dl.dropboxusercontent.com/u/93225197/fx9860gii/fx-9860GII_3DMAZE_Sample.zip

あ、ちなみに

裏ワザとして、管理者様の(Krtyski)のKや、sentaro様とSを示すキーを押すと、現在地点が分かるモードになります。迷ったら使ってください(^^)

以上、宜しくお願い致します。

Re: アドイン版 C.Basic ver.0.88 テスト版 その8.8(ビットマップコマンド拡張&バグ修正版)

sentaro様


質問させてください。

ReadGraph と DotGet の違い、そして WriteGraph と DotPut の本質的な違いはどこにありますでしょうか?
使い分けの指針としておたずねします。

もっか仕事が佳境のため、こんな質問だけで失礼します。

Re: 3D迷路完成、その他お願い

がノー様
sentaro様


なんだか、一気に仕様が膨らんできましたね。

ElseIf については、確かにあれば便利かもしれませんね。
ただし、これはがノー様もお書きのように純正でも対処できないことはないわけです。

便乗で申し訳ありませんが、純正では Goto を使って苦労して実装しなければならない switch/case 相当のコマンドがあれば良いと前から思っていました。

えと VBの Select/Case 相当のコマンドではダメなんです。

ピンポイントで言えば、switch/case では、break; を省略すると次の case に行けますが、それを C.Basic に実装できないか?という案件です。

純正にはもともと多条件分岐コマンドがありませんので、それを C.Basicに実装するならば、break; なしの効用も使いたいというわけです。


switch A {
  case 1:
    puts("1");
    break;
  case 2:
    puts("2");
    // break;
  case 3:
    puts("3");
    break;
  default:
    puts("misc");
    break;
}

分かり易いように、あえて break; をコメントアウトする表現にしています。


これを純正および現行C.Basic で実装する方法として、以下のようになります。
純正だと Goto のおかげで実行速度が遅くなるのですが、C.Basicだと直アドレスジャンプなので高速が維持できるので、以下でも良いのですが、視認性の悪い非構造化になるので、苦肉の策ではあります。


A=1⇒Goto 1
A=2⇒Goto 2
A=3⇒Goto 3
Goto Z

Lbl 1
"1"
Goto Z

Lbl 2
"2"

Lbl 3
"3"
Goto Z

Lbl Z


実装の一案ですが、VB準拠の Select/Case を敢えて使わず、逆にわざとC言語風に Switch/Case/Brk コマンドにして、Cと同様な使い方ができると主張してみるという案ですが、如何でしょうか?

※追記: Break だと、純正からある Break とかち合うので、Brk とか何か他のコマンドにしないとダメですね。

但し、どうせ機能を増やすのなら、グラフィックスコマンドのような C.Basicの良さを前面に引き出すものは良いとして、switch/case のようなものは、これまで遠慮してきたというのはあります....

純正Casio Basic から入ってきたユーザーやVBから入ってきたユーザーへの使いやすさを考えると、チョット思案しちゃうんですね。

そこで、ガノー様のご要望に思いっきり便乗させてもらいました...この際、ElseIf と一緒に如何でしょうか?

これから仕事に戻るので、書きっぱなしのようなコメントですが、ご容赦ください。

失礼しました。

Re: 3D迷路完成、その他お願い

ガノー様、こんにちは!

>ネイティブにダブルバッファリング対応しているようなものですね。

はい、電卓の表示仕様が元から仮想VRAM仕様になっているのでC.Basicでも取り入れてみました。


>因みに、0.88で編集できるようになりましたが、コメントを削除して
>打ち直す対策の最中にフリーズする状況を発見しました。

これは0.88をアップした後に気がつきました(^^;
とりあえず、C.Basicだけでソースを編集している場合にはフリーズに生ることは無いと思われるのですが、
認識できない文字がソースにあった場合にフリーズするのはまずいので次期バージョンではフリーズ対策しておきます。



>素晴らしい!!!! まだ使っていませんが、作れないゲームなんか無くなりますね!!!!
>(ゲームばかり作りたくなる人間なのでとっても嬉しい機能です!)

画面表示が自在に出来るようになればインタプリタのままでもかなりのところまでいけそうな感じですよね。
もはや、グラフ電卓をポケコン化してしまうC.Basicという感じですが(^^;
ゲーム作成においても生産性のいい環境になればと思います(^^)


>さて、実はもう純正でプログラムを書く気は御座いません。
>そう、C.Basicで全て事足りるからです(^^;)。

C.Basic作者冥利に尽きますね。
どうもありがとうございます!!(^^)


>①"ElseIf"を追加して頂けませんか?

[ElseIf]を新規拡張コマンドとして追加してみます。


>②Ifに対応するIfEndが無い場合、実行時エラーにするオプションと、エラー時に該当のIf文にカーソルしてくれる機能を追加して頂けませんか?

プログラム作成での便利な支援機能はできるだけ取り入れたいので了解です!


>③行の先頭に空白を置くことを許可して頂けませんか?

了解しました。
空白は読み飛ばすだけでいいので実装は簡単です(^^)


>裏ワザとして、管理者様の(Krtyski)のKや、sentaro様とSを示すキーを押すと、現在地点が分かるモードになります。迷ったら使ってください(^^)

現在地点が分からなくなって諦めて最初からということが何度も続いたので、これはめっちゃ助かりますね!(^^)
ゴールまでサクサクいけるようになりました!
あ、もしかして、EastとWestが逆かも?(^^;



管理人様、こんにちは!

>ReadGraph と DotGet の違い、そして WriteGraph と DotPut の本質的な違いはどこにありますでしょうか?
>使い分けの指針としておたずねします。

最初に拡張していたDot系のコマンドはMat行列の1要素が1ピクセルに対応していました。
今回のReadGraphとWriteGraphは1ピクセルが1ビットに対応するので、バイト行列だと1要素あたり8ドットの情報を持てるために必要な行列サイズが1/8になります。
つまり1画面分のMat行列を確保するときにDot系では最低でも8Kバイト必要なのに比べて1KBで済むという感じですね。
CG20のような1ピクセルが16ビットデータを持つ画面構成だとDot系の1要素1ピクセルが必要なのですが、
fx-9860GIIのモノクロ画面だと1ピクセルが1ビットなのでDot系はかなりメモリ効率の無駄が生じる形になります、
ただ、演算処理的には1要素1ピクセルの方が扱いやすいので、メモリ効率と扱いやすさのトレードオフという感じですね。

使い分けとしては、
フォントデータのようなまとまったビットマップデータを処理するときにはReadGraph/WriteGraph
1ピクセル単位の演算処理をしたいとか画面の1ピクセルに1ビット以上の値を持たせたい場合にはDot系でという感じかと思います。

ライフゲームでは1セルのデータは1ビットで済むのでReadGraph/WriteGraphの1ピクセル=1ビット仕様でも問題ないのですが、
演算処理では1ピクセル=1ビット仕様は若干負担が増えるので速度的にはDot系の1バイト=1ピクセルの方が有利かなと思います(^^)



>ピンポイントで言えば、switch/case では、break; を省略すると次の case に行けますが、それを C.Basic に実装できないか?という案件です。

Lbl~Gotoで置き換えられるものなら実装は簡単に出来そうです。
C言語仕様ということなので、その方が私的にも分かりやすくてよいです(^^)

>※追記: Break だと、純正からある Break とかち合うので、Brk とか何か他のコマンドにしないとダメですね。

純正仕様だとコマンド名は最初が大文字で後は小文字ですが、
拡張仕様なのでコマンド名は全部小文字にしてC言語そっくり仕様で良さそうですね。

No title

■To:管理者様

select(switch)実装されるとますます便利になりますね!

今まで私は
A=1⇒Prog "S~A1"
A=2⇒Prog "S~A2"
のようにやっていました(^^;)。

ただこれだと、バイナリを見ると、ヘッダ情報が結構のバイト数を喰っているうえ、オーバーヘッドが少なからずあると思われる為、微妙な感じです。

私は後輩に「フォールスルーをするなら、/* fallthrough */を明示せよ。そもそも、極力使うな」と指導している立場なので

If~ElseIf~ElseIf~...EndIfの利用を考えていました。

が、ElseIfで書くのは面倒も多く、バイト数削減/速度向上を考えると、switch構文の方が色々有利だと思います!

そして、VB6.0の言語仕様はVBAで未だに現役で、メインとしてVB.Netもあるので、現在のBASICプログラマーにクリティカルヒットしそうだと思いました!

■To:sentaro様

色々と要望を受けて頂きありがとうございます!
そして、迷路のバグ指摘ありがとうございます!
こっそり直しておきました(^^;)

■To:管理者様&sentaro様

話は変わりますが、

fx-9860GIIの液晶の応答速度(反応速度)はどれくらいかお分かりになるでしょうか?

というのも、アクション性の高いゲームを作ろうとする場合、これが遅いと処理性能が十分でも液晶の性能に合わせてゲームを作る羽目になるからです。

実はシューティングゲームを作ろうと、背景の星をアニメーションさせてみましたが、反応速度が遅いらしくまともなアニメーションが作成できていません。

前回教えて頂いた強制表示を用いても同じです。
もし、カタログ値やどこかに情報があれば、又は知っていたらご教授頂けませんか?

宜しくお願い致します。

アドイン版 C.Basic ver.0.89 テスト版 その8.9(Switch&ElseIfコマンド拡張&空白Ok版)

管理人様、ガノー様、こんにちは!

Swicthコマンドの実装にちょこっと手間取ってしまいましたけど、なんとか動作する状況になりました。
とはいえ、検証不十分なのでたぶんバグが残ってる可能性大です(^^;

それから行頭の空白許可とElseIfコマンドも追加しました。
さらにIfに対応するIfEndが無い場合のチェックも出来るようになりました。
チェックするかどうかはセットアップで設定するガノー様の仕様です(^^)


>fx-9860GIIの液晶の応答速度(反応速度)はどれくらいかお分かりになるでしょうか?

データシート等が無いので具体的な数値はわからないのですが、液晶の中ではかなり遅い方なので100msオーダーの反応速度のような感じですよね(^^;
コントラスを上げれば反応速度も上がってきますが、( [SHIFT]+[←][→]で何時でも調整可です。)
一コマの表示時間を液晶が反応するまで遅くするしか無さそうでしょうか。



アドイン版 C.Basic ver.0.89 テスト版 その8.9(Switch&ElseIfコマンド拡張&空白Ok版)
http://pm.matrix.jp/CB/CBASIC089.zip

・行頭に空白を入れてもエラーにならないようにしました。
 インデントを付けて見易く出来ます。

・ElseIfコマンドを追加しました。
(例)
 If A:Then
  Locate 1,1,"A"
 ElseIf B:Then
  Locate 1,2,"B"
 EndIf

・Ifに対応するIfEndが無い場合にエラーとするかどうかをセットアップで選択出来ます。
 セットアップでチェックをOnにすれば実行時に対応するIfEndが無いIfコマンドの箇所でエラーになります。

・Switchコマンドを追加しました。C言語同様フォールスルー可です。ただしDefaultは最後でないと期待した動作になりません。
 新規コマンドはSwitch、Case、Default、SwitchEndとなります。Breakは従来コマンドです。
(例)
 Switch A:
  Case 1:Locate 1,1,"A"
   Break
  Case 2:Locate 1,2,"B"
  Case 3:Locate 1,3,"C"
   Break
  Default
   Break
 SwitchEnd

アドイン版 C.Basic ver.0.90 テスト版 その9.0(プレフィックス拡張版)

管理人様、ガノー様、こんにちは!

最初は無謀かと思われたCasioBasic互換環境でしたけど、おかげさまでここまでたどり着くことが出来ました。
細かなバグ出し&貴重なアドバイスの数々、本当にありがとうございました。
これからもよろしくお願いいたします(^^)


それでは本年最後の更新となります。

アドイン版 C.Basic ver.0.90 テスト版 その9.0(プレフィックス拡張版)
http://pm.matrix.jp/CB/CBASIC090.zip

・定数値において、C言語同様のプレフィックス(0Xまたは0B)を付けると32ビットまでの16進数、2進数表記が使用出来るようになりました。
(例)0XFF,0B1010011

・Mat行列初期化コマンド[[ ]]において、改行&空白を入れることがが可能になりました。
(例)
 [[0B11001100,
  0B00110011,
  0B11001100,
  0B00110011,
 ]]→Mat A.B

・ファイルの書き換えや削除、リネームしない場合はファイルリストを再読み込みしないようにしました。
 ファイルが変更されない場合のファイルリスト表示で必要以上に待たされることが無くなります。

入力時にフリーズするバグを修正&0.90差し替え更新しました。

明けましておめでとうございます。
今年もよろしくお願いいたします。

入力時にフリーズすることがあるバグの原因がひょんなことから掴めましたので忘れないうちに修正しておきます(^^;
例のMat行列の編集でのフリーズもたぶんこれが原因だったと思われます。

ということで、機能的なバージョンアップではないので0.90を差し替え更新しました。

明けまして、おめでとうございます

sentaro様
ガノー様

明けまして、おめでとうございます。

sentaro様、
Ver 0.90 が安定しているようなので、最新バージョンとして、アドインCasio Basic - トップページで差し替えました。

この数週間で怒濤の機能追加とデバッグ、お疲れ様でございます。

Readme_J.txt の英訳をボチボチ始めようかと思っています。

ガノー様、
3D迷路、遅ればせながら頂きました。3Dにするとグット難易度が増しますね。なかなか苦労しています。
さっき、遊び始めたばかりですが、いったいゴールにたどり着けるかどうか自信がありません。

ところで、ZIP同梱のドキュメントには、しっかり英語併記になっていて、海外進出の準備完了ですね。
C.Basic 関連の私の英語について、妙なところがあれば是非ともダメだしをお願い致します。

なお、3D迷路については、近々新しいエントリーで紹介させて頂きます。ありがとうございます。
Twitterでのフォローありがとうございます。当方からもフォローさせて頂いています...とは言っても Twitterは電車遅延の時くらいしかアクセスしないもので、全くアクティブではありませんので、ご承知おきください。


新年のご挨拶エントリーをアップしました。ガノー様のお名前も書かせて頂いています。

今年もよろしくお願いいたします。

管理人様、こんにちは!

>Ver 0.90 が安定しているようなので、最新バージョンとして、アドインCasio Basic - トップページで差し替えました。

早速にありがとうございます!
バージョン毎に微妙に実行速度が変わっているのですが、例のカーソル問題はどうでしょうか? 
相変わらずバージョン毎に現象が変わる感じでしょうか?

今のところ、通常の動作でフリーズする可能性は低いと思われるのですが、相変わらずメモリ不足になってくると不安定になる傾向があるので、これはいよいよ隠し256KBを使えるようにしていかないといけないかなと思っています。
そこのあたりはコンパイラと合わせて今年の目標ですね(^^)


>この数週間で怒濤の機能追加とデバッグ、お疲れ様でございます。

テスト版とはいえ、バグありのままでアップしてしまったものが多いので(^^;恐縮しまくりです。
幸いにして致命的なバグはすぐに見つけていただいたので、本当に助かりました。

応援団長の管理人様はもちろんのことですけど、ガノー様がテストプログラム&デバッグに加わって頂けたのも大きいですね。
ありがとうございます!


>Readme_J.txt の英訳をボチボチ始めようかと思っています。

お手数おかけします。
最近では仏方面等でブラウザの機械翻訳に頼り切りになってしまってるので英文でもつい機械翻訳させてしまう癖が付いてしまっていけません(^^;


>さっき、遊び始めたばかりですが、いったいゴールにたどり着けるかどうか自信がありません。

私は半分くらい進むとゴールはもちろんスタートにも戻れず迷ってしまうので現在地の分かる裏ワザ発動しないとかなり厳しい状況です(^^;

アドイン版 C.Basic ver.0.91 テスト版 その9.1(ファイルリストバグ修正+α版)

管理人様、ガノー様、こんにちは!

ファイルリスト関連でちょっと気になっていたバグが残っていたので修正しました。
ファイル名を変更した時と新規ファイルを作成した時にファイルリストで違うファイル名を示していたのを修正しました。

それから、テスト版でのお試し機能となりますが、(^^;
Mat行列エディタにおいて2進数、16進数での表示ができるようにしてみました。
行列編集モードで[F5]を押すと2進数表示、[F6]で16進数表示になります。
10進数表示に戻すには再度[F5][F6]を押します。
ただし、2進数表示はバイト(1バイト)とワードタイプ(2バイト)の行列までとなってます。


アドイン版 C.Basic ver.0.91 テスト版 その9.1(ファイルリストバグ修正+α版)
http://pm.matrix.jp/CB/CBASIC091.zip

あけましておめでとうございます。

■TO:管理者様、sentaro様

新年あけましておめでとうございます。
今年もよろしくお願い申し上げます。

■TO:管理者様

記事にも記載頂き恐悦です。実は個人的に漫画のネームというものを作っていて、その題材が3D迷路だったので、当該の関数電卓で実装してみようと始めたのがきっかけでした。

ちなみに、あの3D迷路は裏ワザなしでも「左手法」で結構簡単にクリアできます。カップめんが茹で上がる時間程度でゴールできます(^^)v

Twitterでのフォローもありがとうございます。私の主な活動はそちらで行っています。のんびりと絡んでいただければ幸いです(反応は激ニブです^^;)。
英語は、、、お役にたてる場面があればいいのですが、正直、得意ではありません。私もGoogle先生にお世話になっています故。。。


■TO:sentaro様

デバッグはお任せください(笑)

ということで、0.89でのデバッグ情報です。(お正月は実家でのほほんとしていましたので、0.91は未確認です^^;)

①ElseIfの挙動がおかしい模様です。
If A=1:Then
Text 1,1,"A"
If B=1:Then
Text 2,1,"B"
EndIf
ElseIf C=1:Then
Text 3,1,"C"
Endif

このような入れ子構造の時に変な感じがします。
(ただし、休日にアルコールを飲みながら気づいたので 記憶が曖昧です。詳細は、、、ご容赦下さい^^;)


②スペースの読み飛ばしの挙動がおかしい模様です。
If A=1:Then
Text 1,1,1
Text 2,1,2
EndIf

最後のText2,1,2でエラーになる模様です。
(If以外の別のパターンでも発生する模様です。)

If A=1:Then
Text 1,1,1

Text 2,1,2
EndIf
のように間に改行を入れるとOKみたいでした。

ただこれは、可能ならスペースを実行時に読み飛ばすより、起動直前の前処理でファイルからスペースを無条件に削除した結果を処理すると良い気がします。

そうすると、スペースを飛ばすオーバーヘッドもなく、既に高速化されている処理を邪魔しない感じがします。

SwitchCaseはまだ使用していませんが、ぼちぼち確認してみます。




0.91の機能

まだ利用していませんが、

バイナリ&16進数表示は便利ですね!!簡易的にでもキャラクタエディタのような使い方が出来そうですね!!

・・・もしかして、プログラム側で作った値をMatエディタ経由で入出力できるのかな?なんて期待しています。

(あ、プログラム側でCLIPの領域にテキストや数値を入れられる機能が欲しいのですが、記憶の片隅にでも入れておいて頂ければ・・・^^;)



■TO:管理者様、TO:sentaro様

ReadGraphとWriteGraphがやっぱり超絶便利です。サンプルゲームを作りました。紹介動画も作りました(そっちはまだアップロードしていませんけど^^;)。シューティングゲームを作るためにアニメーション性能を調査していてできた副産物です。

https://dl.dropboxusercontent.com/u/93225197/fx9860gii/DRAGON.zip


そして、一応調査結果のご報告です。

高速移動アニメーションを作成する際のポイントは、

「スクロールさせる物体は2px以上(3px以上が望ましい)の物体に限る」

という単純なものでした。

要は処理速度は問題ないが液晶が遅いので、素早く移動しても視認性を確保するために大きめにしておくという単純な対策です。

そして、C.Basicのダブルバッファリングに配慮して、

①画面描画等演算

②Text 1,1,""
③実際の画面描画
④最後にText ~,~,S※スコア表示等

⑤キーループ&フレーム制御

という構造にし、②~④に演算を入れ込まず描画の高速性を保ちつつ強制表示を活用すると、かなり綺麗にスクロールさせられるようです。FTune2と組み合わせれば弾幕シューティングも作れそうな目途が立ってきました。

今後とも色々活用させて頂きます!

以上

Re: アドイン版 C.Basic ver.0.91 テスト版 その9.1(ファイルリストバグ修正+α版)

sentaro様
ガノー様

新年早々、仕事関係で新製品のホームページ作成を全力で行っているため、なかなか電卓で遊ぶ時間がありません。外注するために「こんな感じで御願いします」と構造とかデザインとかコンテンツを作る暇に自分で html でザッとできちゃうことを発見!
以来自分で作っていたりします。


> ファイルリスト関連でちょっと気になっていたバグが残っていたので修正しました。
> ファイル名を変更した時と新規ファイルを作成した時にファイルリストで違うファイル名を示していたのを修正しました。

機能追加は、デバッグのモグラ叩きのようで、大変ですよね。私も経験があります。お疲れ様です。


> それから、テスト版でのお試し機能となりますが、(^^;
> Mat行列エディタにおいて2進数、16進数での表示ができるようにしてみました。
> 行列編集モードで[F5]を押すと2進数表示、[F6]で16進数表示になります。
> 10進数表示に戻すには再度[F5][F6]を押します。
> ただし、2進数表示はバイト(1バイト)とワードタイプ(2バイト)の行列までとなってます。

モノクロビットマップには2進数、カラービットマップには16進数が結構使えそうに思います。


> アドイン版 C.Basic ver.0.91 テスト版 その9.1(ファイルリストバグ修正+α版)
> http://pm.matrix.jp/CB/CBASIC091.zip

早速、以下のページで最新版を入れ替えておきました。

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

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



Re: あけましておめでとうございます。

ガノー様

> 記事にも記載頂き恐悦です。実は個人的に漫画のネームというものを作っていて、その題材が3D迷路だったので、当該の関数電卓で実装してみようと始めたのがきっかけでした。

プログラムのネタって、そんな感じで出てくるものですよね。
私も、日常生活や仕事の何気ない時に、ネタを思いつきます。



> ちなみに、あの3D迷路は裏ワザなしでも「左手法」で結構簡単にクリアできます。カップめんが茹で上がる時間程度でゴールできます(^^)v

はい、早速左手法で、ゴールにたどり着けました(*^-^*)

フレームワイヤのゲームって、昔のパソコンゲームを思い出して、懐かしくなりました。


> Twitterでのフォローもありがとうございます。私の主な活動はそちらで行っています。のんびりと絡んでいただければ幸いです(反応は激ニブです^^;)。

あはは、チョコッとお返事させてもらいました(^^;


> 英語は、、、お役にたてる場面があればいいのですが、正直、得意ではありません。私もGoogle先生にお世話になっています故。。。

何か時に気になった時だけで結構ですので...m(_ _)m



> ReadGraphとWriteGraphがやっぱり超絶便利です。サンプルゲームを作りました。紹介動画も作りました(そっちはまだアップロードしていませんけど^^;)。シューティングゲームを作るためにアニメーション性能を調査していてできた副産物です。
>
> https://dl.dropboxusercontent.com/u/93225197/fx9860gii/DRAGON.zip


私も触発されて、ゲームのネタが出てきました...チョット作ってみようかと...

ちなみに、あの超低速 fx-58000P でチーティングゲームを作ろうという無謀な試みをして、以下の感じまで作って、そのあと頓挫しています。

https://www.youtube.com/watch?v=cY3IjPLjf8g



> そして、一応調査結果のご報告です。
>
> 高速移動アニメーションを作成する際のポイントは、
>
> 「スクロールさせる物体は2px以上(3px以上が望ましい)の物体に限る」
>
> という単純なものでした。
>
> 要は処理速度は問題ないが液晶が遅いので、素早く移動しても視認性を確保するために大きめにしておくという単純な対策です。

今構想しているゲームで、この考えをそっくり頂けそうです(^^;

自分で作ってみないと、最近の C.Basicの機能改善がピンとこないので、是非私も新しい機能を使って、ガノー様のアドバイスも取り入れて、サンプルゲームを作ってみます....考えただけでワクワクします!


アドイン版 C.Basic ver.0.92 テスト版 その9.2(ElseIfバグ修正版)

ガノー様、こんにちは!

>デバッグはお任せください(笑)

毎度新しい機能を追加するとバグありになることがほとんどなので(^^;すごく助かります。
今年もよろしくお願いたします!


>①ElseIfの挙動がおかしい模様です。

入れ子でおかしくなる挙動を確認しました。
入れ子構造では誤動作してしまうロジックにしてしまっていた模様です(^^;
ので、サクッと修正しました。


>②スペースの読み飛ばしの挙動がおかしい模様です。

改行後の空白検出を見逃していた箇所がありましたので修正しました。


>ただこれは、可能ならスペースを実行時に読み飛ばすより、起動直前の前処理でファイルからスペースを無条件に削除した結果を処理すると良い気がします。

今のところ、メモリの制限(ソース、変数含めて40KB程度)でソースを一切いじらないままでインタプリタ動作という仕様になってるので、今後、256KBの空きエリア?が確保できた暁には前処理でさらなる高速化というのも考えていきたいです。


>ReadGraphとWriteGraphがやっぱり超絶便利です。サンプルゲームを作りました。紹介動画も作りました(そっちはまだアップロードしていませんけど^^;)。シューティングゲームを作るためにアニメーション性能を調査していてできた副産物です。

ありがとうございます!早速に頂きました。
最初は全然余裕と思っていたら300m過ぎたあたりからかなりパニクってきます(^^;
毎回、機雷の出方に左右されるので、最初にRan#で乱数系列の初期化をすると機雷の出方が固定パターン化して攻略しやすくなりそうです(^^;


>という構造にし、②~④に演算を入れ込まず描画の高速性を保ちつつ強制表示を活用すると、かなり綺麗にスクロールさせられるようです。FTune2と組み合わせれば弾幕シューティングも作れそうな目途が立ってきました。

ドットごとの表示期間を十分確保できれば大丈夫ということですね。
Ftune2併用だとインタプリタだけでもかなりのことが出来そうですね(^^)




管理人様、こんにちは!

>新年早々、仕事関係で新製品のホームページ作成を全力で行っているため、なかなか電卓で遊ぶ時間がありません。外注するために「こんな感じで御願いします」と構造とかデザインとかコンテンツを作る暇に自分で html でザッとできちゃうことを発見!
以来自分で作っていたりします。

新年早々おつかれさまです!
htmlは10年位前にちょっとかじったことありますけど、仕組みが分かるとエディタでも書けてしまうくらいなんですよね。
とはいえ進化も速いので最近のはちょっと付いていけなくなってるところです(^^;


>機能追加は、デバッグのモグラ叩きのようで、大変ですよね。私も経験があります。お疲れ様です。

モグラ叩きはいい例えですね。次から次と出現してきてまさにその感じです(^^;


>早速、以下のページで最新版を入れ替えておきました。

毎度お手数おかけしてます。


>私も触発されて、ゲームのネタが出てきました...チョット作ってみようかと...
>ちなみに、あの超低速 fx-58000P でチーティングゲームを作ろうという無謀な試みをして、以下の感じまで作って、そのあと頓挫しています。

プロ電のfx-5800Pでもこれだけの動きが出せるというのがfx-5800Pのすごいところですけど、あと、もう少し速ければというところでしょうか。
fx-5800Pで足りなかった部分はC.Basic版でぜひとも完成までこぎ着けて頂ければと思います(^^)


>自分で作ってみないと、最近の C.Basicの機能改善がピンとこないので、是非私も新しい機能を使って、ガノー様のアドバイスも取り入れて、サンプルゲームを作ってみます....考えただけでワクワクします!

テスト&デバッグには実践が一番の近道ですよね。
楽しみにお待ちしております(^^)


ということで、ガノー様に発見していただいたバグ修正ができた(と思われる)最新版です。

アドイン版 C.Basic ver.0.92 テスト版 その9.2(ElseIfバグ修正版)
http://pm.matrix.jp/CB/CBASIC092.zip

・ElseIfがIfの入れ子構造の中で使われた場合に期待した動作にならないバグを修正しました。
・行頭の空白の読み飛ばしが上手く行かないところがあったのを修正しました。

Re: アドイン版 C.Basic ver.0.92 テスト版 その9.2(ElseIfバグ修正版)

sentaro様

> アドイン版 C.Basic ver.0.92 テスト版 その9.2(ElseIfバグ修正版)
> http://pm.matrix.jp/CB/CBASIC092.zip

について、C.Basic トップページ和英版で対応しておきました。

取り急ぎ...

プログラム中でのCLIP機能

ガノー様、こんにちは!

昨日のレスで抜けていたのですみません(^^;

>バイナリ&16進数表示は便利ですね!!簡易的にでもキャラクタエディタのような使い方が出来そうですね!!

はい! それが一番の目的といえばそうなるわけですが、Matの初期化で複数行にまたがる記述が可能になりましたのでプログラム内でのパターン定義ではこれも便利に使えるかなと思っています(^^)

'バイト行列パターン
 [[0B00011000,
  0B00111100,
  0B01111110,
  0B11011011,
  0B11111111,
  0B01011010,
  0B10000001,
  0B01000010,
 ]]→Mat A.B

'ワード行列パターン
 [[0B0010000010000000,
  0B1001000100100000,
  0B1011111110100000,
  0B1110111011100000,
  0B1111111111100000,
  0B0111111111000000,
  0B0010000010000000,
  0B0100000001000000,
 ]]→Mat B.W

 [[0B0000011111100000,
  0B0001111111111000,
  0B0011111111111100,
  0B0110110110110110,
  0B1111111111111111,
  0B0011100110011100,
  0B0001000000001000,
 ]]→Mat C.W



>(あ、プログラム側でCLIPの領域にテキストや数値を入れられる機能が欲しいのですが、記憶の片隅にでも入れておいて頂ければ・・・^^;)

プログラム側でCLIPというと、CLIP領域を文字列変数みたいな感じに使うという感じでしょうか?
それともCLIP機能そのものをプログラム内でもという感じでしょうか?



管理人様、早速に対応していただきましてありがとうございます(^^)

Re: プログラム中でのCLIP機能

sentaro様

> はい! それが一番の目的といえばそうなるわけですが、Matの初期化で複数行にまたがる記述が可能になりましたのでプログラム内でのパターン定義ではこれも便利に使えるかなと思っています(^^)
>
> 'バイト行列パターン
>  [[0B00011000,
>   0B00111100,
>   0B01111110,
>   0B11011011,
>   0B11111111,
>   0B01011010,
>   0B10000001,
>   0B01000010,
>  ]]→Mat A.B

これで、整数型の行列としての初期化ですよね。

もしバイナリー型の行列の型指定が出来て、それでメモリ節約になるのなら、新たにバイナリーの行列型指定を追加するというのは、如何でしょうか?


ところで、C.Basic 最新バージョンを Ver 0.92 に修正しております(昨日)。

バイナリー型の行列

管理人様、こんにちは!

>これで、整数型の行列としての初期化ですよね。

はい!

一応ダブルワードまで2進数&16進数表記が出来ますが画面上での見易さからするとワードタイプまでが実用範囲でしょうか。


>もしバイナリー型の行列の型指定が出来て、それでメモリ節約になるのなら、新たにバイナリーの行列型指定を追加するというのは、如何でしょうか?

そういう展開になると思っておりました(^^)

fx-9860GIIの1ビットタイプのグラフィック用途では最適な構成になるので、次回バージョンアップで1ビットバイナリー型行列を取り入れてみたいと思います(^^)


>ところで、C.Basic 最新バージョンを Ver 0.92 に修正しております(昨日)。

連日お手数おかけしてます!m(_ _)m

No title

https://dl.dropboxusercontent.com/u/93225197/fx9860gii/TAT.g1m

こんにちは。今週はやや忙しく、とり急ぎご報告のみに留めますが、ご容赦下さい。

To:sentaro様、管理者様

■0.92デバッグ情報

・入れ子でのEleseIfの正常動作を確認いたしました。
・種々のパターンでのインデント用のスペースの正常な読み飛ばしを確認いたしました。
・Switch Caseの、ラベルスルー(フォールスルー)と、ラベル値が前後するような種々のパターンでも正常動作することを確認しました。
(なお、入れ子は試していませんが問題ない可能性は高いと判断しています)
※ただし、Defaultが強制なので、そこだけ気になりました。

・Matエディターなどはまだ確認できておりません^^;

■0.92フリーズ現象

Rect、FillRectで場合によってフリーズする現象を確認しました。
以下のファイルをダウンロードお願い致します。
https://dl.dropboxusercontent.com/u/93225197/fx9860gii/TAT.g1m

なお、正常動作するパターンと、異常動作するパターンを突き止めております。

・異常動作するパターンの操作。
①ダウンロードしたファイルのRect、FillRectのコメントを外す
②端末の電源を切る
③端末の電源を入れて実行する→フリーズする

FillRect/Rectにおいて、0,0,~,~と書いたものが、「初めて描画する場合に呼ばれた場合フリーズするようです」。以下の正常動作するパターンをご参照下さい。

・正常動作するパターンの操作。
①ダウンロードしたファイルの「FillRect/Rectの、0,0,~,~」となっている方をコメントアウトする
②電源を切る
③端末の端末の電源を入れて実行する
④「FillRect/Rectの、0,0,~,~」となっている方をコメントアウトを外し、有効化する⑤再度実行する→フリーズせずエラー発生

以上、ご確認の程お願い申し上げます。

0.92フリーズ現象

ガノー様、こんにちは!

>■0.92デバッグ情報

早速の0.92デバッグありがとうございます!(^^)


>※ただし、Defaultが強制なので、そこだけ気になりました。

SwitchEndがSwitchの区切りなのでDefaultは無くても良いのですが、インタプリタ処理の都合で最後限定となってます(^^;


>■0.92フリーズ現象

確認しました。
これはDot系のコマンドで座標値が範囲外の時にエラー処理が足りなかったのが原因でした(^^;
最初の実行時にだけフリーズするのはXY座標にでたらめな値が入ったままで描画処理してしまうためです。
二度目以降の実行ではXYがフリーズしない範囲内に入っていたのでOkだったというわけですね。
次期バージョンで修正しておきます。

3D迷路ゲーム

ガノー様

作って頂いた 3D迷路ゲームのエントリーを先ほどアップしました。

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

何かコメントを頂けますとうれしいです。当エントリーのコメント欄に頂いたものを、本文に追記させて頂きたいと思っています。よろしければお願い致します。

この際、思いっきり語ってみて頂くのも良いかと思うので...


併せて、C.Basic トップページも改訂して、ガノー様のサンプルプログラムを紹介するようにしました。将来的にサンプルプログラムが増えてきた場合は、サンプルプログラム紹介専用のエントリーを作るようにしようと思っています。

トップページ: http://egadget.blog.fc2.com/blog-entry-495.html

アドイン版 C.Basic ver.0.93 テスト版 その9.3(1ビット行列追加版)

管理人様、ガノー様、こんにちは!

行列に1ビット型行列を追加しました。
取る値が0と1しかないので、LCD画面のバッファやビットマップデータとして使うことを前提にしてますが、
fx-9860GIIの場合、画面全域で1Kバイトで済むのでメモリ効率は最強です。

あと、あまり使い道は無いかもですが(^^;VRAMそのものを行列に割り当てて行列にアクセスすることで直接にVRAMアクセスができるようにしてみました。


>併せて、C.Basic トップページも改訂して、ガノー様のサンプルプログラムを紹介するようにしました。将来的にサンプルプログラムが増えてきた場合は、サンプルプログラム紹介専用のエントリーを作るようにしようと思っています。

いいですね!
3D迷路に加えてドラゴンゲームとC.Basicの独自機能が一目瞭然のサンプルプログラムなのでとてもありがたいです。
これからもよろしくお願いいたします。



アドイン版 C.Basic ver.0.93 テスト版 その9.3(1ビット行列追加版)
http://pm.matrix.jp/CB/CBASIC093.zip

・Dot系コマンドのエラー処理が甘かったのを修正しました。

・1ビットバイナリー型行列を追加しました。
 行列確保時に[.P]および[.p]を付けると1ビット行列になります。
 1要素の取る値は0と1だけとなります。

 C.Basicで指定できる行列の要素指定をまとめると、
 デフォルトで行列名のアルファベットが
 C,Bは(8ビット)バイト行列となります。値の範囲は(-128~127)です。
 D,Wは(16ビット)ワード行列(-32768~32767)
 I,Lは(32ビット)ロング行列(-2147483648~2147483647)

 また、行列確保時にサフィックス指定するとデフォルトに優先して要素指定できます。
 [.P]または[.p]で(1ビット)バイナリー行列
 [.B]または[.b]で(8ビット)バイト行列
 [.W]または[.w]で(16ビット)ワード行列
 [.L]または[.l]で(32ビット)ロング行列
 [.F]または[.f]で(64ビット)倍精度実数行列

・Fillコマンドを追加しました。
 C.Basicでは、123→Mat A の形式でサポートしていた行列の全要素に同じ数値を代入する機能ですが、
 CasioBasicに標準装備のコマンドがありますので追加しました。
(例)Fill(123,Mat A)

・Trnコマンドを追加しました。
転置行列に変換します。
 純正CasioBasicとは違い、行列そのものを転置変換します。
 (例)Trn Mat A
行列Aを転置変換します。

 さらに、1ビット行列は{m,n}型で画面のVRAMと同じ構成となるので、
 [.V]または[.v]指定するとVRAMを63行x127列の行列に割り当てて読み書き出来るようにしてみました。(暫定機能)
 (例){127,63}→Dim Mat G.V
  Mat Gにアクセスすることでその時点でのVRAMを直接読み書きできますが表示系コマンドではないので、
  画面表示する場合は、コマンド実行後に強制表示させる必要があります。
  
 (例){127,63}→Mat G.V
Text 1,1,"" // グラフィック画面選択(他のグラフィックコマンドでも可)
1→Mat G[63,31]
Text 1,1,"" // グラフィック画面強制表示(他のグラフィックコマンドでも可)
グラフィック画面の真ん中に点を打ちます。
PxlOn 31,63と同じです。

 (例){127,63}→Mat G.V
Locate 1,1,"" // テキスト画面選択(他のテキスト系コマンドでも可)
1→Mat G[63,31]
Locate 1,1,"" // テキスト画面強制表示(他のテキスト系コマンドでも可)
テキスト画面の真ん中に点が打てます。

Ver.0.93差し替えです(^^;

同じ名前の1ビット行列を再使用する場合にシステムエラーが発生することがあったので修正、差し替えアップしました。

Re: Ver.0.93差し替えです(^^;

sentaro様

お疲れ様です。

> 同じ名前の1ビット行列を再使用する場合にシステムエラーが発生することがあったので修正、差し替えアップしました。

最新版として、Ver 0.93 に差し替えています。


>  (例){127,63}→Mat G.V
> Locate 1,1,"" // テキスト画面選択(他のテキスト系コマンドでも可)
> 1→Mat G[63,31]
> Locate 1,1,"" // テキスト画面強制表示(他のテキスト系コマンドでも可)
> テキスト画面の真ん中に点が打てます。

テキスト画面にグラフィックス描画を同居させられるのは、画期的ですね。


> 3D迷路に加えてドラゴンゲームとC.Basicの独自機能が一目瞭然のサンプルプログラムなのでとてもありがたいです。
> これからもよろしくお願いいたします。


> ReadGraphとWriteGraphがやっぱり超絶便利です。サンプルゲームを作りました。紹介動画も作りました(そっちはまだ
> アップロードしていませんけど^^;)。シューティングゲームを作るためにアニメーション性能を調査していてできた副産物です。

https://dl.dropboxusercontent.com/u/93225197/fx9860gii/DRAGON.zip


ドラゴンゲームは、紹介画面といっしょに新エントリーで紹介しようと思っています。

ガノー様、よろしくお願い致します。


No title

■TO:管理者様

①3D迷路の紹介記事ありがとうございました。

語る内容はとある漫画賞に投稿しているので、機会があれば世に出るかなと思います。そのネタ用に作ったゲームでした。

触りだけですが、前述にて示した3D迷路の場合、以下で呟いている内容の計算式で凡その移動距離を求めることができます。この棒倒し法という仕組みで作られた超巨大迷路を、計算式を基に必要な移動距離を求め主人公が攻略していくという漫画です(プログラマー向け&かなりディープな内容です^^;)。
https://twitter.com/Garnot1/status/685679467293872128

②また、サンプルエントリー用の場所のお話もありがとうございます!

現在、YOKOLITHというものを作り始めました(テト●スのパクリです^^;)。こちらはSwitch~Caseの動作テスト用に作っていたので正直もっと良い方法が・・・ありますが気にしない^^;
現在仕事の傍らに作っているので時間がかかりますが。。。

③DRAGONの説明動画
一応、以下にアップしております。
https://www.youtube.com/watch?v=88VbT-6BhQs



■TO:sentaro様、管理者様

ビット行列は凄く便利ですね! そして、まさかのVRAM直接・・・ゴクリ。
ビット行列を使ったサンプルゲームの構想はあるので後日作ってみます!



■TO:sentaro様

以前CLIP機能を使いたいと要望を言うだけ言っていたものですが、
要望をまとめましたのでご検討お願い致します。

要約

①StrStoreの拡張機能としてCLIPに出力できるようになりませんか
②若しくはコード内の特定範囲をCLIPにセットできるようになりませんか
③上述の①と②が非現実的だと感じる為、純正のC準拠のファイル入出力機能があると嬉しいのですが^^;

以下詳細。



①CasioBasicだとStrStore(でしたでしょうか?^^;)を用いて文字列を特定の領域に格納し、プログラムで様々な処理を施すことができます。C.Basicでもコンパチでその機能が搭載されています。

そのStrStoreで格納できる番号に「CLIP」が指定できるようにならないか、というのが発想です。要するに、そのCLIPの領域を受け皿として、簡易的なファイルの入出力の代用にしたいなぁ、という訳です。

※たとえばPG側で以下を組み立てる
 StrStore "[[0,1,2,3,4,5]]→Mat M", CLIP

利用者自身でリストエディタにその内容を貼り付けてもらい、それをコード側はProg等で読みだせるのじゃないかという考えです。

しかし、ここまで書いてみて気づきました。テキストデータとCasioBasicのようなバイト対応の命令をマッチングさせることは、実装的に非現実的なのかもしれませんね。。。
※javascript等にあるEval系の命令が欲しいと言っているようなものですね。。。ここまで書かなければ気づきませんでした^^;



②発想を変えてStrStoreを使わず、ClipStart(/ClipAppendStart)~ClipEndのような独自命令で囲まれた領域のコードをCLIPに格納できる、といった感じはどうでしょうか?

※例えば
 ClipStart
  A⊿
 ClipEnd
 ClipAppendStart
  B⊿
 ClipEnd

これで、
 A⊿
 B⊿
がCLIPにセットされるようなイメージです。

※どの変数を展開するか否か(変数の示す内容に置き換えるか、変数名のままにするか)が問題になりそうですが・・・。





③いっそうのこと、純正のC準拠のファイル入出力ができると嬉しいです。
①も②も、考えれば考えるほど問題が多いように思われましたので・・・。


以上、①~③でも、全部大変だと思いますがご検討頂ければ幸いです!

入出力機能

管理人様、こんにちは!

>最新版として、Ver 0.93 に差し替えています。

いつもお手数おかけしています。
またまた、ちょい致命的バグ(VRAMに割り当てた行列を再利用できない)が有ったのでVer.0.93再度差し替えました(^^;


>テキスト画面にグラフィックス描画を同居させられるのは、画期的ですね。

CasioBasicではテキストとグラフィックをきっちり区別してますけど、ハード的にはテキスト画面もビットマップ画面なのでソフトでどうにでもなるといところでしょうか。
行列への代入や読み出しで描画するという形は不便で原始的ですけど、CasioBasicのPxl系コマンドに比べると余分な処理がないので速度的には若干有利です(^^)



ガノー様、こんにちは!

>ビット行列は凄く便利ですね! そして、まさかのVRAM直接・・・ゴクリ。

Mat行列がCの配列同等まで拡張してきたのでいろいろと便利に使えそうな感じになってきました。


>ビット行列を使ったサンプルゲームの構想はあるので後日作ってみます!

よろしくお願いいたします(^^)


>①StrStoreの拡張機能としてCLIPに出力できるようになりませんか
>②若しくはコード内の特定範囲をCLIPにセットできるようになりませんか

これは、CLIP領域にプログラムコードそのものをコピーしてプログラムでそれを実行させたりということですよね?
実装自体は難しいものではないと思いますので次バージョンで試しに実装してみます。


>③上述の①と②が非現実的だと感じる為、純正のC準拠のファイル入出力機能があると嬉しいのですが^^;

プログラム外部とデータの入出力があればということですね。
外部との入出力はいずれは実装しないといけない機能だと思っていましたので、
次バージョンでC準拠でファイルアクセス機能を実装してみたいと思います(^^)

3D迷路 - YouTube動画を追加

ガノー様

公開されている YouTube動画、2本を、紹介ページに追加しました。

製品やサービスの普及のブースターは、ゲームとエッチ... (・ω・)というのは不滅の真理でしょう。

ゲームを通した C.Basic 普及...こんな動画を作れるって、凄いですね!

私もいつか真似したいものです...



> 現在、YOKOLITHというものを作り始めました(テト●スのパクリです^^;)。こちらはSwitch~Caseの動作テスト用に作っていたので正直もっと良い方法が・・・ありますが気にしない^^;
> 現在仕事の傍らに作っているので時間がかかりますが。。。

おぉ、これも楽しみです。
気長にお待ちしております。


DRAGON

ガノー様

遅ればせながら、DRAGON で遊んでみました。
なかなかうまくチューニングされていて、飽きません。お見事です!

1つ気になった点があるので、報告致します。
C.Basic のsetup で Execute mode を int にしないと、Bom のために [0]を押すとSyntax ERROR になることに気付きました。

そこで、いっそソースの冒頭に '#CBint を追加しませんか?
こうしておけば、仮に C.Basic の Execute mode が double になっていても、プログラムは強制的に int モードで走りますので...

ソースを拝見すると、C,Basic 独自拡張モードの良いサンプルソフトであることが分かります。

さて、DRAGONの紹介エントリーを作るにあたり、'#CBint はどうしましょうか?
現状のままになさって、私の記事で説明(Execute modeの変更か、ソース冒頭に '#CBint を追加する)を加えるので良いでしょうか?
あるいは、ガノー様にてプログラムを変更したものを再度アップなさいますか?

基本的に、作者の方がアップしたURLをそのまま掲載する方針でおりますので、ご希望をお聞かせください。


DRAGONの紹介動画も拝見しました。3DSをどのように使っているのですか?興味がありますので...


実行コードの配列格納と引数付きサブルーチン呼び出し

sentaro様
ガノー様

CLIP機能への拡張の件で、ふと思ったことがあります。

これって、要するに2次元配列にアスキー文字列だけでなく、コマンドのコード列も格納できるようにして、インタープリタ動作の際に、寄り道して配列からコードを展開するということですよね?

ならば、Cなんかでよく使う「関数へのポインタの配列」を使って、状況に応じて関数を呼び出して実行するなんてCの常套師手段を C,Basic 風に実装すると言えなくもないかと...

配列に入れるものが何であれ、インタプリタでの読み出しルーチンで、配列を読ませる寄り道をお考えのことかと思うのですが、C言語ちっくに柔軟に使える実装もアリかな?と思った次第。


でもって、入出力っていう括りで考えますと、もう一歩進めて、Cプログラムのプログラム名にパラメータを付けてコマンドプロンプトやバッチファイルで起動すると、argc や argv でパラメータを取り出せたりしたのですが、それを C.Basic に実装すると、サブルーチンに引数を渡せない苦労から、解放されたりします。拙作の入力ボックスみたいに、使える変数で悩むことが無くなります。現状で既に大文字小文字、そして int と doubleの変数と、変数に使える文字の数が大幅に増えているので、 Casio Basicの究極の大域変数仕様は許容したとしても十分に役立つのではないかと思ったりします。


将来で良いので、心の隅にでも留めてもらえればうれしいです。

Re:DORAGON

管理人様、ガノー様、こんにちは!

>C.Basic のsetup で Execute mode を int にしないと、Bom のために [0]を雄とSyntax ERROR になることに気付きました。

私はずっと実数モードだけで動かしていたのでエラーの起きた「:」を削除してそのまま動作させていたのですが、(^^;
ガノー様の動画で山が山になっているのを見て初めて気が付いたのですが整数モードだと何も問題なく動作するのですよね。

実数モードではエラーになって整数モードでは上手く動くのは何でかなと思ったら、整数モードのDSZ/ISZで「:」が余分に付いていてもエラーにならないバグがありました(^^;
見つけていただきましてありがとうございます!
これは次期バージョンで修正しておきます。

あと、
実数モードでは山の生成が固定化されて上手くいってなかった部分は、山の計算部分で
RanInt#(1,20+L÷25)+40-Int(L÷30)→H
後半のL÷30を整数化すれば上手く動作するようになりました。
これで実数/整数モードどちらでも動作コンパチとなります。

実数モードでも必要十分な速度が出ている感じなので、'#CBint は特に必要ないかもしれませんね(^^)


それから、乱数の初期化に関してちょっと勘違いしていたのですが(^^;
純正CasioBasicではRan#1~9でそれぞれの乱数系列での乱数ということになってますが、
C.BasicではRan# nでnを乱数の種として指定することになっています。
ので、C.BasicではRan#0とすると常に0となり、Ran# nでは常に同じ乱数値が出てきます。
乱数の初期化をするためには、
Ran#関数を単独で使って、例えばプログラムの最初で
Ran#n
とすれば、その後のRan#ではnを種とする同じ乱数系列が毎回生成されることになり、
3D迷路やDRAGONゲームでは毎回同じパターンが出現するようになります(^^)

Re:実行コードの配列格納と引数付きサブルーチン呼び出し

管理人様、こんにちは!

>ならば、Cなんかでよく使う「関数へのポインタの配列」を使って、状況に応じて関数を呼び出して実行するなんてCの常套師手段を C,Basic 風に実装すると言えなくもないかと...

まさに今それを考えていたところでした!(^^)
コンパイラ実装も配列にマシン語を展開して実行という手段が使えそうな感じで、デバッグを考えるとその方向が良さそうな感じでいます。
最初は純正コンパチだった行列がほとんどCの配列と同じになってきたので、徐々にですけどCと同等の機能を持たせる方向で進化させればと思っています。

サブルーチンの引数もその流れで組み込めればというところですね(^^)

No title

■DRAGONの件 TO:管理人様、sentaro様

こんにちは! デバッグ情報ありがとうございます。
自分だけだと見つからないもの、多いですね!

今回は管理人様に提示して頂いた#CBINTを追加する方向にしたいと思います(もちろん、ソースも直します!)。

また、sentaro様に頂いた乱数列の固定も考慮致しました。
ただ今回は見送りたいと思います。
何度も挑戦して前回より長く進める配置が偶然にでることもゲーム性の一つとして調整しているためです。(ボムを搭載した理由がクリアできないパターンへの対策も兼ねているためです^^;)

また、::はミスです。こちらも一緒に修正したいと思います。

ただ、今日中の反映は無理ですので明日行い、改めてご連絡させて頂きます。


■3DSの件 TO:管理人様

3DSは、単にカメラアプリ(最初からある)を使っています。それをWIFIでのSD管理機能を使ってDCIMへアクセスして動画を取り込んで、YouTubeに投げるだけという手抜きです^^;



■心躍った件 TO:管理人様、TO:sentaro様

Cの関数と同様・・・、引数、、、

ひゃっほーー!!

・・・失礼いたしました。取り乱しました。異論はありません。実装しやすいように(便利なように)して頂ければ、小躍りします。FIOも・・・m(_ _)mウレシイカギリ



以上、乱文気味で申し訳ありませんでした!

DRAGONゲームの最新版

TO:管理者様

DRAGONゲームの最新版を上げ直しました。

https://dl.dropboxusercontent.com/u/93225197/fx9860gii/DRAGON.zip

以上、宜しくお願いします!

Re: DRAGONゲームの最新版

ガノー様

DRAGON の紹介記事をアップしました。

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

併せて、C.Basic トップページの紹介サンプルプログラムにも追加しておきました。

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


さらにサンプルプログラムが増えたら、サンプルプログラムの目次ページを新設して、構成を変更することにします。

Re: No title

sentaro様
ガノー様


> ■心躍った件 TO:管理人様、TO:sentaro様
>
> Cの関数と同様・・・、引数、、、
>
> ひゃっほーー!!

これって、ガノー様だけでなく、Javaな人やCな人が C.Basic に興味を持ってくれる可能性が高いと言えそうですね。

「初級者には優しく、上級者には楽しい。」

このような両方向を向いた多様性...C.Basic の面白い性格が姿を現わしたような気がします。

アドイン版 C.Basic ver.0.94 テスト版 その9.4(SAVE/LOADコマンド+引数追加版)

管理人様、ガノー様、こんにちは!

>何度も挑戦して前回より長く進める配置が偶然にでることもゲーム性の一つとして調整しているためです。(ボムを搭載した理由がクリアできないパターンへの対策も兼ねているためです^^;)

了解です(^^)
シンプルなロジックなのに繰り返しプレイしてしまうゲーム性がかなり高いですね。
新作も楽しみにしています!


>「初級者には優しく、上級者には楽しい。」

キャッチフレーズとして抜群です!(^^)
出来る限りその言葉通りの言語となるべく進化させていきたいと思います。

で、必要性がかなり高いと思われるサブルーチンの引数ですが、まだまだC言語同様とまではいかないですが(^^;
とりあえず従来互換の延長上で引数指定が可能になったというレベルです。
引数としてローカル変数が必要になるので、すべての小文字変数をローカル変数化しました。

それから、ガノー様、ご提案のプログラム上でのCLIP機能はEval(これは一応仮実装済みですが式評価のみなので、コマンド実行まで出来るのはExecコマンドになるかと思います。)との兼ね合いでまだ未実装ですが、ひとつのプログラム内でサブルーチンが使えるGosubを実装してみました。
昔のBasicと同じ非構造化コマンドなのでProgと比較すると使い道は微妙なのですが…(^^;

SAVE/LOADコマンドはBasicらしく?、まずはSAVE/LOADコマンドだけの実装です(^^;


アドイン版 C.Basic ver.0.94 テスト版 その9.4(SAVE/LOADコマンド+引数追加版)
http://pm.matrix.jp/CB/CBASIC094.zip

・Save/Loadコマンド追加しました。
(例)Save "TEST",Mat A
(例)Load("TEST")→Mat A
 Mat A行列の内容を保存、読み込みます。
 ファイル名は8文字まで、拡張子は[.bin]固定です。
 現状、アクセスできるのは行列データのみとなります。
 保存形式はヘッダ無し、内部バイナリーデータそのままのデータファイルとなります。

(例)Save "TEST",Mat A[5,1]
 Mat A[5,1]より最後まで保存します。
(例)Load("TEST",16)→Mat A[10,1]
 保存されたデータの16バイト目のデータからMat A[10,1]に読み込みます

・Prog "~"コマンドで引数を記述することが出来るようになりました。
 その変更に伴い、小文字変数はすべてローカル変数扱いとなります。
 引数の一番目はa、二番目はb、以下zまでのローカル変数に自動的に代入されます。
(例)Prog "TEST",123,456,N
 サブプログラム"TEST"の実行時には、
 123→a、456→b、N→c、d~zは不定値となります。

・Gosubコマンド追加しました。
(例)Gosub A
 Label Aから始まるプログラムを実行しReturnコマンドで復帰します。
(例)Gosub A,123,456
 引数もProgコマンド同様に使えますが、同じプログラム内なので大域変数と同じ扱いです。

Re: アドイン版 C.Basic ver.0.94 テスト版 その9.4(SAVE/LOADコマンド+引数追加版)

sentaro様


> >「初級者には優しく、上級者には楽しい。」
>
> キャッチフレーズとして抜群です!(^^)
> 出来る限りその言葉通りの言語となるべく進化させていきたいと思います。

共感して頂けて、うれしいです(^_^)/

> で、必要性がかなり高いと思われるサブルーチンの引数ですが、まだまだC言語同様とまではいかないですが(^^;
> とりあえず従来互換の延長上で引数指定が可能になったというレベルです。
> 引数としてローカル変数が必要になるので、すべての小文字変数をローカル変数化しました。


> ・Prog "~"コマンドで引数を記述することが出来るようになりました。
>  その変更に伴い、小文字変数はすべてローカル変数扱いとなります。
>  引数の一番目はa、二番目はb、以下zまでのローカル変数に自動的に代入されます。
> (例)Prog "TEST",123,456,N
>  サブプログラム"TEST"の実行時には、
>  123→a、456→b、N→c、d~zは不定値となります。

Prog コマンドで指定した引数以外は、他プログラムとも共有可能なグローバル変数となるのでしょうか?
ここ、ポイントのような気がします。

Prog に引数を指定した段階で、呼び出すサブルーチン内の変数が全てローカル化されると、純正で作ったものからの移植の敷居が上がってしまうように思われます。引数指定したものだけローカル化だとありがたいと思うのですが、如何でしょうか?


今日は運転免許の更新(さっき済んで)後、ちょいと仕事なので、まだ具体的に試してはいませんが、結構気になったので書くだけ書かせて頂きました。

ローカル変数

管理人様、こんにちは!

>Prog コマンドで指定した引数以外は、他プログラムとも共有可能なグローバル変数となるのでしょうか?
>ここ、ポイントのような気がします。

今回の仕様では小文字変数はすべてローカル変数として扱われてます。
ので、別のプログラムでは別の変数となります。
大文字変数は従来通りグローバル変数のままです。


>Prog に引数を指定した段階で、呼び出すサブルーチン内の変数が全てローカル化されると、純正で作ったものからの移植の敷居が上がってしまうように思われます。引数指定したものだけローカル化だとありがたいと思うのですが、如何でしょうか?

ローカル変数をどうするかというところで結構悩んだところで、新設で@1~@9とかも考えていたのですが、
純正には無い小文字変数がローカル変数として使えるかもということで、とりあえず小文字変数をローカル化してみました。

ローカル化は小文字変数だけなので純正からの互換性は大丈夫だと思われるのですけど、小文字変数だけとはいえ全部が一気にローカル変数になるというのもちょっと無理があるので、このあたりの仕様については改善の余地ありです(^^;

今の仕様では引数に使われるローカル変数名が指定できないので、Localコマンドを追加してサブプログラム内でローカル化する変数を指定するようにするとか、でしょうか。

引数の件

あうあう、あうあう。ど、どうも管理者様、sentaro様、おはようございました。YOKOLITHのコードは動くものになり、後は後悔用にコメントを補足する作業だけになりました。大域変数で小文字を使っているガノーです。今後とも宜しくお願い致シマウマ。

ジツワ、変数が、、、変数が足りなかったのでございます(TOT)。
も、もし可能でしたら、ローカル変数のON/OFFを切り替えられると助かります。

よ、宜しくご検討の程お願い申し上げます。

引数の使い方について

sentaro様
ガノー様

サブルーチンへ渡す変数についてです。

純正Casio Basic で汎用サブルーチン「入力ボックス」を作った時は、サブルーチンに変数を渡せないので究極の大域変数仕様を逆に利用して、サブルーチンで全体に必要で変更される変数を極力少なくして、メインルーチンからは「予約変数」としてみて処理するという考え方を導入しています。For分のインデックスやGetkeyの戻り値格納変数のように、その場で使い捨てる変数「使い捨て変数」とサブルーチンで独占して使うための「予約変数」という区分けです。

予約変数については、メインルーチン内で、サブルーチンを呼びだす直前に予約変数に代入しておき、サブルーチンでは予約変数に戻り値を格納し、戻ってきた直後にサブルーチンで戻り値設定した変数から予約変数に代入しておく...こうすることで、変数の使い回しをやっています。

ま、面倒くさいです。


YOKOLITHでの大域変数不足に対しては、絶対にサブルーチンで変更されては困るものを最小限予約し、あとは変数をどこまで使い回せるか...こんな感じで、純正での変数の使い回しに近い検討が必要かも知れません。


...ということで、C.Basic のサブルーチンに渡す変数のローカル化は、やはり渡された変数のみのローカル化の需要が、具体的に出てきた感じですね。

純正で込み入ったプログラムを書くと必ず出くわすのが変数不足ですが、C.Basicが提供するソリューションを、以下のように整理できると、ユーザーに優しいと思うのです。

・小文字変数に加えて、整数型と実数型 の2セット、合計104個の変数を提供する(既に対応す済み)

・サブルーチンに引数設定した変数はサブルーチンでのローカル変数となり、それ以外はグローバルのまま(検討事項)

2つめは、ご検討頂いているとは思いますが、これによってオーバーヘッドの大幅増加で、高速性が犠牲になるのなら、私としては、「引数指定したサブルーチンでは小文字が全てローカル化」でしばらく様子を見るのもアリ化と、愚考致します。


小文字は全てローカル化、の場合ですが、Intモード指定のサブルーチンの場合、doubleモード用小文字はグローバルのままでしょうか? これができると、ガノー様の件への当面の打開策になるかも知れません。


如何でしょうか?

No title

To:管理者様

慌てふためいて申し訳ありませんでした^^;

ひとまず、簡単のために、サブルーチンに分割しまくってローカル変数として持てる単位で局所化します。

変数の使いまわしは<del>面</del>・・・膨大なコードを書く際の枷になるため控えたいです^^;


To:sentaro様

こんにちは!怒涛のバージョンアップお疲れ様です!

まだ未確認ですが、、、質問させてください。

・サブルーチンの戻り値は大域変数の利用を想定していますか?
※ちなみに、秀丸マクロは##return/$$returnという特殊な予約語がこれをになっています。大域変数を利用する想定でしたら、こちらをご検討頂ければ幸いです!

・サブルーチンの再帰呼び出しは可能でしょうか?
(ローカル変数はスタックで実装されていますか?、スタックの場合、スタックオーバーフローはどのように対処すべきでしょうか?)

・うろ覚えですが、小文字のMat行列が確保できなかったような気がしますが、、、これはローカル化に合わせて可能になりますか?
(ローカルMat行列は使えるでしょうか?)

追記

To:管理者様、sentaro様

一応、、、0.93で動作するYOKOLITHをアップしておきます。
(今後0.94で動作させるようにかえていきますが、バックアップ&途中経過報告かねて^^;)

あくまで仮用にreadmeも付けていませんが。

094以降で動作する正式版を作って再度ご報告致します。
https://www.dropbox.com/s/3qd0joxpf9xzthl/YOKOLITH.zip?dl=0

Re:引数の使い方について

管理人様、ガノー様、こんにちは!

>ジツワ、変数が、、、変数が足りなかったのでございます(TOT)。
>も、もし可能でしたら、ローカル変数のON/OFFを切り替えられると助かります。

小文字変数も普通に必要となってくると小文字変数全部のローカル化はやっぱりまずいですね(^^;


>...ということで、C.Basic のサブルーチンに渡す変数のローカル化は、やはり渡された変数のみのローカル化の需要が、具体的に出てきた感じですね。

はい(^^;
大文字/小文字、実数/整数で104個あっても、その半分がローカル変数となってしまうとさすがに不足感が出てきますよね。


>2つめは、ご検討頂いているとは思いますが、これによってオーバーヘッドの大幅増加で、高速性が犠牲になるのなら、私としては、「引数指定したサブルーチンでは小文字が全てローカル化」でしばらく様子を見るのもアリ化と、愚考致します。

インタプリタとしては変数の型や使い道が複数あるというのは多少のオーバーヘッドを伴うところなのですが、2倍とかではなく1割以内の範囲で収まる程度だと思われます。
SH4Aの場合、スーパースカラということで案外オーバーヘッドが吸収されて出なかったりするのですが、コード配置とキャッシュの影響が割と大きいようで、コードの配置が少しずれただけで1割程度の速度差が普通に生じてしまうので誤差の範囲に収まる程度かもしれません。
SH3ではそういうことはないのですが、SH4Aは遅い場合でもSH3よりは平均的に1割~2割以上は速いので良しとしなければというところです(^^;
C.Basicの本体ファイルサイズがキャッシュに収まらない大きさになっているので、キャッシュミスしたらかなり効いてきますね。


>小文字は全てローカル化、の場合ですが、Intモード指定のサブルーチンの場合、doubleモード用小文字はグローバルのままでしょうか? これができると、ガノー様の件への当面の打開策になるかも知れません。

現バージョンではどちらもローカル化してしまってます(^^;
ですが、実数モードと整数モードでローカル変数になる変数グループをそれぞれ分けることは簡単です。
その場合は実数モードでは実数の小文字変数のみローカル化という感じですね。

今のところ、ローカル変数のプリフィックスとして@を使い、グローバル変数と明示的に区別するようにして、@で始まる変数をすべてローカル変数とし変数を増やす方向を考えています。
他の言語に比べると変数名が一文字しか無いので(そこが高速化に寄与してるのですが)それを活かしてどこまで拡張できるかというところですね。
とりあえず、@A~@Zまで26個のローカル変数として追加してみます。



>・サブルーチンの戻り値は大域変数の利用を想定していますか?

現状での戻り値としては、純正の仕様に基づいてその時点での演算結果が常にAnsに入るので、サブルーチン側で最後にAnsに入れるか、大域変数を使ってという感じになります。

------------------
サブプログラム"TEST"
------------------
A+1       // →Ans
Return
------------------

------------------
メインプログラム
------------------
2→A
Prog "TEST"
Ans→A     // Aには3が入ります。
------------------

C.BasicではAnsを省略して
Prog "TEST" →A
という記述が可能になっています。


>※ちなみに、秀丸マクロは##return/$$returnという特殊な予約語がこれをになっています。大域変数を利用する想定でしたら、こちらをご検討頂ければ幸いです!

お!秀丸!私も使ってます(^^ゞ
数値以外の戻り値が必要となる場合に参考にさせていただきます。


>・サブルーチンの再帰呼び出しは可能でしょうか?

一応可能なことは可能なのですが、システムで確保されている16KBのスタック領域が10数回の再帰呼び出しで溢れてしまうので、実用的には使えないという状況です(^^;


>(ローカル変数はスタックで実装されていますか?、スタックの場合、スタックオーバーフローはどのように対処すべきでしょうか?)

はい。ローカル変数はスタック領域に確保しているので(それ以外も各種制御構造スタックや飛び先キャッシュがてんこ盛り…汗)スタック使用量がちょっと増え過ぎでサブルーチンを呼び出す度にスタック消費がかなり多めです。
一応、スタックオーバーフローでフリーズしないようにスタック不足でエラーで止まるようにはなっています。


>・うろ覚えですが、小文字のMat行列が確保できなかったような気がしますが、、、これはローカル化に合わせて可能になりますか?

小文字のMat行列を追加することは簡単ですので、次回バージョンアップで取り入れてみます(^^)


>(ローカルMat行列は使えるでしょうか?)

今のところはローカル行列は実装してないのですが、引数としてMat行列を指定できるようになれば、その時はローカル行列が必要となってきますね。

Re:Re:引数の使い方について

To: sentaro様

早速のご返答有難うございました。再帰が出来ると、、、ゲームが作りやすいものでして^^;

さて、YOKOLITHですが、もともと小文字の変数はサブルーチンをメインで使っていたので、多少変更するだけで動作するようになると思います。

いや、、、足りなくなったからメインルーチンでも使っちまおうと魔が差したのがいけませんでした^^;

sentaro様に教えて頂いた、サブルーチンの戻り値として小文字変数を使っているのをANSに書き換えて、呼び出し&内部の変数名を変えれば動きそうです。

実は、サブルーチンの定義用に以下のような自分ルールを敷いていました。

・サブルーチン内部で大文字の変数へ代入禁止

これは、結局想定としてはsentaro様の小文字変数ローカル化と似た結果を生むと思います。ANSを使えばメインからサブへの小文字変数へのアクセスが不要なのですから、小文字全禁止で正直問題ないと思います。寧ろ、その方が分かり易いですね!

(タイミングに面食らっただけです^^;)

現状、引数として全ての小文字変数a~zへ代入する仕様ですが特に問題ないと思います。理由は、メイン側ではa~zの値を直接受け渡しは出来なくても、変数の格納領域として使えるからです。ローカル変数ですもんね。いいと思います!

YOKOLITHすごいです!

ガノー様、こんにちは!

YOKOLITHダウンロードさせていただきました!
早速に走らせてみると、ゲームに関しては言うことなしの完成度ですね。
ピースの大きさが予想以上に大きくてはっきり見えてちょうどいい感じです。
もはやデバッグそっちのけでハマりかけております(^^ゞ

プログラムリストはインデント付くとCasioBasaicのプログラムがかっこ良く見えるのが新鮮ですね。
SwitchコマンドはCasioの電卓ではClassPadに標準装備されているのを最近気がついたのですが、インデントと相まって分かりやすさがアップしますね。
そして、前回もですけど、コメントがカナなので日本人的には分かりやすくてよいです(^^)
毎度、C.Basicの新機能をてんこ盛りで活用していただいて大感謝です!!


>これは、結局想定としてはsentaro様の小文字変数ローカル化と似た結果を生むと思います。ANSを使えばメインからサブへの小文字変数へのアクセスが不要なのですから、小文字全禁止で正直問題ないと思います。寧ろ、その方が分かり易いですね!

なるほどです。
今回の仕様の全小文字変数ローカル化、もしくは任意の変数だけをローカル変数扱いにするのがいいのか、追加でローカル変数を増設するのがよいのか、まだ決めかねているところですけど、管理人様のご提案もありましたし、とりあえずデフォルトでは全部の小文字変数はグローバル変数として扱う形とし、サブルーチンでは任意の小文字変数をローカル変数として扱えるという仕様でいってみたいと思います。
これは今の仕様の小文字変数全ローカル変数化も出来ますし、変数の使い方を選択できる形がやはり便利ですよね(^^)

再帰に関しては出来るだけ使えるレベルになればと思うのですが、どれくらいの深さまで行ければとかいうのはありますでしょうか?

サブルーチンのネスト深さについて

sentaro様
ガノー様

純正Casio Basicではサブルーチンのネストは9層までです。

再帰を使うとすれば9層では足りないですよね。というかマニュアルなどで「再帰」というワードを使えば勘違いされそうなので、「ネスト深さ」が○層までで、、再帰利用には要注意!といった説明が良いように思います。

ところでスタックは今後の機能追加や内部実装の変化に応じて変化しそうな気がしますので、出来高払いで Stack Over Flow エラーが出ない範囲でOK、みたいな感じが本来なように思うのですが、それではチョット不親切なので、ガノー様のご希望に添う形で「だいたいこれくらい」みないなのでどうでしょうか?

ところで、ローカル変数設定の柔軟化は、とてもありがたいです。


Yokolithについては、ソースコード付きで(インデントができるよ~と見せびらかすため(^^;)紹介させて頂こうかな、と思っています。


Re: サブルーチンのネスト深さについて

To:管理人様

●YOKOLITHの件

インデントがあると見栄えがよくなりますよね。ソース掲載は嬉しく感じます!



To:管理人様、sentaro様

●ネストの件

>純正Casio Basicではサブルーチンのネストは9層までです。

純正の情報ありがとうございます!

ネストは9層までですか、、、ゲームで考えると全く足りないですね^^;
SLGのタクティクスなどでは、9層のネストなら移動距離8程度までしか判断できないことになりますね。

又は例えばマインスイパーで初級の10*10のパネルオープンで、↓図の、「左上を空けて、右から2列目、上から7列目の1」を見つけるのに必要な深さは23(+1)ネスト必要です(右、下、左、上、と探索する場合)。
https://dl.dropboxusercontent.com/u/93225197/blog/sakishori/image05.jpg

マインスイーパーやぷよぷ●の同色の接続数を把握する程度なら、再帰を使わなくても可能ですが、使えるだけでコードがかなり簡略化するので可能なら実用的な範囲だと嬉しいです。
(中学生の時は再帰なんて分からない&N88だったので、Forを3重ループしてぷ●ぷよを作ってました^^;)。

また、管理人様提案のローカル変数の局所化が出来ればスタックはかなり余裕が出そうな気がしていますが、どうでしょうねー?
(ローカル行列とかはスタック消費激しそうですね^^;;;)

あくまで私の感覚ですが、電卓であるということを考慮して、最低20ネスト、30ネストあれば概ね良さそう、100ネストできれば言うことなしだと思います。
(※このイメージにおいては10個程度のローカル変数を使用し、ローカル行列は使わない前提。使ったらガクッと減るという感覚です)



●0.94への移行の件
さて、YOKOLITHの0.94への移行は一瞬でした(笑)。10分もかからず。。。そもそもメイン側で小文字変数もローカル変数として使えるんですよね! ただし、公開用のコードはもうしばらく後になると思います。

ローカル変数の局所化がなされたらそちらの機能を採用したいと思いますし、ローカル変数という便利過ぎる機能のおかげでもっと作り込みたい気持ちが湧き上がってきました。

ということでもう1週間~2週間程度お待ちください。

以上、0.95首を長くして待っています!(笑)

アドイン版 C.Basic ver.0.95 テスト版 その9.5(ローカル変数任意指定版)

管理人様、ガノー様、こんにちは!

>再帰を使うとすれば9層では足りないですよね。というかマニュアルなどで「再帰」というワードを使えば勘違いされそうなので、「ネスト深さ」が○層までで、、再帰利用には要注意!といった説明が良いように思います。
>それではチョット不親切なので、ガノー様のご希望に添う形で「だいたいこれくらい」みないなのでどうでしょうか?

了解です(^^)


>ところで、ローカル変数設定の柔軟化は、とてもありがたいです。

制限は出来るだけ無い方がよいですし、自由度が高いというのも売りにしたいところですよね(^^)


>あくまで私の感覚ですが、電卓であるということを考慮して、最低20ネスト、30ネストあれば概ね良さそう、100ネストできれば言うことなしだと思います。

キャッシュをスタックから追い出したり、ローカル変数の数を制限したりとかでなんとか30ネストまで可能になりました。


>ローカル変数の局所化がなされたらそちらの機能を採用したいと思いますし、ローカル変数という便利過ぎる機能のおかげでもっと作り込みたい気持ちが湧き上がってきました。

Ver.0.95では小文字変数がデフォルトでグローバル変数なのでソース変更なしに動くようになりました(^^)
それにしてもYOKOLITHは良く出来ています。ついつい遊んでしまってしまいますね(^^;


アドイン版 C.Basic ver.0.95 テスト版 その9.5(ローカル変数任意指定版)
http://pm.matrix.jp/CB/CBASIC095.zip

・全小文字変数がローカル変数扱いだったのをローカル変数にする変数を任意指定できるように変更しました。
 デフォルトでは小文字変数はすべてグローバル変数となりますが、
 プログラム内でLocalコマンドで変数指定するとその変数はそのプログラム内だけで使われるローカル変数となります。
(例)Local x,y,x
 ローカル変数としてx,y,zを指定します。
 指定できるのは小文字変数のみで最大10個まで指定できます。
 またこの変数の順で引数付きProgでローカル変数に代入されます。

(例)サブプログラム"TEST"内で、
   Local x,y,x
 (記述する位置はサブプログラム内であればどこでも可です。)

   Prog "TEST",123,456,N
 サブプログラム"TEST"の実行時に、ローカル変数としてx,y,zが確保され、
 123→x、456→y、N→z、それ以外はグローバル変数となります。

 ローカル変数が使えるようになったことで再帰プログラムも可能になりましたが、
 現状ではメモリ制限でネスト30層程度までとなっています。

まだとりあえず動いてるレベルなのでバグが潜んでいそうです(^^;

YOKOLITH95

https://dl.dropboxusercontent.com/u/93225197/fx9860gii/YOKOLITH95/YOKOLITH95.zip

TO:管理者様、sentaro様

0.95で動作可能なテト●スライクゲームを公開しました。名称は、0.95に敬意を表し、YOKOLITH95とします。

Localや、Save/Load、Switch~Case、インデント、タイマーなど、完全にC.Basicでしか作れないゲームとなっています。

というか、Basicで、しかも計算機で、ちゃんとしたゲームが作れることに驚きです。

ファイル量が今回多いですが、ご容赦ください。クロックアップせずとも楽しめますが、よりスリリングに楽しみたい場合、FTune2で最速状態にすると良いかもしれません。

TO:sentaro様
ファイル制御の兼ね合いから、"IsExist"(ファイルの有無確認)が欲しいと感じました。宜しくご考慮下さいませ。

TO:管理人様
実は忙しくなることが確定してしまいました。1~2ヶ月はこちらにアクセスする頻度が今後減ると思われます。可能な際はのぞかせて頂きたいと思います。そして、復帰した際にはまた宜しくお願い致します。
m(_ _)m

以上

アドイン版 C.Basic ver.0.95a テスト版 その9.5a(IsExistコマンド追加版)

ガノー様、こんにちは!

>0.95で動作可能なテト●スライクゲームを公開しました。名称は、0.95に敬意を表し、YOKOLITH95とします。
>Localや、Save/Load、Switch~Case、インデント、タイマーなど、完全にC.Basicでしか作れないゲームとなっています。

YOKOLITH95、早速の最新版に合わせたバージョンアップありがとうございます!(^^)


>というか、Basicで、しかも計算機で、ちゃんとしたゲームが作れることに驚きです。

本当に私もびっくりすることが多いですけど、いまどきの計算機は侮れませんね(^^;
インタプリタでこれだけいけてしまうと、コンパイラになることでどこまでいけるかすごく楽しみになってきました。


>ファイル制御の兼ね合いから、"IsExist"(ファイルの有無確認)が欲しいと感じました。宜しくご考慮下さいませ。

確かにファイルの有無確認コマンドは必須かもでした。
ってことで、サクッと追加してみました。


アドイン版 C.Basic ver.0.95a テスト版 その9.5a(IsExistコマンド追加版)
http://pm.matrix.jp/CB/CBASIC095a.zip

・IsExist(コマンド追加しました。
 指定されたファイルが存在しない場合は0が返ります。
 ファイルが存在する場合はファイルサイズが返ります。
(例)IsExist("TEST")
 "TEST.bin"が存在すればファイルサイズが、存在しなければ0となります。

YOKOLITH 0.95a対応

TO sentaro様

こんにちは。IsExistありがとうございました。
0.95a確認しました。YOKOLITHを0.95a対応しました。

TO 管理者様

https://dl.dropboxusercontent.com/u/93225197/fx9860gii/YOKOLITH95/YOKOLITH95.zip

最新版です。大きな変更で、メインループのwhile 1をGotoで書き換えました。(リエントラント性確保のため)

また、実は●トリスフリークなので、色々凝っています。以下にReadmeには未記載の情報を載せます。

・回転を連続して押すと、ゲーム進行を止めることができるようにしました(押しっぱなしはダメ)。
・壁蹴りアルゴリズムを採用しています。
・壁上りも可能になっています(実装は簡略化しているので棒でも壁上り出来ます)。
・ブロックの生成はテトリ●のガイドラインに合わせています(純粋な乱数ではありません。)
・RENは採用していません。

相当なバイト数になりました。。。ソースを乗せられる量じゃなくなってきたような^^;
気がしますので、ご采配をお願い致しますm(_ _)m

Re:YOKOLITH 0.95a対応

ガノー様、こんにちは!

早速の0.95a対応ありがとうございます!!
なんかすごい進化で、ここまで来ると単体アドインでいけますね。
fx-9860Gシリーズに存在するテ○リスアドインはOSがVer2以上では動かないのでこのYOKOLITHは大変貴重です(^^)

壁蹴りと回転止めはナイスです。おかげさまでやっとこ1万点まで到達しました。
レベル10まで行ってしまうとパニックなのでその手前まででなんとか…というところです(^^;


>最新版です。大きな変更で、メインループのwhile 1をGotoで書き換えました。(リエントラント性確保のため)

制御構造系コマンド(For、While、Do)はメイン/サブプログラムごとにそれぞれループスタックを確保しているのですが、サブルーチンのネスト確保のために、スタック節約でどのコマンドも4重までに制限しているのでそれ以上の多重ループになると同種コマンドではなくて別コマンドを組み合わせることが必要になっています。
Gotoループは制限がないので上手く使い分けることが現仕様のC.Basicのコツですね(^^;


>相当なバイト数になりました。。。ソースを乗せられる量じゃなくなってきたような^^;
>気がしますので、ご采配をお願い致しますm(_ _)m

C.Basicソースファイルをテキストファイルにコンバート出来ればソースの扱いがかなり楽になりそうなので、次期バージョンでテキストファイルへのコンバート機能を付けてみたいと思います(^^)
FX10ProやCG20ではテキストファイル変換は標準装備なのでfx-9860Gシリーズにもというところですね。

Re: Re:YOKOLITH 0.95a対応

sentaro様
ガノー様

いやはや、凄い進歩ですね。

YOKOLITHなかなか難しいです。

ところで、私事で恐縮ですが、触ったことのないドイツ製のチョット特殊な検査装置のクイックスタートマニュアルを日本語で作るために、ドイツ語と英語のマニュアルとにらめっこしながら、装置の組み立てから装置の操作を実際にやりながら、操作法をマスターする...なんてことやってます。今月末の装置納入までに日本語版マニュアルを作る突貫作業中です。

翻訳と技術とマニュアル作りがいっぺんにできる人が忙しいので、私がやるしかないという...

なので、ここしばらく沈んでいます。

ガノー様と入れ違いになりそう....(^^;

Re:Re: Re:YOKOLITH 0.95a対応

管理人様、おつかれさまです!

>いやはや、凄い進歩ですね。

最初は高速な互換路線だったところが、ローカル変数が使えるところまで進化できるとは思ってなかったので、管理人様やガノー様のアドバイスが本当にありがたく思います。
これからも必要と思われる機能はどんどん取り入れていきたいと思ってますので、今後ともよろしくお願いいたします(^^)


>ところで、私事で恐縮ですが、触ったことのないドイツ製のチョット特殊な検査装置のクイックスタートマニュアルを日本語で作るために、ドイツ語と英語のマニュアルとにらめっこしながら、装置の組み立てから装置の操作を実際にやりながら、操作法をマスターする...なんてことやってます。今月末の装置納入までに日本語版マニュアルを作る突貫作業中です。

ドイツ語と言えば、前に昔のポケコンでドイツ語版PDFしか存在しないマニュアルを見たら、ほとんど分からなくてお手上げだったのですが、別の英語マニュアルのPDFが併存している機種は見比べるとなんとなく分かってくる気がしたものでした。
ドイツ語だけじゃなく英語マニュアルがあるのは大きいですね(^^)

アドイン版 C.Basic ver.0.96 テスト版 その9.6(テキストファイルへ変換機能追加版)

管理人様、ガノー様、こんにちは!

電卓上でC.Basicソースファイルをテキストファイルへ変換する機能を追加しました。
同じファイル名で拡張子がtxtになったファイルが生成されます。
変換規則はCG10/20準拠ですが若干違ってます(^^;

アドイン版 C.Basic ver.0.96 テスト版 その9.6(テキストファイルへ変換機能追加版)
http://pm.matrix.jp/CB/CBASIC096.zip

・Basicソースファイルからテキストファイルへの変換に対応しました。
 ファイルモードで[SHIFT]+[F6]で変換を開始します。

テキストファイルからC.Basicソースファイルへの変換機能は未実装です(^^;

Re: アドイン版 C.Basic ver.0.96 テスト版 その9.6(テキストファイルへ変換機能追加版)

■To:sentaro様

0.96・・・超絶便利ですね!! 公開用にソースを調える際に、狭い電卓画面だけでなく、PCの画面でパッと見れるのが凄くいいです。テキスト⇒C.Basicが出来ることを・・・期待しています!!←(^^;)

●追加要望
可能でしたら、ご考慮お願い致します!

・ACBreak(/BreakPoint)というコマンドを追加して頂けませんか?

これはACキーを押して実行を強制的に止めたような効果を起こすコマンドです。そして、このコマンドを設定で有効化するか、無視するかを設定できるとありがたいです。

要はデバッグ用にブレークポイントが欲しいという要望です。
(⊿で止めてACを押す場合、⊿を消すのが面・・・^^;)

・ファイルリストの画面にファイルコピー機能を追加して頂けませんか?
私の場合、結構大幅な変更を行うことが多く、バックアップ用にファイルをコピーしておきたいと思う面が結構あります。CLIPだと容量が少なめなので・・・。PCを使うのもちょっと・・・。

・Exec諸々の使い方を教えてください。。。
CMDの一覧にはある??のに気が付きました。
まだ試していませんが(^^;)

・Textで、カタカナやシンボルを表示できるようになりませんか?
日本語RPGを作りたいと思っています。
というか、Rogueを英語/日本語で作ろうかな。。。と調べている段階です^^;

・Mat行列に文字列を格納できるようになりませんか?
["テスト","ホゲホゲ"]→Dim Mat T
のようにできて、文字列関連の命令に番号以外に
以下のような形式が指定できるすっごく助かります。

①Matをm,nだけでなくmだけでも許す拡張をする場合?
["テスト","ホゲホゲ"]→Dim Mat T
 Mat[1,1]で"テ"
 Mat[1]で"テスト"
②若しくはMatは従来通りm,nだけを許す場合
[["テスト","ホゲホゲ"],["アイウエオ",["カキクケコ"]]]→Dim Mat T
 Mat[1,1]で"テスト"
 Mat[2,2]で"カキクケコ"

※①でも②でも、どちらでも実装しやすい方をお願い致します!!
※②の方が良いような気がしています



To:管理者様、sentaro様

YOKOLITHをまた改造しまくっています。HOLDやGOHSTを追加していたり、二方向の回転が可能になったり、回転入れが可能になっていたりします。現在コードを整備していますのであと数日お待ちください。
・・・来週から本格的に忙しくなる前に頑張ります^^;

To:管理者様

英語でも僕はお手上げなのに^^;
、、、ドイツ語・・・しかも技術系の!!

が、頑張ってください!

文字列仕様について

ガノー様、こんにちは!

>0.96・・・超絶便利ですね!! 公開用にソースを調える際に、狭い電卓画面だけでなく、PCの画面でパッと見れるのが凄くいいです。テキスト⇒C.Basicが出来ることを・・・期待しています!!←(^^;)

ありがとうございます!
電卓内での内部コードがテキストコードからかなりかけ離れてきているのでテキスト変換は必須機能ですね。
テキストからC.Basicコードへの変換もVer1.00になるまでには実装しないとです(^^;


>・ACBreak(/BreakPoint)というコマンドを追加して頂けませんか?

昔のBasicでいうところのStopコマンドですよね。
CasioBasicの同名のコマンドはEndと同じなので、
次回バージョンアップでACBreakをガノー様の仕様で追加してみます(^^)


>・ファイルリストの画面にファイルコピー機能を追加して頂けませんか?

ファンクションキーがいっぱいなのでちょっと整理して、RenameとDelをFileにまとめて2階層目に移してCopyを追加してみたいと思います。
現状での対処方法としては一旦エディタで開いて改行&DEL、編集済状態にするとEXITでポップアップが開くので別名でセーブすればコピーと同様の結果となるでしょうか(^^)


>・Exec諸々の使い方を教えてください。。。

んと、今のところはEval(だけ仮実装してるのですが、Eval(”1+2+3”)で文字列を数式として評価して数値結果を得るというところです。
Mat行列に文字列データ”1+2+3”を入れてから、Eval(&Mat A)でも同様ですが、Matに文字列代入が出来るようになってからと思ってましたので次回以降の正式コマンドとなる予定です。
Execも同様に文字列データを実行するコマンドとなりますが、これは実装までちょっと時間かかるかもしれません(^^;


>・Textで、カタカナやシンボルを表示できるようになりませんか?

カナとシンボルの縮小フォントが出来さえすれば可能なのでなんとか表示できるようにしてみたいです。


>・Mat行列に文字列を格納できるようになりませんか?

これはバイト扱いが出来るようになったMatの拡張機能として実装を考えてました。
C言語と同様までとはいかないまでも文字列が実用的に使えるレベルで実装していってみたいと思います(^^)


>以下のような形式が指定できるすっごく助かります。

今のMatの仕様で文字列を扱うとなるとC言語同様にバイト型でMat A[10,16]で16文字まで入れられる配列を10個確保という感じなので、ガノー様の①に近い仕様はいけると思います。
基本が数値型の行列なので、
 Mat[1,1]で'テ'の文字コード値
 &Mat[1,1]で文字列"テスト"
という感じになりそうです。

②仕様は新たにString型をという感じになりそうなのでとりあえずは①仕様から実装してみます(^^)


>YOKOLITHをまた改造しまくっています。HOLDやGOHSTを追加していたり、二方向の回転が可能になったり、回転入れが可能になっていたりします。現在コードを整備していますのであと数日お待ちください。
・・・来週から本格的に忙しくなる前に頑張ります^^;

ぉお! ほとんど完全版という感じの進化ですね!
楽しみにお待ちしております(^^)

アドイン版 C.Basic ver.0.97 テスト版 その9.7(文字行列機能+コピー機能+ACBreakコマンド追加版)

管理人様、ガノー様、こんにちは!

今回のバージョンアップで文字列が行列で扱えるようになりました。
文字列関数は未実装なので代入と読み出しだけのシンプルな状況ですが、とりあえずMat行列で文字列が扱えます。
読み出しは&を付けることででC言語相当の文字列へのポインタとしてアクセスします。
その他、ガノー様ご提案のコピー機能とACBreakコマンドを実装しました。

例によって新機能追加でバグが残ってそうですがとりあえずアップです(^^;


アドイン版 C.Basic ver.0.97 テスト版 その9.7(文字行列機能+コピー機能+ACBreakコマンド追加版)
http://pm.matrix.jp/CB/CBASIC097.zip

・Mat行列への文字列の代入、初期化対応しました。
(例)["ABC","TEST","1+3+5"]→Mat A
 バイト型のMat A[3,6]行列を自動的に確保してそれぞれの要素に文字列を配置します。
 Mat A[1,1]="ABC"
 Mat A[2,1]="TEST"
 Mat A[3,1]="1+3+5"
 となります。
 文字列対応コマンドで"ABC"にアクセスするには&Mat A、もしくは&Mat A[1],もしくは&Mat A[1,1]となります。
 "1+3+5"をアクセスするには&Mat A[3],もしくは&Mat A[3,1]となります。
(例)Locate 1,1,&Mat A
 Locate 1,1,"ABC"と同じです。
(例)Locate 1,1,&Mat A[3,3]
 Locate 1,1,"3+5"と同じです。

現バージョンでの文字列対応コマンドです。””の代わりに&Mat形式で使用します。
・””
(例)&Mat A[1]
  "ABC"と同じです。
・?
(例)?→&Mat A
 行列Mat Aに文字列を入力します。確保している要素数で文字数が制限されます。
・Locate
・Text
・LocateYX
・Eval(
(例)Eval("1+2+3")→6
(例)Eval(&Mat[3,3])→8
文字列を数式として評価、値を返します。

・ACBreakコマンドを追加しました。
 プログラム中で[AC]での一時中止と同じ結果となります。
 セットアップにてACBreakコマンドの有効/無効の切り替えが出来ます。
 無効(off)にした場合はスルーされてプログラムの実行に何も影響を及ぼしません。

・ファイルモードでCopy機能を追加しました。
 選択されたファイルを別のファイル名でコピーします。同名の場合は何もしません。
 ファンクションキー不足のためにファンクションキーの割当を一部変更しました。

0.95aでサブプログラム多すぎるエラー

To:sentaro様

怒涛のバージョンアップありがとうございます!
今回のバージョンは未検証ですが、0.95aで結構困ったことが起こったのでご連絡いたします。

YOKOLITHの次期バージョン予定のコードにヘルプ表示を追加し、保存して終了したところ、「サブプログラムが多すぎる」というエラーが発生し、編集も実行もできなくなりました。

こうなったプログラムを回復しようと以下のように色々試しましたがダメでした。

①追加したサブプログラムをリネームして「ファイルが無いエラー」にすれば編集できるんじゃないか?
 ⇒Can't find file(?)は出ましたが、フリーズし先へ進めませんでした。

②追加したサブプログラムを空ファイルにしてみました
 ⇒やっぱり無関係ですよね^^;

③YOKOLITH.G1MをPCのバイナリエディタで開き、該当すると思われる箇所を削除し、FA-124で転送しようとしたところ「セキュリティー違反」というエラーが出て転送できませんでした。
 ⇒ヘッダー情報にチェックサムや本文バイト数などが含まれる?かと思いましたが、、、調べる前に今やり直しているFF3へ浮気しました^^;

もし可能なら、サブプログラムの呼び出し可能数の制限を緩めて頂けるか、若しくはサブプログラムが多すぎても編集できるようになるか、ファイルが無くてもフリーズしないようになると助かります。

以上、取り急ぎご連絡まで

アドイン版 C.Basic ver.0.97a テスト版 その9.7a(ファイル開けなくなるバグ対策版)

ガノー様、こんにちは!

>もし可能なら、サブプログラムの呼び出し可能数の制限を緩めて頂けるか、若しくはサブプログラムが多すぎても編集できるようになるか、ファイルが無くてもフリーズしないようになると助かります。

現行仕様ではサブプログラム数が15までの制限でエラーになるようになっていたのですが、エディタでもサブプログラムを全部読み込んでしまう仕様だったので、エラーになったら最後、何もできなくなるということになっていました(^^;

ってことで、
エディタ起動時にサブプログラムを読み込まず、実行させる前に読み込む方式に変更しました。
これでファイルが開けなくなることは無くなると思います。
最初からこの形で行くべきでしたけど、エラーが露見しなかったので放置になってしまってました(^^;
サブプログラムが多くないと出ないバグだったので、見つけていただきまして感謝です!!


アドイン版 C.Basic ver.0.97a テスト版 その9.7a(ファイル開けなくなるバグ対策版)
http://pm.matrix.jp/CB/CBASIC097a.zip

・サブプログラムが多くなると(15以上)何も出来なくなるバグを修正しました。
 同時に開けるサブプログラム数を15から30に増やしました。

・行列のサイズを取得する関数を追加しました。
・ElemSize(
 1要素のサイズ(ビット)を返します。
(例) ElemSize( Mat A )
・ColSize(
 {m,n}のm,行サイズを返します。
・RawSize(
 {m,n}のn,列サイズを返します。

YOKOLITH95最終バージョン

■TO:sentaro様
早速の対応有難うございました!!
追加機能も重要ですね!

■TO:管理者様、sentaro様

https://dl.dropboxusercontent.com/u/93225197/fx9860gii/YOKOLITH95_20160125/YOKOLITH95_20160125.zip

最終バージョンとします。機能としてはT-SPIN判定等以外ほぼ網羅しています。

実は、ソースコードは差ほど整備できていませんが、今回はこれで終わります(^^;)

最終仕様

・GHOST表示
・HOLD使用可能
・ハードドロップ使用可能
・プログラム内ヘルプ表示可能
・ハイスコア保持
・ブロックの乱数調整済み
・左右回転可能。
・回転入れ可能。
・各種ブロックの壁蹴りに対応
 ※Iブロックの壁蹴りは4ブロックではなく3ブロック
・壁上り可能
・回転止め可能

通常のテトリスとの相違

・回転軸が物体の中央にない(右上を起点に、最も高さの無いようになる)
・Iブロックも一部壁上り出来る
・壁蹴り/回転入れのアルゴリズムが独自実装
 (Oスピンによる回転入れも可能。)

前バージョンとの相違点
・レベル9とレベル10の差が酷過ぎたのでレベル10を簡単に。
・その他のレベルも全体的に簡単化。
・GOHSTとHOLDを採用。
・逆回転可能に。回転系、その他諸々。

さて、次回作はローグだっ!!
と思っていますが、ソース量がやばそうです(^^;

以上、乱文失礼いたしました。

Re:YOKOLITH95最終バージョン

ガノー様、こんにちは!

YOKOLITH95最終バージョン、ダウンロードさせていただきました!
追加仕様がすごすぎです。
もはやサンプルプログラムにはもったいないくらいの完成度が半端ないですね。
前バージョンで一万点を超えてからハイスコアクリアが出来てないので最終バージョンでハイスコア超えに挑戦してみます(^^)


>早速の対応有難うございました!!
>追加機能も重要ですね!

追加機能でちょっとバグってましたので差し替えアップしてます(^^;

文字列機能は専用コマンドを追加せねばというところですけど、Textの文字対応と合わせて進めていきたいと思います。
何か気がついた点、バグ報告、新規コマンドのご提案などありましたらこれからもどんどんお願いします(^^)


>さて、次回作はローグだっ!!
>と思っていますが、ソース量がやばそうです(^^;

ソース分割して順次ロードしながら実行とか考えていかないといけないかもですね。
現行仕様では最初に一括ロード方式なのでメモリ上限がソースの上限になってしまってるので、逐次ロードの仕組みも取り入れていきたいと思います(^^)

Re: Re:YOKOLITH95最終バージョン

sentaro様

業務連絡!?

http://community.casiocalc.org/topic/7417-ftuneftune2ptune2-cpgbsc-tuning-utilty/#entry60102

ここにコメントが付いていました。

相変わらず沈んでおります(-_-;

Re: Re:YOKOLITH95最終バージョン


TO:管理者様、sentaro様

https://dl.dropboxusercontent.com/u/93225197/fx9860gii/YOKOLITH95_20160130/YOKOLITH95_20160130.zip

種々のバグがあったので更新しました。
・一番駄目なバグ:初回HOLDが正しく出来ない←あらら^^;
・その他諸々(結構バグってました)

最終版と言っておきながら、致命的なバグが見つかる、、、悲しい限りです^^;

御二方とも風邪&体調、お気をつけて!

Re:Re: Re:YOKOLITH95最終バージョン

管理人様、ガノー様、こんにちは!

>業務連絡!?
http://community.casiocalc.org/topic/7417-ftuneftune2ptune2-cpgbsc-tuning-utilty/#entry60102
ここにコメントが付いていました。

うわ、ずっとC.Basicのバージョンアップ続きでチェックが遅れました(汗)
どうもありがとうございます(^^)



>種々のバグがあったので更新しました。
>・一番駄目なバグ:初回HOLDが正しく出来ない←あらら^^;
>・その他諸々(結構バグってました)

初回HOLDは、気がついてませんでした(^^;
高機能化部分は細かな部分はかなりやり込まないと気が付かないところもありますね。

>最終版と言っておきながら、致命的なバグが見つかる、、、悲しい限りです^^;

C.Basicでの致命的バグはこの先もかなり発生しそうですが…(^^;
ハードのバグだとどうしようもないですけど、ソフトはいくらでも修正できるのがよいですね(^^)


C.Basicは文字列関数の実装でちょっと手間取ってる今日この頃ですけど(^^;
文字列関数は純正にも実装されているので出来るだけ互換を持たせる方向での実装を進めています。

Re: Re:Re: Re:YOKOLITH95最終バージョン

sentaro様

> うわ、ずっとC.Basicのバージョンアップ続きでチェックが遅れました(汗)
> どうもありがとうございます(^^)

さっそく、sentaro様のコメントの後で、宣伝コメントをポストしておきました(^^;


Re: Re: Re:Re: Re:YOKOLITH95最終バージョン

sentaro様
ガノー様

業務連絡(またかい(^^;)

OneDriveの容量維持の手続きのお知らせ。

Office365サブスクリプションユーザーが使えるOneDrive容量が15GBから5GBに減らされますが、申し込んだ人だけへのボーナス(救済策)があり、アメリカ時間で1/31中が期限です。

Microsoft Accountにloginした状態で以下へgo!
https://preview.onedrive.com/bonus/

日本時間で 2/1 14:00までに Optin するのが確実でしょう。アメリカ時間で1/31までとなっているのですが、東部時間なのか太平洋時間なのかで違います。そこで最も速く1/31が終わる東部時間で計算すると上のデッドラインになります。

※ Casio Basic入門講座で作った TimeZoneで計算しました(^^;

私は Microsoft Office Premiumについてきた Office365 のサブスクリプション1年があります。まだ大して OneDriveは使っていません。今後も使うかどうか分からないのですが、今 15GBあるのが5GBに減ってしまうのは、チョットもったいないので、とりあえず申し込んでおきます。GoogleやDropBoxもの無料容量を合わせれば結構な量ですね。

ガノー様は DropBoxをお使いで関係ないかも知れません。
sentaro様は、クラウドストレージをお使いかどうかチョット分かりませんが、とりあえずバーゲン情報みたいなノリでのお知らせです。

さっき申し込んでおきました。

C.Basicでの区切り文字拡張機能

sentaro様

区切り文字 ":" は、Locate, Text、グラフィックスコマンドの後ろに付けると、LCD更新を抑制しますが、以下についてはどうでしょうか?
- LocateXY
- " "
- ◢

そろそろコマンドリファレンスを整理して書き始めていますもので、今後も色々と質問があると思いますが、よろしくお願い致します。

Re: C.Basicでの区切り文字拡張機能

管理人様、こんにちは!

>さっそく、sentaro様のコメントの後で、宣伝コメントをポストしておきました(^^;

またまたありがとうございます!(^^)


>Office365サブスクリプションユーザーが使えるOneDrive容量が15GBから5GBに減らされますが、申し込んだ人だけへのボーナス(救済策)があり、アメリカ時間で1/31中が期限です。

OneDriveは使ってないのですが、減らすというのはちょっと残念なところですよね(^^;



>区切り文字 ":" は、Locate, Text、グラフィックスコマンドの後ろに付けると、LCD更新を抑制しますが、以下についてはどうでしょうか?

LocateYXはグラフィック系コマンドなのでLCD抑制が効くのですが、””と「◢ 」は効かないことになっています。
というところなのですが、
「◢ 」は一時停止なので更新抑制の意味は無いのですが、””は連続表示でLCD更新抑制が出来ても困らないので次回バージョンで抑制ありに変更しておきます(^^)


>そろそろコマンドリファレンスを整理して書き始めていますもので、今後も色々と質問があると思いますが、よろしくお願い致します。

初期の想定以上に機能が増えてきたのでコマンド仕様をしっかり整理していかないと分けわからなくなりそうです(^^;
こちらこそよろしくお願いいたします(^^)

Re: Re: C.Basicでの区切り文字拡張機能

sentaro様

> >区切り文字 ":" は、Locate, Text、グラフィックスコマンドの後ろに付けると、LCD更新を抑制しますが、以下についてはどうでしょうか?
>
> LocateYXはグラフィック系コマンドなのでLCD抑制が効くのですが、””と「◢ 」は効かないことになっています。
> というところなのですが、
> 「◢ 」は一時停止なので更新抑制の意味は無いのですが、””は連続表示でLCD更新抑制が出来ても困らないので次回バージョンで抑制ありに変更しておきます(^^)

ありがとうございます。

ところで、前から当ブログに来られる方が好きな機種な何か?に興味があったのですが、投票してもらうエントリーをアップしました。結果が楽しみです。

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



>
>
> >そろそろコマンドリファレンスを整理して書き始めていますもので、今後も色々と質問があると思いますが、よろしくお願い致します。
>
> 初期の想定以上に機能が増えてきたのでコマンド仕様をしっかり整理していかないと分けわからなくなりそうです(^^;
> こちらこそよろしくお願いいたします(^^)

アドイン版 C.Basic ver.0.98 テスト版 その9.8(文字列コマンド+Textキャラ追加版)

管理人様、ガノー様、こんにちは!

文字列関数でちょっとバタバタしてしまいましたけど、純正OS2.0相当の文字列機能がやっとこ動くようになったのでver.0.98アップです。
文字列関連ということでTextでのカナ文字表示+αも対応しました。
ミニフォントは暫定なので今後修正される可能性もあります(^^;
例によって致命的なバグが残っている可能性が大なのでしばらくの間は要注意バージョンです(^^;


>ところで、前から当ブログに来られる方が好きな機種な何か?に興味があったのですが、投票してもらうエントリーをアップしました。結果が楽しみです。
http://egadget.blog.fc2.com/blog-entry-506.html

これはナイスな企画ですね(^^)
早速に投票してきました。
2機種目3機種目を投票しようと思ったら7日に1票ってことなので…また来週に(^^;



アドイン版 C.Basic ver.0.98 テスト版 その9.8(文字列コマンド+Textキャラ追加版)
http://pm.matrix.jp/CB/CBASIC098.zip

・カナ文字+記号文字のtextコマンド表示に対応しました。

・Mat行列の文字列扱いで&に加えて$も使用できるようになりました。
(例)$Mat A[1] &Mat A[2]

・CasioBasic互換の文字列関数として、
+ 文字列同士の連結
StrJoin(
StrLen
StrCmp(
StrSrc(
StrLeft(
StrRight(
StrMid(
Exp(
StrUpr(
StrDwr(
StrInv(
StrShift(
StrRotate(
Str 1-20
 を追加しました。
 純正仕様とほぼ互換ですが若干の差異があります。
 Str 1-20はMat行列のs(小文字)を暗黙的に使用します。
 Str文字列の初期化は何も指定なければ次のようにMat s行列の初期化が自動的に行われます。
 {20,65}→Dim Mat s
 ということで、
 Str 3は$Mat s[3]または&Mat s[3]と同義となります。
 Str文字列はデフォルトで20まで、格納可能文字列数は1バイト文字で64文字までとなりますが、
 事前に
 {30,256}→Dim Mat s
 というような初期化をしておけばStr文字列は1-30まで使え、格納可能文字列は255文字までとなります。

 fx-9860GIIで使われる文字は1バイト文字と2バイト文字があり、
 一部の関数と記号、特殊文字、カナ文字が2バイト文字となりますので、
 内部では1バイトと2バイト文字が混在する状態となりますが、文字関数での扱いは純正同様にすべて1文字扱いとなります。
 文字列が格納された行列に直接アクセスする場合は文字の位置に注意して下さい。

・Exp(は以前のEval(と同じなのでEval(を削除しました。

・追加の文字列関数としてC言語仕様のSprintf(を追加しました。
(仕様)Sprintf( "書式指定子" , 引数1[ ,引数2 , 引数3])
(例)Sprintf("A=%4d B=%3.2f",%A,#B)→Str 1
  A=1234,B=45.678の場合、
 Str 1に代入される文字列は
 "A=1234 B=45.68"
 となります。
 書式指定はC言語でのsprintfと互換というかそのままC言語仕様となります。
引数は3つまで指定することが出来、整数/実数/文字列が指定可能です。
 %プリフィックスで整数指定、#プリフィックスで実数指定となります。
プリフィックスを省略した場合はその時点での実行モード(実数/整数)となります。
書式指定と引数の対応のエラーチェックは無いので、Sprintf(コマンドでエラーが起きた場合はリセットか再起動となる可能性があります。

Re: アドイン版 C.Basic ver.0.98 テスト版 その9.8(文字列コマンド+Textキャラ追加版)

sentaro様

バージョンアップ、お疲れ様です。

純正文字列コマンドについては、私が全く興味を持たないため、完全放置となっておりました。
今思えば、fx-5800P のCasio Basicを速く動作させるための fx-9860GII という感覚が強くあったのだろうと思います。

しかし、C.Basic の登場により fx-9860GII の重要性が増してきました。その際、軽く速く動くこと、また上記の拡張により、使ってみようという気になりそうです。


Sprintf( は面白い試みだと思います。このコマンドのオーバーヘッドは、少ないのでしょうか?
以前Cで書いていた時は、sprintf() と同じくらい puts() を使っていました。Cではputs()の方がオーバーヘッドが少なかったのが理由です。

そんなことから、この上記の質問なんです。C.Basicではどんな感じでしょうか?


Sprintf( ですが、デフォルトで Mat s 利用とのことですが、引数指定か '#に続く宣言などを利用して、任意の行列変数名を指定できるようにするのは、骨が折れて、実行速度に影響がありそうでしょうか?
但し、Puts() はエラーの心配が少なくできそうで、利点があるのかも?とは思います。

私個人的には、あまり機能を詰め込みすぎて、動作が重くなったりするのはどうかな...といった感覚なもので、一応伺いたいと思います。



> >ところで、前から当ブログに来られる方が好きな機種な何か?に興味があったのですが、投票してもらうエントリーをアップしました。結果が楽しみです。
> >http://egadget.blog.fc2.com/blog-entry-506.html
>
> これはナイスな企画ですね(^^)
> 早速に投票してきました。
> 2機種目3機種目を投票しようと思ったら7日に1票ってことなので…また来週に(^^;

ありがとうございます。
先月、当ブログの累計ページビューが10万を超え、リピーター率が相変わらず70%を超えております。
初めてお越しになる方のユニークアクセス数の累計は、おそらく今月中に3万を超えそうです。
いずれもほぼ一定ペースで増えていて、ありがたい限りです。

つまり、少ないながらも一定数のプロ電ファンが等ブログにお越しになっていることから、プロ電に興味のある母集団が目の前にあるわけで、前々から気になっていました。

じっくり時間をかければ、何か面白い傾向が見えるかも知れませんね。
投票内容を、色々と増やしてみるのも面白いかも知れません。

致命的バグでver.0.98差し替えです(^^;

管理人様、こんにちは!

>純正文字列コマンドについては、私が全く興味を持たないため、完全放置となっておりました。

普段使いのプログラムではfx-5800P相当のコマンド群で事足りていたというのもあって、実は私もほぼ100%といっていいほど使ってなかったです(^^;


>Sprintf( は面白い試みだと思います。このコマンドのオーバーヘッドは、少ないのでしょうか?
>以前Cで書いていた時は、sprintf() と同じくらい puts() を使っていました。Cではputs()の方がオーバーヘッドが少なかったのが理由です。
>そんなことから、この上記の質問なんです。C.Basicではどんな感じでしょうか?

puts()に相当するのは今までの””やLocateコマンドやTextコマンドということになるかと思いますので、今回のSprintfに関しては書式指定ありの出力対応という感じですね。
右寄せとか左寄せとか桁数指定とか16進数出力とかが簡単に出来るので便利かなというところです(^^)
オーバーヘッドに関してはインタプリタでの書式指定のエラーチェックを省いてそのままCのランタイムライブラリに直渡しなので、アドイン同等の速度が出てると思います。
ただ、エラーチェックが無いので、書式指定や引数でエラーが起きると予期せぬ動作となります(^^;
エラーチェックをきっちり入れれば安全なコマンドとなるのでいずれはそうしないといけないですけど、現状、Cで使うのと同じでシステムリセットと裏腹の緊張感のあるコマンドとなっております(^^;


>Sprintf( ですが、デフォルトで Mat s 利用とのことですが、引数指定か '#に続く宣言などを利用して、任意の行列変数名を指定できるようにするのは、骨が折れて、実行速度に影響がありそうでしょうか?

デフォルトでMat s が使われるのはCasioBasic互換のStr変数を使うときなので、Sprintf( では任意のMat行列が使えます(^^)

Str変数でs以外の任意Mat行列を使うようにしてもオーバーヘッドはほぼゼロなので、次回バージョンアップで任意指定できるようにしてみます(^^)


今回の文字列拡張では””が使えるところで””の代わりに任意のMat行列やStr変数や文字列関数が使えるという形ですね。

Mat A行列をバイト行列で初期化して文字列を代入後、Locateコマンドで文字列関数を使って表示という例です。
{1,8}→Dim Mat A.B
”ABCDEFG”→$Mat A
Locate 1,1,StrMid($Mat A,3,3)

Locate 1,1,”CDE”
と同じ結果になります。


>私個人的には、あまり機能を詰め込みすぎて、動作が重くなったりするのはどうかな...といった感覚なもので、一応伺いたいと思います。

文字列機能の追加での速度差は数%の誤差の範囲に収まっていると思いますので、純正CasioBasicでOS2.0になった時のような速度半分とかいうことにはなってないのでだいじょうぶです(^^;



>ありがとうございます。
>先月、当ブログの累計ページビューが10万を超え、リピーター率が相変わらず70%を超えております。
>初めてお越しになる方のユニークアクセス数の累計は、おそらく今月中に3万を超えそうです。
>いずれもほぼ一定ペースで増えていて、ありがたい限りです。

お!10万超え!!おめでとうございます!!
ユニークアクセス3万超えもかなりすごい数字ですよね(^^)


>投票内容を、色々と増やしてみるのも面白いかも知れません。

投票は簡単に参加出来るのでお題目が増えるは楽しみです(^^)

お久しぶりです

■TO:管理者様、sentaro様

お久しぶりです。Sprintf対応、神がかっていますね!
例によってまだ試しておりません(^^;)

fx72→5800p→9860gii→9860gii+C.Basic

と文字列周りの機能が着実に強化されていて面白いです。
C.Basicの欠点として「文字列操作関数」があったのですが、完全になくなりました。
文字列関係が強化された今、一番ゲームを作りやすい環境だと思います。
Sprintfの有り難みは、やっぱり桁調整ができるために視認性が確保できること。
業務用のアプリも見やすく作れそうです。

特殊文字のミニフォント搭載も嬉しいです。

■TO:sentaro様

更に要望を出させて下さいm(_ _)m

●ステップ実行が欲しい

AC/ACBreak時に、Contだけでなく、「Cont同様に次のコマンドを実行し、即座にACBreakが発生する機能=ステップ実行」が欲しいです。
これがつくと既存のIDE同等になるかな、と思います。

(あ、ステップアウトとか、ステップスルーは要らないです^^;)

よろしくご検討下さい!

■TO:管理者様

10万PVすごいですね! 以前私もオリジナルソフトを開発&製品レビューなどで
3万PVまでいったのですが、gooブログ解約→fc2移行に失敗して辞めてしまいました。

移動失敗した残骸を見たら、まだ残っていました(笑)
http://crewofgarnot.blog.fc2.com/blog-entry-7.html
(gooブログは有料のくせに移行機能が適当で使い物にならなかったです・・・)

10万PVの継続力に脱帽です。今後もPVを上げに来ます!

とりあえずの「まぁ安定」バージョン、どれにしましょうか?

sentaro様


> 右寄せとか左寄せとか桁数指定とか16進数出力とかが簡単に出来るので便利かなというところです(^^)
> オーバーヘッドに関してはインタプリタでの書式指定のエラーチェックを省いてそのままCのランタイムライブラリに直渡しなので、アドイン同等の速度が出てると思います。
> ただ、エラーチェックが無いので、書式指定や引数でエラーが起きると予期せぬ動作となります(^^;
> エラーチェックをきっちり入れれば安全なコマンドとなるのでいずれはそうしないといけないですけど、現状、Cで使うのと同じでシステムリセットと裏腹の緊張感のあるコマンドとなっております(^^;

「緊張感のあるコマンド」というのが、チョトツボです(^_^)/
コマンドリファレンスにも、使わせてもらおうかと...

Sprintf( で、行列(=2次元配列)からの参照渡しができるとなれば、Cと同じ感覚でメニュープログラムが楽に作れますね。


> Str変数でs以外の任意Mat行列を使うようにしてもオーバーヘッドはほぼゼロなので、次回バージョンアップで任意指定できるようにしてみます(^^)

ありがとうございます。


> 文字列機能の追加での速度差は数%の誤差の範囲に収まっていると思いますので、純正CasioBasicでOS2.0になった時のような速度半分とかいうことにはなってないのでだいじょうぶです(^^;

緊張感の効用ですね(^^;


> お!10万超え!!おめでとうございます!!
> ユニークアクセス3万超えもかなりすごい数字ですよね(^^)

ありがとうございます。

沈みこんでいた最近でも、そんなの関係ない感じです。
というのも、Casio Basic入門講座へのアクセス増加が後押ししてくれているようで、今でもチョコチョコと表現を修正したりしていたりします...もう面倒なので修正履歴の表示を止めてしまっていますが...

あと、C.Basic関連への参照が少しづつ増えてきています。うれしいですよね。
ガノー様のサンプルプログラムの効果だと、私は思っています。
3D迷路がライフゲームを抜きました。


ガノー様;
で...Yokolith / Yokolith95 / Yokolith95最終版 ですが、どの時点でどのバージョンを紹介記事に掲載すれば良いのか?
アドバイス頂ければ助かります。前提となる C.Basicのバージョンについても合わせて、教えてください。


senaro様;
で、C.Basicですが、当方最近ソースを触ったりする暇がなくて、自分で確かめれば良いのですが、sentaro様に伺いたいのは、とりあえず最新バージョンとして紹介するには、どれが適当でしょうか?


Re: お久しぶりです

ガノー様

> お久しぶりです。Sprintf対応、神がかっていますね!
> 例によってまだ試しておりません(^^;)

成形出力機能が新しいですよね。
書式のエラーチェックをしていないリスクのかわりに高速化を維持、「緊張感のあるコマンド」というのが、個人的にはハマっています(^^;



> fx72→5800p→9860gii→9860gii+C.Basic

5800Pまでは文字列処理機能が無いので、5800PからCasio Basicを使い出した私には 9860GII の文字列処理は殆ど使ったことがありません。

C.Basicの実装のおかげで、チョト使ってみようと思えるよになりました!

確かにゲーム作りには書式指定と成形機能は必須ですよね。


> 文字列関係が強化された今、一番ゲームを作りやすい環境だと思います。

C.Basicでゲームを作ろう....なんて本が作れるかも知れませんね!


> Sprintfの有り難みは、やっぱり桁調整ができるために視認性が確保できること。
> 業務用のアプリも見やすく作れそうです。

ここ、私としてはとても興味のあるところで、いくつか作ってみたいプログラムが既にあります。


Step デバッグ機能は、コンパイラ版実装時には特に重要になりそうですね。

私からもお願い致します>sentaro様

私からの提案なのですが、互換性を重視して、[AC] Breakはそのまま残して、例えば [SHIFT] [AC] (同時押しか連続押しかはどちられも良いかも...)で、その時には現在の実行コマンドにカーソルを移動したエディット画面に戻る、というのでは、如何でしょうか?

Progで呼び出すサブルーチンを全てメモリ上へ読み込む仕様が無くなった今ですが、ステップデバッグ中はサブルーチンへは飛んで欲しいな、と思うのですが如何でしょうか?


> 10万PVすごいですね! 以前私もオリジナルソフトを開発&製品レビューなどで
> 3万PVまでいったのですが、gooブログ解約→fc2移行に失敗して辞めてしまいました。

ありがとうございます。

自分の実力と能力の限界には挑戦せず(背伸びせず)、のんびりとやれる範囲でボチボチやっているので、途中途切れそうになりつつも続いているのだと思います。


> 移動失敗した残骸を見たら、まだ残っていました(笑)
> http://crewofgarnot.blog.fc2.com/blog-entry-7.html

コレ、既に探し当てていました(^^;


> 今後もPVを上げに来ます!

ガノー様ご提供のコンテンツが強力なので、それは大きなパワーになると思います。
本当にありがとうございます。
これからも、よろしくお願い致します。


アドイン版 C.Basic ver.0.99 テスト版 その9.9(ステップ実行追加版)

管理人様、ガノー様、こんにちは!

>と文字列周りの機能が着実に強化されていて面白いです。
>C.Basicの欠点として「文字列操作関数」があったのですが、完全になくなりました。
>文字列関係が強化された今、一番ゲームを作りやすい環境だと思います。
>Sprintfの有り難みは、やっぱり桁調整ができるために視認性が確保できること。
>業務用のアプリも見やすく作れそうです。

ありがとうございます!
文字列関数完備で一人前のBasicっぽくなってきました(^^)
純正CasioBasicは数値から文字列への変換コマンドが無いという若干クセのある仕様なので、どうせならということでSprintfを追加してみたのですけど、使い勝手の向上に繋がると嬉しいですね。


>●ステップ実行が欲しい

了解しました。
ステップ機能はコンティニュー機能が付いた時に簡単に付けられたのでその時に付けておくべきでした。
ということで、ステップ機能を追加してみました。
途中中断からだけでなく、デバッグ機能としてファイルメニューからステップ前提のエディタ起動が出来るようにしてみました(^^)


>私からの提案なのですが、互換性を重視して、[AC] Breakはそのまま残して、例えば [SHIFT] [AC] (同時押しか連続押しかはどちられも良いかも...)で、その時には現在の実行コマンドにカーソルを移動したエディット画面に戻る、というのでは、如何でしょうか?

[SHIFT] [AC]はちょっと難しいので、ステップ実行でいちいちポップアップを出さずにエディタ上でカーソルが次々と移動していくという形を採用させていただきました(^^)


>Progで呼び出すサブルーチンを全てメモリ上へ読み込む仕様が無くなった今ですが、ステップデバッグ中はサブルーチンへは飛んで欲しいな、と思うのですが如何でしょうか?

今のところ、プログラム実行開始時に全プログラムを一気に読み込む仕様なのでデバッグ時はすべてオンメモリという形です。
ので、サブルーチンでもステップ実行できます(^^)


>「緊張感のあるコマンド」というのが、チョトツボです(^_^)/
>コマンドリファレンスにも、使わせてもらおうかと...

エラーチェックは結構なオーバーヘッドになりそうなのでこのまま緊張感状態が続くかもしれません(^^;
ので、ぜひぜひコマンドリファレンスでも使ってくださいませ(^^)


>で、C.Basicですが、当方最近ソースを触ったりする暇がなくて、自分で確かめれば良いのですが、sentaro様に伺いたいのは、とりあえず最新バージョンとして紹介するには、どれが適当でしょうか?

文字列機能が加わった0.98以降でも、0.97まで相当の機能で使うには致命的なバグは無さそうなので最新版で構わないかなと思います。
今回の0.99でのステップ機能はかなり便利だと思うので最新版0.99でお願いします(^^)
致命的なバグがあったらサクッと差し替えますので…(^^;



アドイン版 C.Basic ver.0.99 テスト版 その9.9(ステップ実行追加版)
http://pm.matrix.jp/CB/CBASIC099.zip

・プログラムをステップ実行するデバッグモードを追加しました。
 ファイルモードの[SHIFT]+[F6]でデバッグモードに入ります。
 [AC]での一時中断もしくはACBreakコマンドで中断した後もデバッグモードになります。
 [F1]:プログラムを再開します。従来のContと同じです。
 [F2]:ステップ実行となります。ステップ実行後、即エディタ画面に戻ります。
 [F6]:プログラム中断前の画面(グラフィック/テキスト)を表示します。
グラフィック画面とテキスト画面の切替は[SHIFT]+[F6]です。

・Str文字変数の実体となるMat行列を任意指定できるようになりました。
 Str変数を使う前にコメント欄での記述となります。
(例)'#Str A
 Str変数をMat Aとして確保します。
 {20,65}→Dim Mat A.B
 と同じです。
(例)'#Str B,30,256
 Str変数をMat Bとして30個、255文字まで可能な変数として確保します。

・1/128sのタイマー変数として%に加えてTicksを追加しました。機能的には全く同じです。

YOKOLITHの件+追加要望

■TO:管理人様

こんにちは。YOKOLITHの件です。整理させていただきます(^^;

●バージョン
YOKOLITH 95とYOKOLITH 95最終版共々、0.95a以降で動作します。

●YOKOLITH95とYOKOLITH95最終版の違い
2つの違いについては、以下のようになっています。

YOKOLITH 95=いろいろな改造余地のあるサンプル(初代のテトリスに近い)
YOKOLITH 95最終版=色々改造された結果が分かるサンプル(近年のテトリスに近い)

●どちらを記事に??

どちらを記事に使うかは管理人様の意図で選んでいただければ幸いです。
…読者に改造してもらう意味で「95」、fx9860gii+C.Basicの力を魅せつける意味で95最終版、でしょうか?
…そう考えると、95の方を説明(インデントができる、ファイル入出力ができる、ローカル変数が使えるといったところを紹介)し、改造例として95最終版はリンクのみ記載というのが良いようにも思えます。


●ダウンロードリンク
YOKOLITH 95
https://dl.dropboxusercontent.com/u/93225197/fx9860gii/YOKOLITH95/YOKOLITH95.zip

YOKOLITH 95最終版
https://dl.dropboxusercontent.com/u/93225197/fx9860gii/YOKOLITH95_20160130/YOKOLITH95_20160130.zip


■TO:管理人様、sentaro様
>エラーチェックは結構なオーバーヘッドになりそうなのでこのまま緊張感状態が続くかもしれません(^^;

汎用機のように巨大規模なのにエラーチェック(/フールプルーフ)も無いものに比べると、9860GII+C.Basicはリセットポンで復旧してくれるので、私はそこまで緊張感は持っていません(笑)

■TO:sentaro様

また、追加要望を致します。

・Getkey3を定義して頂けませんか?

YOKOLITHでは時間待ちループ処理中にGetkeyを使ったフレーム制御を行っていますが、この仕組では「SHIFT+バックライト、SHIFT+AC」といった基本的な電卓操作が行えません。
しかし、Getkey2でキー入力待ちをすると、これらを特に意識すること無く使うことができます。そこで、時間制御機能付きGetkey2のような、Getkey3を定義しては頂けませんか?(Linux+BashのReadコマンドがこの提案と似ています)

※ウェイト間隔=整数で1/128sec精度指定

①Getkey3(int)
 Getkey3(128) '一秒待つ。
 ※ 実装的には暗黙的に開始カウンタとして呼び出し時の%の値が使用される

②Getkey3(int, int)
 %→E
 ' ~いろんな処理~
 Getkey3(128,E)' 第二引数で指定した開始カウンタから1秒待つ。


また、Getkey待ちのループよりも電力消費量が減らせるのではないかと思います。

以上、よろしくご検討下さい!

readmeの英訳(1)

C.Basicのマニュアルやコマンドリファレンスの整備は、機能拡張のスピードに追いつくのに時間がかかりそうなので、とりあえずそれなりのスキルのある人が試してみるには、最低限 readme が英語になっていれば良いかも知れません。

そこで、マニュアルとreadmeの英語化を先に進めようかと思い、とりあえず readmeから手を付けています。

頭から順にやってみていますが、冒頭から免責事項までの部分をやってみました。免責事項については、sentaro様のあっさりとした1文に加えて、ある程度一般的な書式を追加してみました。

=========================================================
Add-In Casio Basic Interpreter (& Compiler) Ver. 0.9x beta version

copyright(c)2015 by sentaro21
e-mail sentaro21@pm.matrix.jp
=========================================================

C:Basic is Add-In version of Casio Basic interpreter and compiler which works on Casio fx-9860GII. Currently beta version of only interpreter is released, but not compiler version, so we call it currently C.Basic (single dot). In future compiler version (C:Basic) will be release.

Featuer of C.Basic:

- C.Basic is compatible of original Casio Basic (included in OS 2.04 of fx-9860GII)
・It runs faster than original Casio Basic in factor of 10 or more.
・Development environment is almost same as original Casio Basic, so you can use it with almost same operation.

- Source file of C.Basic should be on storage memory, not on main memory.
・Original Casio Basic’s source file is on main memory.
・C.Baisc supports sub-folder.

- C.Basic has development environment to create new source files and edit files.

- C.Basic is upper compatible of original Casio Basic.
・C.Basic provides expanded functions to some original Casio Basic commands.
・C.Basic provides new Basic commands.
・C.Basic provides more easy to use development environment.
 

Note:

- C.Basic is not 100% Casio Basic compatible, could not 100% support all commands.

- Numerical operation is internally carried out by double precision of binary operation by C language, so accuracy and error of the operation is deferent from original Casio Basic.

- PICT is saved in storage memory (not in main memory), so the operation seed would be slower then original Casio Basic.

- Because of beta version, current release of C.Basic would have bugs. It would be appreciated if you cold report back found bugs.


======= CAUTION !!! ========
We do not believe that your calculator would be damaged by using C.Basic/C:Basic, but there still be possibility that data in main memory would be unexpectedly destroyed and/or ‘memory all reset’ may be required. It’s strongly recommended that you should make backup of data in main and storage memory before using C.Basic/C:Basic. Use of C.Basic/C:Basic is at user’s sole risk.
=========================

======= Disclaimer of Warranty =======
Use of C.Basic/C:Basic is at user’s sole risk. All materials, information, products, software, programs and service provided “as is”, with no warranties or guarantees whatsoever. Creator of C.Basic/C:Basic and support team (hereafter DEVELOPMENT TEAM) who provide support documents, information and sample programs expressly disclaim to the fullest extent permitted by law all express, implied, statutory, and other warranties, guarantees, or representations, including, without limitation, the warranties of merchantability, fitness for a particular purpose, and non-infringement of proprietary and intellectual property rights. Without limitation, DEVELOPMENT TEAM makes no warranty or guarantee that development of SOFTWARE will be uninterrupted, timely, secure, or error-free.
=====================================

追加部分「Disclaimer of Warranty」の和訳

===保証の否認===
C.Basic/C;Basicの使用は、ユーザーご自身の責任でなされるものとします。すべての資料、情報、製品、ソフトウェア、プログラムおよびサービスは現状のまま提供され、いかなる保証も適用されません。C.Basic/C:Basicの作者ならびにサポートドキュメント、情報、サンプルプログラムを提供するサポートチーム(以下開発チームと言う)は、適用される法律の許す限りにおいて、法律上の瑕疵担保責任、商品性の保証、特定目的への適合性の保証、権利の不侵害の保証を含むいかなる明示もしくは黙示の保証責任も一切負いません。また開発チームは、C.Basic/C:Basicの開発が中断しないこと、即時性、安全性、もしくは誤りがないことを保証しません。
==============

sentaro様が書かれた情報、私やサポーターが作ったサンプルプログラムや色々な説明、コマンドリファレンス、マニュアルなどに関する免責事項も上に含めさせてもらうという案です。



ところで、ここまで英訳してみていくつか質問が出てきました。

Q1) fx-9860G への適用性
9860GII (SH3) と 9860GII-2 (SH4A) に適用できるので、9860G (SH3) もOKだと思っていたのですが、念のため確認させてください。

Q2) 新規Basicファイル作成とBasicファイル編集
これは、今は問題なくできるということで良いですか?
日本語原文では、限定的に可能と書かれていますので...

Q3) PICT がストレージを使うから遅い
今は、メインメモリ使用に変わっている...ような感じでいましたが、現行どうなっていますか?


すみません、じっくりコメントを拾い集めれば良いのですが、横着させてください。

Readme_J.txt について

sentaro様

Ver 0.99 をダウンロードして使ってみています。

デバッグ機能は、売りの1つになりそうですね。とてもありがたいです。
ところで、もし贅沢が許されるのなら「指定した行まで実行してストップ」の機能があれば、IDEのデバッグ機能と遜色なくなると思います。Step In や Step Out はインタープリタでは不要でしょうが、サブルーチンを一気に実行させたい時などには「指定した行まで実行してストップ」が役立ちそうです。

それはさておき、英訳のために 最新バージョン(Ver 0.99)の readme_J.txt を見ますと、いくつか実情に合わなくなっている部分や抜けがあったりするので、修正版を作ってみました。それに合わせて、ちょっと説明の追加もしてみました。

・Verが 0.98a になっているので、0.99 に修正
・キー操作をカシオのマニュアル準拠に変更
 例えば、[SETUP] は [SHIFT][VARS] (SETUP) といった感じ。[SHIFT]に続いて[F1]~[F6]の説明については、
改行して[F1]~[F6]を書く前の "-" は削除、など。
・メイン画面 を ファイルリスト画面 に変更
・ファイルリスト画面で [OPTN] の説明を追加
・ファイルリスト画面で、[SHIFT][F4]と [SHIFT][F5] は削除
・ファイルリスト画面で、[SHIFT][F6] (Debg) の説明を追加

で、以下のようにしてみました。これをベースに英訳を進めようと思います。

更新履歴の個々については、まだ詳細に見ていませんので、その部分は省略して、前半部分のみ以下に掲載します。

これで、大きな問題があればご指摘ください。細かい部分は面倒なので任せてください。


===============================================================================

アドイン版 Casio Basic Interpreter (& Compiler) ver 0.99 テスト版

copyright(c)2015 by sentaro21
e-mail sentaro21@pm.matrix.jp


===============================================================================

Casio Basic インタプリタのアドイン版、略してC:Baisc(現状インタプリタのみなのでC.Basic)のとりあえず動く版です。
将来的にはコンパイラが追加される予定です。

・特徴
 純正Casio Basic互換(を目指しています)。
 純正Casio Basicよりも高速動作(10倍以上)。
 操作方法はほぼCasio Basic準拠。
 ソースファイルはメインメモリではなくストレージメモリに置かれます。(サブフォルダ対応です)
 制限付ながらBasicファイルの新規作成、編集が可能です。

・欠点
 純正Casio Basicのサブセットです。全部の命令が使えません。というか今のところは一部の基本的な命令のみのサポートです。
 数値演算はCの倍精度2進演算により精度&誤差が若干違います。
 PICTがストレージメモリに保存されますので若干遅いです。
 たぶん…間違いなくバグありです(^^;…ので、バグ報告よろしくお願いします。


========================== 注意!!! ============================================
このツールの使用によって電卓が破壊される可能性はまず無いと思いますが、
予期せぬバグ等でメインメモリが破壊されオールリセットになる可能性はあります。
このツールの使用はメインメモリ&ストレージメモリのバックアップをとった上でお願いいたします。
作者はこのツールの使用の結果においていかなる責任も負わないものとさせていただきます。
===============================================================================


-------------------------------------------------------------------------------
起動すると、ファイルリスト画面になります。

アドイン実行前にBasicソースをメインメモリからストレージメモリにコピーするか、
FA-124にてプログラムファイル(sample.g1m等)をストレージメモリにコピーしておくと、
起動時にプログラム選択ができます。
(単一ファイルに限ります。複数ソースファイルをまとめたファイルは未対応です。)

[F3] (NEW) を選択すると、新規プログラムの作成モードに入れます。


-------------------------------------------------------------------------------
使用方法
-------------------------------------------------------------------------------
ファイルリスト画面(CasioBasic準拠っぽく…ちょっと違っています)
-------------------------------------------------------------------------------
-[UP] 一つ前のファイルを選択します。
-[DOWN] 一つ後のファイルを選択します。
(ファイル選択画面ではA-Zのキーを押すとそれを先頭とするファイルにジャンプします。fx-5800P準拠です)

-[F1] (EXE) 選択ファイルを実行します。
-[F2] (EDIT) 選択ファイルを編集します。
-[F3] (NEW) 新規ファイルを作成します。
-[F4] (COPY) ファイルをコピーします。
-[F5] (DEL) 選択ファイルを削除します。
-[F6] 次のメニューに移動します。
  [F1] (Text) 選択されたBasicソースファイルをテキストファイルへ変換します。
  [F2] (REN) ファイル名を変更します。
  [F3] (Fav.) 選択ファイルをお気に入りに追加、解除します。
  [F4] (Fv.↑) お気に入りを一つ上に移動します。
  [F5] (Fv.↓) お気に入りを一つ下に移動します。
  [F6] 前のメニューに移動します。

-[SHIFT]
  [F1] (Var) 変数画面
  [F2] (Mat) Mat変数画面
  [F3] (V-W) ViewWindow表示
  [F6] (Debg) デバッグモードで実行

-[VARS] 変数画面
  [F1] (A<>a) 大文字変数と小文字変数の表示切替え
  [F2] (Int) 表示変数の一括初期化
  [F3] (D<>I) 整数変数と実数変数の表示切替え

-[SHIFT][VARS] (SETUP) 初期設定

-[OPTN] 選択ファイルをお気に入りに追加、解除します。


-------------------------------------------------------------------------------
編集画面(CasioBasic準拠っぽく…ちょっと違っています)
-------------------------------------------------------------------------------
-[F1] (TOP) ファイル先頭にジャンプします。
-[F2] (BTM) ファイル末尾にジャンプします。
-[F3] (CMD) コマンド選択画面(fx-5800P準拠)(ここで選択できるコマンドがサポートされています)
-[F4] (A<>a) 大文字小文字切り替え
-[F5] (CHAR) キャラクタ選択画面
-[F6] (EXE) プログラムを実行します。一時停止状態であれば再開します。

-[SHIFT]
  [F1] (Var) 変数画面
  [F2] (Mat) Mat変数画面
  [F3] (V-W) ViewWindow表示
  [F4] (Dump)/(List) Basicリスト表示/16進ダンプ表示切替
  [F5] (SRC) 文字列サーチモードに入ります。
  [F6] (G<>T) グラフィックス画面とテキスト画面の切り替え

-[OPTN] OPTN対応コマンド入力画面(ここで選択できるコマンドがサポートされています)

-[VARS] VARS対応コマンド入力画面(ここで選択できるコマンドがサポートされています)

-「SHIFT][VARS] (PRGM) PRGM対応コマンド入力画面(ここで選択できるコマンドがサポートされています)

-[SHIFT][MENU] (SETUP) 各種設定

-[EXIT] ファイル画面に戻ります。


-------------------------------------------------------------------------------
プログラム実行時(ほぼCasioBasic準拠…です)
-------------------------------------------------------------------------------
-[AC] プログラム実行を中止します。

-[SHIFT]
  [F1] 変数画面
  [F2] Mat変数画面
  [F3] ViewWindow表示
  [F6] グラフィックス画面とテキスト画面の切り替え


-------------------------------------------------------------------------------
CasioBasicとの相違点
-------------------------------------------------------------------------------
基本的には全く同じ動作になるように作成されていますが、まだ不完全です。

・?コマンドの入力部分は1ラインのみで横スクロールします。(inp.c準拠です)
・fx-5800にある?A形式を試験的にサポートしています。
・描画コマンドの直後が':'だと画面書換え更新をしません。(グラフィック命令、Locate,Text等)
・プログラム終了時に実行時間を表示することができます。(セットアップで設定)

-------------------------------------------------------------------------------
謝辞
-------------------------------------------------------------------------------

プログラム内部仕様&情報は
SuperH-based fx calculators (version 20)
を参考にさせていただいています。(一部引用)

このツールのファイル操作部分は、
http://community.casiocalc.org/topic/6836-wsc-fvm-v12-casio-fx-9860-series-on-calc-c-compiler/
Wsc & Fvm V1.2 - Casio Fx-9860 Series On-calc C Compiler
を参考にさせていただいています。(一部引用)

カナフォントはこちらのサイトよりカナフォントデータおよび表示ルーチンを引用させていただいています。
http://baticadila.dip.jp/fx_sdk_005.html


プログラム実行時の細かい動作に関しては、
やす(Krtyski)様の
e-Gadget - プログラム関数電卓
プログラム電卓の濃い話: 今は fx-5800P / fx-9860GII と Casio Basicプログラミングが中心
http://egadget.blog.fc2.com/
を参考にさせていただいています。

いつもありがとうございます。
これからもよろしくお願いいたします。


-------------------------------------------------------------------------------
ライセンス
-------------------------------------------------------------------------------
このソフトウエアはフリーソフトウエアです。
ライセンスはGPLv2に準じます。


===========================================================================

Readme_J.txt の質問

sentaro様


readme_J.txt の以下のパラグラフで、

(単一ファイルに限ります。複数ソースファイルをまとめたファイルは未対応です。)

とありますが、FA-124を使えば、複数ファイルをまとめてコピーできますよね?
すると上記の記述は不要になりませんか?


-------------------------------------------------------------------------------
起動すると、ファイルリスト画面になります。

アドイン実行前にBasicソースをメインメモリからストレージメモリにコピーするか、
FA-124にてプログラムファイル(sample.g1m等)をストレージメモリにコピーしておくと、
起動時にプログラム選択ができます。
(単一ファイルに限ります。複数ソースファイルをまとめたファイルは未対応です。)

[F3] (NEW) を選択すると、新規プログラムの作成モードに入れます。
-------------------------------------------------------------------------------

それから、編集画面で

-[F6] (EXE) プログラムを実行します。一時停止状態であれば再開します。

の説明で、「一時停止状態であれば再開します。」はどのような状況を指しますか?


readmeの英訳(2)

sentaro様

とりあえず、質問部分は日本語のままとして、改訂履歴の前までは英訳しました。
英訳の際に、日本語について改めて考えた方が良いかな?と思われる部分は、日本語と英語の両方を同じように変更してみています。

残る「改訂履歴」は、逆に古い方から順に英訳してみることにします。

こういう作業を行うと、忘れていたことや気付いていなかったことが改めて意識に上るので、仕様を理解するのにとても役立ちますよね!

私の理解が、最新バージョンの仕様に大分追いついてきた感じがしています。

なお、URLについては、FC2 が参照URLが多すぎると文句を言ってくるので、
URLの頭を2バイト文字の http に置き換えていますので、ご留意ください。

また、英文のインデントには、本来はタブにしていますが、ここではタブは無視されるので、全角スペース2個に置き換えていますので、ご留意ください。
(和文は全角スペース2個です)

最終的には、Text ファイルの形でお渡ししようかと思います。


<英文>
===============================================================================

Add-In Casio Basic Interpreter (& Compiler) Ver. 0.9x beta version

copyright(c)2015 by sentaro21
e-mail sentaro21@pm.matrix.jp

===============================================================================

C:Basic is Add-In version of Casio Basic interpreter and compiler which works on Casio fx-9860GII. Currently beta version of interpreter is only released, but not compiler version, so we call it currently C.Basic (single dot). In future compiler version (C:Basic) will be release.


Featuer of C.Basic:

C.Basic is compatible of original Casio Basic (included in OS 2.04 of fx-9860GII)
- It runs faster than original Casio Basic in factor of 10 or more.
- Development environment is almost same as original Casio Basic, so you can use it with almost same operation.

Source file of C.Basic should be on storage memory, not on main memory.
- Original Casio Basic’s source file is on main memory.
- C.Baisc supports sub-folder.

C.Basic has development environment to create new source files and edit files.

C.Basic is upper compatible of original Casio Basic.
- C.Basic provides expanded functions to some original Casio Basic commands.
- C.Basic provides new Basic commands.
- C.Basic provides more easy to use development environment.

 
Note:
C.Basic is not 100% Casio Basic compatible, could not 100% support all commands.

Numerical operation is internally carried out by double precision of binary operation by C language, so accuracy and error of the operation is deferent from original Casio Basic.

PICT is saved in storage memory (not in main memory), so the operation seed would be slower then original Casio Basic.

Because of beta version, current release of C.Basic would have bugs. It would be appreciated if you could report back found bugs.


======= CAUTION !!! ========
We do not believe that your calculator would be damaged by using C.Basic/C:Basic, but there still be possibility that data in main memory could be unexpectedly destroyed and/or “memory all reset” may be required. It’s strongly recommended that you should make backup of data in main and storage memory of your calculator before using C.Basic/C:Basic. Use of C.Basic/C:Basic is at user’s sole risk.
============================

======= Disclaimer of Warranty =======
Use of C.Basic/C:Basic is at user’s sole risk. All materials, information, products, software, programs and service provided “as is”, with no warranties or guarantees whatsoever. Creator of C.Basic/C:Basic and support team who provide support documents, information and sample programs (hereinafter DEVELOPMENT TEAM) expressly disclaim to the fullest extent permitted by law all express, implied, statutory, and other warranties, guarantees, or representations, including, without limitation, the warranties of merchantability, fitness for a particular purpose, and non-infringement of proprietary and intellectual property rights. Without limitation, DEVELOPMENT TEAM makes no warranty or guarantee that development of SOFTWARE will be uninterrupted, timely, secure, or error-free.
======================================


-------------------------------------------------------------------------------
Starting C.Basic, you see File List is displayed.
- If you want to run original Casio Basic source file (its extension is g1m) on C.Basic which has been already made, before start up C.Basic, the Basic source file should be copied from main memory to storage memory, by operation on your calculator or by used of FA-124 (PC link software provided with your calculator by Casio). Then the File List includes the copied Basic File and you can select it to run or edit.

(単一ファイルに限ります。複数ソースファイルをまとめたファイルは未対応です。)

[F3] (New) to create new Basic file and you can edit it.


=================================================================================
Quick Manual - Development Environment of C.Basic
=================================================================================

---------------------------------------------------------------------------------
File List Screen (almost compatible with original CasioBasic, but a bit deferent)
---------------------------------------------------------------------------------
-[UP] Select the previous file/folder.
-[DOWN] Select the next file/folder.
(Hitting an [A] – [Z] alphabet key let cursor jump to file staring with the alphabet.
This function is compatible with fx-5800P.)

-[F1] (EXE) Execute selected file.
-[F2] (EDIT) Edit selected file.
-[F3] (NEW) Create a new file.
-[F4] (COPY) Copy selected file
-[F5] (DEL) Delete the selected file.
-[F6] Move to next menu page.
  [F1] (Text) Convert selected Basic file to text file.
  [F2] (REN) Rename selected file.
  [F3] (Fav.) Selected file is added to or deleted from Favorite File List.
  [F4] (Fv.↑) Move Up selected file in Favorite File List.
  [F5] (Fv.↓) Move down selected file in Favorite File List.
  [F6] Move back to previous menu page.

-[SHIFT]
  [F1] (Var) Display Variable List.
  [F2] (Mat) Display Mat variables.
  [F3] (V-W) Display ViewWindow parameters (you can also edit the parameters).
  [F6] (Debg) Run in Debug Mode.

-[VARS] Display Variable List
  [F1] (A<>a) Switch dysplay of capital letter variables and lower letter variables.
  [F2] (Int) Initialize all the displayed variables.
  [F3] (D<>I) Switch display of integer variables and real variables.

-[SHIFT][VARS] (SETUP) Initial Settings

-[OPTN] Selected file is added to or deleted from Favorite File List.


-------------------------------------------------------------------------------
Edit Screen (almost compatible with original CasioBasic, but a bit deferent)
-------------------------------------------------------------------------------
-[F1] (TOP) Jump to the top line.
-[F2] (BTM) Jump tp the bottom line.
-[F3] (CMD) Display Command list (compatible with fx-5800P, you see all the supported commands.)
-[F4] (A<>a) Switch capital and lower letter.
-[F5] (CHAR) Display Charactor Selection
-[F6] (EXE) Execute program. 一時停止状態であれば再開します。

-[SHIFT]
  [F1] (Var) Display Variable List.
  [F2] (Mat) Display Mat variables.
  [F3] (V-W) Display ViewWindow parameters (you can also edit the parameters).
  [F4] (Dump)/(List) Switch display of Basic list / hexadecimal dump list.
  [F5] (SRC) Move to string serch mode.
  [F6] (G<>T) Switch graphics display and text display

-[OPTN] Display commands by [OPTN] key which is upper compatible of original Casio Basic.

-[VARS] Display commands by [VARS] key which is upper compatible of original Casio Basic.

-「SHIFT][VARS] (PRGM) Display commands by [SHIFT][VARS](PRGM) key which is upper compatible of original Casio Basic.

-[SHIFT][MENU] (SETUP) Initial settings

-[EXIT] Go back to File List Screen.


-------------------------------------------------------------------------------
During program is running (almost compatible with original CasioBasic)
-------------------------------------------------------------------------------
-[AC] Forced termination (AC Break)

When program is paused, following key operation is avalable;
-[SHIFT]
  [F1] Display Variable List.
  [F2] Display Mat variables.
  [F3] Display ViewWindow parameters (you can also edit the parameters).
  [F6] Switch graphics display and text display.


-------------------------------------------------------------------------------
Incompatible spec with original CasioBasic
-------------------------------------------------------------------------------
C.Basic is desgined and implemented as to be fully compatible with original Casio Basic,
but currently it is not 100% compatible, due to limitation of SDK or our intention of
design for more convenience.

- With "?" command, input region is limited in single line by scrolling (compatible with inp.c).
- We intend to support "?A" command format which is supported by fx-5800P Casio Basic.
- When Multi-Statement Command ":" comes right after output commans such as graphics output,
Locate, Text or some other commands, LCD display is not refreshed. We intend to design this.
- When program is quited (not by AC Break), running time of the program can be displayed.
(you can set in Initial Setting Mode).


-------------------------------------------------------------------------------
Acknowledgment
-------------------------------------------------------------------------------

In order to investigate and implement internal specification,
"SuperH-based fx calculators (version 20)"
is very powerful and useful information. This precious information is used.

For file handling of C.Basic/C:Basic, folowing information is very helpful and
part of that is used;
"http://community.casiocalc.org/topic/6836-wsc-fvm-v12-casio-fx-9860-series-on-calc-c-compiler/
Wsc & Fvm V1.2 - Casio Fx-9860 Series On-calc C Compiler"

For Japanese Kana Fonts, font data and output routine in the following site is used;
"http://baticadila.dip.jp/fx_sdk_005.html"


For detailed feature and function of original Casio Basic, following site is referenced;
e-Gadget - Programming Calculator (プログラム関数電卓) by Krtyski
"http://egadget.blog.fc2.com/"
(almost contents are in Japanese).

Many thanks to my friends.


-------------------------------------------------------------------------------
Licensing
-------------------------------------------------------------------------------
This software is free software, in accordance with GPLv2.




<和文>
===============================================================================

アドイン版 Casio Basic Interpreter (& Compiler) ver 0.99 テスト版

copyright(c)2015 by sentaro21
e-mail sentaro21@pm.matrix.jp


===============================================================================

Casio Basic インタプリタのアドイン版、略してC:Baisc(現状インタプリタのみなのでC.Basic)のとりあえず動く版です。
将来的にはコンパイラが追加される予定です。

・特徴
 純正Casio Basic互換(を目指しています)。
 純正Casio Basicよりも高速動作(10倍以上)。
 操作方法はほぼCasio Basic準拠。
 ソースファイルはメインメモリではなくストレージメモリに置かれます。(サブフォルダ対応です)
 制限付ながらBasicファイルの新規作成、編集が可能です。

・欠点
 純正Casio Basicのサブセットです。全部の命令が使えません。というか今のところは一部の基本的な命令のみのサポートです。
 数値演算はCの倍精度2進演算により精度&誤差が若干違います。
 PICTがストレージメモリに保存されますので若干遅いです。
 たぶん…間違いなくバグありです(^^;…ので、バグ報告よろしくお願いします。


========================== 注意!!! ============================================
このツールの使用によって電卓が破壊される可能性はまず無いと思いますが、
予期せぬバグ等でメインメモリが破壊されオールリセットになる可能性はあります。
このツールの使用はメインメモリ&ストレージメモリのバックアップをとった上でお願いいたします。
作者はこのツールの使用の結果においていかなる責任も負わないものとさせていただきます。
===============================================================================


-------------------------------------------------------------------------------
起動すると、ファイルリスト画面になります。

アドイン実行前にBasicソースをメインメモリからストレージメモリにコピーするか、
FA-124にてプログラムファイル(sample.g1m等)をストレージメモリにコピーしておくと、
起動時にプログラム選択ができます。
(単一ファイルに限ります。複数ソースファイルをまとめたファイルは未対応です。)

[F3] (NEW) を選択すると、新規プログラムの作成モードに入れます。


===============================================================================
クイックマニュアル - C.Basic の開発環境
===============================================================================

-------------------------------------------------------------------------------
ファイルリスト画面(CasioBasic準拠っぽく…ちょっと違っています)
-------------------------------------------------------------------------------
-[UP] 一つ前のファイルを選択します。
-[DOWN] 一つ後のファイルを選択します。
(ファイル選択画面ではA-Zのキーを押すとそれを先頭とするファイルにジャンプします。fx-5800P準拠です)

-[F1] (EXE) 選択ファイルを実行します。
-[F2] (EDIT) 選択ファイルを編集します。
-[F3] (NEW) 新規ファイルを作成します。
-[F4] (COPY) ファイルをコピーします。
-[F5] (DEL) 選択ファイルを削除します。
-[F6] 次のメニューに移動します。
  [F1] (Text) 選択されたBasicソースファイルをテキストファイルへ変換します。
  [F2] (REN) ファイル名を変更します。
  [F3] (Fav.) 選択ファイルをお気に入りに追加、解除します。
  [F4] (Fv.↑) お気に入りを一つ上に移動します。
  [F5] (Fv.↓) お気に入りを一つ下に移動します。
  [F6] 前のメニューに移動します。

-[SHIFT]
  [F1] (Var) 変数画面
  [F2] (Mat) Mat変数画面
  [F3] (V-W) ViewWindowのパラメータ表示 (パラメータの変更も可能)
  [F6] (Debg) デバッグモードで実行

-[VARS] 変数画面
  [F1] (A<>a) 大文字変数と小文字変数の表示切替え
  [F2] (Int) 表示変数の一括初期化
  [F3] (D<>I) 整数変数と実数変数の表示切替え

-[SHIFT][VARS] (SETUP) 初期設定

-[OPTN] 選択ファイルをお気に入りに追加、解除します。


-------------------------------------------------------------------------------
編集画面(CasioBasic準拠っぽく…ちょっと違っています)
-------------------------------------------------------------------------------
-[F1] (TOP) ファイル先頭にジャンプします。
-[F2] (BTM) ファイル末尾にジャンプします。
-[F3] (CMD) コマンド選択画面(fx-5800P準拠)(ここで選択できるコマンドがサポートされています)
-[F4] (A<>a) 大文字小文字切り替え
-[F5] (CHAR) キャラクタ選択画面
-[F6] (EXE) プログラムを実行します。一時停止状態であれば再開します。

-[SHIFT]
  [F1] (Var) 変数画面
  [F2] (Mat) Mat変数画面
  [F3] (V-W) ViewWindow表示
  [F4] (Dump)/(List) Basicリスト表示/16進ダンプ表示切替
  [F5] (SRC) 文字列サーチモードに入ります。
  [F6] (G<>T) グラフィックス画面とテキスト画面の切り替え

-[OPTN] OPTN対応コマンド入力画面(ここで選択できるコマンドがサポートされています)

-[VARS] VARS対応コマンド入力画面(ここで選択できるコマンドがサポートされています)

-「SHIFT][VARS] (PRGM) PRGM対応コマンド入力画面(ここで選択できるコマンドがサポートされています)

-[SHIFT][MENU] (SETUP) 各種設定

-[EXIT] ファイル画面に戻ります。


-------------------------------------------------------------------------------
プログラム実行時(ほぼCasioBasic準拠…です)
-------------------------------------------------------------------------------
-[AC] プログラム実行を中止します。

プログラムが一旦停止している時は、以下のキー操作が有効;
-[SHIFT]
  [F1] 変数画面
  [F2] Mat変数画面
  [F3] ViewWindow表示
  [F6] グラフィックス画面とテキスト画面の切り替え


-------------------------------------------------------------------------------
CasioBasicとの相違点
-------------------------------------------------------------------------------
基本的には全く同じ動作になるように設計・実装されていますが、SDKの制限や利便性を
考慮した意図的な設計により100%互換ではありません。

・?コマンドの入力部分は1ラインのみで横スクロールします。(inp.c準拠です)
・fx-5800にある?A形式を試験的にサポートしています。
・描画コマンドの直後が':'だと画面書換え更新をしません。(グラフィック命令、Locate,Text等)
・プログラム終了時に実行時間を表示することができます。(セットアップで設定)


-------------------------------------------------------------------------------
謝辞
-------------------------------------------------------------------------------

プログラム内部仕様&情報は
SuperH-based fx calculators (version 20)
を参考にさせていただいています。(一部引用)

このツールのファイル操作部分は、
"http://community.casiocalc.org/topic/6836-wsc-fvm-v12-casio-fx-9860-series-on-calc-c-compiler/
Wsc & Fvm V1.2 - Casio Fx-9860 Series On-calc C Compiler"
を参考にさせていただいています。(一部引用)

カナフォントはこちらのサイトよりカナフォントデータおよび表示ルーチンを引用させていただいています。
"http://baticadila.dip.jp/fx_sdk_005.html"


プログラム実行時の細かい動作に関しては、
やす(Krtyski)様の
e-Gadget - プログラム関数電卓
プログラム電卓の濃い話: 今は fx-5800P / fx-9860GII と Casio Basicプログラミングが中心
"http://egadget.blog.fc2.com/"
を参考にさせていただいています。

いつもありがとうございます。
これからもよろしくお願いいたします。


-------------------------------------------------------------------------------
ライセンス
-------------------------------------------------------------------------------
このソフトウエアはフリーソフトウエアです。
ライセンスはGPLv2に準じます。




如何でしょうか?

アドイン版 C.Basic ver.0.99a テスト版 その9.9a(細かな調整+Getkey3追加版)

管理人様、ガノー様、こんにちは!

>・Getkey3を定義して頂けませんか?

システムに装備されているキー入力ルーチンでは1秒単位の処理しか出来ないみたいなので、ガノー様仕様を100%満足する実装は今の段階では出来なかったので、Getkey1,2系ではなくGetkeyでガノー様仕様で追加してみました。
その過程で純正で可能なGetkeyでのバックライト制御をC.BasicのGetkeyでも出来るようにしてみました。
今回のGetkey3でYOKOLITHのWAITサブルーチンがそっくり置き換え可能です(^^)

>また、Getkey待ちのループよりも電力消費量が減らせるのではないかと思います。

Getkey系コマンドなので電力消費量はほぼ変化なしです(^^;


>デバッグ機能は、売りの1つになりそうですね。とてもありがたいです。
>ところで、もし贅沢が許されるのなら「指定した行まで実行してストップ」の機能があれば、IDEのデバッグ機能と遜色なくなると思います。Step In や Step Out はインタープリタでは不要でしょうが、サブルーチンを>一気に実行させたい時などには「指定した行まで実行してストップ」が役立ちそうです。

現状はコマンド単位でのトレース実行なので次期バージョンでいろいろと追加してみたいと思います(^^)
指定した行でのストップはとりあえずACBreakコマンドを散りばめていただければ…(^^;



アドイン版 C.Basic ver.0.99a テスト版 その9.9a(細かな調整+Getkey3追加版)
http://pm.matrix.jp/CB/CBASIC099a.zip

・Sprintfでの#プリフィックスは実数式評価としました。
 整数モードでは常に整数値しか得られないので、#プリフィックスを付けた式では実数式評価で実数値が返ります。
 整数モードでしか意味は無いのですが整数モードにおけるSprintfやLocate、Textコマンドで実数値を扱うことが出来ます。
(例)Locate 1,1,123+0.456
 整数モードでは整数値に丸められて123となってしまうのですが、
(例)Locate 1,1,#123+0.456
 #プリフィックスを付けると実数で123.456と表示されます。
 式評価は実数で行われるために整数変数には%指定を付ける必要があります。

・GetkeyコマンドにてGetkey1~2と同様に[SHIFT]+[OPTN]でのバックライト制御が可能になりました。
 [SHIFT]+[AC]での電源OFFには未対応です。

・一定時間キー入力待ちをするGetkey3追加しました。
 Getkey1系のコマンドではなくGetkey系のコマンドとなります。
(例)Getkey3(128)
 コマンド実行時のタイマーを基準として128Ticksカウント(=1秒)のウエイト期間中にキー入力があれば最後に押されたキーコードが返ります。
(例)Getkey3(128,A)
 Aをタイマーの初期値として現在のタイマー値が128Ticksカウント経つまでキー待ちをします。

re: readmeの英訳

管理人様、こんにちは!

readmeの英訳、ありがとうございます!
免責事項も含めて私ではなかなか書けそうにない英文なので、さすが管理人様ですね(^^)


>Q1) fx-9860G への適用性

今のところSDKの範囲内で動作しているので初期版でも問題なく動作することを確認しました。


>Q2) 新規Basicファイル作成とBasicファイル編集

純正互換コマンドの範囲では完全互換だと思ってますが完全ではないかもしれません(^^;


Q3) PICT がストレージを使うから遅い

未だにメインメモリ上でのPICTファイルアクセスはできてないのですが、ヒープメモリ上に領域を確保する選択肢があるので速度的な問題は無くなっています。
今回バージョンで追加文を載せてみました。(管理人様のReadme_J.txt に追加しています)


>それはさておき、英訳のために 最新バージョン(Ver 0.99)の readme_J.txt を見ますと、いくつか実情に合わなくなっている部分や抜けがあったりするので、修正版を作ってみました。それに合わせて、ちょっと説明の追加もしてみました。

お手数おかけしてます。
更新履歴がメインになってるので本文の改変が後回しになってしまってますね(^^;


>とありますが、FA-124を使えば、複数ファイルをまとめてコピーできますよね?
>すると上記の記述は不要になりませんか?

んと、この複数ファイルというのは一つのG1Mファイルに複数のプログラムが含まれた統合版G1Mファイルのことなので、依然、未対応のままです(^^;
統合版G1Mファイルは、メインメモリのプログラムファイルをストレージメモリにコピーする場合に複数選択してコピーすると一つのG1Mファイルとしてコピーされるのですが、このファイルが統合版G1Mファイルです。


>-[F6] (EXE) プログラムを実行します。一時停止状態であれば再開します。
>の説明で、「一時停止状態であれば再開します。」はどのような状況を指しますか?

プログラム実行時に[AC]キーでストップした状態です。
現在のデバッグメニューのコンティニューのことで、ストップさせたところからのの実行再開です。


今回バージョンアップのReadme_J.txtより管理人様バージョンとなっています(^^)
バージョンがほとんど1.00に近づいたのでそこから管理人様の英語マニュアルを入れさせていただこうかなと思っています。

Re: re: readmeの英訳

sentaro様

Getkey2 なんて有ったのですか...し、知らなかった(-_-;

φ(..)メモメモメモ


readme_J.txt の追記部分確認しました。

追加されたデバッグモードも、英文に追加しておきます。




> >Q1) fx-9860G への適用性
>
> 今のところSDKの範囲内で動作しているので初期版でも問題なく動作することを確認しました。

それでは、fx-9860G でも動作する旨追加しておきます。英文で追加したら、それに合わせて和文の案を提示しますね。



> >Q2) 新規Basicファイル作成とBasicファイル編集
>
> 純正互換コマンドの範囲では完全互換だと思ってますが完全ではないかもしれません(^^;

英文の方では、暗に互換だと既に言ってしまっています(^^;



> Q3) PICT がストレージを使うから遅い
>
> 未だにメインメモリ上でのPICTファイルアクセスはできてないのですが、ヒープメモリ上に領域を確保する選択肢があるので速度的な問題は無くなっています。
> 今回バージョンで追加文を載せてみました。(管理人様のReadme_J.txt に追加しています)

はい、英文にも追記するようにします。



> >とありますが、FA-124を使えば、複数ファイルをまとめてコピーできますよね?
> >すると上記の記述は不要になりませんか?
>
> んと、この複数ファイルというのは一つのG1Mファイルに複数のプログラムが含まれた統合版G1Mファイルのことなので、依然、未対応のままです(^^;
> 統合版G1Mファイルは、メインメモリのプログラムファイルをストレージメモリにコピーする場合に複数選択してコピーすると一つのG1Mファイルとしてコピーされるのですが、このファイルが統合版G1Mファイルです。


1つの g1m ファイルに複数のプログラムを統合できるというのは、未だ知りませんでした。
純正で、どのようにしたら統合ができるのでしょうか?



> >-[F6] (EXE) プログラムを実行します。一時停止状態であれば再開します。
> >の説明で、「一時停止状態であれば再開します。」はどのような状況を指しますか?
>
> プログラム実行時に[AC]キーでストップした状態です。
> 現在のデバッグメニューのコンティニューのことで、ストップさせたところからのの実行再開です。


デバッグモードでなく、通常の実行開始で、プログラムを走らせ、[AC] で強制終了させた時、止まったところにカーソルがきた状態で編集画面になります。この時、一番上のファイル名表示が反転表示になって、デバッグモードになっていることを示しますが、この時 [F6] は Swap になっています。[F6]で実行再開にはならないのですが、何か見落としているでしょうか?

最近のアップデートについて行けていないので、初めてのユーザーに近い視点になっているかとは思うのですが...




> 今回バージョンアップのReadme_J.txtより管理人様バージョンとなっています(^^)
> バージョンがほとんど1.00に近づいたのでそこから管理人様の英語マニュアルを入れさせていただこうかなと思っています。


うわっ、英語版完成させなければ....しばらくは0.99x の x を更新してくださいませ....

で、Ver 1.00 でめでたく安定ベーター版で公開、ということで...


Ftune2 の PFC設定について

sentaro様

Ver 0.99や0.99a では、以前作った LIFE073 の動作がさらに速くなっています。

機能追加にも関わらず、スピードアップもしているのですね(^_^)/

で、0.99a にして気付いたのですが、またもや編集画面でカーソルが見えなくなっています。

確か、以前のアドバイスで Ftune2 の設定でPFC設定を 14.75MHz にすると良いと言われ、それでその時はカーソルが見えるようになった記憶があります。

今回、PFC設定をしようとして...あれぇ?どうやるんだけ?状態です。

お助けくださいませ。


Ftune2 の PFC設定について

管理人様、こんにちは!

>1つの g1m ファイルに複数のプログラムを統合できるというのは、未だ知りませんでした。
>純正で、どのようにしたら統合ができるのでしょうか?

純正のCasioBasicプログラムをストレージメモリにコピーするときに複数のファイルを同時に選択してからコピーするという方法でいけます。
このメインメモリからストレージメモリへのコピー時には必ずファイル名を要求されるのが面倒なのですが、ストレージメモリ上のファイルはリネーム出来ないので仕方ないところですね。


>Getkey2 なんて有ったのですか...し、知らなかった(-_-;

キーバッファをクリアしてからGetkey1実行=Getkey2というところですね。


>Ver 0.99や0.99a では、以前作った LIFE073 の動作がさらに速くなっています。
>機能追加にも関わらず、スピードアップもしているのですね(^_^)/

0.90~0.91あたりが一番速くて、それ以後は緩やかに遅くなっている部分がありますが、0.80頃と比べると遅くなってないかもしれません(^^)


>で、0.99a にして気付いたのですが、またもや編集画面でカーソルが見えなくなっています。

う~む…やはりカーソル見えなくなる現象はまだ続いてるのですね。。

オーバークロック時の現象だけだと仕様ということになるかもですけど(^^;
消えないバージョンが有る以上は原因を早いとこ掴まないとですね。


>確か、以前のアドバイスで Ftune2 の設定でPFC設定を 14.75MHz にすると良いと言われ、それでその時はカーソルが見えるようになった記憶があります。
>今回、PFC設定をしようとして...あれぇ?どうやるんだけ?状態です。
>お助けくださいませ。


PFCのところにカーソル移動して、分周比を/32まで落とします。これでPFCは下がります。
このままだと毎回設定し直さないといけなくなるので、ファンクションキーを再設定しておきます。
{SHIFT]+[ファンクションキー]で記憶させた後に、[SHIFT]+[F1]でセーブして設定保存されます。

私もC.Basicの自動保存に慣れきってしまって、Ftune2での保存手順に一瞬戸惑ってしまうので、この一連の操作はFAQかもですね(^^)

C.Basicのように設定変更したら即自動保存されるようにしてもよいのですが、危ない設定のまま保存されても困ることもあるので、ちょっと面倒な仕様にした記憶があります(^^;

Re:Re: re: readmeの英訳

管理人様、こんにちは!

>デバッグモードでなく、通常の実行開始で、プログラムを走らせ、[AC] で強制終了させた時、止まったところにカーソルがきた状態で編集画面になります。この時、一番上のファイル名表示が反転表示になって、デバッグモードになっていることを示しますが、この時 [F6] は Swap になっています。[F6]で実行再開にはならないのですが、何か見落としているでしょうか?

デバッグモードでは従来[F6]にあった実行再開のContinueは[F1]に移動して[F6]は画面切り替えに変更したのですが、キーアサインについてはまだ暫定なので使いやすいキーアサインを工夫していきたいと思っています。

ファイルモードのように[F6]をファンクションの切り替えキーにして通常エディタとデバッグモードで最初に出すファンクションキー一覧を変えるというのもありでしょうか?
例えば通常エディタモードでは今までどおりで、
デバッグモードでは[F1]から「F5]がデバッグモードファンクションメニューで[F6]を押すと通常エディタと同じファンクションキーが出現というような感じです。
「SHIFT]はどちらも共通ということで。


>うわっ、英語版完成させなければ....しばらくは0.99x の x を更新してくださいませ....
>で、Ver 1.00 でめでたく安定ベーター版で公開、ということで...

はい、一応、安定するまではテスト版0.99xのままで1.00にはならないです(^^;

まだまだバグがいっぱい出てきそうですし、仕様も固まりきれてないので、安定版までにはしばらくかかるかもです(^^;

ということなので、ゆっくりで全然だいじょうぶです(^^)

ちょいミスしてました(^^;

デバッグモードの[F1]がContではなくTraceに変わってましたので修正です。
これは次期0.99bのデバッグモードで、サブルーチンはステップ動作しない[F2]Stepと、コマンド単位のステップ動作の[F1]Traceに変更する予定だったので、そこが先に変更されてました(^^;

ので一応、0.99aは差し替えです(^^;

もろもろ

sentaro様

メニュー表示ですが、

> ファイルモードのように[F6]をファンクションの切り替えキーにして通常エディタとデバッグモードで最初に出すファンクションキー一覧を変えるというのもありでしょうか?
> 例えば通常エディタモードでは今までどおりで、
> デバッグモードでは[F1]から「F5]がデバッグモードファンクションメニューで[F6]を押すと通常エディタと同じファンクションキーが出現というような感じです。
> 「SHIFT]はどちらも共通ということで。

おっしゃるように、ある程度の統一感は有った方が良いかも知れないと、私も思います。
[F6]にはモード切替っぽい機能にするというのは賛成で、編集画面で [F6]で Norma と Debg がトグル動作するというのは、よいかも知れませんね。

そうすると、デバッグモードでは、例えば、[F1] (Continue), [F2] (Trace), [F3] (Step), [F6] (Norm) となって、
ノーマルモードでは、今のメニュー表示にするとか...

デバッグモードでソースを編集したくなる時、面倒でも [F6] 一押ししてもらってから編集し、もう一度[F6] でデバッグ操作を継続できれば、それで良いように思います。

どうでしょうか?

その場でソースを変更しながらデバッグできるのは、インタプリターならではですしね!

但し、例えば以下の場足

10→C
Lbl 0
Locate 1,1,C
ACBreak
Dsz C
Goto 0

を実行するとき、Locate 1,1,C を Locate 1,2,C に変更すると、Syntac ERROR が出て、そのままステップ動作を継続しようとするとファイル保存になってプログラム動作が終了します。

Dsz C を Isz C に変えても、動作が変わるだけでステップ動作は継続できます。

デバッグしながらソースを変更することは想定されていますか?



Ftune2 でオーバークロック時のカーソルが消える件ですが、なぜだか今日はカーソルが見えています。
機能と同じ条件のはずなのですが、何を見落としているのか、探索中です。

機能と今日の違いは、思い当たる範囲ですと、ストレージメモリのファイルを減らしたことと 最適化を行ったことくらいなんです。ストレージの逼迫具合が影響する、つまりそうなると C.Basic側の話になりそうですが、そんなこと考えられますか?


> はい、一応、安定するまではテスト版0.99xのままで1.00にはならないです(^^;
>
> まだまだバグがいっぱい出てきそうですし、仕様も固まりきれてないので、安定版までにはしばらくかかるかもです(^^;
>
> ということなので、ゆっくりで全然だいじょうぶです(^^)


色々とプログラムを作ってみる必要ありそうですね!


Re:もろもろ

管理人様、こんにちは!

>そうすると、デバッグモードでは、例えば、[F1] (Continue), [F2] (Trace), [F3] (Step), [F6] (Norm) となって、
>ノーマルモードでは、今のメニュー表示にするとか...
>デバッグモードでソースを編集したくなる時、面倒でも [F6] 一押ししてもらってから編集し、もう一度[F6] でデバッグ操作を継続できれば、それで良いように思います。

了解です(^^)


>を実行するとき、Locate 1,1,C を Locate 1,2,C に変更すると、Syntac ERROR が出て、そのままステップ動作を継続しようとするとファイル保存になってプログラム動作が終了します。
>デバッグしながらソースを変更することは想定されていますか?

はい、デバッグモードでも編集が可能な仕様ですが、プログラムの再開やステップ実行はエディタのカーソル位置から再スタートするので、編集でカーソル位置が移動してたまたまそこでエラーになってしまうと全体が終了してしまうので、これを終了させないで継続出来るように変更してみます。


>機能と今日の違いは、思い当たる範囲ですと、ストレージメモリのファイルを減らしたことと 最適化を行ったことくらいなんです。ストレージの逼迫具合が影響する、つまりそうなると C.Basic側の話になりそうですが、そんなこと考えられますか?

アドインプログラムはストレージメモリ上でそのまま実行されるために保存されている位置がずれると若干の実行タイミングの差異が生じる可能性があります。
ということで、最適化によってC.Basicの本体プログラムのストレージメモリ内での位置が少し変わった事で、カーソル表示ルーチンを実行する時の若干のタイミング差でカーソルが見えるようになったというのが考えられますが、それだとするとストレージの残容量の違いで同じバージョンでもカーソルが見えたり見えなかったりということが頻発するはずです。
こうなってくると、CPUの1クロック単位の差異なのでかなりシビアな世界ですね(^^;


>色々とプログラムを作ってみる必要ありそうですね!

はい、文字列も含めてかなり多機能になったきたので各種プログラムで互換性も含めて検証する必要ありです。
CasioBasicの仕様はなかなか気が付かないことも多いのでよろしくお願いいたします(^^)

Re: Re:もろもろ

sentaro様

デバッグモード用メニューと通常編集用メーニューを切り替えるのは、何をやっているのかの意識を切り替えることになるので、却って良いかも知れませんね。


> はい、デバッグモードでも編集が可能な仕様ですが、プログラムの再開やステップ実行はエディタのカーソル位置から再スタートするので、編集でカーソル位置が移動してたまたまそこでエラーになってしまうと全体が終了してしまうので、これを終了させないで継続出来るように変更してみます。

エラー表示を出して、エラー部分にカーソルが移動した上で、継続できるのなら完璧だと思います。


> アドインプログラムはストレージメモリ上でそのまま実行されるために保存されている位置がずれると若干の実行タイミングの差異が生じる可能性があります。
> ということで、最適化によってC.Basicの本体プログラムのストレージメモリ内での位置が少し変わった事で、カーソル表示ルーチンを実行する時の若干のタイミング差でカーソルが見えるようになったというのが考えられますが、それだとするとストレージの残容量の違いで同じバージョンでもカーソルが見えたり見えなかったりということが頻発するはずです。
> こうなってくると、CPUの1クロック単位の差異なのでかなりシビアな世界ですね(^^;

とりあえずの対処方法として、「最適化を行う」を意識してやることにして、しばらく様子を見てみます。

sentaro様のお手元では、カーソルが見えなくなる症状はあまり出ていないようですが、ストレージの空きが多い状態でしょうか?



> はい、文字列も含めてかなり多機能になったきたので各種プログラムで互換性も含めて検証する必要ありです。
> CasioBasicの仕様はなかなか気が付かないことも多いのでよろしくお願いいたします(^^)

コマンドリファレンス作成時に、できるだけ簡単なサンプルプログラムを作ってみようと、場合によってはそれをリファレンスに掲載しようかと思っています。

やはり実際に使ってみないと話が進まないですよね!

アドイン版 C.Basic ver.0.99b テスト版 その9.9b(デバッグ機能追加版)

管理人様、ガノー様、こんにちは!

>デバッグモード用メニューと通常編集用メーニューを切り替えるのは、何をやっているのかの意識を切り替えることになるので、却って良いかも知れませんね。
>エラー表示を出して、エラー部分にカーソルが移動した上で、継続できるのなら完璧だと思います。

デバッグメニューを専用に設けたことでファンクションキーに余裕が出来たので、サブルーチンはそのまま実行するステップオーバーとサブルーチン終了まで実行するステップアウトを追加しました。
それからエラーで止まった場合は終了ではなく一時中断扱いにしたことでエラーを修正後、プログラムの継続が出来るようになりました。
一応動作はだいじょうぶかと思うのですが、エディタとインタプリタの動作の変更なのでまだおかしな挙動が残ってる可能性大です(^^;


>sentaro様のお手元では、カーソルが見えなくなる症状はあまり出ていないようですが、ストレージの空きが多い状態でしょうか?

空きは600KB程度でしょうか。
C.Basicが頻繁に更新されているので毎回保存位置が変わっている感じですけど、USBを繋いだ時のオーバークロック以外ではカーソル異常が出たことがないのでかなり謎な現象です(^^;



アドイン版 C.Basic ver.0.99b テスト版 その9.9b(デバッグ機能追加版)
http://pm.matrix.jp/CB/CBASIC099b.zip

・デバッグモードを拡張しました。
 ファイルモードの[SHIFT]+[F6]でデバッグモードに入ります。
 [F1]:カーソル位置よりプログラムを再開します。従来のContと同じです。
 [F2]:カーソル位置よりトレース実行。コマンド実行後、即エディタ画面に戻ります。
 [F3]:カーソル位置よりトレース+ステップオーバー。サブルーチンは一気に実行されます。ステップ実行後、即エディタ画面に戻ります。
 [F4]:カーソル位置よりステップアウト。サブルーチンの終了まで一気に実行します。ステップ実行後、即エディタ画面に戻ります。
 [F5]:エディタリスト表示とプログラム実行画面の切替をします。切替後も実行画面が維持されるので実行画面そのまま[F1]-[F4]のデバッグ動作が可能です。
 [F6]:デバッグメニューとエディタメニューを切り替えます。実行画面(グラフィック/テキスト)の場合はファンクションメニュー表示をします。
グラフィック画面とテキスト画面の切替は[SHIFT]+[F6]です。

・エラーが起きた場合の処理を変更しました。
 従来はプログラム実行をすべて中止してエディタに戻っていたのを、実行中断してデバッグモードでエディタに戻るようにしました。
 エラー箇所を修正後、中断箇所よりプログラムに復帰することが可能になりました。

・ACBreakコマンドに機能追加しました。
 直後にStopコマンドを付けることで、ACBreakStopとなりますが、
 これ以降に実行されるACBreakコマンドをすべてキャンセルします。
 セットアップでのキャンセルと同じです。

・バックライトコマンドを追加しました。バックライト装備のfx-9860GIIのみ対応となります。
(書式)Backlight n
 n=0 バックライト消灯
 n=1 バックライト点灯
 n=2 バックライト反転
(書式)Backlight
 バックライトの状態を返します。

Re: アドイン版 C.Basic ver.0.99b テスト版 その9.9b(デバッグ機能追加版)

sentaro様

デバッグ機能の拡張、なかなか良いです。
IDEに近い機能となり、C.Basicの特徴の1つに挙げられるようになったと思います。

ありがとうございます。


> ・ACBreakコマンドに機能追加しました。
>  直後にStopコマンドを付けることで、ACBreakStopとなりますが、
>  これ以降に実行されるACBreakコマンドをすべてキャンセルします。
>  セットアップでのキャンセルと同じです。

セットアップ設定をプログラム中で変更できるのは、私は個人的に大歓迎です。


> ・バックライトコマンドを追加しました。バックライト装備のfx-9860GIIのみ対応となります。
> (書式)Backlight n
>  n=0 バックライト消灯
>  n=1 バックライト点灯
>  n=2 バックライト反転
> (書式)Backlight
>  バックライトの状態を返します。

この機能、前から欲しかったんです。
通勤中のプログラミングする場合、電車を降りてから家にたどり着く夜道で、そのまま続けたりしていますが、そのときプログラムがビジー状態になると [SHIFT][OPTN]でバックライトが付かないので...という事情からだったりします(^^;


Re:Re: アドイン版 C.Basic ver.0.99b テスト版 その9.9b(デバッグ機能追加版)

管理人様、こんにちは!

>デバッグ機能の拡張、なかなか良いです。
>IDEに近い機能となり、C.Basicの特徴の1つに挙げられるようになったと思います。

デバッグモードは純正CasioBasicには無いので強力な売りになりますね(^^)
最初はCasioBasic互換で速く動けば良い程度のスタートでしたけど、ここまで進化できるとは本当にびっくりしています。
管理人様、ガノー様の貴重なアドバイスの数々、本当にありがたく思います(^^)

まだまだバグが取り切れてないと思われるので厳しいテストよろしくお願いたします(^^;


>セットアップ設定をプログラム中で変更できるのは、私は個人的に大歓迎です。

CasioBasicでもセットアップでの設定はそれぞれコマンドが用意されているのでこのあたりは倣っていきたいところです。


>この機能、前から欲しかったんです。
>通勤中のプログラミングする場合、電車を降りてから家にたどり着く夜道で、そのまま続けたりしていますが、そのときプログラムがビジー状態になると [SHIFT][OPTN]でバックライトが付かないので...という事情からだったりします(^^;

うわ、そうだったんですか(^^;
SH3版のfx-9860GIIでは以前よりC.BasicのGetkeyでも[SHIFT][OPTN]が効いていたので、SH4A版の唯一劣る点でした。
SH4A版でもやっとGetkeyでのバックライト制御が出来るようになったのでバックライトコマンドもということでしたけど、もっと早くに付けていればよかったですね(^^)

Re: Re:Re: アドイン版 C.Basic ver.0.99b テスト版 その9.9b(デバッグ機能追加版)

sentaro様

readme_J.txt ですが、純正Basicファイルをメインメモリからストレージメモリへコピーする説明の部分に、チョット追記してみました。
英訳していて、これがあると良い(マニュアルを整備しなくても分かる)と思って、和文の方も書いてみました。
あと、成形も少し整えてみました。如何でしょうか?


===============================================================================

アドイン版 Casio Basic Interpreter (& Compiler) ver 0.99b テスト版

copyright(c)2015 by sentaro21
e-mail sentaro21@pm.matrix.jp


===============================================================================

Casio Basic インタプリタのアドイン版、略してC:Baisc(現状インタプリタのみなのでC.Basic)のとりあえず動く版です。
将来的にはコンパイラが追加される予定です。

・特徴
 純正Casio Basic互換(を目指しています)。
 純正Casio Basicよりも高速動作(10倍以上)。
 操作方法はほぼCasio Basic準拠。
 ソースファイルはメインメモリではなくストレージメモリに置かれます。(サブフォルダ対応です)
 制限付ながらBasicファイルの新規作成、編集が可能です。

・欠点
 純正Casio Basicのサブセットです。全部の命令が使えません。というか今のところは一部の基本的な命令のみのサポートです。
 数値演算はCの倍精度2進演算により精度&誤差が若干違います。
 PICTがストレージメモリに保存されますので若干遅いです。
 (v.87以降メモリ上にPICT相当のエリアを確保し高速性を確保しました。)
 たぶん…間違いなくバグありです(^^;…ので、バグ報告よろしくお願いします。


========================== 注意!!! ============================================
このツールの使用によって電卓が破壊される可能性はまず無いと思いますが、
予期せぬバグ等でメインメモリが破壊されオールリセットになる可能性はあります。
このツールの使用はメインメモリ&ストレージメモリのバックアップをとった上でお願いいたします。
作者はこのツールの使用の結果においていかなる責任も負わないものとさせていただきます。
===============================================================================


-------------------------------------------------------------------------------
C.Basic の起動
-------------------------------------------------------------------------------
起動すると、ファイルリスト画面になります。ここでファイルを選択します。

純正Casio Basicで既に作成しているBasicファイルを、このファイルリストに追加するには、
メインメモリにある元のBasicファイルをストレージメモリへコピーします。

(単一ファイルに限ります。複数ソースファイルをまとめたファイルは未対応です。)

コピー操作には2つの方法があります。

1) アドインのメモリマネージャを使う;
- [MENU]キーでメモリマネージャを起動
- [F1] (F1:Memory Manager) でメインメモリのファイルリスト表示
- カーソルを<PROGRAM.へ移動し [EXE]
- コピーしたいファイルを選ぶ
- [F1] (SEL) に続いて [F2] (COPY)
- "ROOT"が反転したウィンドウが現れるので、そこで [EXE]
- Fle Name 画面になるので、そこで適当なファイル名(例えば"A")を入力して [EXE]
- [EXE] を2回押して、[MENU] でMAIN MENUへ戻る
- C.Basic起動
- ファイル "A" を選択して [F6]そして[F2] UREN)
- 元のCasio Basicファイル名が表示されたウィンドウが表示される
- ここで [EXE] を押すと、元のファイル名に変化する。

2) FA-124 (PCリンクソフト)を使う;
- FA-124 は、電卓に付属したカシオ製のPCリンクソフトです。
- ファイルコピーの詳しい操作法は、マニュアルを参照してください。

[F3] (NEW) を選択すると、新規プログラムの作成モードに入れます。


===============================================================================
クイックマニュアル - C.Basic の開発環境
===============================================================================

-------------------------------------------------------------------------------
ファイルリスト画面(CasioBasic準拠っぽく…ちょっと違っています)
-------------------------------------------------------------------------------
-[UP]  一つ前のファイルを選択します。
-[DOWN] 一つ後のファイルを選択します。
(ファイル選択画面ではA-Zのキーを押すとそれを先頭とするファイルにジャンプします。fx-5800P準拠です)

-[F1] (EXE)  選択ファイルを実行します。
-[F2] (EDIT)  選択ファイルを編集します。
-[F3] (NEW)  新規ファイルを作成します。
-[F4] (COPY)  ファイルをコピーします。
-[F5] (DEL)  選択ファイルを削除します。
-[F6]     次のメニューに移動します。
  [F1] (Text) 選択されたBasicソースファイルをテキストファイルへ変換します。
  [F2] (REN) ファイル名を変更します。
  [F3] (Fav.) 選択ファイルをお気に入りに追加、解除します。
  [F4] (Fv.↑) お気に入りを一つ上に移動します。
  [F5] (Fv.↓) お気に入りを一つ下に移動します。
  [F6]     前のメニューに移動します。

-[SHIFT]
  [F1] (Var) 変数画面
  [F2] (Mat) Mat変数画面
  [F3] (V-W) ViewWindow表示
  [F6] (Debg) デバッグモードで実行

-[VARS] 変数画面
  [F1] (A<>a) 大文字変数と小文字変数の表示切替え
  [F2] (Int) 表示変数の一括初期化
  [F3] (D<>I) 整数変数と実数変数の表示切替え

-[SHIFT][VARS] (SETUP) 初期設定

-[OPTN] 選択ファイルをお気に入りに追加、解除します。


-------------------------------------------------------------------------------
編集画面(CasioBasic準拠っぽく…ちょっと違っています)
-------------------------------------------------------------------------------
-[F1] (TOP) ファイル先頭にジャンプします。
-[F2] (BTM) ファイル末尾にジャンプします。
-[F3] (CMD) コマンド選択画面(fx-5800P準拠)(ここで選択できるコマンドがサポートされています)
-[F4] (A<>a) 大文字小文字切り替え
-[F5] (CHAR) キャラクタ選択画面
-[F6] (EXE) プログラムを実行します。一時停止状態であれば再開します。

-[SHIFT]
  [F1] (Var)     変数画面
  [F2] (Mat)     Mat変数画面
  [F3] (V-W)     ViewWindow表示
  [F4] (Dump)/(List) Basicリスト表示/16進ダンプ表示切替
  [F5] (SRC)     文字列サーチモードに入ります。
  [F6] (G<>T)     グラフィックス画面とテキスト画面の切り替え

-[OPTN] OPTN対応コマンド入力画面(ここで選択できるコマンドがサポートされています)

-[VARS] VARS対応コマンド入力画面(ここで選択できるコマンドがサポートされています)

-「SHIFT][VARS] (PRGM) PRGM対応コマンド入力画面(ここで選択できるコマンドがサポートされています)

-[SHIFT][MENU] (SETUP) 各種設定

-[EXIT] ファイル画面に戻ります。

-------------------------------------------------------------------------------
デバッグモード編集画面 (通常エディタと違う部分)
-------------------------------------------------------------------------------
-[F1](Cont) カーソル位置よりプログラムを再開します。
-[F2](Trce) カーソル位置よりトレース実行。コマンド実行後、即エディタ画面に戻ります。
-[F3](Step) カーソル位置よりトレース+ステップオーバー。サブルーチンの場合は一気に実行されます。ステップ実行後、即エディタ画面に戻ります。
-[F4](S.ot) カーソル位置よりステップアウト。サブルーチンの終了まで一気に実行します。ステップ実行後、即エディタ画面に戻ります。
-[F5](L<>S) エディタリスト表示とプログラム実行画面の切替をします。切替後も実行画面が維持されるので実行画面そのまま[F1]-[F4]のデバッグ動作が可能です。
-[F6]( > )  デバッグメニューとエディタメニューを切り替えます。実行画面(グラフィック/テキスト)の場合はファンクションメニュー表示をします。

-[EXIT] 通常エディタ画面に戻ります。

-------------------------------------------------------------------------------
プログラム実行時(ほぼCasioBasic準拠…です)
-------------------------------------------------------------------------------
-[AC] プログラム実行を中止します。

-[SHIFT]
  [F1] 変数画面
  [F2] Mat変数画面
  [F3] ViewWindow表示
  [F6] グラフィックス画面とテキスト画面の切り替え


-------------------------------------------------------------------------------
CasioBasicとの相違点
-------------------------------------------------------------------------------
基本的には全く同じ動作になるように作成されていますが、まだ不完全です。

・?コマンドの入力部分は1ラインのみで横スクロールします。(inp.c準拠です)
・fx-5800にある?A形式を試験的にサポートしています。
・描画コマンドの直後が':'だと画面書換え更新をしません。(グラフィック命令、Locate,Text等)
・プログラム終了時に実行時間を表示することができます。(セットアップで設定)

-------------------------------------------------------------------------------
謝辞
-------------------------------------------------------------------------------

プログラム内部仕様&情報は
SuperH-based fx calculators (version 20)
を参考にさせていただいています。(一部引用)

このツールのファイル操作部分は、
http://community.casiocalc.org/topic/6836-wsc-fvm-v12-casio-fx-9860-series-on-calc-c-compiler/
Wsc & Fvm V1.2 - Casio Fx-9860 Series On-calc C Compiler
を参考にさせていただいています。(一部引用)

カナフォントはこちらのサイトよりカナフォントデータおよび表示ルーチンを引用させていただいています。
http://baticadila.dip.jp/fx_sdk_005.html


プログラム実行時の細かい動作に関しては、
やす(Krtyski)様の
e-Gadget - プログラム関数電卓
プログラム電卓の濃い話: 今は fx-5800P / fx-9860GII と Casio Basicプログラミングが中心
http://egadget.blog.fc2.com/
を参考にさせていただいています。

いつもありがとうございます。
これからもよろしくお願いいたします。


-------------------------------------------------------------------------------
ライセンス
-------------------------------------------------------------------------------
このソフトウエアはフリーソフトウエアです。
ライセンスはGPLv2に準じます。


-------------------------------------------------------------------------------
更新履歴
-------------------------------------------------------------------------------
v0.99b 2016.2.9 テスト版(インタプリタのみ)
・デバッグモードを拡張しました。
 ファイルモードの[SHIFT]+[F6]でデバッグモードに入ります。
 [F1]:カーソル位置よりプログラムを再開します。従来のContと同じです。
 [F2]:カーソル位置よりトレース実行。コマンド実行後、即エディタ画面に戻ります。
 [F3]:カーソル位置よりトレース+ステップオーバー。サブルーチンは一気に実行されます。ステップ実行後、即エディタ画面に戻ります。
 [F4]:カーソル位置よりステップアウト。サブルーチンの終了まで一気に実行します。ステップ実行後、即エディタ画面に戻ります。
 [F5]:エディタリスト表示とプログラム実行画面の切替をします。切替後も実行画面が維持されるので実行画面そのまま[F1]-[F4]のデバッグ動作が可能です。
 [F6]:デバッグメニューとエディタメニューを切り替えます。実行画面(グラフィック/テキスト)の場合はファンクションメニュー表示をします。
グラフィック画面とテキスト画面の切替は[SHIFT]+[F6]です。

・エラーが起きた場合の処理を変更しました。
 従来はプログラム実行をすべて中止してエディタに戻っていたのを、実行中断してデバッグモードでエディタに戻るようにしました。
 エラー箇所を修正後、中断箇所よりプログラムに復帰することが可能になりました。

・ACBreakコマンドに機能追加しました。
 直後にStopコマンドを付けることで、ACBreakStopとなりますが、
 これ以降に実行されるACBreakコマンドをすべてキャンセルします。
 セットアップでのキャンセルと同じです。

・バックライトコマンドを追加しました。バックライト装備のfx-9860GIIのみ対応となります。
(書式)Backlight n
 n=0 バックライト消灯
 n=1 バックライト点灯
 n=2 バックライト反転
(書式)Backlight
 バックライトの状態を返します。


(以下省略)


アドイン版 C.Basic ver.0.99c テスト版 その9.9c(行列ゼロベース追加版)

管理人様、ガノー様、こんにちは!

行列の機能が増えてくるにつれて要素数のスタートが1というのがちょっと引っかかってきてたので、行列が0から始まる行列動作モードを追加しました。
純正では画面上の座標はX軸が1~127、Y軸が1~63に限定ですが、実際は0~127、0~63まであるので、1:1で対応できるように0から始まる行列を追加してみました。
0から始まるのでC言語の配列と同様になります。

ちなみにLCD画面を行列としてアクセスするには行列の始まりをゼロに設定して、
'#Mat 0
{128,64}→Dim Mat A.V
となります。


>readme_J.txt ですが、純正Basicファイルをメインメモリからストレージメモリへコピーする説明の部分に、チョット追記してみました。
>英訳していて、これがあると良い(マニュアルを整備しなくても分かる)と思って、和文の方も書いてみました。
>あと、成形も少し整えてみました。如何でしょうか?

説明不足なところが多々あるのでなかなかよいですね(^^)

早速、今回の0.99cのreadme_J.txtに追加させていただきました。



アドイン版 C.Basic ver.0.99c テスト版 その9.9c(行列ゼロベース追加版)
http://pm.matrix.jp/CB/CBASIC099c.zip

・行列の要素の初期値として0が選択できるようになりました。
 セットアップもしくはコメント欄での記述で行列の始まりを選択できます。
(例)#Mat 1
  従来通り1から始まります。
(例)#Mat 0
  {3,2}→Dim Mat A
 確保される行列は A[0,0]~A[2,1]となります。

 同時に画面座標も0まで有効になります。これで全画面が描画対象エリアとなります
(例)Pxlon 0,0

・行列の型(1ビット、バイト、ワード、ロングワード、実数)が行列確保後に任意に変更できるようになりました。
(例)[[1,2,3,4][5,6,7,8]]→Mat A.B
   Mat A→Dim Mat A.W
 バイト型のMat A行列をワード型に変更できます。
 要素数は変更後の型サイズに応じて変化します。
 [[0x12,0x34][0x56,0x78]]→Mat A.W
 と同じ結果になります。

(注意)1ビット型行列からの変更、また1ビット型行列への変更は行と列が反転します。
 これは1ビット型行列はX,Y型で実装しているために通常のm,n型行列とは転置行列の関係になります。
 {128,64}→Dim Mat A.P
 LCD画面のバッファとして確保します。
 Mat A→Dim Mat A.B
 バイト型行列に変更すると、
 要素サイズは{64,16}になります。

Re: アドイン版 C.Basic ver.0.99c テスト版 その9.9c(行列ゼロベース追加版)

sentaro様

Mat のインデックス範囲を0からに変更できるオプションは、Cライクなプログラミングに役立ちますね。
インデックスに0が使えるということは、0か0でないかの真偽判定をうまく利用してステップ数低減(=スピードアップ)に使えて、ルーチンによってはかなり有用になりそうです。


reasme_J.txt の変更を確認しました。

今は、更新履歴を古い方から英訳しています。
最初なので、言葉の使い方や定義に関して、ご意見を伺いたいと思います。

和文で「修正」と書かれている場合でも、純正に合わせるケース、明らかななBug Fix、あるいは利便性を高めるケースなど色々あります。英訳の際には、これらを使い分けて読みやすくしようと思っています。
例えば、
・純正に合わせるような修正は Support
・C.Basicの利便性を高める機能拡張は Extension Command extensionなど、
・C.Basic独自機能は、New function (新関数)や New command (新コマンド)、Adding function (インタプリタの新機能)など
といった感じ...

あと、「テスト版」という表現をお使いですが、ベータ版とは違うといった何かお考えがあれば、お聞かせください。
作者の拘りは大切なので、できるだけ尊重すべきと思うもので...
とりあえず、Beta (test) version という表記にはしています。

で、少しですが、下記をご確認頂いて、特に変更して欲しいという部分があれば、教えてください。それに合わせて、英訳を続けようと思います。あとでまとめて変更するのが大変なもので、チョットお願い...


v0.40 2015.10.31 テスト版(インタプリタのみ)
入力ルーチンを2バイト対応しました。?や変数値入力で2バイト関数が使えます。
CATALOGキーが使えなくなっていたのを修正しました。
グラフ表示が1ドットずれていたのを修正しました。
v0.40 2015.10.31 Beta (test) version (Interpreter)
- Support of double byte character in input routine, then ? and double byte function can be
used.
- Fixed bug in Edit Screen which [CATALOG] key did not work.
- Fixed bug of interpreter which graph display was out of allighment in 1 dot.

v0.36 2015.10.27 テスト版(インタプリタのみ)
プログラム開始時にグラフィック画面が消去されていたのを修正しました。
v0.36 2015.10.27 Beta (test) version (Interpreter)
- Fixed bug of Interpreter which forced clearing graphics screen at starting of program.


v0.35 2015.10.25 テスト版(インタプリタのみ)
fx-5800P互換コマンド入力でのファンクションキー部分追加しました。
v0.35 2015.10.25 - Beta (test) version (Interpreter)
- Adding function key (F1 - F6) command menu which is avaiable in fx-5800P compatible command
menu.

v0.34 2015.10.25 テスト版(インタプリタのみ)
サブルーチン内でのエラー&ブレークでエディタ画面に上手く戻れないのを修正しました。
            ファイル名入力でのデフォルト入力をALPHAモードにしました。
v0.34 2015.10.25 Beta version (Interpreter)
- Fixed bug of interpreter function which did not properly return back to Edit Screen
in case of ERROR & Break in subroutine.
            - Change of default input mode to ALPHA mode in case of filename input.

v0.33 2015.10.24 テスト版(インタプリタのみ)
ENGモード追加しました。
            MOD()関数のバグ修正しました。
エディタのCopy&Pasteモードのプログラムを走らせた後におかしくなる不具合修正しました。
v0.33 2015.10.24 Beta (test) version (Interpreter)
- Support ENG mode.
            - Bug fix of MOD() function.
- Fixed bug of interpreter function errror which occured in Copy & Paste operation mode.

v0.32 2015.10.20 テスト版(インタプリタのみ)
エディタのカーソル移動をCasioBasic準拠にしました。
エディタのカーソル形状がALPHAモードで変わらなかったバグを修正しました。
v0.32 2015.10.20 Beta (test) verison (Interpreter)
- Modification of cursor positioning in Edit Screen to be compatible with original Casio
Basic.
- Fixed bug of cursor shape change in ALPHA mode which was no changed in ALPHA mode).

v0.30 2015.10.18 テスト版(インタプリタのみ)
ファイルのRenameに対応しました。
エディタにCopy&Paste追加しました
エディタにfx-5800P準拠のコマンド選択画面を追加しました。
v0.30 2015.10.18 Beta (test) version (interpreter)
- Adding file rename function in Edit Screen.
- Adding Copy & Paste function in Edit Screen.
- Adding command menu which is compatible with fx-5800P.

v0.21 2015.10.17 テスト版(インタプリタのみ)
Plotコマンドのみだと画面表示されないバグ解消(^^;
Plotコマンドプログラム終了時の動作改善。
RclPictで11以上が動作しなかったバグの修正。
指数のみ(e10等)形式入力対応。
表示形式のNorm1,Norm2対応。
(Norm 0~15のうち1と2はCasioBasic互換、それ以外は有効桁指定。デフォルトはNorm1。)
?Aコマンド修正しました。
v0.21 2015.10.17 Beta (test) version(Interpreter)
- Fixed bug of Plot command without arguments which won't display cross hair cursor.
- Modification of interpreter function when program ends with Plot command.
- Fixed bug of RclPict command which did not work with argument of 11 or greater.
- Support of input in exponential (only) format (e10, etc).
- Support of Norm 1 and Norm 2.
- Expand Norm x function (x=0 - 15). Norm 1 and 2 is compatible with original Casio Basic,
             others set number of significant figure.
- Bug fix of ?A format command.

v0.20 2015.10.16 テスト版(インタプリタのみ)
Plotコマンドの修正。
Circleコマンド修正。
数値表示修正&桁数指定。(Fix,Sci,Rndコマンド追加)
エディタでキャラクタ選択画面追加。
その他、細かな修正。
v0.20 2015.10.16 Beta (test) version テスト版(Interpreter)
- Bug fix of Plot & Circle command.
- Bug fix of number display.
- New function for digit number setting in Setup screen.
- Support of Fix, Sci, Rnd commands.
- Added character select&input function in Edit Screen.
- Fixed some minor bugs.

v0.10 2015.10.12 テスト版(インタプリタのみ)
v0.10 2015.10.12 Beta (test) version(Interpreter)


Re:Re: アドイン版 C.Basic ver.0.99c テスト版 その9.9c(行列ゼロベース追加版)

管理人様、こんにちは!

>Mat のインデックス範囲を0からに変更できるオプションは、Cライクなプログラミングに役立ちますね。
インデックスに0が使えるということは、0か0でないかの真偽判定をうまく利用してステップ数低減(=スピードアップ)に使えて、ルーチンによってはかなり有用になりそうです。

アドインでC言語を使う場合は0からが基本なので、Matインデックス初期値が0から使えるようになるとアドインで作れるプログラムとの差が速度以外ほぼ無くなりますね。
管理人様のおっしゃるように0か0でないかという判定が使えるようになるので純正CasioBasic以上の利便性が期待できます(^^)



>今は、更新履歴を古い方から英訳しています。
>最初なので、言葉の使い方や定義に関して、ご意見を伺いたいと思います。

英訳、大変お手数おかけしてます。m(_ _)m


>和文で「修正」と書かれている場合でも、純正に合わせるケース、明らかななBug Fix、あるいは利便性を高めるケースなど色々あります。英訳の際には、これらを使い分けて>読みやすくしようと思っています。
>例えば、
>・純正に合わせるような修正は Support
>・C.Basicの利便性を高める機能拡張は Extension Command extensionなど、
>・C.Basic独自機能は、New function (新関数)や New command (新コマンド)、Adding function (インタプリタの新機能)など
>といった感じ...

もう完璧の上に完璧という感じですごいです(^^)


>あと、「テスト版」という表現をお使いですが、ベータ版とは違うといった何かお考えがあれば、お聞かせください。
>作者の拘りは大切なので、できるだけ尊重すべきと思うもので...
>とりあえず、Beta (test) version という表記にはしています。

テスト版はベータ版以前の仕様固めの試行錯誤状態での人柱版という感じだったので、管理人様の表記で無問題というところでしょうか。
Ver.1.00で正式ベータ版という感じでしょうかね(^^;


>で、少しですが、下記をご確認頂いて、特に変更して欲しいという部分があれば、教えてください。それに合わせて、英訳を続けようと思います。あとでまとめて変更するのが大変なもので、チョットお願い...

大変お手数おかけしてます。
何も問題はないと思います(^^)

変更履歴はあらためて振り返ると、最初の頃のバージョンは純正仕様と同じにするための改善という感じだったですね。
そこから新機能追加が始まってきて今に至るですけど、純正CasioBasicと互換仕様部分は特に問題はないのですが、現在のC.Basicでは追加仕様がかなり増えて複雑化してるので、新規追加機能についてはきちっとしたマニュアルを整備しないといけないですね。
今後、デバッグを兼ねて追加仕様のマニュアルを別に書いていってみたいと思います(^^)

Re: Re:Re: アドイン版 C.Basic ver.0.99c テスト版 その9.9c(行列ゼロベース追加版)

sentaro様

テストバージョンとベータバージョンの違いについては、了解しました。

テストバージョンは、いわばアルファバージョンってことですね。そこで、Ver 1.0 までは

Test (alpha) version

と記載することに致します。確認して良かった...(^_^)/


Ver 1.0 以降は、Test (beta) version としましょうか?

いつになったら、正式版になるのか?という突っ込みがありそうですが...(^^;

Re:Re: Re:Re: アドイン版 C.Basic ver.0.99c テスト版 その9.9c(行列ゼロベース追加版)

管理人様、こんにちは!

>テストバージョンは、いわばアルファバージョンってことですね。そこで、Ver 1.0 までは

>Test (alpha) version

>と記載することに致します。確認して良かった...(^_^)/


あ、そうですね、アルファバージョンでした(^^;


>Ver 1.0 以降は、Test (beta) version としましょうか?

はい、Ver.1.0でめでたくベータバージョンってことでお願いします(^^)


>いつになったら、正式版になるのか?という突っ込みがありそうですが...(^^;

潜在バグがありそうなうちは、しばらくはベータバージョンでしょうかね(^^;

要望:Textファイルからbasicファイルへの変換機能

sentaro様

例えば fx-5800P のプログラムを fx-9860GII へ移植する場合、かなり行数の大きなプログラムを入力し直すのは結構大変です。
fx-5800P のプログラムは、Casio Basic入門の記事に掲載したり、プログラムライブラリではPDFで提供しています。これらを 一旦Textファイルにしてから、C.BasicでBasicファイルに変換できると、手間が大幅に削減されます。

そこで、C.Basicに TextファイルからBasicファイルへ変換する機能を追加できませんか?

fx-5800Pで普段使いしている複数のプログラムの中で、特に使用頻度の高い3つほどのプログラムが、そこそこの規模なもので fx-9860GII に移植できていないので、この変換ができると個人的にとても助かるんです。

ご検討、よろしくお願い致します。

アドイン版 C.Basic ver.0.99d テスト版 その9.9d(テキストファイルから変換機能追加版)

管理人様、ガノー様、こんにちは!

テキストファイルとの変換は一方的変換では片手落ちなので早いところ相互変換に対応しないというわけだったのすが、
せっかくなのでfx-CG10/20とfx-FD10Proの変換規則に完全互換にするためにあれこれとちょこっと手間取っていました(^^;

とりあえず、fx-CG10/20でテキストファイルにしたものからの変換は完全互換と思われるのですが、まだ要確認というところです。
fx-FD10Proに関してはfx-9860GII互換の範囲ではたぶんだいじょうぶと思われますがこれは確認のしようがないので未確認です(^^;

ver.0.99cまでのバージョンでのテキスト変換は完全互換ではなかったので、以前のバージョンで変換したテキストファイルは今回のバージョンでは上手くいかない場合がありますので、再度変換お願いします。


>そこで、C.Basicに TextファイルからBasicファイルへ変換する機能を追加できませんか?

ここのところ、その機能の実装であれこれ調整していたので、まさにタイムリーな感じですね(^^)



アドイン版 C.Basic ver.0.99d テスト版 その9.9d(テキストファイルから変換機能追加版)
http://pm.matrix.jp/CB/CBASIC099d.zip

・テキストファイルからC.Basicソースファイルへの変換に対応しました。
 拡張子(.txt)のテキストファイルをストレージメモリ上に置くとファイルリストに表示されてG1Mファイル同様に扱うことが出来ます。
 BasicソースファイルのG1Mファイルは拡張子は表示されませんが、テキストファイルは拡張子(.txt)まで表示されます。
 G1Mファイルと同様にそのまま編集、実行することが可能です。(変換時間が入るので少し時間がかかります。)
 ファイルの変換のみの場合はファイルモードで[F6]+[F1]で変換を開始します。
 テキストファイルの場合はG1Mに、G1Mファイルの場合はテキストファイルに相互変換します。
 コマンドの変換規則はfx-CG20およびfx-FD10Proに準拠しています。

・テキスト変換の兼ね合いでDoコマンドと間違えてしまうためにDotPut,DotGet,DotLifeの各コマンド名をdotPut,dotGet,dotLifeに変更しました。

Re: アドイン版 C.Basic ver.0.99d テスト版 その9.9d(テキストファイルから変換機能追加版)

sentaro様

テキストからBasicファイルへの変換機能、ありがとうございます。

出力命令:◢ が Disps に変換されるのですね。ただ、本来◢のあとは改行になる筈ですが、変換したTextファイルでは改行されていないようです。


早速 fx-5800Pのプログラムを一旦Textファイルにしてから、C.BasicでBasicファイルに変換し、それをメインメモリへ転送して、Casio Basicで動作させることができました。

他にもいくつか変換してみょうと思います。

ありがとうございます。


配布ファイルの構成が変わっていますね。アドインファイルとreadme、マニュアルファイルがソースファイルのフォルダの外側にあって、いよいよベータ版の準備が進んできたという感じです。

マニュアルは、これがあるとユーザーにとても親切ですね。
ただ、英訳する目でみていると、いくつか変更したくなる部分があって、例えば #Log 2 x 100 の説明は、ちょっと手直ししなくなりました。


> ここのところ、その機能の実装であれこれ調整していたので、まさにタイムリーな感じですね(^^)

後は、Windows上で、コード表示されているコードをキャラクタに変換したりするソフトがあれば完璧ですね...
って、実はWindows上でテキストファイルとBasicファイルを変換するソフトを作りかけているのですが、諸般の事情から中断しています。

パスワードとか重要な個人情報を管理している Lotus Organizer というソフトが私にはとても重要でして、そころがMSの開発環境を入れるとOrganizerがエラーになるという問題があって困っています(以前、某所でお話したかと思います...)。

これのために、開発環境をアンインストールしてそのままになっています。なんとかこれを解決して、Windows上の開発環境を再インストールしたいと思っています。

Re:Re: アドイン版 C.Basic ver.0.99d テスト版 その9.9d(テキストファイルから変換機能追加版)

管理人様、こんにちは!

>出力命令:◢ が Disps に変換されるのですね。ただ、本来◢のあとは改行になる筈ですが、変換したTextファイルでは改行されていないようです。

これはCG10での変換を確認したのですが、テキスト化で改行されないのがCasioの仕様みたいです。
これは純正仕様がバグなのかもしれないのですが、改行するように変更しましょうか?(^^;


>早速 fx-5800Pのプログラムを一旦Textファイルにしてから、C.BasicでBasicファイルに変換し、それをメインメモリへ転送して、Casio Basicで動作させることができました。

上手くいったみたいでよかったです(^^)


>配布ファイルの構成が変わっていますね。アドインファイルとreadme、マニュアルファイルがソースファイルのフォルダの外側にあって、いよいよベータ版の準備が進んできたという感じです。

ファイルがかなり増えてきてしまったので使用する上で必要なファイルが分かりやすいようにフォルダレベルを変更してみました(^^)


>マニュアルは、これがあるとユーザーにとても親切ですね。
>ただ、英訳する目でみていると、いくつか変更したくなる部分があって、例えば #Log 2 x 100 の説明は、ちょっと手直ししなくなりました。

マニュアルはまだベータ版のベータ版のベータ版みたいなところありますので、かなり要修正なのでよろしくお願いいたします(^^;


>後は、Windows上で、コード表示されているコードをキャラクタに変換したりするソフトがあれば完璧ですね...
>って、実はWindows上でテキストファイルとBasicファイルを変換するソフトを作りかけているのですが、諸般の事情から中断しています。

電卓の内部キャラコードは似てる全角コードに変換できれば良さそうですね。

Re: Re:Re: アドイン版 C.Basic ver.0.99d テスト版 その9.9d(テキストファイルから変換機能追加版)

sentaro様


1つご確認頂きたいのですが、Win上のTextエディタで書いたコードで、

If V=0:Then

という時、bsicファイルに変換した際に Then がコマンドとして認識されないというケースに出くわしました。

If V=0
Then

の場合でも、コマンドに変換しきれないことがありました。

Elseもコマンドに変換しきれないことがあるようです。

さらに、Int、Frac 、log などの変換に失敗する(100%ではありませんが...)こともあるようです。

調べた限りは、テキストファイルで全角(2バイト)文字にはなっていないようです。


ご検討頂けませんか?


変換規則について。

管理人様、こんにちは!

変換で失敗する場合はコマンド前後にスペースが足りない場合ではないでしょうか?
純正の変換規則では、コマンド前後にスペースが入るコマンドは、テキストでもその箇所に半角スペースが必須になっています。

例えば
If
Then
Else
はコマンド後にスペースが付随してますが、
EndIfは付随してません。

この場合、変換前のテキストでも
If□
Then□
Else□
というようにコマンド後に半角スペースが必須です。

コマンドを一行で記述する場合は普通にスペースを入れるので問題は起きなくても、コマンドで行末になるとスペースを入れない場合も多いので、たぶんそこではないかと思われます。


>さらに、Int、Frac 、log などの変換に失敗する(100%ではありませんが...)こともあるようです。

すべてスペースが付くコマンドなので
Int(A+1)
等にすると変換されないので、
Int□(A+1)
とする必要ありです。

純正の変換仕様はちょっと融通の利かない感じですが、電卓エディタ上での表記そのままにテキストでも記述する必要があるということですね。

もし、スペースが付いていても変換できないコマンドがありましたら、そのコマンドの含まれるテキストコードをお知らせくださいませ。

出力命令:◢ に関してはテキスト化で改行が余分に入ったとしても改行される方が見やすいと思われるので修正してみます(^^)

Re: 変換規則について。

sentaro様

> 変換で失敗する場合はコマンド前後にスペースが足りない場合ではないでしょうか?
> 純正の変換規則では、コマンド前後にスペースが入るコマンドは、テキストでもその箇所に半角スペースが必須になっています。

これは、おっしゃる通りでえした。
今のところ例外には行き当たっておりません。

例えば Intは、後ろにスペースが入り、カッコを付ける場合はスペースの後に ( が入ります。
画面でソースを見る場合は、fx-5800P のように Int( とカッコがスグにこないので見づらく、どうにも気に入らない仕様ですが、なるほどテキストへの変換を考えると必要な仕様なんだと改めて理解したところです。


> もし、スペースが付いていても変換できないコマンドがありましたら、そのコマンドの含まれるテキストコードをお知らせくださいませ。

はい、気をつけて移植作業を進めますね。



> 出力命令:◢ に関してはテキスト化で改行が余分に入ったとしても改行される方が見やすいと思われるので修正してみます(^^)

本体上では◢の後には強制的に改行が入りますよね。fx-9860GIIの g1mファイルを FA-124A で表示させる場合は、◢の後は改行されています。なので、fx-CG10用のソフトのバグの可能性を疑わしいかも...

ここは、ご提案のようにして頂くのに1票です(^_^)/


いよいよ、fx-5800P 形式をテキスト化した場合、それを fx-9860GII / fxCG10 形式へ自動変換する Windowsソフトが欲しくなってきました....って、早く作れよ..という話ではありますが...



アドイン版 C.Basic ver.0.99e テスト版 その9.9e(テキストファイルから変換機能若干手直し版)

管理人様、こんにちは!

>例えば Intは、後ろにスペースが入り、カッコを付ける場合はスペースの後に ( が入ります。
>画面でソースを見る場合は、fx-5800P のように Int( とカッコがスグにこないので見づらく、どうにも気に入らない仕様ですが、なるほどテキストへの変換を考えると必要な仕様なんだと改めて理解したところです。

C.Basic上だけでもfx-5800P仕様の表記にすることは可能なのですが、そうするとfx-9860GII仕様での、
Int A+B
という式は、
Int(A+B
となって式の意味が違ってきてしまいます。
fx-5800P仕様だと
Int(A)+B
としなければいけなくなるのでコマンドの表記をカッコ付きに変えただけだとNGですね。
C言語との親和性を考えるとカッコが付くfx-5800P仕様が分かりやすく見やすいのは間違いないところですが、C.Basicが純正Basicの互換仕様となっているる以上は致し方ないところでしょうかね(^^;

ということで、言語仕様的には仕方ない状況なので、テキスト変換だけでもfx-5800P仕様のスペース無し記述でも認識されるように手直ししてみました。
Int(A+1)
とういう記述でも
Int□(A+1)
という感じできちんとfx-9860GII仕様でコマンドに変換されます。
あと、ThenとかElseでもコマンド後のスペースが無い場合でもOkにしました。
これらはfx-CG10/20やFD10Proでは上手く認識されない仕様ですが、fx-5800P仕様も取り入れるC.Basicだけのテキスト変換の特徴ということで(^^)


>本体上では◢の後には強制的に改行が入りますよね。fx-9860GIIの g1mファイルを FA-124A で表示させる場合は、◢の後は改行されています。なので、fx-CG10用のソフトのバグの可能性を疑わしいかも...
>ここは、ご提案のようにして頂くのに1票です(^_^)/

ってことで、出力命令:◢の直後が改行ではない場合のみ、テキストへの変換では改行を追加する仕様に変更しました。

テキストからBasicへの変換は改行はそのままなので、相互に変換を繰り返すと改行がどんどん増え続ける、ということはなく出力命令:◢の直後に改行がひとつ余分に増えるだけです(^^;


>いよいよ、fx-5800P 形式をテキスト化した場合、それを fx-9860GII / fxCG10 形式へ自動変換する Windowsソフトが欲しくなってきました....って、早く作れよ..という話ではありますが...

今回の変更でほぼそのまま変換できるでしょうか?(^^)
Windows版変換ソフトはC.Basic内蔵の変換プログラム部分を流用すればサクッと出来そうなのですが、今のところWindowsソフト作成環境を構築してないのでこれは一から始めないといけません(^^;


アドイン版 C.Basic ver.0.99e テスト版 その9.9e(テキストファイルから変換機能若干手直し版)
http://pm.matrix.jp/CB/CBASIC099e.zip

・Basic→テキスト変換時に一時出力命令は"Disps"に変換されますが改行はされないので、改行(CR,LF)を追加するようにしました。
 ただし、一時出力命令の次が改行の場合は改行(CR,LF)を追加しません。
・テキスト→Basic変換時に、コマンド後に空白が必要なコマンドがありますが、空白が無くても変換できるようになりました。
 すべてのコマンドには対応していません。次のコマンドのみ空白無し変換に対応です。
 Then    Abs    sin   sinh
 Else    Int    cos   cosh
 Default   Frac   tan   tanh
 Save    Log    sin^-1  sinh^-1
 Plot    ln    cos^-1  cosh^-1
 Prog    Sqrt   tan^-1  tanh^-1

Re: アドイン版 C.Basic ver.0.99e テスト版 その9.9e(テキストファイルから変換機能若干手直し版)

sentaro様


> C.Basic上だけでもfx-5800P仕様の表記にすることは可能なのですが、そうするとfx-9860GII仕様での、
> Int A+B
> という式は、
> Int(A+B
> となって式の意味が違ってきてしまいます。
> fx-5800P仕様だと
> Int(A)+B
> としなければいけなくなるのでコマンドの表記をカッコ付きに変えただけだとNGですね。

この仕様は、初めてfx-9860GII でプログラムを書いた時悩みました。なので B+Int A なんて書いたりしたものです。
カッコを使えばその分動作が遅くなるわけで fx-5800Pではそれが顕著でしたが、fx-9860GIIではそれほど気にすることでもないし、C.Basicでは無視しても良いくらいですから、意図的にカッコを使う記法を使うようにしています。


> C言語との親和性を考えるとカッコが付くfx-5800P仕様が分かりやすく見やすいのは間違いないところですが、C.Basicが純正Basicの互換仕様となっているる以上は致し方ないところでしょうかね(^^;

互換性については C.Basicの一番の肝の部分ですから、悩ましいです。
sentaro様の頭の中では fx-CG10への展開を常に意識されていると思うのですが、テキストに書き出す際には対応機種名がコメントアウトするように出来れば間違い無く、FtuneとPtuneのように C:Basicそのものをそれぞれ専用に準備するのが良いように思います。

但し、C:Basicで機種の判別が出来るかどうかで、自動化するのか、ユーザーが正しいバージョンを選択することに依存するかの違いは出てくると思いますけど、機種の判別が例えば CPU情報から得られるかどうか、その当たりはどうなんでしょうか?



> ということで、言語仕様的には仕方ない状況なので、テキスト変換だけでもfx-5800P仕様のスペース無し記述でも認識されるように手直ししてみました。
> Int(A+1)
> とういう記述でも
> Int□(A+1)
> という感じできちんとfx-9860GII仕様でコマンドに変換されます。
> あと、ThenとかElseでもコマンド後のスペースが無い場合でもOkにしました。

ありがとうございます。試してみようと思います。

実は、今 fx-5800Pからfx-9860GIIへのテキスト変換機能を使った移植の記事を書き始めています。

C.Basicの新機能のアピールの意味もありますが、fx-5800Pユーザーが fx-9860GII で C.Basicを使う際の敷居が下がる可能性があるかも知れないと思っています。だから記事にしてみようと...


> これらはfx-CG10/20やFD10Proでは上手く認識されない仕様ですが、fx-5800P仕様も取り入れるC.Basicだけのテキスト変換の特徴ということで(^^)

fx-CG10/20の仕様に併せて FD10 Proに実装したということなんでしょうかね?FD10 Proは、内部はfx-9860GIIそのものですからチョット触ってみたいとは思いますが...そもそも FD10 Proは外部アドインを使わせない仕様ですから C:Basic では fx-CG10/20 対応のみを念頭に置かれることになろうかと...



> ってことで、出力命令:◢の直後が改行ではない場合のみ、テキストへの変換では改行を追加する仕様に変更しました。

Basicファイル上では、◢の直後は必ず改行になると思います。上で言われているのは、ひょっとして◢の後ろに改行コードが付いていないということでしょうか?

Basicファイルからテキストへの変換時には、◢ 文字の後に強制的に 0x0d0x0a を付加するのでよいように思うのですが、◢コードには何か特殊性があるのでしょうか?


> テキストからBasicへの変換は改行はそのままなので、相互に変換を繰り返すと改行がどんどん増え続ける、ということはなく出力命令:◢の直後に改行がひとつ余分に増えるだけです(^^;

今度ソースファイルをじっくりと拝見しようと思います。



> 今回の変更でほぼそのまま変換できるでしょうか?(^^)

きちんと記事が書ける程度には確認させて頂きますね。


> Windows版変換ソフトはC.Basic内蔵の変換プログラム部分を流用すればサクッと出来そうなのですが、今のところWindowsソフト作成環境を構築してないのでこれは一から始めないといけません(^^;

ふむ、sentaro様が Win用開発環境をインストールされたら、一気にできてしまいそうですね。
エディタソフトそのものは、例えばMFCを使えば、数十行書くだけで(十数行と書くとウソになるので...)基本的なエディタ機能を実装出来てしまいます。過去に自分のシェアウェア専用のエディタを作ったことがあり時の記憶ですが...なので、コード変換機能の実装に集中して効率よく作れると思います!

お気に入りの順序変更について

sentaro様

テキスト変換機能を使って、fx-5800Pの中規模の(サブルーチン5つを含めて265行程度、合計 2.7KB程度の)プログラムを fx-9860GII へ移植しました。

このプログラムは配列変数を使っていないので、Casio Basicの仕様上の変更として、キーコードの変換と◢に伴う -DISP- 表示の悪影響によりLocate の第2引数を1行分下げる変更のみで、簡単なものです。

ここでは C.Basic Ver0.99d (最新の 0.99e でない)を使ったので、一番労力が必要だったのは、テキストレベルで若干の半自動的な修正作業でした。

変換対象は目で見つけて、変換はNotePadの置換機能を利用、さらにテキストで落とされる特殊文字のコード化作業が必要でした。

しかし、一から手で入力するのと比べて遙かに速くかつ確実に移植が出来ることを、実感しました。

最新の Ver 0.99e で是非同じ作業をして、利便性の向上を実感したいと思います。それを記事にする予定です。

前置きが長くなりましたが、懸案の移植が済んだので、C.Basicのお気に入りに入れました。新たに追加するとお気に入りリストの一番下に追加されます。これをお気に入りの一番上に移動させようとしました。

そして、追加した一番最後にカーソルを合わせ、[F4] (Fv.↑) を押しても上に上がらないのです。

そこで、下から2つめを [F5] (Fv.↓)で下に移動させれば、あとは目的のプログラム名にカーソルを合わせ直して、[F4](Fv.↑) で一番上まで移動できました。

お気に入りリストの一番下を、上に移動できないのは仕様なのでしょうか?

お久しぶりです。

TO:管理人様、sentaro様

管理&開発お疲れ様です。C.Basicの変化が凄いですね。まだ4月までヤバイ感じですが、ぼちぼち触っていきたいと思います。テキスト対応、ワクワクしています。

以上、今回はご連絡だけで失礼致します。

P.S.忙しいのでtwitterを退会いたしました。復帰時には改めてフォローさせて頂きます。

Ver.0.99e差し替えです(^^;

管理人様、ガノー様、こんにちは!

>sentaro様の頭の中では fx-CG10への展開を常に意識されていると思うのですが、テキストに書き出す際には対応機種名がコメントアウトするように出来れば間違い無く、FtuneとPtuneのように C:Basicそのものをそれぞれ専用に準備するのが良いように思います。

CG10/20への移植に関しては、CG10/20の開発環境がいまいち整っていないこともあってほとんど進んでいません(^^;
Ftune2の時はfx-CG10からの移植だったので割と楽だったですけど、今回はそう簡単にはいかなそうです(^^;
CG10/20に移植する場合は、おっしゃるようにアドインも専用版になりますし、テキスト変換もそれに合わせた拡張は必須ですね。


>但し、C:Basicで機種の判別が出来るかどうかで、自動化するのか、ユーザーが正しいバージョンを選択することに依存するかの違いは出てくると思いますけど、機種の判別が例えば CPU情報から得られるかどうか、その当たりはどうなんでしょうか?

fx-9860Gシリーズでも詳細な個別の機種判別が出来るみたいなので、機種判別は特に問題無さそうです。


>実は、今 fx-5800Pからfx-9860GIIへのテキスト変換機能を使った移植の記事を書き始めています。
>C.Basicの新機能のアピールの意味もありますが、fx-5800Pユーザーが fx-9860GII で C.Basicを使う際の敷居が下がる可能性があるかも知れないと思っています。だから記事にしてみようと...

マニュアルだけ見るとよく分からないところも管理人様やガノー様の実践的な記事や動画で一目瞭然に分かりやすくなるのがよいですね(^^)
いつもありがとうございます!!


>fx-CG10/20の仕様に併せて FD10 Proに実装したということなんでしょうかね?FD10 Proは、内部はfx-9860GIIそのものですからチョット触ってみたいとは思いますが...そもそも FD10 Proは外部アドインを使わせない仕様ですから C:Basic では fx-CG10/20 対応のみを念頭に置かれることになろうかと...

FD10Proはハード的にはほぼfx-9860GIIなのでアドインが使える仕様であればC.Basicが載せられてもっと面白い電卓になったはずなので惜しいですね。
ハード的に差があるfx-CG10/20に比較すると、fx-FD10Proへの移植は限りなく簡単だと思われるだけにもったいないなと思います。
私的にはアドインが使えるかどうかというのが大きな購入動機になるので、ここはぜひ公式に(非公式でも)アドインが使えるようにして欲しいところではあります(^^;

FD10Proのテキスト変換は変換規則を見る限りではCG10/20とそっくりなので相互にプログラムソースを使い回し出来る互換仕様ですね。
プログラムの使い回しということだけならCG10/20となら直接3ピンケーブル繋いで直接転送するのが一番手っ取り早いのですが、FD10Proには3ピンがないみたいなのでテキストファイル互換は重要になってきますね(^^;

純正CasioBasicはCG10/20とFD10Proと一貫して互換性が確保されているのでテキストファイルも互換性確保路線で、さらにC.Basic独自の拡張仕様を追加する形で今は実装しています。
テキスト変換はC.Basicサポートコマンドだけでなくfx-9860GII(とCG10/20)の全コマンドに対応しているので純正CasioBasicのテキスト変換ツールとしてだけ使うことも出来ます(^^;


>Basicファイル上では、◢の直後は必ず改行になると思います。上で言われているのは、ひょっとして◢の後ろに改行コードが付いていないということでしょうか?

はい、その通りです(^^;
Basicファイル内での内部コードでは0x0Cの1バイトのみで改行コードは付随してませんので、エディタ上で改行させて表示される仕様となってます。


>Basicファイルからテキストへの変換時には、◢ 文字の後に強制的に 0x0d0x0a を付加するのでよいように思うのですが、◢コードには何か特殊性があるのでしょうか?

強制的に付加すると再度テキスト→Basic変換させた場合には、改行コードが最初から存在していたものか強制付加されたものか判別できないので、相互変換する度にどんどん改行コードが増えてしまいます(^^;
そのために◢の次が改行だった場合は改行コードを付加させないようにしました。


>ふむ、sentaro様が Win用開発環境をインストールされたら、一気にできてしまいそうですね。
>エディタソフトそのものは、例えばMFCを使えば、数十行書くだけで(十数行と書くとウソになるので...)基本的なエディタ機能を実装出来てしまいます。過去に自分のシェアウェア専用のエディタを作ったことがあり時の記憶ですが...なので、コード変換機能の実装に集中して効率よく作れると思います!

それでは、Win用開発環境を…とりあえずインストールしてみます(^^;


>お気に入りリストの一番下を、上に移動できないのは仕様なのでしょうか?

あ゛…それ思いっきりバグ仕様です(^^;
お気に入り実装した当初はバグってなかったはずなので、いつからなのかと調べたらVer.0.97以降からバグ仕様になっていたのでサクッと修正しました(^^;



>管理&開発お疲れ様です。C.Basicの変化が凄いですね。まだ4月までヤバイ感じですが、ぼちぼち触っていきたいと思います。テキスト対応、ワクワクしています。

テキスト対応はもっと早くに実装しておくべきだったと思われるのですけど、やっとこ使える状態になりました。
変換規則は若干クセがありますので、CG10/20かFD10Proのマニュアルのテキスト変換の項目を参照されて下さい。
何か気がついた点、バグ、追加機能のご要望などありましたらまたどんどんお願いします(^^)



機能的変更部分が無いので0.99eを差し替えアップしました。

アドイン版 C.Basic ver.0.99e テスト版 その9.9e(テキストファイルから変換機能若干強化版+)
http://pm.matrix.jp/CB/CBASIC099e.zip

・お気に入りリストの一番下から上に移動できなくなっていたのを修正しました。
・テキスト変換の兼ね合いでDoコマンドと間違えてしまうためにDotPut,DotGet,DotLifeの各コマンド名をdotPut,dotGet,dotLifeに変更していたのを元に戻しました。

Re: Ver.0.99e差し替えです(^^;

sentaro様

テキスト変換で、スペース対応をして頂いたおかげで、手間が劇的に減って、大変便利になりました。

お気に入りの修正も確認しました。

ありがとうございます。


ところで、テキスト読み込みの際に空白処理をする前のバージョンで、正しくコマンドにならず単なる文字列になっていたコードで、デバッグをしながら文字列を正しいコマンドに置き換える作業を、C.Basic上で行っていた時、チョクチョクフリーズしたり、リセットかリスタートを要求されることがありました。

空白処理に対応したバージョンでは、フリーズが無くなっています。これはまぁ、当然のことですが、一応報告まで...
なお、「▶」などの特殊記号がソースに残っている時にどうなるかは、まだあまり試していません。
何か出てきたら、報告致します。

1つ質問があります。
変数一覧表示において、ローカル指定したものが、ローカルであることが分かれば便利だと思うのですが、如何でしょうか?

アドイン版 C.Basic ver.0.99f テスト版 その9.9f(変数一覧表示ローカル変数区別版)

管理人様、こんにちは!

>テキスト変換で、スペース対応をして頂いたおかげで、手間が劇的に減って、大変便利になりました。

普通の言語で必要の無いところにスペースをいちいち入れないといけないというのは結構面倒ですよね(^^;


>ところで、テキスト読み込みの際に空白処理をする前のバージョンで、正しくコマンドにならず単なる文字列になっていたコードで、デバッグをしながら文字列を正しいコマンドに置き換える作業を、C.Basic上で行っていた時、チョクチョクフリーズしたり、リセットかリスタートを要求されることがありました。
>空白処理に対応したバージョンでは、フリーズが無くなっています。これはまぁ、当然のことですが、一応報告まで...
なお、「▶」などの特殊記号がソースに残っている時にどうなるかは、まだあまり試していません。

エディタは想定外のコードがあった場合は怪しい動作になることがあるので、まだまだ微調整というかバグ出しが必要です(^^;


>変数一覧表示において、ローカル指定したものが、ローカルであることが分かれば便利だと思うのですが、如何でしょうか?

以前から実装しようと思って後回しになってました(^^;
とりあえず、ローカル変数の場合には=を反転表示することで見分けられるようにしてみました。



アドイン版 C.Basic ver.0.99f テスト版 その9.9f(変数一覧表示ローカル変数区別版)
http://pm.matrix.jp/CB/CBASIC099f.zip

・変数一覧表示にて通常グローバル変数とローカル変数を区別することが出来るようになりました。
 ローカル変数は=が反転キャラクター表示されます。

・数式でのMat行列の表記において、Matを省略することが出来るようになりました。
(例)A[X]+B[Y]→X[Z]
 Mat A[X,1]+Mat B[Y,1]→X[Z,1]と同じになります。

 

Re: アドイン版 C.Basic ver.0.99f テスト版 その9.9f(変数一覧表示ローカル変数区別版)

sentaro様

> 普通の言語で必要の無いところにスペースをいちいち入れないといけないというのは結構面倒ですよね(^^;

そうなんです。

> エディタは想定外のコードがあった場合は怪しい動作になることがあるので、まだまだ微調整というかバグ出しが必要です(^^;

これは、仕方ない部分はあって、C.Basicで全部対応するのは大変だと思います。


> とりあえず、ローカル変数の場合には=を反転表示することで見分けられるようにしてみました。

ありがとうございます。


> ・数式でのMat行列の表記において、Matを省略することが出来るようになりました。
> (例)A[X]+B[Y]→X[Z]
>  Mat A[X,1]+Mat B[Y,1]→X[Z,1]と同じになります。

fx-5800Pの配列変数は、Z[] と書けたのに、fx-9860GII に移植すると、Mat Z[] といちいち記述しなければならないのは、移植のストレスの1つでした。でも要望するのを忘れていたので、とてもありがたいです。

C.Basicのコンセプトの1つである、fx-5800Pの良いところを採用するという点で、大正解だと思います。

Re:Re: アドイン版 C.Basic ver.0.99f テスト版 その9.9f(変数一覧表示ローカル変数区別版)

管理人様、こんにちは!

>これは、仕方ない部分はあって、C.Basicで全部対応するのは大変だと思います。

本体だけで操作する場合に不具合が出ると困るところですけど、テキスト変換も本体内蔵している以上は、本体での不具合発生は出来るだけ根絶していかないとですね(^^;


>fx-5800Pの配列変数は、Z[] と書けたのに、fx-9860GII に移植すると、Mat Z[] といちいち記述しなければならないのは、移植のストレスの1つでした。でも要望するのを忘れていたので、とてもありがたいです。
>C.Basicのコンセプトの1つである、fx-5800Pの良いところを採用するという点で、大正解だと思います。

グラフ電卓のCasioBasicでは配列が存在しないというのがfx-5800Pとの大きな違いだったので、fx-5800Pの良いとこ取りのC.Basicとしてはこれでやっと配列表記の互換性が確保できます(^^)
まだfx-5800PのCasioBasicの全機能の完全上位互換とはいえないので、実装しておいた方がよい機能がありましたらよろしくお願いします。

Re: Re:Re: アドイン版 C.Basic ver.0.99f テスト版 その9.9f(変数一覧表示ローカル変数区別版)

sentaro様


> >fx-5800Pの配列変数は、Z[] と書けたのに、fx-9860GII に移植すると、Mat Z[] といちいち記述しなければならないのは、移植のストレスの1つでした。でも要望するのを忘れていたので、とてもありがたいです。
> >C.Basicのコンセプトの1つである、fx-5800Pの良いところを採用するという点で、大正解だと思います。
>
> グラフ電卓のCasioBasicでは配列が存在しないというのがfx-5800Pとの大きな違いだったので、fx-5800Pの良いとこ取りのC.Basicとしてはこれでやっと配列表記の互換性が確保できます(^^)
> まだfx-5800PのCasioBasicの全機能の完全上位互換とはいえないので、実装しておいた方がよい機能がありましたらよろしくお願いします。

fx-5800P で配列変数の領域確保のための記法 50->DimZ がありますが、これを許す機能の追加は如何でしょうか?
C.Basic ではZ 以外の強烈変数も使えることあkら、50->DimA 或いは 10->Dim A といった記法も許すというアイディアです。

この場合、Dim と A の間にスペースを要求しなければ fx-5800P 完全互換になりますが、ここは動作速度の犠牲の少ない方を採用よいうことでどうでしょうか?

ご参考までに、fx-5800P の配列変数のコマンドリファレンスは以下です;
http://egadget.blog.fc2.com/blog-entry-104.html


アドイン版 C.Basic ver.0.99g テスト版 その9.9g(バグ修正&fx-5800P配列仕様取り込み版)

管理人様、こんにちは!

>fx-5800P で配列変数の領域確保のための記法 50->DimZ がありますが、これを許す機能の追加は如何でしょうか?

了解です(^^)

>C.Basic ではZ 以外の強烈変数も使えることあkら、50->DimA 或いは 10->Dim A といった記法も許すというアイディアです。
>この場合、Dim と A の間にスペースを要求しなければ fx-5800P 完全互換になりますが、ここは動作速度の犠牲の少ない方を採用よいうことでどうでしょうか?

C.Basic上では内部コードの都合上スペースのくっついたDim Aをそのまま使うことにして、テキスト変換ではスペースのないDimA仕様でもいけるようにしました。

管理人様のfx-5800Pサンプルプログラム
<フィボナッチ数列の1項から50項までの総和を計算する事例>
でテキスト変換と実行が出来ることを確認済みです(^^)


アドイン版 C.Basic ver.0.99g テスト版 その9.9g(バグ修正&fx-5800P配列仕様取り込み版)
http://pm.matrix.jp/CB/CBASIC099g.zip

・fx-5800P同様の配列初期化コマンドが使えるようになりました。
(例)100→Dim Z
 {100,1}→Dim Mat Z
 と同じになります。
(例)0→Dim Z
 ClrMat Zと同じです。

 テキストからの変換ではfx-5800P同様に
 100→DimZ
 と記述してもOkです。

・プログラム読み込み時にメモリが足りないエラー&サブルーチンが見つからない場合のエラー処理が上手くいってなかったのを修正しました。

0.99g 差し替えです(^^;

>・プログラム読み込み時にメモリが足りないエラー&サブルーチンが見つからない場合のエラー処理が上手くいってなかったのを修正しました。

ここにバグが残っていたために修正です(^^;

Re: 0.99g 差し替えです(^^;

sentaro様

拡張配列変数の導入は、インパクトが大きいと思います(^_^)/
過去に作った fx-5800P のプログラムの移植がかなり楽になります。

プログラム電卓の投票は、今のところ fx-5800P が第一位になっていて、fx-9860GII 2 が1票差で迫っています。
C.Basic が fx-5800Pからの移植性が上がれば、fx-9860GII (価格の問題はありますが...)に興味を持つ人が増えるのではないかと思えます。


> >・プログラム読み込み時にメモリが足りないエラー&サブルーチンが見つからない場合のエラー処理が上手くいってなかったのを修正しました。
>
> ここにバグが残っていたために修正です(^^;

開発を始める前には、プログラムサイズがメモリに収まらないと難しいということを言われていましたが、見事に解決されていますよね。カナの扱いなども含めて、当初は難しいと考えられたことが、今は次々に実現されてきています。

コンパイラ版の期待も大きいところですね。

No title

管理人様、こんにちは!

>拡張配列変数の導入は、インパクトが大きいと思います(^_^)/
>過去に作った fx-5800P のプログラムの移植がかなり楽になります。

fx-9860GIIの場合、Mat行列かリストを配列として代用しなければならないのでプログラムリストが冗長になるのが大きな欠点でしたけど、C.Basicで普通に配列のように使えるようになったので、配列に関してもやっとfx-5800Pとの差異を無くすことが出来ました(^^)


>プログラム電卓の投票は、今のところ fx-5800P が第一位になっていて、fx-9860GII 2 が1票差で迫っています。
C.Basic が fx-5800Pからの移植性が上がれば、fx-9860GII (価格の問題はありますが...)に興味を持つ人が増えるのではないかと思えます。

今見ると3票差でまた引き離してますね(^^;
fx-5800Pのプロ電としての完成度の高さが伺えます(^^)
C.Basicがfx-5800Pのいいとこ取りをしてきたことは大正解だったと思うところですけど、ここまで来ると3ピンケーブルで直接転送できればさらに便利にというところですが、fx-5800P側がブラックボックスなのが難点でしょうか。


>開発を始める前には、プログラムサイズがメモリに収まらないと難しいということを言われていましたが、見事に解決されていますよね。カナの扱いなども含めて、当初は難しいと考えられたことが、今は次々に実現されてきています。

アドインとしてのファイルサイズは初期予想ではインタプリタ段階で100KBくらいかなと想像していたのですが、現在インタプリタで200KBを超えてしまいました(^^;
ま、それだけ多機能化してきたことの証なのですが、最初の頃には難しく思われた部分での拡張が実現できたのも管理人様やガノー様の貴重なアドバイスのおかげです(^^)


>コンパイラ版の期待も大きいところですね。

まだちょっと怪しげなバグが出ることがあるので(^^;それらのバグ潰しとともにコンパイラ実装に向けての実験を進めていってみたいと思います。

アドイン版 C.Basic ver.0.99h テスト版 その9.9h(バグ修正+α版)

管理人様、ガノー様、こんにちは!

ちょこちょこと潜在バグが露見してきましたので修正です(^^;

あと、エディタで現在位置が分かりやすいように右端にマーカー表示するようにして、RoolUpとRoolDown機能を追加してみました。


アドイン版 C.Basic ver.0.99h テスト版 その9.9h(バグ修正+α版)
http://pm.matrix.jp/CB/CBASIC099h.zip

・ファイルリスト読み込み時にポップアップ&右上ビジーマーカー表示を追加しました。

・エディタでファイルの現在位置を示すガイドマーカーを右端に追加しました。
・エディタの検索の最後でフリーズすることがあるバグを修正しました。
・エディタでRollUp,RollDown機能追加しました。
 [SHIFT]+{UP]  50行程RollUpします。
 [SHIFT]+[DOWN] 50行程RollDownします。

・カッコ同士の乗算と関数の組み合わせがエラーになっていたバグを修正しました。
(例) (1+2)(3+4)^3

・グラフ表示で画面外に出てしまうグラフが描画されないバグを修正しました。

Re: アドイン版 C.Basic ver.0.99h テスト版 その9.9h(バグ修正+α版)

sentaro様

ちょっとバタバタしていました。


> ちょこちょこと潜在バグが露見してきましたので修正です(^^;

こういうのが、大変ですが重要ですよね。

ありがとうございます。

より安定したバージョンということで、以下では、Ver 0.99h に変更しました。
http://egadget.blog.fc2.com/blog-entry-495.html

e-Gadgetでは、ここのコメント欄と、上記のページからのみ C.Basicをダウンロードできるようにしています。
上記を更新するだけで済むようにしている訳でです。

なお、まだ 0.99h を試していないので、本来のポリシーには逆らうのですが、利便性を考えて問題ないだろうということで更新しました...


> あと、エディタで現在位置が分かりやすいように右端にマーカー表示するようにして、RoolUpとRoolDown機能を追加してみました。

これ、試してみるのが楽しみです(^_^)/

RollUp/RollDown の行数ですが、Cのソースでグローバル変数にすることで、Setup画面で行数を変更し保存できると良いような気がしています。1画面分のスクロールが良いと思うケースもありそうな気もするので...

実際に使ってみて、改めてレポートいたします。



アドイン版 C.Basic ver.0.99i テスト版 その9.9i(PageUp/Down任意設定に変更版)

管理人様、おつかれさまです。

>より安定したバージョンということで、以下では、Ver 0.99h に変更しました。
http://egadget.blog.fc2.com/blog-entry-495.html

毎度お手数おかけしてます。
今のところは致命的なバグは無さそうですが、ひょんなところからバグが見つかるので油断できません(^^;


>これ、試してみるのが楽しみです(^_^)/

CG10/20には右端にスクロールバーがあって現在位置が分かりやすいのでちょこっと取り入れてみました。
といっても全体の中で現在位置が把握出来るだけなのでCG10/20のようなスクロールバーではないです(^^;


>RollUp/RollDown の行数ですが、Cのソースでグローバル変数にすることで、Setup画面で行数を変更し保存できると良いような気がしています。1画面分のスクロールが良いと思うケースもありそうな気もするので...

RollUp/RollDownする行数はどのあたりが適当なのかちょっと悩んだところなので任意に変更出来た方が確実によいですね(^^)
ってことで、セットアップで1ページ(6行)単位で任意変更できるようにしてみました。



アドイン版 C.Basic ver.0.99i テスト版 その9.9i(PageUp/Down任意設定に変更版)
http://pm.matrix.jp/CB/CBASIC099i.zip

・エディタのRollUp/Down機能をPageUp/Down機能に名称変更しました。
・セットアップにて一度の改ページ数を1ページ(6ライン)単位で自由に設定可能になりました。
 [SHIFT]+{UP]   指定ページ数PageUpします。
 [SHIFT]+[DOWN]  指定ページ数PageDownします。

Re: アドイン版 C.Basic ver.0.99i テスト版 その9.9i(PageUp/Down任意設定に変更版)

sentaro様

EDIT画面での現在位置の表示は、地味ですが役立ちますね。

ページ単位でスクロールのスキップを設定できるのも分かり易くて、迷わず使えるのが気に入りました。
ある程度の行数のプログラムでは、とてもありがたいです。

次のバージョンアップの際には、以下もご検討頂けると良いかな、と思います。
・[SHIFT][->]でより大きなスキップ量で下にスクロール
・[SHIFT][<-]でより大きなスキップ量で上にスクロール

「より大きなスキップ量」は思案のしどころですが、デフォルトで PageUp/PageDown の2倍あたりでどうでしょうか?
これもSetupで設定変更できるようにすれば良いと思います。

ところで、Setup ページでの PageUp/PageDown の表記ですが、

PageUp/PageDownN

と最後に大文字の N が付いているのは、何かわけでもあるのでしょうか?

もしついつい余計についていたというのなら、サクッと Ver 0.99i の更新をなさっては如何でしょうか?


Re:Re: アドイン版 C.Basic ver.0.99i テスト版 その9.9i(PageUp/Down任意設定に変更版)

管理人様、こんにちは!

>EDIT画面での現在位置の表示は、地味ですが役立ちますね。
>ページ単位でスクロールのスキップを設定できるのも分かり易くて、迷わず使えるのが気に入りました。
>ある程度の行数のプログラムでは、とてもありがたいです。

そう言っていただけると機能追加した甲斐がありますね。
ありがとうございます(^^)


>次のバージョンアップの際には、以下もご検討頂けると良いかな、と思います。
>・[SHIFT][->]でより大きなスキップ量で下にスクロール
>・[SHIFT][<-]でより大きなスキップ量で上にスクロール
>「より大きなスキップ量」は思案のしどころですが、デフォルトで PageUp/PageDown の2倍あたりでどうでしょうか?
>これもSetupで設定変更できるようにすれば良いと思います。

じつは…[SHIFT][->]と[SHIFT][<-]は、OSの仕様でコントラスト調整となってしまっているので(^^;
他のキーに割り当てれば可能です。
現状ファンクションキーしか使えそうにないですが、[F1][F2]あたりを拡張するのが良さそうでしょうか。


>と最後に大文字の N が付いているのは、何かわけでもあるのでしょうか?
>もしついつい余計についていたというのなら、サクッと Ver 0.99i の更新をなさっては如何でしょうか?

あ゛、特に意味はなくPageUp/PageDown Numberの略のつもりでしたけど、逆に意味不明になってましたね(^^;
ってことで、サクッと0.99iの差し替え更新しました。

Re: Re:Re: アドイン版 C.Basic ver.0.99i テスト版 その9.9i(PageUp/Down任意設定に変更版)

sentaro様


> >次のバージョンアップの際には、以下もご検討頂けると良いかな、と思います。
> >・[SHIFT][->]でより大きなスキップ量で下にスクロール
> >・[SHIFT][<-]でより大きなスキップ量で上にスクロール
> >「より大きなスキップ量」は思案のしどころですが、デフォルトで PageUp/PageDown の2倍あたりでどうでしょうか?
> >これもSetupで設定変更できるようにすれば良いと思います。
>
> じつは…[SHIFT][->]と[SHIFT][<-]は、OSの仕様でコントラスト調整となってしまっているので(^^;
> 他のキーに割り当てれば可能です。
> 現状ファンクションキーしか使えそうにないですが、[F1][F2]あたりを拡張するのが良さそうでしょうか。

コントラスト調整については、気づきませんでした。
ファンクションキーを使うとすれば、またファンクションキーのメニュー配置を変えることになりますよね。

現在のEDIT画面で[SHIFT]キーを押した時に現れるファンクションメニューは、6個とも必要不可欠なように思えます。
これを頻繁に変えるのはあまり良くないように思うので、悩ましいですね。


例えば、[F1] (VAR) はサブメニュー呼び出しにして、そのサブメニューに [F1] (Var)、[F2] (Mat)、[F3] (V-W) を展開する。
[F1] (VAR)の隣に例えば [F2](Scrl)を設け、そのサブメニューに例えば、

[F1] (Rol↓)、[F2] (Rol↑)、[F3](Skp↓)、[F4](Skp↑)、[6](<) を追加(敢えて [F5] を飛ばす)、

[F2](Scrl)のサブメニューが表示されている時は、そのメニュー表示は [F6](<)を押すまでは表示し続ける。
そして現行の [SHIFT][↓] と [SHIFT][↑] は ロールダウン(Rol↓)とロールアップ(Rol↑)のショートカット操作として残し、メニュー表示を戻す動作も現行のまま...という感じもアリかな?と思います...というか、こっちの方が直感的に分かりやすいかも知れないと思いますが、如何でしょう?

ユーザーが直感的に分かりやすいのは何か?という視点で考えますと、ここではスクロール (Scrl)という動作を示す言葉には、ロール(アップ/ダウン)とスキップ(アップ/ダウン)という2つの異なる動作が属すると定義しているわけです。直感的に受け入れられるかどうかが、ポイントになりそうです。

そう考えますと、ロールアップやロールダウンは、感覚的に「1ページごと」というような感じを、私は持、この1ページごとは固定してしまうのが良いと、言葉の感じからそんなように思うのですが、sentaro様は如何でしょうか?

そして、スキップはデフォルト値をもうけた上で、スキップ量(ページ単位)でSetupでユーザーが変更できるもの...とするのが自然なように感じます。

これらは、機能名や表示から直感的に理解できるのが最良だという前提で、私が言葉から受ける印象に基づく案です。私の感覚が多くのユーザーと同じかどうか、そこが確信を持てないのですが、sentaro様は如何でしょうか?


将来の拡張を見据えて、今変更しても後々使い勝手に影響する変更を最小にする考え方に立って、必要な変更ってことで致し方ないという感じでしょうか...


実は、Ftune2のように [+] や [-] キーを使うことも思ったのですが、C.Basic全体で [+] [-] キーを使うのであれば良いとしても、今回の追加機能のみにこれらのキーを使うと、返って操作性の一貫性が損なわれ、分かりにくい、使い方を忘れて思い出せない、といった感じになるので、これも提案しづらい感じです。


私は、良いソフトウェアはヘルプや解説を読まなくても直感的に使えるもの...と昔から思っているので、上記はその延長線上での議論になってしまっています。

作り手の利便性は、この際考えていません(-_-;
どうお考えでしょうか?

アドイン版 C.Basic ver.0.99j テスト版 その9.9j(エディタにジャンプ機能追加版)

管理人様、こんにちは!

>ファンクションキーを使うとすれば、またファンクションキーのメニュー配置を変えることになりますよね。

はい、ファンクションキー以外は使えそうにないので、とりあえずの一案ということで、
ファンクションキーの[F1](TOP)と[F2](BTM)を裏に回して、
[F1]をジャンプメニューの入り口としてメニューを1階層増やしてみました。
(本体の表計算機能の[EDIT]で[JUMP]があるのでちょっと真似てみました。)
空いた[F2]には(純正でも表にあるので)検索機能を割り当ててみました。


>そう考えますと、ロールアップやロールダウンは、感覚的に「1ページごと」というような感じを、私は持、この1ページごとは固定してしまうのが良いと、言葉の感じからそんなように思うのですが、sentaro様は如何でしょうか?

私もそう思います(^^)
ってことで、[SHIFT]+[↑][↓]は「1ページごと」固定にして、
新規に任意ページのスキップ(アップ/ダウン)を加えてみました。

キーアサインに付いてはまだ固まってないので改善の余地ありです(^^;



アドイン版 C.Basic ver.0.99j テスト版 その9.9j(エディタにジャンプ機能追加版)
http://pm.matrix.jp/CB/CBASIC099j.zip

・エディタにジャンプ機能を追加しました。
 それによりファンクションキーアサインを一部変更しました。

 -[F1] (TOP) ファイル先頭にジャンプします。
 -[F2] (BTM) ファイル末尾にジャンプします。

 ↓↓↓↓↓↓↓↓

 -[F1] (JUMP) ファイルのジャンプメニューを表示します。
  [F1] (TOP) ファイル先頭にジャンプします。
  [F2] (BTM) ファイル末尾にジャンプします。
   [F3] (GOTO) ファイルの任意の行にジャンプします。
   [F5] (Skip↑) (セットアップで設定された)ページ数だけスキップアップします。
   [F6] (Skip↓) (セットアップで設定された)ページ数だけキップダウンします。
 -[F2] (SRC) 文字列サーチモードに入ります。

・ジャンプ機能に任意のページ数スキップする機能を加えたのでPageUp/Down機能を一部変更です。
 
 [SHIFT]+{UP]  1ページ(6行)だけPageUpします。
 [SHIFT]+[DOWN] 1ページ(6行)だけPageDownします。

・[AC]キーでのブレークした時のポップアップから再開可能になりました。
[F1][EXE]キーで再開できます。

Re: アドイン版 C.Basic ver.0.99j テスト版 その9.9j(エディタにジャンプ機能追加版)

sentaro様


Ver 0.99j におけるスクロール機能の新実装、とても使いやすいです。

サブメニューからメインメニューに戻るために [EXIT] を押すというのを見落としていました。とても自然な操作ですね。

さらに、Gotoでジャンプ先の行数指定ですが、1~147 といったような全行数を表示することで、繰り返しデバッグや書き直しをする場合にとても便利です。


> ファンクションキーの[F1](TOP)と[F2](BTM)を裏に回して、
> [F1]をジャンプメニューの入り口としてメニューを1階層増やしてみました。

これがサブメニューに移っても、あまり不便には思わないので、[F1](JUMP)に関連機能をまとめたのは、却って分かり易くなったと思います。


> (本体の表計算機能の[EDIT]で[JUMP]があるのでちょっと真似てみました。)
> 空いた[F2]には(純正でも表にあるので)検索機能を割り当ててみました。

純正Casio Basicに合わせたことは、ユーザーには優しいと思います。

> >そう考えますと、ロールアップやロールダウンは、感覚的に「1ページごと」というような感じを、私は持、この1ページごとは固定してしまうのが良いと、言葉の感じからそんなように思うのですが、sentaro様は如何でしょうか?
>
> 私もそう思います(^^)
> ってことで、[SHIFT]+[↑][↓]は「1ページごと」固定にして、
> 新規に任意ページのスキップ(アップ/ダウン)を加えてみました。

ご賛同頂いてありがとうございます。


> キーアサインに付いてはまだ固まってないので改善の余地ありです(^^;

今回の変更については、満足です。

...ということで、C.Basicトップページの C.Basicダウンロードのバージョンも更新しておきます。

Re: アドイン版 C.Basic ver.0.99j テスト版 その9.9j(エディタにジャンプ機能追加版)

sentaro様

Ver 0.99j に同梱されている readme_j.txt のクイックマニュアルがスクロール&ジャンプ機能の操作について更新されていませんでした。

C.Basic のトップページ(下記)に、manual_j.txt と readme_j.txt を参照するように追記しました。
http://egadget.blog.fc2.com/blog-entry-495.html


Re:Re: アドイン版 C.Basic ver.0.99j テスト版 その9.9j(エディタにジャンプ機能追加版)

管理人様、こんにちは!

>Ver 0.99j におけるスクロール機能の新実装、とても使いやすいです。
>サブメニューからメインメニューに戻るために [EXIT] を押すというのを見落としていました。とても自然な操作ですね。

ありがとうございます(^^)
操作性に関しては出来るだけ純正CasioBasicに準拠する使い勝手のままがよいですね。
[EXIT]でサブメニューからメインメニューに戻るというのもreadme_j.txtに追加しておきました。


>さらに、Gotoでジャンプ先の行数指定ですが、1~147 といったような全行数を表示することで、繰り返しデバッグや書き直しをする場合にとても便利です。

CasioBasicのソースでは改行で行の区切りなのですが、行数指定の行は画面上での見た目上の物理行数なので行数をカウントするのに若干手間がかかってしまうのですが、行数を把握できるのは便利だと思って取り入れてみました。
今回のジャンプ機能は長いプログラムになると使い勝手の上で差が出てきますね(^^)


>Ver 0.99j に同梱されている readme_j.txt のクイックマニュアルがスクロール&ジャンプ機能の操作について更新されていませんでした。

readme_j.txtを更新してVer.0.99j差し替えアップしました(^^;
(プログラム本体もちょいバグ修正済みです)

Re: Re:Re: アドイン版 C.Basic ver.0.99j テスト版 その9.9j(エディタにジャンプ機能追加版)

sentaro様

readmeの英訳をチョビチョビやっています.毎週欠かさず少しずつやってゆけば、Ver 0.99z になるまでに、なんとか終わりそうです。

で、気がついた点がいくつかあります。

1)
「ファイルリスト」という表現があります。実際に電卓上では Prog List となっています。

当初は Prog List で良かったのですが、フォルダやテキストがサポートされるようになっているので、いっそ電卓上で、File List に表記を変更するのはどうでしょうか?


2)
C.Basicの特徴に、上位互換で独自拡張機能を随時追加してゆく...というのを追加しては如何でしょうか?


3)
メニューで、[F6]で戻る機能の説明で、[F6]( < ) と"( < )"を追加してはどうでしょうか?


4)
> [EXIT]でサブメニューからメインメニューに戻るというのもreadme_j.txtに追加しておきました。

これは、Jump機能に関連する説明で見当たらないのですが、どこに追加されました?


===============

ところで、

> CasioBasicのソースでは改行で行の区切りなのですが、行数指定の行は画面上での見た目上の物理行数なので行数をカウントするのに若干手間がかかってしまうのですが、行数を把握できるのは便利だと思って取り入れてみました。
> 今回のジャンプ機能は長いプログラムになると使い勝手の上で差が出てきますね(^^)

私がこれまで作った最長のもの(ライフゲームのサブルルーチン)は、508行もありました(^^;
これを触っていて気がついたのですが、Setupで SkipUp/Down の設定がデフォルトで 1 になっていました。
[SHIFT][UP] や [SHIFT][DOWN] と同じ設定なわけです。

メニューで表示されるのは、Skp↓ と Skp↑ なので、ある意味合理的で、ユーザーに分かり易い配慮ですね。
sentaro様の個性が、このようなところで垣間見えます。


Re:Re: Re:Re: アドイン版 C.Basic ver.0.99j テスト版 その9.9j(エディタにジャンプ機能追加版)

管理人様、こんにちは!

>readmeの英訳をチョビチョビやっています.毎週欠かさず少しずつやってゆけば、Ver 0.99z になるまでに、なんとか終わりそうです。

毎度お手数おかけしています。m(_ _)m


>「ファイルリスト」という表現があります。実際に電卓上では Prog List となっています。
>当初は Prog List で良かったのですが、フォルダやテキストがサポートされるようになっているので、いっそ電卓上で、File List に表記を変更するのはどうでしょうか?

あ、そういえばマニュアルではファイルリストという表記ばかりになってますね(^^;
今後コンパイラ等でのファイルが増えることも考えるとファイルリストで統一した方が良さそうですね。
ってことで、ここはサクッと表記変更しました(^^)


>C.Basicの特徴に、上位互換で独自拡張機能を随時追加してゆく...というのを追加しては如何でしょうか?

了解です(^^)


>メニューで、[F6]で戻る機能の説明で、[F6]( < ) と"( < )"を追加してはどうでしょうか?

これも了解です(^^)


>これは、Jump機能に関連する説明で見当たらないのですが、どこに追加されました?

編集画面の[EXIT]のところでちょっろっと記述してあります(^^;

ってことで、File Listへの表記変更とreadme_j.txt更新でVer.0.99j差し替えました。


>私がこれまで作った最長のもの(ライフゲームのサブルルーチン)は、508行もありました(^^;
>これを触っていて気がついたのですが、Setupで SkipUp/Down の設定がデフォルトで 1 になっていました。
>[SHIFT][UP] や [SHIFT][DOWN] と同じ設定なわけです。
>メニューで表示されるのは、Skp↓ と Skp↑ なので、ある意味合理的で、ユーザーに分かり易い配慮ですね。
>sentaro様の個性が、このようなところで垣間見えます。

スキップ機能は管理人様のご提案があったからこそなので、恐縮しまくりです(^^;
デフォルトでは同じ1ページになってしまってますけど、ファンクションキーは[SHIFT]を押す必要がないのでPageUp/Downとして使っても使いやすいかもですね。

Re: Re:Re: Re:Re: アドイン版 C.Basic ver.0.99j テスト版 その9.9j(エディタにジャンプ機能追加版)

sentaro様

> あ、そういえばマニュアルではファイルリストという表記ばかりになってますね(^^;
> 今後コンパイラ等でのファイルが増えることも考えるとファイルリストで統一した方が良さそうですね。
> ってことで、ここはサクッと表記変更しました(^^)

先ほど、ダウンロードしたのですが、fx-9860GIIに C.Basic を転送したところ、Prog List のままで、File List になっていません。これを File List にすると思っていたのですが、勘違いでしょうか?
どこか他を変更されました?



>
>
> >C.Basicの特徴に、上位互換で独自拡張機能を随時追加してゆく...というのを追加しては如何でしょうか?
>
> 了解です(^^)
>
>
> >メニューで、[F6]で戻る機能の説明で、[F6]( < ) と"( < )"を追加してはどうでしょうか?
>
> これも了解です(^^)
>
>
> >これは、Jump機能に関連する説明で見当たらないのですが、どこに追加されました?
>
> 編集画面の[EXIT]のところでちょっろっと記述してあります(^^;
>
> ってことで、File Listへの表記変更とreadme_j.txt更新でVer.0.99j差し替えました。
>
>
> >私がこれまで作った最長のもの(ライフゲームのサブルルーチン)は、508行もありました(^^;
> >これを触っていて気がついたのですが、Setupで SkipUp/Down の設定がデフォルトで 1 になっていました。
> >[SHIFT][UP] や [SHIFT][DOWN] と同じ設定なわけです。
> >メニューで表示されるのは、Skp↓ と Skp↑ なので、ある意味合理的で、ユーザーに分かり易い配慮ですね。
> >sentaro様の個性が、このようなところで垣間見えます。
>
> スキップ機能は管理人様のご提案があったからこそなので、恐縮しまくりです(^^;
> デフォルトでは同じ1ページになってしまってますけど、ファンクションキーは[SHIFT]を押す必要がないのでPageUp/Downとして使っても使いやすいかもですね。

前のファイルが残ってました(^^;

管理人様、こんにちは!

>先ほど、ダウンロードしたのですが、fx-9860GIIに C.Basic を転送したところ、Prog List のままで、File List になっていません。これを File List にすると思っていたのですが、勘違いでしょうか?
どこか他を変更されました?

あ゛、すみません(^^;
CBASIC.G1AファイルがCBASICフォルダ内にも残っていたので、それだと差し替え前のProg List のままでした(^^;
それを削除してCBASIC099j.zipファイルを再アップしました。

Re: 前のファイルが残ってました(^^;

sentaro様

ダウンロードしたZIPファイルの中にある CBASICフォルダ内の CBASIC.g1aを転送して試していたのが問題だったのですね。
このフォルダの外にある CBASIC.g1a では、Fine List に変更されていました。

ところで、
> あ゛、すみません(^^;
> CBASIC.G1AファイルがCBASICフォルダ内にも残っていたので、それだと差し替え前のProg List のままでした(^^;
> それを削除してCBASIC099j.zipファイルを再アップしました。

これをダウンロードしたところ、ZIPファイルが壊れているようです。ご確認頂けませんか?




Re:Re: 前のファイルが残ってました(^^;

管理人様、こんにちは!

>これをダウンロードしたところ、ZIPファイルが壊れているようです。ご確認頂けませんか?

うわ、たびたびすみません(^^;

ってことで、またまた再アップです。
ダウンロードして確認したので今度こそだいじょうぶです(^^;

Re: Re:Re: 前のファイルが残ってました(^^;

sentaro様

> ってことで、またまた再アップです。
> ダウンロードして確認したので今度こそだいじょうぶです(^^;

はい、確認致しました。

ありがとうございます。



Re: Re:Re: 前のファイルが残ってました(^^;

sentaro様

Prog List が File List に変更されたところで、Manual.txt, readme_J.txt の英訳、そして英文エントリーを少しづつ進めています。

今日のところは、

・C.Basicのインストール (http://egadget.blog.fc2.com/blog-entry-509.html):これはどこかでまとめておきたいと思っていました。

・Installation of C.Basic (http://egadget.blog.fc2.com/blog-entry-510.html):英語エントリー

を新たに作り、それに合わせて、以下のトップページ/Top Page を更新しました。

http://egadget.blog.fc2.com/blog-entry-495.html
http://egadget.blog.fc2.com/blog-entry-493.html


アドイン版 C.Basic ver.0.99k テスト版 その9.9k(エディタジャンプ機能に現在行番号表示追加版)

管理人様、こんにちは!

>Prog List が File List に変更されたところで、Manual.txt, readme_J.txt の英訳、そして英文エントリーを少しづつ進めています。
>今日のところは、
>・C.Basicのインストール (http://egadget.blog.fc2.com/blog-entry-509.html):これはどこかでまとめておきたいと思っていました。
>・Installation of C.Basic (http://egadget.blog.fc2.com/blog-entry-510.html):英語エントリー
>を新たに作り、それに合わせて、以下のトップページ/Top Page を更新しました。

毎度大変お手数おかけしています。m(_ _)m

インストールマニュアルはすごく分かりやすくてなかなかよいです(^^)
アドインの電卓への転送方法は一度分かってしまえば何てこと無いことでも、最初の段階でつまづくとどうしたらよいのか分からないことも多いので、導入マニュアルが整備されることでアドイン使用の敷居がかなり下がってきますね。
英語版エントリーもさすが管理人様ですね(^^)
どうもありがとうございます!

そういえば、fx-9860GIIの日本語マニュアルが最新の試験モード対応の2.09バージョンになっていることに気が付いたのですが、日本の公式サイトでは2.09のアップデートはまだありません(^^;

今回のC.Basicのバージョンアップは大した変更では無いのですが、エディタのジャンプで現在行番号を表示するようにしてみました。
ただ、プログラムが長くなると行番号を算出するために若干時間がかかってもっさりになるので、任意行へのジャンプの時のみ表示となっています(^^;

アドイン版 C.Basic ver.0.99k テスト版 その9.9k(エディタジャンプ機能に現在行番号表示追加版)
http://pm.matrix.jp/CB/CBASIC099k.zip

・エディタのジャンプ機能の任意行へのジャンプ([F1][F3])で現在の行番号を表示するようにしました。

Re: アドイン版 C.Basic ver.0.99k テスト版 その9.9k(エディタジャンプ機能に現在行番号表示追加版)

sentaro様

> インストールマニュアルはすごく分かりやすくてなかなかよいです(^^)
> アドインの電卓への転送方法は一度分かってしまえば何てこと無いことでも、最初の段階でつまづくとどうしたらよいのか分からないことも多いので、導入マニュアルが整備されることでアドイン使用の敷居がかなり下がってきますね。

そうなんです。だからきちんとまとめたエントリーを作ろうと思いつつ、結構遅くなってしまいました。


> 英語版エントリーもさすが管理人様ですね(^^)
> どうもありがとうございます!

ちょっとした時に読み直して、少しづつ修正を入れてます。



> そういえば、fx-9860GIIの日本語マニュアルが最新の試験モード対応の2.09バージョンになっていることに気が付いたのですが、日本の公式サイトでは2.09のアップデートはまだありません(^^;

以前、コメントアウトのバグ(?)について、カシオに問い合わせをした時、この動作は仕様通りで、むしろマニュアルにバグがあるとの見解でした。さらに、次の改訂でマニュアルのバグを修正するとのことでした。そして 2.09 のマニュアルを見ると、きちんと修正されていました。


Ver 0.99k を頂きました。現在のカーソル行の表示は地味ですが、確かに便利ですね。

ありがとうございます。

Re:Re: アドイン版 C.Basic ver.0.99k テスト版 その9.9k(エディタジャンプ機能に現在行番号表示追加版)

管理人様、こんにちは!

>以前、コメントアウトのバグ(?)について、カシオに問い合わせをした時、この動作は仕様通りで、むしろマニュアルにバグがあるとの見解でした。さらに、次の改訂でマニュアルのバグを修正するとのことでした。そして 2.09 のマニュアルを見ると、きちんと修正されていました。

マニュアルのバグ(?)が修正されてますね(^^;

純正仕様は「:」も改行も同じ区切りになるので仕様としては一貫しているところですけど、実使用上、コメントアウトは改行することで終わりとするのが自然な感じはしますよね。

このコメントアウトの仕様は「:」を区切りとしないC.Basicでは独自仕様となってしまいました(^^;


>Ver 0.99k を頂きました。現在のカーソル行の表示は地味ですが、確かに便利ですね。

エディタはこれで一段落かなというところですけど、まだ他にもあったらいいな的な便利機能のご提案ありましたらよろしくです(^^)

0.99k 差し替えです。

管理人様、こんにちは!

ここのところバタバタしてて更新ペースが滞っております(^^;

細かなバグがちょこちょこ見つかりましたので修正です。

機能的な変化のない修正なのでバージョン据え置きで差し替えアップです(^^;

アドイン版 C.Basic ver.0.99k テスト版 その9.9k(エディタにジャンプ機能追加+バグ修正版)
http://pm.matrix.jp/CB/CBASIC099k.zip

・実数表示で正の指数値で(+)表示されてなかったのを修正しました。
・負数の実数表示で指数桁が表示しきれなかった不具合を修正しました。
・タイマー変数Ticksへの代入が出来なかったのを修正しました。

Re: 0.99k 差し替えです。

sentaro様

> 細かなバグがちょこちょこ見つかりましたので修正です。

こういうのが、結構重要ですよね。
私のところで、最近じっくりとバグだしプログラミングができていないので、すみません。

ありがとうございます。

Re:Re: 0.99k 差し替えです。

管理人様、こんにちは!

>こういうのが、結構重要ですよね。

はい、今のところ致命的なバグは出てない(露見してない?)ですけど、純正CasioBasicとの細かな差異に(今頃)気がついてたりと、バグ出しはあらゆる方向から試してみる必要ありなので、もうしばらくはVer.0.99シリーズが続きそうです(^^;


>私のところで、最近じっくりとバグだしプログラミングができていないので、すみません。

あ、いえいえ、
細かなバグ出しとなるとかなり大変な作業なので、このあたりは地道にバグを潰していくしか無いですね(^^;

こちらこそ、いつもありがとうございます(^^)

アドイン版 C.Basic ver.0.99l テスト版 その9.9l(60進数入出力追加版)

管理人様、こんにちは!

今回は60進数入出力対応をしたバージョンです。
60進数入出力は現状のコマンドを組み合わせても実現出来る機能ですが、
純正仕様に基づいて追加してみました(^^)


アドイン版 C.Basic ver.0.99l テスト版 その9.9l(60進数入出力追加版)
http://pm.matrix.jp/CB/CBASIC099l.zip
・ °(deg) r (rad) g (gra)の角度単位入力を追加しました。
・60進数の入出力に対応しました。
(例)12°34°56.78°→A
 Aの値は12.582438888889となります。
(例)A >DMS
 画面右詰めで「12°34′56.78″」表示されます。
 純正CasioBasicでは表示のみの変換に対してC.Basicでは文字列への変換が出来ます。
(例)A >DMS→Str 1
 Str 1 に「12°34′56.78″」が入ります。

*角度単位入力の「°(deg)」と60進数の区切り「°」はキャラクタが違います。

Re: アドイン版 C.Basic ver.0.99l テスト版 その9.9l(60進数入出力追加版)

sentaro様

Ver 0.99l を、ダウンロードできるように変更しました。

細かなところで、まだまだ有るんですね!


> アドイン版 C.Basic ver.0.99l テスト版 その9.9l(60進数入出力追加版)
> http://pm.matrix.jp/CB/CBASIC099l.zip
> ・ °(deg) r (rad) g (gra)の角度単位入力を追加しました。
> ・60進数の入出力に対応しました。
> (例)12°34°56.78°→A
>  Aの値は12.582438888889となります。
> (例)A >DMS
>  画面右詰めで「12°34′56.78″」表示されます。
>  純正CasioBasicでは表示のみの変換に対してC.Basicでは文字列への変換が出来ます。
> (例)A >DMS→Str 1
>  Str 1 に「12°34′56.78″」が入ります。
>
> *角度単位入力の「°(deg)」と60進数の区切り「°」はキャラクタが違います。

確認はまだですが、°のキャラクターの違いは、入力時にどのように区別しているのでしょうか?
やってみれば分かるのかも知れませんが....スミマセン


で、ニュースです!

ついに、fx-CG20を買ってしまいました。
まだ何もしてません(その暇がありません)が、fx-9860GII からの移植をやってみようと思っています。
Ptuneのインストールもまだだったりします...(^^;


ライブゲームがカラーで動くと楽しそうですね...

Re:Re: アドイン版 C.Basic ver.0.99l テスト版 その9.9l(60進数入出力追加版)

管理人様、こんにちは!

>細かなところで、まだまだ有るんですね!

はい、純正コマンドをどこまで取り入れるかというのは結構悩みどころなのですが、
60進数は角度だけでなく時間表示でも使える機能になると思われるの入れておかないとという感じです。


>確認はまだですが、°のキャラクターの違いは、入力時にどのように区別しているのでしょうか?

fx-9860GII上では丸いのと四角いのでキャラクターが区別されているので無問題です(^^)
丸いのがDegree角度単位入力で、四角いのが60進数入力時の区切りとなっています。



>ついに、fx-CG20を買ってしまいました。

おっ!ついに管理人様もCG20ユーザーに!!!
ご購入おめでとうございます!
これでfx-5800Pから始まるCasioBasicは完全制覇ですね(^^)


>まだ何もしてません(その暇がありません)が、fx-9860GII からの移植をやってみようと思っています。

CasioBasicは上位互換なので3Pinケーブルで繋いで転送すればそのまま動かせるのが便利ですね。
転送してしまえば後はCG20独自機能を使っていじくり回すだけです(^^)


>Ptuneのインストールもまだだったりします...(^^;

たぶんちょっといじっていると…すぐにPtune2必須になってくると思われます(^^;


>ライブゲームがカラーで動くと楽しそうですね...

https://www.cemetech.net/programs/index.php?mode=file&id=579
ライフゲームのアドインはすでに出てるのですが、
色が付くと見た目のインパクトが凄そうです。

早くCG20版のC.Basicを動くようにしないとですね(^^)

9860GII vs cg20 with Ptune2

sentaro様


> おっ!ついに管理人様もCG20ユーザーに!!!
> ご購入おめでとうございます!
> これでfx-5800Pから始まるCasioBasicは完全制覇ですね(^^)

一応ひと揃え、というところでしょうが、fx-FD10 Pro が気になってはいます。

来年の今頃は、FD10 Pro が手元にあったりして...


先ほどから少し fx-cg20 を触っています。

1) 外装の透明樹脂板
先ず外観でチョット気になったのは、液晶のカバーというか外装の透明樹脂の板ですが、これって傷つき易くありませんか?
sentaro様の cg10 は、今どんな感じでしょうか?
場合によっては、スマホなどの保護シートを貼った方が良いような気もしています。


2) 9860GII から移植
> CasioBasicは上位互換なので3Pinケーブルで繋いで転送すればそのまま動かせるのが便利ですね。

転送すると、ファイル拡張子も g1m から g3m へ変換され、Text コマンドの引数も自動的に (x3)が付加され3倍になるんですね!


3) やっぱり遅い(-_-;
で、いくつかを動かしてみましたが、遅いです...

> たぶんちょっといじっていると…すぐにPtune2必須になってくると思われます(^^;


4) Ptune2
...で、早速 Ptune2 をインストール!

私の個体では、265MHz程度で上限となってしまいました。そこで、常用最高クロックを2段下の 250.68MHz となるように、[SHIFT][MENU] (setup) で CPU Clock上限を 255MHz に設定しました。
これで、大分速くなりました!

で、9860GII も同じクロックに設定して、比較してみました。画面表示の分だけ cg20 は遅くなるのが確認できました。


画面表示の色指定とグラフィックスコマンドについて、確認すれば、あとは 9860GII とほぼコンパチのような気がしました。
線のStyle設定が、一番のネックのような感じですね。

逆に言えば、fx-9860GII の Casio Basic をきちんと抑えて、詳細リファレンスが出来れば、cg20対応は、少しの追記で対応できそうです。


SDKとWin10

sentaro様

久しぶりに SDKでチョコとアドインを作ってみると、ビルドで失敗したので、以前作ったものを再度ビルドすると、やはりビルドに失敗したと英語で表示されました。

HMAKE MAKE UTILITY Ver. 1.1
Copyright (C) Hitachi Micro Systems Europe Ltd. 1998
Copyright (C) Hitachi Ltd. 1998


ERROR: Process failed with return code: 1
Build was not successful.


これまでは、Win8.1 で動作させていたのですが、今回は Win10 です。おそらく Win10 で問題が発生しているようです。

このあたり、何か情報をお持ちでしょうか?


Re:9860GII vs cg20 with Ptune2

管理人様、こんにちは!

>一応ひと揃え、というところでしょうが、fx-FD10 Pro が気になってはいます。

あ゛、FD10Proがありました!
アドインが使えないことで圏外に出てしまってましたが(^^;
CasioBasic機として考えると正当なfx-5800P路線の高級機種という感じですね。


>来年の今頃は、FD10 Pro が手元にあったりして...

ぉ! 最新のCasioBasicを網羅するにはやはり必須の機種といえますから、これは間違いなく?!


>先ず外観でチョット気になったのは、液晶のカバーというか外装の透明樹脂の板ですが、これって傷つき易くありませんか?
>sentaro様の cg10 は、今どんな感じでしょうか?
>場合によっては、スマホなどの保護シートを貼った方が良いような気もしています。

うちにあるCG10は結構小キズが付いてしまってるので(^^;(気になるほどの程度ではないのでそのまま放置ですが…)
新品の傷が付いてないうちに早めに貼った方が間違いなく良さそうです。


>3) やっぱり遅い(-_-;
>で、いくつかを動かしてみましたが、遅いです...

fx-5800PからCG20だと確実に速さを感じられるところですが、
fx-9860GIIからだとちょっと厳しいところですよね(^^;
グラフィックコマンドにおいてはもはや我慢大会ですし…(^^;
いくらカラーで高精細といってももう少しなんとかしないとというレベルですね。
このあたりはC.Basicで解消出来ればと思っています(^^)


>私の個体では、265MHz程度で上限となってしまいました。そこで、常用最高クロックを2段下の 250.68MHz となるように、[SHIFT][MENU] (setup) で CPU Clock上限を 255MHz に設定しました。
>これで、大分速くなりました!

fx-9860GIIに比較するとメモリスピードが遅いので、BFCが100MHz超=CPUクロック200MHz超での高クロックでのパフォーマンスの伸びがかなり鈍るので、安定的に250MHzまでいければ十分かと思います(^^)


>画面表示の色指定とグラフィックスコマンドについて、確認すれば、あとは 9860GII とほぼコンパチのような気がしました。
>線のStyle設定が、一番のネックのような感じですね。

Style設定はThinが増えてますし、ドットの太さも3倍で互換ではないのでちょっとややこしいです(^^;


>逆に言えば、fx-9860GII の Casio Basic をきちんと抑えて、詳細リファレンスが出来れば、cg20対応は、少しの追記で対応できそうです。

はい、画面コマンドの違いくらいでほぼ同じといえますね。

Re:SDKとWin10

管理人様、

>久しぶりに SDKでチョコとアドインを作ってみると、ビルドで失敗したので、以前作ったものを再度ビルドすると、やはりビルドに失敗したと英語で表示されました。

うわ、これは初耳でした。


>これまでは、Win8.1 で動作させていたのですが、今回は Win10 です。おそらく Win10 で問題が発生しているようです。
>このあたり、何か情報をお持ちでしょうか?

うちの環境はWin7のままだったので全然気がついてませんでした(^^;

ちょっと調査してみます。

Re:SDKとWin10

管理人様、

フォルダ名にカッコが入っているとSDKが上手く動作しないようです。
x64環境でしたらSDKのインストールフォルダを変更してみるといけるかもしれません。

http://www.casiopeia.net/forum/viewtopic.php?f=21&t=1382&sid=0cb51bd9eb5dc08ed2a1631e2c77ca5f

Re: Re:SDKとWin10

sentaro様

> フォルダ名にカッコが入っているとSDKが上手く動作しないようです。
> x64環境でしたらSDKのインストールフォルダを変更してみるといけるかもしれません。

ありがとうございます。フォルダ名に () が入らないフォルダにインストールすることで、ビルドに成功するようになりました。

で、CBasic をSDKで実行させてみました。

初期の頃にじっくりとソースを拝見したことがありますが、久しぶりに拝見して勉強しようと思ったわけです。

[▶] (Run) ボタンをクリックすると、

System ERROR
REBOOT :[EXIT]
INITIALIZE:[EXE]
TBL ERROR!!
TARGET=01300240
PC =88023F20

とエラーメッセージが出てしまいました。

何か設定が必要な感じですが、まだ分かりません。

それともSDKの設定の問題が残っているのかも知れません。

何か、推測可能でしょうか?

Re:Re: Re:SDKとWin10

管理人様、こんにちは!

>[▶] (Run) ボタンをクリックすると、
>System ERROR
>REBOOT :[EXIT]
>INITIALIZE:[EXE]
>TBL ERROR!!
>TARGET=01300240
>PC =88023F20
>とエラーメッセージが出てしまいました。

もし以前のメモリファイルが残っていたらINITフォルダを削除してから実行してみてください。
新たなフォルダにソースを展開してビルドしてエラーが出たとなると…ちょっと謎なのですが(^^;
うちSDKの環境はWin7(32ビット)なのでWin10(64ビット)環境固有の問題かもしれません。

というところを検証していたら、ストレージメモリがクリアされた状態で新規ファイルが作成できないバグが見つかったので差し替え修正です(^^;

アドイン版 C.Basic ver.0.99l テスト版 その9.9l(60進数入出力追加+バグ修正版)
http://pm.matrix.jp/CB/CBASIC099l.zip

Re: Re:Re: Re:SDKとWin10

sentaro様

前回のアドバイスで、パスに () があるとダメなのが確認され、パスに () が無いフォルダに SDKをインストールしたら、ビルドまでは出来るようになっています。


> もし以前のメモリファイルが残っていたらINITフォルダを削除してから実行してみてください。
> 新たなフォルダにソースを展開してビルドしてエラーが出たとなると…ちょっと謎なのですが(^^;
> うちSDKの環境はWin7(32ビット)なのでWin10(64ビット)環境固有の問題かもしれません。

INITフォルダだけでなく、Debugフォルダと SDCardフォルダも削除した上で、All Build を実行してみました。
ビルドは成功しました。

しかし同じエラーが出て、SDKでのプログラム実行ができないのは同じでした。

[▶] (Run) ボタンをクリックすると、
System ERROR
REBOOT :[EXIT]
INITIALIZE:[EXE]
TBL ERROR!!
TARGET=01300240
PC =88023F20

全く同一のメッセージです。

私が以前作ったのもは、実行できます。
それから、以前も Win8.1 64bit でうまく実行できていました。

なので、Win10 64bit が必ずしも直接の原因ではなさそうで、なにか固有の問題のような感じです。

何か、純正SDK以外のライブラリファイルなど、追加する必要のものって、有りませんか?


> というところを検証していたら、ストレージメモリがクリアされた状態で新規ファイルが作成できないバグが見つかったので差し替え修正です(^^;

わ、思わぬ伏兵が居たんですね。少しはお役にたったようでうれしいです(^_^)/


Re:Re: Re:Re: Re:SDKとWin10

管理人様、こんにちは!

>前回のアドバイスで、パスに () があるとダメなのが確認され、パスに () が無いフォルダに SDKをインストールしたら、ビルドまでは出来るようになっています。

SDKは日本語に未対応なようで、フォルダ名、ファイル名に「英文字+数字」以外を使ってしまうとエラーの原因になるようですね。


>INITフォルダだけでなく、Debugフォルダと SDCardフォルダも削除した上で、All Build を実行してみました。
>ビルドは成功しました。
>しかし同じエラーが出て、SDKでのプログラム実行ができないのは同じでした。
>私が以前作ったのもは、実行できます。
>それから、以前も Win8.1 64bit でうまく実行できていました。

ということはOSの問題ではなくC.Basicの問題ですね(^^;


>何か、純正SDK以外のライブラリファイルなど、追加する必要のものって、有りませんか?

zip内のソースファイルだけで問題なくビルド実行できているので、追加ファイルは必要無いですが、
C.Basicの過去バージョンでも同様のエラーが出るかどうかちょっと試していただけますでしょうか?


>わ、思わぬ伏兵が居たんですね。少しはお役にたったようでうれしいです(^_^)/

はい、管理人様がSDKでエラーを出して下さらなかったらしばらく気が付かなかったかもしれないバグでした(^^;
最新のVer.0.99lのzipから解凍しての真っ更なソースファイルをビルドして実行させたらC.Basicで新規ファイルが作れないので焦りました(^^;
これはVer.0.97から発生していたバグでした。

SDKでのエラーの原因が分かりました(^^;

管理人様、こんにちは!

SDKでエラーになっていたのはストレージファイルが無い場合にそのエラー処理が回避されてないために起きていたバグでした(^^;

発見が遅れたのはコンパイルオプションで -speed指定をしていてバグがなぜか出なかったためで、これをデフォルトの-size指定に戻すと管理人様のバグが出現しました。

-speedオプションは、SDKインストールフォルダの
\CASIO\fx-9860G SDK\Build\MakeOptC.txt
の中ほどにある、
-size

-speed
に書き換えればOkです。
効果は1割ほどスピードアップします。

で、コンパイルオプションでエラーが出たり出なかったりするのは根本的にはバグがあったということなので、
そこを修正したバージョンの差し替えアップです。
今回の管理人様のエラー出現で致命的バグを修正することが出来ました。
どうもありがとうございます(^^)


アドイン版 C.Basic ver.0.99l テスト版 その9.9l(60進数入出力追加+バグ修正版+)
http://pm.matrix.jp/CB/CBASIC099l.zip

Re: SDKでのエラーの原因が分かりました(^^;

sentaro様


> SDKでエラーになっていたのはストレージファイルが無い場合にそのエラー処理が回避されてないために起きていたバグでした(^^;

SDKで C.Basicが動作しました(^_^)/


> 発見が遅れたのはコンパイルオプションで -speed指定をしていてバグがなぜか出なかったためで、これをデフォルトの-size指定に戻すと管理人様のバグが出現しました。
>
> -speedオプションは、SDKインストールフォルダの
> \CASIO\fx-9860G SDK\Build\MakeOptC.txt
> の中ほどにある、
> -size
> を
> -speed
> に書き換えればOkです。
> 効果は1割ほどスピードアップします。

はい、高速化効果も確認できました。
いつも、ベンチマークとして、ライフゲーム Ver 0.73 を使っています。
http://egadget.blog.fc2.com/blog-entry-491.html

Ver. 0.99 以降速度低下が見られましたが、Ver 0.99l 最新版では、Ver 0.80と同じ程度に高速化しています。

> 今回の管理人様のエラー出現で致命的バグを修正することが出来ました。
> どうもありがとうございます(^^)

こちらこそ、ありがとうございます。

ところで、SDK で起動した C.Basic で何か Basicプログラムを実行させるには、どうなさっていますか?

SDKで外部Basicプログラムを利用する方法

管理人様、こんにちは!

>SDKで C.Basicが動作しました(^_^)/

お、よかったです!(^^)


>Ver. 0.99 以降速度低下が見られましたが、Ver 0.99l 最新版では、Ver 0.80と同じ程度に高速化しています。

SH4A機ではバージョン毎に毎回速度が微妙に違うのが難点ですけど、SH4Aには非対応のSDKですから致し方ないところです(^^;


>ところで、SDK で起動した C.Basic で何か Basicプログラムを実行させるには、どうなさっていますか?

短いプログラムであればSDK上で打ち込むという方法が簡単ですが、ある程度大きなプログラムになると打ち込むのは大変なので(^^;
プログラム内にソースファイルを内蔵プログラムとして組み込むことでSDKのエミュレータに簡単に取り込めるようにしています。

その方法は、
バイナリファイルをCのソースファイルに変換するフリーソフト(BIN2C_TBL)がありましたのでそれを使って、
Cのソースファイルを作成してそれをC.Basic本体内に初期プログラムとして組み込みます。
http://www.vector.co.jp/soft/dl/winnt/util/se363967.html

BIN2C_TBLを起動して、
入力バイナリファイル:G1MのBasicソースファイルを指定します。(ファイルの種類で全てのファイルを選択して下さい。)
出力ソースファイル:任意のファイル名を指定します。

データ型:1バイトデータ(char)
変数名:任意の名前

「実行」でソースファイルが出来ます。
そのソースファイルのうち、{ }で挟まれた16進データ部分を、
C.BasicのソースファイルにあるCB_Sample.cに上書きコピーします。
CB_Sample.cの中にはbas_src[]からbas_src5[]までありますが、一番最初のbas_src[]の16進データの所に上書きコピーします。

後は、完全ビルドしてからプログラムを起動して、
ファイルモードで[SHIFT]+[^]でコピーしたプログラムがエディタに自動的に読み込まれますので、
[EXIT]を押して保存すればSDKのエミュレータの内部ストレージメモリにプログラムが保存されます。
エミュレータの内部ストレージはINITフォルダのROMファイルに保存されますので、次回SDK起動時にはそのプログラムファイルが最初からストレージ上に存在しています。

現在の初期内蔵プログラムとして、
bas_src:SAMPLE (総和を求めるプログラム)
bas_src1:8QUEEN (N-Queenベンチマークプログラム 構造化バージョン)
bas_src2:8QUN (N-Queenベンチマークプログラム 非構造化バージョン)
の三種類のプログラムがテスト用として組み込まれています。

ちなみにこの初期内蔵プログラムは(現状は隠し機能ですが)電卓本体でも有効です。


ちょいバグが見つかりましたので修正版差し替えです(^^;

アドイン版 C.Basic ver.0.99l テスト版 その9.9l(60進数入出力追加+バグ修正版+)
http://pm.matrix.jp/CB/CBASIC099l.zip

・?入力コマンドにおいて#や%のサフィックスがエラーになっていたのを修正しました。

Ptune2

sentaro様

ありがとうございます。

この土日は、色々忙しくてまだ試していません。

来週あたりじっくりと試してみようと思います。

今のところは、fx-CG20 で fx-9860GII との違いを色々と調べているところです。
部分的に、過去の記事に fx-CG20 対応について追記して再アップしたりしています。

ところで、Ptune2 で電源まわりのトラブルがありました。最大クロックが 265.42MHzなので、2段階落として 250.68MHzが安全と考えて、普段はそれで使っています。試しに 1段だけ落とした 258.05MHzにして使っていたところ、[SHIFT][AC]で電源が落ちなくなることがあります。筐体裏にある Restartで復帰できる場合と出来ない場合があります。
最後の手段として電池を抜いて再起動しようとして、再起動しないこともありました。チョット焦りましたが、しばらく置いておくと再起動できました。

ちょっと怖いので、2段落とし以上にはしておらず、今のところ問題なく動作しています。

fx-9860GII でFtune2を使っている時も、最大から2段落として使っていますが、1段だけ落とした場合でも電源まわりのトラブルは経験していません。

2段落としでの状況は以下です。
roRw0: 17.88MHz  raRw0: 19.12MHz
roRw1: 29.80MHz  raRw1: 38.02MHz
roRw2: 41.74MHz  raRw2: 56.97MHz
roRw3: 53.60MHz  raRw3: 76.12MHz
roRw4: 65.40MHz  raRw4: 95.06MHz
roRw5: 77.28MHz  raRw5:113.94MHz
roRw6: 89.10MHz  raRw6:132.93MHz
roRw8:112.97MHz  raRw8:170.98MHz
roR10:136.62MHz
roR12:160.35MHz

raWw0: 32.48MHz
raWw1: 64.78MHz
raWw2: 96.99MHz
raWw3:129.73MHz
raWw4:162.04MHz
raWw5:171.98MHz
raWw6:172.16MHz


=====

あと、fx-9860GII と fx-CG20 を3Pin シリアルケーブルで繋いでデータ転送を試みているのですが、一度も成功していません。
とりあえず、マニュアル通りに操作をしていることを何度も確認していますが、ダメです。
PC経由でのデータ転送は一度も失敗していないので、プログラム転送は出来ています。接続する9860GIIとCG20の両方とも UCBケーブルでなくて、3Pinケーブルに設定変更はしています。

3Pinケーブルで失敗した経験はお持ちですか?

カシオに直接相談する前に、相談させて頂きたく、よろしくお願い致します。

Re: Ptune2

sentaro様

3Pinシリアルケーブルでのデータ転送ですが、エラーになる原因が分かりました。

オーバークロックしているとダメなようです。接続までは問題なのですが、転送時にエラーになる問題なのですが、受信、送信両機をノーマルクロックに戻すと、転送の成功することが分かりました。

fx-CG20

sentaro様

fx-CG20 について、Casio Basic環境としての概要を、fx-9860GII との比較を中心にして、まとめてみました。

こういう切り口のファーストインプレションは、e-Gadget オリジナルなものだと思います。かなり偏った切り口ですけど...
ついつい、爆即 C.Basic に触れてしまいました(^^;

実際問題として、Ptune2 無しでは動きがモッサリしてしまいますね。fx-9860GII の Ftune2 と違って、fx-CG20 には Ptne2 が必須なように思えます。

但し、先ほど申し上げたような電源周りのトラブルに出くわしているので、あまり Ptune2 に触れずにいます。


突っ込みどころがあれば、思いっきり指摘しちゃってください。お願い致します。

Re:Ptune

管理人様、こんにちは!

>今のところは、fx-CG20 で fx-9860GII との違いを色々と調べているところです。
>部分的に、過去の記事に fx-CG20 対応について追記して再アップしたりしています。

CG20用のg3mファイルが着実に増えていっているのがよいです。
さらにCG20で変換したテキスト版のソースファイルもあれば完璧かもですね(^^)


>ところで、Ptune2 で電源まわりのトラブルがありました。最大クロックが 265.42MHzなので、2段階落として 250.68MHzが安全と考えて、普段はそれで使っています。試しに 1段だけ落とした 258.05MHzにして使っていたところ、[SHIFT][AC]で電源が落ちなくなることがあります。筐体裏にある Restartで復帰できる場合と出来ない場合があります。
>最後の手段として電池を抜いて再起動しようとして、再起動しないこともありました。チョット焦りましたが、しばらく置いておくと再起動できました。

うわ…電池抜いてやっと復活ということはRAMデータが異常になっていただけなので、ROM異常にならなくて良かったです。
もし、ROMが消えていたり異常になっていたりしたら再起不能でお手上げでした…(^^;


管理人様のCG20のメモリ速度データからみると新しい速いバージョンのROMが使われていますね(^^)
うちの速い方のCG10とほぼ同じ感じです。
遅い方のCG10はROMが10%程遅いです。


>fx-9860GII でFtune2を使っている時も、最大から2段落として使っていますが、1段だけ落とした場合でも電源まわりのトラブルは経験していません。

CG20でも2段下げての異常は起きてないことなのでfx-9860GII同様に2段下げで大丈夫といえる状況ですが、fx-9860GIIに比べると2割ほどROMが遅いので常用安定性を考えるともう1~2段くらい下げて(通信の互換性も考えると)235MHzあたりで抑えておくのがよいかもしれません。


>3Pinシリアルケーブルでのデータ転送ですが、エラーになる原因が分かりました。
>オーバークロックしているとダメなようです。接続までは問題なのですが、転送時にエラーになる問題なのですが、受信、送信両機をノーマルクロックに戻すと、転送の成功することが分かりました。

PFCクロックがシリアルクロックの元になっているので3pinの通信する場合はPFCクロックが一致していなければなりません。
これは私もオーバークロックしたての頃に通信出来なくてハマりました(^^;
何か動作上の不具合が起きた場合は、とりあえずノーマルに戻してみるというのは基本ですね(^^)
一致させないといけないのはPFCだけなのでBFC、SFC、IFCはノーマルよりも上げても大丈夫です。
注意点としてはCG10/20はROMの限界が低いのでROMアクセスの不具合でのROM破損を防ぐためにPFCクロックは24MHz以下がデフォルトとなってますが、出来るだけデフォルトの14.75MHzから大幅に上げないのを推奨しています。

Re: Re:Ptune

sentaro様


> CG20用のg3mファイルが着実に増えていっているのがよいです。
> さらにCG20で変換したテキスト版のソースファイルもあれば完璧かもですね(^^)

「CG20で変換したテキスト版のソースファイル」は、どのような使い方を想定して、有った方が良いとおっしゃっているのでしょうか?



> うわ…電池抜いてやっと復活ということはRAMデータが異常になっていただけなので、ROM異常にならなくて良かったです。
> もし、ROMが消えていたり異常になっていたりしたら再起不能でお手上げでした…(^^;

わ、ROMが飛んでないので、ギリギリセーフってことですね。危ない危ない...


> CG20でも2段下げての異常は起きてないことなのでfx-9860GII同様に2段下げで大丈夫といえる状況ですが、fx-9860GIIに比べると2割ほどROMが遅いので常用安定性を考えるともう1~2段くらい下げて(通信の互換性も考えると)235MHzあたりで抑えておくのがよいかもしれません。

念のため、3段落としの 243MHzを最大とすることにします。


> 管理人様のCG20のメモリ速度データからみると新しい速いバージョンのROMが使われていますね(^^)
> うちの速い方のCG10とほぼ同じ感じです。
> 遅い方のCG10はROMが10%程遅いです。



> PFCクロックがシリアルクロックの元になっているので3pinの通信する場合はPFCクロックが一致していなければなりません。
> これは私もオーバークロックしたての頃に通信出来なくてハマりました(^^;
> 何か動作上の不具合が起きた場合は、とりあえずノーマルに戻してみるというのは基本ですね(^^)
> 一致させないといけないのはPFCだけなのでBFC、SFC、IFCはノーマルよりも上げても大丈夫です。

えっと、USB接続の場合は、オーバークロックでも正常にPCとリンクできています。3pin 接続とは事情が違っているようですね。



> 注意点としてはCG10/20はROMの限界が低いのでROMアクセスの不具合でのROM破損を防ぐためにPFCクロックは24MHz以下がデフォルトとなってますが、出来るだけデフォルトの14.75MHzから大幅に上げないのを推奨しています。

これで、sentaro様は1台お釈迦にしたんですね(-_-;)

今後も、ロットによって状況が変わる可能性があるので、要注意ですね。

Re: fx-CG20

>fx-CG20 について、Casio Basic環境としての概要を、fx-9860GII との比較を中心にして、まとめてみました。

早速に拝見させていただきました。管理人様ならではの力作レビューですね。
これを読めばCASIOのプロ電の性能差が丸わかりですから、とても参考になる記事だと思います(^^)


>こういう切り口のファーストインプレションは、e-Gadget オリジナルなものだと思います。かなり偏った切り口ですけど...
>ついつい、爆即 C.Basic に触れてしまいました(^^;

オーバークロックしての比較は世界で初めての記事かもしれないのでとても貴重です。
C.Basicも加えていただきまして恐縮です。
私的にはこういう記事を目にしたら速攻でCG20まで一揃えしてしまう勢いになります(^^)
CG20は遅いと思われていた方でもそこそこ速くなるとなれば購入機会が増えるかもしれませんね。


>実際問題として、Ptune2 無しでは動きがモッサリしてしまいますね。fx-9860GII の Ftune2 と違って、fx-CG20 には Ptne2 が必須なように思えます。
>但し、先ほど申し上げたような電源周りのトラブルに出くわしているので、あまり Ptune2 に触れずにいます。

ノーマルで使うのにはちょっと重たいソフトを動かす非力なPCみたいな感じでやはりちょっとテキパキ感が無いですよね。
fx-9860GIIを使ってなければそこまで感じないにしても、やはり、Ptune2必須というのは仕方ないところなのですが(^^;
CG20はハード的に余裕があるのでTI-NspireみたいにOSのバージョンアップで2倍速位に純正オーバークロックしてもよいのではないかというところですね。


>突っ込みどころがあれば、思いっきり指摘しちゃってください。お願い致します。

あ、一点だけ気がついた点としては…積分計算のCG20の激速状態はたぶんオーバクロック状態のではないかと(^^;



>「CG20で変換したテキスト版のソースファイル」は、どのような使い方を想定して、有った方が良いとおっしゃっているのでしょうか?

んと、FD10ProがテキストファイルでBasicソースが公開されている機種なので、FD10Proでも互換が取れそうなところでテキストファイルもあったらという感じです(^^)


>わ、ROMが飛んでないので、ギリギリセーフってことですね。危ない危ない...

初期版のCG20だったらROMが遅いのでアウトだったかもしれません(^^;


>えっと、USB接続の場合は、オーバークロックでも正常にPCとリンクできています。3pin 接続とは事情が違っているようですね。

USBは専用の発振器が内蔵されているので影響されないようです。
シリアル系はCPU系と統一クロックなので影響出まくりです。というか、シリアルクロックが基本でその倍数がCPUクロックになっているので29.5MHzという中途半端なクロックになっています(^^;


>これで、sentaro様は1台お釈迦にしたんですね(-_-;)

え~っと…Ptune2作成過程で2台飛ばしてしまいました(^^; 今よりも円高で安かった時期だとはいえ電卓をお釈迦にしたのは初めてでした。
壊れた時は無理なオーバークロック状態だったのは間違いないので、絶対に無理は禁物です(^^;


>今後も、ロットによって状況が変わる可能性があるので、要注意ですね。

はい、新たなバージョンが出るとその都度確認が必要ですが、現バージョンでしばらくは変わらなそうな気配ですね。

Re: Re: fx-CG20

sentaro様


> これを読めばCASIOのプロ電の性能差が丸わかりですから、とても参考になる記事だと思います(^^)

> オーバークロックしての比較は世界で初めての記事かもしれないのでとても貴重です。
> C.Basicも加えていただきまして恐縮です。
> 私的にはこういう記事を目にしたら速攻でCG20まで一揃えしてしまう勢いになります(^^)

ありがとうございます。ここまで言って頂けると、公開したかいがあります。

今のところ、慣れるために fx-CG20 を普段使いにしています。ふだん使いのプログラムは全てテキストベースなので、9860GII からサクッと移植できて、即使えるのはありがたいです。

Ptune2 は、3段落としの CPU:243MHz、PFU:15.21MHz で様子見ですが、普段はノーマルクロックのもっさり版で使っています。

fx-CG20 の記事は、オーバークロックの説明部分を大幅に変更して、私が経験したトラブル書いて、自己責任で使うことを強調しておきました。


> CG20は遅いと思われていた方でもそこそこ速くなるとなれば購入機会が増えるかもしれません

ROMやってしまったら再起不能、と追記してしまいましたので、機会を減らしたかも知れません。申し訳ありませんが、それで良いと思っています。


> ノーマルで使うのにはちょっと重たいソフトを動かす非力なPCみたいな感じでやはりちょっとテキパキ感が無いですよね。

Main Menuでのカーソル移動でもたつく感じが、なにより重いとおもわせてくれますよね。

> CG20はハード的に余裕があるので

そうなんですか!
なら、言われるように、OSバージョンアップに期待以上です。


> あ、一点だけ気がついた点としては…積分計算のCG20の激速状態はたぶんオーバクロック状態のではないかと(^^;

はい、仰せの通りでしたので、修正しました。あと、ダウンロードファイルの設定ミスも修正しました。


> >「CG20で変換したテキスト版のソースファイル」は、どのような使い方を想定して、有った方が良いとおっしゃっているのでしょうか?
>
> んと、FD10ProがテキストファイルでBasicソースが公開されている機種なので、FD10Proでも互換が取れそうなところでテキストファイルもあったらという感じです(^^)

配布方法の1つで、標準になるかも知れないという感じですね。e-Gdget のホームページのアーカイブズを、プログラムファイルの配布の保存だけでなく、配布も視野に入れて構成を見直そうかと思います。

併せて、C.Basic の英文情報をここに入れようと考え直しています。


> 初期版のCG20だったらROMが遅いのでアウトだったかもしれません(^^;

危機一髪だったようです。

fx-CG20/10 は、fx-9860GII よりもちょっとリスキーなんでしょうか?

ROM のクロックについてリスクを説明いただきましたが、どこをどう見てわかるのでしょうか?


> え~っと…Ptune2作成過程で2台飛ばしてしまいました(^^; 今よりも円高で安かった時期だとはいえ電卓をお釈迦にしたのは初めてでした。
> 壊れた時は無理なオーバークロック状態だったのは間違いないので、絶対に無理は禁物です(^^;


これを伺って、3段落としの 243MHz (PFC 15.21MHz)よりさらに1段下の 236MHz (14.75MHz)にしよう、と思いました!

どのみちモッサリ感は、大して変わりませんしね


> はい、新たなバージョンが出るとその都度確認が必要ですが、現バージョンでしばらくは変わらなそうな気配ですね。

二年後くらいに、もう一台買って調査ですしょうか?

Re: Re: fx-CG20

sentaro様

テキストソースファイルの件、少し対応しました。

fx-CG20の概要
http://egadget.blog.fc2.com/blog-entry-511.html

で、複数のプログラムファイルをzipファイルで提供する場合にのみ、テキストソースファイルをzipファイルに同梱しました。

Re: Re: Re: fx-CG20

管理人様、こんにちは!

>今のところ、慣れるために fx-CG20 を普段使いにしています。ふだん使いのプログラムは全てテキストベースなので、9860GII からサクッと移植できて、即使えるのはありがたいです。
>Ptune2 は、3段落としの CPU:243MHz、PFU:15.21MHz で様子見ですが、普段はノーマルクロックのもっさり版で使っています。

カラー版でもほぼ同じ仕様、そして若干上がった使い勝手が利点といえますね。
これでfx-9860GII並にサクサク動けば言う事なしなのですが、ノーマルクロックでもぎりぎり許せる範囲でしょうか(^^;


>fx-CG20 の記事は、オーバークロックの説明部分を大幅に変更して、私が経験したトラブル書いて、自己責任で使うことを強調しておきました。

マスクROMの時代にはオーバークロックで無茶しても壊れることは皆無と言っていい状況でしたけど、書き換え可能なフラッシュROMになってからのオーバークロックは細心の注意が必要ですね(^^;
CG10を2台潰してしまった経験からPtune2/Ftune2は簡単に壊れることのないオーバークロックツールとして作られたものですけど、それでも万が一壊れる可能性はあるわけで、ツールを使う上での管理人様のご配慮に感謝です(^^)

>ROMやってしまったら再起不能、と追記してしまいましたので、機会を減らしたかも知れません。申し訳ありませんが、それで良いと思っています。

多少はあるかもしれません(^^;
ま、でも、安全に使える指針として235MHzくらいで止めておけば99.9%は安全に使えるというのはほぼ間違いないのではと思っています。


>そうなんですか!
>なら、言われるように、OSバージョンアップに期待以上です。

CAS電卓のCP400では同じSH4Aでデフォルトクロックが118MHzということなので、そのあたりまでは上げても何も問題は無いといえますね。
CG10/20がデフォルトで118MHzに上がれば、SH4Aのfx-9860GIIが理不尽に遅い設定にされてることも解消されますし、CASIOのグラフ電卓全体にとってもいいことではないかと思われます。


>配布方法の1つで、標準になるかも知れないという感じですね。e-Gdget のホームページのアーカイブズを、プログラムファイルの配布の保存だけでなく、配布も視野に入れて構成を見直そうかと思います。
>併せて、C.Basic の英文情報をここに入れようと考え直しています。

FD10Proのコマンドを見渡すと、C.Basicでサポートしている範囲のグラフィックコマンドは存在しているのでモンテカルロ法のプログラムも含めて今回の管理人様のプログラムは9860GII互換ですべて動作するのではないかと思われます。
このあたりはFD10Proお持ちの方にチェックしてもらうしか無いのですが…(^^;


>危機一髪だったようです。
>fx-CG20/10 は、fx-9860GII よりもちょっとリスキーなんでしょうか?
>ROM のクロックについてリスクを説明いただきましたが、どこをどう見てわかるのでしょうか?

ROMのリスクは飛ばした経験上分かったことなので、詳細に調べたというわけではないのでここからが危険というはっきりしたものがありません(^^;
ただ、はっきり言えることは、fx-9860GIIよりは明らかにROMのアクセス速度が遅いので、危険度は高いといえます。

Ptune2とFtune2でのメモリチェックの数値を比較すると、同じウエイトでの動作周波数限界がROM読み込みで3割、RAM読み込みで2割、RAM書き込みで5割ほど低くなっているのが分かると思います。
これがメモリアクセスの差なので、同じ動作クロックならウエイトが増えてしまうことになります。
さらに、ROMの書き込みクロックはPFCクロックが関係しているのは間違いないのでPFCは9860GII比で2~3割以上、マージンを考えれば5割以上下げないと危ない(かもしれない)というわけです。
なので、PFCのクロックをfx-9860GII並に上げてしまうのは厳禁ですね。


>これを伺って、3段落としの 243MHz (PFC 15.21MHz)よりさらに1段下の 236MHz (14.75MHz)にしよう、と思いました!

元々のクロックからちょうど4倍ですし、PFCがデフォルトのままなので3Pin通信も問題ないので236MHzはお薦めです(^^)


>どのみちモッサリ感は、大して変わりませんしね

モッサリ感やBasicの動作速度はPFCクロックの影響がそこそこ出てくるようなので、最大パフォーマンスを引き出すには本当は2倍の29.5MHz程度までは上げたいところですが、このクロックまで上げると旧版のCG10/20では完全に危険範囲に入ってしまうので、24MHz制限になっています。
新板のCG10/20では少し余裕があるので30MHzまではぎりぎり安全な範囲といえそうなのですが、旧版に比較して1割ほどしか速くないので、旧版の推奨範囲で合わせておけば間違いないと思います(^^)
9860GIIも(カーソルが消える現象等で)PFCは上げないのが安定性に寄与するのが分かってきたところですし、デフォルトから離れないクロックでの運用が推奨です。


>二年後くらいに、もう一台買って調査ですしょうか?

欧州方面では試験モードLEDが付いた試験対応版が出てきたとのことなので何か変化があればというところですね(^^;

Re: Re: Re: Re: fx-CG20

sentaro様

ちょっと、ブレブレなんですが、Ptune2、Ftune2 に関して、さらに追記しました。


自己責任で使用するものだが、[F5]のプリセット値を選べば、リスクが低いと思われる...と

そして、それより上げるに従って、リスクが上がってゆくから要注意!


といった感じです。

これで、かなりフェアな感じになったでしょうか?

Re:Re: Re: Re: Re: fx-CG20

管理人様、こんにちは!

>これで、かなりフェアな感じになったでしょうか?

あ゛…最初からアンフェアなことは何も無かったですし、高価な電卓を壊すことなく安全に使うための注意書きはいくらあっても構わないと思うので無問題です(^^)

プリセット設定は旧版でも安定的に使えるところでの設定なのでまずはプリセット値から試してもらって、
そこから上げるに従ってリスクも上がっていくということはその通りですからすごく良い説明ですね。

Ftune2/Ptune2でのオーバークロックが99%安全だとしても動作限界に近づけばフリーズ/動作異常のリスクが確実にあるわけなので、
そこのところを理解されて上手く使ってもらえればというところです(^^)

Ptune2 Ver 1.01

sentaro様

Ptune2 でチョット気付いたことがあります。

私のfx-CG20 では、プリセットの[F5]を選ぶと、CPU 191.69MHzで、PFC 23.96MHz となります。これって、問題かも知れませんね?

なので、「→]を何回か(6回)押して、CPU 235.93MHz, PFC 14.75MHz の方がROMを飛ばすリスクが低いということはありませんか?

なお、Ptune2 のバージョンは 1.01 です。


Re: Ptune2 Ver 1.01

管理人様、こんにちは!

>私のfx-CG20 では、プリセットの[F5]を選ぶと、CPU 191.69MHzで、PFC 23.96MHz となります。これって、問題かも知れませんね?

んと、PFCは出来るだけデフォルト近辺を推奨ということからすれば若干問題なのですが、
初期版でもPFCは24MHzくらいまではほぼ確実に安全に使えるという前提での設定なので今のところ問題はないと考えてます。
さらに最新版であれば1割余裕がありますからPFCで問題が起きる可能性は無いといえます。
もし、この設定で問題が起きるとすればメモリのウエイト設定がぎりぎりのタイミングになっているか(レッドゾーンに入ってるか)どうかの方が重要かもしれません。


>なので、「→]を何回か(6回)押して、CPU 235.93MHz, PFC 14.75MHz の方がROMを飛ばすリスクが低いということはありませんか?

CPUクロックは236MHzで確実に動作は可能ですから、PFCがデフォルトと同じになる236MHzの方がリスクは低いといえます。
メモリウエイトにおいてもプリセットの[F5]よりレッドゾーンに入ってしまう可能性が低く余裕がありますから、安定度ではたぶん上だと思われます。
ただ、PFCが低いことでCasioBasic等のパフォーマンスは[F5]の192MHzが若干上回ると思います。
ということで、[F5]のプリセットとなっているわけです。


Ptune2におけるオーバークロックのリスクは、CPUコアクロックの動作限界付近はもちろんのこと、メモリウエイトに余裕があるかどうか(レッドゾーンに入っているかどうか)で決まります。

ちなみにPtune2でのメモリウエイト表示の色分けですが、
ホワイト: マージンが10%以上。 (安全に使えるレベル)
グリーン: マージンが一段上のウエイトから5%以内。(余裕を持って安全に使えるレベル)
イエロー: マージンが5%~10%以内。(ほぼ安全に使えるレベル)
レッド:  マージンが5%以内。(通常は問題なくともCPUの限界近くだったりした場合はちょっと不具合が起きるかもしれないレベル)
となっています。
デフォルトマージン3%でのレッド表示はマージンが3%~5%の範囲に入った時なので、セットアップでデフォルトマージンを5%以上に設定すればレッド表示は出なくなります。
オーバークロックでのリスクを減らすためにはデフォルトマージンを上げれば上げるほどに安全性が増すということになります。

レッドゾーンについては即NGというわけではなくCPUの動作クロックに余裕があればまず不具合は出ないと思われるのですが、管理人様の258MHzでの異常動作は、おそらくCPUの動作限界近くでライトウエイトのraWがレッドゾーンに入っていたためにその相乗効果で不具合が起きたのではないかと推測されます。

Ptune2/Ftune2では本体の性能をぎりぎり引き出すためにデフォルトマージン設定が3%になっているのですが、リスクを少しでも減らして動作的余裕を持たせるためにはマージン設定をレッドが出ない5%、さらにはイエローも出ない10%に設定するのが安心設定といえます。
メモリ速度に余裕のあるfx-9860GIIの場合は現状で特に問題ないとしても、CG10/20の場合はデフォルトよりもマージン設定を上げておくのがよいのかもしれません(^^)

Re: Re: Ptune2 Ver 1.01

sentaro様

詳細なご説明、とても参考になります。

ありがとうございます。

とりあえず私の手元では、別ファイルにして記録を残しています。

但し、これをブログで公開するのはやめておきます。5年後にこれを参考にすると、その時点での使用部品が違っていたりするので、そんなことを考えると....

Re:Re: Re: Ptune2 Ver 1.01

管理人様、こんにちは!

>但し、これをブログで公開するのはやめておきます。5年後にこれを参考にすると、その時点での使用部品が違っていたりするので、そんなことを考えると....

たしかに将来的な部品の変更はあり得ますね。
いつの間にか速いチップに変更されていたとなれば嬉しいところですが、確かめるには定期的に買ってみるしか分からないというのが悩ましいところです(^^;

ところで、
Ptune2/Ftune2においてデフォルトマージンを10%以上に設定するとメモリチェックに失敗することがある不具合が見つかりました(^^;
これは確実に不具合が起きるというのではなくメモリチップの個体差で起きる不具合なので確認不足でした。
10%以上のマージン設定は通常では使わないと思われるので実使用上で問題になることは無いと思われますが、もしマージンを10%以上に設定する場合には注意されて下さい(^^;

アドイン版 C.Basic ver.0.99m テスト版 その9.9m(XORバグ修正&行列名デフォルト削除版)

管理人様、こんにちは!

Xor描画の不具合と行列名でのデフォルト型指定廃止版です。

アドイン版 C.Basic ver.0.99m テスト版 その9.9m(XORバグ修正&行列名デフォルト削除版)
http://pm.matrix.jp/CB/CBASIC099m.zip
・Circle,F-LineのXorモードでの描画に不具合があったのを修正しました。
・行列名における要素の型のデフォルト指定(Mat B, Mat C, Mat D, Mat W, Mat I, Mat L)を廃止しました。
 デフォルトでは実数モードではすべて実数行列、整数モードではすべて整数行列となります。
・キャラクタ入力でアルファベットのミニキャラクタ(F5)のTextコマンド対応文字が表示されなかった不具合を修正しました。

Exp▶Str( ) コマンドとエラー

sentaro様

Ver 0.99m をインストールしました。

Exp▶Str( )コマンドがありますが、これは純正とコンパチでなくて拡張コマンドという理解でいいのでしょうか?

ところで、Ver 0.99m にしたところ、これまで 280MHz で殆どトラブルが無かったのですが、頻繁にエラーが発生して [EXIT] でリスタートとなってしまいます。

多くの場合が、コマンド選択画面でコマンドを選択する際に起きています。

一度ご確認頂けませんか?

Re: アドイン版 C.Basic ver.0.99m テスト版 その9.9m(XORバグ修正&行列名デフォルト削除版)

sentaro様


Ver 0.99m ですが、

> ・Circle,F-LineのXorモードでの描画に不具合があったのを修正しました。

修正を確認できました。


> ・行列名における要素の型のデフォルト指定(Mat B, Mat C, Mat D, Mat W, Mat I, Mat L)を廃止しました。

行列のサフィックス .p / .b / .f / .l が登場したのは Ver 0.93 なので、今回バージョンアップしたライフゲーム Ver 0.74 は、C.Basic Ver 0.93 以降で動作するということですね。


>  デフォルトでは実数モードではすべて実数行列、整数モードではすべて整数行列となります。

ここも、ポイントですね!

ライフゲームの場合は、これまでの Ver 0.73 で、冒頭に '#CBint を書います。
或いは、Setup で Execute mode を Int% にしても、行列は整数行列になりますよね?

私の勘違いの可能性濃厚ですが...


C.Basic Ver 0.99m の整数モードでライブゲーム 0.73 を実行させると、行列の領域確保のところで、Not enough Memoryエラーが出ます。

ここで、[F4](S.ot)で進めると、次に Mat B→Mat C のところで、No Matrix array エラー。

さらに [F4] (S.ot) で進めると、1→Mat C[X,Y] のところで、Dimension ERROR 発生。

さらに強引に [F4] (S.ot) で進めると、同じところで今度は Syntax ERROR 発生。


何か根本で勘違いしているかも知れず、ご教示頂けませんか?


Re:Exp▶Str( ) コマンドとエラー

管理人様、こんにちは!

>Exp▶Str( )コマンドがありますが、これは純正とコンパチでなくて拡張コマンドという理解でいいのでしょうか?

これは最初は互換実装するつもりでコマンドリストに加えていたのですが、結局現状のC.Basicでは互換仕様ではあまり意味が無いということで未実装ですのでエラーになってしまいます(^^;
Exp▶Str( )の純正仕様は、いわゆる数値から文字列への変換コマンドではなく、グラフ式(Yn)や数式メモリーから文字列メモリー(Str n)への変換コマンドなのですが、C.Basicでは、
Yn→Str n
で同等機能が実現できるようになっているので…、と思ったら出来てませんでした(^^;

ということで、そこのところのバグと、Exp▶Str( )コマンドをグラフ式(Yn)から文字列メモリー(Str n)への変換だけですが、一応純正互換の範囲で実装してみました。
数値から文字列への変換コマンドとしてはSprintf()コマンドを追加しているので、それを使うか、純正コマンドの範囲で組み立てるかというところですね。


>ところで、Ver 0.99m にしたところ、これまで 280MHz で殆どトラブルが無かったのですが、頻繁にエラーが発生して [EXIT] でリスタートとなってしまいます。

んと、うちのfx-9860GIIでは限界付近でもエラーが出ないようなのですが、ノーマルクロックでもたまに原因不明のOSエラーでリセットになることがあるのでそれかもしれません(^^;
一段階下げてエラーが出ないようでしたら、280MHz時にCPUの動作異常が起きている可能性も有りかもです。
プログラムのコード配置でCPU動作マージンがぎりぎりになってしまった可能性がありますね。
今回差し替えアップしたVer.0.99mではどうでしょうか?


>行列のサフィックス .p / .b / .f / .l が登場したのは Ver 0.93 なので、今回バージョンアップしたライフゲーム Ver 0.74 は、C.Basic Ver 0.93 以降で動作するということですね。

Ver.0.93ではビット行列が加わりまして、サフィックス指定できるようになったのはVer.0.63からなので割と早かったですね(^^;


>ライフゲームの場合は、これまでの Ver 0.73 で、冒頭に '#CBint を書います。
>或いは、Setup で Execute mode を Int% にしても、行列は整数行列になりますよね?

はい、動作モードでデフォルトの行列仕様が変わるので整数モードであれば整数行列となります(^^)


>C.Basic Ver 0.99m の整数モードでライブゲーム 0.73 を実行させると、行列の領域確保のところで、Not enough Memoryエラーが出ます。

行列確保できないので正常なエラー反応です。


>ここで、[F4](S.ot)で進めると、次に Mat B→Mat C のところで、No Matrix array エラー。

行列が確保出来てないまま続行したので、行例が存在しないエラーに。


>さらに [F4] (S.ot) で進めると、1→Mat C[X,Y] のところで、Dimension ERROR 発生。

純正CasioBasicでもDimension ERRORになりますが、C.Basicではエラーの出る箇所が行列の要素のところなのでちょっと違ってます(^^;
Mat Cが存在しないので、本来はNo Matrix array エラーにならないといけないところなのでここはちょこっと修正しました。


>さらに強引に [F4] (S.ot) で進めると、同じところで今度は Syntax ERROR 発生。

カーソル位置から再スタートなのでSyntax ERROR ということに。


>何か根本で勘違いしているかも知れず、ご教示頂けませんか?

エラーを無視して進めた場合ですから、これは現在のC.Basic仕様では正常な動作状況となります(^^;


ということで、Yn→Str nバグ修正とExp▶Str( )コマンド追加と行列エラーの出方を修正したバージョンです。
Ver.0.99m差し替えです。

アドイン版 C.Basic ver.0.99m テスト版 その9.9m(XORバグ修正&行列名デフォルト削除+Exp>Strバグ修正版)
http://pm.matrix.jp/CB/CBASIC099m.zip
・Exp>Str()コマンドをグラフ式(Yn)から文字列メモリー(Str n)への変換だけですが実装しました。
(例)Exp>Str(Y1, Str 1)
 尚、グラフ式(Yn)から文字列メモリー(Str n)への変換は、文字列のコピー構文でも可能です。
(例)Y1→Str 1
・行列への代入で、行列が確保されていなかった場合はNo Matrix array に変更しました。

Re: Re:Exp▶Str( ) コマンドとエラー

sentaro様

> ということで、そこのところのバグと、Exp▶Str( )コマンドをグラフ式(Yn)から文字列メモリー(Str n)への変換だけですが、一応純正互換の範囲で実装してみました。

C.Basic コマンドリファレンス(まだコマンドリストだけですが...)で、このコマンドを純正対応ということで変更しておきました。

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


> 数値から文字列への変換コマンドとしてはSprintf()コマンドを追加しているので、それを使うか、純正コマンドの範囲で組み立てるかというところですね。

いくつかの考え方がありそうですが、私の勝手な推測ですと、純正Casio Basicを使っている人のなかで、文字列操作をどの程度使うのか?ということ。そしてしれほど居ないのではないかと...

Casio Basicプログラミングに、グラフ機能をとれhど使っているのか?という話もあって、学校の先生なら授業用にしっかり使い込んでいる可能性はありそうですが、先生でない一般人は、はたしてどうでしょうか?これまた私の勝手な想像では、それほど居ないだろう...と

従って、今のままでも特に困らないのではないかと...そんな感じで必要になったら、そしてsentaro様がその気になったら実装するといった感じで如何でしょうか?




> >ところで、Ver 0.99m にしたところ、これまで 280MHz で殆どトラブルが無かったのですが、頻繁にエラーが発生して [EXIT] でリスタートとなってしまいます。

これについては、中身が実装されていない Exp▶Str( )を使おうとしてエラーが発生していたようで、CPU負荷が瞬間増大していたという説が納得できそうです。

このようなケースでROMへの異常発生(一番避けたい問題)の可能性は、どの程度あるものでそうか?
あまり関係ないと思っていたのですが...何のため伺いたいと思います。



> Ver.0.93ではビット行列が加わりまして、サフィックス指定できるようになったのはVer.0.63からなので割と早かったですね(^^;

あ、本当だ...バージョンアップ履歴を改めて確認すると、そうですね。
これに合わせて、記事も変更しておきました。



> >ライフゲームの場合は、これまでの Ver 0.73 で、冒頭に '#CBint を書います。
> >或いは、Setup で Execute mode を Int% にしても、行列は整数行列になりますよね?
>
> はい、動作モードでデフォルトの行列仕様が変わるので整数モードであれば整数行列となります(^^)
>
>
> >C.Basic Ver 0.99m の整数モードでライブゲーム 0.73 を実行させると、行列の領域確保のところで、Not enough Memoryエラーが出ます。
>
> 行列確保できないので正常なエラー反応です。


ここで、質問です。

C.Basic 0.99m で ライフゲーム Ver 0.73 (古いバージョン)を動かそうとするとき、

ライフゲームでは、'#CBint と記述していて、さらにC.BasicのSetupで整数モードにします。この時,

{127,63}→Dim Mat B
{127,63}→Dim Mat C

で、Mat B と Mat C は整数行列になっている筈なので、この領域確保でエラーがなぜ出るのでしょうか?

デフォルトで Double行列になっていることが、'#CBint や Setupでの動作モードを Intにすることより優先されるということなのでしょうか?


ところで、話は全く変わりますが、C.Basicのファイルリストで、フォルダも表示されますよね。このフォルダの中には入れるのですが、外に出るのはどうすれば良いでしょうか?

操作が分からず、外に出られなかったので、Memory アイコンから、メインメモリにある @CBASIC フォルダを消去して外に出ました。

これにはチョットした背景があって、結構なプログラムを書いて使っているうちに、他の方が作ったプログラム、特にサブルーチンのファイル名がかち合うようになっています。まあ、人が考えるのは似たようなのでしょうね、似たような目的のサブルーチンなら同じ名前になって当然です。

そこで、ファイル名が重複するプログラムは、フォルダに入れて使えば良いだろう...というわけです。


これに関連して、メインプログラムから、フォルダ内にあるサブルーチンを呼び出せると助かります。
例えば、ルートにはサブルーチンにあるプログラムを呼び出すメニュープログラムを作れるようになります。


ご検討お願い致します。


気が早いですが、世界公開用 Web のひな形です

sentaro様

かなり気の早い話ですが、世界公開の時は、こなん感じかな?という入り口ページを作ってみました。

英語で恐縮ですが、英語でないとダメなんで...

http://egadget2.web.fc2.com/index_e.html

まだまだ、これから大幅な変更は必至ですが、取りあえずです。


なぜ今?ということなのですが、トップページに sentaro21 様の紹介をしっかりと載せてみたからです。

先ず、Sharing Resources! では、ここで共有するコンテンツをざっと紹介

で、C.Basic の紹介では、sentaro様に登場願って、誕生秘話をチョコッと...
そして C.Basic の最後の方で、先日紹介した C.basic のページへ誘導。さらにライフゲームのページへも誘導。まだコマンドリファレンスも無いのですが、先ずは使ってもらうことは出来る、という感じ...まあ今後の細かいコンテンツの構造をチョコット試してみました。ライフ関数を実装したコンパイラ版シミュレーション版 Ver 0,84 (これも Ver 0.83からバージョンアップ)も紹介してます。

チョット下へいって Viva Casio Basic! では、Casio Basicってええもんやで、とその簡便さ、できの良さ、互換性の高さをメインに紹介。

で、次の Make Your Calc Faster! では、オーバークロックツールを紹介!

一連のプロジェクトは sentaro様抜きでは語れないというアピールになっております。


ライフゲーム Ver 0.74 は、起動したらいきなり手動でのパターン作りの説明が登場してしまっていたので、手入力かプリセットの選択かの画面を最初に表示して、手入力の場合に説明を表示。。。とチョコット変更して、そのままアップし直しています。

ダウンロードファイルには、以前お勧め頂いたようにテキストも同梱しました。


アドイン Casio Basic のページ
http://egadget.blog.fc2.com/blog-entry-491.html

で、過去の C.Basic と最新のもので、ライフゲームでのベンチマークを更新しました。

最新版 Ver 0.99m は Ver 0..80 とほぼ同じですね。一瞬 Ver 0.83 で速くなったのが少し戻っていたわけですが、結果的に速度低下無しに維持していることが分かりました。


やっとこさ、進行中のプロジェクト全体の進め方が見えてみて、枠組みも試しに作れたので、あとはコツコツと内容を各だけ,,,といったところに落ち着いてきました。

全体として英語版はあっさり味付けになりそうです。

Re:Re: Re:Exp▶Str( ) コマンドとエラー

管理人様、こんにちは!

>C.Basic コマンドリファレンス(まだコマンドリストだけですが...)で、このコマンドを純正対応ということで変更しておきました。

最初から純正対応になっていたので、そのままでよかったですね(^^;
お手数おかけしました。


>いくつかの考え方がありそうですが、私の勝手な推測ですと、純正Casio Basicを使っている人のなかで、文字列操作をどの程度使うのか?ということ。そしてしれほど居ないのではないかと...

最初から文字列が装備されていればある程度使われることはあると思いますが、CasioBasicは電卓のプログラム言語なので文字列が使えなくても特に困らなかったというのはあると思います。
fx-9860GIIのVer2.00以降で文字列対応したといえども、何か微妙に中途半端な感がするので、今でもあまり使われて無いかもしれませんね(^^;


>Casio Basicプログラミングに、グラフ機能をとれhど使っているのか?という話もあって、学校の先生なら授業用にしっかり使い込んでいる可能性はありそうですが、先生でない一般人は、はたしてどうでしょうか?これまた私の勝手な想像では、それほど居ないだろう...と

グラフ電卓におけるCasioBasicは本体の各種機能を一連の流れで自動実行させるためのスクリプト言語みたいな感じなので、使いこなせばそれなりに便利なものだと思いますが、そこまで使うかというとなかなか使わないですよね(^^;


>従って、今のままでも特に困らないのではないかと...そんな感じで必要になったら、そしてsentaro様がその気になったら実装するといった感じで如何でしょうか?

はい、C.Basicにおけるグラフ機能はViewWindowやPlotコマンドでグラフィックカーソルを実装したことにより、それが使えるコマンドとして一番シンプルなグラフ機能のみを組み込んだものなのでこれ以上のグラフ機能に対応することはたぶん無いと思います(^^;
プログラミングの観点から言えば基本的なグラフィックスコマンドがストレス無く使えることの方が大事ですよね。


>このようなケースでROMへの異常発生(一番避けたい問題)の可能性は、どの程度あるものでそうか?

CPUやメモリの動作がギリギリでない限りはプログラムのバグや何かでROMへの異常発生はほぼ皆無と言えると思います。
メモリの読み出しや書き込みがギリギリのタイミングだと想定外の数値が書き込まれたり読み出されたりで、ROMへの書き込み時に全然違うアドレスに書き込んでしまうのが危ないです。
それがOS格納領域ならまだいいのですが、ブート領域を破壊してしまえばもう二度と起動しなくなります。
今までの経験上、電卓単体で使っているときはOS領域への異常が起きたことは無くて、過去CG10のROM破損は2度ともUSBを挿していた時に起きた可能性大なので、
USBを挿している時にストレージメモリへの書き込みがあった場合にCPUの動作異常やメモリアクセス異常が起きるとほぼ確実にROMへの異常書き込みに繋がります。
運が良ければリセット程度で事なきを得ますが、運が悪いとブート領域破損で永遠におしゃかに…(^^;

USBを挿している時が危ないというのは、通常はストレージメモリ領域だけが書き換え可能になっているところが、USB挿している時だけはROM領域全体が書き込み可能な状態になっている可能性があります。
もし、ROMのブート&OS領域が書き換えから保護されている状態だと、例えCPUやメモリアクセスの異常が起きても保護された領域は書き換えされないので、壊れることは無いと思われます。
ですので、USBを繋いだ状態、これが電卓にとって一番危険な状態だというのが今のところの認識です。
これは確実な情報ではなく、あくまで経験上での話なので参考に留めておいて下さい(^^;


>{127,63}→Dim Mat B
>{127,63}→Dim Mat C
>で、Mat B と Mat C は整数行列になっている筈なので、この領域確保でエラーがなぜ出るのでしょうか?

C.Basicの起動時に使えるメモリが約40KB、そこからファイルリストのバッファ(ファイル数で変化します)を差し引くと、約38KBがプログラムや行列確保に使える領域になります。
ライフゲームはメインとサブプログラム合計で9KB、編集エリアの付け足し分を足すと11KBほど必要なので残りは27KBほどになります。
この27KBが行列確保に使える領域ですが、{127,63}の整数行列に必要なサイズは127×63×4=32004バイト必要なので足りないということです(^^;
バイト行列やビット行列にするとそれぞれ必要な確保サイズが激減するのでやっと確保出来ることとなります。


>ところで、話は全く変わりますが、C.Basicのファイルリストで、フォルダも表示されますよね。このフォルダの中には入れるのですが、外に出るのはどうすれば良いでしょうか?
>操作が分からず、外に出られなかったので、Memory アイコンから、メインメモリにある @CBASIC フォルダを消去して外に出ました。

あ、一応、[SHIFT]+[EXIT](QUIT)でルートフォルダに戻れます。


>これに関連して、メインプログラムから、フォルダ内にあるサブルーチンを呼び出せると助かります。
>例えば、ルートにはサブルーチンにあるプログラムを呼び出すメニュープログラムを作れるようになります。

現状では単一フォルダでの動作が基本ということで、サブフォルダに移動するとそこがデフォルトのディレクトリということになって、次回もそのサブフォルダで起動するようになっています。
これはフォルダの目的が、同じプログラムのメイン/サブプログラムをフォルダにまとめて格納というつもりの仕様だったので、メインプログラムから別のサブフォルダにあるファイルを呼び出すのは想定外でした(^^;
ですので、今の仕様だとお気に入りも新たにそのフォルダで設定し直す仕様で、フォルダ移動するとお気に入りもリセットされてしまうことで、フォルダ間を行ったり来たりするとちょっと不便な仕様になってしまってます(^^;

サブフォルダにあるプログラムを呼び出すことは可能なので、次回バージョンで取り入れてみたいと思います(^^)

Re: 気が早いですが、世界公開用 Web のひな形です

管理人様、こんにちは!

>かなり気の早い話ですが、世界公開の時は、こなん感じかな?という入り口ページを作ってみました。
>英語で恐縮ですが、英語でないとダメなんで...
http://egadget2.web.fc2.com/index_e.html

うわ!これは超カッコいい!です!
カッコ良すぎます!!
こういうCasio電卓サイトが日本で生まれるなんて、さすが管理人様です!!
まるで海外のサイトを見ている感覚になりますね(^^)


>なぜ今?ということなのですが、トップページに sentaro21 様の紹介をしっかりと載せてみたからです。
>先ず、Sharing Resources! では、ここで共有するコンテンツをざっと紹介
>で、C.Basic の紹介では、sentaro様に登場願って、誕生秘話をチョコッと...

なんかもう汗出るくらい恐縮するばかりですけど、どうもありがとうございます!!(^^)


>そして C.Basic の最後の方で、先日紹介した C.basic のページへ誘導。さらにライフゲームのページへも誘導。まだコマンドリファレンスも無いのですが、先ずは使ってもらうことは出来る、という感じ...まあ今後の細かいコンテンツの構造をチョコット試してみました。ライフ関数を実装したコンパイラ版シミュレーション版 Ver 0,84 (これも Ver 0.83からバージョンアップ)も紹介してます。

ライフゲームは動画で見ると速度変化が一目瞭然なサンプルプログラムですよね(^^)


>チョット下へいって Viva Casio Basic! では、Casio Basicってええもんやで、とその簡便さ、できの良さ、互換性の高さをメインに紹介。

なんてったって基本はCasioBasicですね(^^)


>で、次の Make Your Calc Faster! では、オーバークロックツールを紹介!
>一連のプロジェクトは sentaro様抜きでは語れないというアピールになっております。

C.BasicのCG対応にコンパイラもありますし、これからも出来るだけご期待に添えるように頑張ってまいります(^^)


>で、過去の C.Basic と最新のもので、ライフゲームでのベンチマークを更新しました。
>最新版 Ver 0.99m は Ver 0..80 とほぼ同じですね。一瞬 Ver 0.83 で速くなったのが少し戻っていたわけですが、結果的に速度低下無しに維持していることが分かりました。

今のところバージョンアップで速度に大きな影響のある変更は無いのですが、プログラムソースを書き換えてビルドする度に微妙に速度の違うバージョンが出来るのが悩みの種ですね。
以前のバージョンから出来るだけ変化の無いようにするのがちょっと一苦労だったりしています(^^;

あ、Ver.0.99mの29MHzの数値がライフゲームのページの数値よりも倍くらい遅くなってます(^^;

ElseIf

sentaro様

取り急ぎ、質問です。

ElseIf は複数重ねて使えないのでしょうか?

例えば、

While 1
ClrText
?->A
If A=1:Then
"ONE"◢
ElseIf A=2:Then
"TWO"◢
ElseIf A=3:Then
"THREE"◢
Else
"ELSE"◢
IfEnd
WhileEnd

これで、エラーが発生します。

仕様はどうなっています?

Re: Re: 気が早いですが、世界公開用 Web のひな形です

sentaro様

> >http://egadget2.web.fc2.com/index_e.html
>
> うわ!これは超カッコいい!です!
> カッコ良すぎます!!
> こういうCasio電卓サイトが日本で生まれるなんて、さすが管理人様です!!
> まるで海外のサイトを見ている感覚になりますね(^^)


ありがとうございます。

FC2 が用意してくれているテンプレートをチョコッと弄っただけです。


> ライフゲームは動画で見ると速度変化が一目瞭然なサンプルプログラムですよね(^^)

そうですね。いずれ動画を入れようと思いますが、現在の動画が手ぶれがあるので、きれいに取り直そうと思っています。


> なんてったって基本はCasioBasicですね(^^)

実は、これは最初から楽に使える秘訣だと思います。


> C.BasicのCG対応にコンパイラもありますし、これからも出来るだけご期待に添えるように頑張ってまいります(^^)

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

取りあえず、公開するために、コマンドリファレンスとして、独自拡張機能だけ簡単に作ろうと思います。

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

2つ3つ追加しました。


> あ、Ver.0.99mの29MHzの数値がライフゲームのページの数値よりも倍くらい遅くなってます(^^;

ありがとうございます。修正しておきました。

Re: Re:Re: Re:Exp▶Str( ) コマンドとエラー

sentaro様


> はい、C.Basicにおけるグラフ機能はViewWindowやPlotコマンドでグラフィックカーソルを実装したことにより、それが使えるコマンドとして一番シンプルなグラフ機能のみを組み込んだものなのでこれ以上のグラフ機能に対応することはたぶん無いと思います(^^;

了解です。


> プログラミングの観点から言えば基本的なグラフィックスコマンドがストレス無く使えることの方が大事ですよね。

私も同じように思います。


> USBを挿している時が危ないというのは、通常はストレージメモリ領域だけが書き換え可能になっているところが、USB挿している時だけはROM領域全体が書き込み可能な状態になっている可能性があります。
> もし、ROMのブート&OS領域が書き換えから保護されている状態だと、例えCPUやメモリアクセスの異常が起きても保護された領域は書き換えされないので、壊れることは無いと思われます。
> ですので、USBを繋いだ状態、これが電卓にとって一番危険な状態だというのが今のところの認識です。
> これは確実な情報ではなく、あくまで経験上での話なので参考に留めておいて下さい(^^;

貴重な経験談をありがとうございます。


> >{127,63}→Dim Mat B
> >{127,63}→Dim Mat C
> >で、Mat B と Mat C は整数行列になっている筈なので、この領域確保でエラーがなぜ出るのでしょうか?
>
> C.Basicの起動時に使えるメモリが約40KB、そこからファイルリストのバッファ(ファイル数で変化します)を差し引くと、約38KBがプログラムや行列確保に使える領域になります。
> ライフゲームはメインとサブプログラム合計で9KB、編集エリアの付け足し分を足すと11KBほど必要なので残りは27KBほどになります。
> この27KBが行列確保に使える領域ですが、{127,63}の整数行列に必要なサイズは127×63×4=32004バイト必要なので足りないということです(^^;
> バイト行列やビット行列にするとそれぞれ必要な確保サイズが激減するのでやっと確保出来ることとなります。

ようやく理解できました。最初のメモリ割り付けの前にエラーになってしまうということですね。
あわせて、ご苦労が分かりました。



> あ、一応、[SHIFT]+[EXIT](QUIT)でルートフォルダに戻れます。

あ、そうですか...readme_J.txt に書いてありましたっけ?


> >これに関連して、メインプログラムから、フォルダ内にあるサブルーチンを呼び出せると助かります。
> >例えば、ルートにはサブルーチンにあるプログラムを呼び出すメニュープログラムを作れるようになります。
>
> 現状では単一フォルダでの動作が基本ということで、サブフォルダに移動するとそこがデフォルトのディレクトリということになって、次回もそのサブフォルダで起動するようになっています。
> これはフォルダの目的が、同じプログラムのメイン/サブプログラムをフォルダにまとめて格納というつもりの仕様だったので、メインプログラムから別のサブフォルダにあるファイルを呼び出すのは想定外でした(^^;
> ですので、今の仕様だとお気に入りも新たにそのフォルダで設定し直す仕様で、フォルダ移動するとお気に入りもリセットされてしまうことで、フォルダ間を行ったり来たりするとちょっと不便な仕様になってしまってます(^^;
>
> サブフォルダにあるプログラムを呼び出すことは可能なので、次回バージョンで取り入れてみたいと思います(^^)

先ずは、サブフォルダへ行って戻ったらお気に入りが消えない対処からお願い致します。
サブフォルダ内で完結するなら、仕様として良いと思います。

フォルダまたぎは、その後でも良いと思います。



ところで、以前から思っていたことなのですが、ファンクションメニューを出力するコマンドを追加できませんか?


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

Re: ElseIf

管理人様、こんにちは!

>ElseIf は複数重ねて使えないのでしょうか?

エラーの原因が分かりました。
ElseIfコマンドには問題がなく飛越先キャッシュの不具合でした(^^;
最初の実行ではOkでも、2度め以降のキャッシュされた状態ではエラーになってました。
次回バージョンで修正しておきます。


>取りあえず、公開するために、コマンドリファレンスとして、独自拡張機能だけ簡単に作ろうと思います。
http://egadget.blog.fc2.com/blog-entry-529.html
>2つ3つ追加しました。

CasioBasic互換部分はほぼ99%同じなので拡張機能だけでよいですね(^^)


>あ、そうですか...readme_J.txt に書いてありましたっけ?

あ゛…すみません、Ver.0.99jからQUITを追加したのでつい最近でした(^^;


>先ずは、サブフォルダへ行って戻ったらお気に入りが消えない対処からお願い致します。

お気に入りの消えてしまう仕様はこれはさすがになんとかしないといけないですね(^^;


>サブフォルダ内で完結するなら、仕様として良いと思います。
>フォルダまたぎは、その後でも良いと思います。

ファイルの扱いがフォルダ固定前提の仕様になっていたので若干の増築が必要ですが、根本的な使い勝手に関わる部分なのでフォルダアクセスもちゃんと出来るように対応してみます(^^)

Re: Re: ElseIf

sentaro様


> >ElseIf は複数重ねて使えないのでしょうか?
>
> エラーの原因が分かりました。
> ElseIfコマンドには問題がなく飛越先キャッシュの不具合でした(^^;
> 最初の実行ではOkでも、2度め以降のキャッシュされた状態ではエラーになってました。
> 次回バージョンで修正しておきます。

ありがとうございます。


> >取りあえず、公開するために、コマンドリファレンスとして、独自拡張機能だけ簡単に作ろうと思います。
> >http://egadget.blog.fc2.com/blog-entry-529.html
> >2つ3つ追加しました。
>
> CasioBasic互換部分はほぼ99%同じなので拡張機能だけでよいですね(^^)

私が言うのもなんですが、純正Casio Basic の細かなクセまで見事に互換になっていますね

そうなると、Inside Casio Basic もしっかり完成させないとダメですね。


> >先ずは、サブフォルダへ行って戻ったらお気に入りが消えない対処からお願い致します。
>
> お気に入りの消えてしまう仕様はこれはさすがになんとかしないといけないですね(^^;

> ファイルの扱いがフォルダ固定前提の仕様になっていたので若干の増築が必要ですが、根本的な使い勝手に関わる部分なのでフォルダアクセスもちゃんと出来るように対応してみます(^^)

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



ところで、お気に入りに設定できるのは最大7個ですよね?

これを超える場合のエラーメッセージが、Favorites Over ですが、over flow とか over max とかの意味と思いますが、Favorites Full の方がスグに分かる英語なような気がします。


テキスト変換

sentaro様


テキスト変換操作で気がついたことがあります。

File List で [SHIFT]を押して [F1](Text) が表示されている状態で、[EXE]キーを押すとテキスト変換されます。

おそらく[F1](EXE)と表示されているときに[EXE]キーを押すとプログラム実行するので、同じになっていると思います。

[EXE]キーを押してテキスト変換されない方が良いと思いますが、如何でしょうか?




> 管理人様、こんにちは!
>
> >ElseIf は複数重ねて使えないのでしょうか?
>
> エラーの原因が分かりました。
> ElseIfコマンドには問題がなく飛越先キャッシュの不具合でした(^^;
> 最初の実行ではOkでも、2度め以降のキャッシュされた状態ではエラーになってました。
> 次回バージョンで修正しておきます。
>
>
> >取りあえず、公開するために、コマンドリファレンスとして、独自拡張機能だけ簡単に作ろうと思います。
> >http://egadget.blog.fc2.com/blog-entry-529.html
> >2つ3つ追加しました。
>
> CasioBasic互換部分はほぼ99%同じなので拡張機能だけでよいですね(^^)
>
>
> >あ、そうですか...readme_J.txt に書いてありましたっけ?
>
> あ゛…すみません、Ver.0.99jからQUITを追加したのでつい最近でした(^^;
>
>
> >先ずは、サブフォルダへ行って戻ったらお気に入りが消えない対処からお願い致します。
>
> お気に入りの消えてしまう仕様はこれはさすがになんとかしないといけないですね(^^;
>
>
> >サブフォルダ内で完結するなら、仕様として良いと思います。
> >フォルダまたぎは、その後でも良いと思います。
>
> ファイルの扱いがフォルダ固定前提の仕様になっていたので若干の増築が必要ですが、根本的な使い勝手に関わる部分なのでフォルダアクセスもちゃんと出来るように対応してみます(^^)

IfEnd の扱いについて

sentaro様

最近のバージョンで IfEnd の扱いが変化しているようです。

以下のプログラムは、以前のバージョンではエラーにならなかったのですが、現在のバージョンではエラーになります。

"Press any key"->K
If K=1:Then
"ONE"
Else If K=2:Then
"TWO"
IfEnd

文法的には間違いですが、純正では許容されます。

最近、文法チェックを厳しくされましたか?

...というのは、以前純正Casio Basicで作ったゲームがあって、上記のように IfEndが一個足りなかったのです。純正でも少し前までの C.Basic で動いていましたが、現在のC.Basic ではエラーになります。

おかげで、文法ミスに気がついたという話しではあります(^^;


純正の拘るのか、文法チェックをしっかりやるのか、悩ましいところですね。

以前の C.Basic では動いていたのは、きちんと分かって許していたのなら、最新バージョンでも許すことは出来ませんか?

ElseIf と関連がありそうですが、どうでしょうか?


アドイン版 C.Basic ver.0.99n テスト版 その9.9n(フォルダ対応+ElseIf修正版)

管理人様、こんにちは!

>私が言うのもなんですが、純正Casio Basic の細かなクセまで見事に互換になっていますね
>そうなると、Inside Casio Basic もしっかり完成させないとダメですね。

実数の扱いが2進数だったりで100%互換にはならないですけど、細かなクセについては管理人様のCasioBasic探索の成果がすごく大きいですね。
いつもありがとうございます(^^)


>ところで、お気に入りに設定できるのは最大7個ですよね?

はい、今の仕様では最大7個になってます。

>これを超える場合のエラーメッセージが、Favorites Over ですが、over flow とか over max とかの意味と思いますが、Favorites Full の方がスグに分かる英語なような気がします。

了解です。今回バージョンで修正しました(^^)


>テキスト変換操作で気がついたことがあります。
>File List で [SHIFT]を押して [F1](Text) が表示されている状態で、[EXE]キーを押すとテキスト変換されます。
>おそらく[F1](EXE)と表示されているときに[EXE]キーを押すとプログラム実行するので、同じになっていると思います。
>[EXE]キーを押してテキスト変換されない方が良いと思いますが、如何でしょうか?

はい、これは管理人様のおっしゃる通りでした(^^;
ってことで修正しました。


>文法的には間違いですが、純正では許容されます。
>最近、文法チェックを厳しくされましたか?

ver0.89から導入されたIfとIfEndの対応チェックが有効になっている状態です。
デフォルトでは無効になっているはずが…何かの間違いで有効になっていました(^^;
管理人様が設定ファイルを削除初期化された時にIfEndの対応チェックが有効になったものと思われます。
この状態だとCasioBasicよりも厳しい状況なので、今回バージョンより、デフォルトでは無効にしておきました。


ということで、Ver.0.99nですが、
今回はファイル関連の変更点が多いのでバグが残ってる可能性大です(^^;


アドイン版 C.Basic ver.0.99n テスト版 その9.9n(フォルダ対応+ElseIf修正版)
http://pm.matrix.jp/CB/CBASIC099n.zip

・お気に入りリストがフォルダに対応しました。フォルダ移動してもお気に入りリストが消えることがありません。
 サブフォルダからルートへの移動は[SHIFT]+[EXIT](QUIT)ですが、カーソルがリストの先頭にある場合は[EXIT]でルートに移動するように変更しました。

・ファイルネーム入力時ににフォルダを指定すると別のフォルダ内のファイルにアクセスで
 フォルダ区切り文字は"/"もしくは"\"(バックスラッシュ)になります。
(例)Save "/SUB/TEST",Mat A
(例)Load("SUB/TEST")→Mat A

・ファンクションメニュー描画コマンドを追加しました。
(例)Fkey(1,"ABC")
 一番左側のファンクションメニューエリアにABCが描画されます。
(例)FkeyMenu(6,"ABC",R)
 一番右側のファンクションメニューエリアにABCが反転モードで描画されます。
(例)FkeyMenu(6,"",C)
 一番右側のファンクションメニューエリアを消去します。

・If~ElseIfの動作を修正しました。
・テキスト変換が[EXE]キーでも動作していたのを修正しました。
・小文字行列名が整数モードで使えなかったのを修正しました。
・お気に入りの最大数を超えた場合のエラーメッセージをFavorites Fullに変更しました。

・今回のバージョンより設定保存ファイルが変更になりますので以前のバージョンまでとは設定ファイルの互換性が無くなります。

Ver.0.99n差し替えです(^^;

フォルダ間呼び出しのバグ残ってました。
まだまだバグありそうです(^^;

Re: アドイン版 C.Basic ver.0.99n テスト版 その9.9n(フォルダ対応+ElseIf修正版)

sentaro様

お疲れ様です。


> 実数の扱いが2進数だったりで100%互換にはならないですけど、細かなクセについては管理人様のCasioBasic探索の成果がすごく大きいですね。
> いつもありがとうございます(^^)

見つけた詳細仕様をきっちり実装してくださるのは、凄いと思います。こんな形で実を結ぶとは思いもよりませんでした。

頑張ってコマンドリファレンスとマニュアル(実はこれも重要ですね)を作ってゆきます。

UCFでは、Your Project で On Calc Language, compiler の話題が出ています。これを見たもので、C.Basicも早く紹介できるようにしたいと思っています。



> >これを超える場合のエラーメッセージが、Favorites Over ですが、over flow とか over max とかの意味と思いますが、Favorites Full の方がスグに分かる英語なような気がします。
>
> 了解です。今回バージョンで修正しました(^^)

ありがとうございます。ちょっと伝え方が悪かったと思いますが、Full Favorites にすることを提案したつもりでした。これが最も自然な英語ですよね。


> >テキスト変換操作で気がついたことがあります。
> >File List で [SHIFT]を押して [F1](Text) が表示されている状態で、[EXE]キーを押すとテキスト変換されます。
> >おそらく[F1](EXE)と表示されているときに[EXE]キーを押すとプログラム実行するので、同じになっていると思います。
> >[EXE]キーを押してテキスト変換されない方が良いと思いますが、如何でしょうか?
>
> はい、これは管理人様のおっしゃる通りでした(^^;
> ってことで修正しました。

確認致しました。[F1](Text)が表示されているときは、[EXE]キーが効かないようになりましたね。



> >文法的には間違いですが、純正では許容されます。
> >最近、文法チェックを厳しくされましたか?
>
> ver0.89から導入されたIfとIfEndの対応チェックが有効になっている状態です。
> デフォルトでは無効になっているはずが…何かの間違いで有効になっていました(^^;
> 管理人様が設定ファイルを削除初期化された時にIfEndの対応チェックが有効になったものと思われます。
> この状態だとCasioBasicよりも厳しい状況なので、今回バージョンより、デフォルトでは無効にしておきました。

わっ、そうか Setup で確認して変更すれば良かったのでですね!

C.Basic Command Reference に ElseIf Statement の説明を追加しました。
http://egadget.blog.fc2.com/blog-entry-529.html




> ということで、Ver.0.99nですが、
> 今回はファイル関連の変更点が多いのでバグが残ってる可能性大です(^^;

はい、バグ出しにいそしみます(^^;


ところで、1つ前の Ver 0.99m ですが、色々とテストしていて、期待した動作でないと思うソースファイルを保存する時、Syntax ERRORで、リスタートすることが結構あります。File List で Can't find File エラーが出ることもありました。最近は C.Basic のテストではノーマルクロックにしています。それで上記のようなエラーにそく遭遇していました。

Ver 0.99n でどうなるか、様子を見ようと思います。


サブフォルダ関係については、これからテストさせて頂きますね。


ところで、今日は2点ほど確認があります。

値渡しのサブルーチン機能のテストのための、以下のプログラムを試してみてください。

<メインプログラム>
*File Name: "-PROGTEST"
"Press key"
Prog "-PROGB",Getkey1

<サブルーチン>
*File Name: "-PROGB"
Local k
Switch k
Case 72
"ONE"
Break
Case 62
"TWO"
Break
Case 52
"THREE"
Break
Default
"ELSE"
SwitchEnd


メインプログラムで、Getkey1 や Getkey2 の後に改行や:が有る時は、期待した通りの動作をします。
一方、Getkey1 や Getkey2 の後に改行や:が無い時は、上のプログラムだと1回目のキー入力には応答せず、2回目のキー入力に応答します。

おそらく Getkey1 や Getkey2 がプログラムの最後に来ることは想定していないことから、そしてこれらのコマンドは後ろにスペースを伴わない作りだからだろうと思いますが、改善できますか?


次は、Eng コマンドです。

Engコマンドで、EngOn と EngOff の切替えがうまく動作していないようです。

純正Casio Basicでは以下のコードが正常動作しますが、C.Basic Ver 0.99m や 0.99n では切替が出来ていないようです。

Eng
0.001

これを繰り返すたびに、表示が 0.001 と 1m と切り替わることは。純正で確認しています。


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



Re: Re: アドイン版 C.Basic ver.0.99n テスト版 その9.9n(フォルダ対応+ElseIf修正版)

sentaro様


アンケートコーナーで新しい項目を追加しました。
http://egadget.blog.fc2.com/blog-entry-506.html


というのも、これまでにメールやコメントで頂く内容を見ると、過去にプログラミングの経験があって、色々な理由で長らく中断した後に電卓でプログラミングをやってみよう、という方が結構いらっしゃいます。私自身も同じでして、そのような人向けに作ろうと思ったのが、「Casio Basic辞典」のような「インサイド Casio Basic」なんですね。

このような方向性を紹介したエントリーもアップしました。

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


Re:Re:Re: アドイン版 C.Basic ver.0.99n テスト版 その9.9n(フォルダ対応+ElseIf修正版)

管理人様、こんにちは!

>UCFでは、Your Project で On Calc Language, compiler の話題が出ています。これを見たもので、C.Basicも早く紹介できるようにしたいと思っています。

WSC On-calc C Compiler はファイルリスト関連のベースでそっくり参考にさせていただいたプログラムですけど、3年前くらいからFastbasicのプロジェクトトピックもありますね。


>ありがとうございます。ちょっと伝え方が悪かったと思いますが、Full Favorites にすることを提案したつもりでした。これが最も自然な英語ですよね。

あ゛…なるほどです(^^)
ってことで再度修正しておきました。


>C.Basic Command Reference に ElseIf Statement の説明を追加しました。
http://egadget.blog.fc2.com/blog-entry-529.html

分かりやすくていいですね。
ありがとうございます(^^)


>ところで、1つ前の Ver 0.99m ですが、色々とテストしていて、期待した動作でないと思うソースファイルを保存する時、Syntax ERRORで、リスタートすることが結構あります。File List で Can't find File エラーが出ることもありました。最近は C.Basic のテストではノーマルクロックにしています。それで上記のようなエラーにそく遭遇していました。

これは同じ現象がこちらでもたまに確認できてます。
おそらく内部でメモリ領域不足が起きているからだろうと思われるのですが、いつも発生するわけで対策が後回しになってしまっています(^^;
0.99n以降でのフォルダ移動はその都度ファイルリスト更新でメモリ断片が起きやすいので、さらに発生頻度が増える可能性有りです(^^;
リスタートで電卓が壊れる可能性はほぼ無いと思われますが、リスタートになるのはさすがに精神衛生上よろしくないのでエラーの発生メカニズムが掴めたらすぐに対策したいと思います。


>おそらく Getkey1 や Getkey2 がプログラムの最後に来ることは想定していないことから、そしてこれらのコマンドは後ろにスペースを伴わない作りだからだろうと思いますが、改善できますか?

確認しました。おっしゃるとおりプログラムの最後というのが想定外でした(^^;
ってことで、ちゃんと動作するように修正しておきました。


>Engコマンドで、EngOn と EngOff の切替えがうまく動作していないようです。

これはEngコマンドサポート時(Ver.0.66)にEng状態を読みだすシステム変数扱いになっていました(^^;
ということで、コマンドとして純正互換になるように仕様を戻しました。

Eng単独で使うと切り替えコマンドとして作用し、式の中で使うとEng状態を示すシステム変数となります。
式の中で使うには()で挟んで(Eng)とすればよいです。



>アンケートコーナーで新しい項目を追加しました。
http://egadget.blog.fc2.com/blog-entry-506.html

これはまた興味深いアンケートですね。


>というのも、これまでにメールやコメントで頂く内容を見ると、過去にプログラミングの経験があって、色々な理由で長らく中断した後に電卓でプログラミングをやってみよう、という方が結構いらっしゃいます。私自身も同じでして、そのような人向けに作ろうと思ったのが、「Casio Basic辞典」のような「インサイド Casio Basic」なんですね。

その昔、電卓やポケコン、8ビットPCの時代は目的のプログラムは自作するのが当たり前でしたが、WinPC時代になってからはどこかに目的のプログラムが存在しているという理由でほぼ自作する必要が無くなりました(^^;
そして今、また電卓、それも高機能グラフ電卓ですが、必要な物はやっぱり自作するしかない世界なので、プログラミングの楽しみが蘇ったわけですね(^^)
管理人様のCasioBasic探索は非常に興味深い内容が多く、C.Basicの互換仕様には必須の「インサイド Casio Basic」にはとっても期待しています(^^)



それでは0.99n差し替えです(^^;
フォルダ関連で多少のバグ修正しました。

アドイン版 C.Basic ver.0.99n テスト版 その9.9n(フォルダ対応+ElseIf修正+バグ修正版)
http://pm.matrix.jp/CB/CBASIC099n.zip

・Engコマンドを純正CasioBasic同様のEngモード切り替えとしました。
 Engモードの状態を知るには(Eng)で読み出せます。
 返り値0:EngOff
 返り値1:EngOn

・Getkey1、Getkey2がプログラムの最後に来た時にコマンドが二回繰り返される不具合を修正しました。
・お気に入りの最大数を超えた場合のエラーメッセージをFull Favoritesに変更しました。

Re: Re:Re:Re: アドイン版 C.Basic ver.0.99n テスト版 その9.9n(フォルダ対応+ElseIf修正版)

sentaro様


最新版 0.99n で、フォルダ関連を触ってみました。

で、Memory Manager 或いは FA-124A でストレージメモリにフォルダを作ったのですが、C.Basicではフォルダとして認識されません。

0,99m ではフォルダとして認識していたと思います。

いきなり、ここで躓いています。


> WSC On-calc C Compiler はファイルリスト関連のベースでそっくり参考にさせていただいたプログラムですけど、

そういえば、以前そのようにおっしゃっていたのを思い出しました。


> 3年前くらいからFastbasicのプロジェクトトピックもありますね。

正直、アドインを試すのが、チョット怖いと思うことがあります。



> ってことで再度修正しておきました。

確認しました。



> >ところで、1つ前の Ver 0.99m ですが、色々とテストしていて、期待した動作でないと思うソースファイルを保存する時、Syntax ERRORで、リスタートすることが結構あります。File List で Can't find File エラーが出ることもありました。最近は C.Basic のテストではノーマルクロックにしています。それで上記のようなエラーにそく遭遇していました。
>
> これは同じ現象がこちらでもたまに確認できてます。
> おそらく内部でメモリ領域不足が起きているからだろうと思われるのですが、いつも発生するわけで対策が後回しになってしまっています(^^;
> 0.99n以降でのフォルダ移動はその都度ファイルリスト更新でメモリ断片が起きやすいので、さらに発生頻度が増える可能性有りです(^^;
> リスタートで電卓が壊れる可能性はほぼ無いと思われますが、リスタートになるのはさすがに精神衛生上よろしくないのでエラーの発生メカニズムが掴めたらすぐに対策したいと思います。


確かに断片化が激しいのは体感しています。C.Basic肥大化の限界が近づいてきているのかも知れませんね。

フォルダを超えたファイルアクセスは、取りあえず置いておいて、フォルダ内にあるメインとサブルーチンだけで確実に実行できるようにするのを優先させませんか?これだと、一旦最適化すれば断片化が進むことを抑えられると思いますが、如何でしょうか?

他の方が作ったプログラムには、自分が作ったものと同じファイル名があって使いづらいという問題を、サブフォルダへ逃がして解決するだけでも、大きな意味があると思います。


> >おそらく Getkey1 や Getkey2 がプログラムの最後に来ることは想定していないことから、そしてこれらのコマンドは後ろにスペースを伴わない作りだからだろうと思いますが、改善できますか?
>
> 確認しました。おっしゃるとおりプログラムの最後というのが想定外でした(^^;
> ってことで、ちゃんと動作するように修正しておきました。

正常動作を確認しました。


> >Engコマンドで、EngOn と EngOff の切替えがうまく動作していないようです。
>
> これはEngコマンドサポート時(Ver.0.66)にEng状態を読みだすシステム変数扱いになっていました(^^;
> ということで、コマンドとして純正互換になるように仕様を戻しました。
>
> Eng単独で使うと切り替えコマンドとして作用し、式の中で使うとEng状態を示すシステム変数となります。
> 式の中で使うには()で挟んで(Eng)とすればよいです。


修正を確認しました。

式の中で使う場合、( )を使わなくても、以下のものだとOKです。

If Eng=1:Then "1"
Else "0"
IfEnd
Eng
0,001



> >アンケートコーナーで新しい項目を追加しました。
> >http://egadget.blog.fc2.com/blog-entry-506.html
>
> これはまた興味深いアンケートですね。

はい、皆さんの回答が楽しみです。



> その昔、電卓やポケコン、8ビットPCの時代は目的のプログラムは自作するのが当たり前でしたが、WinPC時代になってからはどこかに目的のプログラムが存在しているという理由でほぼ自作する必要が無くなりました(^^;
> そして今、また電卓、それも高機能グラフ電卓ですが、必要な物はやっぱり自作するしかない世界なので、プログラミングの楽しみが蘇ったわけですね(^^)

このような考え方は、面白いですね。そのとおりだと思います。


> 管理人様のCasioBasic探索は非常に興味深い内容が多く、C.Basicの互換仕様には必須の「インサイド Casio Basic」にはとっても期待しています(^^)

期待に応えられるように、努力しますね(^_^)/


またまたVer.0.99n差し替えです(^^;

管理人様、こんにちは!

>で、Memory Manager 或いは FA-124A でストレージメモリにフォルダを作ったのですが、C.Basicではフォルダとして認識されません。
>0,99m ではフォルダとして認識していたと思います。
>いきなり、ここで躓いています。

なんと、あろうことか、フォルダを認識しない仕様になっていたというかバグが入り込んでしまってて、フォルダ未対応になってしまってました(^^;

ってことで速攻修正差し替えです。
これでフォルダ機能を試せると思います(^^;


>式の中で使う場合、( )を使わなくても、以下のものだとOKです。

あ、確かに、この場合は大丈夫ですね。
区切り直後とか、コマンドでなく式しか認識ない箇所ではカッコは必要ないということになります(^^)

Re: またまたVer.0.99n差し替えです(^^;

sentaro様

移動中にフォルダ関係を触ってみています。

先ずは、ガノー様のYOKOLOTH3連作、YOKOLOTH, YOKOLITH95, YOKOLITH最終版を、それぞれ別のフォルダにガサッとコピーし、そこで遊んでみています。フォルダ内で、フォルダを跨がない条件だと問題ないことが確認できました。

このような力作では、多くのサブルーチンファイルがあるので、別フォルダへ格納して使うのが良いという良い例だと思います。

=====

次に、サブフォルダ内のメインファイルをお気に入り追加してみたところ、正常に追加され正常動作することも確認しました。


=====

このあと、プログラム上でサブフォルダアクセスまわりを、色々と触ってみようと思います。
ところで、何階層まで深いフォルダへのアクセスが可能でしょうか?

=====

ユーザーインターフェースについて、要望があります。

お気に入りに6個~7個のファイルを指定している時、サブフォルダに移行してもお気に入りが頭から表示されます。これは仕様通りの動作です。

この仕様ですが、サブフォルダに移行した時、サブフォルダ内の最初のファイルがファイルリストの一番上に来るようにできませんか?

というのも、サブフォルダに移行するときは、フォルダ内のファイルを実行させるか編集するという目的が必ずあります。なのでこのような仕様変更ができれば、ありがたいと思うわけです。如何でしょうか?

或いは、==== Favorites ===== の表示を1行目に持ってくるというのもアリで、この場合はお気に入りが有るけど、その下にサブフォルダのファイルを表示しています...ということが伝わると思います。まぁ、この例外的な処理はコードに無駄な負担をかけるような気がするので、そこはシンプルに「サブフォルダ先頭ファイルを1行目に表示」で全然問題無いとは思います。

なお、サブフォルダ表示の際にもお気に入り表示があるのはとても有り難くて、[EXIT]キーを押せば、スグにお気に入り先頭までスクロールされるので便利です。

ご検討ください。

GoSub について

sentaro様

GoSub で指定する引数ですが、

GoSub A, 123,456
.......
.......
Lbl A
'どうやって、123と456を受け取る?
return


引数の渡し方は、Local を使うのではないですよね?

また、サブルーチン中で GoSub を使う場合、GoSub に戻る際の Return で、サブルーチンが終了してメインへ戻る心配はありませんか?


: (区切りコード)について

sentaro様

区切りコードのもう一つの「表示/描画抑制機能」について、教えてください。

1) 表示/描画コマンドは、リフレッシュサイクル 約(1/40)秒で表示を行うが、例外のコマンドは何か?
  例外は、Locate, Text, ClrText, ClrGraph, Cls で、これらは実行時に画面書き換えを行う...で良いですか?

2) ビジーマーカーの書き換えタイミングは、リフレッシュサイクルと例外コマンドの実行の両方のタイミングで発生?

3) :の表示/描画抑制は、全ての表示/描画コマンドに有効か?


以上、確認させてください。


またまたまたVer.0.99n差し替えです(^^;

管理人様、こんにちは!

>このような力作では、多くのサブルーチンファイルがあるので、別フォルダへ格納して使うのが良いという良い例だと思います。

プログラムが複数に分かれた場合はサブフォルダ単位で管理、運用するのが一番ですね。
その観点で使えるようにフォルダ対応していたのがVer.0.99mまでだったのですが、お気に入りが消えるのが欠点でした(^^;
Ver.0.99nでやっと消えないようになったので結果としてサブフォルダにほぼ完全対応となりました(^^)


>ところで、何階層まで深いフォルダへのアクセスが可能でしょうか?

OSの仕様では1層までとなっていますのでC.Basicでも1層までの対応です(^^;


>この仕様ですが、サブフォルダに移行した時、サブフォルダ内の最初のファイルがファイルリストの一番上に来るようにできませんか?
>或いは、==== Favorites ===== の表示を1行目に持ってくるというのもアリで、この場合はお気に入りが有るけど、その下にサブフォルダのファイルを表示しています...ということが伝わると思います。

実装を考えた場合、管理人様のこの案が簡単かつ分かりやすいので、この仕様をそっくり採用させていただきました(^^)


>GoSub で指定する引数ですが、
>引数の渡し方は、Local を使うのではないですよね?

Ver.0.93でProgコマンドに引数が付く拡張時にGosubも追加したのですが、この時の引数仕様が小文字のaから順に代入される仕様でした。
それがVer.0.94でローカル変数導入で、Gosubは…引数が受け取れなくなってしまってます、って今気が付きました(^^;
今のところ、引数は使えない仕様のままです(^^;


>また、サブルーチン中で GoSub を使う場合、GoSub に戻る際の Return で、サブルーチンが終了してメインへ戻る心配はありませんか?

サブプログラムのProg~ReturnよりもGosub~Returnが優先するのでその心配はありません(^^)


アドイン版 C.Basic ver.0.99n テスト版 その9.9n(フォルダ対応+再々修正版)
http://pm.matrix.jp/CB/CBASIC099n.zip
・サブフォルダに移動する場合にリストの一番上にサブフォルダの先頭ファイルが来るようにしました。
・お気に入りリストのプログラムがカレントフォルダ以外にある場合はフォルダ名から表示されるようにしました。(但し先頭5文字までです。)
・今回より、隠しメモリ領域にファイルリストのバッファを移動してみました。(fx-9860GII以降)
 これによりフォルダ移動を繰り返してもヒープメモリの断片化は発生しなくなります。

Re: : (区切りコード)について

>1) 表示/描画コマンドは、リフレッシュサイクル 約(1/40)秒で表示を行うが、例外のコマンドは何か?
  例外は、Locate, Text, ClrText, ClrGraph, Cls で、これらは実行時に画面書き換えを行う...で良いですか?

はい。
ただ、Clr系はClrTextはコマンド実行時に即画面書き換えですが、Clrと ClrGraphは内部のVRAMだけの消去で次のグラフィックコマンドが実行された時に画面書き換えされる形になってます。


>2) ビジーマーカーの書き換えタイミングは、リフレッシュサイクルと例外コマンドの実行の両方のタイミングで発生?

はい、どちらもコマンド実行後にビジーマーカーを描画します。


>3) :の表示/描画抑制は、全ての表示/描画コマンドに有効か?

はい、Locate, Textを含めて全てのコマンドで有効です。

ということなので、
本来は強制的に画面書き換えをする専用コマンドも用意するのが自然な形なような気がしていますがどうしましょうか?(^^)

System ERROR 頻発

sentaro様


メモリ最適化は頻繁に行っているのですが、ファイルをリネームしたり保存するたびに、かなりの確率で System ERROR のためリスタートになっています。
どうもファイル書き込み時に何かありそうな感じです。

そちらでは如何でしょうか?

ところで、強制リフレッシュコマンドは、有ると良いと思います。

Re:System ERROR 頻発

管理人様、こんにちは!

>メモリ最適化は頻繁に行っているのですが、ファイルをリネームしたり保存するたびに、かなりの確率で System ERROR のためリスタートになっています。
どうもファイル書き込み時に何かありそうな感じです。
>そちらでは如何でしょうか?

なんか妙にシステムエラーが出るようになったなぁとは思っていたのですが、あろうことかメモリ解放する必要が無いのにメモリ解放していたのがエラーの原因でした(^^;
隠しメモリにバッファを移した際にエンバグしていた模様です。
ってことで致命的バグということで再度差し替え修正です(^^;


>ところで、強制リフレッシュコマンドは、有ると良いと思います。

了解です。
とりあえず強制リフレッシュコマンドとして、「PutDispDD」コマンドを(SDKそのまんまですけど)追加しておきました(^^)

すべての画面描画コマンドの最後に「:」を付けておいて、表示したい箇所で「PutDispDD」コマンドを使うとSDKで組む時と同じ描画システムになります。


アドイン版 C.Basic ver.0.99n テスト版 その9.9n(フォルダ対応+再々々修正版)
http://pm.matrix.jp/CB/CBASIC099n.zip

・隠しメモリ領域を使うファイルバッファ関連で致命的バグがあったのを修正しました。
・強制画面書き換えコマンドとしてPutDispDDコマンドを追加しました。

System ERROR 解消

sentaro様

早々のご対応、ありがとうございます。

System ERROR が発生しなくなりました。

> >ところで、強制リフレッシュコマンドは、有ると良いと思います。
>
> 了解です。
> とりあえず強制リフレッシュコマンドとして、「PutDispDD」コマンドを(SDKそのまんまですけど)追加しておきました(^^)
>
> すべての画面描画コマンドの最後に「:」を付けておいて、表示したい箇所で「PutDispDD」コマンドを使うとSDKで組む時と同じ描画システムになります。

そこで、C.Basic Command Reference に、以下を追加しました。PutDispDD を利用したサンプルコードを紹介しています。

: Multi-Statement Command & Refresh Suppression

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

説明が元分かり易いような書き方があるかも知れませんが...

そのうち書き直すかも知れません。

Goto や Gosub のラベル仕様

sentaro様


今日気付いたのですが、Gosub や Goto で使うラベルに数値を使う場合、かなり大きな数字まで使えます。

純正では、0~9に限定されていますので、上記は Casio Basic の拡張機能ですね。

ラベルに 例えば A1B2 としても動作します。

...ということは、文字列として認識されているようですね。


このラベルの記述について、仕様としてどうなっていますか?

System ERROR 解消

sentaro様

C.Basic Command Reference の下記の説明を、(多分)分かり易く書き換えました。

: Multi-Statement Command & Refresh Suppression

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

Re:Goto や Gosub のラベル仕様

管理人様、こんにちは!

>System ERROR が発生しなくなりました。

以前から出ていたシステムエラーもファイルバッファの確保で出ていたっぽいので、それもおそらく直ったのではないかと思います(^^)


>C.Basic Command Reference の下記の説明を、(多分)分かり易く書き換えました。
>: Multi-Statement Command & Refresh Suppression
http://egadget.blog.fc2.com/blog-entry-541.html

早速にありがとうございます!(^^)
「:」による描画抑制は現在の1/40sリフレッシュコントール描画とは実行時間ではあまり大きな差は出ないのですが、LocateやTextでは結構な差が出ます。
あと、描画過程を見せないようにしたり描画時のちらつきを無くせることにも効果的ですね。


>このラベルの記述について、仕様としてどうなっていますか?

んと、0~9の数字とA~Zのアルファベット1文字が飛び先として認識されます。
ここは純正仕様と同様のはずです。

ですが、純正と違うのはラベル名のエラーチェックが緩いというか、コマンドが成立したらそれでOkということで、1文字以上のラベルのエラーチェックがされてないというか…(^^;

ということで、
Goto A1B2の場合は
Goto Aという認識で解釈されてジャンプした後は、その後の1B2は実行されることがありません。
Gosub A1B2
という場合には
Gosub A
でサブルーチンから返って来て1B2を数式として解釈して実行するのでたまたまエラーにならないということになります…(^^;

この他にも純正よりも構文チェックが緩い箇所がありますが、実行速度に密接に関わってくるので実使用上問題ないところは仕様ということで…(^^;
今のところ純正よりも構文チェックが厳しくなるのはIfEndチェックが有効になった時のIfEndだけですね。


前の0.99mからグラフ式メモリーの仕様を変更していたのを元に戻しました。

変更が少ないのでVer.0.99n差し替えです(^^;

アドイン版 C.Basic ver.0.99n テスト版 その9.9n(フォルダ対応+再々々々修正版)
http://pm.matrix.jp/CB/CBASIC099n.zip
・グラフ式(Yn)から文字列メモリー(Str n)への変換を文字列のコピー構文でも可能にしてましたが純正と仕様が違ってしまったために純正仕様に戻しました。
(例)Y1→Str 1
 これは純正同様にエラーになります。
・グラフ式(Yn)メモリーは式として評価するので返り値は数値になります。(純正仕様)
(例)Y1→A

Re: Re:Goto や Gosub のラベル仕様

sentaro様


> 以前から出ていたシステムエラーもファイルバッファの確保で出ていたっぽいので、それもおそらく直ったのではないかと思います(^^)

ようやく根本的対策ができて、ユーザーへの安心感が高まりそうですね。


> >C.Basic Command Reference の下記の説明を、(多分)分かり易く書き換えました。
> >: Multi-Statement Command & Refresh Suppression
> >http://egadget.blog.fc2.com/blog-entry-541.html
>
> 早速にありがとうございます!(^^)
> 「:」による描画抑制は現在の1/40sリフレッシュコントール描画とは実行時間ではあまり大きな差は出ないのですが、LocateやTextでは結構な差が出ます。
> あと、描画過程を見せないようにしたり描画時のちらつきを無くせることにも効果的ですね。

ちらつき (blinking) についての説明も追加しておきました。
ありがとうございます。



> >このラベルの記述について、仕様としてどうなっていますか?
>
> んと、0~9の数字とA~Zのアルファベット1文字が飛び先として認識されます。
> ここは純正仕様と同様のはずです。
>
> ですが、純正と違うのはラベル名のエラーチェックが緩いというか、コマンドが成立したらそれでOkということで、1文字以上のラベルのエラーチェックがされてないというか…(^^;


高速化を優先させるために、実害のないチェックを甘くしていたとのこと、よく分かりました。ありがとうございます。



> ということで、
> Goto A1B2の場合は
> Goto Aという認識で解釈されてジャンプした後は、その後の1B2は実行されることがありません。
> Gosub A1B2
> という場合には
> Gosub A
> でサブルーチンから返って来て1B2を数式として解釈して実行するのでたまたまエラーにならないということになります…(^^;

これは、たまたま 1B2 が式として評価されるからエラーにならなかったということ、確認できました。



> 前の0.99mからグラフ式メモリーの仕様を変更していたのを元に戻しました。
>
> 変更が少ないのでVer.0.99n差し替えです(^^;


グラフ式メモリについては、純正でも全く手つかずです。ちょっと触ってみようと思います。

ところで、グラフメモリ関係は以前から C.Basic に実装されていますが、これを追加した時の何か積極的な理由がもしあれば、教えて頂けませんか?

グラフメモリ関係

管理人様、こんにちは!

>ようやく根本的対策ができて、ユーザーへの安心感が高まりそうですね。

はい!
管理人様の細かなデバッグのおかげですね。ありがとうございます(^^)


>ちらつき (blinking) についての説明も追加しておきました。
>ありがとうございます。

早速にありがとうございます!
あ、最後がcomamndになってます(^^;


>ところで、グラフメモリ関係は以前から C.Basic に実装されていますが、これを追加した時の何か積極的な理由がもしあれば、教えて頂けませんか?

んと、グラフ機能に関してはPlotでのグラフィックカーソルが使えるコマンドとして一番基本的なグラフ描画コマンドを実装しただけなので、コマンド追加の積極的な理由はなく、現状のC.Basicにおいてはグラフ描画関連コマンドの実用性はほとんど無いと思います(^^;
現状のグラフ描画コマンド程度だと、PlotコマンドとLineコマンドだけでプログラムとしてグラフ機能は組むことは出来そうですし(^^;

一応純正互換仕様なので、
Graph Y=sin X
とすればグラフが描かれますが、
グラフメモリ(太字のY)を使って、
"sin X"→Y1
Graph Y=Y1
とすると同じグラフが描けます。

グラフメモリは文字列メモリではなく数式を記憶させるメモリなので、
"sin X + cos Y"→Y1
Y1→A
これは
sin X + cos Y →A
と同じになります。

グラフメモリY1を使って、
Exp(Y1)
とするとエラーになるので、文字列に変換してから
Exp>Str(Y1,Str1)
Exp(Str 1)
という風にしなければいけません(^^;

メインメモリの謎

sentaro様


> あ、最後がcomamndになってます(^^;


おっと、修正しておきました。ご指摘感謝です。

他の C.Basic Reference でもおかしなところや、疑問点があれば、お知らせください。


あと、グラフ関係のご説明、ありがとうございます。


簡単なサンプルプログラムを作って、理解できました。


ClrGraph
AxesOn
CoordOn
GridOff
LabelOff
ViewWindow -189,189,30,-1,1,0.5
Deg

"sin X"->Y1
Graph Y=Y1
Plot◢

Exp▶Str(Y1,Str 1)
Exp(Str 1)->Y
S-L-Dot
Vertical X
Horizontal Y
Text 1,1,"X = "
Text 1,16,X
Text 7,1,Str 1
Text 7,22,"- "
Text 7,28,Y

サインカーブを描き、十字カーソルを左右に動かして X の値を決めてから [EXE] を押すと
そのXの値に対して、sin X の値を表示して、縦横の点線を描くといったプログラムです。

色々なコマンドのサンプルになりそうですので、C.Basic Reference に使おうかな、と...


ところで、Memory Manager で、Storage メモリから、Main メモリへプログラムファイルをコピーしようとすると、Memory Full と出てコピーできない現象が、私の手元で発生しています。

ちなみに、Main Mem の残りは 34764 Btye Free となっています。
メモリ最適化をしています。

私の電卓固有の問題が原因にあるのかも知れませんが、C.Basic でメインメモリへのアクセスをしていると思うので、チョット確認頂けませんか?


Re:メインメモリの謎

管理人様、こんにちは!

>サインカーブを描き、十字カーソルを左右に動かして X の値を決めてから [EXE] を押すと
>そのXの値に対して、sin X の値を表示して、縦横の点線を描くといったプログラムです。

>色々なコマンドのサンプルになりそうですので、C.Basic Reference に使おうかな、と...

純正互換の範囲ですしコマンドサンプルとして分かりやすいですね(^^)



>ところで、Memory Manager で、Storage メモリから、Main メモリへプログラムファイルをコピーしようとすると、Memory Full と出てコピーできない現象が、私の手元で発生しています。

現象を確認しました。
RenameとCopyでファイル保存に問題があって純正互換から外れてしまってエラーになっていました(^^;
本体にコピーしてみないと発見しにくいバグだったので助かりました。ありがとうございます!

コピー時にエラーになるので、メインメモリには問題は起きてないと思います(^^)


Ver.0.99nで新たに発生したバグなので例によって差し替えです(^^;

アドイン版 C.Basic ver.0.99n テスト版 その9.9n(フォルダ対応+再々々々々修正版)
http://pm.matrix.jp/CB/CBASIC099n.zip
・Rename,Copyするとファイルが純正仕様から外れていたのを修正しました。(v0.99n以前は問題ありません。)

Re: Re:メインメモリの謎

sentaro様


> 純正互換の範囲ですしコマンドサンプルとして分かりやすいですね(^^)

コマンドが値を持つことも含めて、Casio Basic が普通の高級言語であることを示す狙いもあります。


> >ところで、Memory Manager で、Storage メモリから、Main メモリへプログラムファイルをコピーしようとすると、Memory Full と出てコピーできない現象が、私の手元で発生しています。
>
> 現象を確認しました。
> RenameとCopyでファイル保存に問題があって純正互換から外れてしまってエラーになっていました(^^;
> 本体にコピーしてみないと発見しにくいバグだったので助かりました。ありがとうございます!
>
> コピー時にエラーになるので、メインメモリには問題は起きてないと思います(^^)

改めてダウンロードしたのですが、私の手元では改善されません。
C.Basicの問題だけではない可能性はありますが、アップロードファイルをもう一度ご確認頂けませんか


Re:Re: Re:メインメモリの謎

管理人様、こんにちは!

>改めてダウンロードしたのですが、私の手元では改善されません。
>C.Basicの問題だけではない可能性はありますが、アップロードファイルをもう一度ご確認頂けませんか

本体メモリにコピー出来なくなったファイルは、C.Basic上で保存し直すかRenameかCopyして純正互換ファイルに修正する必要があります。
それでもNGでしょうか?

Re: Re:Re: Re:メインメモリの謎

sentaro様


> 本体メモリにコピー出来なくなったファイルは、C.Basic上で保存し直すかRenameかCopyして純正互換ファイルに修正する必要があります。
> それでもNGでしょうか?

保存しなおしたらOKになりました。

そうですよね、今回の修正内容から、これに気付くべきでした。
お騒がせ致しました。
そして、ありがとうございます。

Re: Re:Re: Re:メインメモリの謎

管理人様、こんにちは!

>保存しなおしたらOKになりました。

よかったです(^^)
もし、他の理由で不具合が起きていたらちょっと悩むところでした。
今回のバージョンはフォルダ対応での拡張でバグの入り込む余地が多々あったのでまだ油断はできませんが、ほぼファイル系での不具合は解消したのではと思います(^^)


>コマンドが値を持つことも含めて、Casio Basic が普通の高級言語であることを示す狙いもあります。

いいですね(^^)
CasioBasicは基本形がfx-5800P内蔵言語として普通に高級言語ですよね。
グラフ電卓はその高機能拡張系、C.Basicは高速拡張系という感じでしょうか(^^)

行列

sentaro様

> もし、他の理由で不具合が起きていたらちょっと悩むところでした。
> 今回のバージョンはフォルダ対応での拡張でバグの入り込む余地が多々あったのでまだ油断はできませんが、ほぼファイル系での不具合は解消したのではと思います(^^)

これから、しばらくは行列関係を、じっくり触ってみたいと思っています。おそらく C.Basic の最大の拡張機能ですね。
フォルダ関係も、Save, Load, IsExist 絡みで、確認していきますね。

取りあえず、どうやってまとめるかチョット考えて、項目分けをしてみました。

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


ところで、グラフィック画面とテキスト画面選択に、Text や Locate を使うことに加えて、それ専用のコマンドを増設するというのは、如何でしょう?


なお、IsExist は、*.bin のチェック専用ですか?

例えば、Screen コマンドを用意して、

Screen.g でグラフィクスへ切り替え、
Screen.t でテキストひ切り返し、
Screen で、グラフィクスとテキストを入れ替える

といった感じは、どうでしょうか?

> CasioBasicは基本形がfx-5800P内蔵言語として普通に高級言語ですよね。
> グラフ電卓はその高機能拡張系、C.Basicは高速拡張系という感じでしょうか(^^)

ポインタ的な文字列操作と、VRAMアクセスに行列を応用するあたりは、C言語を Casio Basic に持ち込む画期的な拡張だと思うのですが、逆にCを知らない人には、敷居が高いかも知れませんね。

行列を援用したビットマップ操作も、もう一つの目玉ですが、こちらば昔 N88 BASIC の感覚でいけそうなので、往年のプログラマには懐かしいでしょうね!


C.Basic Referenceも佳境に入ってゆきます!


Re:行列

管理人様、こんにちは!

>これから、しばらくは行列関係を、じっくり触ってみたいと思っています。おそらく C.Basic の最大の拡張機能ですね。
>フォルダ関係も、Save, Load, IsExist 絡みで、確認していきますね。

このあたりはまだバグが潜んでいる可能性大なのでバグあぶり出しよろしくお願いします(^^)


>取りあえず、どうやってまとめるかチョット考えて、項目分けをしてみました。
http://egadget.blog.fc2.com/blog-entry-529.html

どんどん充実していってますね(^^)

あ、ひとつ気がついた点として、
Gosub... Lbl... Return
のサンプルプログラムは
Lbl Aからのサブルーチンが2回呼ばれるので

One
Two
One
Three

となります(^^;



>なお、IsExist は、*.bin のチェック専用ですか?

拡張子を省略した場合は*.binですが、
任意のフォルダのファイルでチェックできます。
Basicソースファイルの場合は、
IsExist("TEST.g1m")
とすればよいです。
見つかった場合はファイルサイズ、見つからない場合は0が返ります。


>ところで、グラフィック画面とテキスト画面選択に、Text や Locate を使うことに加えて、それ専用のコマンドを増設するというのは、如何でしょう?
>例えば、Screen コマンドを用意して、
>Screen.g でグラフィクスへ切り替え、
>Screen.t でテキストひ切り返し、
>Screen で、グラフィクスとテキストを入れ替える
>といった感じは、どうでしょうか?

はい、管理人様案をそっくり採用させていただきました(^^)


>ポインタ的な文字列操作と、VRAMアクセスに行列を応用するあたりは、C言語を Casio Basic に持ち込む画期的な拡張だと思うのですが、逆にCを知らない人には、敷居が高いかも知れませんね。

そうですね。Basicを始めたばかりだとポインタはなかなか分かりにくいポイントです(^^;
文字列関連はとりあえずは純正の延長で使っていただくのがよいかもですね。
VRAM直アクセスは実用的な使い道がちょっとどうかなというのはあります(^^;



アドイン版 C.Basic ver.0.99n テスト版 その9.9n(フォルダ対応+再々々々々々修正版)
http://pm.matrix.jp/CB/CBASIC099n.zip
・Screenコマンドを追加しました。
 VRAMへ直アクセスする場合に、
 Screen.tまたはScreen.TでテキストVRAM、
 Screen.gまたはScreen.GでグラフィックVRAMが描画対象になります。
 またScreen nでnの値が0の場合はテキストVRAM、1の場合はグラフィックVRAMとなります。
 Screen単独で使うと描画対象が(テキストVRAM⇔グラフィックVRAM)切り替わります。
 式の中でScreenを使うと現在のアクセス対象VRAM(0:テキストVRAM、1:グラフィックVRAM)が返ります。
 
・セットアップにて隠しRAMを使用するかどうか設定ができます。
 (現状ではファイルバッファのみの使用ですが将来的にはプログラムファイル等でも使用予定です。)

Re: Re:行列

sentaro様


> >これから、しばらくは行列関係を、じっくり触ってみたいと思っています。おそらく C.Basic の最大の拡張機能ですね。
> >フォルダ関係も、Save, Load, IsExist 絡みで、確認していきますね。
>
> このあたりはまだバグが潜んでいる可能性大なのでバグあぶり出しよろしくお願いします(^^)

はーい、気をつけて調べてみますね。


> >取りあえず、どうやってまとめるかチョット考えて、項目分けをしてみました。
> >http://egadget.blog.fc2.com/blog-entry-529.html
>
> どんどん充実していってますね(^^)

そうですね!
改めて、C.Basic は、よくできていると思います。



> あ、ひとつ気がついた点として、
> Gosub... Lbl... Return
> のサンプルプログラムは
> Lbl Aからのサブルーチンが2回呼ばれるので
>
> One
> Two
> One
> Three
>
> となります(^^;

私のところでは、

One
Tow
Three

となりますが...

...というか、

Lbl の下の Locate 1,1,"One" が2回、正しい位置に表示されているので、2度書されていますね。
Locateを使うから同じ位置に上書きしていて、単純に "One" なら sentaro様の言われるようになってしまいます。

で、それでは面白くないし、Return が Gosub と サブルーチンからのリターンの2つの動作をすることを強調して、

サブルーチンを以下のように書き換えてみます。

Gosub A
Locate 1,2,"Two"
Return
Lbl A
Locate 1,1,"One"
Return

Gosub対応のReturn とサブルーチンから戻る Return がそれぞれあると、面白いですね。



> >なお、IsExist は、*.bin のチェック専用ですか?
>
> 拡張子を省略した場合は*.binですが、
> 任意のフォルダのファイルでチェックできます。
> Basicソースファイルの場合は、
> IsExist("TEST.g1m")
> とすればよいです。
> 見つかった場合はファイルサイズ、見つからない場合は0が返ります。

ありがとうございます。すっきりしました。



> はい、管理人様案をそっくり採用させていただきました(^^)
> ・Screenコマンドを追加しました。
>  VRAMへ直アクセスする場合に、
>  Screen.tまたはScreen.TでテキストVRAM、
>  Screen.gまたはScreen.GでグラフィックVRAMが描画対象になります。
>  またScreen nでnの値が0の場合はテキストVRAM、1の場合はグラフィックVRAMとなります。
>  Screen単独で使うと描画対象が(テキストVRAM⇔グラフィックVRAM)切り替わります。
>  式の中でScreenを使うと現在のアクセス対象VRAM(0:テキストVRAM、1:グラフィックVRAM)が返ります。

ありがとうございます。


> >ポインタ的な文字列操作と、VRAMアクセスに行列を応用するあたりは、C言語を Casio Basic に持ち込む画期的な拡張だと思うのですが、逆にCを知らない人には、敷居が高いかも知れませんね。
>
> そうですね。Basicを始めたばかりだとポインタはなかなか分かりにくいポイントです(^^;
> 文字列関連はとりあえずは純正の延長で使っていただくのがよいかもですね。

はい、そのための Basic コマンドですからね!
ただ、複数文字列を1つの行列=2次元配列で管理できると、ソースのスッキリ度合いがかなり異なる感じがしますよね。

あっ、C使いのための C.Basic という新たなキャッチフレーズも出来ましたね(^_^)/

このあたりは、色々と面白そうなプログラムが作れそうに思います。



> VRAM直アクセスは実用的な使い道がちょっとどうかなというのはあります(^^;

私が真っ先に思いつくのは、テキスト画面にビットマップ表示をするテクニックとして使えそうな点です。

既に、LocateYX があるので、グラフィックス画面にLocateと同等な文字表示が出来るので、その逆が可能になるのは面白いと思うんですね。

System ERROR再び

sentaro様

最新の Ver 0.99n で、ファイルを保存する際の System ERROR が再び頻発すます。

プログラム実行ごとに頻繁に最適化を行うと、毎回時間がかかることから、断片化が激しい感じでです。

プログラムが終了してファイルリストに戻る時にも System ERROR が頻発します。

プログラム起動時にも System ERROR が発生するようです。

これといった再現条件がはっきりしないですね。



ご検討頂けませんか?

Re:System ERROR再び

管理人様、こんにちは!

>最新の Ver 0.99n で、ファイルを保存する際の System ERROR が再び頻発すます。

うわ…汗
ひょっとしてセットアップの新設項目のUse Hidden RAMがOffになってませんでしょうか?


>プログラム実行ごとに頻繁に最適化を行うと、毎回時間がかかることから、断片化が激しい感じでです。

C.Basicのヒープメモリの断片化は電卓のメインメニューに戻ってC.Basic以外のアプリを一度起動してからC.Basicに戻って再起動すればOkなので、メモリの最適化はストレージメモリのフリーエリアが減った時だけでよいです。


>プログラムが終了してファイルリストに戻る時にも System ERROR が頻発します。
>プログラム起動時にも System ERROR が発生するようです。
>これといった再現条件がはっきりしないですね。

それはちょっと尋常ではないエラー発生状況ですよね。
こちらでも今でもたまにシステムエラーは出るには出るんですが、そこまで頻繁ではないのでちょっと調べてみます。


とりあえず、Screenコマンドにバグが残っていたので差し替えです。

アドイン版 C.Basic ver.0.99n テスト版 その9.9n(フォルダ対応+再々々々々修正+α版)
http://pm.matrix.jp/CB/CBASIC099n.zip



>Lbl の下の Locate 1,1,"One" が2回、正しい位置に表示されているので、2度書されていますね。
>Locateを使うから同じ位置に上書きしていて、単純に "One" なら sentaro様の言われるようになってしまいます。

あ゛、Locateなのでそうでした!(^^;
手抜きでLocateを省いてリスト入力してたのでちゃんとしたリストチェックになってませんでした。すみません(^^;


>Gosub対応のReturn とサブルーチンから戻る Return がそれぞれあると、面白いですね。

Progの中のGosubサブルーチンから直に元のメインプログラムに戻るReturnがあればということですね。
実現可能かどうか調べてみます。


>ただ、複数文字列を1つの行列=2次元配列で管理できると、ソースのスッキリ度合いがかなり異なる感じがしますよね。

文字配列が2次元で使えるとたしかにすっきりしますね。
行列を3次元化するか、文字配列を新設するかというところでしょうか。


>私が真っ先に思いつくのは、テキスト画面にビットマップ表示をするテクニックとして使えそうな点です。
>既に、LocateYX があるので、グラフィックス画面にLocateと同等な文字表示が出来るので、その逆が可能になるのは面白いと思うんですね。

なるほどです。
テキスト画面も実質はグラフィック画面と同じなのでビットマップが表示できると面白そうです(^^)

Re: Re:System ERROR再び

sentaro様

> ひょっとしてセットアップの新設項目のUse Hidden RAMがOffになってませんでしょうか?

はい、Off になっています。

これを On にすると、System ERROR が発生しなくなりました。

この項目は触った自覚が無いので、不思議です。

この項目を On/Off切替できるようにしているのは、どのような目的なのでしょうか?


> C.Basicのヒープメモリの断片化は電卓のメインメニューに戻ってC.Basic以外のアプリを一度起動してからC.Basicに戻って再起動すればOkなので、メモリの最適化はストレージメモリのフリーエリアが減った時だけでよいです。

はい、Use Hidden RAM を On にすると、最適化は瞬時に終了します。



> とりあえず、Screenコマンドにバグが残っていたので差し替えです。

了解です。



> >Gosub対応のReturn とサブルーチンから戻る Return がそれぞれあると、面白いですね。
>
> Progの中のGosubサブルーチンから直に元のメインプログラムに戻るReturnがあればということですね。
> 実現可能かどうか調べてみます。

ええっと、特に Returnの機能拡張をお願いしたつもりはなく、Gosub のところに記載したサンプルプログラムに、メインプログラムに戻る Returnを1個追加したという意味です。構文解析で、Return が Gosubに対応したものかどうかを判定しているのでえすよね。

もし Return の機能を Gosub対応か、サブルーチン対応かを意図的に指定するように拡張するには、例えば Cのように

Return <local variable> といったパラメータを指定すると意図的にサブルーチン対応にする、
パラメータ無しなら、現状の構文解析で自動判定させる、
このローカル変数は、Prog / Local で指定する変数のいずれかを利用する

といった感じだと、面白いかも知れませんね。サブルーチンにローカル変数を渡せるなら、戻り値も設定できたら良いなぁ、と思っていました。




> >ただ、複数文字列を1つの行列=2次元配列で管理できると、ソースのスッキリ度合いがかなり異なる感じがしますよね。
>
> 文字配列が2次元で使えるとたしかにすっきりしますね。
> 行列を3次元化するか、文字配列を新設するかというところでしょうか。

ええっと、2次元行列のままでも、文字列操作には有効だと思います。



> >私が真っ先に思いつくのは、テキスト画面にビットマップ表示をするテクニックとして使えそうな点です。
> >既に、LocateYX があるので、グラフィックス画面にLocateと同等な文字表示が出来るので、その逆が可能になるのは面白いと思うんですね。
>
> なるほどです。
> テキスト画面も実質はグラフィック画面と同じなのでビットマップが表示できると面白そうです(^^)

そうなんです!


Prog 引数に文字列変数

sentaro様

Prog に Str N や &A[N] を引数として渡せると、応用が広がると思いますが、如何でしょうか?

例えば、以下のようなプログラムが可能になります。

"Press [1] - [9] key"
["1","2","3","4","5","6","7","8","9"]->Mat S
Getkey1->K

'Keycode to Ten key
Int (K÷10)->A
K-10A->B
3B-A+2->N

Prog &A[N]

このように、プログラムを配列で扱えると、面白そうですね。

行列初期化について

sentaro様

行列初期化について、C.Basic Reference に追加しました。
http://egadget.blog.fc2.com/blog-entry-547.html


そこで、気がついたのですが、

Manual_J.txt にある以下の記述ですが、

 [[0B11001100,
  0B00110011,
  0B11001100,
  0B00110011,
 ]]→Mat A.B

下から2行目の末尾の , は不要ですね。

あと、OB でなくて OX が使えますか?

例えば、

[
[0X1234,0X2345,0X3456]
[0X4567,0X5678,0X6789]
[0X789A,0X89AB,0X9ABC]
]->Mat A.L

といった感じです。現状だとエラーになってしまいます。


あと、上記で紹介したサンプルプログラム

["1:ABC","2:DEF","3:GHI"]->Mat S
Locate 1,1,&Mat S[1]
Locate 1,2,&Mat S[2]
Locate 1,3,&S[3]
Locate 1,4,&S[1,3]

ですが、行列初期化で、

[
"1:ABC",
"2:DEF",
"3:GHI"
]->Mat S

といった、記法がエラーにならないと、使いやすくなるのですが、速度が遅くなるなど、実現に何か障害がありますか?


Re:Prog 引数に文字列変数

管理人様、こんにちは!

>これを On にすると、System ERROR が発生しなくなりました。

ということは、本体メモリの不足でエラーになっていた可能性大ですね(^^;
もしかして、ストレージメモリ上のファイル数がかなり多い状態でしょうか?
今だけの暫定機能ですが、ファイルモードで[SHIFT]押した時にファイルリスト数がF4の位置に表示されます。
こちらでも隠しRAM不使用だとシステムリセットになる状況が多々あるのでまだまだ詰めが甘いようです(^^;


>この項目は触った自覚が無いので、不思議です。

最新版でデフォルトでオフにしたので…
新たに設定し直す必要がありました(^^;


>この項目を On/Off切替できるようにしているのは、どのような目的なのでしょうか?

C.Basicだけしか使わないというのであれば今のところは隠しRAMは自由に使える領域といえますが、
もし、他のアドインでも隠しRAMを使用していた場合とか、OSのバージョンアップで使えなくなったりした場合に、
デフォルトで使える状態だと不都合が起きることが予想されるので使う使わないの設定を設けました。

あと、GII以前の初期fx-9860Gでは隠しRAMが無いので、9860Gシリーズ互換のためというのもあります(^^;


>ええっと、特に Returnの機能拡張をお願いしたつもりはなく、Gosub のところに記載したサンプルプログラムに、メインプログラムに戻る Returnを1個追加したという意味です。構文解析で、Return が Gosubに対応したものかどうかを判定しているのでえすよね。

あ、そういうことだったのですね(^^;
了解です(^^)


>Return <local variable> といったパラメータを指定すると意図的にサブルーチン対応にする、
>パラメータ無しなら、現状の構文解析で自動判定させる、
>このローカル変数は、Prog / Local で指定する変数のいずれかを利用する
>といった感じだと、面白いかも知れませんね。サブルーチンにローカル変数を渡せるなら、戻り値も設定できたら良いなぁ、と思っていました。

返り値については、CasioBasicの仕様に準じた形で現在の数式の値がAnsに自動的に入ってることを利用してサブルーチン側で
a:Return
とすれば
変数xの内容が返り値としてAnsに入ります。

呼び出す側では
Prog "TEST",a,b,c
Ans→N
とするか、
Prog "TEST",a,b,c→N
とすれば返り値を受け取れるわけなのですが、
Return a
という形を追加することは難しいことではないので、サクッと追加してみました(^^)


>ええっと、2次元行列のままでも、文字列操作には有効だと思います。

了解です(^^)


>Prog に Str N や &A[N] を引数として渡せると、応用が広がると思いますが、如何でしょうか?
>このように、プログラムを配列で扱えると、面白そうですね。

文字列や行列の引数渡しは以前より実装を考えていたところでしたけど今のところ未実装ということで、次バージョンで取り入れてみたいと思います(^^)


Return 戻り値
だけの更新なので差し替えです(^^;

アドイン版 C.Basic ver.0.99n テスト版 その9.9n(フォルダ対応+再々々々々修正+α版)
http://pm.matrix.jp/CB/CBASIC099n.zip
・Returnコマンドにて返り値指定が出来るようになりました。
(例)Return 式
 式の値がAnsに入ります。

Re:行列初期化について

管理人様、こんにちは!

>行列初期化について、C.Basic Reference に追加しました。
http://egadget.blog.fc2.com/blog-entry-547.html

いよいよ行列の拡張部分ですね。
どうもありがとうございます!


>下から2行目の末尾の , は不要ですね。

はい、不要です(^^;


>あと、OB でなくて OX が使えますか?

使えるはず…と思ったらバグってて使えませんでした(^^;


>といった、記法がエラーにならないと、使いやすくなるのですが、速度が遅くなるなど、実現に何か障害がありますか?

文字列の行列初期化で空白と改行を読み飛ばすのが抜けてました(^^;


ってことで、そこのあたり修正した差し替え版です(^^;

アドイン版 C.Basic ver.0.99n テスト版 その9.9n(フォルダ対応+再々々々々々々修正+α版)
http://pm.matrix.jp/CB/CBASIC099n.zip
・16進定数の不具合を修正しました。
・文字列で行列を初期化する場合に空白と改行をスキップ出来なかった不具合を修正しました。

Re: Re:Prog 引数に文字列変数

sentaro様

> ということは、本体メモリの不足でエラーになっていた可能性大ですね(^^;
> もしかして、ストレージメモリ上のファイル数がかなり多い状態でしょうか?
> 今だけの暫定機能ですが、ファイルモードで[SHIFT]押した時にファイルリスト数がF4の位置に表示されます。
> こちらでも隠しRAM不使用だとシステムリセットになる状況が多々あるのでまだまだ詰めが甘いようです(^^;

私の電卓のストレージメモリには、71ファイルあります。
おかげさまで、Use Hidn RAM を On にしてから、一度もエラーが発生していません。



> >この項目は触った自覚が無いので、不思議です。
>
> 最新版でデフォルトでオフにしたので…
> 新たに設定し直す必要がありました(^^;

それで納得です。


> >この項目を On/Off切替できるようにしているのは、どのような目的なのでしょうか?
>
> C.Basicだけしか使わないというのであれば今のところは隠しRAMは自由に使える領域といえますが、
> もし、他のアドインでも隠しRAMを使用していた場合とか、OSのバージョンアップで使えなくなったりした場合に、
> デフォルトで使える状態だと不都合が起きることが予想されるので使う使わないの設定を設けました。

さすが、良いお作法で作られていますね。ますます安心感が増してきます。



> あと、GII以前の初期fx-9860Gでは隠しRAMが無いので、9860Gシリーズ互換のためというのもあります(^^;

以前から伺いたかったのですが、C.Basic は fx-9860G にも制式対応しているのでしょうか?
そうだとすれば、C.Basic Reference には、fc-9860G Series 対応と書き直すことにします。



> >Return <local variable> といったパラメータを指定すると意図的にサブルーチン対応にする、
> >パラメータ無しなら、現状の構文解析で自動判定させる、
> >このローカル変数は、Prog / Local で指定する変数のいずれかを利用する
> >といった感じだと、面白いかも知れませんね。サブルーチンにローカル変数を渡せるなら、戻り値も設定できたら良いなぁ、と思っていました。
>
> 返り値については、CasioBasicの仕様に準じた形で現在の数式の値がAnsに自動的に入ってることを利用してサブルーチン側で
> a:Return
> とすれば
> 変数xの内容が返り値としてAnsに入ります。
>
> 呼び出す側では
> Prog "TEST",a,b,c
> Ans→N
> とするか、
> Prog "TEST",a,b,c→N
> とすれば返り値を受け取れるわけなのですが、
> Return a
> という形を追加することは難しいことではないので、サクッと追加してみました(^^)

解説ありがとうございます。こちらも、Prog のリファレンスにさらっと追記しておきました。

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



> >Prog に Str N や &A[N] を引数として渡せると、応用が広がると思いますが、如何でしょうか?
> >このように、プログラムを配列で扱えると、面白そうですね。
>
> 文字列や行列の引数渡しは以前より実装を考えていたところでしたけど今のところ未実装ということで、次バージョンで取り入れてみたいと思います(^^)

楽しみです。


なお、Manual_J.txt は、サンプルプログラムの一部でデバッグが必要な感じです。
そのまま入力して悩んでしまうことが何回かありました。

気がついたら、改めて連絡します。

Re: Re:行列初期化について

sentaro様


> いよいよ行列の拡張部分ですね。
> どうもありがとうございます!

どうやって整理すれば、分かり易いのか...考え込むことが多いです...

多分、今後も書き直しが多いと思います。



> アドイン版 C.Basic ver.0.99n テスト版 その9.9n(フォルダ対応+再々々々々々々修正+α版)
> http://pm.matrix.jp/CB/CBASIC099n.zip
> ・16進定数の不具合を修正しました。
> ・文字列で行列を初期化する場合に空白と改行をスキップ出来なかった不具合を修正しました。

不具合解消を確認しました。その成果を以下にまとめています。

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


Re: Re: Re:行列初期化について

sentaro様


Manual_J.txt の下記のサンプルプログラムのデバッグですが...

===============================================================================
文字列について
===============================================================================
純正CasioBasicと同じくStr文字変数や文字列関数が使えますが、文字列の実体は行列として実装しています。

プレフィックスとして$または&を付けることでMat行列は文字列として認識されます。
(例)[["ABCDEF"]]→Mat A
   Locate 3,3,$Mat A
 画面座標(3,3)に"ABCDEF"が表示されます。

---------- ここまで ------------

["ABCDEF"]→Mat A

が正しいですよね。



Re:Re: Re: Re:行列初期化について

管理人様、こんにちは!

>私の電卓のストレージメモリには、71ファイルあります。
>おかげさまで、Use Hidn RAM を On にしてから、一度もエラーが発生していません。

1ファイルあたり24バイトが必要なので管理人様の場合は約1700バイトほどがファイルバッファに必要となります。
それくらいだとメモリ不足が問題になるほどではないので何かファイルバッファ関連でエンバグしている可能性大ですね(^^;
隠しRAMを使うことでシステムエラーから開放されるとのことなので、そこのあたりちょっと見直してみます。


>さすが、良いお作法で作られていますね。ますます安心感が増してきます。

恐縮です。
C.BasicはFtune2に比較すると格段に安全で安心度の高いアドインだとは思うのですが、やはり通常では存在しないことになっている領域に手を出す以上は最大限の注意をという感じですね(^^)
それとちょっと前に海外サイトで隠しRAMを使うトピックをちょっと見かりしけたので、自作アドインではごく普通に使われている可能性もありますし(^^;


>以前から伺いたかったのですが、C.Basic は fx-9860G にも制式対応しているのでしょうか?
>そうだとすれば、C.Basic Reference には、fc-9860G Series 対応と書き直すことにします。

はい、SDKのエミュで動く以上、SH3機も含めてfx-9860G初代からシリーズ全機種で同じように動かせるようにということで作成してあります。
最適対応という意味ではSH4A機になるのですが、SH3機に関しては速度面とか若干不利なことがあるかもしれないけど同様に使えますという感じですね(^^)

純正CasioBasicではSH3機の方が速かったりするのですが、C.BasicではCPUの能力差そのままにSH4A機の方が確実に速いので、SH4A機の実力を100%活かせるアドインと言えます。(若干自画自賛モード(^^;


>解説ありがとうございます。こちらも、Prog のリファレンスにさらっと追記しておきました。
http://egadget.blog.fc2.com/blog-entry-540.html

早速にありがとうございます(^^)


>なお、Manual_J.txt は、サンプルプログラムの一部でデバッグが必要な感じです。
>そのまま入力して悩んでしまうことが何回かありました。
>気がついたら、改めて連絡します。

あ、すみません(^^;
仕様と実際が一致してないことと、あと勘違いもあるかもしれません(^^;
こちらでも再度確認してみます。


>どうやって整理すれば、分かり易いのか...考え込むことが多いです...
>多分、今後も書き直しが多いと思います。

行列の拡張部分とかはかなり複雑化してしまっているので、多分まだ確実にバグが残っていると思われます(^^;
お手数おかけしますけどよろしくお願いします。


>不具合解消を確認しました。その成果を以下にまとめています。
http://egadget.blog.fc2.com/blog-entry-547.html

ありがとうございます!
管理人様に見つけていただいてやっと見つかるバグが続々でお恥ずかしい限りですけど、今後もどんどんバグ出しよろしくです(^^)



>["ABCDEF"]→Mat A
>が正しいですよね。

はい、そうです。
ありがとうございます!

アップしている0.99n内のManual_J.txtを更新しておきました(^^)

Re: Re:Re: Re: Re:行列初期化について

sentaro様

> 1ファイルあたり24バイトが必要なので管理人様の場合は約1700バイトほどがファイルバッファに必要となります。
> それくらいだとメモリ不足が問題になるほどではないので何かファイルバッファ関連でエンバグしている可能性大ですね(^^;
> 隠しRAMを使うことでシステムエラーから開放されるとのことなので、そこのあたりちょっと見直してみます。

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



> C.BasicはFtune2に比較すると格段に安全で安心度の高いアドインだとは思うのですが、やはり通常では存在しないことになっている領域に手を出す以上は最大限の注意をという感じですね(^^)
> それとちょっと前に海外サイトで隠しRAMを使うトピックをちょっと見かりしけたので、自作アドインではごく普通に使われている可能性もありますし(^^;

有用な情報は海外発のものなんですね。プログラム電卓の現状を現している好例ですね。
カシオのお膝元の日本人としては、C.Basic と Inside Casio Basic を是非とも海外に発信したいですね。



> はい、SDKのエミュで動く以上、SH3機も含めてfx-9860G初代からシリーズ全機種で同じように動かせるようにということで作成してあります。
> 最適対応という意味ではSH4A機になるのですが、SH3機に関しては速度面とか若干不利なことがあるかもしれないけど同様に使えますという感じですね(^^)
>
> 純正CasioBasicではSH3機の方が速かったりするのですが、C.BasicではCPUの能力差そのままにSH4A機の方が確実に速いので、SH4A機の実力を100%活かせるアドインと言えます。(若干自画自賛モード(^^;

早速、C.Basic ommanf Reference で対応機種として fx-9860G Series と変更しました。


あと、文字列を使って直接「領域確保」や「初期化」を行うと、文字列の末尾に対応する要素に0(ゼロ)が付加されるんですね。
以前、コメント欄でちらっと読んだ記憶がありましたが、忘れていました。そこで、これについても Note に説明を追加しておきました。

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

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


Re:Re: Re:Re: Re: Re:行列初期化について

管理人様、こんにちは!

>有用な情報は海外発のものなんですね。プログラム電卓の現状を現している好例ですね。

グラフ電卓のユーザー数が桁違いと思われるので致し方ないところでしょうか(^^;


>カシオのお膝元の日本人としては、C.Basic と Inside Casio Basic を是非とも海外に発信したいですね。

はい!
CasioBasicの知られざる高性能な部分はぜひとも広く知っていただきたいところですね。
C.BasicもCasioBasic互換ということでどこまで受け入れられるのか未知数ですけど、速度面も含めて新たな可能性が広がることを期待したいです。


>早速、C.Basic ommanf Reference で対応機種として fx-9860G Series と変更しました。

ありがとうございます(^^)


>あと、文字列を使って直接「領域確保」や「初期化」を行うと、文字列の末尾に対応する要素に0(ゼロ)が付加されるんですね。
>以前、コメント欄でちらっと読んだ記憶がありましたが、忘れていました。そこで、これについても Note に説明を追加しておきました。

文字列はC言語仕様からなので末尾にゼロが付加されます。
純正互換の範囲ではそれは意識しなくてもよいのですが、行列を流用しているので格納形式を把握しておくのは重要ですね。


昨日でとりあえず打ち止めと思った0.99nですが、何かの勘違いでSprintfが使えなくなっていたのでVer.0.99n再アップしました(^^;
そして、これは実験的実装ですが、Locate/Textコマンドでも末尾に「;」(セミコロン)を付加すると1/40sリフレッシュコントール描画になるようにしてみました。
ループ内でLocate/Textを使う場合には表示速度の向上が期待できます。

それから隠しRAMを使わない状況で頻発するシステムエラーですが、エラーが必ず発生する状況が再現可能でしょうか?

Re: Re:Re: Re:Re: Re: Re:行列初期化について

sentaro様


> CasioBasicの知られざる高性能な部分はぜひとも広く知っていただきたいところですね。
> C.BasicもCasioBasic互換ということでどこまで受け入れられるのか未知数ですけど、速度面も含めて新たな可能性が広がることを期待したいです。

そうですね。広く公開してみないと分からないことがあるかも知れませんね。



> 文字列はC言語仕様からなので末尾にゼロが付加されます。
> 純正互換の範囲ではそれは意識しなくてもよいのですが、行列を流用しているので格納形式を把握しておくのは重要ですね。

そうなんですよ。ひょっとして末尾が0かな?と思ったらそうだった....で、以前末尾が0だというコメントがあったな...と思い出しました。



> 昨日でとりあえず打ち止めと思った0.99nですが、何かの勘違いでSprintfが使えなくなっていたのでVer.0.99n再アップしました(^^;

あ、まだ確認していませんでした。



> そして、これは実験的実装ですが、Locate/Textコマンドでも末尾に「;」(セミコロン)を付加すると1/40sリフレッシュコントール描画になるようにしてみました。
> ループ内でLocate/Textを使う場合には表示速度の向上が期待できます。

はい、これも確認してみます。



> それから隠しRAMを使わない状況で頻発するシステムエラーですが、エラーが必ず発生する状況が再現可能でしょうか?

必ずシステムエラーが発生する条件は、以下の2つです。

・Setupで Use Hidn RAM を Off
・Syntax エラーのあるファイルを保存

Use Hidn RAM を On にすると、エラーのあるファイルを保存してもシステムエラーになりません。

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

行列の型について

sentaro様

Manual_J.txt に以下の記述があります。

===============================================================================
行列の拡張について
===============================================================================
純正CasioBasicのMatrix行列との違いについて説明します。

通常モードでは純正と同じく実数モードでは実数の行列、整数モードでは整数の行列として使用できますが、

-------ここまで--------


Casio Basic では、要素に応じて実数行列と整数行列が切り替わるように読めますが、これは私の認識と違っていました。
多分Casio Basic では常に実数行列ではないでしょうか?


Re: 行列の型について

管理人様、こんにちは!

>必ずシステムエラーが発生する条件は、以下の2つです。
>・Setupで Use Hidn RAM を Off
>・Syntax エラーのあるファイルを保存
>Use Hidn RAM を On にすると、エラーのあるファイルを保存してもシステムエラーになりません。

エラーの現象は確認できました。
ですが、確実に再現する手順がまだはっきりと掴めてないので、ちょっと手間取ってます(^^;
これはVer.0.99nでの新たな不具合なのでVer.0.99nのうちに修正しておきたいです。


>Casio Basic では、要素に応じて実数行列と整数行列が切り替わるように読めますが、これは私の認識と違っていました。
>多分Casio Basic では常に実数行列ではないでしょうか?

んと、実数モードでは型指定しない場合はデフォルトで実数行列です。
整数行列になるのはC整数モードで起動した場合で、
動作モードに応じて行列のデフォルトの型が切り替わるということですね。
分かりにくくてすみません(^^;

ですので、行列の型指定のないCasioBasic互換ソースの場合、
{10,5}→Dim Mat A
実数モードでは Mat A.Fと同じで実数行列が確保されます。
整数モードで起動するとMat A.Lと同じで整数行列が確保されます。

Re: Re: 行列の型について

sentaro様

> エラーの現象は確認できました。
> ですが、確実に再現する手順がまだはっきりと掴めてないので、ちょっと手間取ってます(^^;
> これはVer.0.99nでの新たな不具合なのでVer.0.99nのうちに修正しておきたいです。

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


いずれ Manual_J.txt も英訳する予定なので、細かい記述が気になります。

===============================================================================
行列の要素サイズ変更
===============================================================================
行列の型(1ビット、バイト、ワード、ロングワード、実数)は行列確保後でも任意に変更できます。
(例)[[1,2,3,4][5,6,7,8]]→Mat A.B
   Mat A→Dim Mat A.W
 バイト型のMat A行列をワード型に変更できます。
 要素数は変更後の型サイズに応じて変化します。
 [[0x12,0x34][0x56,0x78]]→Mat A.W
 と同じ結果になります。

(注意)1ビット型行列からの変更、また1ビット型行列への変更は行と列が反転します。
 これは1ビット型行列はX,Y型で実装しているために通常のm,n型行列とは転置行列の関係になります。
 {128,64}→Dim Mat A.P
 LCD画面のバッファとして確保します。
 Mat A→Dim Mat A.B
 バイト型行列に変更すると、
 要素サイズは{64,16}になります。

----------ここまで-----------

この中の後半部分

> {128,64}→Dim Mat A.P
> LCD画面のバッファとして確保します。
> Mat A→Dim Mat A.B
> バイト型行列に変更すると、
> 要素サイズは{64,16}になります。

ですが、先ず

{128,64}→Dim Mat A.P

は、

{128,64}→Dim Mat A.P

ですね(^^;


それから、

> {128,64}→Dim Mat A.P
> LCD画面のバッファとして確保します。

この記述だと、Mat A.P を確保すると Mat A.V と同様に LCD のビットマップパターンが自動的に行列に反映されるようにも読み取れます。一応確認しましたが、そのようなことは無いので、

> {128,64}→Dim Mat A.P
> LCD画面のバッファとして確保します。但し自動的にLCDのバッファにはなりません。

といった感じに修正するのはどうでしょうか?


逆に、Mat A.v は面白いですね。
この宣言の後、Mat A に書き込み、PutDispDD を実行するとLCDに描画されます。

このあたりを

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

にサンプルプログラムで紹介しました。



PutDispDD

sentaro様


PutDispDD について質問があります。

以下のプログラムが終了すると、右上にDoneと表示が現れます。

{127,63}→Dim Mat A.v
For 1→Y To 63
 For 1→X To 63
  1→A[X,Y]
 Next
Next
PutDispDD

VRAM上の全てのピクセルをONにしてから、LCDに転送する筈ですね。
実行画面では、画面が真っ黒になった上に Done が表示され、Doneの行が上書きされるので、テキスト画面に描画されている可能性がありませんか?

そこで、PutDispDD の前に Text 1,1,"" を追加して、グラフィックス画面に切り替えるようにします。
この場合、何も表示しない画面が表示され、[EXE] を押すと Text を追加する前と同じ画面になって やはりDoneが表示されます。

どうも PutDispDD の動画が理解できません。

本来、どのような動作を意図されているのでしょうか?

Re:Re: Re: 行列の型について

管理人様、こんにちは!

>いずれ Manual_J.txt も英訳する予定なので、細かい記述が気になります。

お手数おかけしてますm(_ _)m


>{128,64}→Dim Mat A.P
>は、
>{128,64}→Dim Mat A.P
>ですね(^^;

はい、たぶん、初期値を0にした場合のつもりで書いてしまったのだと思うのですが、
{127,63}→Dim Mat A.P
ということですね(^^;



>> {128,64}→Dim Mat A.P
>> LCD画面のバッファとして確保します。但し自動的にLCDのバッファにはなりません。
>といった感じに修正するのはどうでしょうか?

了解です。
出来るだけ誤解のないようにしていきたいので、修正しておきます(^^)

あ、バッファという表現は仮想メモリとかの方がよいでしょうか?



>逆に、Mat A.v は面白いですね。
>この宣言の後、Mat A に書き込み、PutDispDD を実行するとLCDに描画されます。

>このあたりを

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

>にサンプルプログラムで紹介しました。

分かりやすいサンプル付きでよいですね。
ありがとうございます(^^)


あ、いっこだけ気がついた点として、
Example 1の
A→Dim A.w
と、
Mat A→Dim Mat A.w
では構文の意味が違います(^^;

A→Dim A.w
これは、fx-5800P準拠の配列初期化構文を取り入れたもので、

Mat A→Dim Mat A.w
こちらが要素の型変更構文となっていますのでMatは省略出来ないです。

Mat表記を省略出来るところと出来ないところがあるのでちょっとややこしくなるのですが(^^;
基本的にはMat A[2,3]のように[]が付いているところでは省略して配列のように使えるという感じでお願いします(^^)

Re: PutDispDD

管理人様、こんにちは!

>実行画面では、画面が真っ黒になった上に Done が表示され、Doneの行が上書きされるので、テキスト画面に描画されている可能性がありませんか?

はい、テキスト画面に描画されています。
これはプログラムスタート時のVRAMがテキスト画面ということになっているためです。
グラフィック画面を選択する場合は、管理人様ご提案で導入されたScreenコマンドで切り替えるか、グラフィックコマンドを使ってグラフィックモードにする必要があります(^^)


>本来、どのような動作を意図されているのでしょうか?

仕様としてはアドインのSDKで用意されているPutDispDD()と全く同じ動作になります。
つまり、現在のVRAMをLCD画面に転送する、というだけの機能になるのですが、
C.Basicでこれを当てはめると、管理人様のサンプルプログラムではプログラム終了時に使われているので、
PutDispDDが実行されてからすぐにプログラムが終了となったことでDone表示がされたということになります。

C.Basicではプログラム終了時には必ず最後に実行されたコマンドの結果が画面に表示されるのでプログラム最後ではPutDispDDは無くても結果は同じということですね。
PutDispDDが必要となる状況は、PutDispDD以降に表示に関わらないコマンドばかりが続いてしまって画面が更新されることがない時に強制的に画面更新させたい場合となります。
ガノー様の3D迷路でライン描画がリフレッシュタイミングの都合上、転送未遂になるために強制表示コマンドとしてTextコマンドを使う必要がありましたが、この状況ではPutDispDDが必須のコマンドになりますね(^^)

描画コマンドすべてをリフレッシュコントロールしない純正仕様と同じにすれば強制表示は必要ないのですが、コマンド末尾の「:」で転送しない選択も出来るので、デフォルトでは純正に合わせるのがよいのかどうなのか、画面表示の仕様はまだ実験的未確定状態です(^^;

Re: Re:Re: Re: 行列の型について

sentaro様

> はい、たぶん、初期値を0にした場合のつもりで書いてしまったのだと思うのですが、
> {127,63}→Dim Mat A.P
> ということですね(^^;

あ、私も書き間違ってしまいました(^^;


C.Basic Command Reference では書き間違っていないので、ご容赦を...


> >> {128,64}→Dim Mat A.P
> >> LCD画面のバッファとして確保します。但し自動的にLCDのバッファにはなりません。
> >といった感じに修正するのはどうでしょうか?
>
> 了解です。
> 出来るだけ誤解のないようにしていきたいので、修正しておきます(^^)

お手数をおかけしますが、よろしくお願い致します。


> あ、バッファという表現は仮想メモリとかの方がよいでしょうか?

あ、そうですね。バッファと書くと自動的に連動するようなイメージを与える可能性がありそうですね。「仮装メモリとしても使える」といった感じ、或いは「全画面ビットマップデータの仮装メモリとして利用できる」なんてのも良いでしょうか?




> >http://egadget.blog.fc2.com/blog-entry-550.html
>
> >にサンプルプログラムで紹介しました。
>
> 分かりやすいサンプル付きでよいですね。
> ありがとうございます(^^)

VRAMアクセスの Mat A.v の説明ページを別途作るつもりで、そこでは全画面描画(ドットで埋め尽くす)サンプルプログラムを、VRAMアクセスで作って、その高速描画速度を示すとか(Casio Basicとの比較を入れるかも...)、ストライブ処理みたいなサンプルプログラムも示せたら、C.Basic の特徴をアピールできるかも知れないと思っています。



> あ、いっこだけ気がついた点として、
> Example 1の
> A→Dim A.w
> と、
> Mat A→Dim Mat A.w
> では構文の意味が違います(^^;

完全に勘違いしていました。ご指摘ありがとうございます。早々に修正しておきました。



> Mat表記を省略出来るところと出来ないところがあるのでちょっとややこしくなるのですが(^^;
> 基本的にはMat A[2,3]のように[]が付いているところでは省略して配列のように使えるという感じでお願いします(^^)

この説明は分かり易いので、行列の省略表記について別途ページを作って、そこで使わせて頂きました。

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


>>実行画面では、画面が真っ黒になった上に Done が表示され、Doneの行が上書きされるので、テキスト画面に描画されている可能性がありませんか?

>はい、テキスト画面に描画されています。
>これはプログラムスタート時のVRAMがテキスト画面ということになっているためです。
>グラフィック画面を選択する場合は、管理人様ご提案で導入されたScreenコマンドで切り替えるか、グラフィックコマンドを使ってグラフィックモードにする必要があります(^^)

>C.Basicではプログラム終了時には必ず最後に実行されたコマンドの結果が画面に表示されるのでプログラム最後ではPutDispDDは無くても結果は同じということですね。
>PutDispDDが必要となる状況は、PutDispDD以降に表示に関わらないコマンドばかりが続いてしまって画面が更新されることがない時に強制的に画面更新させたい場合となります。
>ガノー様の3D迷路でライン描画がリフレッシュタイミングの都合上、転送未遂になるために強制表示コマンドとしてTextコマンドを使う必要がありましたが、この状況ではPutDispDDが必須のコマンドになりますね(^^)

ありがとうございます。プログラムの最初と最後は注意が必要ですね。


>>本来、どのような動作を意図されているのでしょうか?

>仕様としてはアドインのSDKで用意されているPutDispDD()と全く同じ動作になります。

最初がテキスト画面になるということが、ポイントですね。
Mat A.v 確保の前に、テキストかグラフィックスかを決めておく必要があるので、Screen.G を先に実行するように、サンプルプログラムを修正しました。

通常の行列は、領域確保した段階で、位置的に初期化しなければ、全要素が 0になるのですが、Mat A.v では領域確保すれば即VRAMのビットマップが反映されること、サンプルプログラムで確認しました。

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

なかなか面白いですね。



>描画コマンドすべてをリフレッシュコントロールしない純正仕様と同じにすれば強制表示は必要ないのですが、コマンド末尾の「:」で転送しない選択も出来るので、デフォルトでは純正に合わせるのがよいのかどうなのか、画面表示の仕様はまだ実験的未確定状態です(^^;

純正に合わせると間違いなく描画が遅くなるので、デフォルトでリフレッシュコントロールに任せることにした方が良いような気がしております。で、オプションの「:」で一旦VRAM転送に留めるという仕様が、私の肌にはしっくりくるんです。

ところで、以下の2つのプログラムを比較してみました。

'<Sample 1>
Cls
For 1→B To 63
 For 1→A To 127
  PxlOn B,A:
 Next
Next


'<Sample 2>
Cls
Screen.G
{127,63}→Mat A.v
For 1→Y To 63
 For 1→X To 127
  1→A[X,Y]
 Next
Next
PutDispDD


29MHz で動作させると、Sample 1 の方が描画に時間がかかります。
これについては、どのように理解すれば良いでしょうか?


Re:Re: Re:Re: Re: 行列の型について

管理人様、こんにちは!

>あ、そうですね。バッファと書くと自動的に連動するようなイメージを与える可能性がありそうですね。「仮装メモリとしても使える」といった感じ、或いは「全画面ビットマップデータの仮装メモリとして利用できる」なんてのも良いでしょうか?

了解です!
「全画面ビットマップデータの仮想メモリとして利用できる」というのが解釈の間違いが無さそうでよい感じですね(^^)


>VRAMアクセスの Mat A.v の説明ページを別途作るつもりで、そこでは全画面描画(ドットで埋め尽くす)サンプルプログラムを、VRAMアクセスで作って、その高速描画速度を示すとか(Casio Basicとの比較を入れるかも...)、ストライブ処理みたいなサンプルプログラムも示せたら、C.Basic の特徴をアピールできるかも知れないと思っています。

VRAM直アクセスはCやマシン語でプログラムすることに近づいていきますが、C.Basicでも高速化技としても利用価値があるかもしれませんね(^^)


>この説明は分かり易いので、行列の省略表記について別途ページを作って、そこで使わせて頂きました。
http://egadget.blog.fc2.com/blog-entry-551.html

早速にありがとうございます!(^^)


>Mat A.v 確保の前に、テキストかグラフィックスかを決めておく必要があるので、Screen.G を先に実行するように、サンプルプログラムを修正しました。

これはまたちょっとややこしいことなのですが(^^;
今の仕様ではMat A.Vはその時点でのVRAMにアクセス出来るということでテキストVRAMとグラフィックVRAMどっちにもなり得るので、最初にテキストで確保したからテキストVRAM専用のアクセスになるというわけではないです。
ということで、プログラム中でアクセス対象は自由に変更出来るということになっています(^^;


>通常の行列は、領域確保した段階で、位置的に初期化しなければ、全要素が 0になるのですが、Mat A.v では領域確保すれば即VRAMのビットマップが反映されること、サンプルプログラムで確認しました。
>なかなか面白いですね。

はい、行列の領域確保というよりはすでにあるVRAM領域を行列に割り当てるという形になるので、通常の初期化処理は無いですね。


>純正に合わせると間違いなく描画が遅くなるので、デフォルトでリフレッシュコントロールに任せることにした方が良いような気がしております。で、オプションの「:」で一旦VRAM転送に留めるという仕様が、私の肌にはしっくりくるんです。

了解です(^^)
ところで、Locate/Textは今のままの純正同様の強制表示仕様でよいでしょうか?
強制表示のPutDispDDコマンドが新設されたのでグラフィック同様のリフレッシュコントロールにしてもよいかもとちょっと考えています。


>29MHz で動作させると、Sample 1 の方が描画に時間がかかります。
>これについては、どのように理解すれば良いでしょうか?

これは実数モードと整数モードでそれぞれ速度差が違うのですが、
実数モードで速度差の生じる一番の要因として、
Pxl系コマンドは純正仕様に則ってコマンド終了時にX,YにViewWindow座標値を代入しないといけないのでちょっとだけ計算時間がかかってます。
純正のようにドットを打つ度に毎回LCD転送していればそれは無視できるくらいの時間なのですが、ドットを打つ作業に比較すると実数処理は結構重いので時間がかかってしまいます。
そのために整数モードのPxl系コマンドでは、ただドットを打つだけのコマンドになっていて純正互換では無くなっています。
これは整数モード自体が速度向上を目的とした拡張仕様なのでPxl系は互換無くてもよいだろうという判断です(^^;
(Line/Plotは整数モードでも純正互換仕様になっています。)

では、整数モードでは2つのリストが同じ処理をしているはずなのに差がでるのはなぜかというと、
PxlOn B,A
では座標値取得で式評価が2回必要なところなのですが、
A[X,Y]のようなインデックスの単純な行列では式評価すること無しでインデックス計算をしているので座標計算が簡略化されているためです。

ということで、整数モードの速度差は座標値取得時間の差、
実数モードでは、それプラス純正互換処理が加わるということでさらに差が開くということですね。

2つのVRAM

sentaro様

VRAMの内部実装についての質問です。


> >Mat A.v 確保の前に、テキストかグラフィックスかを決めておく必要があるので、Screen.G を先に実行するように、サンプルプログラムを修正しました。
>
> これはまたちょっとややこしいことなのですが(^^;
> 今の仕様ではMat A.Vはその時点でのVRAMにアクセス出来るということでテキストVRAMとグラフィックVRAMどっちにもなり得るので、最初にテキストで確保したからテキストVRAM専用のアクセスになるというわけではないです。
> ということで、プログラム中でアクセス対象は自由に変更出来るということになっています(^^;

テキストとグラフィクスのVRAMへのアクセスを個別に自由にできるのでしょうか?
例えば、グラフィックスVRAMから Mat A.v で特定範囲を取得しておいて、テキストVRAMに その特定領域のデータを追加してから、テキストVRAMをLCDに転送するといったことを、例題として考えてみています。

お書きになっている説明では、Mat A.v を確保した場合、時々によって対応するVRAMがテキストだったりグラフィックスだったりするような印象をもったので、使いこなすのは面倒だと感じました。

そこで、上記の質問を改めて致しました。







整数モードでのコマンド互換性について

sentaro様


> ところで、Locate/Textは今のままの純正同様の強制表示仕様でよいでしょうか?
> 強制表示のPutDispDDコマンドが新設されたのでグラフィック同様のリフレッシュコントロールにしてもよいかもとちょっと考えています。

仕様の統一性を考えれば、おっしゃるように Locate/Text も他と同じにリフレッシュコントロール任せが良いかも知れませんね。

ところで、先ほどの質問と関連するのですが、PutDispDD は SDKではグラフィックスVRAM用ですよね?
それともテキストVRAMアクセスも可能あるいは、両方区別無しなのでしょうか?

このあたりで、Locate/Textの扱いをどうすれば良いのか、私としては変わるような気がします。

どうも深いところが分からずに居ります。



> ということで、整数モードの速度差は座標値取得時間の差、
> 実数モードでは、それプラス純正互換処理が加わるということでさらに差が開くということですね。

とても分かり易いご説明、ありがとうございます。

で、まとめての質問になりますが、実数モードでのグラフィックスコマンドは純正互換で、整数モードでは PxlOn, PxlOff, PxlChg のみが、プロットのみで X, Y の計算無し、ということでよろしいでしょうか?


ところで、

ClrGraph
ViewWindow 1,127,0,1,63,0
For 1→X To 63
For 1→Y To 127
PxlOn Y,X
Next
Next

の挙動が、整数モードと実数モードで異なりますので、サンプルプログラムとして面白いかも知れませんね。


Re:2つのVRAM

管理人様、こんにちは!

>テキストとグラフィクスのVRAMへのアクセスを個別に自由にできるのでしょうか?

んと、
C.BasicでのVRAMの実装としては一つしかありません。これを単にVRAMと呼ぶことにします。
テキストVRAMとグラフィックVRAMはそれぞれ別に専用の保存エリアを設けています。
テキストコマンドが実行された場合はVRAMにテキストVRAMを転送して描画して表示という段取りになります。
次もテキストコマンドであれば、そのまま描画して表示、
グラフィックコマンドの場合はVRAMをテキストVRAMに転送保存した後にグラフィックVRAMをVRAMに転送してからグラフィック描画、表示となります。
その次がグラフィックコマンドの場合は、そのままVRAMに描画して表示、
テキストコマンドであれば、VRAMをグラフィックVRAMに保存した後にテキストVRAMをVRAMに転送してからテキスト描画、表示となります。
テキスト表示が続く場合は、VRAMは常にテキストVRAMと同じ状態を保ちます。
グラフィックの場合も同じです。
コマンドの描画対象は常にVRAMです。テキスト専用VRAMやグラフィック専用VRAMに描画されることはなく単なるバックアップ領域となっています。

そこで、
{127,63}→Mat A.v
ですが、
これはVRAMの実体を行列Aに割り当てるだけなので、その時点でのVRAMがテキストかグラフィック、どちらを意味しているかは直前の描画コマンドによって変化するということです。
これを描画コマンド無しで変更するのがScreenコマンドです。
ということを前提にすると、


>例えば、グラフィックスVRAMから Mat A.v で特定範囲を取得しておいて、テキストVRAMに その特定領域のデータを追加してから、テキストVRAMをLCDに転送するといったことを、例題として考えてみています。

同じサイズの1ビット型行列を仮想メモリとして確保して、
------------------------------------------
{127,63}→Mat A.v // VRAMを行列に割当
{127,63}→Mat T.p // テキストVRAMを転送するテキスト仮想メモリ
{127,63}→Mat G.p // グラフィックVRAMを転送するグラフィック仮想メモリ
Screen.G     // VRAMをグラフィックに設定。(内部ではVRAMをテキストVRAMに転送保存してグラフィックVRAMをVRAMに転送)
Mat A→Mat G   // VRAM(=グラフィックVRAM)をグラフィック仮想メモリに転送
Screen.T     // VRAMをテキストに設定。(内部ではVRAMをグラフィックVRAMに転送保存してテキストVRAMをVRAMに転送)
Mat A→Mat T   // VRAM(=テキストVRAM)をテキスト仮想メモリに転送
・・・
Mat Gから特定領域を切り出しMat Tに追加する。(専用コマンドは無いので行列要素のプログラムでの演算処理が必要です)
・・・
Mat T→Mat A   // 仮想メモリからVRAMに転送
PutDispDD    // VRAMをLCDに転送=表示
------------------------------------------

ちょっと手順多いですがこういう形でとりあえず実現可能です(^^;

こうしてみると、
VRAMの割当がテキスト、グラフィックで個別に出来るとなれば、
------------------------------------------
{127,63}→Mat T.vT  // テキスト専用VRAM領域を行列に割当
{127,63}→Mat G.vG  // グラフィック専用VRAM領域を行列に割当
・・・
Mat Gから特定領域をMat Tに追加する。(専用コマンドは無いので行列要素のプログラムでの演算処理が必要です)
・・・
Screen.T     // VRAMをテキストに設定。(内部ではVRAMをグラフィックVRAMに転送保存してテキストVRAMをVRAMに転送)
PutDispDD    // VRAMをLCDに転送=表示
------------------------------------------

VRAM間の転送のオーバーヘッドが無くなってすっきりしますね(^^)


>ところで、先ほどの質問と関連するのですが、PutDispDD は SDKではグラフィックスVRAM用ですよね?
>それともテキストVRAMアクセスも可能あるいは、両方区別無しなのでしょうか?

はい、テキストVRAMという概念が無いのでグラフィックVRAMだけとなります。
C.Basicでは上記のように実装の都合上、グラフィックと同等のVRAM構造になってるのですが、
純正ではテキストVRAMはグラフィック同等構造ではなく、本当に21x8行のテキストだけのVRAMですね。
CG10/20への移植を考えるとテキストVRAMのグラフィック同等はちょっと厳しいかなと思ってます(^^;

Re: Re:2つのVRAM

sentaro様

VRAMまわりの詳細の解説を頂き、ありがとうございます。

スッキリと分かりました。

そこで、以下のようなサンプルプログラムを作ってみたところ、妙な動作に出くわしました。グラフィックスVRAMから 1bit仮想行列へのコピー で、VRAMの1番上のラインのビットデータが正しくコピーされていないような現象があるかも知れません。ご確認頂けますか?


' Matrix base: 1

{127,63}→Dim Mat T.p
{127,63}→Dim Mat G.p
{127,63}→Dim Mat V.v

'一旦テキスト画面
ClrText
"Text"
Screen.T //念のため
Mat V→Mat T

ClrGraph
Circle 0,0,2
Text 1,1,"Graphics"
FKeyMenu(1,"EXIT")
FKeyMenu(2,"TxtT")
FKeyMenu(3,"Grph")
Screen.G //念のため
Mat V→Mat G // ここで、Mat V と Mat G の一番上のラインのビットマップデータが違っている

//ファンクションメニューのビットマップをテキストVRAM用仮想行列へコピー
For 56→Y To 63
 For 1→C To 127
  //回りくどいが、実験のため仮想行列から仮想行列へコピー
  G[X,Y]→T[X,Y] //下から8ライン分のビットマップデータのみをコピー
 Next
Next
Screen.T
Mat T→Mat V // ここでは異常なし?

//ファンクションキーで、テキスト/グラフィックス画面の切替
//[EXIT]で終了
While 1
Getkey1→K
If K=59:Then
 Mat G→Mat V
 PutDispDD //念のため
ElseIf K=69:Then
 Mat T→MatV
 PutDispDD //念のため
ElseIf K=70:Then
 ClrMat T:ClrMat G
 ClrText:ClrGraph
 Return
IfEnd
WhileEnd

グラフィックス画面に切り替えると、テキスト画面の1ライン目が、グラフィック画面で表示されています。
[SHIFT][F2](Mat)の表列ビュワーで、各行列を調べてみると、VRAMバッファ行列から1bit仮想行列へのコピーでこの異常が発生しているように見えています。

調べてみて頂けませんか?


ところで...

> こうしてみると、
> VRAMの割当がテキスト、グラフィックで個別に出来るとなれば、
> ------------------------------------------
> {127,63}→Mat T.vT  // テキスト専用VRAM領域を行列に割当
> {127,63}→Mat G.vG  // グラフィック専用VRAM領域を行列に割当
> ・・・
> Mat Gから特定領域をMat Tに追加する。(専用コマンドは無いので行列要素のプログラムでの演算処理が必要です)
> ・・・
> Screen.T     // VRAMをテキストに設定。(内部ではVRAMをグラフィックVRAMに転送保存してテキストVRAMをVRAMに転送)
> PutDispDD    // VRAMをLCDに転送=表示
> ------------------------------------------
>
> VRAM間の転送のオーバーヘッドが無くなってすっきりしますね(^^)

これは、良いですね(^_^)/


お久しぶりです

管理人様、sentaro様、お久しぶりです。

最近はRaspberry Piという小型LinuxPCに浮気をしていました。
現状は純正CasioBasicの通信とRaspberry Piを通信させて遊ぼうと奮闘しています(ケーブル自作から始めてます)。
最終的にはfx-9860GII→MML→Raspberry PiでBGM再生をしたいと思っています^^;



さて、久々にC.Basicを利用していて少し要望が出てきたので書かせて下さいませ。要望は、主に検索関連です。

以前作ったYOKOLITHのコードを改造しようと久々にコードを見てみると、変数の用途をコメントに残しているとはいえ、使っている変数が多すぎて解析が大変(←おい^^;)でした。

↓↓↓以下要望↓↓↓

1.前回検索したワードを、次に検索するときにも引き継ぐようにして欲しいです
→例えば「a」を検索していて、目的の箇所にたどり着いて、修正し、その後改めて下方にある第二の目的の箇所を探す際に、再度検索ワードを設定し直す必要があり面倒です。そのため、再検索時に以前の検索ワードを引き継ぎつつ、F1等に検索ワードクリアを割り当てていただけると嬉しいです。

2.検索ワードに、C.Basicのコマンドも設定して検索できるとありがたいです。
→例えば「Prog」等と入れてコマンドのProgも検索できたらありがたいです。

3.検索時に、編集画面で設定している「小文字/大文字」の状態も引き継いで欲しいです。
→検索ワードで変更した「小文字/大文字」の切り替えが編集画面/検索画面で共通になってくれたら嬉しいです。大量の変数を使う人は少ないでしょうけど、この仕様なら大文字だけ使う人でも問題ないでしょうし、小文字も使っちゃう人でも問題ないと思うのです。


4.ファイルの読み込み、書き込みの拡張子を設定できたらいいなー(ボソ)
→拡張子に応じて自動でどうこうしてとは言いませんので(笑)

以上、4番目以外ご検討頂ければ幸いです。

Re: お久しぶりです

ガノー様

お久しぶりです。

TwitterやAmazonのfx-9860GIIのレビューでお見かけしておりました。

Raspberry Piというと、とても安いので有名な基板むき出しのボードPCですよね。
これが、Linuz PCとは知りませんでした。子供向けと聞いていたので Basicだとばかり思っていました。


> 現状は純正CasioBasicの通信とRaspberry Piを通信させて遊ぼうと奮闘しています(ケーブル自作から始めてます)。
> 最終的にはfx-9860GII→MML→Raspberry PiでBGM再生をしたいと思っています^^;

電子工作も守備範囲なのですね。うらやましいです。

ならば、是非 fx-5800P とPCリンクするインターフェースなど開発されませんか?
ガッツリ要望むき出しですみません(^^;
just kidding...


実は、個人的にはご要望の4番が一番実現して欲しいと思ったりしています>sentaro様

あと、Yokolithの紹介が遅れています。
すみません。

実は、自作プログラムと同一あるいは類似のファイル名があるため、チョット面倒なことになっており、最近ようやくフォルダ対応をして頂いたところで、今頃ですが ほぼ毎日Yokolithで遊んでいます。
紹介ページについては、そろそろ作成致します。


現在、C.Basic Command Reference を英文で作成中だったりします。広く海外に伝えて、すばらしさを共有したいと思っているんですが、その際 Yokolithがとても良いサンプルプログラムになると思っています。なので、Yokolith95完成版 と拙作 ライフゲームを先ずはサンプルとして英文ページでも紹介したいと思っています。

そこで、お願いがありまして、コメント文を英訳してしまってよろしいでしょうか?

最近コードを拝見して勉強させてもらっていますが、英語版では、ついでにプログラム最後でClrMat で行列解放しちゃっても構いませんか?


アドイン版 C.Basic ver.0.99o テスト版 その9.9o(リフレッシュコントロール設定可能+α版)

管理人様、こんにちは!

昨日のレスで抜けていたのですが(^^;

>仕様の統一性を考えれば、おっしゃるように Locate/Text も他と同じにリフレッシュコントロール任せが良いかも知れませんね。

一度全部リフレッシュコントロールにしてみたところ、ライフゲームの最初のTextコマンドの説明が未完となる不具合が出ました(^^;
ということで、どうにも決めかねるので自由に設定できるようにしてみました(^^;


>で、まとめての質問になりますが、実数モードでのグラフィックスコマンドは純正互換で、整数モードでは PxlOn, PxlOff, PxlChg のみが、プロットのみで X, Y の計算無し、ということでよろしいでしょうか?

はい、互換の無くなるのは絶対座標系のPxl系コマンドのみとなってます。


>そこで、以下のようなサンプルプログラムを作ってみたところ、妙な動作に出くわしました。グラフィックスVRAMから 1bit仮想行列へのコピー で、VRAMの1番上のラインのビットデータが正しくコピーされていないような現象があるかも知れません。ご確認頂けますか?
確認しました。
これはたしかに妙な動作です(^^;

ですが、妙な動作の原因はこの部分です。
-----------------------------------------------------------
//ファンクションキーで、テキスト/グラフィックス画面の切替
//[EXIT]で終了
While 1
Getkey1→K
If K=59:Then
 Mat G→Mat V // テキスト画面のままVRAM転送(上書き)したのでテキスト上の1ラインが残ってしまった。
 PutDispDD //念のため
ElseIf K=69:Then
 Mat T→MatV // ここは問題ありません。
 PutDispDD //念のため
ElseIf K=70:Then
 ClrMat T:ClrMat G
 ClrText:ClrGraph
 Return
IfEnd
WhileEnd
-----------------------------------------------------------

つまり画像の書き換え範囲が[0,0]-[127,63]ではなくて[1,1]-[127,63]なので左端と最上部の1ラインが書き換え範囲対象外となります。
ここが肝なのですがテキストコマンドは[0,0]-[127,63]の全部の範囲で描画するので[1,1]-[127,63]の範囲だけが描画エリアのグラフィック画面とは上と左の1ラインだけ大きさが違うということですね。
この妙な動作を解消するには
Mat G→Mat V の前に、
Screen.Gが必要というわけです(^^)




ガノー様、おひさしぶりです!

>最近はRaspberry Piという小型LinuxPCに浮気をしていました。
>現状は純正CasioBasicの通信とRaspberry Piを通信させて遊ぼうと奮闘しています(ケーブル自作から始めてます)。
>最終的にはfx-9860GII→MML→Raspberry PiでBGM再生をしたいと思っています^^;

RasPiいいですね~(^^)
いずれ手を出そうと思っているうちにどんどん新バージョンが出てちょっと焦ってます(^^;
通信となるとRS232Cの通信コマンドも純正同様にサポートしないといけないですね。
次回以降バージョンで検討してみます(^^)


>1.前回検索したワードを、次に検索するときにも引き継ぐようにして欲しいです

検索開始時に検索文字列を初期化していたので、それを初期化しないようにしてみました。


>2.検索ワードに、C.Basicのコマンドも設定して検索できるとありがたいです。

これは、隠し機能というわけではなかったのですが、以前より文字列入力時に[F3]を押せばコマンドが入力できます(^^)


>3.検索時に、編集画面で設定している「小文字/大文字」の状態も引き継いで欲しいです。

C.Basic起動時に大文字に設定される以外は大文字小文字切り替えを初期化しないようにしてみました。
ということでC.Basic起動中は設定が維持されます。


>4.ファイルの読み込み、書き込みの拡張子を設定できたらいいなー(ボソ)

んと、これは…Ver.0.96ぐらいから任意の拡張子が使えるようになってました(^^;
Ver.0.99n以降で任意のフォルダを含めた指定も可能になりました。
(例)Load("SUB/SAMPLE.dat")



ということで、
Ver.0.99nのシステムエラーバグがまだ残っている上に行列引数対応もまだなのですが、とりあえずバージョンを上げました(^^;


アドイン版 C.Basic ver.0.99o テスト版 その9.9o(リフレッシュコントロール設定可能+α版)
http://pm.matrix.jp/CB/CBASIC099o.zip
・画面のリフレッシュをマニュアル設定できるようになりました。セットアップとコマンドで設定できます。
 Off:リフレッシュコントロール無し。表示においては純正互換仕様です。
 Grp:グラフィックコマンドのみリフレッシュコントロール有り。ClrText,Locate,Text,LocateYX、””は無しで以前のバージョン互換です。
 All:すべての描画コマンドがリフレッシュコントロールされた表示となります。必要に応じてPutDispDDコマンドが必須となります。
 Time:リフレッシュコントール時間を設定します。n/128秒単位で画面更新します。デフォルトは3で約1/42秒での更新となっています。

・画面のリフレッシュをコマンドで設定できるRefrshCtrlとRefrshTimeコマンドを追加しました。
(例)RefrshCtrl 0
 リフレッシュコントロール無し。Off
(例)RefrshCtrl 1
 リフレッシュコントロール有り。Grpモードに設定します。
(例)RefrshCtrl 2
 すべてのリフレッシュコントロール有り。Allモードに設定します
(例)RefrshTime 5
 リフレッシュコントール時間を5に設定します。
 RefreshCtrlとRefrshTimeコマンドは式の中で使うと現在の値を返します。

・入力時のアルファベットの大文字小文字切り替えを初期化しないようにしました。起動時に大文字に設定される他は初期化されることがありません。。
・エディタのサーチ機能において、前回の検索文字列が再度表示されるように変更しました。[AC]でクリアできます。
・Save/Loadコマンドのファイル名の拡張子は任意に設定できます。省略した場合は[.bin]になります。

No title

TO:管理人様

>電子工作
門外漢なのですが、現在挑戦中です^^;
また、GIIの方が成功すればUSB/GPIOケーブルなるものがあるので、
もしかしたらやれるかもしれませんので心に留めておきます。

>YOKOLITH
ソースを見なおした所、変数の説明(記録)が一部間違っているので(^^;)、
英訳・Matの開放処理等も含めて私がやろうと思います。
ちょっと時間がかかるかもしれませんが、お待ち下さい。

また、日本語の解説も私が作るのも吝かではありません(笑)ので、
気軽にお申し付け下さい。
(英語は・・・日本語の解説を作ってからお願いするかもしれませんが・・・^^;)。


TO sentaro様
おおお、ありがとうございます!早速ダウンロードさせて頂きます!
というか、YOKOLITHはグラフィック制御を最新の事情に合わせて
改造しようと思います。せっかくですし!

以上、よろしくお願いします。

VRAM割当時の行列インデックスベースを0に固定化

管理人様、ガノー様、こんにちは!

VRAMは128x64固定ということで、VRAM割当時の行列インデックスベースを0にして128x64の行列として固定化してみました。
それから、テキストとグラフィックのVRAM領域を行列に割り当てられるようにしてみました。
インデックスベースはデフォルトの1のままでも、VRAM行列だけが0から使えるだけで何も変わりはありませんが、VRAM行列を扱う場合は全体のベースを0にした方が何かと都合は良いかもしれません。

管理人様の先のテストプログラムはかなりすっきりします(^^)
------------------------------------------
 {128,64}→Mat T.vT  // テキスト専用VRAM領域を行列に割当
 {128,64}→Mat G.vG  // グラフィック専用VRAM領域を行列に割当
 {128,64}→Mat V.v   // VRAM領域を行列に割当
 ・・・
 グラフィック画面に描画する
 ・・・
 Mat Vから特定領域をMat Tに追加する。(演算処理)
 ・・・
 Screen.T     // VRAMをテキストに設定。(内部ではVRAMをグラフィックVRAMに転送保存してテキストVRAMをVRAMに転送)
 PutDispDD    // VRAMをLCDに転送=表示
------------------------------------------

次のようにすることもできます。
------------------------------------------
 {128,64}→Mat T.vT  // テキスト専用VRAM領域を行列に割当
 {128,64}→Mat G.vG  // グラフィック専用VRAM領域を行列に割当
 {128,64}→Mat V.v   // VRAM領域を行列に割当
 ・・・
 グラフィック画面に描画する
 ・・・
 Screen.T     // VRAMをテキストに設定。(内部ではVRAMをグラフィックVRAMに転送保存してテキストVRAMをVRAMに転送)
 Mat Gから特定領域をMat Vに追加する。(演算処理)
 ・・・
 PutDispDD    // VRAMをLCDに転送=表示
------------------------------------------

さらに、こういう形でも出来ます。
------------------------------------------
 {128,64}→Mat T.vT  // テキスト専用VRAM領域を行列に割当
 {128,64}→Mat G.vG  // グラフィック専用VRAM領域を行列に割当
 {128,64}→Mat V.v   // VRAM領域を行列に割当

 Screen.G     // VRAMをグラフィックに設定。(内部ではVRAMをテキストVRAMに転送保存してグラフィックVRAMをVRAMに転送)
 Mat T→Mat V   // テキスト専用VRAM領域を現在のVRAM(=グラフィック)にコピーします。グラフィック画面はテキスト画面と同じになります。
 ・・・
 画面モードはグラフィック画面なので通常のグラフィックコマンドでグラフィックを描きます!
 ・・・
 Mat V→Mat T   // 現在のVRAM(=グラフィック)をテキスト専用VRAM領域にコピーします。
 Screen.T     // VRAMをテキストに設定。(内部ではVRAMをグラフィックVRAMに転送保存してテキストVRAMをVRAMに転送)
 PutDispDD    // VRAMをLCDに転送=表示
------------------------------------------

グラフィックコマンドをテキスト画面に描画させる形になるので便利かもしれません(^^)

ちなみに、
Screen.Tは
Mat V→Mat G
Mat T→Mat V
Screen.Gは
Mat V→Mat T
Mat G→Mat V
と同じ処理をしていることになります。




>おおお、ありがとうございます!早速ダウンロードさせて頂きます!
>というか、YOKOLITHはグラフィック制御を最新の事情に合わせて
>改造しようと思います。せっかくですし!

グラフィック制御は、自在に出来るようになりましたけど、
全モード共通の構文として、
「:」(コロン)で画面更新無し、
「;」(セミコロン)で強制リフレッシュコントロール、
となっていますが、
画面更新したいタイミングでPutDispDDを使う方式ならば、すべての描画コマンドは「:」(コロン)付加で良いと思われます(^^)

例によってバグ残ってる可能性大なので厳しいチェックお願いします(^^;


GetKey3でバグも見つかりましたので、ver.0.99o差し替えです。

アドイン版 C.Basic ver.0.99o テスト版 その9.9o(リフレッシュコントロール設定可能+α版)
http://pm.matrix.jp/CB/CBASIC099o.zip
・行列にVRAMを割り当てる場合は、常にインデックスは0から始まりサイズを{128,64}固定としました。
 さらに、テキストVRAM保存領域とグラフィックVRAM保存領域を行列に割り当てることができるようになりました。
 (例){128,64}→Dim Mat T.vT
  テキストVRAM保存エリアをMat Tに割り当てます。インデックスのとる値は0~127、0~63となります。
  現在のVRAMがグラフィックVRAMの場合、Mat Tに演算処理してScreen.TコマンドでVRAMをテキスト画面にするとMat Tの内容がVRAMに転送されます。
 (例){128,64}→Dim Mat G.vG
  グラフィックVRAM保存エリアをMat Gに割り当てます。インデックスのとる値は0~127、0~63となります。
  現在のVRAMがテキストVRAMの場合、Mat Tに演算処理してScreen.GコマンドでVRAMをグラフィック画面にするとMat Gの内容がVRAMに転送されます。
  表示をするにはPutDispDDコマンドを使用して下さい。

・GetKey3でキー入力が上手くいかない不具合があったのを修正しました。

YOKOLITH

ガノー様

> >電子工作
> 門外漢なのですが、現在挑戦中です^^;
> また、GIIの方が成功すればUSB/GPIOケーブルなるものがあるので、
> もしかしたらやれるかもしれませんので心に留めておきます。

うれしいです。ひよっとしたら...と思うと楽しみです(^_^)/
ありがとうございます。



> >YOKOLITH
> ソースを見なおした所、変数の説明(記録)が一部間違っているので(^^;)、
> 英訳・Matの開放処理等も含めて私がやろうと思います。
> ちょっと時間がかかるかもしれませんが、お待ち下さい。
>
> また、日本語の解説も私が作るのも吝かではありません(笑)ので、
> 気軽にお申し付け下さい。
> (英語は・・・日本語の解説を作ってからお願いするかもしれませんが・・・^^;)。

はい、ではしばらく成り行きを追いかけることに致します。

ところで、YOKOLITH95完成版ですが、今更ではありますがハマってます。
ハイスコアー 8947 までいきましたが、LEVEL10 になると殆ど追従不可能な速さで落ちてきます。なのでLEVEL9までの間にいかにポイントを稼ぐか...ですね(^^;

このようにハイスコアを保存してくれるのは、ハマる最大のポイントのように感じます。


Re: VRAM割当時の行列インデックスベースを0に固定化

sentaro様


VRAM周りを色々と触わりながら、どのような仕様が便利なのだろうか? とサンプルプログラムを色々と作っていました。

・Mat A.v で (0, 0) ~ (127, 63) 対応のビットマップ行列にするか

・'#Mat 0 or '#Mat 1 を行列ごとに設定可能にするか、

どちらかが良さそうだな...と私なりの感触をやっとこさ掴んだまさにそのタイミングで、sentaro様によるバージョンアップ!

今回の機能変更と .vT / .vG の機能追加のおかげで、全体がとても分かり易くなったと思います。

ありがとうございます!


ところで、FKeyFunc() ですが、テキスト画面への描画機能を追加できませんか?

これがやりたくて、前回のサンプルプログラムを作ったという側面もあったりします。

実用サイドから考えますと、テキストベースのプログラムが多いのではないかと感じております。私自身が日常に使う新しいプログラムを C.Basic で作って使っていますが、殆どがテキストベース。たまに簡単なビットマップパターンをテキスト画面に追加して使う感じです。なので、FKeyFinc( )をテキストベースで使えるかどうかは、プログラム利便性に大きくかかわるような気がしております。

ご検討をお願い致します。

Ver 0.99o はこれからダウンロードして検証致します。

インデックスベースの個別設定+テキストFKeyMenu()

管理人様、ガノー様、こんにちは!

>ところで、YOKOLITH95完成版ですが、今更ではありますがハマってます。
>ハイスコアー 8947 までいきましたが、LEVEL10 になると殆ど追従不可能な速さで落ちてきます。なのでLEVEL9までの間にいかにポイントを稼ぐか...ですね(^^;

YOKOLITH95は面白いですね。
毎度、動作チェックで起動したらついついハマってしまってデバッグになりません(^^;
ハイスコアはLEVEL10になるまでにほぼ4段消しの連続でやっとこ15000点くらいまで行きましたがLEVEL10になった途端あっけなく終了です(^^;
それからスピードが上がったり積み上がってきた時に焦って間違えて[EXIT]キーに触ってしまって、Bye!…ってことが(^^;


>・Mat A.v で (0, 0) ~ (127, 63) 対応のビットマップ行列にするか

元々、VRAMは(0,0)-(127,63)なので1から始まるのはちょっと無理がありましたね。
0から固定したのでそこのあたりは何も悩むことは無くなりました(^^)

>・'#Mat 0 or '#Mat 1 を行列ごとに設定可能にするか、

行列ごとに確保時にベースを設定することが出来るようにしてみました。
行列確保時に末尾に0をつけると0ベース、1を付けると1ベースとなるので、デフォルトのベース設定を変更すること無く個別設定が出来ます。
(例){128,64}→Mat A.P0
 0ベースの行列を確保します。[0,0]-[127,63]
(例){128,64}→Mat A.P1
 1ベースの行列を確保します。[1,1]-[128,64]
0ベースと1ベースではインデックス範囲が1ずれるのでややこしいのですが、そこのところのエラーチェックはしっかりしているのでインデックス範囲外指定でメモリ破壊ということにはならないようになっています(^^;


>ところで、FKeyFunc() ですが、テキスト画面への描画機能を追加できませんか?
>これがやりたくて、前回のサンプルプログラムを作ったという側面もあったりします。

なんか、そういう感じがしてました(^^)
ということで、FKeyMenu()をテキスト画面にも描画できるように拡張してみました。


アドイン版 C.Basic ver.0.99o テスト版 その9.9o(リフレッシュコントロール設定可能+α2版)
http://pm.matrix.jp/CB/CBASIC099o.zip
・ファンクションメニュー描画コマンドFkeyMenu(をテキスト画面にも使えるようにしました。
 描画オプションの項目でTを指定すればテキスト画面描画となります。
(例)FkeyMenu(1,"ABC",T)
 テキスト画面の一番左側のファンクションメニューエリアにABCが描画されます。
(例)FkeyMenu(6,"ABC",TR)
 テキスト画面の一番右側のファンクションメニューエリアにABCが反転モードで描画されます。
(例)FkeyMenu(6,"",TC)
 テキスト画面の一番右側のファンクションメニューエリアを消去します。

・行列ごとに確保時にインデックスベースを設定することが出来るようにしました。
 行列確保時に末尾に0をつけると0ベース、1を付けると1ベースとなるので、デフォルトのベース設定を変更すること無く個別設定が出来ます。
(例){128,64}→Mat A.P0
 0ベースの行列を確保します。インデックスの範囲は[0,0]-[127,63]
(例){128,64}→Mat A.P1
 1ベースの行列を確保します。インデックスの範囲は[1,1]-[128,64]

Ver.0.99o差し替えです(^^;

ファイルの読み込み、書き込みのファイル名部分が拡張子込で8文字を超えると正常に動作しないバグを修正しました(^^;

SAMPLE.DAT
というファイル名だと10文字になってNGに…。

Re: インデックスベースの個別設定+テキストFKeyMenu()

sentaro様

バージョンアップ、ありがとうございます。

取りあえず、LIFE074 でのTextコマンドの現象を確認の上、Setupかプログラム中で RefshCtrl 0 によりリフレッシュの問題が回避されることを確認致しました。

また、FKeyFincのテキスト画面対応もありがとうございます。


> >ところで、YOKOLITH95完成版ですが、今更ではありますがハマってます。
> >ハイスコアー 8947 までいきましたが、LEVEL10 になると殆ど追従不可能な速さで落ちてきます。なのでLEVEL9までの間にいかにポイントを稼ぐか...ですね(^^;
>
> YOKOLITH95は面白いですね。
> 毎度、動作チェックで起動したらついついハマってしまってデバッグになりません(^^;
> ハイスコアはLEVEL10になるまでにほぼ4段消しの連続でやっとこ15000点くらいまで行きましたがLEVEL10になった途端あっけなく終了です(^^;


わぉ、さすがですね。私は昔からゲームを殆どやらない上に、ド下手なので我が家のゲーマー達とたまにゲームをやっても話になりません。レーシングゲームをやるよりは実車でサーキット走ったり(下手ですがA級ライセンス持ってました、今は失効中ですが(^^;)、荒野を四駆で走り回る(e-Gadgetのプロフィールの写真はイギリスでLand Roberで泥んこ遊びをやった時のもの)とか、射撃ゲームよりは実際に射撃をしたり(アメリカ出張時のお楽しみ)...指先は不器用ではないと思うのですが、肌で感じられないのは苦手というか、どうもゲームとなるとダメです。


> それからスピードが上がったり積み上がってきた時に焦って間違えて[EXIT]キーに触ってしまって、Bye!…ってことが(^^;

それ、たくさん経験しています(^^;



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

{2,2}→Dim Mat A
{5,5}→Dim Mat B
Fill(2,Mat A)
Fill(5,Mat B)
Mat B→MatA

を純正で実行すると、Mat A が 5x5行列に拡張され全ての要素が 5 になります。

一方、C.Basic では、前のバージョンではエラーになったのですが、今回の最新バージョンではエラーになりません。

これは、意図的に修正されたのでしょうか?それとも何か設定によるものなのでしょうか?
エラーにならないのは純正との互換ということで、問題無いと思うのですが、以前はエラーになっていたので、チョット質問です。

Re:Re: インデックスベースの個別設定+テキストFKeyMenu()

管理人様、こんにちは!

>わぉ、さすがですね。私は昔からゲームを殆どやらない上に、ド下手なので我が家のゲーマー達とたまにゲームをやっても話になりません。レーシングゲームをやるよりは実車でサーキット走ったり(下手ですがA級ライセンス持ってました、今は失効中ですが(^^;)、荒野を四駆で走り回る(e-Gadgetのプロフィールの写真はイギリスでLand Roberで泥んこ遊びをやった時のもの)とか、射撃ゲームよりは実際に射撃をしたり(アメリカ出張時のお楽しみ)...指先は不器用ではないと思うのですが、肌で感じられないのは苦手というか、どうもゲームとなるとダメです。

昔からビデオゲーム系はとりあえず一通りはやってましたがあまり得意とは言えないレベルだったです(^^;
管理人様はリアル派なのですね。
A級ライセンスでサーキットや本物射撃はちょっとすごすぎますね!(^^)


>一方、C.Basic では、前のバージョンではエラーになったのですが、今回の最新バージョンではエラーになりません。

>これは、意図的に修正されたのでしょうか?それとも何か設定によるものなのでしょうか?
>エラーにならないのは純正との互換ということで、問題無いと思うのですが、以前はエラーになっていたので、チョット質問です。

行列は出来る限り互換という感じで完全互換ではないのでちょこちょこ互換性のない部分がありますね(^^;

現在のC.Basicでは
Mat B→Mat A
の部分でも互換が無くなっているわけなのですが、
この例ではMat Aの方がインデックスサイズが小さいのでMat Bからコピーする時に以前のバージョンではエラーになっていました(^^;
今のバージョンではそこのところをコピーできる範囲だけのコピー出来るようにしたのでエラーは出なくなりましたが、行列の拡張をしないので完全互換ではないです(^^;
これは行列の開放と確保を繰り返すとメモリ断片化が起きてしまうので、出来るだけ再確保しないようにしているためです。
ちなみに行列の確保を繰り返した場合は、再確保時のインデックスサイズが増えない限り前に確保されていた領域をを開放/再確保することなく再利用します。
ということで、この場合の対処としては予想される最大サイズの行列を最初に確保しておけばいいだけなので…、
そういう仕様になっています(^^;

No title

管理人様、sentaro様

YOKOLITHプレイして頂きありがとうございます。レベル10は・・・実はこれでも簡単にしてあるんですよぉ(小声)。レベル10の調整前21000点前後→95最終版26000点前後までいけるようにしました(笑)。

※アクションゲームは苦手でも、実はテトリスだけは得意だったりします(スーパーマリオで1面をノーミスで一度もクリアした記憶が無い)

で、最近触り直してみて、キーリピート制御辺りが気に食わないので、その調整を絡めて、ついでにレベル9と10の差を減らそうと思います。また、EXITですが、開発当初は特に自分は遭遇したことは無かったのですが、最近触り直したらやられました(笑)。

やっぱり、自分以外の第三者の意見はありがたいですね!

KEYWAITをGetkey3に置き換えたり、描画を見なおしたり、キー制御を変えたり結構変えているので、名称もYOKOLITH99に変更しようと思います。

アドイン版 C.Basic ver.0.99p テスト版 その9.9p(パスワード対応版)

管理人様、ガノー様、こんにちは!

>YOKOLITHプレイして頂きありがとうございます。レベル10は・・・実はこれでも簡単にしてあるんですよぉ(小声)。レベル10の調整前21000点前後→95最終版26000点前後までいけるようにしました(笑)。

な、なんと!最高26000点まで!!
今のところ平均12000点くらいで、ピースの運が良ければ15000点超えというところなので、20000点を超えるにはレベル10をなんとか乗り越えないとですね(^^;


>で、最近触り直してみて、キーリピート制御辺りが気に食わないので、その調整を絡めて、ついでにレベル9と10の差を減らそうと思います。また、EXITですが、開発当初は特に自分は遭遇したことは無かったのですが、最近触り直したらやられました(笑)。

レベル10がレベル9に近づく方向になってくれるとありがたいです(^^;

[EXIT]はカーソルキーの横で[sin]の上なので微妙な位置にありますね(^^;



それでは、oの次はpということで…
現状あまり意味が無い機能といえますが、純正同様のパスワード機能に対応しました。
純正互換ファイルが扱えるので一応です…(^^;
あと、隠しメモリを使わない場合のシステムエラーがなるべく出ないように対策してみたのですが、どうでしょうか?


アドイン版 C.Basic ver.0.99p テスト版 その9.9p(パスワード対応版)
http://pm.matrix.jp/CB/CBASIC099p.zip
・純正CasioBasic互換仕様のパスワードに対応しました。
 新規ファイル名の入力時に[F1]でパスワード入力できます。
 ファイルリストモードで[SHIFT]+[F4]でパスワードの設定/解除が出来ます。
 パスワードの設定されたファイルは、実行時は何も影響ありませんが、
 編集時およびデバッグ時はパスワード入力が必要となります。

Re: アドイン版 C.Basic ver.0.99p テスト版 その9.9p(パスワード対応版)

sentaro様

0.99pへのバージョンアップ、ありがあとうございます。

昨日から出張に出かけていて、この1週間はおそらく電卓でプログラミングをする機会がなさそうです。



> 現状あまり意味が無い機能といえますが、純正同様のパスワード機能に対応しました。
> 純正互換ファイルが扱えるので一応です…(^^;

互換性確保が確実にまた一歩進みましたね!



> あと、隠しメモリを使わない場合のシステムエラーがなるべく出ないように対策してみたのですが、どうでしょうか?

以前頻発していたエラーですが、Use Hidn RAM を off にして、文法エラーが発生するプログラムファイルの保存やリネームで、今のところシステムエラーが発生していません。確実に改善しているようです。

もう少し触ってみてからまた報告致しますね。


Re:Re: アドイン版 C.Basic ver.0.99p テスト版 その9.9p(パスワード対応版)

管理人様、出張おつかれさまです!

>互換性確保が確実にまた一歩進みましたね!

パスワードはg1mをバイナリエディタで開けば一目瞭然なので簡単なパスワードロジックですけど、g1mファイルの互換性の観点からはやはり外せませんね。
ちなみにfx-9860GIIでは純正でもパスワードの後からの設定や解除が出来ないので、そこのあたりの仕様はCG10/20互換となっています(^^)


>以前頻発していたエラーですが、Use Hidn RAM を off にして、文法エラーが発生するプログラムファイルの保存やリネームで、今のところシステムエラーが発生していません。確実に改善しているようです。

まだはっきりとした原因が分からないので根本的な対策ではないのですが、(^^;
システムエラーになる原因のメモリの確保/解放を出来るだけ減らすような対策をしてみました。

管理人様のところでもシステムエラーが発生しなくなったとのことなので、まずは一安心です(^^)


>もう少し触ってみてからまた報告致しますね。

よろしくお願いいたします(^^)

Re: Re:Re: アドイン版 C.Basic ver.0.99p テスト版 その9.9p(パスワード対応版)

sentaro様

> ちなみにfx-9860GIIでは純正でもパスワードの後からの設定や解除が出来ないので、そこのあたりの仕様はCG10/20互換となっています(^^)

fx-CG10/20互換ということなのですね。


> システムエラーになる原因のメモリの確保/解放を出来るだけ減らすような対策をしてみました。

ひょっとして、OSか純正アドインが、何かお行儀の悪いことをして、本来使うべきでないメモリ領域にアクセスしているということが有るというような可能性が考えられるのでしょうか?

Re:Re: Re:Re: アドイン版 C.Basic ver.0.99p テスト版 その9.9p(パスワード対応版)

管理人様、こんにちは!

>fx-CG10/20互換ということなのですね。

はい!
以前からパスワード機能は使わないので何も気にしてなかったのですが、後で設定/解除が出来るようになっていたのはCG10/20からでした(^^;

fx-9860GIIの場合は、新規入力時にパスワードを設定してしまったらデバッグや編集する都度パスワード入力が求められるようになってしまうので、これが自在に解除できないとなるとイマイチですよね。
このあたりはバージョンアップで修正されてもいい部分だと思うのですが、これもCG10/20との差別化の一貫ということなのでしょう(^^;


>ひょっとして、OSか純正アドインが、何かお行儀の悪いことをして、本来使うべきでないメモリ領域にアクセスしているということが有るというような可能性が考えられるのでしょうか?

システムエラーは以前からちょこちょこ出ていたので、たぶんC.basicのどこかでエラーが起きているのは間違いないです。
SDKのステップ実行でエラーになるまで追いかけてみるとメモリ解放がバグってるような動作をするので、はっきりした原因が未だに掴みきれていません(^^;
ですので、とりあえずはメモリ解放が怪しいということで、メモリ解放を出来るだけ避けるようにしてみたのが最新バージョンとなっています。

Re: Re:Re: Re:Re: アドイン版 C.Basic ver.0.99p テスト版 その9.9p(パスワード対応版)

sentaro様

> fx-9860GIIの場合は、新規入力時にパスワードを設定してしまったらデバッグや編集する都度パスワード入力が求められるようになってしまうので、これが自在に解除できないとなるとイマイチですよね。
> このあたりはバージョンアップで修正されてもいい部分だと思うのですが、これもCG10/20との差別化の一貫ということなのでしょう(^^;

自分のソースにプロテクトかけることが全く無いので、これについては私は知りませんでした。
シェアウェアや有償プログラムとして配布する際にプロテクトかける可能性はありますが、今のところそんなプログラムを作っていないので...

話は脱線しますが、以前PCソフトでプロテクトかけてシェアウェアを公開していたことがあります。warez とかなんとかいうサイトで、パッケージソフトや有名シェアウェアのパスワードをクラックして公開しているところがあって、そこに私のシェアウェアのパスワードもクラックされ公開されていました。妙なことに有名ソフトに入れてもらってありがとう!って思って全然腹が立ちませんでした。

一方で、fx-9860GII のCasio Basicプログラムにプロテクトかける意味は殆どないかも知れないので、fx-CG20/10で仕様変更したのは正しい判断だと思います。


> システムエラーは以前からちょこちょこ出ていたので、たぶんC.basicのどこかでエラーが起きているのは間違いないです。
> SDKのステップ実行でエラーになるまで追いかけてみるとメモリ解放がバグってるような動作をするので、はっきりした原因が未だに掴みきれていません(^^;
> ですので、とりあえずはメモリ解放が怪しいということで、メモリ解放を出来るだけ避けるようにしてみたのが最新バージョンとなっています。

そうですか、厄介そうですが、そのうち解決するまで楽しみにお待ち申し上げます。


話は変わりますが、個人的には、fx-9860GII のコンパイラ版よりも、fx-CG20/10 のインタプリタ版が先に登場して欲しいと思っています。

ところで、来週チョット無茶ぶりの仕事が入っているので、しばらく沈んでいると思います。

Re:Re: Re:Re: Re:Re: アドイン版 C.Basic ver.0.99p テスト版 その9.9p(パスワード対応版)

管理人様、こんにちは!

>自分のソースにプロテクトかけることが全く無いので、これについては私は知りませんでした。

見られると困るようなデータが含まれている場合とか、盗まれると困るような斬新なアルゴリズム採用のプログラムだったりとか、ゲームだと他の人に遊んでもらう場合にプログラムを勝手に改造されないようにプロテクトする意味もあるでしょうけど、個人レベルで使う限りはプロテクトはほとんど必要無いですよね(^^;


>話は脱線しますが、以前PCソフトでプロテクトかけてシェアウェアを公開していたことがあります。warez とかなんとかいうサイトで、パッケージソフトや有名シェアウェアのパスワードをクラックして公開しているところがあって、そこに私のシェアウェアのパスワードもクラックされ公開されていました。妙なことに有名ソフトに入れてもらってありがとう!って思って全然腹が立ちませんでした。

パスワード外して使いたいくらい値打ちがあるソフトに仲間入りということすよね(^^)


>そうですか、厄介そうですが、そのうち解決するまで楽しみにお待ち申し上げます。

見当違いのバグ探しをしている可能性もあるので、とりあえず完全解決は後回しになっているのですが、バージョンアップのついでに何かの拍子にバグが見つかる可能性にかけてます(^^;


>話は変わりますが、個人的には、fx-9860GII のコンパイラ版よりも、fx-CG20/10 のインタプリタ版が先に登場して欲しいと思っています。

コンパイラはまだ実験中の域を出てないですし、SDKがあっても敷居がかなり上がるので、間違いなく、fx-CG20/10のインタプリタ版が先になると思います。
fx-CG20/10にはSDKがないのでデバッグ作業が実機での検証頼みで想像以上に大変というか手間なのですが、なんとか早々に動く版を仕上げたいと思っています(^^)


>ところで、来週チョット無茶ぶりの仕事が入っているので、しばらく沈んでいると思います。

おつかれさまです!
私の方もちょこちょこバタバタしている状況ではありますが、
fx-CG20/10版の作業を重点的にスピードアップしていきますね(^^)

アドイン版 C.Basic ver.0.99q テスト版 その9.9q(3桁区切り+メモリ操作対応版)

管理人様、ガノー様、こんにちは!

CG20版は相変わらず進歩状況が遅れ気味ですけど(汗)移植の傍らいくつかのバグが見つかったので修正です(^^;
負数で正常に動かなかったEngモードのバグはお恥ずかしい限りですけど、修正ついでに3桁区切りを仕込んでみました。
ENGの拡張仕様となっていますのでセットアップで設定できます。
3桁区切り表示は区切り文字でまるまる1キャラ分使ってしまうのでJP900に比較すると若干間延びした表示になっています(^^;

それからCasioBasic仕様で文字列化するStr()コマンドを追加しました。

あと、実用性は微妙なところですが、コンパイラ等への実験も兼ねてマシン語関連コマンドを実装してみました。
これでちょっと危ない言語と化してしまいますが、コマンド化されていないシステムコールがC.Basicで利用できることになります。
それに関連してC言語仕様のアドレス演算子&と間接演算子*を追加したので、行列の文字列化の&とかぶってしまいますので、文字列化は$だけとして区別した方がよいかもしれませんが今のところは文字列&も従来仕様のままです。


CG20版の開発は新しいOS2.02に対応したエミュレータの90日体験版が使えるようになったので少しは便利になりそうです。
https://www.cemetech.net/forum/viewtopic.php?t=12855

例のシステムエラーはCG移植のためにソースを見直しているうちに原因らしきものが見つかったのでおそらく解消できたのではと思ってますが、まだ油断は出来ません(^^;



アドイン版 C.Basic ver.0.99q テスト版 その9.9q(3桁区切り+メモリ操作対応版)
http://pm.matrix.jp/CB/CBASIC099q.zip

・ENGモードで負数の場合、動作しなかったのを修正しました。
・ENGモードの拡張で3桁区切り表示に対応しました。
 セットアップで[F4](Eng)を押すと、ENGオフ、ENGオン(/E)、3桁区切り(/3)と切り替わります。
 コマンドで3桁区切りを指定するには、EngOn直後に数字の3を付けて、
 EngOn3
 以後3桁区切り出力になります。
 その時のENGの返す値は3になります。(ENGオフ:0 ENGオン:1 3桁区切り:3)

・数値をC.Basic書式で文字列化するStr()コマンドを追加しました。
 Sprintf()コマンドはC言語仕様での書式出力となりますが、Str()ではC.Basic設定(Fix,Sci,Norm,ENG等)によって出力書式が決定されます。
(例)Str(-123.4567)→Str 1
-123.4567を文字列化"-123.4567"して文字列変数Str 1に代入します。

・変数リスト表示で16進数表示に対応しました。
 整数変数はそのまま16進数表示になりますが、実数変数はその値が整数32ビット範囲に収まる場合のみ16進数表示にできます。


・マシン語を直接扱うためのコマンドとしてPeek(、Poke(、Call、SysCall、
 変数とソースアドレスを返すVarPtr(、ProgPtr(コマンド、
 C言語同様のアドレス演算子&、間接演算子*をサポートしました。

(例)Peek(0x8802E000).B→A%
(例)*(0x8802E000).B→A%
 0x8802E000番地の内容をバイト(1バイト)で読み出し、整数変数A%に代入します。
(例)Peek(0x8802E000).W→A%
 0x8802E000番地の内容をワード(2バイト)で読み出し、整数変数A%に代入します。
(例)Peek(0x8802E000).L→A%
 0x8802E000番地の内容をロングワード(4バイト)で読み出し、整数変数A%に代入します。
(例)Peek(0x8802E000).F→A
 0x8802E000番地の内容を倍精度実数(8バイト)で読み出し、変数Aに代入します。

(例)Poke(0x8802E000).B,A%
(例)A%→Poke(0x8802E000).B
(例)A%→*(0x8802E000).B
 整数変数A%の値を、0x8802E000番地にバイト(1バイト)書き込みします。
(例)Poke(0x8802E000).W,A%
 整数変数A%の値を、0x8802E000番地にワード(2バイト)書き込みします。
(例)Poke(0x8802E000).L,A%
 整数変数A%の値を、0x8802E000番地にロングワード(4バイト)書き込みします。
(例)Poke(0x8802E000).F,A
 実数変数Aの値を、0x8802E000番地に倍精度実数(8バイト)書き込みします。

(例)Call 0x8802F000,A,B,C,D
 A→R4レジスタ、A→R5レジスタ、A→R6レジスタ、A→R7レジスタ、0x8802F000番地にあるマシン語プログラムを呼び出します。

(例)SysCall 0x30,A,B,C,D
 A→R4レジスタ、A→R5レジスタ、A→R6レジスタ、A→R7レジスタ、システムコール0x30を呼び出します。
 システムコール0x30はSDKのBdisp_DrawLineVRAMと同じです。画面にラインを描きます。

(例)VarPtr(A%)
(例)&A%
 整数変数A%の変数のアドレスが返ります。
(例)VarPtr(Mat A)
(例)&Mat A
 行列Aの先頭アドレスが返ります。
(例)VarPtr(Mat A[20,10])
 行列A[20,10]の値が格納されているアドレスが返ります。

(例)Poke VarPtr(A%),B%
(例)*(&B%)→*(&A%)
 B%→A%と同じです。

(例)ProgPtr()
 現在のプログラムが格納されているアドレスを返します。

Re: アドイン版 C.Basic ver.0.99q テスト版 その9.9q(3桁区切り+メモリ操作対応版)

sentaro様

遅くなってすみません。

着々と開発を進めて頂いて、本当にありがとうございます。


> CG20版は相変わらず進歩状況が遅れ気味ですけど(汗)移植の傍らいくつかのバグが見つかったので修正です(^^;

根本的な部分を触ると、意外なバグが見つかるものですね(^^;


> 負数で正常に動かなかったEngモードのバグはお恥ずかしい限りですけど、修正ついでに3桁区切りを仕込んでみました。
> ENGの拡張仕様となっていますのでセットアップで設定できます。
> 3桁区切り表示は区切り文字でまるまる1キャラ分使ってしまうのでJP900に比較すると若干間延びした表示になっています(^^;

この機能を早速使わせて頂こうと思います。

Casio Basic入門で、久々に fx-5800P 用プログラムのネタを書こうと思っています。
最近の低金利(マイナス金利)のおかげで、高額な買い物のローンやローンの借り換えを検討している人が身の回りに結構いて、その一人が fx-5800P を持っているので、複利計算のプログラムを作って差し上げました。
元金、金利、返済年数から、返済総額や月々の返済額をパッパと表示するプログラムで、条件を変えた時に見やすいようにしたので、好評です。

そこで、そのプログラムをネタにしようと思っています。

さらに、C.Basic で3桁区切り機能を付加してみようと思っています。Casio Basic入門で、C.Basicを導入できないかと、考え中です。


> それからCasioBasic仕様で文字列化するStr()コマンドを追加しました。

これは、Str コマンドとは別に Str( ) ということですね!



> あと、実用性は微妙なところですが、コンパイラ等への実験も兼ねてマシン語関連コマンドを実装してみました。
> これでちょっと危ない言語と化してしまいますが、コマンド化されていないシステムコールがC.Basicで利用できることになります。

N88 Basic でバリバリプログラムを作っていた人には朗報かも知れませんね。

個人的には、サブルーチン呼び出しを 配列を使ってインデックスで指定できると面白いと思います。


> それに関連してC言語仕様のアドレス演算子&と間接演算子*を追加したので、行列の文字列化の&とかぶってしまいますので、文字列化は$だけとして区別した方がよいかもしれませんが今のところは文字列&も従来仕様のままです。

文字列指定の $ と & が両立するのであれば良いのですが、そうでない場合は、早めに文字列指定の & を廃止するのが良いかも知れませんね。

今回のバージョンアップの新機能を全部触れていませんが、取り急ぎお礼とともに、コメントさせて頂きます。

Re:Re: アドイン版 C.Basic ver.0.99q テスト版 その9.9q(3桁区切り+メモリ操作対応版)

管理人様、こんにちは!

>根本的な部分を触ると、意外なバグが見つかるものですね(^^;

はい、同じ箇所で堂々巡りしていたようで、全体的に見直さないと気が付きにくいこともありますね(^^;


>この機能を早速使わせて頂こうと思います。

バグが潜んでる可能性もありますので例によって厳しいチェックお願いします(^^;


>Casio Basic入門で、久々に fx-5800P 用プログラムのネタを書こうと思っています。
>最近の低金利(マイナス金利)のおかげで、高額な買い物のローンやローンの借り換えを検討している人が身の回りに結構いて、その一人が fx-5800P を持っているので、複利計算のプログラムを作って差し上げました。
>元金、金利、返済年数から、返済総額や月々の返済額をパッパと表示するプログラムで、条件を変えた時に見やすいようにしたので、好評です。
>そこで、そのプログラムをネタにしようと思っています。

fx-5800Pを最大限に活かした管理人様のプログラムがポイントですね(^^)


>さらに、C.Basic で3桁区切り機能を付加してみようと思っています。Casio Basic入門で、C.Basicを導入できないかと、考え中です。

C.Basicが実用領域で守備範囲が広がるとしたら嬉しいです(^^)
3桁区切りに関してはC.Basicでは3桁区切りはサクッと文字列処理で済ましてるのですが、Locateコマンドがあればfx-5800Pでも力技で3桁区切り表示は実現可能だと思われるので、CasioBasicの出力サブルーチンとしても面白い題材になるかもですね。


>これは、Str コマンドとは別に Str( ) ということですね!

はい、昔のBasicで言うところの数値を文字列化するSTR$()なのですが、これは本来は純正CasioBasicで標準装備されてるべき関数のはずですが、Exp>Str()関数がSTR$()と違うと知ってがっかりした人が少なからずいたと思われます(^^;


>N88 Basic でバリバリプログラムを作っていた人には朗報かも知れませんね。

コンパイラ前提CPUのSH3/4でオリジナルのマシン語サブルーチンを作成するのはかなり骨が折れそうですけど、OS内蔵システムコールが使えるようになったことで、Cで作るアドイン並の自由度が確保できると思われます(^^)


>個人的には、サブルーチン呼び出しを 配列を使ってインデックスで指定できると面白いと思います。

配列の参照渡しですよね?
アドレス演算子&と間接演算子*でポインタ渡しが出来るようになった今、どう実装するかしばし悩み中です(^^;


>文字列指定の $ と & が両立するのであれば良いのですが、そうでない場合は、早めに文字列指定の & を廃止するのが良いかも知れませんね。

そうですね。
現状ではコマンドや文字列が必要な箇所に&がある場合は文字列指定となり、数式内であればアドレス演算子となる仕様ですが、&を使う場所で違う機能になるのはかなりややこしいので、今後は文字列指定は$だけということにしたいと思います(^^)

Re: Re:Re: アドイン版 C.Basic ver.0.99q テスト版 その9.9q(3桁区切り+メモリ操作対応版)

sentaro様

Ver 0.99q に同梱されている Manual_J.txt を久しぶりに拝見すると、ほぼ完成されたマニュアルであることに、今更ながら気がつきました。

そこで、アドインCasio Basic のトップページを修正して、C.Basic の使い方については、このマニュアルを殺傷するように変更し、併せて Readme_J.txt も参照してみあるようにしました。

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


併せて、英語版コマンドリファレンスのトップページに、新たに追加されたコマンドを、先ずは項目だけ追加しました。

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


こうしてみると、C.Basic を海外へ紹介するには、先ずは Manual_J.txt を英訳するのが先で、その翻訳を優先させるように考えを変えました。次の優先度は Inside Basic の英語版にします。


Re:Re: Re:Re: アドイン版 C.Basic ver.0.99q テスト版 その9.9q(3桁区切り+メモリ操作対応版)

管理人様、こんにちは!

>Ver 0.99q に同梱されている Manual_J.txt を久しぶりに拝見すると、ほぼ完成されたマニュアルであることに、今更ながら気がつきました。

恐縮です。
細かな部分ではまだまだ手直し必要だと思いますけど、初期版からするとそこそこマニュアルらしく?なってきたのでしょうか(^^;


>こうしてみると、C.Basic を海外へ紹介するには、先ずは Manual_J.txt を英訳するのが先で、その翻訳を優先させるように考えを変えました。次の優先度は Inside Basic の英語版にします。

毎度お手数おかけします。m(_ _)m



Ver 0.99qですが、案の定、バグというか、Exp()コマンドがエンバグしていたのが見つかりましたので差し替えです(^^;
修正ついでに、行列の文字列化は$だけとしました。
あと、SysCallとCallコマンドは関数コマンド化しました。

アドイン版 C.Basic ver.0.99q テスト版 その9.9q(3桁区切り+メモリ操作対応版)
http://pm.matrix.jp/CB/CBASIC099q.zip

・アドレス演算子&の追加により、Mat行列の文字列化は$のみに変更しました。

・SysCallとCallコマンドをSysCall(),Call()のように関数コマンドとしました。
(書式)SysCall( システムコール番号, [引数1,][引数2,][引数3,][引数4] )
(例)SysCall( 0x763,A,B,C,D )→R
 A→R4レジスタ、A→R5レジスタ、A→R6レジスタ、A→R7レジスタ、システムコール0x30を呼び出し返り値がRに入ります。
 システムコール0x30はSDKのBdisp_DrawLineVRAMと同じです。

(書式)Call(マシン語アドレス, [引数1,][引数2,][引数3,][引数4] )
(例)Call( 0x8802F000,A,B,C,D )→R
 A→R4レジスタ、A→R5レジスタ、A→R6レジスタ、A→R7レジスタ、0x8802F000番地にあるマシン語プログラムを呼び出し返り値がRに入ります。

Re: Re:Re: Re:Re: アドイン版 C.Basic ver.0.99q テスト版 その9.9q(3桁区切り+メモリ操作対応版)

sentaro様

Readme_J.txt で記述のバグらしきものが見つかりました。

初期設定画面の起動は、[SHIFT][MENU] だと思いますが、[SHIFT][VARS] と記述されています。

ご確認ください。



> Ver 0.99qですが、案の定、バグというか、Exp()コマンドがエンバグしていたのが見つかりましたので差し替えです(^^;
> 修正ついでに、行列の文字列化は$だけとしました。
> あと、SysCallとCallコマンドは関数コマンド化しました。

了解しました。C.Basic Command Reference (英文)の項目を変更しておきました。


Re:Re: Re:Re: Re:Re: アドイン版 C.Basic ver.0.99q テスト版 その9.9q(3桁区切り+メモリ操作対応版)

管理人様、こんにちは!

>Readme_J.txt で記述のバグらしきものが見つかりました。
>初期設定画面の起動は、[SHIFT][MENU] だと思いますが、[SHIFT][VARS] と記述されています。
>ご確認ください。

確認しました。

ってことで、Readme_J.txtを修正、Ver 0.99q差し替えしておきました(^^;

Re: Re:Re: Re:Re: Re:Re: アドイン版 C.Basic ver.0.99q テスト版 その9.9q(3桁区切り+メモリ操作対応版)

sentaro様


> >初期設定画面の起動は、[SHIFT][MENU] だと思いますが、[SHIFT][VARS] と記述されています。
> >ご確認ください。
>
> 確認しました。
>
> ってことで、Readme_J.txtを修正、Ver 0.99q差し替えしておきました(^^;

早々に、ありがとうございます。


3桁区切り機能を、fx-5800P 向けに作ってみました。
これを fx-9860GII に移植する際、高速化しようとトライしていますが、純正Casio Basicにあるコマンド、そして実行速度(29MHzにおいて)の制限のため、あまり高速化が出来ずにいます。

高速化のポイントは、Locate コマンドを使う回数をどれだけ減らすかになる筈ですが、仮に Locate を1回のみ使う場合は、文字列処理でが必要になりますが、数値から文字列に変換するコマンドが純正に無いことから、あまり効果的な高速化ができそうにないですね。

同じプログラムを C.Basic で動作(@29MHz)で走らせると劇的に高速化しますね。C.Basic の良さが際立ちます。

さらに、数値から文字列に変換するコマンド+3桁表示機能 を使ってみようと思っています。高速化への寄与はあるでしょうが(既に十分速い)、それに加えてコードの簡潔化が大きなポイントになると思います。これから作ってみます。

C.Basicをゲームやグラフィックスプログラミングだけでなくて、実用プログラムにも大きく役立つ良い事例になりそうです。





3桁区切りについて

sentaro様

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

この Casio Basic入門51 のエントリーでは、複利計算プログラムを紹介しています。

これを3桁区切りで表示させるために、サブルーチンを使って fx-5800P で実装、続いて fx-9860GII の純正Casio Basicに同じサブルーチンを使って移植しました。これらは後日 Casio Basic入門52 の記事にする予定です。

fx-5800P では、3桁区切りの表示が、上の桁から下の桁まで、パラパラと表示されるのが目で見えます。fx-9860GII の純正Casio Basic でもノーマルクロックでは 表示が多少速くなってはいますが、依然として表示がパラパラとなります。

これをそのまま C.Basicで実行すると、ノーマルクロックでもかなり高速化され、1息つくくらいでパッと表示されます。


さて、EngOn3 による3桁区切りを利用するために、上のエントリーで紹介したソースを fx-9860GII に移植し、サブルーチンを使わずに EngOn3 のみで実装してみました。

http://egadget2.web.fc2.com/archives/fx-9860GII/CompInt3.html


'File name COMPINT3

Locate 1,1,"=Compound Interest="
Locate 1,2,"1_(-)_Cap:"
Locate 1,3,"2_(-)_Rat:"
Locate 12,3,"3_(-)_Yrs:"
Locate 1,5,"Total"
Locate 1,6,"Month"

0->B:0->R:0->N:0->T:0->M

Do

EngOn3
Locate 15,7,"<EXIT>"

0->K:Do
Getkey->K
LpWhile K=0

If K=72:Then
7->X:2->Y:9->D:2->E
Prog "INP":Z->B
'_Locate _X,Y,B
Else If K=62:Then
7->X:3->Y:4->D:2->E
Prog "INP":Z->R
Else If K=52:Then
18->X:3->Y:3->D:2->E
Prog "INP":Z->N
IfEnd:IfEnd:IfEnd

Locate 7,2,B
If BRN:Then
Int (B(1+R/100)^N)->T

Locate 7,5," "
Locate 7,5,T
Int (T/N/12)->M
Locate 7,6," "
Locate 7,6,M
IfEnd
EngOff

LpWhile K<>47
ClrText
Locate 9,4,"Bye!"

外側のDoループで、Do の直後で EngOn3 とし、LpWhile の直前で EngOff としています。

最初、22行目に、コメントアウトしてある Locate X,Y,B を置いたのですが、出力が3桁区切りになりません。

そこで、31行目に Locate 7,2,B を置くと出力が無事3桁区切りになりました。

なお、36行目と39行目の Locate では問題無く3桁区切りになります。

22行目の Locate コマンドが3桁区切りにならない理由について、使い方に問題がありますでしょうか?

Re: 3桁区切りについて

管理人様、こんにちは!

http://egadget.blog.fc2.com/blog-entry-553.html
>この Casio Basic入門51 のエントリーでは、複利計算プログラムを紹介しています。
>これを3桁区切りで表示させるために、サブルーチンを使って fx-5800P で実装、続いて fx-9860GII の純正Casio Basicに同じサブルーチンを使って移植しました。これらは後日 Casio Basic入門52 の記事にする予定です。
>fx-5800P では、3桁区切りの表示が、上の桁から下の桁まで、パラパラと表示されるのが目で見えます。fx-9860GII の純正Casio Basic でもノーマルクロックでは 表示が多少速くなってはいますが、依然として表示がパラパラとなります。
>これをそのまま C.Basicで実行すると、ノーマルクロックでもかなり高速化され、1息つくくらいでパッと表示されます。

fx-5800Pで一桁一桁の処理になるとさすがに少々荷が重いですよね(^^;
fx-9860GIIでも表示が絡むとさほど速くならないですから、C.Basicでも文字列処理を使わないと劇的な改善とはいかない感じでしょうか(^^;


>さて、EngOn3 による3桁区切りを利用するために、上のエントリーで紹介したソースを fx-9860GII に移植し、サブルーチンを使わずに EngOn3 のみで実装してみました。
http://egadget2.web.fc2.com/archives/fx-9860GII/CompInt3.html

早速、ダウンロードさせていただきました。
複利計算プログラム、入力ボックスが便利で使い勝手がよいですね(^^)


>最初、22行目に、コメントアウトしてある Locate X,Y,B を置いたのですが、出力が3桁区切りになりません。
>そこで、31行目に Locate 7,2,B を置くと出力が無事3桁区切りになりました。

あり?(^^;


>22行目の Locate コマンドが3桁区切りにならない理由について、使い方に問題がありますでしょうか?

ソースを見ても特に問題は無さそうなのですが…
と思って、サブルーチン"INP"を見るとその先頭で
EngOff
があるので、ここで3桁区切り表示がクリアされているのが原因のようです(^^;

31行目のLocate 7,2,Bで問題ないのは、サブルーチン"INP"が呼ばれないループの時に3桁区切り有効のままでLocate 7,2,Bが実行されたからというところですね。

Re: Re: 3桁区切りについて

sentaro様

> 31行目のLocate 7,2,Bで問題ないのは、サブルーチン"INP"が呼ばれないループの時に3桁区切り有効のままでLocate 7,2,Bが実行されたからというところですね。

ありがとうございます。

そして、大変失礼しました。Engのバグ修正が続いていたので、ろくに調べずにおりました。

おっしゃるとおりです(^^;


INP の最初での EngOff は必須なので、複利計算プログラム側で、Locate を使う時に

EngOn3:Locate ...

とすべきですね。

お恥ずかしい限りです...

Re:Re: Re: 3桁区切りについて

管理人様、こんにちは!

今週はバタバタ続きでほとんど更新が出来ない状況でしたが、
デバッグモードにてバグが見つかりましたので差し替え修正です(^^;

アドイン版 C.Basic ver.0.99q テスト版 その9.9q(3桁区切り+メモリ操作対応版)
http://pm.matrix.jp/CB/CBASIC099q.zip

・デバッグモードにおいてプログラムの再開、トレース実行する場合に画面が復帰しないことがあった不具合を修正しました。



3桁区切りのサブルーチンですが、出来るだけ軽くする方向で3桁ずつまとめて処理するようにした左詰め3桁区切り表示サブルーチンです。
(負数も小数点も考慮してない正の整数だけバージョンです。)
--------------------------------------
入力数値->N
X座標->X
Y座標->Y

ワーク変数 A:下3桁
ワーク変数 B:中3桁
ワーク変数 C:上3桁
ワーク変数 D:最上位1桁
ワーク変数 K:数値の桁数
ワーク変数 I:三桁区切り文字の数
--------------------------------------
Int (log N)+1->K
(K>=4)+(K>=7)+(K>=10)->I
Frac (N/1Exp3)*1Exp3->A
Int (Frac (N/1Exp6)*1Exp3)->B
Int (Frac (N/1Exp9)*1Exp3)->C
Int (N/1Exp9)->D

If K<=8:Then
Locate X,Y,1Exp8*C+1Exp4*B+A
I>=1=>Locate X+K-2-(I=1),Y,","
I>=2=>Locate X+K-6,Y,","
Else
Locate X+3+2*(I>=3),Y,1Exp7+1Exp4*B+A
Locate X+0,Y,D*1Exp4+C
Locate X+K-2+(I>=3),Y,","
Locate X+K-6+(I>=3),Y,","
I>=3=>Locate X+1,Y,","
IfEnd
--------------------------------------

数値を表示してから区切り文字を上書きするので処理過程が見えてしまうことが難点ですが、fx5800Pでもなんとかいける感じでしょうか(^^?

Re: Re:Re: Re: 3桁区切りについて

sentaro様


> 今週はバタバタ続きでほとんど更新が出来ない状況でしたが、
> デバッグモードにてバグが見つかりましたので差し替え修正です(^^;

ありがとうございます。


> 3桁区切りのサブルーチンですが、出来るだけ軽くする方向で3桁ずつまとめて処理するようにした左詰め3桁区切り表示サブルーチンです。
> (負数も小数点も考慮してない正の整数だけバージョンです。)

> 数値を表示してから区切り文字を上書きするので処理過程が見えてしまうことが難点ですが、fx5800Pでもなんとかいける感じでしょうか(^^?

このロジックは考えつきませんでした。これだと Locate の使用回数を劇的に減らせるので理に適った高速化です。

とても面白いので、Casio Basic入門で、取り上げたいと思います。

これまた、ありがとうございます。



アドイン版 C.Basic ver.0.99r テスト版 その9.9r(隠しメモリ使用によるプログラムエリア拡大版)

管理人様、こんにちは!

ちょこっと更新が滞ってしまってすみません(^^;

Int関数がIntgになっていた致命的?バグが見つかったのと、一括ClrMatができなかったバグ修正と、
隠しRAMを使用する場合、プログラム+行列エリアで隠しRAM領域を使うように変更してみました。
プログラムエリアと行列エリアで丸々256KB使えるので今までに比べて8倍ほどに増えます。
その代わり、ファイルリストバッファは以前のようにヒープ領域で確保されるようになります。

それからストレージメモリの残量が分かるようにフリーエリアを常時表示するようにしてみました。



アドイン版 C.Basic ver.0.99r テスト版 その9.9r(隠しメモリ使用によるプログラムエリア拡大版)
http://pm.matrix.jp/CB/CBASIC099r.zip

・隠しRAMをプログラムとMat行列領域で使用するようにしました。
 プログラム領域、行列領域合計で256KBの割当になります。
 ファイルリストバッファはヒープ領域固定となります。

・ファイルリスト表示の上部にストレージメモリのフリーエリアとファイルリスト数を表示するようにしました。
 ストレージメモリはプログラムの保存、およびコピー、リネーム等で減っていきますので、残り少なくなったら最適化が必要になります。

・ClrMatで行列全部の消去が出来なかったのを修正しました。

・Int関数がIntg関数になっていたので、Intg関数を追加して、Int関数を修正しました。

Re: アドイン版 C.Basic ver.0.99r テスト版 その9.9r(隠しメモリ使用によるプログラムエリア拡大版)

sentaro様

更新ありがうございます。

> Int関数がIntgになっていた致命的?バグが見つかったのと、一括ClrMatができなかったバグ修正と、
> ・Int関数がIntg関数になっていたので、Intg関数を追加して、Int関数を修正しました。

チョット時間が取れないので(まだ仕事中だったりします)、安直に伺います。

Intg関数って、何でしたっけ?



> 隠しRAMを使用する場合、プログラム+行列エリアで隠しRAM領域を使うように変更してみました。
> プログラムエリアと行列エリアで丸々256KB使えるので今までに比べて8倍ほどに増えます。

これで、Out of Memoryになることが激減しそうですね!

例えば、多桁円周率計算で計算できる桁数が増えるということなのですよね?



> その代わり、ファイルリストバッファは以前のようにヒープ領域で確保されるようになります。
>  ファイルリストバッファはヒープ領域固定となります。
>  ストレージメモリはプログラムの保存、およびコピー、リネーム等で減っていきますので、残り少なくなったら最適化が必要になります。

このあたりは以前と変わらないと理解して良いでしょうか?


> ・隠しRAMをプログラムとMat行列領域で使用するようにしました。
>  プログラム領域、行列領域合計で256KBの割当になります。

行列をより多く使えるのは、プログラムの幅が広がってありがたいです。


> それからストレージメモリの残量が分かるようにフリーエリアを常時表示するようにしてみました。
> ・ファイルリスト表示の上部にストレージメモリのフリーエリアとファイルリスト数を表示するようにしました。

最適化のタイミングを知るにも有効そうですね。


Re:Re: アドイン版 C.Basic ver.0.99r テスト版 その9.9r(隠しメモリ使用によるプログラムエリア拡大版)

管理人様、こんにちは!

>Intg関数って、何でしたっけ?

これは最初に仕様をよく確認していなかったのがいけなかったのですが(^^;
Int関数は単純に数値の整数部分だけを取り出して整数化する関数、
Intg関数はC言語で言うところのfloor()関数で、その引数の値を超えない最大の整数を求める関数です。
正の数の場合は違いは無いのですが、負数の場合に違いが出てきます。

Int(-1.5)→ -1
Intg(-1.5)→ -2
floor(-1.5)→ -2

つまり、今まではInt関数をFloor()と同じと思って処理していたのでIntがIntgになっていたのですが、
負数を扱うことが無かったのでそのことに今まで気が付きませんでした(^^;


>これで、Out of Memoryになることが激減しそうですね!

はい!
プログラムソースと行列エリア合計で256KBなので、
サブプログラムてんこ盛りの大作プログラムでもOkになりますし、
大量の行列データを扱うことも可能になりました


>例えば、多桁円周率計算で計算できる桁数が増えるということなのですよね?

PICALC5で8000桁以上いけるようになります(^^)


>このあたりは以前と変わらないと理解して良いでしょうか?

はい、使い勝手の面では何も変わらないと思います。
ファイルリストバッファやプログラムエリア、行列エリアそれぞれで使用領域を固定化することで、
メモリ確保開放に伴う致命的なシステムエラーを根絶という狙いもあります。


>最適化のタイミングを知るにも有効そうですね。

リネームでもどんどん減っていくので知らず知らずのうちにフリーエリアが無くなっていて、
新規プログラム作成やプログラム編集で保存時エラーにならないようにという感じですね(^^;

ver.0.99r差し替えです(^^;

隠しメモリ使用時に行列が確保できなかった場合の処理に不具合があったのを修正しました。

アドイン版 C.Basic ver.0.99r テスト版 その9.9r(隠しメモリ使用によるプログラムエリア拡大版)
http://pm.matrix.jp/CB/CBASIC099r.zip

Re: ver.0.99r差し替えです(^^;

sentaro様

多桁円周率計算プログラムを試してみました。

PiCalc6A: http://egadget2.web.fc2.com/archives/PiCalc6A.html
PiDisp3: http://egadget2.web.fc2.com/archives/PiDisp3.html

PiCal5 でなくて、PiCalc6A + PiDisp3 なので事情が異なりますが、私の環境では以前は最大280桁だったので、77000桁いけますね。これは画期的ですね。


ところで、1万桁を指定してみると、"Not enoughMemory" とエラーが表示され、[EXIT] で抜け、再び実行すると

"Not enough Memory, Please Restart" とメッセージが現れます。

こうなると C.Basic上では何もできなくなるので、[MENU]でメニューを表示させ、何か他のアドインを実行させて、一旦C.Basicを解放してあげる必要があります。

これは、想定動作でしょうか?
C.Basicが自分自身で終了させるのができなさそうなので、回避が難しそうな感じですが...


...と、ここで ver0,99r 差し替え版を導入してみると、Restart を要求されることなく、[EXIT] で復帰すれば、問題無くプログラムを実行できるようになりました。

行列での隠しメモリ処理の修正をした結果のようですね。

ありがとうございます。

Re:Re: ver.0.99r差し替えです(^^;

管理人様、こんにちは!

>PiCal5 でなくて、PiCalc6A + PiDisp3 なので事情が異なりますが、私の環境では以前は最大280桁だったので、77000桁いけますね。これは画期的ですね。

どこまでいけるかやってみたところ9294桁までいけそうですが、
計算時間は2乗で増えるのでちょっとかかりそうです(^^;


>ところで、1万桁を指定してみると、"Not enoughMemory" とエラーが表示され、[EXIT] で抜け、再び実行すると
>"Not enough Memory, Please Restart" とメッセージが現れます。
>こうなると C.Basic上では何もできなくなるので、[MENU]でメニューを表示させ、何か他のアドインを実行させて、一旦C.Basicを解放してあげる必要があります。
>これは、想定動作でしょうか?

あ、すみません…(^^;
ずばり、そこのところを修正したのが差し替え版です(^^;


>C.Basicが自分自身で終了させるのができなさそうなので、回避が難しそうな感じですが...

"Not enough Memory, Please Restart" が出た場合はは回復不可能エラーなので、[MENU]に戻っての復帰作業が必須となってます。
これはC.Basic単独でのリスタートが今のところ出来ないので仕様ですね(^^;


>...と、ここで ver0,99r 差し替え版を導入してみると、Restart を要求されることなく、[EXIT] で復帰すれば、問題無くプログラムを実行できるようになりました。
>行列での隠しメモリ処理の修正をした結果のようですね。

はい、行列確保に失敗した場合にリスタート必須になるのはさすがに想定外なので修正しました(^^;

ちなみに隠しRAMの行列エリアは行列名指定無しのClrMat単独で初期化出来ます。
プログラムエリアはファイルリストに戻った時点ですべて開放、初期化されます。

ver.0.99rまたまた差し替えです(^^;

管理人様、こんにちは!

隠しRAM領域を積極的に使うように変更した現在のバージョンですが、
万が一、隠しRAM領域で足りなくなった場合にはヒープメモリからも確保できるように変更しました。
プログラムエリアと行列エリアのメモリ確保の順番は隠しRAM→ヒープメモリとなります。

アドイン版 C.Basic ver.0.99r テスト版 その9.9r(隠しメモリ使用によるプログラムエリア拡大版)
http://pm.matrix.jp/CB/CBASIC099r.zip


追記:2016-07-24(19:22)
致命的なエンバグしていたので修正、再々々差し替えしました(^^;

Re: ver.0.99rまたまた差し替えです(^^;

sentaro様

デバッグ、ありがとうございます。


> 万が一、隠しRAM領域で足りなくなった場合にはヒープメモリからも確保できるように変更しました。
> プログラムエリアと行列エリアのメモリ確保の順番は隠しRAM→ヒープメモリとなります。

余裕がでて良いですね。ビットマップをガンガン使うプログラムだと、有用だと思います。


お疲れ様

C.Basic WiKi 発見

ガノー様
sentaro様

ガノー様には Twitter message入れておきましたが、なんとC.Basic WiKiが立ち上がっているのを発見しました。

http://www65.atwiki.jp/garnot/pages/1.html

元ネタの当ブログがサボっているので、入り口だけになっていますが、なんだかうれしいですよね。

ボチボチと拡充しないと...

Re:C.Basic WiKi 発見

管理人様、ガノー様、こんにちは!

>ガノー様には Twitter message入れておきましたが、なんとC.Basic WiKiが立ち上がっているのを発見しました。
http://www65.atwiki.jp/garnot/pages/1.html
>元ネタの当ブログがサボっているので、入り口だけになっていますが、なんだかうれしいですよね。


うわうわうわっ!!!
なんと!C.Basic WiKiが!!
管理人様、発見ありがとうございます!!

ガノー様、どうもありがとうございます!!
ってことで、ふとYoutubeのガノー様のアカウントをチェックしてみると、最新動画がアップされてますね!(ずっと気が付いてなくてすみません)
https://www.youtube.com/watch?v=8wODoNhX9jg

ここのところバージョンアップが滞っている状態なので(汗)
早くに開発ペースを取り戻さねば、です(^^;

Re: Re:C.Basic WiKi 発見

sentaro様
ガノー様

> ってことで、ふとYoutubeのガノー様のアカウントをチェックしてみると、最新動画がアップされてますね!(ずっと気が付いてなくてすみません)
> https://www.youtube.com/watch?v=8wODoNhX9jg


興味深い考察がなされていますよね。

このネタは、当ブログでも是非紹介したいところです。

ゲーム作りをきっかけに、C.Basic x fx-9860GII で遊ぶ人が増える....といった感じがします。


Re:Re: Re:C.Basic WiKi 発見

管理人様、こんにちは!


>興味深い考察がなされていますよね。

>このネタは、当ブログでも是非紹介したいところです。

>ゲーム作りをきっかけに、C.Basic x fx-9860GII で遊ぶ人が増える....といった感じがします。


どちらかというと実用面よりもホビー面の方向で進化してきているC.Basicですから、ゲーム作りに活かしてくださる方が増えると嬉しいですね(^^)

CasioBasic完全準拠から始まったC.Basicの最初に頃には、速いCasioBasicというだけ、というところでしたけど、
管理人様、ガノー様のおかげでゲームでもそこそこ使えるかもしれない言語に進化できてきたかなと思います。

まだまだ足りないところ、進化させないといけないところが多々ありますが、今後ともよろしくお願いいたします。

HPGCCのアニメーション・プログラム移植版

管理人様、皆様、こんにちは!

http://akatuki-724.blogspot.jp/2016/10/hpgcc.html
akatuki様のサイトにアップされたHPGCCのプログラムをC.Basicへ移植してみました。

http://pm.matrix.jp/CB/globe_C.BASIC.zip

元のプログラムはARMバイナリなので無謀ながらC.Basicでどこまで動くかと思って移植してみたところ、
計算量を削減した最適化版で236MHzクロックアップでなんとか本家並みに動きました(^^)


それから、そっくりそのまま移植のアドイン版
http://pm.matrix.jp/CB/GlobeANM.zip

ソースそのまま移植で最適化はしてないのでC.Basic版のGLOBE.g1mと同じですが、
アドインとはいえ実数は遅く236MHzクロックアップで本家同等に動きます(^^;

Re: HPGCCのアニメーション・プログラム移植版

sentaro様

面白いネタのご提供、ありがとうございます。

取りあえず、

globe.g1m
globe2.g1m
globe3.g1m
globe4.g1m

を比べて動かしてみています。

globe4.g1m でかなり高速化していますね!

ソースをこれからじっくり拝見して、からくりを理解してみます。

ありがとうございます。

Re:Re: HPGCCのアニメーション・プログラム移植版

管理人様、皆様、こんにちは!

C.Basic版の
globe.g1m
globe2.g1m
globe3.g1m
に対応したアドイン版です。差し替えです(^^;
http://pm.matrix.jp/CB/GlobeANM.zip

[F1]:オリジナルそっくり移植版      globe.g1m相当
[F2]:座標計算半減版           globe2.g1m相当
[F3]:座標計算半減 + 三角関数計算削減版  globe3.g1m相当


>globe4.g1m でかなり高速化していますね!

はい、globe4はglobe3と同じソースながらカッコで2項演算化を徹底させた結果、現行C.Basic特有の2項演算の速さが効いています(^^)

アドイン版の[F3]にしてもC.Basicのglobe4.g1mから3倍速にもならないので実数演算はかなり重いですね。
ここから劇的に高速化するには座標演算を整数化する必要がありそうです。

HPGCCのアニメーション・プログラム移植版

親分様、Sentaro様。お久しぶりです。

先日、親分様からお知らせを戴きまして、遅まきながらのコメントポストです。
Sentaro様、早速の移植、有難う御座居ます。C.Basicのパワー、恐るべしですネ !

当方は、と言いますと、計算しながら描図ではかなりのオーバーヘッドなので、予めグラフィクスを作成して、アニメーション表示、という方式で、TI-83+でプログラムをやってみようか、などと計画しております。この方式ならば、C.Basicで爆速になるかも ?

Re:HPGCCのアニメーション・プログラム移植版

akatuki様、こんにちは!

>Sentaro様、早速の移植、有難う御座居ます。C.Basicのパワー、恐るべしですネ !

移植作業が遅くなってすみません(^^;
HPのPrimeにもやっと移植して試すことが出来たのですが、計算削減版でも1画面描くのに1秒程度かかるのでちょっと予想外の結果でびっくりでした。
ノーマルクロック29MHzのC.Basicでは1画面2秒かかるのでクロック比が13倍違うことからするとPrimeはちょっと遅いのですが、2進演算のC.Basicに比べると10進演算のPrimeは分が悪そうです。
C.Basicの結果は2進演算による高速性が上手く活かせた感じですね。


>当方は、と言いますと、計算しながら描図ではかなりのオーバーヘッドなので、予めグラフィクスを作成して、アニメーション表示、という方式で、TI-83+でプログラムをやってみようか、などと計画しております。この方式ならば、C.Basicで爆速になるかも ?

アニメーション方式だと20画面までなら純正CasioBasicでもいけそうです(^^)

Re: Re:HPGCCのアニメーション・プログラム移植版

sentaro様
akatuki様


> >当方は、と言いますと、計算しながら描図ではかなりのオーバーヘッドなので、予めグラフィクスを作成して、アニメーション表示、という方式で、TI-83+でプログラムをやってみようか、などと計画しております。この方式ならば、C.Basicで爆速になるかも ?
>
> アニメーション方式だと20画面までなら純正CasioBasicでもいけそうです(^^)

純正 Casio Basicの、画面 StoV-Win / RclV-Win コマンドは描画が結構遅かった記憶があります。

Casio Basic入門G08: http://egadget.blog.fc2.com/blog-entry-458.html

首を絞める

sentaro様

ついに自分で自分の首を絞めました...

http://community.casiocalc.org/topic/7620-inside-casio-basic-is-now-to-be-prepared/

これで、C.Basic の manual.txt と readme.txt の英訳が加速するかも...

Re:首を絞める

管理人様、こんにちは!

いったい何が?!とコメントタイトルでびっくりしてしばし数秒……(^^;


>ついに自分で自分の首を絞めました...

http://community.casiocalc.org/topic/7620-inside-casio-basic-is-now-to-be-prepared/


いよいよInside Casio Basic海外進出ですね!

>これで、C.Basic の manual.txt と readme.txt の英訳が加速するかも...

英訳は管理人様にお世話になりっぱなしなので恐縮するばかりなのですが、C.Basicも早いとこ正式版ver.1.00にしないとですね。
コンパイラ版はver.2.00とするとして、インタプリタ版でとりあえずver.1.00と思ってますが、かなり尻に火がついてまいりました(^^;


UCFでのコメントでキャラクタコードの話題が出ていたのでハタと気がついて、純正と拡張コマンドの中間コードが一部重なっているのを思い出したので修正版です(^^;

アドイン版 C.Basic ver.0.99s テスト版 その9.9s(純正と重なっていた中間コード変更版)
http://pm.matrix.jp/CB/CBASIC099s.zip
・純正コマンド"Dot" "DotG"と中間コードが重なっていた"DotTrim(" および"DotGet("コマンドの中間コードを変更しました。
DotGet( = DotG : 0x7F3F -> 0x7F3F
DotTrim( = Dot : 0x7F4F -> 0x7F3E

最初の頃に純正コマンドを流用したために純正と動作の違う拡張コマンドの中間コードが同じになってしまっていました。
その後、任意の中間コードでコマンド拡張が出来るようになったために空いている(と思われる)中間コードを拡張コマンドに使うことで純正と重なることは無くなりましたけど、初期の2つのコマンドが重なったままでした。
ということで、今回の変更で以前のC.Basic独自プログラムで"DotTrim(" および"DotGet("コマンドを使用していた場合はそのままでは動かないので、
ver.0.99rで一旦テキストファイル化した後、ver.0.99sでそのテキストファイルを読み込み&再保存することで修正することが出来ます。

現状C.Basicとしては中間コードが純正と重なっていても何に困ることはないのですが、将来的に"Dot" "DotG"を実装する可能性もゼロではないかもしれないので、重なっているところは今のうちに修正しておこうというところですね。

Re: Re:首を絞める

sentaro様

> いったい何が?!とコメントタイトルでびっくりしてしばし数秒……(^^;

アハハ...

失礼しました(^^;


> いよいよInside Casio Basic海外進出ですね!

実は、C.Basic の公式アナウンスの予告編という感じです。

C.Basic が Ver 1.00 になった時に、英文の Manual と Readme を完成させ、同梱してもらって、正式パッケージにして頂こうかと...

で、英文の Manual と Readme は、テキストファイルだと表現しにくいキャラクタがあるので、html にしようかと思案中です。こうすると、Web での作成と共通するメリットもありそうなので...


> コンパイラ版はver.2.00とするとして、インタプリタ版でとりあえずver.1.00と思ってますが、かなり尻に火がついてまいりました(^^;

実は、インタープリタ版が fx-CG20 に対応して頂くのも望んでいますが、多分 fx-9860GII 用のコンパイラ版の方がやり方をお分かりで、相対的には早くできるといった感じでしょうか?



> UCFでのコメントでキャラクタコードの話題が出ていたのでハタと気がついて、純正と拡張コマンドの中間コードが一部重なっているのを思い出したので修正版です(^^;
>
> アドイン版 C.Basic ver.0.99s テスト版 その9.9s(純正と重なっていた中間コード変更版)
> http://pm.matrix.jp/CB/CBASIC099s.zip
> ・純正コマンド"Dot" "DotG"と中間コードが重なっていた"DotTrim(" および"DotGet("コマンドの中間コードを変更しました。
> DotGet( = DotG : 0x7F3F -> 0x7F3F
> DotTrim( = Dot : 0x7F4F -> 0x7F3E
>
> 最初の頃に純正コマンドを流用したために純正と動作の違う拡張コマンドの中間コードが同じになってしまっていました。
> その後、任意の中間コードでコマンド拡張が出来るようになったために空いている(と思われる)中間コードを拡張コマンドに使うことで純正と重なることは無くなりましたけど、初期の2つのコマンドが重なったままでした。
> ということで、今回の変更で以前のC.Basic独自プログラムで"DotTrim(" および"DotGet("コマンドを使用していた場合はそのままでは動かないので、
> ver.0.99rで一旦テキストファイル化した後、ver.0.99sでそのテキストファイルを読み込み&再保存することで修正することが出来ます。
>
> 現状C.Basicとしては中間コードが純正と重なっていても何に困ることはないのですが、将来的に"Dot" "DotG"を実装する可能性もゼロではないかもしれないので、重なっているところは今のうちに修正しておこうというところですね。


すると、例えばガノー様のように、精力的に魅力的なプログラムを作ってこられた方のためには、このコード移行の案内は、重要ですね。

公開しているプログラムも、Ver 0,99r と 0,99s のそれぞれに対応したものを公開しておいた方が良いかも知れません...

ちょっと時間がかかりますが、このあたりが整備できたところで、0,99s 公開のアナウンスをしようと思います。


ところで、UCF のコメントで、出てきたキャラクターコードのコメントですが、ハッキリいってこの人は何が言いたいのか、何をアドバイスしているのか、実はよく分かっていません。

C.Basicが掃き出すテキストファイルのキャラクターが、電卓画面と異なること言っているでしょうか?
そして、彼のプロジェクトが、我々の C.Basic にどう貢献するのかも、よく分かりません。

お分かりなら、教えて頂けませんか?


Re:Re: Re:首を絞める

>実は、C.Basic の公式アナウンスの予告編という感じです。
>C.Basic が Ver 1.00 になった時に、英文の Manual と Readme を完成させ、同梱してもらって、正式パッケージにして頂こうかと...
>で、英文の Manual と Readme は、テキストファイルだと表現しにくいキャラクタがあるので、html にしようかと思案中です。こうすると、Web での作成と共通するメリットもありそうなので...

了解です(^^)


>実は、インタープリタ版が fx-CG20 に対応して頂くのも望んでいますが、多分 fx-9860GII 用のコンパイラ版の方がやり方をお分かりで、相対的には早くできるといった感じでしょうか?

んと、CG20版は初期移植段階で若干つまづいてしまって、試行錯誤中のまま停滞している状況なのですが、このあたりは公式SDKの有る無しは大きな違いとなって出てきてしまっています。
SH3/SH4のマシン語も一筋縄ではいかないのでインタプリタよりはデバッグが大変ですが、SDKでのマシン語デバッグが出来る分だけこっちの方が早く進みそうな気配です。



>すると、例えばガノー様のように、精力的に魅力的なプログラムを作ってこられた方のためには、このコード移行の案内は、重要ですね。

はい、
コードの変更となるとソース修正が大変となりますが、プログラムソースのテキスト化を実装できていたおかげでソースの修正作業の必要は無く移行は割と簡単と思います。


>公開しているプログラムも、Ver 0,99r と 0,99s のそれぞれに対応したものを公開しておいた方が良いかも知れません...
>ちょっと時間がかかりますが、このあたりが整備できたところで、0,99s 公開のアナウンスをしようと思います。

よろしくお願いいたします。m(_ _)m



>ところで、UCF のコメントで、出てきたキャラクターコードのコメントですが、ハッキリいってこの人は何が言いたいのか、何をアドバイスしているのか、実はよく分かっていません。
>C.Basicが掃き出すテキストファイルのキャラクターが、電卓画面と異なること言っているでしょうか?
>そして、彼のプロジェクトが、我々の C.Basic にどう貢献するのかも、よく分かりません。
>お分かりなら、教えて頂けませんか?

おそらく電卓で使われているキャラクターコードと中間コードの対応の一覧表を作成されているのではと思われるのですが、純正のコード以外にもC.Basicでの拡張コマンドもリスト化されているみたいなので、もしかしたらC.Basicでの拡張コマンドを本体標準実装の未発見コード(OSのバージョンアップによって新たに実装されていた未公開コマンド等)と思われたのかもしれません。

Re: Re:Re: Re:首を絞める

sentaro様


UCFでのコメント、ありがとうございます。


さっそく、Ver0.99s を改めて触りながら、英文の見直しと作成をしています。
ところで、バージョン情報表示は、どこから行けますか?

Re:Re: Re:Re: Re:首を絞める

管理人様、こんにちは!

>UCFでのコメント、ありがとうございます。

あ、いえいえ、恐縮です。
英文はいつまでたっても合っているのかどうか分からずじまいなのでお恥ずかしい限りです…(^^;

で、UCFのキャラクターコードのコメントから思いついたのですが、
C.Basicでの拡張キャラクターフォント(カナ文字等)は任意に変更できるようにすると良いかもしれません。



>さっそく、Ver0.99s を改めて触りながら、英文の見直しと作成をしています。

毎度お手数おかけしますm(_ _)m



>ところで、バージョン情報表示は、どこから行けますか?

[SHIFT]-[MENU]でセットアップに入って[F6]です。

Re: Re:Re: Re:Re: Re:首を絞める

sentaro様

バージョン表示の方法、ありがとうございます。

この方法は、manual_J.txt のクイックマニュアルのところに追加しては如何でしょうか?

あと、manual_J.txt のC.Basicの起動のところで、「1) アドインのメモリマネージャを使う;」の項目で、[EXE] を2回押して...とありますが、これは [EXIT]を2回押すに変更ですね。

再度に同じファイル内の「CasioBasicとの相違点」のところで、「コメント文の終了は改行と出力コマンドのみです。:(区切りコード)では終了となりません。」とは、どういうことか、忘れてしまいました。チョット解説をお願いできませんか?


Re:Re: Re:Re: Re:Re: Re:首を絞める

管理人様、こんにちは!

>この方法は、manual_J.txt のクイックマニュアルのところに追加しては如何でしょうか?

了解です!


>あと、manual_J.txt のC.Basicの起動のところで、「1) アドインのメモリマネージャを使う;」の項目で、[EXE] を2回押して...とありますが、これは [EXIT]を2回押すに変更ですね。

あ、そうですね。
でも、ここはファイル名確定済み後なので[EXIT]2度押しすることなく[MENU]で戻るでもいいのかもしれません。

以上2点、README_J.txt修正版をver.0.99s差し替えました。
http://pm.matrix.jp/CB/CBASIC099s.zip


>再度に同じファイル内の「CasioBasicとの相違点」のところで、「コメント文の終了は改行と出力コマンドのみです。:(区切りコード)では終了となりません。」とは、どういうことか、忘れてしまいました。チョット解説をお願いできませんか?

ここで管理人様が検証されたコメントアウト内に:(区切りコード)がある場合のバグ?を、C.Basicでは不具合とみなして解消しているということですね。

楽屋裏 - Casio Basic コメントアウト ' のバグ
http://egadget.blog.fc2.com/blog-entry-233.html

英文クイックマニュアル

sentaro様

Manual_J.txt をhtmlにしてみました。

http://egadget2.web.fc2.com/CBasic/Interpreter/CBasic_interpreter.html

このページの左のメニューで、Quick Manual と Command Reference は、別の html にジャンプし、他はページ内にリンクしています。

FC2のWeb内で htmlを作っているのですが、リンク先を変更すると、なんだか反映に時間がかかることが以前からあり、Quick Manual へのリンクがページ内のリンクのまま変更が反映されていません(これを投稿時点)。

そこで、Quick Manual は以下にアクセスしてください。
http://egadget2.web.fc2.com/CBasic/Interpreter/QuickManual.html

さて、Ver 0.99r の Manual_J.txt ベースに作成していて、オリジナルの日本語版の内容について質問があります。

1.C.Basic の起動のコーナー

「- [MENU] でMAIN MENUへ戻る」は、元は [EXIT] 2回押しになっていましたが、sentaro様のコメントを拝見して、これは [MENU] 一発でも良いように思います。英文は [MENU] 一発に変更しています。

1) アドインのメモリマネージャを使う;
- [MENU]キーでメモリマネージャを起動
- [F1] (F1:Memory Manager) でメインメモリのファイルリスト表示
- カーソルを<PROGRAM.へ移動し [EXE]
- コピーしたいファイルを選ぶ
- [F1] (SEL) に続いて [F2] (COPY)
- "ROOT"が反転したウィンドウが現れるので、そこで [EXE]
- Fle Name 画面になるので、そこで適当なファイル名(例えば"A")を入力して [EXE]
- [MENU] でMAIN MENUへ戻る
- C.Basic起動
- ファイル "A" を選択して [F6]そして[F2] REN)
- 元のCasio Basicファイル名が表示されたウィンドウが表示される
- ここで [EXE] を押すと、元のファイル名に変化する。



2.ファイルリストのコーナー

-[F1] (EXE) 選択ファイルを実行します。
-[F2] (EDIT) 選択ファイルを編集します。
-[F3] (NEW) 新規ファイルを作成します。
-[F4] (COPY) ファイルをコピーします。
-[F5] (DEL) 選択ファイルを削除します。
-[F6] ( > ) 次のメニューに移動します。
  [F1] (Text) 選択されたBasicソースファイルをテキストファイルへ変換します。
  [F2] (REN) ファイル名を変更します。
  [F3] (Fav.) 選択ファイルをお気に入りに追加、解除します。
  [F4] (Fv.↑) お気に入りを一つ上に移動します。
  [F5] (Fv.↓) お気に入りを一つ下に移動します。
  [F6] ( > ) 前のメニューに移動します。

これの下に
  [EXE] プログラムを実行します

を追加してみました。C.Basic で異なる部分を解説するのが目的なのは、分かっているのですが、なんだか気になったので、追加してみました。そして英文もこれを反映させています。



3.エディタ編集画面のコーナー

「・ファイルの現在位置を示すガイドマーカーがドットで右端に表示されます。」

これは以下のように変更すると良いと思いますが如何でしょうか?

「・ファイル内のカーソルの現在位置を示すガイドマーカーがドットで右端に表示されます。」
英文は、この変更を反映させてあります。



4.エディタ画面とデバッグモードのコーナー

「-[EXIT] サブメニューからメインメニュー、クリップモードのキャンセル、またはファイルリスト画面に戻ります。」

ここで、「サブメニューからメインメニューへ戻る」という説明ですが、チョットぴんと来ず、これはきっと「1つ前の画面に戻る」という意味だだろと考え、取りあえず英文では「Go Back to previous page」としました。

英訳しようと思わないと気がつかない細かい点ですが、日本語版ではうまく書き換えた方が良いと思うのですが、如何でしょうか?



5.プログラム実行時のコーナー

「エディタに戻ります。カーソルは中断箇所を示します。」の説明ですが、「デバッグモードのエディット画面に戻ります。」とすべきと思います。英文ではこの変更を反映しています。


それから、

「▲一時停止コマンドで停止した時」

の説明は、他の一旦停止のコマンドもあって、▲の時だけの機能の筈なので、以下のようにすれば分かり易いと思います。

「▲一時停止コマンドで停止した時(- Disp - 表示の時)」

英文では、これを反映させています。



6.Casio Basicとの相違点のコーナー

これは、クイックマニュアルではなくて、
http://egadget2.web.fc2.com/CBasic/Interpreter/CBasic_interpreter.html
に書いてあります。

Difference from original Casio Basic of fx-9860G / fx-9860GII

と表題を付けています。

で、旧来の命令 " " についても、C.Basic は fx-5800P 仕様になっているので、この点も英文で追加しました。
String output command " " is exactly compatible with fx-5800P in its detailed function, but not with fx-9860G/fx-986GII.

日本語版に追記するなら、
「文字列出力コマンド " " は詳細動作まで fx-5800P 完全準拠で、fx-9860G/fx-9860GIIには準拠しない」

といった感じでしょうか?
sentaro様の言葉で日本語版に追記されませんか?

それに併せて英訳も変更します。

具体的には、下記ご参照;
http://egadget.blog.fc2.com/blog-entry-170.html



7.設定画面について

Casio Basicと共通しない部部ににつては、Manual_J.txt に加筆なさいませんか?

設定画面の動作に関連する拡張コマンドを併せて紹介すると、とても分かり易くなるように思います。

加筆されたら、それを英訳したいと思うのですが、如何でしょうか?



あとは、コマンドリファレンスの英訳にとりかかろうと思います。

なお、取りあえずの公開を 2017年1月17日にしようと思っています。これ私の誕生日なんです(^^;


ご検討お願い致します。

Re: 英文クイックマニュアル

sentaro様



> Manual_J.txt をhtmlにしてみました。

英訳したのは、readme_J.txt でした。


> あとは、コマンドリファレンスの英訳にとりかかろうと思います。

これからとりかかるのが、Manual_J.txt ですね。

うっかり間違えました。

Re: 英文クイックマニュアル

管理人様、こんにちは!

>Manual_J.txt をhtmlにしてみました。

http://egadget2.web.fc2.com/CBasic/Interpreter/CBasic_interpreter.html

html版、なかなかよいですね(^^)
どうもありがとうございます!



>2.ファイルリストのコーナー
>これの下に
>  [EXE] プログラムを実行します
>を追加してみました。C.Basic で異なる部分を解説するのが目的なのは、分かっているのですが、なんだか気になったので、追加してみました。そして英文もこれを反映させています。

了解です。



>3.エディタ編集画面のコーナー
>「・ファイルの現在位置を示すガイドマーカーがドットで右端に表示されます。」
>これは以下のように変更すると良いと思いますが如何でしょうか?
>「・ファイル内のカーソルの現在位置を示すガイドマーカーがドットで右端に表示されます。」
>英文は、この変更を反映させてあります。

了解です。




>4.エディタ画面とデバッグモードのコーナー
>「-[EXIT] サブメニューからメインメニュー、クリップモードのキャンセル、またはファイルリスト画面に戻ります。」
>ここで、「サブメニューからメインメニューへ戻る」という説明ですが、チョットぴんと来ず、これはきっと「1つ前の画面に戻る」という意味だだろと考え、取りあえず英文では「Go Back to previous page」としました。
>英訳しようと思わないと気がつかない細かい点ですが、日本語版ではうまく書き換えた方が良いと思うのですが、如何でしょうか?

はい、その方が機能的に合っている感じですね。


>5.プログラム実行時のコーナー
>「エディタに戻ります。カーソルは中断箇所を示します。」の説明ですが、「デバッグモードのエディット画面に戻ります。」とすべきと思います。英文ではこの変更を反映しています。
了解です。それが正しいですね。



>それから、
>「▲一時停止コマンドで停止した時」
>の説明は、他の一旦停止のコマンドもあって、▲の時だけの機能の筈なので、以下のようにすれば分かり易いと思います。
>「▲一時停止コマンドで停止した時(- Disp - 表示の時)」
>英文では、これを反映させています。

了解です。



>6.Casio Basicとの相違点のコーナー
>で、旧来の命令 " " についても、C.Basic は fx-5800P 仕様になっているので、この点も英文で追加しました。
>String output command " " is exactly compatible with fx-5800P in its detailed function, but not with fx-9860G/fx-986GII.
>日本語版に追記するなら、
>「文字列出力コマンド " " は詳細動作まで fx-5800P 完全準拠で、fx-9860G/fx-9860GIIには準拠しない」
>といった感じでしょうか?
>sentaro様の言葉で日本語版に追記されませんか?
>それに併せて英訳も変更します。

fx-5800Pから取り入れた仕様を分けてみました。



>7.設定画面について
>Casio Basicと共通しない部部ににつては、Manual_J.txt に加筆なさいませんか?
>設定画面の動作に関連する拡張コマンドを併せて紹介すると、とても分かり易くなるように思います。
>加筆されたら、それを英訳したいと思うのですが、如何でしょうか?


設定画面についてはManual_J.txtの最後にまとめてありますが、関連コマンドを追加してみました。
この部分はReadme_j.txtにも有った方がよいでしょうか?


とりあえず、上記のReadme_j.txt、Manual_J.txt変更版をver.0.99s差し替えてみました。
http://pm.matrix.jp/CB/CBASIC099s.zip



>あとは、コマンドリファレンスの英訳にとりかかろうと思います。

毎度お手数おかけします。m(_ _)m



>なお、取りあえずの公開を 2017年1月17日にしようと思っています。これ私の誕生日なんです(^^;

了解です(^^)

Re: Re: 英文クイックマニュアル

sentaro様

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

1つ質問です。

#Frac 1.23x100

の説明ですが、

Ver 0.99r でこれを実行すると

実数モードでは、Frac 1.23x100 がエラーになり、
整数モードでは、#Frac 1.23x100 がエラーになってしまいます。

なんだか予期しない動作のような気がしますが、ご確認頂けますか?

Setup での Skip Up/Down の設定について

sentaro様

セットアップ画面の説明ですが、README_J.txt に記載した方が、内容の整合性(C.Basic の操作方法)が合うように思うので、ぜひこちらにも記載をお願いします。


英語版 html はチョコチョコ表現を見直しています。

で、Setup画面での Skip Up/Down の設定は、[SHIFT][Up] や [SHIFT][Down] を押した時のページスキップで、何ページ飛ばすかの設定ですよね?

Ver 0.99r ではこの設定が動作に反映されないようです。ご確認ください。

Ver0.99s はまだ試していません(^^;

その他、セットアップ画面の項目について

sentaro様

Matrix base で 0 を指定するときの説明ですが、液晶の左端だけでなく上端のピクセルが有効になって、物理座標系(デバイス座標系)で、左上のピクセルが有効になって、左表 (0, 0) として使える...ということですよね?

なので、こんな感じの英文にしてしました。
もしこの理解が正しければ、日本語版でも液晶上端が使えるようになることにも触れては如何でしょうか?


Execute mode の関連コマンドですが、'#CBdouble や '#CBDOUBLE も有効ですよね?
これを敢えて説明されないのには、何か思うところがあるのでしょうか?

Quick Manual と Reference の Execute mode の関連コマンドには、これらの表記も追加してみています。


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



取りあえず、リンクは正常に復帰したみたいです。
http://egadget2.web.fc2.com/CBasic/Interpreter/CBasic_interpreter.html

これが、C.Basic のトップページで、基本的なリンク構造ができて、順に英訳作業を進めるだけになりました。

Re: Re:首を絞める

sentaro様

> ver.0.99rで一旦テキストファイル化した後、ver.0.99sでそのテキストファイルを読み込み&再保存することで修正することが出来ます。

「テキストファイルを読み込み&再保存する」とは具体的にどのような操作を行えば良いのでしょうか?


また、RefreshCtrl ですが、Ver 0.99r で一旦書き込むと、このコマンドが正常に削除できません。
これは、Ver 0.99s で解消しているのでしょうか?

これを削除すると、Break コマンドに化けるといった現象も発生します。

コマンドのコードのかち合いが原因なんだろうか?などと想像しています。


また、Manual_J.txt の Local コマンドの説明で、小文字変数はデフォルトでグローバル変数の筈ですが、ローカル変数と記載されています。修正が必要なようです。

Re:Setup での Skip Up/Down の設定について

管理人様、こんにちは!

>Ver 0.99r でこれを実行すると
>実数モードでは、Frac 1.23x100 がエラーになり、
>整数モードでは、#Frac 1.23x100 がエラーになってしまいます。
>なんだか予期しない動作のような気がしますが、ご確認頂けますか?


Ver 0.99rでプログラム内で実行すると動作に問題ないような感じなのですが、エラーの起きるサンプルリストお願いできますでしょうか?
(変数画面では整数モードでも実数モードで式を評価→整数化するのでどちらも同等になってます。)


>セットアップ画面の説明ですが、README_J.txt に記載した方が、内容の整合性(C.Basic の操作方法)が合うように思うので、ぜひこちらにも記載をお願いします。

了解しました。
ってことで、README_J.txt を追加修正、Ver0.99s差し替えしました。


>で、Setup画面での Skip Up/Down の設定は、[SHIFT][Up] や [SHIFT][Down] を押した時のページスキップで、何ページ飛ばすかの設定ですよね?
>Ver 0.99r ではこの設定が動作に反映されないようです。ご確認ください。

んと、Skip Up/Down の設定はファンクションキーの
-[F1] (JUMP) ジャンプサブメニューを表示します。
  [F5] (Skip↑) (セットアップで設定された)ページ数スキップアップします。
  [F6] (Skip↓) (セットアップで設定された)ページ数スキップダウンします。
ここだけで有効になっています。

[SHIFT][Up]と[SHIFT][Down] は1ページ固定となっています。

なのですが、同じにした方がよいでしょうか?


>Ver0.99s はまだ試していません(^^;

今のところはVer0.99rと内部コードの差があるだけで仕様上は全く同じなので動作検証はVer0.99rでも大丈夫です(^^;

Re:その他、セットアップ画面の項目について

管理人様の細かなチェックに助けられています。ありがとうございます!


>Matrix base で 0 を指定するときの説明ですが、液晶の左端だけでなく上端のピクセルが有効になって、物理座標系(デバイス座標系)で、左上のピクセルが有効になって、左表 (0, 0) として使える...ということですよね?
>なので、こんな感じの英文にしてしました。
>もしこの理解が正しければ、日本語版でも液晶上端が使えるようになることにも触れては如何でしょうか?

はい、左端だけじゃなく上端も有効でした(^^;


>Execute mode の関連コマンドですが、'#CBdouble や '#CBDOUBLE も有効ですよね?
>これを敢えて説明されないのには、何か思うところがあるのでしょうか?

あ、完全に抜け落ちていました(^^;

#CBDBL
#CBdbl
でもOkなのでその記述にしました。
実はここは最初の英文字三文字(CBD、CBd)しかチェックしていません。(これは内緒です(^^;)




>取りあえず、リンクは正常に復帰したみたいです。
http://egadget2.web.fc2.com/CBasic/Interpreter/CBasic_interpreter.html
>これが、C.Basic のトップページで、基本的なリンク構造ができて、順に英訳作業を進めるだけになりました。

なんかすごい本格的で海外サイトみたいになってきてすごいです(^^)

あ、ちょっと気になった点ですが、e-mailはメアド収集ロボットに読み取られると広告いっぱい来てしまってまずいかもなので、偽装しておいた方がいいかもしれませんね(^^;



>「テキストファイルを読み込み&再保存する」とは具体的にどのような操作を行えば良いのでしょうか?

電卓上にC.BasicのVer.0.99rとVer.0.99sを両方置いておいて、
Ver.0.99rにてテキストファイル化します。
そしてVer.0.99sを起動してそのテキストファイルを読み込み再保存します。
再保存するには何か編集作業をして修正保存する必要があります。
(再保存しなくてもテキストファイルのままで実行可能なのでテキストファイルのままで特に再保存する必要はないかもしれません。)


>また、RefreshCtrl ですが、Ver 0.99r で一旦書き込むと、このコマンドが正常に削除できません。
>これは、Ver 0.99s で解消しているのでしょうか?

これは使ってはいけない中間コードになってました。ありがとうございます!
Ver.0.99sでの修正となります(^^;


>また、Manual_J.txt の Local コマンドの説明で、小文字変数はデフォルトでグローバル変数の筈ですが、ローカル変数と記載されています。修正が必要なようです。

全部がローカル化していた時の名残ですね(^^;
修正しておきました。



アドイン版 C.Basic ver.0.99s テスト版 その9.9s(中間コード変更+α版)差