Top > 88VAユーザーズクラブ > Q&A集 > 77
#0077/9999 Q&A集
★タイトル (88VAUSER)  95/11/01  00:00  (102)
9.2    V3 BASICでソフトウエア割り込みを使う方法はありますか?
★内容

 マニュアルには載っていませんが、ソフトウエア割り込みを行なう命令がちゃんと
用意されています。

 なお、ここでは「ソフトウエア割り込みとは何か」については触れません。
MS−DOS上のプログラミングや8086系CPUに関する解説書を参照してくだ
さい。
 また、VAの各BIOSの使用法は以下の文献を参照してください。

7.OSL − 1.VA専用OSL
============================================================================
 272.TEKUMANI.LZH   UCH78101  92/ 1/23   0255872   0000242
     (PC88VAテクニカルマニュアル VAクラブ版 初版(転載禁止))
============================================================================


----------------------------------------------------------------------------
INT

機能 ソフトウエア割り込みを発生します。

書式 1) INT <割り込み番号>(<レジスタ>=<数式>[,<レジスタ>=<数式>...])
   2) INT <割り込み番号>(<レジスタ>=<数式>[,<レジスタ>=<数式>...] ;
                               <変数>=<レジスタ>[,<変数>=<レジスタ>...])

解説 1)
   ・指定した <割り込み番号> のソフトウエア割り込みを発生します。
   ・<レジスタ>=<数式> でレジスタに値を代入することができます。
   ・<レジスタ> には、AX,BX,CX,DX,SI,DI,BP,DS,ES が使用できます。

   2)
   ・書式2)とほぼ同じですが、割り込み終了時のレジスタの値を変数に得るこ
    とができます。<変数>=<レジスタ> でレジスタの値を変数に代入できます。
   ・<レジスタ>=<数式> の並びの後に ";"(セミコロン)をはさんでから、
    <変数>=<レジスタ> の並びを書きます。
   ・<レジスタ> には、AX,BX,CX,DX,SI,DI,BP,DS,ES,FLAGS が使用できます。
    FLAGS はフラグレジスタで、これに各フラグが次の様に割り当てられていま
    す。

   bit   15  14  13  12  11  10   9   8   7   6   5   4   3   2   1   0
     ?????????????????????????????????
     ?  ?  ?  ?  ?OF?DF?IF?TF?SF?ZF?  ?AF?  ?PF?  ?CF?
     ?????????????????????????????????


例  INT &H83(AX=0,DX=ASC("問"))

   ・テキストBIOSのファンクション00h「1文字表示」を使用して「問」
    という文字を表示します。
   ・このファンクションは、AHに0を、DXに文字コードをセットして呼び出
    します。


注意:BASIC V3.0(初代VA)では以下の制限があります。
   ・書式2)は使用できません。
   ・書式1)を使用するにあたっては、あらかじめ、
     DEF SEG=0:POKE2 &HAD*4,0
    を実行しておく必要があります。これはBASIC起動後1回だけ実行すれ
    ば十分です。


  --------- プログラム例 (1) ---------------------------------------------
  100 ' INT サンプル (1)
  110 CLEAR ,&H6FFF
  120 DEF SEG=0: POKE2 &HAD*4,0
  130 DEF SEG=&H6FFF
  140 BLOAD "WINTER.BGM",0
  150 STOPM
  160 INT &H8B(AX=&H1B00,ES=&H7000,BP=0)

 ・サウンドBIOSのファンクション1Bh「ブロックデータの演奏」を使用し
  て、アニメフレーマー形式BGMファイルを演奏します。
 ・この例では、”WINTER.BGM”をロードして演奏します。
 ・BASIC V3.1(VA2/3/1+91)では120行を削除してくだ
  さい。
  ------------------------------------------------------------------------


  --------- プログラム例 (2) ---------------------------------------------
  100 ' INT サンプル (2)
  110 CLEAR
  120 DEFINT A-Z
  130 INPUT "シフトJISコード=",SJIS
  140 INT &H8D(CX=&H1A,AX=SJIS;JIS=AX)
  150 IF JIS=-1 THEN PRINT "無効なシフトJISコードです。": END
  160 PRINT "JISコード=";HEX$(JIS)

 ・日本語入力フロントエンドプロセッサBIOSのファンクション1Ah「シフ
  トJIS→JIS変換」を使用して、漢字コードの変換を行ないます。
 ・このファンクションは、CLに1Ahを、AXにシフトJISコードをセット
  して呼び出すと、AXにJISコードを返します。シフトJISコードが正し
  くないときはAXに−1を返します。
 ・140行では、この返ってきた値を変数JISに代入しています。
 ・このプログラムはBASIC V3.0では動作しません。
  ------------------------------------------------------------------------


----------------------------------------------------------------------------

                         <<< end of article >>>


Top > 88VAユーザーズクラブ > Q&A集 > 77