=============================================================================== アドイン版 Casio Basic Interpreter (& Compiler) ver 0.99r テスト版 マニュアル copyright(c)2015/2016 by sentaro21 e-mail sentaro21@pm.matrix.jp =============================================================================== C.Basicとは? =============================================================================== 純正Casio Basicとfx-5800Pの使い勝手のいいとこ取りを目指した高速互換CasioBasicです。 プログラムソースはストレージメモリ上に置かれますが、サポートコマンドの範囲内ではファイルフォーマット及び動作の互換があります。 =============================================================================== 実行モードについて =============================================================================== C.Basicでは純正CasioBasic同様の実数モードと、整数値しか扱えない整数モードがあります。 それぞれの実行モードの切り替えはコメント欄で '#CBasic '#CBASIC と記述するとそれ以降、実数モードに、 '#CBINT '#CBint と記述すると整数モードになります。 また、Setupからデフォルトの実行モードが設定できます。 コメント欄での変更はセットアップでの変更に優先します。 整数モードでは得られる結果がすべて整数値となりますが、 整数値しか扱わないプログラムでは実数モードに比べて1.5倍以上速くなります。 整数モードで実数を扱いたい場合は式の前に#を付けると実数計算を行います。ただし式の結果は整数値に丸められます。 (例)#Frac 1.23×100  通常整数モードではFlac 1.23は整数値範囲に丸められて結果になって1になってしまいますが、#を付けると実数計算されて123になります。 =============================================================================== 扱える数値について =============================================================================== 純正CasioBasicでは内部15桁、指数2桁の精度を持つ10進数ですが、 C.BasicではSDKのCの仕様と同じ倍精度実数型と4バイト整数型が基本になります。 倍精度実数型で扱える数値範囲は ±9.88131291682493e-323〜±1.7976931348623151e+308 純正よりは広い範囲の数値が扱えますが、演算は2進数で行われるので小数以下の数値を扱う場合は誤差に注意して下さい。 定数値において、C言語同様のプレフィックス(0Xまたは0B)を付けると32ビットまでの16進数、2進数が使用出来ます。 (例)0XFF,0B1010011 =============================================================================== 変数について =============================================================================== 純正CasioBasic同様に1文字変数としてA〜Zまでの26文字に加えてa〜zまでの小文字変数が使えます。 2文字以上の変数名には純正CasioBasic同様対応していません。 変数は実行モードの違いに関係なくそれぞれ独立した実数変数(A〜Z、a〜z)と整数変数(A〜Z、a〜z)が確保されますが、 そのままでは変数名の区別ができないので、%サフィックスを付けると整数変数(A%〜Z%、a%〜z%)、#サフィックスを付けると実数変数(A#〜Z#、a#〜z#)となります。 実数モードで%サフィックスを付けた整数変数を使う場合は特に気にすることはないのですが、 整数モードで#サフィックスを付けた実数変数を使う場合は、変数からの読み出し結果はすべて整数の範囲に丸められます。 実数値が整数範囲に収まらない場合は0になります。 (例)'#CBINT //整数モード指定    1.2345→A# // 実数変数Aに1.2345を代入したつもりが実際には整数の1が代入されます。 (例)A%→A#  整数変数のAより倍精度変数Aにコピーします。  整数から倍精度へのコピーは無問題ですが、倍精度値から整数値にコピーする場合、範囲に収まらない場合は0になります。 変数の初期化では純正同様の0→A〜Zの形式に加えて、整数、倍精度、個別に指定できます。 0→A〜Z# 倍精度変数を初期化します。 0→A〜Z% 整数変数を初期化します。 =============================================================================== VRAMについて =============================================================================== C.Basicでは純正CasioBasic同様にテキスト画面とグラフィックス画面がそれぞれ独立して存在していますが、 画面描画に使われるVRAMとしてはひとつだけであり、 テキストVRAM=テキストモードでのVRAM内容を保持しているRAMエリア、 グラフィックVRAM=グラフィックモードでののVRAM内容を保存しているRAMエリア、 を持っています。 テキスト系の描画コマンドが実行される場合は、VRAMをグラフィックVRAMに転送した後、テキストVRAMの内容をVRAMに転送して、VRAMに対してテキスト描画を行います。(テキストモード) テキスト系の描画コマンドが続く場合は、グラフィックスVRAMやテキストVRAMの転送は行われず、VRAMに対して描画を行います。(テキストモードのまま) ここで、グラフィック系コマンドが実行された場合は、VRAMをテキストVRAMに転送した後、グラフィックVRAMの内容をVRAMに転送して、VRAMに対してグラフィック描画を行います。(グラフィクモードに切り替え) このようにテキストVRAMとグラフィックVRAMは直接描画が行われる領域ではなく単なる保存領域となっていて、テキストモードとグラフィックモードを切り替えが起きると、その都度、VRAMとの入れ替えが行われます。 =============================================================================== 画面描画について =============================================================================== fx-9860GIIでは画面表示はVRAMに描かれたデータをLCDに転送することで表示するようになっています。 LCDへの転送はかなりのオーバーヘッドがあるので、描画コマンドの実行の度にLCD転送するのは非効率です。 そのためにC.Basicではコマンド終了時に毎回、VRAMからLCDへの転送=リフレッシュを行わずに 一定の時間が経った時にVRAMからLCDに転送するように設定出来ます。(セットアップおよびコマンドで可能です) この時、連続した描画の最後のコマンドがLCD転送されず描画されずにそのまま次の処理に移ってしまうということが起きる場合がありますので 強制的にLCD転送させるには、PutDispDDコマンドを使用して下さい。 =============================================================================== 行列の拡張について =============================================================================== 純正CasioBasicのMatrix行列との違いについて説明します。 通常モードでは純正と同じく実数モードでは実数の行列、整数モードでは整数の行列として使用できますが、 C.Basicでは実数(8バイト)および整数(4バイト)の他に、1ビット、バイト(1バイト)、ワード(2バイト)の型を持つ行列が使えます。 行列確保時にサフィックス指定すると要素の型指定ができます。 [.P]または[.p]で(1ビット)整数バイナリー行列。扱える値の範囲は(0〜1)です。 [.B]または[.b]で(8ビット)整数バイト行列。扱える値の範囲は(-128〜127)です。 [.W]または[.w]で(16ビット)整数ワード行列。扱える値の範囲は(-32768〜32767) [.L]または[.l]で(32ビット)整数ロングワード行列。扱える値の範囲は(-2147483648〜2147483647) [.F]または[.f]で(64ビット)倍精度実数行列。扱える値の範囲は(±9.88131291682493e-323〜±1.7976931348623151e+308) 行列は純正同様に{m,n}型で{row(行),column(列)}での実装となります。 例外として1ビット型は{X,Y}型の実装で{column(列,)row(行)}での実装となります。 1ビット行列は画面のVRAMと同じ構成となるので、 [.V]または[.v]指定するとVRAMを127行x63列の行列に割り当てて読み書きが出来ます。 さらに[.VG]でグラフィックVRAM、[.VT]でテキストVRAMを行列に割り当てることが出来ます。 尚、インデックスベースは0から始まり、行列サイズは{128,64}固定となります。 (例){128,64}→Dim Mat G.V  Mat Gにアクセスすることでその時点でのVRAMを直接読み書きできますが表示系コマンドではないので、  画面表示する場合は、コマンド実行後に強制表示させる必要があります。 (例){128,64}→Mat G.V    Screen.G // グラフィック画面選択(他のグラフィックコマンドでも可)    1→Mat G[63,31]    PutDispDD // 画面転送コマンド    グラフィック画面の真ん中に点を打ちます。    PxlOn 31,63と同じです。 (例){128,64}→Mat G.V    Screen.T // テキスト画面選択(他のテキスト系コマンドでも可)    1→Mat G[63,31]    PutDispDD // 画面転送コマンド    テキスト画面の真ん中に点が打てます。 =============================================================================== 行列の初期化 =============================================================================== 純正同様に、 {m,n}→Dim Mat A形式と、 [[1,2,3][4,5,6]]→Mat A形式の初期化をサポートしています。 行列要素の一括初期化として純正同様のFillコマンドと数値→Mat Aという形式をサポートしています。 (例)Fill(123,Mat A) (例)123→Mat A Mat A行列の全要素を123で初期化することができます。 Mat行列初期化コマンド[[ ]]において、改行&空白を入れることが可能です。 (例)  [[0B11001100,   0B00110011,   0B11001100,   0B00110011  ]]→Mat A.B =============================================================================== 行列の転置変換 =============================================================================== 純正CasioBasicと同じTrnコマンドをサポートしていますが純正CasioBasicとは違い、行列そのものを転置変換します。 (例)Trn Mat A  行列Aを転置変換します。 =============================================================================== 行列の要素サイズ変更 =============================================================================== 行列の型(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型行列とは転置行列の関係になります。  {127,63}→Dim Mat A.P  LCD画面の全画面ビットマップデータの仮想メモリとして利用できるバッファとして確保します。  Mat A→Dim Mat A.B  バイト型行列に変更すると、  要素サイズは{63,16}になります。 =============================================================================== 行列のインデックス開始値について =============================================================================== 純正CasioBasicでは行列のインデックスは1から始まりますが、C.Basicでは0から始まることができます。 セットアップもしくはコメント欄での記述で行列の始まりを選択できます。 (例)#Mat 1   従来通り1から始まります。 (例)#Mat 0   {3,2}→Dim Mat A  確保される行列は A[0,0]〜A[2,1]となります。  同時に画面座標も0まで有効になります。これで全画面が描画対象エリアとなります (例)Pxlon 0,0 =============================================================================== 行列の表示について =============================================================================== Mat行列エディタにおいて2進数、16進数での表示ができます。 行列編集モードで[F5]を押すと2進数表示、[F6]で16進数表示になります。 10進数表示に戻すには再度[F5][F6]を押します。 ただし、2進数表示はバイト(1バイト)とワードタイプ(2バイト)の行列までです。 =============================================================================== 文字列について =============================================================================== 純正CasioBasicと同じくStr文字変数や文字列関数が使えますが、文字列の実体は行列として実装しています。 プレフィックスとして$を付けることでMat行列は文字列として認識されます。 (例)["ABCDEF"]→Mat A    Locate 3,3,$Mat A  画面座標(3,3)に"ABCDEF"が表示されます。  最初に  {7,1}→Dim Mat A.B と同じ初期化が自動的にされます。  そして文字列は行列内ではバイト型データとして格納されます。 ・CasioBasic互換で使える文字列関数 + 文字列同士の連結 StrJoin( StrLen StrCmp( StrSrc( StrLeft( StrRight( StrMid( Exp>Str( Exp( StrUpr( StrDwr( StrInv( StrShift( StrRotate( (例)"ABCDEF"→Str 1    Locate 3,3.StrRight(Str 1, 3)  画面座標(3,3)に"DEF"が表示されます。 fx-9860GIIで使われる文字は1バイト文字(英数字、一部のコマンド)と2バイト文字(ほぼすべてのコマンド、特殊文字およびカナ)があり、 内部では1バイトと2バイト文字が混在する状態となりますが、文字関数での扱いは純正同様にすべて1文字扱いとなります。 文字列が格納された行列要素に直接アクセスする場合は文字の位置に注意して下さい。 =============================================================================== 文字列の初期化について =============================================================================== 純正と同じ文字変数Str 1-20はデフォルトではMat行列のs(小文字)を暗黙的に使用します。 デフォルトでは文字数が64文字までとなっています。 Str文字変数は自動的にMat行列として確保され、次の文字列コマンドにおいては純正互換で使えるので、行列を意識する必要はありません。 Str文字列の初期化は何も指定なければ次のようにMat s行列の初期化が自動的に行われます。  {20,65}→Dim Mat s なお、Str文字変数の実体となるMat行列は任意指定することも出来、Str変数を使う前にコメント欄で指定します。 (例)'#Str A  Str変数をMat Aとして確保します。  {20,65}→Dim Mat A.B  と同じです。 (例)'#Str B,30,256  Str変数をMat Bとして30個、255文字まで可能な変数として確保します。 文字列の代入は次の書式が使えます。 (例)"ABCDEEF"→Str 1 (例)["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 文字列を数式として評価、値を返します。 =============================================================================== 拡張文字列コマンドSprintfについて =============================================================================== 純正には数値から文字列への変換関数が無いので、追加の文字列関数として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と互換仕様となります。 引数は3つまで指定することが出来、整数/実数/文字列が指定可能です。  %プレフィックスで整数指定、#プレフィックスで実数指定となります。 プレフィックスを省略した場合はその時点での実行モード(実数/整数)となります。 書式指定と引数の対応のエラーチェックは無いので、Sprintf(コマンドでエラーが起きた場合はリセットか再起動となる可能性があります。 =============================================================================== コマンドリファレンス =============================================================================== サポートされているCacio Basic互換コマンド =============================================================================== ? ▲ (Disps) → If 〜 Then 〜 Else 〜 IfEnd Lbl 〜 Goto = != > < >= <= Dsz / Isz => Locate ClrMat Mat Dim Fill( For 〜 To 〜 Step 〜 Next While 〜 WhileEnd Do 〜 LpWhile Break Return Stop Getkey Prog Cls ClrText ClrGraph ViewWindow Plot / PlotOn / PlotOff / PlotChg Circle Line / F-Line Vertical / Horizontal PxlOn / PxlOff / PxlChg PxlTest( Text DrawGraph Graph Y= GraphY SketchNormal / SketchThick / SketchBroken / SketchDot S-L-Normal / S-L-Thick / S-L-Broken / S-L-Dot G-Connect G-Plot CoordOn / CoordOff GridOn / GridOff AxesOn / AxesOff LabelOn / LabelOff Xmin Ymin Xmax Ymax Xscl Yscl Xfct Yfct Xdot Deg Rad Grad And Or Not Xor Abs Int frac Intg ! MOD( log ln 10^x e^x x^-1 sqr x^2 sqr^-3 sin cos tan sin^-1 cos^-1 tan^-1 sinh cosh tanh sinh^-1 cosh^-1 tanh^-1 femto pico nano micro milli Kiro Mega Giga Tera Peta Exa °(deg) r (rad) g (gra) ° >DMS Str StrJoin( StrLen StrCmp( StrSrc( StrLeft( StrRight( StrMid( Str>Exp( Exp( StrUpr( StrDwr( StrInv( StrShift( StrRotate( StoPict / RclPict Ran# RanInt#( Rnd RndFix( Norm / Fix / Sci Eng / EngOn / EngOff =============================================================================== コマンドリファレンス 拡張コマンド =============================================================================== ------------------------------------------------------------------------------- Eng,Norm,Fix,Sci ------------------------------------------------------------------------------- Eng,Norm,Fix,Sciの状態の読み出しが可能です。 Engモードは変数(Eng)で取得できます。 返り値0:EngOff 返り値1:EngOn Norm、Fix、Sci はそれぞれ引数に負数を指定すると現在の設定値を返します。 ※引数の()は無くても構いません。 現在の設定がNorm1の場合の返り値は、 Norm (-1)で1 Fix (-1)では-1 Sci (-1)では-1 現在の設定が Fix 8の場合は、 Norm (-1)で-1 Fix (-1)では 8 Sci (-1)では-1 になります。 ------------------------------------------------------------------------------- StoPict/RclPict ------------------------------------------------------------------------------- ストレージメモリと内部ヒープメモリで動作するモードを切替できます。 セットアップにてストレージメモリとの切り替え動作になります。 ヒープメモリ指定の場合はPictファイルの互換が無くなる代わりに速度向上しました。 Basic動作上の互換性は確保されていますので、純正CasioBasicのソースはそのままで動きます。 ------------------------------------------------------------------------------- ElseIf ------------------------------------------------------------------------------- (書式)If〜Then〜ElseIf〜IfEnd (例) If A:Then Locate 1,1,"A" ElseIf B:Then Locate 1,2,"B" EndIf ・Ifに対応するIfEndが無い場合にエラーとするかどうかをセットアップで選択出来ます。  セットアップでチェックをOnにすれば実行時に対応するIfEndが無いIfコマンドの箇所でエラーになります。 ------------------------------------------------------------------------------- Locate ------------------------------------------------------------------------------- ・Locateコマンドの表示で反転表示が可能です。  コマンドの最後に[,R]で反転表示となります。 (例)Locate 1,2,"Test",R   "Test"がグラフィック座標(1,2)に反転表示で表示されます。 ・Sprintf、Locate、Textでの#プレフィックスは実数式評価としました。  整数モードでは常に整数値しか得られないので、#プレフィックスを付けた式では実数式評価で実数値が返ります。  整数モードでしか意味は無いのですが整数モードにおけるSprintfやLocate、Textコマンドで実数値を扱うことが出来ます。 (例)Locate 1,1,123+0.456  整数モードでは整数値に丸められて123となってしまうのですが、 (例)Locate 1,1,#123+0.456  #プレフィックスを付けると実数で123.456と表示されます。  式評価は実数で行われるために整数変数には%指定を付ける必要があります。 ------------------------------------------------------------------------------- Switch Case Default SwitchEnd ------------------------------------------------------------------------------- (説明)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 ------------------------------------------------------------------------------- ACBreak ------------------------------------------------------------------------------- (説明)プログラム中で[AC]での一時中止と同じ結果となります。  セットアップにてACBreakコマンドの有効/無効の切り替えが出来ます。  無効(off)にした場合はスルーされてプログラムの実行に何も影響を及ぼしません。 (書式)ACBreak (例)ACBreakStop  直後にStopコマンドを付けることで、ACBreakStopとなりますが、  これ以降に実行されるACBreakコマンドをすべてキャンセルします。  セットアップでのキャンセルと同じです。 ------------------------------------------------------------------------------- Prog ------------------------------------------------------------------------------- (説明)Localコマンドを使うことで引数を記述することが出来ます。 (例)Prog "TEST",123,456,N ------------------------------------------------------------------------------- Local ------------------------------------------------------------------------------- (説明)デフォルトでは小文字変数は全てローカル変数扱いですが、任意の小文字変数をローカル変数とすることが出来ます。     プログラム内で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層程度までとなっています。 ------------------------------------------------------------------------------- Return ------------------------------------------------------------------------------- (説明)サブルーチンからメインルーチンに戻ります。返り値を指定することができます。 (例)Return 式   返り値をAnsに代入してメインルーチンに戻ります。 ------------------------------------------------------------------------------- Gosub ------------------------------------------------------------------------------- (説明)ひとつのプログラム中でサブルーチンが使えます。 (例)Gosub A  Label Aから始まるプログラムを実行しReturnコマンドで復帰します。 (例)Gosub A,123,456  引数もProgコマンド同様に使えますが、同じプログラム内なので大域変数と同じ扱いです。 ------------------------------------------------------------------------------- ElemSize( ColSize( RowSize( ------------------------------------------------------------------------------- (説明)行列のサイズを取得する関数です。 (書式)ElemSize(  1要素のサイズ(ビット)を返します。 (例) ElemSize( Mat A ) (書式)ColSize(  {m,n}のm,行サイズを返します。 (書式)RawSize(  {m,n}のn,列サイズを返します。 ------------------------------------------------------------------------------- Getkey ------------------------------------------------------------------------------- (説明)純正コマンドの機能に加えて、     キーが押されるまで待つGetkey1(SDKのGetKeyと同じ)     キーバッファをクリアしてから入力するGetkey2     さらに一定時間キー入力待ちをするGetkey3 があります。     キーコードはSDK互換ではなくCasioBasicのGetkey互換です。     SH4A版のfx-9860GIIのGetkeyコマンドにてGetkey1〜2と同様に[SHIFT]+[OPTN]でのバックライト制御が可能です。     [SHIFT]+[AC]での電源OFFには未対応です。 (例)Getkey3(128)  コマンド実行時のタイマーを基準として128Ticksカウント(=1秒)のウエイト期間中にキー入力があれば最後に押されたキーコードが返ります。 (例)Getkey3(128,A)  Aをタイマーの初期値として現在のタイマー値が128Ticksカウント経つまでキー待ちをします。 ※SH3機での入力が上手くいかない場合はGetkey1の代わりにGetkey2を使用してください。 =============================================================================== コマンドリファレンス 拡張グラフィックコマンド =============================================================================== ------------------------------------------------------------------------------- Line,FLine,Vertical,Horizontal,Circle,Rect,FillRect ------------------------------------------------------------------------------- コマンドの末尾に[,C]を加えると消去します。[,X]で反転します。  (例)FLine 1,1,30,20,X ------------------------------------------------------------------------------- Text ------------------------------------------------------------------------------- (説明) コマンドの最後に[,R]で反転表示、[,O]でOr表示、[,V]で反転Or表示が出来ます。  [.N] Normal  [.R] Reverse  [,O] Or  [,V] reVerse or (例)Text 20,80,"Test",R   "Test"がグラフィック座標(80,20)に反転表示で表示されます。 ------------------------------------------------------------------------------- LocateYX ------------------------------------------------------------------------------- (説明)グラフィック画面にLocateと同じサイズの文字表示が出来ます。     座標指定はTextコマンドと同じくY座標が先になります。     コマンドの最後に[,R]で反転表示となります。 (例)LocateYX 20,80,"Test",R   "Test"がグラフィック座標(80,20)に反転表示で表示されます。 ------------------------------------------------------------------------------- Rect( ------------------------------------------------------------------------------- (説明)矩形を表示します。座標は実座標指定となります。 (例)Rect 1,1,127,63   画面いっぱいに枠を描きます。 ------------------------------------------------------------------------------- FillRect( ------------------------------------------------------------------------------- (説明)塗りつぶした矩形を表示します。 (例)FillRect 1,1,127,63   画面を塗り潰します。 ------------------------------------------------------------------------------- ReadGraph( ------------------------------------------------------------------------------- (説明)グラフィック画面のビットマップデータをビット単位で読み取ります。 (書式)ReadGraph(px1,py1,px2,py2)→Mat A   グラフィック画面の(px1,py1)-(px2,py2)の範囲をMat A行列に取り込みます。   行列は事前に確保しておく必要はありません。自動的に適切な行列サイズで確保します。   行列の型指定が無い場合は1ビット型になります。   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)より斜めの線[/]が描画されます。 (書式2)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   でも同じ結果となります。  ビットマップデータは8ビット単位で左上が基準になります。 ------------------------------------------------------------------------------- DotGet( ------------------------------------------------------------------------------- (例)DotGet( px1,py1, px2,py2)→Mat A[x,y]   画面上の(px1,py1)-(px2,py2)の範囲をMat A[x,y]を始点として取り込みます。   指定範囲よりも行列が足りない場合は行列サイズまで取り込みます。 ------------------------------------------------------------------------------- DotPut( ------------------------------------------------------------------------------- (例)DotPut( Mat A, x,y, px1,py1, px2,py2)   Mat A行列の(x,y)の要素を始点として、画面上の(px1,py1)-(px2,py2)の範囲に点を打ちます。 (例)DotPut( Mat A[x,y], x1,y1, x2,y2)→Mat B   Mat A行列の[x,y]を始点として、Mat Bの[x1,y1]-[x2,y2]の範囲にコピーします。   Mat Bがコピー範囲が収まる広さを確保していない場合は、Mat Bに収まる範囲でコピーします。   グラフィック画面への転送は行いません。 (例)DotPut( Mat A[x,y], x1,y1, x2,y2)   Mat A行列の(x,y)の要素を始点として、画面上の(px1,py1)-(px2,py2)の範囲に点を打ちます。 ------------------------------------------------------------------------------- DotTrim( ------------------------------------------------------------------------------- (例)DotTrim(Mat A, x1,y1,x2,y2)→Mat B Mat行列内の[X1,y1]-[x2,y2]範囲の0ではないデータの矩形領域をトリミングしてMat B行列にコピーします。 コピーする行列が確保されてない場合は新たに確保されます。 (例)DotTrim(px1,py1,px2,py2)→Mat A グラフィック画面からトリミング入力、 グラフィックの(px1,py1)-(px2,py2)の範囲のドットが打たれている矩形領域をMat A行列にコピーします。 どちらの場合も、矩形領域サイズ(Mat行列の確保サイズ)はX,Y変数に自動的に入ります。 0ではないデータの矩形領域の右上X,Y座標は小文字変数x,yに自動的に入ります。 ------------------------------------------------------------------------------- CellSum( ------------------------------------------------------------------------------- (説明)ライフゲーム専用コマンドです。 (例)CellSum(Mat B[X,Y])→C   Mat B[X,Y]周辺8ドットの合計値を計算します。 ------------------------------------------------------------------------------- DotLife( ------------------------------------------------------------------------------- (説明)ライフゲーム専用コマンドです。 (例)DotLife( Mat A, x1,y1,x2,y2)→Mat B  Mat Aの座標(x1,y1)-(x2,y2)の範囲をライフゲーム演算してMat Bに格納します。  Mat AとMat Bは同じサイズの行列である必要があります。  コマンド実行後に(x1,y1)-(x2,y2)の範囲よりもセルが広がった場合、その矩形範囲より±1の座標が整数変数に自動的に入ります。  整数変数L : 左端座標-1  整数変数R : 右端座標+1  整数変数T : 上端座標-1  整数変数B : 下端座標+1 =============================================================================== コマンドリファレンス 拡張その他コマンド =============================================================================== ------------------------------------------------------------------------------- Ticks ------------------------------------------------------------------------------- (説明)1/128sのタイマー変数です。 (例) (例)0→Ticks 初期化します。 ------------------------------------------------------------------------------- BackLight ------------------------------------------------------------------------------- (説明)バックライトコマンドの設定、状態を読み出します。バックライト装備のfx-9860GIIのみ対応となります。 (書式)Backlight n  n=0 バックライト消灯  n=1 バックライト点灯  n=2 バックライト反転 (書式)Backlight  バックライトの状態を返します。 ------------------------------------------------------------------------------- RefrshCtrl/RefrshTime ------------------------------------------------------------------------------- ・画面のリフレッシュをコマンドで設定できるRefrshCtrlとRefrshTimeコマンドを追加しました。 (書式)RefrshCtrl 式 (書式)RefrshTime 式 (例)RefrshCtrl 0  リフレッシュコントロール無し。Off (例)RefrshCtrl 1  リフレッシュコントロール有り。Grpモードに設定します。 (例)RefrshCtrl 2  すべてのリフレッシュコントロール有り。Allモードに設定します (例)RefrshTime 5  リフレッシュコントール時間を5に設定します。 式の中で使うとRefreshCtrlとRefrshTimeコマンドを使うと現在の値を返します。 ------------------------------------------------------------------------------- Screen ------------------------------------------------------------------------------- (説明)VRAMアクセス時の対象VRAMを選択します。 (書式1)Screen  テキスト/グラフィックの切り替えをします。 (書式2)Screen.T またはScreen.t  テキストVRAMに切り替えます。 (書式3)Screen.G またはScreen.g  グラフィックVRAMに切り替えます。 (書式4)Screen 式  式の値が0の場合はテキストVRAM、1の場合はグラフィックVRAMに切り替えます。 式の中でScreenコマンドを使うとテキストVRAMの場合は0,グラフィックVRAMでは1が返ります。 ------------------------------------------------------------------------------- PutDispDD ------------------------------------------------------------------------------- (説明)強制的に画面更新をします。 (書式1)PutDispDD ------------------------------------------------------------------------------- FkeyMenu( ------------------------------------------------------------------------------- (説明)ファンクションメニューを表示、消去します。(グラフィック画面だけでなくテキスト画面でも可) (書式1)FkeyMenu( n,"文字列")  グラフィック画面のファンクションnに文字列を表示します。n:1〜6 (書式2)FkeyMenu( n,"文字列",R)  グラフィック画面のファンクションnに文字列を反転表示します。n:1〜6 (書式3)FkeyMenu( n,"",C)  グラフィック画面のファンクションnを消去します。n:1〜6 (書式4)FkeyMenu( n,"文字列",T)  テキスト画面のファンクションnに文字列を表示します。n:1〜6 (書式5)FkeyMenu( n,"文字列",TR)  テキスト画面のファンクションnに文字列を反転表示します。n:1〜6 (書式6)FkeyMenu( n,"",TC)  テキスト画面のファンクションnを消去します。n:1〜6 ------------------------------------------------------------------------------- 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]に読み込みます ------------------------------------------------------------------------------- IsExist( ------------------------------------------------------------------------------- (説明)指定されたファイルが存在しない場合は0が返り値となります。ファイルが存在する場合はファイルサイズが返り値となります。 (例)IsExist("/ABC/TEST")  "/ABC/TEST.bin"が存在すればファイルサイズが、存在しなければ0となります。  ファイル名は8文字まで、拡張子を省略した場合は[.bin]となります。 =============================================================================== コマンドリファレンス 拡張その他コマンド =============================================================================== 「’/」以降はコメントではなくコマンドとして実行します。 C.Basic動作時にのみ実行するコマンドを記述できます。 =============================================================================== =============================================================================== コマンドリファレンス マシン語関連コマンド =============================================================================== C.Basicではメモリ上のSH3/SH4Aのマシン語プログラムを実行できます。 現状、自由にアクセス出来るメモリは行列として確保したエリアだけとなっています。 行列の先頭アドレスはVarPtr()もしくはアドレス演算子&で求められます。 C言語同様にアドレス演算子&、間接演算子*も使えます。 ------------------------------------------------------------------------------- SysCall() ------------------------------------------------------------------------------- (説明)OSで用意されているシステムルーチンを呼び出す関数です。引数は4つまでです。引数は省略できます。 (書式)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() ------------------------------------------------------------------------------- (説明)任意のアドレスのマシン語プログラムを実行する関数です。引数は4つまでです。引数は省略できます。 (書式)Call(マシン語アドレス [,引数1][,引数2][,引数3][,引数4] ) (例)Call( 0x8802F000,A,B,C,D )→R  A→R4レジスタ、A→R5レジスタ、A→R6レジスタ、A→R7レジスタ、0x8802F000番地にあるマシン語プログラムを呼び出し返り値がRに入ります。 ------------------------------------------------------------------------------- Peek( ------------------------------------------------------------------------------- (説明)メモリのデータを読み出す関数です。型指定[.B][.W][.L][.F]が無い場合はバイト読み出しです。 間接演算子*で置き換えることが出来ます。 (書式)Peek( アドレス )[.B][.W][.L][.F] (書式)*( アドレス )[.B][.W][.L][.F] (例)Peek(0x8802E000).B→A% (例)*(0x8802E000).B→A%  0x8802E000番地の内容をバイト(1バイト)で読み出し、整数変数A%に代入します。 (例)Peek(0x8802E000).W→A% (例)*(0x8802E000).W→A%  0x8802E000番地の内容をワード(2バイト)で読み出し、整数変数A%に代入します。 (例)Peek(0x8802E000).L→A% (例)*(0x8802E000).L→A%  0x8802E000番地の内容をロングワード(4バイト)で読み出し、整数変数A%に代入します。 (例)Peek(0x8802E000).F→A (例)*(0x8802E000).F→A  0x8802E000番地の内容を倍精度実数(8バイト)で読み出し、変数Aに代入します。 ------------------------------------------------------------------------------- Poke( ------------------------------------------------------------------------------- (説明)メモリにデータを書き込みます。型指定[.B][.W][.L][.F]が無い場合はバイト書き込みです。 間接演算子*で置き換えることが出来ます。 (書式1)Poke( アドレス )[.B][.W][.L][.F] , データ (書式1)*( アドレス )[.B][.W][.L][.F] , データ (書式2)データ→Poke( アドレス )[.B][.W][.L][.F] (書式2)データ→*( アドレス )[.B][.W][.L][.F] (例)Poke(0x8802E000).B,A% (例)A%→Poke(0x8802E000).B (例)A%→*(0x8802E000).B  整数変数A%の値を、0x8802E000番地にバイト(1バイト)書き込みします。 (例)Poke(0x8802E000).W,A% (例)A%→Poke(0x8802E000).W (例)A%→*(0x8802E000).W  整数変数A%の値を、0x8802E000番地にワード(2バイト)書き込みします。 (例)Poke(0x8802E000).L,A% (例)A%→Poke(0x8802E000).L (例)A%→*(0x8802E000).L  整数変数A%の値を、0x8802E000番地にロングワード(4バイト)書き込みします。 (例)Poke(0x8802E000).F,A (例)A→Poke(0x8802E000).F (例)A→*(0x8802E000).F  実数変数Aの値を、0x8802E000番地に倍精度実数(8バイト)書き込みします。 ------------------------------------------------------------------------------- VarPtr( ------------------------------------------------------------------------------- (説明)変数、行列のアドレスを返す関数です。 アドレス演算子&で置き換えることが出来ます。 (書式1)VarPtr(変数) (書式2)&(変数) (例)VarPtr(A%) (例)&A%  整数変数A%の変数のアドレスが返ります。 (例)VarPtr(Mat A) (例)&Mat A  行列Aの先頭アドレスが返ります。 (例)VarPtr(Mat A[20,10]) (例)&Mat A[20,10]  行列A[20,10]の値が格納されているアドレスが返ります。 ------------------------------------------------------------------------------- ProgPtr() ------------------------------------------------------------------------------- (説明)プログラムのアドレスを返す関数です。 (例)ProgPtr()  現在のプログラムが格納されているアドレスを返します。 =============================================================================== セットアップでの設定 =============================================================================== Draw Type :on/off Coord :on/off Grid :on/off Axes :on/off Label :on/off Derivative :on/off Sketch Line :Normal/Thick/Broken/Dot Angle :Rad/Deg/Grad ----------------------------ここまで純正互換 ------------------------------------------------------------------------------- Display :Fix/Sci/Nrm/Eng 少数以下の桁数は15まで。0を指定した場合は16桁となります。 Nrmに関してはNrm1とNrm2のみCasioBasic互換10桁表示仕様です。 Nrm1:0.01以下は指数表示 Nrm2:0.000000001以下は指数表示 それ以外は桁数指定となります。 Eng :ENGオフ、ENGオン(/E)、3桁区切り(/3)の切り替えとなります。 ------------------------------------------------------------------------------- Use Hidden RAM :on/off 隠しRAMをC.Basicで使用するかどうかを設定します。 ------------------------------------------------------------------------------- Break Stop :on/off [AC]キーによる中断の有無。 offの場合は[AC]キーによる中断が出来ません。 ------------------------------------------------------------------------------- Exec TimeDsp:on/off プログラム終了時にプログラムの実行時間を表示します。 計測開始はプログラムの最初の行からですが、途中?コマンドや一時停止コマンドがあった場合はそれまでの計測時間はリセットされます。 ------------------------------------------------------------------------------- IfEnd Check:on/off IfとIfEndがきちんと対応しているかどうかをチェックします。 ------------------------------------------------------------------------------- Key 1st time:25ms〜1000ms(デフォルト値 500ms) リピート開始までの時間 (25ms単位) Key Rep time:25ms〜500ms(デフォルト値 125ms) リピート継続時間 (25ms単位) ------------------------------------------------------------------------------- SkipUp/Down : 1〜9999 SkipUp/SkipDownでの一回分の改ページ数を指定します。 ※改行ごとに一行増える論理行ではなく画面上での見た目上での物理行数です。 ------------------------------------------------------------------------------- Mat Dsp mode:[m,n]/[X,Y] 行列エディタ画面での表示形式を指定します。 それぞれ転置行列の関係になりますが、行列内部は何も変化なく表示上だけの指定です。 Matrix base:0/1 行列インデックスの初期値を0か1が指定します。 初期値に0を指定した場合は、グラフィック座標が左端の0から有効になります。 ------------------------------------------------------------------------------- Pict mode:S.Mem/Heap (S.Mem)Pictファイルをストレージメモリ上に作ります。若干時間がかかります。 (Heap)Pictファイルとしては作成されずにメモリ上に互換ファイルが作成されます。 ------------------------------------------------------------------------------- ACBreak :on/off ACBreakコマンドの有効/無効を切り替えます。 ------------------------------------------------------------------------------- RefrshCtl DD:off/Grp/All 描画コマンドにおける画面の更新を設定できます。 Off:リフレッシュコントロール無し。表示においては純正互換仕様です。 Grp:グラフィックコマンドのみリフレッシュコントロール有り。ClrText,Locate,Text,LocateYX、””は無しで以前のバージョン互換です。 All:すべての描画コマンドがリフレッシュコントロールされた表示となります。必要に応じてPutDispDDコマンドが必須となります。 Time:リフレッシュコントール時間を設定します。n/128秒単位で画面更新します。デフォルトは3で約1/42秒での更新となっています。 ------------------------------------------------------------------------------- Execute mode:Dbl#/Int% デフォルトのプログラムの実行モードを切り替えます。 ===============================================================================