BIOS一覧表(抜粋版)
本書はZ-1/FX-890Pに搭載されているBIOSの機能を紹介したもので、この資料はアセンブラでプログラムを組む際に必要となるものです。
なお、本書では前提条件として8086アセンブラに関する基本的な知識があるものとして説明を行っていますので、「アセンブラってなに?」という人はこれ以上読み進めないほうが賢明でしょう。
本来Z-1/FX-890Pに搭載されているBIOSは全部で180種類以上存在しているのですが、ここで紹介しているのはその内から利用価値の高そうなものをチョイスして記してあります。
※本書はZ-1/FX-890P用の資料に基づいて書かれたものなので、これが必ずしも全てZ-1GRに対して有効であるとは限らない、という点に注意してください。
…まあ恐らくこれから紹介するものには変更は加えられていないと思いますけど。
1.BIOSの使用に関する注意
基本的にBIOSはアセンブラからソフトウェア割込み(INT 41H)で呼び出される形で利用されるのですが、その際に幾つかの注意事項があります。
2.BIOSの使用方法
BIOSの実行に際しては、まずAHレジスタにBIOS番号を設定したのち、その他のレジスタに必要なデータを設定してからソフトウェア割り込みの41H番(INT 41H)を実行することで特定の処理を実行します。
例)
MOV AH,01H # BIOS番号をセット MOV DL,65 # データをセット INT 41H # BIOSの呼び出し IRET
3.BIOSの一覧表
以下に示すのはBIOS番号とその機能を一覧形式にしたものです。
欠番になっている番号は機能が判明していないか、もしくは個人的に利用価値が低いと判断して記載しなかったものです。00H=CALモードへの強制移行
01H=LCDへの1バイト出力
02H=プリンタへ1バイト出力
03H=キーボードからの1バイト入力 (カーソル点滅あり)
04H=キーボードからの1バイト入力 (カーソル点滅なし)
05H=[BRK]キー押下時の処理先指定
06H=RS-232CをOPENする
07H=RS-232CをCLOSEする
08H=RS-232Cへの1バイト出力
09H=RS-232C受信バッファからの1バイト入力
0AH=RS-232C通信バッファのチェック
0BH=LCD表示を反転表示モードにする
0CH=LCD表示を通常表示モードにする
0FH=カーソル位置の変更
10H=表示のクリア
11H=ドットバッファの内容をLCD画面に出力する
12H=ドットバッファの指定座標にドットを点灯/消灯する
13H=ドットバッファに対して直線を描く
14H=ドットバッファに対して四角形を描く
15H=ドットバッファに対して円を描く
17H=ドットバッファのトップアドレスを返す
1AH=キーバッファが空かどうかを調べる
1BH=キーバッファの内容をクリアする
1DH=キーバッファから一文字分のコードを取り出す
1EH=キーバッファ中の次の一文字分のコードを調べる
1FH=[BRK]キーと電源スイッチのサンプリングを行う
20H=指定された文字列をLCD画面に表示する
22H=指定された文字列をRS-232Cに送信する
23H=スクリーンエディタを使って文字列を入力する
28H=BEEP音を鳴らす
29H=指定周波数のブザーを鳴らす
2AH=RS-232C/セントロニクスの信号線をHIGHにする
2BH=RS-232C/セントロニクスの信号線をLOWにする
2CH=RS-232C/セントロニクスの信号線の状態を調べる
2FH=指定時間だけWAITする
3CH=現在のカーソル位置を返す
41H=ユーザー定義文字フォント格納エリアのトップアドレスを返す
43H=DLの下位4ビットを16進数一桁でLCDに表示する
44H=DLの内容を16進数二桁でLCDに表示する
45H=DXの内容を16進数四桁でLCDに表示する
46H=DXの内容をBCD五桁でLCDに表示する
47H=現在押しているキーをリピートさせる
67H=全システムの初期化
68H=PAINT命令
6FH=INPORT,OUTPORTのWAIT時間の変更
70H=30pin拡張端子にデータを出力する
71H=30pin拡張端子からデータを入力する
7EH=Pリセットする
7FH=電源をOFFする
4.BIOS機能詳細
各BIOSの入出力条件と処理内容の詳細を示します。
----------
番号 : 00H=CALモードへの強制移行 入力 : AH=00H 出力 : なし 機能 : ユーザープログラムを強制終了してCALモードに強制移行する。
----------
番号 : 01H=LCDへの1バイト出力 入力 : AH=01H
DL=キャラクターコード出力 : なし 機能 : DLで指定された文字をLCDのカーソル位置に表示する。
文字が制御コードの時はその機能を実行する。
----------
番号 : 02H=プリンタへ1バイト出力 入力 : AH=02H
DL=キャラクターコード出力 : なし 機能 : DLで指定された文字をプリンタへ送信する。
----------
番号 : 03H=キーボードからの1バイト入力 (カーソル点滅あり) 入力 : AH=03H 出力 : DL=入力された文字のキャラクターコード 機能 : 一文字入力されるまで待機して、そのコードを返す。
カナ入力やシフト入力も可能。
オートパワーオフ機能が働く。
----------
番号 : 04H=キーボードからの1バイト入力 (カーソル点滅なし) 入力 : AH=04H 出力 : DL=入力された文字のキャラクターコード 機能 : 一文字入力されるまで待機して、そのコードを返す。
カナ入力やシフト入力も可能。
オートパワーオフ機能が働く。
----------
番号 : 05H=[BRK]キー押下時の処理先指定 入力 : AH=05H
CX=処理先セグメントアドレス
BX=処理先オフセットアドレス出力 : なし 機能 : キー入力時に[BRK]キーが押された場合の処理先を指定する。
処理先には「JMP」命令により移行します。
----------
----------
番号 : 07H=RS-232CをCLOSEする 入力 : AH=07H 出力 : なし 機能 : RS-232Cのハード的なCLOSEを行い、シリアル通信割込みを禁止する。
----------
番号 : 08H=RS-232Cへの1バイト出力 入力 : AH=08H
DL=コード出力 : なし 機能 : RS-232Cに対してDLのコードを出力する。
RS-232CをOPENしてから実行すること。
内部で[BRK]キーと電源スイッチの監視をしている。
----------
番号 : 09H=RS-232C受信バッファからの1バイト入力 入力 : AH=09H 出力 : DL=受信データ 機能 : RS-232C受信バッファから1バイト分データを読み出す。
通信中にエラーが発生した場合、ユーザープログラムに処理が戻ってこない。
----------
番号 : 0AH=RS-232C通信バッファのチェック 入力 : AH=0AH 出力 : DH=0:データなし 1:データあり 機能 : RS-232Cの通信バッファに受信データがあるかどうかチェックする。
----------
番号 : 0BH=LCD表示を反転表示モードにする 入力 : AH=0BH 出力 : なし 機能 : 本BIOSを実行すると、以後LCDに対しての文字表示が反転表示になる。
----------
番号 : 0CH=LCD表示を通常表示モードにする 入力 : AH=0CH 出力 : なし 機能 : 本BIOSを実行すると、以後LCDに対しての文字表示が通常表示になる。
----------
番号 : 0FH=カーソル位置の変更 入力 : AH=0FH
BL=カーソルX座標
BH=カーソルY座標出力 : なし 機能 : 指定位置にカーソルを移動させる。
指定位置が画面外のときは座標は変化しない。
----------
番号 : 10H=表示のクリア 入力 : AH=10H 出力 : なし 機能 : LCD画面を消去する。
----------
----------
番号 : 12H=ドットバッファの指定座標にドットを点灯/消灯する 入力 : AH=12H
BL=X座標 (00H〜BFH)
BH=Y座標 (00H〜3FH)
DL=0:ドットをセットする。 1:ドットをクリアする。出力 : なし 機能 : 指定座標のドットバッファのドットをセット/クリアする。
指定座標が画面外のときはなにもしない。
本BIOSを実行しただけではLCDは変化しない。
----------
番号 : 13H=ドットバッファに対して直線を描く 入力 : AH=13H
BL=始点X座標 (00H〜BFH)
BH=始点Y座標 (00H〜3FH)
CL=終点X座標 (00H〜BFH)
DH=終点Y座標 (00H〜3FH)
DL=b7 b6 b5 b4 b3 b2 b1 b0
│ └─ 0:線を引く 1:線を消す
└───────────- 0:LCDに表示する 1:LCDに表示しない出力 : なし 機能 : 始点座標から終点座標までを結ぶ直線をドットバッファに描く。
各座標のうちで画面外になるものがある場合は何もしない。
----------
番号 : 14H=ドットバッファに対して四角形を描く 入力 : AH=14H
BL=始点X座標 (00H〜BFH)
BH=始点Y座標 (00H〜3FH)
CL=終点X座標 (00H〜BFH)
DH=終点Y座標 (00H〜3FH)
DL=b7 b6 b5 b4 b3 b2 b1 b0
│ └─ 0:四角形を描く 1:四角形を消す
└───────────- 0:LCDに表示する 1:LCDに表示しない出力 : なし 機能 : 始点座標と終点座標を頂点とする四角形をドットバッファに描く。
各座標のうちで画面外になるものがある場合は何もしない。
----------
番号 : 15H=ドットバッファに対して円を描く 入力 : AH=15H
BL=中心X座標 (00H〜BFH)
BH=中心Y座標 (00H〜3FH)
CL=半径 (01H〜BFH)
DL=b7 b6 b5 b4 b3 b2 b1 b0
│ └─ 0:円を描く 1:円を消す
└───────────- 0:LCDに表示する 1:LCDに表示しない出力 : なし 機能 : 指定座標を中心とする円をドットバッファに描く。
指定座標が画面外になるときは処理は行われないが、円周が画面から外れる場合は処理は行われる。
----------
番号 : 17H=ドットバッファのトップアドレスを返す 入力 : AH=17H 出力 : BX=ドットバッファのエントリアドレス (LEDTOP) 機能 : ドットバッファの先頭アドレスを返す。
セグメントアドレスは0に固定されています。
----------
番号 : 1AH=キーバッファが空かどうかを調べる 入力 : AH=1AH 出力 : DH=0:バッファは空 1:バッファにデータがある 機能 : キーバッファにデータがあるか調べる。
キーバッファの内容自体には影響を与えない。
----------
番号 : 1BH=キーバッファの内容をクリアする 入力 : AH=1BH 出力 : なし 機能 : キーバッファの内容をクリアして、これまでのキー入力を無効にする。
----------
番号 : 1DH=キーバッファから一文字分のコードを取り出す 入力 : AH=1DH 出力 : DL=キャラクターコード
DH=0:キーバッファは空である 1:データがあった機能 : キーバッファから一文字分のデータを取り出す。
----------
番号 : 1EH=キーバッファ中の次の一文字分のコードを調べる 入力 : AH=1EH 出力 : DL=キャラクターコード
DH=0:キーバッファは空である 1:データがあった機能 : キーバッファから次の一文字分のデータを読み出す。
キーバッファの内容自体には影響を与えない。
----------
番号 : 1FH=[BRK]キーと電源スイッチのサンプリングを行う 入力 : AH=1FH 出力 : なし 機能 : [BRK]キーと電源スイッチの状態を調べ、それぞれに対応した処理を行う。
----------
番号 : 20H=指定された文字列をLCD画面に表示する 入力 : AH=20H
DI=文字列のトップオフセットアドレス出力 : なし 機能 : 現在のカーソル位置に指定された文字列をLCDに表示する。
文字列は終端を0としたASCIIZ文字列です。
なお、文字列中に制御コードがある場合はその処理も行われます。
セグメントアドレスは0に固定されています。
----------
番号 : 22H=指定された文字列をRS-232Cに送信する 入力 : AH=22H
DI=文字列のトップオフセットアドレス出力 : なし 機能 : 指定された文字列をRS-232Cに送信する。
文字列中にRS-232C制御コードが含まれている場合、送信がうまく行われない可能性があります。
RS-232CをOPENしてから実行すること。
セグメントアドレスは0に固定されています。
----------
番号 : 23H=スクリーンエディタを使って文字列を入力する 入力 : AH=23H 出力 : DI=入力文字列 機能 : スクリーンエディタで文字列を入力する。
文字列はリターンを押した時の論理行が入力され、文字列終端に0が付けられその先頭オフセットアドレスが返されます。
セグメントアドレスは0に固定されています。
----------
番号 : 28H=BEEP音を鳴らす 入力 : AH=28H
DL=0:低い音(BEEP0に相当)を鳴らす 1:高い音(BEEP1に相当)を鳴らす出力 : なし 機能 : BASICの「BEEP」と同じ音を鳴らす。
音が鳴り終わるまでユーザープログラムに戻ってこない。
----------
番号 : 29H=指定周波数のブザーを鳴らす 入力 : AH=29H
DX=周波数 (3.6864E6/(8*DX)[Hz])
CX=音の長さ (4*DX*CX/3.6864E6[秒])出力 : なし 機能 : 指定された周波数の音を指定された秒数だけ鳴らす。
音が鳴り終わるまでユーザープログラムに戻ってこない。
----------
番号 : 2AH=RS-232C/セントロニクスの信号線をHIGHにする 入力 : AH=2AH
BL=b7 b6 b5 b4 b3 b2 b1 b0
│ │ │ └─ INIT
│ │ └──- STB
│ └──── RTS
└─────- DTR出力 : なし 機能 : BLで1に指定したビットに対応する信号線をHIGHにする。
他の信号線の状態は変化しない。
----------
番号 : 2BH=RS-232C/セントロニクスの信号線をLOWにする 入力 : AH=2BH
BL=b7 b6 b5 b4 b3 b2 b1 b0
│ │ │ └─ INIT
│ │ └──- STB
│ └──── RTS
└─────- DTR出力 : なし 機能 : BLで1に指定したビットに対応する信号線をLOWにする。
他の信号線の状態は変化しない。
----------
番号 : 2CH=RS-232C/セントロニクスの信号線の状態を調べる 入力 : AH=2CH 出力 : BL=b7 b6 b5 b4 b3 b2 b1 b0
│ │ │ │ │ │ │ └─ BUSY
│ │ │ │ │ │ └──- CD
│ │ │ │ │ └──── DSR
│ │ │ │ └─────- CTR
│ │ │ └─────── INIT
│ │ └────────- STB
│ └────────── RTS
└───────────- DTR機能 : RS-232C/セントロニクスの信号線の状態を調べる。
信号がHIGHの時は1に、LOWの時は0になる。
----------
番号 : 2FH=指定時間だけWAITする 入力 : AH=2FH
DX=WAIT時間 (4*DX/3.6864E6[秒])出力 : なし 機能 : 指定された時間だけ待つ。
WAIT中は割込み処理は行われる。
時間のカウントにタイマ1を使用している関係で、ユーザープログラムでタイマ1を使っている場合は本BIOSは使用できない。
----------
番号 : 3CH=現在のカーソル位置を返す 入力 : AH=3CH 出力 : BL=カーソルX座標
BH=カーソルY座標機能 : 現在のカーソル位置を返す。
----------
番号 : 41H=ユーザー定義文字フォント格納エリアのトップアドレスを返す 入力 : AH=41H 出力 : BX=ユーザー定義文字のフォントが格納されているオフセットアドレス 機能 : ユーザー定義文字(キャラクターコード252〜255、「DEFCHR$」で定義される文字)のフォントデータが格納されているオフセットアドレスを返す。
セグメントアドレスは0に固定されています。
フォントはキャラクターコード252、253、…、255の順に格納されていて、一文字あたり8バイト、計32バイトの領域がある。
「DEFCHR$」で指定するデータとは90°のズレがあるので注意のこと。・・□■■■□□ = 1CH
・・■□□□■□ = 22H
・・■□□□■□ = 22H
・・■■■■■□ = 3EH = 1CH,22H,22H,3EH,22H,22H,22H,00H
・・■□□□■□ = 22H
・・■□□□■□ = 22H
・・■□□□■□ = 22H
・・□□□□□□ = 00H
----------
番号 : 43H=DLの下位4ビットを16進数一桁でLCDに表示する 入力 : AH=43H
DL=データ出力 : なし 機能 : 現在のカーソル位置にDLの下位4ビットを16進数一桁で表示する。
----------
番号 : 44H=DLの内容を16進数二桁でLCDに表示する 入力 : AH=44H
DL=データ出力 : なし 機能 : 現在のカーソル位置にDLの内容を16進数二桁で表示する。
----------
番号 : 45H=DXの内容を16進数四桁でLCDに表示する 入力 : AH=45H
DX=データ出力 : なし 機能 : 現在のカーソル位置にDXの内容を16進数四桁で表示する。
----------
番号 : 46H=DXの内容をBCD五桁でLCDに表示する 入力 : AH=46H
DX=データ
BL=0:左詰め 1:右詰め出力 : なし 機能 : 現在のカーソル位置にDXの内容をBCD五桁で表示する。
----------
番号 : 47H=現在押しているキーをリピートさせる 入力 : AH=47H 出力 : なし 機能 : 現在押されているキーをリピートさせる。
本BIOSはキー入力を行うBIOSの直後に置くべきである。
----------
番号 : 67H=全システムの初期化 入力 : AH=67H
SI=4249H
DI=4F53H出力 : なし 機能 : ALL RESETを実行する。
本体表側のALL RESETボタンを押した時と同じ処理を行う。
本当に全て消えてしまうので、使用の際には十分注意すること。
----------
番号 : 68H=PAINT命令 入力 : AH=68H
BL=X座標 (0〜191)
BH=Y座標 (0〜63)出力 : なし 機能 : 指定座標を含む閉鎖空間を塗りつぶす。
本BIOSはドットバッファに対して処理が行われ、その後LCDに表示されます。
----------
番号 : 6FH=INPORT,OUTPORTのWAIT時間の変更 入力 : AH=6FH
DL=ウェイトステート数 (00H〜0FH)出力 : なし 機能 : 「INPORT」「OUTPORT」実行時のウェイトステートを指定されたステート数に変更する。
ウェイトステート数の初期値は0。
----------
番号 : 70H=30pin拡張端子にデータを出力する 入力 : AH=70H
BL=アドレス (00H〜07H)
DL=データ出力 : なし 機能 : 30pin拡張端子の指定アドレスにデータを出力する。
----------
番号 : 71H=30pin拡張端子からデータを入力する 入力 : AH=71H
BL=アドレス (00H〜07H)出力 : DL=データ 機能 : 30pin拡張端子の指定アドレスからデータを入力する。
----------
番号 : 7EH=Pリセットする 入力 : AH=7EH 出力 : なし 機能 : 本機をリセットする。
本体裏側にあるPボタンを押した時と同じ処理を行う。
----------
番号 : 7FH=電源をOFFする 入力 : AH=7FH 出力 : なし 機能 : オートパワーオフによる電源OFFと同じ状態にする。
5.本書について
本書は「Z-1/FX-890P活用研究(工学社)」を参考として、一部ミスがあった所を修正し幾つかの補足事項を付け加えたものです。
なお、本書の内容について工学社およびCASIOに問い合わせる事はおやめください。
NIFTY-Serve YHW02344
村中 昭雄(STEAR)