<HTML>

<HEAD>

<TITLE>第１部</TITLE>

<META NAME="GENERATOR" CONTENT="Internet Assistant for Microsoft Word 2.0j Beta">
</HEAD>

<BODY>

<PRE>
<A NAME="BM1b"></A>　　第１部　　ＢＡＳＩＣ


<A NAME="BM1s"></A>　　　第１章　ＢＡＳＩＣ

　ここでは、ＭＳＸのＢＡＳＩＣで、あまり知られていない機能について説明します。


<A NAME="BM1_1_1"></A>　　　　１．１．１　エスケープシーケンス

　エスケープシーケンスは、主に通信などで使われますが、ＢＡＳＩＣのＰＲＩＮＴ命
令、ＢＩＯＳコールなどでも有効です。大抵の機能はほかのコントロールコードで代用
できるため、あまり使われていませんが、ＥＳＣ＋”Ｋ”，ＥＳＣ＋”Ｌ”などを使う
と、テキスト画面を上下にスクロールさせることができます。巻末に一覧表を載せてお
きましたので、いろいろと試してみてください。なお、なぜだか知りませんが、「ＭＳ
Ｘ２テクニカルハンドブック」では、ＥＳＣ＋”ｌ”の説明が抜け落ちています。


<A NAME="BM1_1_2"></A>　　　　１．１．２　ＤＩＳＫ−ＢＡＳＩＣの隠しコマンド

　ＭＳＸのＢＡＳＩＣでは、ＤＳＫＩ＄，ＤＳＫＯ＄というコマンドがサポートされて
います。これらを使うと、ＤＩＳＫ−ＢＡＳＩＣ上で、ディスクをセクター単位で直接
読み書きできます。これらの機能は、余り説明されたことがありませんが、正式な仕様
書にはきちんと機能が定められているので、普通に使っても問題はないでしょう。

●ＤＳＫＩ＄（＜ドライブ番号＞，＜論理セクター番号＞）
　＜ドライブ番号＞で指定されたディスクドライブの＜論理セクター番号＞で指定され
たセクターを読み込みます。

●ＤＳＫＯ＄　＜ドライブ番号＞，＜論理セクター番号＞
　＜ドライブ番号＞で指定されたディスクドライブの＜論理セクター番号＞で指定され
たセクターに書き込みます。ライトプロテクトされていても何も表示しません。

　両方とも、Ｆ３５１Ｈから２バイトの番地に書かれているアドレスに、１セクター単
位で読み書きします。この２バイトを書き換えると、違うアドレスに読み書きできるよ
うです。このエリアは、ＯＰＥＮ，ＣＬＯＳＥ，ＦＩＬＥＳ，ＰＲＩＮＴ＃などのディ
スク関係のステートメントを実行したときに破壊されます。なお、ドライブ番号は、０
がディフォルトドライブで、１がＡ，２がＢドライブといったような指定の仕方をしま
す。
　実際には、「Ａ＄＝ＤＳＫＩ＄（０，１４）」というふうに使います。（Ａ＄はダミ
ー）


<A NAME="BM2s"></A>　　　第２章　ＲＡＭディスクスイッチ

　ＭＳＸ２では、ＲＡＭディスク機能が追加され、あらかじめ「ＣＡＬＬ　ＭＥＭＩＮ
Ｉ」命令で領域を確保しておけば、裏ＲＡＭ（ＲＡＭの、００００Ｈ番地から７ＦＦＦ
Ｈ番地までの、普段はＢＡＳＩＣ−ＲＯＭに隠れて直接読み書きできない領域）をＲＡ
Ｍディスクとして使うことができます。実際にはアスキーファイルしか読み書きできな
いうえ、フロッピーディスクよりもアクセスが遅くて、使い物になりませんでしたが、
ディスクドライブを持っていないＭＳＸ２のユーザーなどは実際に使っているようです。
　ところで、ソフトの中には、裏ＲＡＭを直接読み書きして、機械語サブルーチンを置
いたり、データを置いたりしているものや、「ＭＳＸべーしっ君」（ログイン掲載版）
などのように、拡張ステートメントをＲＡＭのページ１（裏ＲＡＭの、４０００Ｈから
７ＦＦＦＨ番地まで）に置いて、ＢＡＳＩＣのＣＡＬＬ文で拡張ステートメントを呼び
出すものがあります。これらのソフトとＲＡＭディスク機能を同時に使用すると、裏Ｒ
ＡＭに置かれたプログラムが書き換えられて暴走します。これを防ぐためには、次のよ
うな処理を行ないます。

●機械語プログラムが裏ＲＡＭを使用する場合はＭＡＩＮ−ＲＡＭのＦＤ０９Ｈ番地の
ビット５をセットします。

　こうすると、「ＣＡＬＬ　ＭＥＭＩＮＩ」命令が実行できなくなります。
　なお、ＦＤ０９Ｈ番地のビット６がセットされているときは、ＲＡＭディスクが裏Ｒ
ＡＭを使っているので、機械語プログラムが裏ＲＡＭを使うことはできません。
　このほかにも、裏ＲＡＭを機械語プログラムとＲＡＭディスクが同時に使う方法もあ
るようです。


<A NAME="BM3s"></A>　　　第３章　ＢＡＳＩＣの拡張

　ＭＳＸでＢＡＳＩＣの機能を拡張する場合には、ＤＥＦＵＳＲ命令とＵＳＲ関数で機
械語サブルーチンを呼び出す方法が一般的です。しかし、いくつもの機械語サブルーチ
ンを使う場合や、いくつもの引数を引き渡す機械語サブルーチンでは、変数が一つしか
使えないＵＳＲ関数では役不足です。
　そこで、ＣＡＬＬ文によってステートメントを拡張することになります．ＣＭＤ命令
を拡張しているアプリケーションソフトもいくつかありますが、後で面倒なことが起こ
らないように、ＣＡＬＬ文を使ったほうがいいようです。
　ところで、「ＭＳＸ２テクニカルハンドブック」では、第５部７章３節で、ＣＡＬＬ
文の拡張の方法が記されていますが、これはＲＯＭカートリッジがＣＡＬＬ文を拡張す
る方法です。実際には１．２で述べたように、裏ＲＡＭにＣＡＬＬ文拡張ルーチンを置
くこともできます。もちろん、ＭＳＸ１では、裏ＲＡＭに拡張ステートメントを置く場
合には、そのソフトウェアはＲＡＭ６４Ｋの機械でないと動作しないことになります。
　裏ＲＡＭに拡張ステートメントを置くときには、次のように起動させます。

●裏ＲＡＭにＣＡＬＬ文拡張ステートメントを置く場合の起動方法
　１．まず、裏ＲＡＭのあるスロットを探します。（裏ＲＡＭを探す方法は第２部第１
　　　章で詳しく述べます。
　２．拡張ステートメントのプログラムを、９０００Ｈ−ＣＦＦＦＨ番地にロードしま
　　　す。（別に９０００Ｈ−ＣＦＦＦ番地でなくても、例えば８０００Ｈ−ＢＦＦＦ
　　　番地でも構いませんが、起動プログラムをＢＡＳＩＣで書けるので、このように
　　　するのがよいでしょう）
　３．拡張ステートメントのプログラムを、４０００Ｈ−７ＦＦＦＨ番地に転送します。
　　　（なぜ直接４０００Ｈ番地にロードしないのかというと、ＢＡＳＩＣのＢＬＯＡ
　　　Ｄ命令では、直接裏ＲＡＭにロードできないからです）
　４．スロットアトリビュート（ＦＣＣ９Ｈ＋裏ＲＡＭの基本スロット番号＊１６＋裏
　　　ＲＡＭの拡張スロット番号＊４＋ページ番号［必ず１になる］）に、２０Ｈを書
　　　き込みます。例えば、裏ＲＡＭが拡張スロット３−１にあった場合には、ＦＣＣ
　　　９Ｈ＋３＊１６＋１＊４＋１＝ＦＣＦＤＨ、つまり、ＦＣＦＤＨ番地に２０Ｈを
　　　書き込めばいいことになります。
　５．ＢＡＳＩＣのコマンドレベルに戻ります。

　これで、ＣＡＬＬ文拡張プログラムが裏ＲＡＭに置かれました。実際にＣＡＬＬ文を
使えるようになっているはずです。
　ＲＯＭカートリッジでＣＡＬＬ文を拡張する場合には、ＢＡＳＩＣが電源投入時にス
ロットアトリビュートに値を書き込んでくれるので、ユーザー側が値を書き込む必要は
ありません。しかし、裏ＲＡＭに拡張プログラムを置く場合には、ＢＡＳＩＣが値を書
き込んだ後にプログラムをロードするわけですから、ユーザー側が値を書き込むことに
なります。
　ＣＡＬＬ文拡張プログラムの作り方については、「ＭＳＸ２テクニカルハンドブック」
の第５部７章に書かれています。スロットアトリビュートの詳しい意味について
も、こちらを参考にしてください。

　拡張されたＣＡＬＬ文中でＢＡＳＩＣのエラーを起こす方法は以下のとおりです。
　Ｅレジスタにエラー番号、ＨＬレジスタに現在のテキストポインタの値を入れて、Ｂ
ＡＳＩＣの４０６ＦＨ番地をインタースロットコールする

　エラーを起こす際、ＢＩＯＳのＣＡＬＢＡＳ（０１５９Ｈ／ＭＡＩＮ）を使うと安全
です。

</PRE>

<HR>

<P>
※個人的以外の使用および無断転載を禁止します。
<P>
Copyright(C) 1996 by ASCAT All rights reserved.
<P>
<A HREF="../index.htm" >ホームページに戻る</A> <A HREF="tg4index.htm">目次に戻る</A>
</BODY>

</HTML>
