2016年4月14日木曜日

LSI C-86 で PC-9801のBIOSを使ってみる練習

 ちょっとしたPC-9801用のプログラムを書く用事で、LSI C-86試食版を使ってPC-9801のBIOSを呼び出す方法を調べて、実験してみました。やりかたは LSI C-86 のマニュアルにちゃんと書いてあって、8086のレジスタに値をセットして、ソフトウェア割り込みを発行する関数があるので簡単でした。
LSI C-86 Ver. 3.30c試食版 は2016年現在もエル・エス・アイ ジャパン株式会社からダウンロードして使用することができます。ありがたいことです。日本語のマニュアルも付属しているので簡単に使えます。


/* LSIC-86試食版でPC-9801のBIOSを利用するテスト */

#include <stdio.h>
#include <dos.h>

void main()
{
    union REGS REG;     /* REGS は dos.h で定義されている8086のレジスタを格納する構造体 */
    
    REG.h.ah=0x00;              /* KEYBOARD READ COMMAND */
    int86(0x18, &REG, &REG);    /* KEYBOARD BIOS CALL (入力があるまで待つ)*/
    /* 戻り AH : スキャンコード */
    /*      AL : 内部コード */
    /*           'a'だと AX:0x1D61 */
    
    printf("AX : 0x%04X \n",REG.x.ax);
    
    /* 動いた。簡単に使えた。 */
}


 このサンプルでは、キーボードBIOSを呼び出して、何か一文字入力されるのを待って、入力されたキーコードを表示して終了します。

 PC-9801のBIOSの詳細は

  • PC-9800シリーズ テクニカルデータブック
  • 98ハードに強くなる本

のような本に詳しく載っています。古い本ですが発行部数が多かったようで、現在でもそれほど高くない金額で買うことができました。インターネットアーカイブで探せばPDFで読めるかもしれません。
 「テクニカルデータブック」は純粋なデータブックで、BIOS利用の手引きのようなことは書かれていません。「98ハードに強くなる本」には、8086CPUの簡単な解説やBIOS活用の手続きなんかが載っているのでいっしょに読むと参考になります。