アドイン Casio Basic - トップページ

C:Basic - アドイン Casio Basic
<Top Page>

内容の更新や修正を随時行います.

初版 2015/12/18
更新 2018/03/28


[2018/03/16] C.Basic for FX が Ver 1.73 beta にアップデート。
[2018/03/28] C.Basic for CG Ver 0.47 alpha がマイナーアップデート

<目 次>
 - C:Basicとは?
 - 最新バージョン
 - オーバークロック・アドイン
 - C.BasicC:Basic の潜在能力
 - C.Basicの使い方とコマンドリファレンス
 - C.Basic 英語版Webマニュアル
 - C.Basic for CG アルファ版公開
 - C.Basic for CG アルファ版公開 - Part 2



C:Basic とは?
[2017/12/17 改訂]

C:Basic は Casio Basic で楽にコーデイングしたものを高速動作させようというコンセプトでスタートした Casio Basic 上位互換の開発環境で、アドインプログラムとして提供するものです。

fx-9860G 以降の Casio グラフ電卓で動作し、純正 Casio Basic コマンドとの互換動作を目指し、さらにこれらコマンドの機能を拡張したり、新規コマンドを追加しています。

インタープリタ動作するものを C.Basic (ドット1つ)、コンパイラ機能によりさらに高速化するものを C:Basic (ドット2つ) と呼びます。現在は C.Basic のみを提供中、その後 C:Basic を提供予定です。

C.Basic は当初 fx-9860G および fx-9860GII 向けに開発が始まりましたが、最近になって 高精細カラー液晶を搭載した fx-CG10 / CG20 および fx-CG50 向けの開発も始まっています。前者を C.Basic for FX、後者を C.Basic for CG と新たに呼ぶことになりました。

C.Basic for FX は国内外でユーザーに鍛えられてきたのでベータ版として公開中、C.Basic for CG は初版公開からあまり時間が経っていないのでアルファ版として公開中です。


純正Casio Basic は、言語機能がシンプルで電卓に直接入力して気楽に使えるのが最大の特徴です。限られたハードウェアリソースしか持たない電卓でのプログラミングには、最低必要限の機能を有しています。PC上の開発言語と同じことを Casio Basic に要求するのはそもそも考え違いでしょう。しかし Casio Basic は "構造化プログラミング" が可能な程度の機能があるので、実用的なプログラムを作成可能です。ここでいう "構造化プログラミング" は、Donald Knuth, "Structured Programming with goto statement" ACM Comuting Surveys (CSUR) Volume 6 Issue 4, Dec. 1974  (リンク) で主張されている実用的な構造化プログラミングに近いものです。教条主義に陥いることなく、とにかく分かり易く、バグが出にくく、改造や機能追加が楽なコーディングの方針としてCasio Basicに適用でき有用です。

Casio Basic は楽に記述できる反面、計算量の大きな処理を行ったり、ビットマップをグラフィックスで描かせると、とても時間がかかります。C.Basic (現行インタープリタ版)は、Casio Basic とほぼソースレベル互換でありながら10~20倍のスピードがありまず。C:Basic (将来のコンパイラ版) は、予備実験の結果、さらに C.Basic (インタープリタ) の10倍の程度の処理速度になりそうです。

この C:Basic プロジェクトは、sentaro様 (本アドインの作者、海外では sentaro21), Krtyski (当ブログの管理人、テスト実施、サンプルプログラム作成、海外でも Krtyski)、さらに国内外の有志のユーザーの皆様により推進しています。

C:Basic プロジェクト



▋ C.Basic 最新バージョン

 ▶ C.Basic for FX (fx-9860Gシリーズ用ベータバージョン)
  ・ C.Basic for FX Ver 1.73 beta (fx-9860G シリーズ専用)
  ・ C.Basic for FX の入手 (少し前のバージョンも入手できます)

 ▶
C.Basic for CG (fx-CGシリーズ用アルファバージョン)
  ・C.Basic for CG Ver 0.47 alpha (fx-CGシリーズ対応版)
  ・C.Basic for CG の入手 (少し前のバージョンも入手できます)

注意: 万一に備えて、電卓内のプログラムやデータをバックアップしておくことを勧めます。

C.Basicのインストール
ダウンロードしたZIPファイルに含まれている CBASIC.g1a を fx-9860GII シリーズのストレージメモリに転送します。

C.Basicの使い方とコマンドリファレンス
ダウンロードしたZIPファイルに含まれている、Manual_J.txtReadme_j.txtCommand_List.txt を参照してください。

C.Basicの独自拡張機能とCasio Basic互換コマンド
Manual_J.txt にまとめられているので、参照してください。


 チューンアップツール - アドイン

電卓内部のクロックを調整して高速動作させるチューンアップツールを C.Basic と一緒に使うと、さらに高速化が可能です。
このプログラムの評判については、下記参照ください;
- @ Unversal Casio Forum
- @ CEMETECH
- @ TI-Planet

管理人は2年以上使っていますが、今のところ問題は起きていません。安全対策がよく考えられていて、おそらく電卓を壊すことは無いでしょう。但し、念のため電卓のデータバックアップは行って下さい。

機種毎に用意されています。

- fx-9860G、fx-9860GII USB POWER GRAPHIC(前期バージョン SH3採用品): Ftune Ver 1.01
- fx-9860GII USB POWER GRAPHIC 2(後期初期 SH4採用品): Ftune2 Ver 1.11
- fx-CG10 / CG20: Ptune2 Ver 1.11 / Ptune2 Ver 1.20※2
- fx-CG50: Prune3 Ver 0.10


※ 違う機種のものを利用しないよう注意してください。
※2 Ptune2 Ver 1.20 は、必ずアップデートする必要はありませんが、Ver 1.11 を fx-CG10 / CG20 で利用中に
  C.Basic for CG の起動異常がみられる時や、設定の最適化が面倒な場合にお使いください。


C.Basic と C:Basic の潜在能力

サンプルプログラムを使って、C.BasicC:Basic の潜在能力を見てみましょう。.

 ライフゲーム (Conway's Game of Life)

C.Basic は純正 Casio Basic の上位互換であり、拡張コマンドや言語機能があります。

高速なビットマッププログラムを純正Casio Basic で作ろうと考えるのは無謀なことだと言えます。しかし C.Basic を使えば、例えばライフゲームを楽しめます。



- ダウンロード: ライフゲーム Ver 0.74

これには、C.Basic Ver 0.63 以降のバージョンが必要です。.


以下の動画では、Ftune2 を使って クロックを 236MHz にチューンしています。
.
=====

コンパイラ版の C:Basic をシミュレートするため、ライフゲーム の繰り返し処理部分を、ネイティブコードの特別なコマンド "DotLife" に置き換えて実行したのが以下の動画です。 

・ダウンロード: ライフゲーム Ver 0.84



ご覧のように非常に高速で、517世代までの時間を測ると約10倍高速化しています。将来のコンパイラ版 C:Basic では、これよりも速くなるはずです。

ライフゲームの詳しい説明


2D迷路

以下のような画面全体のグラフィックス描画は、純正Casio Basicではとても時間がかかります。これを C.Basic で走らせると極めて短時間で描画が完了します。

Maze1 

2D迷路プログラムの詳しい説明


3D迷路ゲーム

3D_Maze 

左側の迷路マップの描画は、C.Basic を使うことで極めて高速化できます。右側の3D表示はポリライン処理により純正Casio Basic でも3D描画が軽くなるよう工夫されています。このプログラムでは、C.Basic の独自拡張機能を使いながら 純正 Casio Basicでも動作可能なようになっているのが特徴です。

3D迷路ゲームの詳しい説明


アクションゲーム - DRAGON



これは、C.Basic 独自拡張機能を活用したサンプルプログラムで、高速で多彩なビットマップ処理機能をうまく活用しています。
ゲームとしても飽きないチューニングがされています。このプログラムのソースは、C.Basic 独自拡張機能の理解に役立ちます。

アクションゲーム - DRAGON の詳しい説明



C.Basic の使い方とコマンドリファレンス

  C.Basic for FX
   インストール方法
   概要と操作方法 (Readme_J.txt)
   コマンドリファレンス (Manual_J.txt)
   更新履歴 (CHANGE_J.txt)
   コマンド一覧とコマンド呼び出しキー操作 (Command_List.txt)
   拡張コマンド・コード一覧 (Extended_opcode_list.txt)

  C.Basic for CG
  インストール方法
  概要と操作方法 (ReadmeCG_J.txt)
  コマンドリファレンス (ManualCG_J.txt)
  更新履歴 (ChangeCG.txt)
  コマンド一覧とコマンド呼び出しキー操作 (Command_List_CG.txt)




Top に戻る



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






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

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



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

C.Basic for CG 開発が始動 - Part 2 (Ver 0.38α以降)

アドイン版 Casio Basic - C.Basic for CG - Part 2
<トップページ>

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

2018/02/18
更新 2018/03/28

[2018/03/27] C.Basic for CG Ver 0.47α がマイナーアップデート

C.Basic for CG 開発が始動 - Part 1 (Ver 0.37αまで)
 
 の続きです



はじめに - Part 2 - C.Basic for CG (Ver 0.38α以降)

完成度の高い fx-CG50 が登場し、この機種で走る アドイン版 Casio Basic - C.Basic for CG が公開され、次々と新機能が追加され、かなり使いやすくなっています。C.Basic for CG で追加された機能のうち fx-9860Gシリーズに適用可能なものは、C.Basic for FX にも追加されています。

現在はアルファ版です。作者の sentaro様を皆で応援し、作者とユーザーの情報交換を継続するために、Part 2 を作りました。



目 次

現行アルファバージョンについて

最新版のダウンロード - Part 2

 更新履歴 (概要)

C.Basic for CG プログラミングのための役立ちツール




現行アルファバージョンについて
C.Basic for CG は、現在アルファ版 (初期お試し版) です。現行バージョンは、まだ未完成と考えて下さい。バグの可能性もあるので、作者 (sentaro様) に連絡して応援する...というのが当ブログのスタンスです。

<目次に戻る>


最新版のダウンロード - Part 2

   C.Basic for CG Ver 0.47α(アルファ)版
  • 解凍して得られる CBASICCG.g3a ファイルを fx-CG20 / CG50 のストレージメモリに転送してアップデート完了!
  • 詳しいインストール方法はこちら 
  • 取扱説明書:同梱テキストファイル参照。ReadmeCG_J.txt (C.Basic開発環境の使い方)、 ManualCG_J.txt (C.Bbasicコマンドリファレンス)、Command_List_CG.txt (C.Basic コマンド一覧と呼び出しキー操作) が含まれています。今はユーザーによるバグ出し作業中です。
<目次に戻る>


更新履歴 (概要)
Ver 0.47α (IsError( コマンド追加+RGB( 修正版)
 ・数式のエラー値を返すIsErorr(コマンドを追加しました。
 (書式)IsErorr(数式)
  数式の最初のエラー値を返します。エラーがない場合は0が返ります。
 (例)IsError(12+78)
  エラーが無いので0が返ります。
 (例)IsError(12+78+)
  Syntax Errorのエラー値 1が返ります。
 (例)IsError(12/0)
  Division By Zeroのエラー値 40が返ります。

 ・RGB(コマンドの引数がリストの場合に誤動作していた不具合を修正しました。

 ※エラーに対応する返り値はErrorCode_list.txtにありますが数式評価で返るエラーは
  以下のとおりです。(同梱 ErrorCode_List.txt 参照)
    1: Syntax ERROR
    2: Math ERROR
    5: Stack ERROR"
    6: Memory ERROR
    7: Argument ERROR
    8: Dimension ERROR
    9: Range ERROR
  40: Division By Zero
  42: Not enough Memory
  43: String Too Long
  44: No Matrix array"
  55: Illegal Element
  60: Undefined Var
  65: Address Align ERR

 ・エディタのミニフォントでも"¥"キャラクターの表示ができなかった不具合お修正しました。
 ・DotPut, DotGet, DotTrim, Sprintf( コマンドのの中間コードの自動修正を終了しました。
 ・ステータスラインのキーボード入力モードを表示するようにしました。
 ・エディタのクリップ中(選択中)に別の文字列に貼り付けが出来てしまったのを修正しました。
 ・行列とListの最大要素数を32767から2147483646に拡張しました。
 

Ver 0.46α (グラフ描画g3mモード対応+エディタスクロールバー修正+?コマンド修正版 - 1)
 ・エディタの右端のスクロールバー表示を修正しました。
 ・グラフ描画のg3mモード対応しました。
 ・オプション付きの?コマンドで7行目の入力で改行される不具合を修正しました。
  (※0行目と8行目の入力制限を解除さけしてありますが、今のところは不具合出まくりです(^^;)

Ver 0.45α (FkeyMenu+StrSplit+BackLight+修正版)
 ・g1m/g3m設定がAutoの場合に新規プログラムがg1mモードになってたのを修正しました。
 ・_Rectangleと_Horizontalで端の描画に不具合があったのを修正しました。
 ・プログラムの実行を中断してエディタに戻ったとき、最大行数が0になることがある不具合を
  修正しました。
 ・[MENU]でコマンド入力履歴を表示させた後、[AC]で画面が復帰しない不具合を修正
  しました。
 ・行列のドットエディタ表示時に電源を切ると、カーソルが残る不具合を修正しました。
 ・Peek,Pokeコマンドでの指定アドレスのミスアラインメントによるエラーをArgument ERR
  からAlignment ERRに変更しました。
 ・プログラム時間計測スタートのタイミングをプログラム開始直前に調整しました。以前より
  計測結果がわずか短くなります。

 ・バージョンを返すVersionシステム変数を追加しました。
 (書式) Version [SHIFT]+[MENU](SETUP)-[F6]-[F6]-[F6]-[F6]-[F5](Version)

 ・FkeyMenuコマンドを外部フォント表示に対応し、センタリングして表示するように変更
  しました。さらに表示位置を1ドット上げるオプション指定を追加しました。
 (書式)FkeyMenu( n,"文字列",U)
 (書式)FkeyMenu( n,"文字列",RU)
 (例)FkeyMenu( 1,"A",U)
  ファンクションメニュー1の真ん中に"A"を表示します。
 
 ・StrSplitコマンドで2バイト文字が含まれていた場合に正常動作しなかった不具合を修正
  しました。

 ・BackLightコマンドが動作してなかった不具合を修正しました。
 (書式)BackLight n
   n:0~255の数値を指定します。
 (書式)+BackLight
   現在のバックライト値(0~255)を返します。

 ・StrSplitコマンドで2バイト文字が含まれていた場合に正常動作しなかった不具合を修正
  しました。
  

Ver 0.44α (標準サイズフォントのOr表示+色々と修正版)
 ・LocateコマンドとLocateYXコマンドにといてOrと反転Orを追加しました。
  標準フォント描画で、Textコマンドと同じ描画オプションが使えるようになります。
  (例) Locate 1,1,"Test"
  (例) Locate 1,1,"1234".O
   "Test" に "1234"が重なって表示されます。
 ・エディタのカーソル点滅位置を微修正しました。
 ・Menuコマンドが g1mモードでFX互換動作しない不具合を修正しました。
 ・プログラム終了時に[OPTN]キーを押すとフリーズする不具合を修正しました。
 
 ・_Pointコマンドで2ドット以上の大きさを指定した場合、その後、行列表示の枠が太っていた
  不具合を修正しました。
 ・行列編集時に横の要素数が9以上ある場合に9つ目が表示されていた不具合を修正しました。
 ・すでに確保済みの行列を[F3](DIM)再確保した場合、ゼロで初期化をしないように
  しました。
  行列の内部構成を自在に変更できますが、確保済み前よりも再確保領域が広がる場合は
  不定なデータが出現しますので必要に応じて初期化してください。
 ・Impactフォントの小文字p以降が1ドット下にずれていたのを修正しました。
  (同梱 @LFONTA1.bmpおよび@MFONTA1.bmp)
  

Ver 0.43α (フォント高さ設定+続色々と修正版)
 ・テキストコマンドにおいて文字フォントの高さ指定が出来るようになりました。
 (書式)Text Y,X,"文字列”or数式 [,N/O/R/V][,F/M/MB/FM/FMB/FX/X][,フォント縦ドット数]
 (例)Text 10,1,"Simple Text",,,16
   上端から16ドット分のミニフォント表示されます。
   本来は縦18ドットフォントなので下2ドットは表示されません。
 (例)Text 10,1,"Simple Text",,F,20
   固定ピッチ(12ドット間隔固定)で上端から20ドット分のミニフォント表示されます。
   本来は縦18ドットフォントなので下に2ドット分の余白が追加されます。

 ・キャラクター選択の[F3]のコード(0xE57E)が抜けていたのを修正しました
 ・エディタの指数表示を修正しました。
 ・SEARCH、REPL実行時のファンクションメニューの消去ミスを修正しました。
 ・バイナリエディタでの画面消去ミスを修正しました。
 ・キー入力時にカタログ機能を使うと画面が復帰しない不具合を修正しました。
 ・デバッグモードの実行画面表示時に全画面表示できるように修正しました。
 ・キャラクター選択の[F6]のアイコン表示を修正しました。
 

Ver 0.42α
 (色々と修正版)
 ・If、While、Doコマンドにおいて条件判定が整数判定になっていたのを修正しました。
 
 ・エディタの外部フォント表示で超ミニフォントが表示されなかった不具合を修正しました。
 ・エディタのスタンダードフォント表示で背景色が黒になる場合にカーソルが見えない
  不具合を修正しました。
 ・エディタの背景色があちこちに残って表示されているのを修正しました。
 ・カタログ機能で[3]キーが効かない不具合を修正しました。
 ・一括コメント化で2行目から選択したにも関わらず1行目もコメント化される不具合を
  修正しました。
 ・エディタで改行の次の行が改行だけの場合に下移動すると一行飛び越してしまう不具合
  を修正しました。
 ・バイナリモードでの編集後に保存できない不具合を修正しました。
 
 ・行列のエレメントジャンプ[Goto]において飛び先が一つずれていたのを修正しました。
 ・[EXIT]ポップアップから抜ける条件を[EXIT]と[AC]キーに限定しました。
 
 ・[AC]無効化状態で、TocksWait実行時に[AC]を押すとコマンドが終了してしまう不具合
  を修正しました。
 ・高分解能タイマーTicks%がカウントダウンになっていた不具合を修正しました。
 ・フォント選択で[F5]のキャラクタが表示できなかった不具合を修正しました。
 ・RanNorm#コマンドのアイコン表示を間違えていたのを修正しました。
 
 ・OS3.0以降の指数表示に対応しました。セットアップとコマンドで指定できます。
   E: -1.23e99 従来の表示形式です。
   Stdx10: -1.23(x10)99 スタンダードフォントのみ切り替わります。
   Allx10: -1.23(x10)99 すべてのフォントサイズで切り替わります。
  (書式)'#exp 0 // 従来の表示形式です。
  (書式)'#exp 1 // スタンダードフォントのみ切り替わります。
  (書式)'#exp 2 // すべてのフォントサイズで切り替わります。
 
 ・SysCallの引数の数を12まで増やしました。
  (書式)SysCall( システムコール番号 [,引数1][,引数2][,引数3][,引数4][,引数5][,引数6]
          [,引数7][,引数8][,引数9][,引数10][,引数11][,引数12] )
 ・バイナリー偏す富士にカーソル表示が残る不具合を修正しました。
 ・エディタ最下部と目乳-の間を1ライン空けました。
 ・C.BasicのOSでのバージョン表示が正常になりました。
 ・キャラ牟田-選択の[F1][F2]の一覧を追加修正しました。  
  
Ver 0.41α (重ね合わせ処理改善+空白許可版)
 ・空白を行頭だけではなく、コマンド間、数式内の空白も許可するようにしました。

 ・テキストとグラフィックス画面を重ね合わせるScreen.Oコマンドの動作において、
  LCD画面転送時にVRAMが合成画面となってしまうのを抑制するオプションを追加しました。
  (書式)Screen.OT
    LCD画面転送後にVRAMが変化しないようになります。

 ・_PixelTestコマンドにおいて、現在のVRAM以外にもテキストVRAMとグラフィックスVRAM
  を選択出来るようになりました。
  (例)_PixelTest(10,20,T)
    テキストVRAMの(10,20)のカラー値を読み取ります。
  (例)_PixelTest(10,20,G)
    グラフィックスVRAMの(10,20)のカラー値を読み取ります。

 ・0x 0bで始まる16進数、2進数表記のテキスト->g1m変換に失敗していたのを修正
  しました。
  (例)0x1000
    x1がコマンドのx1に変換されてました。

 ・エディタの行間の空いたフォントでの反転選択時の隙間を修正しました。

 ・エディタのミニミニフォントの16行表示を15行表示としました。変更後の表示は以下のとおりです。
  -標準フォント(18x24ドット)7行表示 固定ピッチ 
  -ミニフォント(12x18ドット)9行表示 固定ピッチ 
  -ミニフォント(?x18ドット)9行表示 プロポーショナル
  -ミニフォント(12x17ドット)10行表示 固定ピッチ     (※追加)
  -ミニフォント(?x17ドット)10行表示 プロポーショナル  (※追加)
  -ミニミニボールド(9x13ドット)13行表示 固定ピッチ    (※追加)
  -ミニミニボールド(?x13ドット)13行表示 プロポーショナル (※追加)
  -ミニミニ標準  (8x13ドット)13行表示 固定ピッチ    (※追加)
  -ミニミニ標準  (?x13ドット)13行表示 プロポーショナル (※追加)
  -ミニミニボールド(9x11ドット)15行表示 固定ピッチ    (※追加)(※修正)
  -ミニミニボールド(?x11ドット)15行表示 プロポーショナル (※追加)(※修正)
  -ミニミニ標準  (8x11ドット)15行表示 固定ピッチ    (※追加)(※修正)
  -ミニミニ標準  (?x11ドット)15行表示 プロポーショナル (※追加)(※修正)
  -超ミニフォント (6x10ドット)17行表示 固定ピッチ    (※追加)
  -超ミニフォント (6x8ドット)21行表示 固定ピッチ    (※追加)  
  
 ・エディタで以前の画面が出てくる不具合を修正しました。
 ・テクsとからの変換時にプログレスバーを表示するようにしました。
 

Ver 0.40α
(ミニミニフォント追加+エディタパーフォーマンス改善版)
 
・Textコマンドにおいて、ミニミニフォント表示(標準およびボールド)、およびFX版の
  フォントを使う超ミニフォントをサポートしました。
  (表示可能なコードはASCIIコード+αとなります。)
  (書式)Text Y,X,"文字列”or数式 [,N/O/R/V],M
  (書式)Text Y,X,"文字列”or数式 [,N/O/R/V],MB
  (書式)Text Y,X,"文字列”or数式 [,N/O/R/V],X
  (例)Text 10,20,"ABC",,M
   (X:20,Y:10)座標よりミニミニフォントで"ABC"と表示します。
  (例)Text 10,20,"ABC",,MB
   (X:20,Y:10)座標よりミニミニボールドフォントで"ABC"と表示します。
  (例)Text 10,20,"ABC",,X
   (X:20,Y:10)座標より超ミニフォントで"ABC"と表示します。

 ・エディタにミニミニフォントと超ミニフォント表示を追加しました。
  (エディタで選択できるフォント一覧)
   -標準フォント(18x24ドット)7行表示 固定ピッチ 
   -ミニフォント(12x18ドット)9行表示 固定ピッチ 
   -ミニフォント(?x18ドット)9行表示 プロポーショナル
   -ミニフォント(12x17ドット)10行表示 固定ピッチ    (※追加)
   -ミニフォント(?x17ドット)10行表示 プロポーショナル (※追加)
   -ミニミニボールド(9x13ドット)13行表示 固定ピッチ    (※追加)
   -ミニミニボールド(?x13ドット)13行表示 プロポーショナル (※追加)
   -ミニミニ標準  (8x13ドット)13行表示 固定ピッチ    (※追加)
   -ミニミニ標準  (?x13ドット)13行表示 プロポーショナル (※追加)
   -ミニミニボールド(9x10ドット)16行表示 固定ピッチ    (※追加)
   -ミニミニボールド(?x10ドット)16行表示 プロポーショナル (※追加)
   -ミニミニ標準  (8x10ドット)16行表示 固定ピッチ    (※追加)
   -ミニミニ標準  (?x10ドット)16行表示 プロポーショナル (※追加)
   -超ミニフォント (6x10ドット)17行表示 固定ピッチ    (※追加)
   -超ミニフォント (6x8ドット)21行表示 固定ピッチ    (※追加)
  (※ミニミニフォントにはASCIIコード+αしかないので、不足分は超ミニフォントで穴埋め
   してあります。今後足りないフォントを実装する予定です。)
  (※フォントの切り替えはセットアップ以外にも暫定仕様として[SHIFT]+[左右カーソル
   キー]で上記の順に変更できるようになっています。)

 ・エディタの背景色の設定ができるようになり、カーソル移動、スクロール速度がが従来比
  50%アップしました。(この変更により反転表示機能は削除しました。)

 Ver 0.39α (コメント、If、Switchババグ修正版)
 ・コメントとIfコマンド、Switchコマンドがそれぞれ32個を越えるとジャンプ先に不具合が出
  ているのを修正しました。
 ・[AC]による一時停止からの再開で画面の色が変わってしまう不具合を修正しました。
 ・デバック時にステータス情報が現在の設定になっていなかった不具合を修正しました。
 ・引数無しのGosubに返り値がある場合に代入に失敗していた不具合を修正しました。
  (例) Gosub A→B
    Disp B
    Stop
    Lbl A
    Return 1
 ・エディタでステータスラインに行番号表示するようにしました。
 ・行番号が3桁表示までだったのを4桁に増やしました(端が欠ける場合があります)。
<目次に戻る>
  
Ver 0.38α (テキスト変換修正版)
 ・アンダーバーより始まる拡張変数名やラベル名がテキストからの変換でコマンド名に変換
  されてしまうのを修正しました。  
 ・外字/カナ文字表示でシステムエラーになることがある不具合を修正しました。
 ・高分解能 1/32768sタイマーが?コマンドと一時停止コマンドでルセットされていなかった
  不具合を修正しました。
  
 ・文字のASCIIコードを取得するStrAsc( コマンドを追加しました。
   [SHIFT]+{VARS](PRGM)-[F6]-[F6]-[F3](ExStr)-[F6]-[F6]-[F2])StrAsc)
  (例) StrAsc("Ascii")
   文字列先頭の ’A' のASCII文字コード 65(0x41) が返ります。
 ・StrLen(、StrCmp(、StrSrc( コマンドにおいて閉じ括弧を読み飛ばししすぎていた不具合を
  修正しました。
  (例) (10-StrLen("ABC"))*2
   正しい値は (10-2)*2 で 14 になる筈が、閉じ括弧が一つ飛ばされて (10-StrLen("ABC")*2
   と解釈されて 4 となっていました。
 

<目次に戻る>


C.Basic for CG プログラミングのための役立ちツール

RGB指定による色確認プログラム - Check RBG Color (Ver 1.4c / 1.5a)
 [2018/03/25] マイナーアップデート  (C.Basic for CG Ver 0.44α 以降が理想的です)
  ・ 有る条件下で、[▲] / [▼] を押してもRGB値が変わらない不具合を修正
  ・[▲] / [▼] 長押しでのRGB値連続変化を高速化しました。

 ※ C.Basic for CG で作成(アドインではありません)
 ※ C.Basic for CG Ver 0.34α 以降を使用のこと
  ダウンロード: RBG4c.zip / RGB5a.zip
  C.Basic for CGRGB( コマンドで実際の色を調べる
  プログラムの説明:プログラムライブラリ - RGB指定による色確認プログラム

  ※ 24bit Color バージョンの Ver 1.4c の画面
  RGB4c_Txt_Mode.png  RGB4c_Grph.png

  16 bit Color バージョンの Ver 1.5a の画面
  RGB5a_Txt_Mode.png  RGB5a_Grph.png


OS内蔵ファンクションキー探索プログラム - Check System F-Key

 ※ C.Basic for CG で作成(アドインではありません)
   [2017/12/09 アップデート] 本プログラム自体で、システムファンクションを利用
  ダウンロード Ver1.1: SysFunc.g3m   (ファンクション文字に文字列を利用)
   ダウンロード Ver1.2: SysFunc2.g3m (システムファンクション番号利用)
  C.Basic for CGFKeyMenu( コマンドで呼び出せるSystem Function Key# を調べる
  1. 画面左下に システムファンクションキーを表示する
  2. カーソルキーで システムファンクションキー#をスキャンする
   - カーソルキーの長押しで連続スキャン
   - 左右 / キー (◀▶) で1づつ Step スキャン
   - 上下 / キー (▲▼) で50刻みの Skip スキャン
  3. [F4](Input)[EXE] キーで数値の入力
  4. [F5](Help) で使い方説明
   SysFunc 
   Ver 1.1、ファンクションメニューに文字列を利用

   SysFunc2
   Ver 1.2、ファンションメニューに、システムファンクション番号を利用

   C.Basic for FX 用 (fx-9860Gシリーズ用) に移植しました SysFunc2.g1m 





随時、追加・追記します。



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


 



keywords: fx-CG50、fx-CG20CasioBasic、プログラム関数電卓、C.Basic、C:Basic

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


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

C:Basic - Top Page

C:Basic - Add-In Casio Basic

Update and correction may be made at any time without notice.

1st: 18th Dec. 2015
Updated: 1st Mar. 2018

About C:Basic

C:Basic is an upper comatible Casio Basic which is provided as an Add-In for Casio fx-9860GII USB POWER GRAPHIC 2 (SH4A CPU model). The C:Basic will provide fast interpreter and compiler version. At this moment only interpreter is ready as alpha version., so we call the interpreter version as C.Basic (single dot).

Casio original Casio Basic is a minimal programming language working in limited hardware of calculator, but it's a practical language allowing us to enjoy 'Structured Programming'. Old fans of Programmable calc and poket computer who used to enjoy Basic programming well know that the old Basic requires line number. Unlike such old Basic, current Casio Basic can be categorized as new Generration, so we define current Casio Basic is Caso Basic New Generation. The Casio Basic is very easy-to-use language and you can create programs on your calc only, no PC is required.

You can also create Add-In programs which can be built on your PC with C language SDK and the Add-In runs much faster than the original Casio Basic. Comparing with Add-In, the Casio Basic is very slow to compute complecated calculation with high comlexity and to draw bitmap graphics. In order to improve such weak point of original Casio Basic, we started development of C.Basic (interpreter first) which is compatible with Casio Basic. Currently it gives you much faster computing speed in factor of 10 or 20 than original Casio Basic. Now we know C:Basic (compiler version) is capable to run x10 or more fasterr than interpreter version of C.Basic.

The C:Basic Project is driven by sentaro21 (author of this Add-In), Krtyski (owner of this blog, testing, making sample programs, preparing User's Guide and Command Reference) and some fans of C.Basic.



▋ Latest Test Version of C.Basic
NOTE: This is still an alpha version, so it must includes bugs and there is a possibility to destroy data in your calc (in this case you may need to restart or reset your calc). So it's highly recommneded to make backup of your data before trying C.Basic.



Overclock Add-In: Ftune2

To enjoy fast operation, an over-clock Add-In,
Ftuen2 is recommended to use with C.Basic.
Review following pages for reputation of this program;
-
@ Unversal Casio Forum
-
@ CEMETECH
-
@ TI-Planet

I have used this Add-In over 1 year, there is no problem found so far. Ftuen2 has well considerred safwty features, so it unlikely damages your calc. But please make backup of data of your calc for sure.

Please download Ftune2 for Casio fx-9860GII POWER GRAPHIC 2 (SH4A model), not other editions.



Potential of C.Basic & C:Basic

Let me show you capability of C.Basic and C:Basic with sample program(s).

Conway's Game of Life

C.Basic is upper compatible with original Casio Basic, and has some extended commands and language functions.

If you want to make a fast bitmap graphics program with original Casio Basic, I can say it's reckless try. But with C.Basic you can enjoy programming of Conway's Game of Life as a good example.



- Download:
Game of Life Ver 0.73

To get this speeed, C.Basic Ver 0.83 or later version is requred.

- Download latest version of C.Basic:


In this video, clock is tuned up to 236MHz by Ftune2.

- Download:
Ftune2
   Please be careful to download an edition for Casio fx-9860GII USB POWER GRAPHIC 2 (SH4 model).

=====

To evalaute capability of C:Basic (compiler version), most frequently porcessd codes of Game of Live Ver 0.73 is replaced by a special command "DotLife" to make the codest run at native code speed. 



As you see, it's much faster in factor of 10 until getting to generation 517. Now we believe fully native code by C:Basic (compiler version) should acheive a bit faster computing speed than this case.



How to Use C.Basic

  Installtion of C.Basic
  Check C.Basic readme
  Check of C.Basic version
  Start up C.Basic
  Copy a program in Main Memory to Strage Memory to run in C.Basic
  Copy a program in Storage Memory to Main Memory to run in original Casio Basic
  Make a New program and Edit it
  Cut & Paste in program Editor
  Updating a program source of Prog01 to Prog02
  Setup function of C.Basic
  Run a program
  Use Favorite Program List function
  Refer and Initialze Variables
  Refer and Initialze Matrix/Array
  Refer and setup ViewWindow setting
  How to input commands



C.Basic Command Reference







▲Back to Top



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

C.Basic for CG 開発が始動

アドイン版 Casio Basic - C.Basic for CG
<トップページ>

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

2017/11/20
最終更新 2018/02/18

C.Basic for CG Ver 0.38α 以降は Part 2 に移動しました

[2017/01/31] C.Basic for CG Ver 0.37α がマイナーアップデート


はじめに

完成度の高い fx-CG50 が登場し、この機種で走る アドイン版 Casio Basic - C.Basic for CG がついに公開されました。純正Casio Basic の g1m ファイルや g3m ファイル、そして C.Basic for FX (従来の fx-9860Gシリーズ版) の g1m ファイルも実行できるように進められています。

なお今のところアルファ版ですが、作者の sentaro様を皆で応援し、作者とユーザーの情報交換を行うために、このエントリーを作りました。

[2017/11/25 追記] fx-CG10 / CG20 は、面表示が遅すぎるために(特にグラフィックス画面)、プログラミング向きでなくあまり使っていなかったのは私だけでないと思います。ところが、C.Basic for CG が  fx-CG10 / CG20 に対応したことで、グラフィックス描画が超高速化したという喜びの声があります。fx-CG10 / CG20 を死蔵させていた方に朗報です。

[2017/11/27 追記] fx-CG10 / CG20 の動作全体を高速化させるチューンアップツール - Ptune2 を利用している場合、C.Basic for CG が起動できない、不安定になるという問題がありました。従来の Ptune2 (Ver 1.11) の設定を変更 (このコメントおよび以降の解消事例のコメント参照) すれば問題は解消できますが、もっと楽に殆ど何もせずに解消させるための Ptune2 Ver 1.20 が公開されました。ノーマルクロック時にC.Basic for CG を起動すると、主に自動的にクロックをfx-CG50 相当の 118MHz に上げ、その他の設定も変更するようになります。


目 次

最新版のダウンロード
  - 更新履歴 (概要) 
  - 現行アルファバージョンについて

動作確認されたプログラム

C.Basic for CG プログラミングのための役立ちツール




最新版のダウンロード

   C.Basic for CG Ver 0.36α(アルファ)版
  • インストール方法はこちら 
  • 取扱説明書:同梱テキストファイル参照。ReadmeCG_J.txt (C.Basic開発環境の使い方)、 ManualFX_J.txt (C.Bbasicコマンドリファレンス)、Command_List_CG.txt (C.Basic コマンド一覧と呼び出しキー操作) が含まれています。なお ManualFX_J.txtC.Basic for FX Ver 1.64β 同梱と同じもので、この記載仕様が当面の開発目標です。殆どのコマンドは実装済みですが、今はユーザーによるバグ出し作業中です。
更新履歴 (概要)
 Ver 0.37α (1/32768高分解能タイマー追加+短縮行列再初期化バグ修正版)
 ・A1、B2 形式の端出行列アクセスでの行列再確保の不具合を守勢しました。
  
 ・タイマー変数のTicksと%に高分解能 1/21768sタイマーを追加しました。コマンド後に%を付けると
  分解能が 1/32768s になります。
  (例) Ticks%
  (例) Ticks%Wait
  (例) %%
  (例) %%Wait
  
 ・プログラム実行の時間計測機能で高分解能1/32768sタイマーを選択できるようになりました。
  (セットアップで設定します。)
  小数点二か4桁まで計測できます。
  
 ・[F5](CHAR)^[F6] 外部フォント表示の選択で外字とカナに加えてASCII文字を加えました。
  
 ・エディタで[SHIFT]-[6]を押すとRGB(コマンドのカラーコードを入力する機能を追加しました。
 ・エディタで[SHIFT]-[3]を押すとGetkeyコマンドのキーコードを入力する機能を追加しました。
 ・[AC]キーによるBreakの有効無効をプログラム内で出来るようにしました。
  (例) "#Break0 // [AC]キー無効  
  (例) '#Break1 // [AC]キー有効 (デフォルト)
  

 Ver 0.36α (自由な名前でフォントSave/Load + FX版フォント追加+メモリリーク修正版)
 ・外部フォントの読み込みでバッファの解放が出来ていなかった不具合を修正しました。
  
 ・g1mモードでは標準フォントも従来のfxシリーズの標準フォント(6x8)で表示するように変更しました。
  (セットアップでEditextFontをオンにするとg1mモードではエディタの表示も重ら宇フォントに変わります)
  
 ・フォントファイルのセーブ/ロードにおいて任意のファイル名が津空けるようになりました。
  (書式) BmpLoad @GL"ファイル名"
  (書式) BmpLoad @GM"ファイル名"
  (書式) BmpLoad @KL"ファイル名"
  (書式) BmpLoad @KM"ファイル名"
  (書式) BmpLoad @AL"ファイル名"
  (書式) BmpLoad @AM"ファイル名"
  (例) BmpLoad @GL"MYFONTL"
   MyFONTL.bmpが外字標準フォントとして読み込まれます。
  (例) BmpLoad @GM"MYFONTM"
   MYFONTM.bmpが外字ミニフォントとして読み込まれます。
  
  (書式) BmpSave @GL"ファイル名"
  (書式) BmpSave @GM"ファイル名"
  (書式) BmpSave @KL"ファイル名"
  (書式) BmpSave @KM"ファイル名"
  (書式) BmpSave @AL"ファイル名"
  (書式) BmpSave @AM"ファイル名"
  (例) BmpSave @GL"MYFONTL"
   現在の外字標準フォントを"MYFONTL.bmp"としてセーブされます。
  (例) BmpSave @GM"MYFONTM"
   現在の外字ミニフォントを2MYFONTM.bmp"としてセーブします。
  

 Ver 0.35α (バグ修正、複数文字変数+Const拡張版)
 ・StrSrc( コマンドにおいて、検索開始位置を指定した場合に結果が1つづつズレていたのを修正しました。
  
 ・アンダーバーより始まる複数英数字名(8文字まで)の変数が使えるようになりました。
  従来の1文字変数とは独立したエリアに確保される変数ですがプログラム開始時には常に初期化されます。
  使える変数は26個までとなっています。実数変数と整数変数は別の値を保持できますが、
  同じ名前で同時に確保されます。
  [SHIFT]+[F1]の変数リストで[F1]を押す度に大文字変数、小文字変数、アンダーバー変数が表示されます。
  {例) '#CBDBL
  (例) 123.456->_ABC
  (例) _ABC+_ABC%->_RESULT
   ※ _RESULTの値は579.456となります。
  
 ・RowSize(、ColSize( が逆になっていたのを修正しました。
  (g1mおよびg3mファイルでは修正する必要はありません。テキストファイルで帆村している場合は、
   修正する必要があります。)
  
 ・変数を定数仕様限定にするConstコマンドを追加しました。[OPTN]-[F3](extd)-[F3](Const)
  代入時にConstを前置すると変数が定数として扱われ、以後代入できなくなります。
  (例) 123->Const A
  (例) 123->Const _ABC
  (例) 456->A
   同じプログラムで変数の値を変更しようとするとエラーになります。
  
 ・文字列分割するStrSplit( コマンドを追加しました。
   [SHIFT]-[VARS](PRGM)-[F6][F6]-[F3](ExStr)-[F6][F6]-[F1](StrSplit)
  (書式) StrSplit("文字列","区切り文字"[,開始位置])
   結果はMatAnsに文字列として返ります。
  (例) StrSplit("123,4567,89",",")
   MatAnsの結果は、["123","4567","89"] となり、ココの要素を読み出すには次のように
   アクセスできます。
   $Ans[1]="123"
   $Ans[2]="4567"
   $Ans[3]="89"
 ・変数の定数仕様追加にともなって、Swith~Case~SwitchEnd でのCaseの指定は変数指定も
  可能になりました。
  

 Ver 0.34α (セットアップ設定変更版)
 ・セットアップの設定がプログラムで変更されないようにする設定を追加しました。
  SetupRecoverの項目でオンオフで設定します。
  影響を受ける設定は純正互換の以下の設定になります。
   Angle
   DrawType
   Coord
   Grid
   Axes
   Label
   Derivative
   Plot/Line-Color
   Sketch Line
   Display Fix/Sci/Norm/Eng

  これ以外のC.Basicで拡張した設定はプログラムで変更されることはありません。
 ・Prog - Return において、Returnコマンドでの返り値が無効になる不具合を修正しました。
 ・ファイルリスト表示でステータスラインに現在日時を表示するようにしました。
  (リアルタイム表示ではなく何かアクションした時の更新になります。)
 ・外字のテキスト変換に失敗していたのを修正しました。
 ・フォントデータをセーブ、ロードするBmlLoad @/BmpAave @コマンドにおいて、
  フォントファイル番号を指定する場合に不具合が出ることがあったのを修正しました。
  

 Ver 0.33α (Getkey1/2計測リセット+楕円の回転+Paintコマンド追加版)
 ・ML系コマンドに_Paintを追加しました。[SHIFT][F4][(SKETCH)-[F3](ML)-[F6][F6][F6]-[F5](Paint)
   http://pm.matrix.jp/CB/CBASICCG033.zip
   こちらのPaintサンプルプログラムをほぼそっくりそのまま利用させて頂いています。
  (書式) _Paint x,y,Color[,確率/透過率]
  (例) _Paint 100,100,1
   座標(100,100)を始点にして描画色で塗りつぶします。
  (例) _Paint 100,100,0
   座標(100,100)を始点にして背景色で塗りつぶします。
  
 ・ML系コマンドの楕円描画コマンドの _Elips、_FillElipsにおいて回転された楕円の描画をサポートしました。
  (書式) _Elips X,Y,Rwidth,Rheight,Color[,確率/透過率][,回転角(度)]
  (書式) _Elips 100,100,80,40,1,,45
   座標(100,100)を中心に横径80ドット、縦径40ドットの楕円を45度傾けて描画します。
  
 ・Getkey1/2実行後に時間計測をリセットするように仕様変更しました。
 ・ReadmeCG_J.txt / ManualCG_J.txt を同梱しました。
 ・Getky1/2実行中は時間計測を一時停止するように仕様変更しました。
  セットアップにて計測の一時停止または計測のリセット&リスタートを選択できます。
  関連コマンドとして、
  (書式) '#GetKeyC
   デフォルトの計測一時停止、継続モードです。
  (書式) '#GetKeyR
   Getkey1/2実行後に計時がリセット&リスタートします。
 ・セットアップでステータスラインが表示されていなかったのを修正しました。
 ・Lbl もAlias機能が使えるようになりました。併せて AliasVarのコマンド名称をAliasに改訂致します。
  (例) Alias A = _ABCD
  (例) Alias Mat A=_ABCD
  (例) Alias Lbl A=_ABCD
 ・MenuコマンドにFX版互換表示を追加しました。コマンド直後に"@"を付けるとFX版互換表示になります。
  (書式) Menu @"<メニュータイトル>","<項目1>",<ラベル文字1>,"<項目2>",<ラベル文字2>[,"<項目n>",<ラベル文字n>...]
  
 ・Ticks (%) のタイマー変数への代入で内部時計を変更しないようにしました。
  (例) 0->Ticks
   従来は内部時計も 00:00:00に初期化されていましたが、C.Basicのタイマー変数だけを0にリセットします。
   この仕様変更により時計の変更は DATE、TIMEコマンドのみとなります。
  
 Ver 0.32α (Menuコマンド互換化+透過率改善版)
 ・MenuコマンドをCGシリーズの純正互換に変更しました。
  タイトルの色はMenuコマンド直前の色指定が有効になります。
  メニュー項目はPlot/Line-Colorの色設定が有効になります。
  メニュー背景はBacl-Colorで指定している色になります。
  
 ・BmpLoadの透過指定がバグっていたのを修正しました。
  透過率の指定は0~1の範囲の変数または100%までの整数指定に変更しました。
  (書式) BmpLoad("BMPファイル名"),X,Y,1,透過率 (0.0~1.0)
  (書式) VmpLoad("BMPファイル名"),X,Y,1,%透過率 (%0~%100)
   (X, Y)座標を始点として背景とヨウ化率で合成してロードします。
  (書式) BmpLoad("BMPファイル名"),X,Y,0,透過率
   (X, Y)座標を始点として背景だけにロードします。
  (例) BmpLoad("TEST"),100,50,1,%50
  (例) BmpLoad("TEST"),100,50,1,0.5
   (100, 50)座標よりTEST.bmpファイルを透過率10%でロードします。
  (例) BmpLoad("TEST"),100,50,0,%25
  (例) BmpLoad("TEST"),100,50,0,0.25
   (100, 50)座標よりTEST.bmpファイルを透過率25%で背景部分だけにロードします。
  
 ・ML系コマンドのパラメータのcolor指定において透過率指定を追加しました。
  コマンドの描画色と画面を透過率で合成して表示します。
  color指定地は5になっています。color指定のあるML系コマンドで使用できます。
  (書式) _Pixel x,y,5,透過率 (0.0~1.0)
  (書式) _Pixel x,y,5,%透過率 (%0~%100)
  (例) Red _Pixel x,y,5,%50
  (例) Red _Pixel x,y,5,0.5
   画面の色と50%赤を合成して描画を行います。
  
 ・Normコマンドが正常に動作していなかった不具合を修正しました。

 ・Str( コマンドの表記をToStr( に変更しました。
  従来プログラムで Str( を使用していても g1m/g3m形式の場合は何も修正する必要はありません。
  テキスト保存されている場合は内部形式への変換時に自動変換されます。
  再保存の時には ToStr( 表記に変わりますので、以前のC.Basicでテキスト形式で読み込ませると
  エラーになります。
  プログラムの保存はテキストだけでなく g1m/g3m形式での保存もお勧めします。
  
 ・Sprintf( コマンドのバグを修正しました。
  
 ・ML系コマンドの_Bmp表示系コマンドをCGモード対応しました。
  _Bmp
  _Bmp8
  _Bmp16
  _BmpZoom
  _BmpRotate
  _BmpZmRotate
  g3mモードではデフォルト16ビットカラー描画ですが、1ビット行列を指定すると
  1ビットマップの描画になります。
  

 Ver 0.31α (AliasVar拡張 & IsExist拡張版)
 ・1文字変数を任意の英数字名の別名で使えるようにAliasVarを拡張しました。
  アンダーバーより始まる変数名が使えます。
  変数の長さは8文字以内で英数字とアンダーバーが使えます。
  (例) AliasVar a=_abc_de
  (例) _abc_de+1->_abc_de
   小文字変数aを_abc_de表記で使えます。
 ・LiatとMatの表記を変更しようとした場合にシステム絵r-亜になっていた不具合を修正しました。
 ・ファイルリストにおいてストレージメモリの残量を表示できるようになりました。
 ・IsExistコマンドでファイルリストを取得できるようになりました。
  (書式) IsExist("*.拡張子")->ファイル数
   Mat Ans:拡張子が"bmp"のファイルがAns行列に作成されます。
   リストはアルファベット順にソートされます。
  (例) IsExist("*.bmp")->N
    $Mat Ans[3]
   リストの3番目のファイル名を文字列として表示します。
   N:ファイル数が返ります。
  (用例) BMPフォルダにある全てのBMPファイルのリスト表示するサンプルプログラム
   --------------------------------------------
   IsExist("/BMP/*.bmp")->N
   N=0⇒Stop
   For 1->I To N
   Disp $Mat Ans[I]
   Next

   --------------------------------------------
 ・Textコマンドのカラー指定に不具合があったのを修正しました。
 ・"#"をコメント色から外しました。


 Ver 0.30α (3品から音が出るかも試練版)
 ・Beepコマンドを追加しました。@SHIFT]+[VARS](PRGM)-[F6]-[F4](I/O)-[F6]-[F5](Beep)
  (書式) Beep 周波数,継続時間(ms)
   3Pin出力より指定周波数の矩形波を出力します。
  (例) Beep
   1KHzの矩形波を0.5秒間、3Pinより出力します。
  (例) Beep 440,1000
   440Hzの矩形波を1秒間、3Pinより出力します。
 ・Textコマンドの表示位置が順背英位置よりも1ドット右下にずれていたのを修正しました。
 ・ReadGraph( と DotGet( コマンドにおいて、行列の型指定で取得ビット数を1ビットか16ビットかを
  選択できるようになりました。
  (g1mモードでnデフォルトは1ビット、g3mモードでのデフォルトは16ビットになっています。)
  (例) ReadGraph(0,0,15,23)->Mat A
  (例) DotGet(0,0,15,23)->Mat A
   (0,0)-(15,23)の領域を16ビットカラーで行列Aに取り込みます。
  (例) ReadGraph(0,0,15,23)->Mat A.P
  (例) DotGet(0,0,15,23)->Mat A.P
   (0,0)-(15,23)お領域を1ビットモノクロで行列Aに取り込みます。
  
 ・スタンダード入力モードにおいてStrLwrコマンドの入力ができなかった不具合を修正しました。
 ・エディタの選択時のリバース表示を修正しました。
 ・外部フォント導入時に標準サイズフォントにおいてキャ作田-コード 0x00~0xFが表示されなかった不具合を
  修正しました。

 ・デフォルトの外部フォントをIPAフォントに変更しました。
  @LFONTK0 カタカナフォント(標準)
  @MDONTK0 カタカナフォント(ミニ)
  @LFONTK1 ひらがなフォント(標準)
  @MFONTK1 ひらがなフォント(ミニ)
  @LFONTG0 外字サンプルフォント(標準)
  @MDONTG0 外字サンプルフォントの(ミニ)
  使用例) NewYear
  

 Ver 0.29α (純正ASCIIフォント差し替え可能になった版)
 ・フォントデータのせー図が不安定だった不具合を修正しました。
 ・英数字のASCIIキャラクタのフォント差し替えができるようになりました。
  デフォルトでのファイル名はファ維持同様にそれぞれ、
  @LFONTA.bmp  (ASCII標準フォント)
  @MFONTA.bmp (ASCIIミニフォント)
  となっております。
  コードで 0x20~0x7Eまでの95キャラクタの差し替えが可能です。
  サンプルフォント(デフォルト、IMPACTを同梱しました。)
  
 ・フォントデータを読み出すGetFontにおいて、デフォルトの内蔵フォントを読み出す@オプションを
  追加しました。
  (書式) GetFont(@"フォントキャラ")->Mat A
  (書式) GetFontMini(@"フォントキャラ")->Mat A
  (例) GetFont(@"A")->Mat A
   内蔵フォント"A"のビットマップデータ(18x24)が1ビット行列A[18,24]に入力されます。
  
 ・エディタのフォントを外部フォントに切り替えられるようにしました。セットアップより変更できます。
 
 ・外部フォントの切替を行うための、BmpLoadにFontロードオプションを追加しました。
  外部フォントがそれ以降使用されます。
  (書式) BmpLoad @G[フォントファイル番号]
  (書式) BmpLoad @K[フォントファイル番号]
  (書式) BmpLoad @A[フォントファイル番号]
   フォントファイル番号は0~9が指定できます。
  (例) BmpLoad @A1
   @LFONTA1.bmp  (ASCII標準フォント)
   @MFONTA1.bmp (ASCIIミニフォント)
   のフォントファイルが外部ASCIIフォントとして読み込まれます。
   
 ・フォントファイルのせー図において0~9までのオプションを追加しました。
 ・BmpSaveにフォントデータのセーブ機能を追加しました。
  (書式) BmpSave @G[フォントファイル番号]
  (書式) BmpSave @K[フォントファイル番号]
  (書式) BmpSave @A[フォントファイル番号]
  (例) BmpSave @G2
   @LFONTG2.bmp  (外字標準フォント)
   @MFONTG2.bmp (外字ミニフォント)
   現在の外字フォントを外字フォント2としてセーブします。
  ※今回のバージョンアップではサンプルフォントその1として下記のフォントファイルを同梱しています。
   その 0 は標準のデフォルトフォントとなっております。これらは pFONTフォルダに入れておいてください。
   @LFONTA0.bmp  (ASCII標準フォント純正)
   @MFONTA0.bmp (ASCIIミニフォント純正)
   @LFONTA1.bmp  (ASCII標準フォントIMPACT)
   @MFONTA1.bmp (ASCIIミニフォントIMPACT)
   (例) プログラムでフォントを切り替えるには、下記1行だけでIMPACTに切り替わります。
    BmpLoad(@A1)
   (例) 元のフォントに戻すには、
    BmpLoad(@A0)
  
 ・Getkey1/2/3において、[SHIFT]+[OPTN]を[OPTN]と判定出来るようになりました。
 ・Plot/Line-Color直後のテキスト表示系コマンドが色変更の影響を受けていたのを修正しました。
 ・Menuコマンドで色指定がコマンド終了後にデフォルト=黒に戻る用意修正しました。

 Ver 0.28α (phontコマンド追加版)
 ・フォントデータの読み出しと設定を行う GetFont( とSetFont( を追加しました。
  (書式) GetFont(フォントコマンド)->Mat A
  (書式) GetFontMini(フォントコード)->Mat A
  (例) GetFont(0x41)->Mat A
   フォント!A!のビットマップデータ(18x24)が1ビット行列Mat A[18,24)に入力されます。
  (例) GetFontMini(0xFF80)->Mat A
   外字ミニフォントの一番目のビットマップデータ(16x24)が1ビット行列Mat A[16x24]に入力されます。
  [書式) SetFont フォントコード,Mat A
  (書式) SetFontMini フォントコード,Mat A
  (例) SetFont 0z41,Mat A
   Mat Aのフォントデータがフォント!A!のデータとして設定されます。
  (例) SetFontMini 0xFF80,Mat A
   Mat Aのフォントデータが外字ミニフォントの一番目のデータとして設定されます。
  
 ・BmpSaveにフォントデータのセーブ機能を追加しました。
  (書式) BmpSave @G
   カレントフォルダにファ外字フォント (標準、ミニ) をセーブします。
   ファイル名は@LFONTG.bmp (標準)
   ファイル名は@MFontG.bmp  (ミニ)
  (書式) BmpSave @K
   カレントフォルダにカナフォント (標準、ミニ) をセーブします。
   ファイル名は@LFONTK.bmp (標準)
   ファイル名は@MFONTL.bmp (ミニ)
  (書式) BmpSave @@G
  (書式) BmpSave @@K
   @Fontフォルダにセーブします。
  
 ・デフォルトフォントファイルを変更しました。
  @LFONTG.bmp  (外字標準フォント)
  @MFONTG.bmp (外字ミニフォント)
  @LFONTK.bmp  (カナ標準フォント)
  @MFONTK.bmp (カナミニフォント)
  
 ・大文字と小文字のRenameで元のファイルがまた消えてしまう不具合を修正しました。
 ・MLコマンドの_Hrizontal、_Vertical、_Polygon、_Rect(、_Elips(、_ElipsRect( において、
  前回MLコマンドのWidth指定が継続していたのを修正しました。
 ・BMPファイルのRenameとCopyに対応しました。
 ・ファイルモードでのBMPファイルの表示の不具合を修正しました。
 ・ReadGraph(、DotGet コマンドにおいて、g3mモードでも1ビットサイズの行列への取り込みが
  できるように修正しました。
  (例) ReadGraph(1,1,16,24)->Mat A.P
  (例) DoGet(1,1,16,24)->Mat A.P
 ・BmpSaveコマンドにおいて、g3mモードで1ビットサイズの保存が出来るようになりました。
  (例) BmpSave "TEST",Mat A
 ・RectおよびFillRectがFX版解像度対応のままになっていたのを修正しました。
 ・行列の初期化において、既に確保された行列領域を再初期化する場合に0栗あしないように
  することが出来るようになりました。
  (ただし、最初のその行列で仕様する最大領域を確保しておく必要があります。)
  (書式) {12,20}->Dim Dim Mat A
  (例) [[1,2,3][4,5,6]]->Mat A
    {2,2}->Dim Dim Mat A
   Mat A の内容は [[12][3,4]]となります。 
  

 Ver 0.27α (フル画面モード正式使用版)
 ・フル画面に正式対応しました。
  副作用として、C.Basic実行時の?コマンド入力時に左上のシフト状態のステータス表示が
  機能しなくなります。
 ・GetRGB( コマンドを追加しました。VRAMのカラー値をR、G、B に分解します。
  (書式) GetRGB(カラーコード)
   結果はList Ans に帰ります。
  (例) Get(65535)
   List Ans = {248,252,248}
   R = List Ans[1]
   G = List Ans[2]
   B = List Ans[3]
 ・Renameで元のファイルが残っていた不具合を修正しました。
 ・RenameとCopyで新しいファイルの箇所にカーソル移動が出来てなかった不具合を
  修正しました。
  

 Ver 0.26α (外字フォント対応版)
 ・カナ文字と外字フォントを外部のBMPファイルより導入できるようになりました。
  カレントフォルダに次の4つのファイルを置くとフォントが切り替わり、
  外字が使えるようになります。
   LFONTK.bmp  18x24ドット カナ文字フォント
   LFONTG.bmp  18x24ドット 外字フォント
   MFONTK.bmp  最大16x18ドット カナ文字ミニフォント
   MFONTG.bmp  最大16x18ドット 外字ミニフォント
   - フォルダを移動する度にそのフォルダにあるフォントファイルを読み込みます。
   - フォントファイルが存在しない場合は、@FONTフォルダに置かれたファイルを
    デフォルトとして使用します。
   - どこにもフォントファイルが存在しない場合はFX互換の内蔵フォントを使用します。
    フォントファイルのフォーマットは1ビットモノクロBMPファイルとなっています。
  - 標準サイズのフォントは18x24ドットのフォントが横に16個、縦に5つ並ぶフォント
   ファイルになっています。
  - ミニサイズのフォントはプロポーショナルフォントなので、フォントの1ドット上の
   1ラインを横幅検出ラインとし、フォントの上隅の1ドットを開始位置とします。
  - 横に16文字、縦に2行で32文字の外字が使えます。
 ・エディタの検索機能において、検索窓に入力後にコマンド入力ファンクションキーが
  表示されし続けていた不具合を修正しました。
 ・_ClrVramが背景色にクリアされていなかったのを修正しました。
 ・Str変数の増量が127で止まっていた不具合を修正しました。
 ・BatteryStatusコマンドを追加しました。[VAR]-[F3](Extd)-[F6](BatteryStatus)
  (書式) BatteryStatus
   左上隅のバッター-アイコンを表示します。
   数式で使用した場合はバッテリアイコンを表示して現在の転圧値 (V)x100 を返します。
 ・Clip&Paste後にカーソル位置が6行目で固定されていたのを修正しました。
  

 Ver 0.25α (フル画面拡張版)
 ・外枠を色指定できるようになりました。BackColorコマンドに@オプション追加です。
  (書式) BackColor @外枠色指定
  (例) BackColor @Black
  (例) BackColor @RGB(255,128,128)
 ・ML系コマンド仕様時にVRAMの全域を操作&表示対象にしました。
  Y座標系はマイナス方向に拡張して (-24) まで使用できます。
  この変更により、PutDispDD と _SiaspVram コマンドで転送エリアが異なります。
  PutDispDD:転送範囲 (0,0) - (383,191) 純正仕様です。
  _DispVram:転送範囲 (0,-24) - (383,191) 上部ステータスライン分を含みます。
 ・PutDispDD と _DispVram コマンドでLCDへの転送ラインを任意選択できるオプションを追加しました。
  (書式) PutDispDD@開始行,終了行
  (書式) _DispVram@開始行,終了行
   行の範囲は最上部(-24)から最下部(191)までとなります。
   どちらも同様の動作をします。
  (例) PutDispDD@0,23
   Locateでの1行目だけを転送します。
 ・ListとMat@の変数名指定に ( を使うことで数式が使えるようになりました。。
  (例) List (A+1)
   Aが1の場合はList 2を指定したことになります。
  (例) Mat@(A+1)
   Aが1の場合はMat 2、つまりMat Bを指定したことになります。
 ・Renameにおいてファイル名の大文字⇔小文字の変更のみをした場合、
  ファイルが消えてしまう不具合を修正しました。
 ・エディタのミニフォント表示において固定ピッチ表示を選択できるようになりました。
 ・Textコマンドにて固定ピッチ表示のオプションを追加しました。
  (書式) Text Y,X,"文字列" or数式 [.N/O/R/V][.F]
   最後にFオプション追加で固定ピッチになります。
  (例) Text 10,1,"Simple Text"..F
   固定ピッチ(12ドット間隔固定)でミニフォント表示されます。
  

 Ver 0.24α版
 ・テキスト画面にグラフィックス画面を重ねて表示することが出来るようになりました。
  Screenコマンドで設定できます。
  (書式) Screen.O (アルファベットのO)
   テキスト画面で実行するコマンドの背景色がグラフィックス画面になります。
   つまり、テキスト画面にグラフィックス画面が合成表示されます。
  (書式) Screen.N
   通常モードに戻ります。
 ・BmpLoadコマンドで直にVRAMにロードする場合、背景だけをロードしたり透過率を設定できるようになりまた。
  (書式) BmpLoad("BMPファイル名"),X,Y,1,透過率 (0~255)
   (X,Y)座標を始点として透過率 (最大255) でロードします。
  (書式) BmpLoad("BMPファル名"),X,Y,0,透過率 (0~255)
   (X,Y)座標を始点として背景だけにロードします。
  (例) BmpLoad("TEST"),100,50,1,128
   (100,50)座標よりTEST.bmpファイルを透過率10%でロードします。
  (例) BmpLoad("TEST"),100,50,0,64
   (100,50)座標よりTEST.bmpファイルを透過率25%で背景にロードします。
  (使用例)
   テキスト系プログラムの背景にTEST.bmp画像を合成表示するには、
   先ずグラフィックス画面(VRAM)にBMPをロードしておきます。
   ------------------------------
   Screen.G      // グラフィックス画面を選択
   BmpLoad("TEST")   // 画像をロードします
   Screen.O      // 新規オプションはセロでななくてオーです
   ClrText       // テキスト画面クリアで背景に画像が表示されます
   ------------------------------
   以後、テキスト画面の背景には常にグラフィックス画面が重なります。
  

 Ver 0.23α版
 ・BmpLoadコマンドで直にVRAM二ロード出来るようになりました。
  (例) BmpLoad("TEST"),100,50
   (100, 50) 座標よりTEST.bmpファイルをロードします。
   (添付サンプルプログラムを参照してください。)
 ・BmpSaveコマンドで直にVRAmからセーブ出来るようになりました。
  (例) BmpSave "TEST",100,50,200,90
  (100, 50) 座標より (200, 90) 座標までの範囲を24ビットフルカラーBMPファイル"TEST"としてセーブします。
  指定可能な座標置は (0,0) - (383,191)の範囲です。
  (フル画面の保存には1分異常かかる場合があります。)
 ・BMPファイルの読み込める最大サイズを256KNまで増量しました。
  CGシリーズの画面サイズの244ビットフルカラーBMPファイルを読み込めます。
 ・エディタのミニフォントモードのカーソルの幅を太くしました。
 ・Clip&Pasteのバッファ処理を改善 (エラー対策)
 ・Clip&Pasteで範囲指定された行をコメント化、コメント解除の機能を追加しました。
  範囲指定した後に[F5][F6]で機能します。
  

 Ver 0.22α版
 ・エディタのミニフォントモードのパフォーマンスを向上させました。
 ・複数行のペーストをした場合にカーソルが飛ぶ不具合を修正しました。
 ・For~Nextの制御変数のエラーチェックを厳しくしました。
  (実数モードで整数変数を制御変数に使うとエラーになります。)
 ・24ビットフルカラーBmpファイルの読み込みに一部対応しました。
  まだ、大きなファイルの読み込みは未対応です。約160KB以下のファイル限定です。
  (添付サンプルプログラムを参照してください。)
 ・行列編集モードの行列編集でドット編集の出来るモードをCG対応しました。
  表列を表示している状態で[OPTN]キーを押すとドットエディタになります。
  が、カラー値の変更は直接数理入力しか色変更方法がありません。
  

 Ver 0.21α版
 ・実数指数表示を修正しました。
  

 Ver 0.20α版
 ・SDK変更初版
  

 Ver 0.11α版
 ・Save、Loadコマンドのファイル名に文字列変数が使えるようになりました。
 ・カナ文字が表示できなくなっていたのを修正しました。
 ・CG20における自動オーバークロック基準を変更しました。
  ⇒ Ptune2 (fx-CG10/CG20専用)でPutDispのフレームレートが50fps以下の場合に自動オーバークロックします。
 ・MLコマンドの_Pointコマンドが動作しなかったのを修正しました。
 ・バッファーオーバーフロー修正
  

 Ver 0.10α版
 ・コピー&ペーストの不具合を修正しました。
 ・Pixel系コマンド後色が変わってしまっていたのを修正しました。
 ・整数モードにおけるPixel系コマンドでは描画範囲外になる時はエラーにならずに描画されないようにしました。
  

 Ver 0.09α版
 ・PopUpWin(コマンドを拡張しました。関数としての実装に変更になります。数式の中で使えます。
  ・(書式) PopUpWin( n )
   従来の使用です。n行分のポップアップを表示させます。表示のみです。
  ・exit ポップアップ
   (書式) PopUpWin(11,"メッセージ1行目"[,"メッセージ2行目"])
   返り値は常に1です。コマンド終了時に画面が復帰します。
  ・Yes No ポップアップ
   (書式) PopUpWin(10,"メッセージ1行目"[,"メッセージ2行目"])
   返り値が[Yes]:1 [No]:0となります。コマンド終了時に画面が復帰します。
  ・コピー&ペーストで使うバッファ領域の確保に不具合があったのを修正しました。
 ・PopUpWin(コマンドをさらに拡張しました。
  ・画面待避のみ ポップアップしません
   (書式) PopUpWin(0)
  ・待避した画面の復帰のみ
   (書式) PopUpWin(9)
   画面待避バッファはシステムと共通なので、待避壕にポップアップが出るとバッファが上書きされ
   元に戻らなくなるので注意してください。
  

 Ver 0.08α版
 ・?拡張コマンドの入力文字数制限が機能していなかったのを修正しました。
 ・ーDISP-表示とDone表示が通常表示に戻ってしまうのを修正しました。
 ・デバッグモードでテキスト表示が白になる不具合を修正しました。
 ・Locateコマンドの22ヶ溜めが描画される不具合を修正しました。
 ・コメントがあった場合の非互換性を修正しました。
 ・編集画面からファイルリストへ戻る時 [EXIT]キーを離すまで効かないように変更しました。
 ・コピー&ペーストの選択範囲とカーソル位置がずれているのを修正しました。
  

 Ver 0.07α版
 ・CG10/CG20でデフォルトクロックで起動した場合には自動的にCG50相当にオーバークロック
  するようにしました (58MHz->118MHz)。
 ・入力時に画面が壊れるのを修正しました。
 ・検索、Char選択画面がBack-Colorコマンドに影響されるのを修正しました。
 ・FkeyMenu(にシステム内蔵ファンクションを表示できるようにしました。
  (例) FkeyMenu(1,42)
  テキスト画面の1番左側のファンクションメニューエリアに白抜きEDITが描画されます。
 ・中断再開時の[EXE][F1]キーの入力が継続しないようにしました。
  

 Ver 0.06α版
 ・?拡張コマンドの動作をEXEキー押下で終了するように変更しました。
 ・ファンクションキー表示を修正しました。
 ・エディタ等がBack-Colorコマンドに影響されるのを修正しました。
  

 Ver 0.05α版
 ・ポップアップをシンプルに変更しました。
 ・カラー指定で While が使えるようになりました。
 ・べき乗の不具合を修正しました。
 ・CG10/CG20でのPictファイルの不具合を修正しました。
 ・ファンクションキー表示を修正しました。
 ・セットアップの左右キーで最初と最後に移動するようにしました。
  

 Ver 0.04α版
 ・Plotの移動単位を以下の設定の時だけPixelドットに合わせました。(純正非互換となります)
  ViewWindow 1,379,0,187,1,0
 ・g1mモードとg3mモードの切替をプログラム中で出来ます。
  (書式) '#G1M または '#g1m
  (書式) '#G3M または '#g3m
 ・g3mモードの場合にPlotの解像度をデフォルトで1x1ドットに変更できます。
  (書式) '#SketchThin または '#S-L-Thin
  デフォルトに戻すには
  (書式) '#SketchNormal または '#S-L-Normal
 ・Plotコマンドの前にSketchThinを付けると、それ以降のPlotで移動単位および描画が1ドットになります。
  (書式) SketchThin Plot
  (書式) SketchTHin PlotOn
  
 Ver 0.03α版
 ・g3mモードのViewWindowに対応しました。
  
 Ver 0,02α版
 ・CG10/20に対応しました。
  
 Ver 0.01α版
 - 公開初版


現行アルファバージョンについて
既に公開されている fx-9860Gシリーズ用 C.Basic FX Ver 1.64β をベースに fx-CG50 に対応させるべく開発開始した C.Basic for CG は、現在アルファ版 (初期お試し版) です。多くの機能の実装が終わっていますが不完全なものも残っています。動作確認も進んでおり、既にグラフィックス処理の大幅な高速化を楽しめます。

fx-CG20 にも対応したことで、これまで処理が遅くてあまり使えなかった 純正Casio Basicプログラムも非常に高速動作するので、fx-CG20 の利用価値が高まったと言えます。

現行バージョンでは、期待通りに動作しないものは、まだ未完成と考えて下さい。但しバグの可能性もあるので、作者 (sentaro様) に連絡して応援する...というのが当ブログのスタンスです。



動作確認されたプログラム

フラクタル - シダの葉
プログラムの説明とダウンロード (g3mファイル)
 高精細カラー液晶でのピクセル単位での描画が美しく、処理が大きく高速化される

BugTrace ゲーム [2017/11/22 追加]
プログラムの説明
C.Basic for CG 向けに修正したプログラムのダウンロード
◆ 
高精細液晶のピクセル単位での千鳥格子塗りつぶしの大幅高速化を楽しめる

プログラムライブラリ収録のプログラム
プログラムライブラリ収録プログラム (g1m / g3mファイル)
 主にテキストベースのプログラムだが、一部グラフィックス描画も含む

ライフゲーム
プログラムの説明とダウンロード
 fx-9860Gシリーズ用 C.Basic for FX プログラム (g1mファイル)

落ちゲー: ヨコリス
プログラムのダウンロード
 fx-9860Gシリーズ用 C.Basic for FX プログラム (g1mファイル)

アクションゲーム: ドラゴン
プログラムの説明とダウンロード
 fx-9860Gシリーズ等 C.Basic for FX プログラム (g1mファイル)

3D迷路
プログラムの説明とダウンロード
 fx-9860Gシリーズ用純正Casio Basic プログラム (g1mファイル)

もぐら叩き - カラー版
プログラムの説明とダウンロード
 fx-CG50用純正Casio Basic プログラム (g3mファイル)

マスターマインド Ver4 カラー版
プログラムの説明とダウンロード
 fx-CG50用 純正Casio Basic プログラム (g3mファイル)

マスターマインド Ver4 モノクロ版
プログラムの説明とダウンロード
 fx-9860Gシリーズ用純正Casio Basic プログラム (g1mファイル)



C.Basic for CG プログラミングのための役立ちツール

RGB指定による色確認プログラム - Check RBG Color (Ver 1.4c / 1.5a)
 [2018/02/25] アップデート
 ※ C.Basic for CG で作成(アドインではありません)
 ※ C.Basic for CG Ver 0.34α 以降を使用のこと
  ダウンロード: RBG4c.zip / RGB5a.zip
  C.Basic for CGRGB( コマンドで実際の色を調べる
  プログラムの説明:プログラムライブラリ - RGB指定による色確認プログラム

  RGB4b_2.png 

  RGB4b_3.png 


OS内蔵ファンクションキー探索プログラム - Check System F-Key

 ※ C.Basic for CG で作成(アドインではありません)
   [2017/12/09 アップデート] 本プログラム自体で、システムファンクションを利用
  ダウンロード Ver1.1: SysFunc.g3m   (ファンクション文字に文字列を利用)
   ダウンロード Ver1.2: SysFunc2.g3m (システムファンクション番号利用)
  C.Basic for CGFKeyMenu( コマンドで呼び出せるSystem Function Key# を調べる
  1. 画面左下に システムファンクションキーを表示する
  2. カーソルキーで システムファンクションキー#をスキャンする
   - カーソルキーの長押しで連続スキャン
   - 左右 / キー (??) で1づつ Step スキャン
   - 上下 / キー (▲▼) で50刻みの Skip スキャン
  3. [F4](Input)[EXE] キーで数値の入力
  4. [F5](Help) で使い方説明
   SysFunc 
   Ver 1.1、ファンクションメニューに文字列を利用

   SysFunc2
   Ver 1.2、ファンションメニューに、システムファンクション番号を利用

   C.Basic for FX 用 (fx-9860Gシリーズ用) に移植しました SysFunc2.g1m 





随時、追加・追記します。



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


 



keywords: fx-CG50、fx-CG20CasioBasic、プログラム関数電卓、C.Basic、C:Basic


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



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

C:Basic プロジェクト

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

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

動画追加 2015/11/15
改訂 2015/12/06
追記修正 2017/12/17


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


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.74 (C.basic Ver 0.99m 以降) を作って確認しました。

将来予定しているコンパイラ版の可能性を見るために、ライフゲーム のプログラム中、繰り返し処理で時間のかかる部分を sentaro様がごっそりとコマンド化してみたものを使ってライフゲーム 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様
  • サンプルプログラム作成&テスト: 管理人(私)
  • 有志の開発支援メンバー (日本国内の方々): ガノー様、ツル様、iron2様

C.Basic テスト版

安定(と思われる)最新バージョンはこちらから
  • ZIPファイルで提供
  • ソースファイル(C言語)を公開
  • ソースファイル中にある CBASIC.G1A (for FX版)、CBASICCG.G3A (for CG版) がアドインプログラム
  • CBASIC.G1A か CBASICCG.G3A を 電卓のストレージメモリに転送
  • 基本的な使い方は、ソースファイル中にある README_J.txt / Manual_J.txt / MaualFX_J.txt を参照。

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

 当ブログ掲載の グラフ関数電卓用純正 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 / Ptune2 / Ptune3 併用を推奨します。



Top へ戻る




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

人気ブログランキングへ


FC2ブログランキングへ







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

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



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

C.Basicのインストール

C:Basic - アドイン Casio Basic
<トップページ>

内容の更新や修正を随時行います.

2016/03/27
追記 2017/11/23


C.Basic の使い方



C.Basicのインストール

C.Basic の初めてのインストールや最新バージョンへのアップデートを行う時、ダウンロードした C.Basic のプログラムファイルを fx-9860GII に転送する。転送には、fx-9860GII に添付されている PCリンクソフト FA-124A とUSBケーブルを使う。

簡単に言えば、アドインプログラムである C.Basic プログラムファイル (CBASIC.g1a) を、一旦 FA-124A に登録した後(読み込んだ後)、FA-124A上の操作で PC へ転送するのが大きな作業の流れになる。

- C.Basic をダウンロードする

fx-9860Gシリーズ用 - C.Basic for FX のインストール

- fx-CG20 / fx-CG50用 - C.Basic for CG のインストール
    ・ fx-CG20 / fx-CG50をPCとリンクして CbasicCG.g3a をコピーする

- メモリを最適化する




C.Basicをダウンロードする

最初に、最新バージョンをダウンロードし、適当なフォルダに解凍して保存する。C.Basic for FX は、拡張子が G1A の CBASIC.G1A ファイルが プログラムファイルだ。C.Basic for CG は、拡張子が G3A の CbasicCG.g3a がプログラムファイルだ。

▲Top に戻る


fx-9860Gシリーズ用 - C.Basic for FX のインストール

FA-124A をインストールする

FA-124Aの日本語マニュアルを併せてインストールするには、fx-9860GII に添付されているCDから言語に「日本語」を選んでインストールする。

▲Top に戻る


C.Basic を FA-124A に登録する

FA-124A を起動する

FA-124A を起動する。右ペインのツールバーに電卓のボタンが選択された状態になっている。
電卓のボタンにマウスを持ってくると、Main とポップアップされる。これは、メインメモリが選択されたことを示す。

FA124A_Start

左ペインが電卓内のファイルの状況を示し、右ペインがPCにあるファイルの状況を示す。今は右ペインに注目する。

fx-9860GII には、メインメモリとストレージメモリの2種類が内蔵されている。それに会わせて、FA-124A ではメインメモリとストレージメモリを切り替えて管理するようになっていて、起動した直後はメインメモリが選択されている。

アドインプログラムである C.Basic はストレージメモリに転送して使うので、ダウンロードした C.Basic はストレージメモリへ転送する必要がある。従って、起動時に メインメモリの状況を表示している FA-124A を、ストレージメモリの状況を示すように切り替える必要があるわけだ。 


 FA-124A でストレージメモリに切り替える

右ペインで、メインメモリの電卓ボタンの右にあるストレージメモリのボタンをクリックすると、ストレージメモリの状況を示す画面に切り替わる。

FA124A_Storage


 C.Basic を FA-124A へインポート(Import)する

右ペインに表示されている "Default" でマウスを右クリックして、メニューから "Import"をクリックする。

FA124A_Import

ここで現れる Insert CASIO File ダイアログで、

・ ファイルの場所(I): で CBASIC.G1A ファイルを保存したフォルダを選び、
・ ファイルの種類(T): で G1A File(*.g1a) を選び、
CBASIC.G1A を選んで、[開く(O)] ボタンをクリック。

FA124A_Select 

右ペインに、CBASIC.g1a が追加されていることを確認する。

FA124A_CBASIC

▲Top に戻る


C.Basic を fx-9860GII に転送する

fx-9860GII を FA-124A に接続する

fx-9860GII と PC をUSBケーブルで接続すると、fx-9860GII の画面に コネクションモードの選択画面 (Select Connection Mode) が現れる。

SelectConnectionMode 

ここで、[F1] (DataTrans) を押し、次にFA-124A のペイン (今度はペイン) に並んでいるボタンの一案左にある "Connect" ボタンをクリックすると、

FA124A_Connect

接続プロセスの進行状況が表示された後、fx-9860GII が FA-124A に接続される。

接続が完了すると、ペインに "User1" の表示が現れる。

FA124A_Connected


C.Basic を転送する

既に Import して 右ペインにある CBASIC.g1a にマウスカーソルを合わせてドラッグして、ペインの User1 でドロップする (ドラッグ&ドロップ)。

FA124A_Drag_Drop

初めてインストールした場合は、ペインの User1 をクリックして展開して、CBASIC.g1a が有れば、転送が成功している。

FA124A_Moved


転送を確認する

fx-9860GII で [MENU] キーを押して、MAIN MENU を表示してC.Basic アイコンが有ることを確認し、

MAIN_MENU_CBasic 

C.Basic アイコンを選んで [EXE] キーを押して、C.Basic を起動する。

起動すると、File List 画面になるので、そこで [SHIFT][MENU](SET UP) とキー操作すると、C.Basic のセットアップメニューが表示される。

CBasic_Setup 

一番下の行にあるファンクションメニューで、[F6](Ver.) を押して C.Basic のバージョンを表示し、正しいバージョンがインストールされていることを確認する。

CBasic_Ver 

▲Top に戻る


fx-CG20 / fx-CG50 用 - C.Basic for CG のインストール

fx-CG20 / fx-CG50 をPCとリンクして CbasicCG.g3a をコピーする

製品に同梱されているPCリンク用 USBケーブルを使って、電卓とPCを接続すると、電卓が外部ドライブとして認識されるので、エクスプローラでそのドライブを開くと、電卓内部のファイル構造が表示される。 

PCLink_PCDisp 
拡張子 g3a のファイルが幾つかあるが、これがアドインプログラムのファイルだ。ここに CbasicCG.g3a をコピーすれば良い。

電卓を起動し [MENU] キーを押し、メニューに C.Basic for CG のアイコンがあることを確認。
CG50_MENU 

CBasicCG アイコンにカーソルを移動し起動すると、
CBasicCG_FileList 

ファイルリストが表示されたら [SHIFT] [MENU] (SET UP) とキー入力すると セットアップ画面になる。
CBasicCG_SetUp 

[F6] (VERSION)  を押すと、バージョン情報が現れる。
CBasicCG_Version 

導入したバージョンが正しいことを確認できれば、インストール成功。

▲Top に戻る


メモリを最適化する

C.Basic 本体や、C.Basic で使う Casio Basic プログラムファイルは、いずれもストレージメモリに格納して使う。メモリへの書き込みを繰り返すと、ファイルの断片化が進んで実際に使えるメモリ容量が減ってしまうので、定期的にメモリの最適化作業を行う必要がある。そこで、C.Basic 本体を転送するタイミングでのメモリの最適化を勧める。

[MENU] キーを押して、MAIN MENU から Memory アイコンを選び、

MENU_Memory CG50_MENU_MemoryManager 

[EXE] キーで、Memory Manager を起動する。

MemoryManager CG50_MemoryManager 

ここで、[F5] (F5: Optimization) を押して、メモリの最適化を実行する。

Top に戻る





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

人気ブログランキングへ


FC2ブログランキングへ







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

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




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

ゲーム ~ マスターマインド (C.Basic)

2017/10/09


グラフ関数電卓で遊べるゲーム:マスターマインド を C.Basic に移植する。


ツル様が作成した fx-9860GII 用のマスターマインドを紹介した。

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

これを sentaro様が C.Basic 用に移植されたので紹介する。

作者のツル様は、4桁入力後の判定時に、ブリンクさせるアニメに拘ってオリジナリティを演出している。ところが、Ftune2 のようなチューンアップツールで処理速度が向上するとアニメがきれいに表示されなくなる。加えて、ツル様オリジナルのマスターマインドはそのまま C.Basic で動作するが、処理速度が大幅に向上するのでせっかくのアニメがうまく表示されなくなる。

そこで、C.Basic の拡張機能であるウェイトコントロールコマンド (TicksWait) を使って、どのような設定でもオリジナルのアニメをきれいに表示させるための改変を行っている。

純正 Getkey のゲーム進行中に入力する時はループが回っていて、キースキャンの反応を早くするために C.Basic で拡張機能として導入されている Getkey3 (指定Wait機能付きGetkey) を用いて、Getkey3(U)⇒Break; (変数U はオリジナルから導入されているアニメ用ウェイト変数)として、キーウェイトしてキー入力されたら直ちにループを抜ける処理に置き換えることで、キーの反応を改善している。併せて消費電力の改善の効果も少しある。

C.Basic ~アドイン Casio Basic


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

ツル様作成 マスターマインドの C.Basic 移植版 MASTMIN3 (fx-9860GII 用)
 (TicksWaitGetkey3 を用いたバージョン) 

ダウンロードしたファイル MASTMIN3.g1m ファイル転送ツール FA-124 を使って fx-9860GII のストレージメモリ転送後、C.Basic の Program List から実行する。



対応機種

◆ fx-9860GII





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




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

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

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

C.Basic 英語版Webマニュアル

アドイン版 Casio Basic - 英語版Webマニュアル
<トップページ>


追記修正 2018/08/21

C.Basic の使い方は、配布ファイルに同梱されている readme_J.txt Manual_J.txt に記載されているので、これが参考になります。

2015年10月12日に作成された最初のテスト版以来、C.Basic は改良が進み、1年以上を経て安定性も増してきました。そこで、そろそろ海外デビューしても良いだろうと思い、英語版のマニュアルの準備を進めています。

C.Basic は 純正Casio Basic 互換のコマンドの実装から始まっていて、使い方の基本は 純正Casio Basic にあるので、上記の readme_J.txtManual_J.txt は、純正Casio Basic の機能以外を説明しているものです。

[2017/08/2- 追記・修正]
現在は、C.Basic の配布パッケージ (zipファイル) には、英語版の readme.E.txt と Manual_E.txt も同梱されるようになっています。

そこで、先ずはこれら2つのファイルの内容の英語化から始めています。テキストファイルだと表現に制限があるので、Webマニュアルとしました。

今後は、この英文マニュアルを元に、情報を探しやすいような英語版Webマニュアルを作ってこうと考えています。

C.Basic - 英語版Webマニュアル

所定のWebフォーマットに、上記2つのテキストファイルから日本語を流し込み、順に英語化しています。
まだ多くが日本語のままですが、あと1月程度で取りあえず完成の予定です。
[2017/08/20 追記]
私の作業が遅遅として進まないうちに、sentaro様が英文を準備なさっています。海外のユーザーさんが 英語版Webマニュアルに書いた私の英語を添削してくださったり大変有り難い状況になっています。そこで、上に書いたように 英文Webマニュアルでは検索性を考えて使いやすいマニュアルにしたいと思います。


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

人気ブログランキングへ


FC2ブログランキングへ






keywords: fx-9860GIICasioBasic、C.Basic英語版Webマニュアル

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



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

ライフゲーム

アドイン版 Casio Basic 用サンプルプログラム
<トップページ>

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

動画・説明追加 2015/11/15
更新 2016/05/02

[2015/11/16] プリセットした初期パターンを選べるようにバージョンアップ
[2015/11/17] 記事を大幅に追加して更新
[2015/11/20] C.Basic Ver 0.73 へのバージョンアップを反映した更新
[2016/02/11] C.Basic 最新版は アドイン Casio Basic - トップページ の最新バージョンから
[2016/05/02] ライフゲーム Ver 0.74 へバージョンアップ (C.Basic Ver 0.99m への対応) 



カシオ fx-9860GII の Casio Basic でライフゲームができました。

...とは言っても、純正 Casio Basic では無理なので、アドイン版 Casio Basic : C.Basic で作りました。

最初に作ったもので遊んでみると意外に面白いので、色々とネット検索してライフゲームについて調べたり、プリセットパターンを選べるように機能追加したりして、ハマってしまいました。

実際の動作画面の動画は、下に掲載していますので、その動作速度を見ていただき、C.Basic の能力の高さを実感していただけると思います。

 
ライフゲームのルール

ライフゲームは人工生命シミュレーションと言えるもので、1970年に Conway が発表したのが始まりです。そこで、Conway's Game of Life と呼ばれます。

画面の1ピクセルを1個の生命体(細胞、Cell)と見立てて、誕生、生存、死滅を繰り返す生命体の集団の変化(世代変化)を画面上で再現して、眺めて楽しみます。
ピクセル1個は細胞1個で、 (On:生きている) (Off:死んでいる) のどちらかの状態になります。そして以下の単純な3つの条件だけで次の世代の細胞の生死、つまりピクセルの On / Off  が決定されます。

<誕生>
周りに生きている細胞が3個あれば、次の世代でその場所に新たな細胞が生まれます。
つまり、 あるピクセルが Off の時、周りの8 個のピクセルのうち3個が On の場合、
Birth 
そのピクセルは次の世代で On になります。

<生存>
生きている細胞の周りに生きている細胞が2個あるいは3個あれは、その細胞は次の世代でも生き残ります。
つまり、あるピクセルが On の時、周りの8個のピクセルのうち2個か3個が On の場合、
Live1 LIVE_2 
そのピクセルは次の世代では On のままになります。

<死滅>
上以外の場合、細胞は次の世代で死にます。
つまり、あるピクセルが On の時、周りの8 個のピクセルが1個以下(過疎)、
Death6  Death7 
あるいは4個以上(過密)の場合、
Death1  Death2  Death3  Death4  Death5 
そのピクセルは次の世代で Off になります。

これを画面全てのピクセルについて計算して結果を表示すると、1世代進みます。次々に世代が進むと複雑なパターンに変化してゆきます。


ピクセル一個が極めて単純なルールに従うだけなのに、実際に動かしてみると予想もしない複雑なパターンが次々に現れるのが、ライフゲームの面白いところです。

ライフゲームを知らなかった方や知っていた方も、以下のサイトにある動画を是非ご覧ください。私が探した範囲で最高に分かり易く、面白いと思います;

 ライフゲームの世界, 人口知能に関する断創録

これをプログラム電卓で作るのは無理だと思っていましたが、C.Basic を使えば十分楽しめるスピードで実現できたのはチョット驚きです。

上の動画で紹介されている簡単なパターンは、以下で紹介するプログラム電卓用ライフゲーム LIFE074 で実際に試すことができます。また有名なパターンはプリセットパターンとして選択して使えるようにしています。

ソースコードを公開しているので、プリセットパターンを追加したり、改造したり自由にお使いください。




プログラム電卓でライフゲーム

fx-9860GII の 純正Casio Basic で、液晶全体をピクセル単位でグラフィックス描画するには非常に時間がかかります。一瞬でグラフィックス画面全体を更新・表示することは無理、という仕様になっています。それでも作ってみようとして、最も安易なアプローチとして、画面全体のビットマップ処理を2次元配列(行列)を使って行うのが、楽で分かりやすいのですが 画面全体のピクセルを扱うには行列の要素数が足らない仕様でもあります。そんなわけで、fx-9860GII の Casio Basic ではライフゲームは作れないと思っていました。

アドイン版 Casio Basic インタープリタ : C.Basic の開発が動き出し、テスト版を触っていると、動作は速いし、画面全体のピットマップを2次元配列で高速に処理できるようになり、C.Basic のベンチマークの目的も含めて、面白そうなので作ってみました。純正Casio Basic にはない C.Basic で独自拡張したビットマップ処理コマンドも使ってみました(これを使わないと無理です)。

多くのライフゲームは十分に広い世界を用意していて、無限大の広さが前提になることが殆どです。今回のプログラムは、127×63 ピクセルに限定された狭い世界でのライフゲームです。この狭い世界は、ライフゲームのルールと、高速化のロジックのため、2ピクセルの見えない壁で囲まれていることになり、123×59 ピクセルの領域から外へ出ようとすると、通常のライフゲームとは異なる結果が起こり得ます。

今回作ったライフゲームは、アドイン版 Casio Basic: C.Basic の能力を調べることも大きな目的で、C.Basic Ver 0.66 で作り始め、C.Basic Ver 0.73 で仕上げて、それ以降の最新バージョンで動作確認しています。C.Basic 最新版 (Ver 0.99m) 以降に合わせて ライフゲームを Ver 0.74 にバージョンアップしました。 

このライフゲーム・プログラムを含めて、以下の3セットのプログラムをダウンロードして fx-9860GII に導入すれば、快適にライフゲームが楽しめます。


 アドイン版 Casio Basic: C.Basic

※ 最新バージョンのダウンロード: アドイン Casio Basic - トップページ
  • ZIPファイルで提供
  • ソースファイル(C言語)を公開
  • ZIPファイル内にある CBASIC.G1A がアドインプログラム
C.Basic は、まだテスト版で、バグフィックスとバージョンアップが頻繁に行われています。


◆ オーバークロックツール(アドイン): Ftune2

より高速でスムーズな動きを楽しむには、オーバークロックツールの使用を勧めます。

※ 使い方とダウンロード: fx-9860GII の高速化 - Ftune2 の導入



 サンプルプログラム: ライフゲーム

  ダウンロード
   ライフゲーム Ver 0.74 (C.Basic Ver 0.63 以降に対応) [2016/05/02 バージョンアップ]
  • Ftune2 でオーバークロック (236MHz 以上) を推奨
  • Ver 0.74 での初期パターンは、手入力だけでなくプリセットした15個の初期パターンから選択可能になった
電卓表示のの狭い世界でも、パターンが変化する様子は面白くて飽きません。作ってみるまでは fx-9860GII でライフゲーム遊びが出来るとは、思いもしませんでした。

  遊び方
C.Basic で LIFE074 起動
初期パターンは、[F1] (手入力) か [F6] (15個のプリセットから選択) かを選ぶ
プリセットパターンの確定は [F1] キー
プリセットから確定したのち [EXE] を押して手入力でチョイ足しもできます
・[DEL] で1世代へ進む
・[(-)] を押すたび1世代進む、[EXE] を押すと連続して世代が進む
世代が連続して進んでいる時 [(-)] を押せば一旦停止
・[EXIT]キーでゲーム終了し、その時の世代と最初からの実行時間を表示する


   プリセット初期パターン

   <パターン1>
   pt1 
   174世代目で安定状態になる。

   <パターン2>
   pt2 
   こんなに小さい5ピクセルから、大きく広がりながらグライダーを5機発射する。
   6機目のグライダーは途中で消滅。一般にはかなり長寿命だが、 電卓の狭い世界では
   652世代目で安定状態になる。

   <パターン3>
   pt3 
   たまたま見つけた面白いパターン。
   大きく広がらないのに、安定状態になるまで517世代と長寿命なのが特徴。
   
   このように、十分な実用的な速度で実行できる(オーバークロック236MHz)。

変化がなくなる517世代までの時間: [時間(相対速度)]

C.Basic Ver0.74C.Basic Ver 0.99m
ノーマルクロック (29MHz)796秒 (0.4)330 (1.0)
オーバークロック (236MHz)115秒 (3.0)52秒 (6.4)
オーバークロック (280MHz)95秒 (3.5)44秒 (7.6)
C.Basic の Ver 0.74 に比べて、最近のバージョンでは機能追加しているにもかかわらず、ほぼ倍の速度を維持している!

   <パターン4>
   pt4 
   たまたま見つけたパターン。横に広がり218世代目で安定状態になる。

   <パターン5>
   pt5 
   たまたま見つけた面白いパターン。
   途中から、画面全体のピクセルで計算と描画を行い負荷が最大になるので、
   プログラムのスピード評価に使える。
   グライダーを6機発射し、そのうち2機は途中で消滅。
   飛び去るグライダーを別にすれば、495世代目で安定状態になる。

   <パターン6>
   pt6 
   たまたま見つけた寿命の長いパターン(658世代)。
   但し、狭い画面よりも広がろうとするので、境界での特異現象あり。

   <パターン7>
   pt7 
   固定パターン(ブリンカー)の1つ。床屋さんのサインのようだ。

   <パターン8>
   pt8
   グライダーが反射を続けて往復移動する様子が面白い。

   <パターン9>
   pt9 
   グライダー: 回転しながら斜めに移動してゆく。

   <パターン10>
   pt10 
   小さい宇宙船と大きい宇宙船: 横に直進する。
   小さい宇宙船は壁に当たるとグライダーに変身する(画面端での特異ケース)。

   <パターン11>
   pt11 
   左右に往復運動するパターン(シャトル)。

   <パターン12>
   pt12 
   往復移動するパターン(シャトル)の1つ。
   壊れて消えそうで、消えずに往復運動するのが面白い。

   <パターン13>
   pt13 
   グライダー銃: MITのゴスペラーが最初に見つけた無限増殖するパターン。
   次々にグライダーが発射される。
   
   <パターン14>
   pt14 
   シュッシュポッポ列車 (Puffer Train): 煙(スパイク)を残しながら移動する。

   <パターン15>
   pt15 
   移動するパターン。ゴミ(スパイク)を残さないのが面白い。




ライフゲームに関するサイト

実際に作ってみると興味が出てきたので、色々と調べてみました。

ライフゲームの説明
人口知能に関する断創録 - ライフゲームの世界  一押し!ライフゲーム歴史と面白さが分かる
人口知能に関する断創録 - ライフゲーム
文系の人にこそ伝えたい!ハッカーを魅了してきたライフゲームの魅力
数字の難民 - ライフゲームを知っていますか?《機械仕掛けの生物》
・ ウィキペディア - ライフゲーム


ライフゲームを見てみる
ライフゲーム入門 (Introduction The Game of Life)
続・ライフゲーム入門 (Game of Life Demo)


fx-5800P でライフゲームを作った人が居た!
nimu.akhの日記: 関数電卓でライフゲーム


ライフゲームの数学的側面

ウィキペディア - ライフゲームの物体一覧
ウィキペディア - セル・オートマトン
ウィキペディア - チューリングマシン


ライフゲームの奥深さ [2016/02/11 追記]

C.Basic でライフゲームを作り始めた時は、ゲームのルールくらいしか知らず、今回 fx-9860GII + C.Basic で作ったのが初めてでした。その動きの複雑さや面白さは、実際に動かしてみないと分からないものです。ルールは単純なのでプログラム自体はそれほど難しくなく、ポイントは処理速度と画面の広さです。

fx-9860GII + C.Basic では、処理速度と画面の広さはスグに限界にきてしまいますが、ライフゲームの面白さを知るには十分です。上で紹介した色々なサイト、特に「一押し」と紹介したサイトにある動画を見て、その奥深さ知りました。

チューリングマシンについてちょっと調べてみると、コンピュータを作るための基本的な概念なんだと知りました。そしてチューリングマシンでチューリングマシンを作ることができる、完全チューリングマシンがあるというのも驚きです。ライフゲームで完全チューリングマシンを作れる、つまりライフゲームでライフゲームが作れることも、上の一押しの動画で紹介されています。

また、0と1だけの世界が、生命の成り立ちに迫ることをフォンノイマンが第二次世界大戦直後、今ほどライフサイエンスが進んでいなかった時代に既に考えていて、原理を証明していたことを知って、その先進性に驚きました。

生命は最初は1個の受精卵から始まり、そこからヒトのような複雑な生命システムができあがるわけですが、それが単に4つの塩基の並び方だけで記録されていて、細胞の分裂と分化に伴ってヒトの生命体としての機能を実現するという事実に迫るために、コンピュータ上の複雑系の研究が進んでいるのも、興味深いところです。

DNAに乗っている情報は、体の設計図だけでなく、タンパクや酵素の製造装置の設計図までも含んでいて、分子レベルでの全ての制御・調節機構を支配しています。生命を単に複製するのに必要な設計図を全てDNAに記録しているだけでなく、細胞分化に多様性を与えるための設計図まで含んでいる凄さも、ライフゲームで遊んでみて改めて実感します。

ライフゲームを実際に作って遊んでみると、複雑なパターンや機能が発現できる初期の単純なセルパターンを探すと、それなりに出てくるのを経験すると、一見単純なものを階層化して組み立てることで、自己複製までできてしまうことに納得します。プログラム電卓で作るライフゲームは、最も単純なウィルスレベルにも及ばないかも知れませんが、想像力をかきたててくれるには十分ですね。




ソースリスト

見やすくなると思ってソースを載せたら、意外に長かった...

ライフゲームの肝心な部分は、下のソースで;
 ・ '== Calc Next Map ==
 ・ '== Update Map ===
の部分で、大した量ではありません。
初期パターンを描いたり、使いやすくしたり、操作説明を入れたりで増えてしまっています(^^;

このプログラムでは1つだけ工夫しています。結構な量の配列計算を出来るだけ少なくするために、パターンの周りの最低限必要なビットマップ領域だけの配列計算をするようにしています。ビットマップ領域の拡大に伴ってフレキシブルに計算領域を拡大しているので、領域が広がるにつれて処理時間がかかるようになります。

fx-9860GII で C.Basic 内蔵のエディタを使ってゼロから作ったプログラムなので、実はこうやってプログラムソースを眺めるのは初めてです。このエディタは 純正Casio Basic の上位互換で、なかなか使いやすくなっていて、特に以下のようにソースを眺めなくてもプログラムが書けてしまいます。Casio Basic が構造化言語なのでブロック構造の分かりやすいプログラムが作れること、そしてエディタが使いやすいことは大きいと思います。


C.Basic 内蔵エディタの宣伝(^^;

そうか! C.Basic 内蔵エディタの使いやすさをアピールする良い機会かも知れません。
純正Casio Basic と同等の文字列検索機能だけでなく、このエディタには、変数や配列/行列の参照・編集機能があって、なかなか使えます。C.Basic Ver 0.99 以降は、ACBreak コマンドで強制終了させたり、ステップデバッグが可能で、コードや変数チェック後、動作復帰するなど、便利なデバッグ機能も搭載していて、とても便利です。


ファイル名: LIFE074.g1m (2472 byte)
'== LIFE Ver 0.74 ==
'        (c)Krtyski
'         e-Gadget
'
'Sample Program
'for CBasic Ver0.99m
'
'Flexible area
' Expanding model
'+Step Mode Option
'+Capture Enabled
'+Int Mode
'+Time Measurement
'+Support New DotP
'+Preset Pattern
'==

'== Execute Mode
'#CBint

'== Graphics Setting
ClrGraph
GridOff
AxesOff
LabelOff
ViewWindow 1,127,0,63,1,0

'== Initial Setting
'= Initialze Matrix
ClrMat B:ClrMat C
{127,63}→Dim Mat B.b
{127,63}→Dim Mat C.b
'Initial Area
'setting temporaly
'as a center dot 
64→L:64→R:32→T:32→B
'= Initialze Gen
0→G
'Step mode flag
1→f:0→s:0→S

0→Z:Prog "LMAP1"

'== Disp Instruction
'Skip Instruction
Z≠0⇒Goto 0

Cls
Text 1,1,"== INSTRUCTION - LIFE Ver0.74"
Text 7,1,"▶DRAW BY REPEAT 2 And 3"
Text 13,15,"1-[EXE]"
Text 13,60,":Start Drawing"
Text 19,15,"2-→/↑/←/↓"
Text 19,60,":Move Cursor"
Text 25,15,"3-[EXE]"
Text 25,60,":Put Dot"Text 31,1,"#E69BRUN"
Text 31,28,"4-[DEL]"
Text 31,60,":Start Running!"
Text 37,28," [(-)]"
Text 37,60,":Step by Step Run"
Text 43,28," [EXE]"
Text 43,60,":Continuous Run"
Text 49,1,"▶Stop"
Text 49,28,"5-[EXIT]"
Text 49,60,":Stop Running"
Text 55,28,"6-[SHIFT][7] :Capture"
Text 59,1,"[F1]"
While Getkey
WhileEnd
Do
LpWhile Getkey≠79
Cls

Lbl 0

'== Draw Pattern ==
CoordOn
Text 2,3,"EXE/→/↑/←/↓: Make Pattern"
Text 8,3,"DEL: Go!"
If Z=0:Then 
64→X:32→Y:IfEnd

0→C
While 1
While Getkey
WhileEnd
Do
Getkey→K
Text 8,3,"DEL: Go!"
LpWhile K=0
K=44⇒Break
If K=31:Then 
Text 8,3,"    "
Plot X,Y◢
'= Flexible Map Area
' Initialze Area,
' starting w/ a dot
If C=0:Then 
If Z=0:Then 
X→L:X→R:Y→T:Y→B
IfEnd
Isz C:IfEnd
1→Mat B[X,Y]
1→Mat C[X,Y]
X≦L⇒X-1→L
X≧R⇒X+1→R
Y≦T⇒Y-1→T
Y≧B⇒Y+1→B
IfEnd
WhileEnd
CoordOff
'Expand Map Area
L→l:R→r:T→t:B→b
'Disp Operation Note
Text 2,3,"[EXIT]:Stop         "
Text 8,3,"[(-)]/[EXE]"

'== Timer Start
%s

'1st Loop
While 1

'== Calc Next Map ==
For T→Y To B
For L→X To R
0→C
CellSum(Mat B[X,Y])→C
If Mat B[X,Y]:Then 
If C≦1 Or C≧4:Then 
0→Mat C[X,Y]
IfEnd
Else 
If C=3:Then 
1→Mat C[X,Y]
IfEnd
IfEnd
'Expand Map Area
If C:Then 
If l≦2:Then 2→l
Else X≦l⇒Dsz l:IfEnd
If r≧126:Then 126→r
Else X≧r⇒Isz r:IfEnd
If t≦2:Then 2→t
Else Y≦t⇒Dsz t:IfEnd
If b≧62:Then 62→b
Else Y≧b⇒Isz b:IfEnd
IfEnd
Next:Next
l→L:r→R:t→T:b→B

'== Update Map ==
Mat C→Mat B
DotPut(Mat C[L,T],L,T,R,B)
'Update Generation
Isz G
Text 2,105,G

'== Key Operation ==
f⇒Goto K
Getkey→K
K=0⇒Goto Z:Goto K

Lbl K
'[(-)]→Pause
If K=41 Or f:Then 
(%-s)+S→S
While Getkey
WhileEnd
Do
Getkey→K
'[EXIT]→Finish up
K=47⇒Break
'[EXE]→Continue
If K=31:Then 0→f
%z:Break:IfEnd
If K=41:Then 1→f
%s:Break:IfEnd
LpWhile 1
IfEnd

'[EXIT]→Finish up
K=47⇒Break

Lbl Z
'[EXIT]→Finish up
K=47⇒Break
WhileEnd
'1st Loop end

'== Finish up ==
(%-s)+S→S
ClrMat B
ClrMat C
ClrText

'#CBasic
Locate 1,1,"Generation"
Locate 12,1,G%
S%÷128→s
Locate 1,3,"Time(s)"
Locate 13,3,S
Int (S÷60)→M
If M:Then 
S-60M→S
Int (log M)→D
Locate 1,4,"Time(m:s)"
Locate 11,4,M
Locate 12+D,4,":"
Locate 13+D,4,S
IfEnd
Locate 1,6,"[SHIFT][F6]"
Locate 8,7,"⇒Graphic Disp"

=====

赤文字は、C.Baisc 独自拡張機能である、ビットマップ関数配列小文字変数変数の型指定タイマーに関するもので、高速化を目指しました。C.Basic は 純正Casio Basic の上位互換なので、このような独自機能を使うと純正Casio Basic では動作しません。

C.Basic の独自拡張機能や簡単な使い方については、ダウンロードした C.Basic の圧縮ファイル内にある readme_J.txt に書かれているので、そこで確認してください。


あっ、サブルーチンの LMAP1.g1m も有った...これは 6520 byte もあります。ここでやっていることは極めて単純で、プリセットパターンを配列データとして作り、それをビットマップとして表示し、矢印キーを押すと別のパターンで同じことを行う...これを15パターン分似たような記述を繰り返しているだけで、その分長くなっています。

コーディングにはメインルーチンと同様にゼロから C.Basic のエディタを使い、コピー&ペーストを使ったので、実際の入力はかなり省略でき、気がついたら長くなっていました。

上と同様に、C.Basic の独自拡張機能を赤文字で示しておきます。

ファイル名: LMAP1.g1m (6524 byte)
'== LMAP Ver0.7x ==
'Bitmap I/O Function
' for LIFE Ver0.7
'==

Cls
While Getkey
WhileEnd

'== Menu
Text 1,1,"===== Set Initial Pattern ====="
Text 9,30,"For LIFE Ver0.7x"
Text 15,30,"-----------------"
Text 25,18,"[F1] Draw New Pattern"
Text 37,18,"[F6] Select Pattern"
Text 59,1,"[F1]"
Text 59,114,"[F6]"

Do
0→K:Getkey1→K
64→X:32→Y

If K=79:Then
'= Manual Draw
0→Z:Cls:Return

Else If K=29:Then
'= Select Pattern
'Preset Pattern#
15→Z
'Crrent Pattern#
1→z

Do
Cls
Text 1,1,"[↓]/[↑]:Select"
Text 1,110,"[ ]"
Text 1,113,z
Text 59,1,"[F1] Enter"

If z=1:Then
64→X:32→Y:0→Mat B
X-2→L:X+2→R
Y-2→T:Y+2→B
0→Mat B[X-1,Y-1]
1→Mat B[X,Y-1]
1→Mat B[X-1,Y]
1→Mat B[X,Y]
1→Mat B[X+1,Y]
1→Mat B[X-1,Y+1]
1→Mat B[X+1,Y+1]
X→X:Y-1→Y
DotPut(Mat B[L,T],L,T,R,B)

Else If z=2:Then
64→X:32→Y:0→Mat B
X-2→L:X+2→R
Y-2→T:Y+2→B
1→Mat B[X,Y-1]
1→Mat B[X+1,Y-1]
1→Mat B[X-1,Y]
1→Mat B[X,Y]
1→Mat B[X,Y+1]
X→X:Y-1→Y
DotPut(Mat B[L,T],L,T,R,B)

Else If z=3:Then
64→X:32→Y:0→Mat B
X-1→L:X+11→R
Y-2→T:Y+2→B
1→Mat B[X,Y-1]
1→Mat B[X+9,Y-1]
1→Mat B[X,Y]
1→Mat B[X+1,Y]
1→Mat B[X+2,Y]
1→Mat B[X+3,Y]
1→Mat B[X+4,Y]
1→Mat B[X+5,Y]
1→Mat B[X+6,Y]
1→Mat B[X+7,Y]
1→Mat B[X+8,Y]
1→Mat B[X+9,Y]
1→Mat B[X,Y+1]
1→Mat B[X+9,Y+1]
X→X:Y→Y
DotPut(Mat B[L,T],L,T,R,B)

Else If z=4:Then
64→X:32→Y:0→Mat B
X-2→L:X+2→R
Y-7→T:Y+7→B
1→Mat B[X-1,Y-6]
1→Mat B[X,Y-6]
1→Mat B[X+1,Y-6]
1→Mat B[X,Y-5]
1→Mat B[X,Y-4]
1→Mat B[X,Y-3]
1→Mat B[X,Y-2]
1→Mat B[X-1,Y-1]
1→Mat B[X,Y-1]
1→Mat B[X+1,Y-1]
1→Mat B[X-1,Y+6]
1→Mat B[X,Y+6]
1→Mat B[X+1,Y+6]
1→Mat B[X,Y+5]
1→Mat B[X,Y+4]
1→Mat B[X,Y+3]
1→Mat B[X,Y+2]
1→Mat B[X-1,Y+1]
1→Mat B[X,Y+1]
1→Mat B[X+1,Y+1]
X→X:Y+1→Y
DotPut(Mat B[L,T],L,T,R,B)

Else If z=5:Then
64→X:32→Y:0→Mat B
X-9→L:X+9→R
Y-11→T:Y+11→B
1→Mat B[X,Y-10]
1→Mat B[X-1,Y-9]
1→Mat B[X,Y-9]
1→Mat B[X+1,Y-9]
1→Mat B[X-1,Y-8]
1→Mat B[X+1,Y-8]
1→Mat B[X-7,Y+8]
1→Mat B[X-8,Y+9]
1→Mat B[X-7,Y+9]
1→Mat B[X-6,Y+9]
1→Mat B[X-8,Y+10]
1→Mat B[X-6,Y+10]
1→Mat B[X+7,Y+8]
1→Mat B[X+6,Y+9]
1→Mat B[X+7,Y+9]
1→Mat B[X+8,Y+9]
1→Mat B[X+6,Y+10]
1→Mat B[X+8,Y+10]
X+8→X:Y+10→Y
DotPut(Mat B[L,T],L,T,R,B)

Else If z=6:Then
64→X:40→Y:0→Mat B
X-4→L:X+5→R
Y-2→T:Y+2→B
1→Mat B[X-3,Y-1]
1→Mat B[X-3,Y]
1→Mat B[X-2,Y]
1→Mat B[X-1,Y]
1→Mat B[X,Y-1]
1→Mat B[X,Y]
1→Mat B[X,Y+1]
1→Mat B[X+1,Y]
1→Mat B[X+2,Y]
1→Mat B[X+3,Y]
1→Mat B[X+4,Y]
1→Mat B[X+4,Y+1]
X→X:Y+1→Y
DotPut(Mat B[L,T],L,T,R,B)

Else If z=7:Then
64→X:32→Y:0→Mat B
X-7→L:X+7→R
Y-7→T:Y+7→B
1→Mat B[X+5,Y-6]
1→Mat B[X+6,Y-6]
1→Mat B[X+6,Y-5]
1→Mat B[X+3,Y-4]
1→Mat B[X+5,Y-4]
1→Mat B[X+1,Y-2]
1→Mat B[X+3,Y-2]
1→Mat B[X-1,Y]
1→Mat B[X+1,Y]
1→Mat B[X-1,Y+2]
1→Mat B[X-3,Y+2]
1→Mat B[X-3,Y+4]
1→Mat B[X-3,Y+4]
1→Mat B[X-5,Y+4]
1→Mat B[X-6,Y+5]
1→Mat B[X-6,Y+6]
1→Mat B[X-5,Y+6]
X+1→X:Y→Y
DotPut(Mat B[L,T],L,T,R,B)

Else If z=8:Then
64→X:32→Y:0→Mat B
X-22→L:X+20→R
Y-5→T:Y+5→B
1→Mat B[X-21,Y+2]
1→Mat B[X-20,Y+2]
1→Mat B[X-19,Y+3]
1→Mat B[X-19,Y+2]
1→Mat B[X-19,Y+1]
1→Mat B[X-16,Y+3]
1→Mat B[X-16,Y+2]
1→Mat B[X-16,Y+1]
1→Mat B[X-15,Y+2]
1→Mat B[X-14,Y+2]
1→Mat B[X-13,Y+2]
1→Mat B[X-12,Y+2]
1→Mat B[X-11,Y+3]
1→Mat B[X-11,Y+2]
1→Mat B[X-11,Y+1]
1→Mat B[X-8,Y+3]
1→Mat B[X-8,Y+2]
1→Mat B[X-8,Y+1]
1→Mat B[X-7,Y+2]
1→Mat B[X-6,Y+2]
1→Mat B[X-4,Y+4]
1→Mat B[X-4,Y+3]
1→Mat B[X-3,Y+4]
1→Mat B[X-3,Y+2]
1→Mat B[X-2,Y+4]
1→Mat B[X+4,Y-2]
1→Mat B[X+5,Y-2]
1→Mat B[X+6,Y-1]
1→Mat B[X+6,Y-2]
1→Mat B[X+6,Y-3]
1→Mat B[X+9,Y-1]
1→Mat B[X+9,Y-2]
1→Mat B[X+9,Y-3]
1→Mat B[X+10,Y-2]
1→Mat B[X+11,Y-2]
1→Mat B[X+9,Y-2]
1→Mat B[X+12,Y-2]
1→Mat B[X+13,Y-2]
1→Mat B[X+14,Y-1]
1→Mat B[X+14,Y-2]
1→Mat B[X+14,Y-3]
1→Mat B[X+17,Y-1]
1→Mat B[X+17,Y-2]
1→Mat B[X+17,Y-3]
1→Mat B[X+18,Y-2]
1→Mat B[X+19,Y-2]
X-8→X:Y+3→Y
DotPut(Mat B[L,T],L,T,R,B)

Else If z=9:Then
64→X:10→Y:0→Mat B
X-2→L:X+2→R
Y-2→T:Y+2→B
1→Mat B[X-1,Y+1]
1→Mat B[X,Y-1]
1→Mat B[X,Y+1]
1→Mat B[X+1,Y]
1→Mat B[X+1,Y+1]
X+1→X:Y+1→Y
DotPut(Mat B[L,T],L,T,R,B)

Else If z=10:Then
5→X:32→Y:0→Mat B
X-3→L:X+5→R
Y-7→T:Y+7→B
1→Mat B[X-2,Y-4]
1→Mat B[X-2,Y+5]
1→Mat B[X-1,Y-3]
1→Mat B[X-1,Y+6]
1→Mat B[X,Y-3]
1→Mat B[X,Y+6]
1→Mat B[X+1,Y-3]
1→Mat B[X+1,Y-6]
1→Mat B[X+1,Y+6]
1→Mat B[X+2,Y-3]
1→Mat B[X+2,Y-4]
1→Mat B[X+2,Y-5]
1→Mat B[X+2,Y+6]
1→Mat B[X+3,Y+3]
1→Mat B[X+3,Y+6]
1→Mat B[X+4,Y+4]
1→Mat B[X+4,Y+5]
1→Mat B[X+4,Y+6]
X+4→X:Y+6→Y
DotPut(Mat B[L,T],L,T,R,B)

Else If z=11:Then
64→X:32→Y:0→Mat B
X-7→L:X+17→R
Y-4→T:Y+4→B
1→Mat B[X-6,Y]
1→Mat B[X-6,Y+1]
1→Mat B[X-5,Y]
1→Mat B[X-5,Y+1]
1→Mat B[X-2,Y-1]
1→Mat B[X-2,Y]
1→Mat B[X-2,Y+1]
1→Mat B[X-1,Y-1]
1→Mat B[X-1,Y]
1→Mat B[X-1,Y+1]
1→Mat B[X+3,Y-3]
1→Mat B[X+3,Y-2]
1→Mat B[X+3,Y+2]
1→Mat B[X+3,Y+3]
1→Mat B[X+4,Y-2]
1→Mat B[X+4,Y-1]
1→Mat B[X+4,Y]
1→Mat B[X+4,Y+1]
1→Mat B[X+4,Y+2]
1→Mat B[X+5,Y-1]
1→Mat B[X+5,Y]
1→Mat B[X+5,Y+1]
1→Mat B[X+6,Y]
1→Mat B[X+14,Y]
1→Mat B[X+14,Y+1]
1→Mat B[X+15,Y]
1→Mat B[X+15,Y+1]
X+6→X:Y→Y
DotPut(Mat B[L,T],L,T,R,B)

Else If z=12:Then
64→X:32→Y:0→Mat B
X-15→L:X+15→R
Y-6→T:Y+6→B
1→Mat B[X-14,Y-4]
1→Mat B[X-14,Y-3]
1→Mat B[X-14,Y+3]
1→Mat B[X-14,Y+4]
1→Mat B[X-13,Y-4]
1→Mat B[X-13,Y-3]
1→Mat B[X-13,Y+3]
1→Mat B[X-13,Y+4]
1→Mat B[X-1,Y-2]
1→Mat B[X-1,Y+2]
1→Mat B[X,Y-2]
1→Mat B[X,Y+2]
1→Mat B[X+3,Y-5]
1→Mat B[X+3,Y-4]
1→Mat B[X+3,Y-2]
1→Mat B[X+3,Y+2]
1→Mat B[X+3,Y+4]
1→Mat B[X+3,Y+5]
1→Mat B[X+4,Y-4]
1→Mat B[X+4,Y-3]
1→Mat B[X+4,Y-2]
1→Mat B[X+4,Y+2]
1→Mat B[X+4,Y+3]
1→Mat B[X+4,Y+4]
1→Mat B[X+5,Y-3]
1→Mat B[X+5,Y+3]
1→Mat B[X+13,Y-4]
1→Mat B[X+13,Y-3]
1→Mat B[X+13,Y+3]
1→Mat B[X+13,Y+4]
1→Mat B[X+14,Y-4]
1→Mat B[X+14,Y-3]
1→Mat B[X+14,Y+3]
1→Mat B[X+14,Y+4]
X→X:Y-2→Y
DotPut(Mat B[L,T],L,T,R,B)

Else If z=13:Then
64→X:32→Y:0→Mat B
X-19→L:X+18→R
Y-5→T:Y+5→B
1→Mat B[X-18,Y]
1→Mat B[X-18,Y+1]
1→Mat B[X-17,Y]
1→Mat B[X-17,Y+1]
1→Mat B[X-7,Y]
1→Mat B[X-7,Y+1]
1→Mat B[X-7,Y+2]
1→Mat B[X-6,Y-1]
1→Mat B[X-6,Y+3]
1→Mat B[X-5,Y-2]
1→Mat B[X-5,Y+4]
1→Mat B[X-4,Y-1]
1→Mat B[X-4,Y+3]
1→Mat B[X-3,Y]
1→Mat B[X-3,Y+1]
1→Mat B[X-3,Y+2]
1→Mat B[X-2,Y]
1→Mat B[X-2,Y+1]
1→Mat B[X-2,Y+2]
1→Mat B[X+3,Y-2]
1→Mat B[X+3,Y-1]
1→Mat B[X+3,Y]
1→Mat B[X+4,Y-3]
1→Mat B[X+4,Y-2]
1→Mat B[X+4,Y]
1→Mat B[X+4,Y+1]
1→Mat B[X+5,Y-3]
1→Mat B[X+5,Y-2]
1→Mat B[X+5,Y]
1→Mat B[X+5,Y+1]
1→Mat B[X+6,Y-3]
1→Mat B[X+6,Y-2]
1→Mat B[X+6,Y-1]
1→Mat B[X+6,Y]
1→Mat B[X+6,Y+1]
1→Mat B[X+7,Y-4]
1→Mat B[X+7,Y-3]
1→Mat B[X+7,Y+1]
1→Mat B[X+7,Y+2]
1→Mat B[X+12,Y]
1→Mat B[X+12,Y+1]
1→Mat B[X+16,Y-2]
1→Mat B[X+16,Y-1]
1→Mat B[X+17,Y-2]
1→Mat B[X+17,Y-1]
X+17→X:Y-1→Y
DotPut(Mat B[L,T],L,T,R,B)

Else If z=14:Then
40→X:38→Y:0→Mat B
X-4→L:X+3→R
Y-9→T:Y+10→B
1→Mat B[X-3,Y-6]
1→Mat B[X-3,Y-1]
1→Mat B[X-3,Y+8]
1→Mat B[X-2,Y-5]
1→Mat B[X-2,Y]
1→Mat B[X-2,Y+3]
1→Mat B[X-2,Y+9]
1→Mat B[X-1,Y-5]
1→Mat B[X-1,Y]
1→Mat B[X-1,Y+1]
1→Mat B[X-1,Y+2]
1→Mat B[X-1,Y+9]
1→Mat B[X,Y-8]
1→Mat B[X,Y-5]
1→Mat B[X,Y+6]
1→Mat B[X,Y+9]
1→Mat B[X+1,Y-7]
1→Mat B[X+1,Y-6]
1→Mat B[X+1,Y-5]
1→Mat B[X+1,Y+7]
1→Mat B[X+1,Y+8]
1→Mat B[X+1,Y+9]
X-1→X:Y→Y
DotPut(Mat B[L,T],L,T,R,B)

Else If z=15:Then
40→X:32→Y:0→Mat B
X-5→L:X+5→R
Y-5→T:Y+5→B
1→Mat B[X-4,Y-1]
1→Mat B[X-4,Y]
1→Mat B[X-4,Y+1]
1→Mat B[X-3,Y-1]
1→Mat B[X-3,Y]
1→Mat B[X-3,Y+1]
1→Mat B[X-2,Y]
1→Mat B[X,Y-3]
1→Mat B[X,Y-1]
1→Mat B[X,Y+1]
1→Mat B[X,Y+3]
1→Mat B[X+1,Y-4]
1→Mat B[X+1,Y+4]
1→Mat B[X+2,Y-4]
1→Mat B[X+2,Y+4]
1→Mat B[X+3,Y-4]
1→Mat B[X+3,Y-1]
1→Mat B[X+3,Y+1]
1→Mat B[X+3,Y+4]
1→Mat B[X+4,Y-4]
1→Mat B[X+4,Y-3]
1→Mat B[X+4,Y-2]
1→Mat B[X+4,Y+2]
1→Mat B[X+4,Y+3]
1→Mat B[X+4,Y+4]
X-2→X:Y→Y
DotPut(Mat B[L,T],L,T,R,B)

IfEnd:IfEnd:IfEnd
IfEnd:IfEnd:IfEnd
IfEnd:IfEnd:IfEnd
IfEnd:IfEnd:IfEnd
IfEnd:IfEnd:IfEnd

Getkey1→K
K=79⇒Break
K=37⇒z+1→z:z=Z+1⇒1→z
K=28⇒z-1→z:z=0⇒Z→z
LpWhile 1

Cls
Mat B→Mat C
DotPut(Mat B[L,T],L,T,R,B)
Return
IfEnd:IfEnd
LpWhile 1


=====






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

人気ブログランキングへ


FC2ブログランキングへ







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

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


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

C.Basic コマンドリファレンス

 目 次
< English | 日本語 > 

記載内容は fx-9860GII (OS 2.04)で確認したものです.
本プロジェクトは進行中のため、追記修正があるかも知れません.


 
基本仕様互換拡張
表示エリア
グラフィックス座標系
内部カーソル行の制御
 
 基本動作コマンド互換拡張
  (代入)
" " (出力)
(出力と一旦停止)
? (入力)
?→ (入力)
 
 入出力コマンド互換拡張
Getkey
Getkey1, Getkey2, Getkey3
Locate
Locate X,Y,<値>[,R]
LocateYX Y,X,<値>[,R]
 
 プログラムコマンド互換拡張
If... Then... [Else...] IfEnd
If... Then... ElseIf...[[ElseIf...]...] IfEnd
For... To... [Step...] Next
While... WhileEnd
Do... LpWhile
Switch... [[Case...]...] Default
 
 プログラム制御コマンド互換拡張
Break
Return
Stop
Prog
GoSub... Lbl... Return✔
 
 ジャンプコマンド互換拡張
Goto... Lbl
Isz
Dsz
  
 関係演算子互換拡張
=, ≠, <, >, ≤, 
 
 論理演算子互換拡張
And, Or, Not, Nor
 
 記述コード互換拡張
: (区切りコード)
' (コメント文指定)
'/<C.Basic でのみ実行するなコマンド>
  
 変数互換拡張
A - Z (大文字)
~
a - z (小文字)✔
#, %
Local
 
配列互換拡張
Dim Z, Z[ ], Dim A, A[ ]
行列互換拡張
Dim, Mat, Trn, Fill( )
{m,n}→Dim Mat A (初期化)
[[...][...]...]→Mat A (初期化)
ElmSize( ), ColSize( ), RowSize( )
Mat B, Mat C, Mat D, Mat W, Mat I, Mat L
Mat A.x (x = p, b, w, l, f)
Save, Load( ) 
Mat A.v
 
ビットマップコマンド互換拡張
DotGet( ), DotPut( ), DotTrim( )
ReadGraph( ), WriteGraph( )
DotLife (ライフゲーム専用)
 
 表示設定 (テキスト)互換拡張
Cls (テキスト)
ClrText (テキスト)
Eng
EngOn, EngOff
Norm
Sci
Fix
Deg, Rad, Gra✔
°, r (rad), g (gra), DMS✔
Rnd, RndFix( )
f, p, n, μ, m✔
k, M, G, T, P, E✔
 
数学関数互換拡張
主なキー入力関数✔
Abs, Int, Frac, !, MOD( )✔
sinh, cosh, tanh, sinh-1, cosh-1, tanh-1 ✔
 
乱数互換拡張
Ran#, RanInt#( )
 
文字列操作コマンド互換拡張
Str, '#Str✔
Str, StrJoin( ), StrLen( ), StrCmp( ), StrSrc( )✔
StrLeft( ), StrRight( ), StrMid( )✔
Exp▶Str( ), Exp( ), StrUpr( ), StrLwr( )✔
StrInv( ), StrShift( ), StrRotate( ), \, +
Sprintf( )✔
  
 グラフィックス設定互換拡張
ClrGraph
ViewWindow
Xmin, Xmax, Xdot, Xscl, Xfct
Ymin, Ymax, Yscl, Yfct
 AxesOn, AxesOff
 GridOn, GridOff
 LabelOn, LabelOff
CoordOn, CoordOff
S-L-Normal, S-L-Thick, S-L-Dot, S-L-Broken
  
 グラフィックス Sketch コマンド互換拡張
Cls (グラフィックス)
ClrGraph
Text Y,X,<値>
Text Y,X,<値>[,N/R/O/V]
PxlOn Y,X
PxlOff Y,X
PxlChg Y,X
PxlTest(Y,X)
Plot
Line
PlotOn X,Y
PlotOff X,Y
F-Line X2,Y2,X1,T1
F-Line X2,Y2,X1,Y1,C/X
Vertical X
Vertical X,C/X
Horizontal Y
Horizontal Y,C/X
Circle X,Y,R
Circle X,Y,R,C/X
SketchNormal, SketchThick, SketchDot, SketchBroken
StoPict, RclPict
Rect, FillRect
 
タイマーコマンド互換拡張
%, Ticks✔
 
デバッグコマンド互換拡張
ACBreak
 
実行モード互換拡張
'#CBINT, "#CBint
'#CBASIC, '#CBasic, '#CBDBL, '#CBdbl
 
ハードウェア制御互換拡張
 Backlight
 
 






Copyright (C) 2013 - 2016 Krtyski / egadget.blog.fc2.com  All Rights Reserved.



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

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

やす (Krtyski)

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


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

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

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

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


人気ブログランキングへ


FC2ブログランキングへ


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

リンク
月別アーカイブ
Sitemap

全ての記事を表示する

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

この人とブロともになる

QRコード
QR