ビデオBIOS
ビデオBIOS
東芝J-3100シリーズでは、BIOSを使ってドットを描画する事もできますが、J-3100シリーズのBIOSでのドットの描画が非常に低速なためまず行いません。画面への描画はV-RAMを直接書き換えます。BIOSを使うのは、ハードコピー時のドットの読み取りや、パレットレジスタの設定など、比較的速度が問題にならない場面のみです。
ビデオBIOSを使うには、AHレジスタ(場合によってはAXレジスタ)に機能番号を入れ、INT 10H割り込みをかけます。
ビデオBIOSを使うには、AHレジスタ(場合によってはAXレジスタ)に機能番号を入れ、INT 10H割り込みをかけます。
AH=00H 画面モードの設定
入力 | 出力 |
---|---|
AH:00H AL:モード |
なし |
AL | モード | 色 | ドット | テキスト | 対応OS |
---|---|---|---|---|---|
04H 05H | CGA | 4色 | 320x200 | ? | 英語DOS3.0 日英DOS5.0の英語モード |
06H | CGA | モノクロ | 640x200 | ? | |
0EH | EGA | 16色 | 640x200 | ? | |
10H | EGA | 16色 | 640x350 | ? | |
12H | VGA | 16色 | 640x480 | ? | 東芝DOS/V 日英DOS5.0+VEM |
13H | VGA | 256色 | 320x200 | ? | |
64H | DCGA | モノクロ | 640x40 | 80x20 | 日本語DOS3.0 日英DOS5.0の日本語モード 東芝DOS/V+JDRIVER |
74H | DCGA | モノクロ | 640x40 | 80x25 | |
65H | DCGA | 16色 | 640x40 | 80x20 | |
75H | DCGA | 16色 | 640x40 | 80x25 |
画面モードを切り替えるには、ハードがそのモードに対応している必要があります。
・カラー表示能力のない機種(単色ガスプラズマディスプレイなど)ではカラーモードにはなりません。
・VGA表示能力のない機種(V386未満)ではVGAにはなりません。
・J-3100PV2以降(PV3000シリーズ等)、DCGAが搭載されなくなった機種ではDCGAにはなりません。
ハードが対応していても、OSやディスプレイドライバーが対応してないモードには切り替える事ができません。
・日本語DOS3.0や日英DOS5.0の日本語モードではECAやCGAにはなりません。
・日本語/英語の切替は通常、BIOSを直接呼ぶのではなく、CHEVコマンドで切り替えます。
・VGAとDCGAの切替は、通常はVEMやJDRIVERの組み込み/切り離しで行います。ドライバーの組み込み/切り離しなしで無理に切り替えると画面が真っ暗で操作不能になります。
ただし、これらの制約を緩和できるフリーソフト(CHEJ、じぇいさん等)もあります。
・カラー表示能力のない機種(単色ガスプラズマディスプレイなど)ではカラーモードにはなりません。
・VGA表示能力のない機種(V386未満)ではVGAにはなりません。
・J-3100PV2以降(PV3000シリーズ等)、DCGAが搭載されなくなった機種ではDCGAにはなりません。
ハードが対応していても、OSやディスプレイドライバーが対応してないモードには切り替える事ができません。
・日本語DOS3.0や日英DOS5.0の日本語モードではECAやCGAにはなりません。
・日本語/英語の切替は通常、BIOSを直接呼ぶのではなく、CHEVコマンドで切り替えます。
・VGAとDCGAの切替は、通常はVEMやJDRIVERの組み込み/切り離しで行います。ドライバーの組み込み/切り離しなしで無理に切り替えると画面が真っ暗で操作不能になります。
ただし、これらの制約を緩和できるフリーソフト(CHEJ、じぇいさん等)もあります。
AH=01H カーソルの形状の設定
入力 | 出力 |
---|---|
AH 01H CH スタートラスタ CL エンドラスタ |
なし |
・スタートラスタ、エンドラスタはDCGAの時は0-15、VGAの時は0-7で指定します。
・カーソルは縦16ドットなのですが、VGAの時は2ドット単位での指定になります。
・DCGAの時はスタートラスタ>エンドラスタの時は非表示になります。
・VGAの時はCH(スタートラスタ)に20Hを入れると非表示になります。
・カーソルは縦16ドットなのですが、VGAの時は2ドット単位での指定になります。
・DCGAの時はスタートラスタ>エンドラスタの時は非表示になります。
・VGAの時はCH(スタートラスタ)に20Hを入れると非表示になります。
AH=02H カーソル位置の設定
入力 | 出力 |
---|---|
AH 02H BH ページ番号(常に0) DH ライン DL カラム |
なし |
カーソル位置をライン/カラムに移動させます。
BIOSでカーソル位置を指定すると、PC-9801、PASOPIA1600、FM-R等と互換性がなくなるので、DOS汎用にしたい時はエスケープシーケンスを使ってDOSコール(AH=09H INT21H)で、ESC[ライン;カラムH を出力させます。
BIOSでカーソル位置を指定すると、PC-9801、PASOPIA1600、FM-R等と互換性がなくなるので、DOS汎用にしたい時はエスケープシーケンスを使ってDOSコール(AH=09H INT21H)で、ESC[ライン;カラムH を出力させます。
AH=03H カーソルの形状の取得
入力 | 出力 |
---|---|
AH 03H BH ページ番号(常に0) |
DH ライン DL カラム CH スタートラスタ DL エンドラスタ |
AH=06H アップスクロール
入力 | 出力 |
---|---|
AH 06H AL 行数 CH,CL 範囲の左上(ライン、カラム) DH,DL 範囲の右下(ライン、カラム) BH スクロールにより空いた場所の文字の属性 モノクロモードの時:文字属性 カラーモードの時:カラーコード |
なし |
DCGAの時に画面全体が指定された時はハードウェアスクロールになります。
AH=07H ダウンスクロール
入力 | 出力 |
---|---|
AH 07H AL 行数 CH,CL 範囲の左上(ライン、カラム) DH,DL 範囲の右下(ライン、カラム) BH スクロールにより空いた場所の文字の属性 モノクロモードの時:文字属性 カラーモードの時:カラーコード |
なし |
DCGAの時に画面全体が指定された時はハードウェアスクロールになります。
AH=08H カーソル位置の文字コードと属性の読取
入力 | 出力 |
---|---|
AH 08H BH ページ番号(常に0) |
AH 属性 AL 文字コード |
AH=09H カーソル位置へ属性・文字の書き込み
入力 | 出力 |
---|---|
AH 09H BH ページ番号(常に0) AL 文字コード BL 属性 CX 文字数 |
なし |
文字を出力します。BIOSで文字を出力させると、PC-9801やPASOPIA1600やFM-Rと互換性がなくなるので、DOS汎用にしたいならこの機能ではなくDOSコール(AH=09H
INT 21H)で文字を出力させてください。
AH=0AH カーソル位置へ文字の書き込み
入力 | 出力 |
---|---|
AH 0AH BH ページ番号(常に0) AL 文字コード CX 文字数 |
なし |
AH 09Hと異なり、属性は変更しません。
AH=0CH ドットの書き込み
入力 | 出力 |
---|---|
AH 0CH BH ページ番号(常に0) DX Y座標 CX X座標 AL カラーコード(0-15) 7ビット目を1にするとXORで書き込まれます。 |
なし |
画面の指定座標に指定の色で1ドット書き込みます。1ドット単位で書き込むため、この機能を使って罫線や四角く塗りつぶしたエリアを描写すると非常に低速です。そのため、通常四角形を描く時は、BIOSを使わずにV-RAMに直接書き込みます。
カラー対応のダイナブックの初期に搭載されたダイナメニューはこのBIOSで枠を表示していたため、カラーモードにすると描画が遅すぎて使い物になりませんでした。のちに「ダイナスメニュー」という改良版ができましたが、こちらは非常に高速でした。
カラー対応のダイナブックの初期に搭載されたダイナメニューはこのBIOSで枠を表示していたため、カラーモードにすると描画が遅すぎて使い物になりませんでした。のちに「ダイナスメニュー」という改良版ができましたが、こちらは非常に高速でした。
AH=0DH ドットの読取
入力 | 出力 |
---|---|
AH 0DH DX Y座標 CX X座標 |
AL カラーコード(0-15) |
指定位置のドットの色を読み取ります。ドット単位のため、この機能を使ってマルチウィンドゥ機能を作ると非常に低速なので、通常はBIOSではなくV-RAMを直接読み取ります。
ただし、プリンターへのハードコピーなど速度が重視されない時は互換性を考えてなるべくBIOSを使うようにします。実際、私の作ったハードコピードライバーはBIOSでドットを読み取っていたおかげで、「じぇいさん」等のエミュレーターでも正しく動作させる事ができました。
ただし、プリンターへのハードコピーなど速度が重視されない時は互換性を考えてなるべくBIOSを使うようにします。実際、私の作ったハードコピードライバーはBIOSでドットを読み取っていたおかげで、「じぇいさん」等のエミュレーターでも正しく動作させる事ができました。
AH=0EH テレタイプ式書き込み
入力 | 出力 |
---|---|
AH 0EH AL 文字コード BL 属性 |
なし |
ALで指定した文字を表示し、右端で自動的に折り返します。右下では自動的にスクロールアップした後に改行してから表示します。
AH=0FH 現在のディスプレイ状況
入力 | 出力 |
---|---|
AH 0FH | AL 画面モード AH 画面上の文字桁の数 BH ページ番号(常に0) |
AX=1000H パレットレジスタの設定
入力 | 出力 |
---|---|
AX 1000H BL カラーコード(0~0FH) BH パレットレジスタ(0~3FH) |
なし |
カラーコードをパレットレジスタの何番に割り当てるかを設定します。これにより、64色中の16色を表示させる事ができます。モノクロモードでは使えません。
初期値は以下のようになっています。AH=00画面モード設定を行う事で初期値に戻す事ができます。
初期値は以下のようになっています。AH=00画面モード設定を行う事で初期値に戻す事ができます。
カラーコード | プレーンI | プレーンR | プレーンG | プレーンB | パレットレジスタ | 色 |
---|---|---|---|---|---|---|
00H | 0 | 0 | 0 | 0 | 00H | 黒 |
01H | 0 | 0 | 0 | 1 | 01H | 暗い青 |
02H | 0 | 0 | 1 | 0 | 02H | 暗い緑 |
03H | 0 | 0 | 1 | 1 | 03H | 暗いシアン |
04H | 0 | 1 | 0 | 0 | 04H | 暗い赤 |
05H | 0 | 1 | 0 | 1 | 05H | 暗いマゼンダ |
06H | 0 | 1 | 1 | 0 | 14H | 茶色 |
07H | 0 | 1 | 1 | 1 | 07H | 暗い白 |
08H | 1 | 0 | 0 | 0 | 38H | 明るい黒 |
09H | 1 | 0 | 0 | 1 | 39H | 明るい青 |
0AH | 1 | 0 | 1 | 0 | 3AH | 明るい緑 |
0BH | 1 | 0 | 1 | 1 | 3BH | 明るいシアン |
0CH | 1 | 1 | 0 | 0 | 3CH | 明るい赤 |
0DH | 1 | 1 | 0 | 1 | 3DH | 明るいマゼンダ |
0EH | 1 | 1 | 1 | 0 | 3EH | 明るい黄色 |
0FH | 1 | 1 | 1 | 1 | 3FH | 明るい白 |
※色は主観的なもので、公式マニュアルとは若干表記が異なります。
;----------------------------------------------- ; カラーコード6を、茶色ではなく暗い黄色にする ;----------------------------------------------- MOV AX,1000H MOV BL,06H MOV BH,06H INT 10H
AX=1001H オーバースキャンレジスタの設定
入力 | 出力 |
---|---|
AX 1001H BH オーバースキャンレジスタにしたいカラーレジスター番号 |
なし |
AX=1002H パレット一括設定
入力 | 出力 |
---|---|
AX=1002H ES:DX パレットレジスタとオーバースキャンレジスタのテーブルが置かれたアドレス テーブルの内容 0~15バイト カラーコード0~15に相当するパレットレジスターの値 16バイト目 オーバースキャンレジスターの設定値 |
なし |
AX=1007H パレット読み取り
入力 | 出力 |
---|---|
AX=1007H BL カラーコード(0-15) |
BH カラーレジスタ番号(0-63) |
AX=1008H オーバースキャンレジスター読み取り
入力 | 出力 |
---|---|
AX1008H | BH オーバースキャンレジスターの値 |
AX=1009H パレット一括読み取り
入力 | 出力 |
---|---|
AX 1009H ES:DX 読み取りテーブルのアドレス テーブルの内容 パレット一括設定と同じ |
なし |
AX=1010H カラーレジスタの設定(VGA)
入力 | 出力 |
---|---|
AX 1010H BX カラーレジスタ番号(0~3FH) DH Rの明るさ(0~3FH) CH Gの明るさ(0~3FH) CL Bの明るさ(0~3FH) |
なし |
RGBの明るさをそれぞれ64段階で指定します。つまり、26万色の中から1色を選ぶことができます。この機能はVGA専用です。
カラーレジスタ | Rの明るさ | Gの明るさ | Bの明るさ | 色 | デフォルトのカラーコード | |
---|---|---|---|---|---|---|
00H | 0 | 00H | 00H | 00H | 黒 | 00H |
01H | 1 | 00H | 00H | 2AH | 青 | 01H |
02H | 2 | 00H | 2AH | 00H | 緑 | 02H |
03H | 3 | 00H | 2AH | 2AH | シアン | 03H |
04H | 4 | 2AH | 00H | 00H | 赤 | 04H |
05H | 5 | 2AH | 00H | 2AH | マゼンダ | 05H |
06H | 6 | 2AH | 2AH | 00H | 黄色 | |
07H | 7 | 2AH | 2AH | 2AH | 白 | 07H |
08H | 8 | 00H | 00H | 15H | 暗い青 | |
09H | 9 | 00H | 00H | 3FH | 明るい青 | |
0AH | 10 | 00H | 2AH | 15H | ||
0BH | 11 | 00H | 2AH | 3FH | ||
0CH | 12 | 2AH | 00H | 15H | ||
0DH | 13 | 2AH | 00H | 3FH | ||
0EH | 14 | 2AH | 2AH | 15H | ||
0FH | 15 | 2AH | 2AH | 3FH | ||
10H | 16 | 00H | 15H | 00H | 暗い緑 | |
11H | 17 | 00H | 15H | 2AH | ||
12H | 18 | 00H | 3FH | 00H | 明るい緑 | |
13H | 19 | 00H | 3FH | 2AH | 空色 | |
14H | 20 | 2AH | 15H | 00H | 茶色 | 06H |
15H | 21 | 2AH | 15H | 2AH | ||
16H | 22 | 2AH | 3FH | 00H | ||
17H | 23 | 2AH | 3FH | 2AH | ||
18H | 24 | 00H | 15H | 15H | 暗いシアン | |
19H | 25 | 00H | 15H | 3FH | ||
1AH | 26 | 00H | 3FH | 15H | 青緑 | |
1BH | 27 | 00H | 3FH | 3FH | 明るいシアン | |
1CH | 28 | 2AH | 15H | 15H | ||
1DH | 29 | 2AH | 15H | 3FH | ||
1EH | 30 | 2AH | 3FH | 15H | ||
1FH | 31 | 2AH | 3FH | 3FH | ||
20H | 32 | 15H | 00H | 00H | 暗い赤 | |
21H | 33 | 15H | 00H | 2AH | ||
22H | 34 | 15H | 2AH | 00H | 黄緑 | |
23H | 35 | 15H | 2AH | 2AH | ||
24H | 36 | 3FH | 00H | 00H | 明るい赤 | |
25H | 37 | 3FH | 00H | 2AH | 濃いピンク | |
26H | 38 | 3FH | 2AH | 00H | 山吹色 | |
27H | 39 | 3FH | 2AH | 2AH | ||
28H | 40 | 15H | 00H | 15H | 暗いマゼンダ | |
29H | 41 | 15H | 00H | 3FH | すみれ色 | |
2AH | 42 | 15H | 2AH | 15H | ||
2BH | 43 | 15H | 2AH | 3FH | ||
2CH | 44 | 3FH | 00H | 15H | 紫赤 | |
2DH | 45 | 3FH | 00H | 3FH | 明るいマゼンダ | |
2EH | 46 | 3FH | 2AH | 15H | ||
2FH | 47 | 3FH | 2AH | 3FH | ||
30H | 48 | 15H | 15H | 00H | 暗い黄色 | |
31H | 49 | 15H | 15H | 2AH | ||
32H | 50 | 15H | 3FH | 00H | ||
33H | 51 | 15H | 3FH | 2AH | ||
34H | 52 | 3FH | 15H | 00H | ||
35H | 53 | 3FH | 15H | 2AH | ||
36H | 54 | 3FH | 3FH | 00H | 明るい黄色 | |
37H | 55 | 3FH | 3FH | 2AH | ||
38H | 56 | 15H | 15H | 15H | 灰色 | 08H |
39H | 57 | 15H | 15H | 3FH | 薄い青 | 09H |
3AH | 58 | 15H | 3FH | 15H | 薄い緑 | 0AH |
3BH | 59 | 15H | 3FH | 3FH | 薄いシアン | 0BH |
3CH | 60 | 3FH | 15H | 15H | 薄い赤 | 0CH |
3DH | 61 | 3FH | 15H | 3FH | 薄いマゼンダ | 0DH |
3EH | 62 | 3FH | 3FH | 15H | 薄い黄色 | 0EH |
3FH | 63 | 3FH | 3FH | 3FH | 明るい白 | 0FH |
例)カラーレジスタ番号[PAREG]を、[RBRIGHT] [GBRIGHT] [BBRIGHT] にそれぞれ変更します
MOV AX,1010H MOV BH,0 MOV BL,[PAREG] MOV DH,[RBRIGHT] MOV CH,[GBRIGHT] MOV CL,[BBRIGHT] INT 10H
AX=1012H カラーレジスター一括設定(VGA)
入力 | 出力 |
---|---|
AX 1012H BX 最初のカラーレジスター番号 CX 設定数 ES:DX 色テーブルのアドレス テーブルの形式 Rの明るさ Gの明るさ Bの明るさ Rの明るさ Gの明るさ Bの明るさ… |
なし |
カラーレジスタをテーブルから読んで一括変更します。この機能はVGA専用です。カラーレジスタを全て保存しておいて、いったんパレットを全て黒にしてから画面を描画して、描画が終わったカラーレジスタを戻す事により瞬間画面表示もどきを作ることができます。同様に、全てのカラーレジスタの輝度を徐々に下げていく事でフェードアウトを作る事もできます。
※一部機種(BREZZAの初期型、PV3000)ではこの機能を使うと画面にノイズがちらつく場合があるので多用は避けた方が無難です。実際、フェードアウトを効果作ったら画面がノイズだらけになって怒られた事があります。
※一部機種(BREZZAの初期型、PV3000)ではこの機能を使うと画面にノイズがちらつく場合があるので多用は避けた方が無難です。実際、フェードアウトを効果作ったら画面がノイズだらけになって怒られた事があります。
AX=1015H カラーレジスターの読取(VGA)
入力 | 出力 |
---|---|
AX 1015H BX カラーレジスター番号 |
DH Rの明るさ(0-3FH) CH Gの明るさ(0-3FH) CL Bの明るさ(0-3FH) |
設定されたカラーレジスタの値を取得します。この機能はVGA専用です。
AX=1017H カラーレジスター一括読取(VGA)
入力 | 出力 |
---|---|
AX 1017H BX 最初のカラーレジスター番号 CX 読取数 |
ES:DX 色テーブルのアドレス テーブルの形式 Rの明るさ Gの明るさ Bの明るさ Rの明るさ Gの明るさ Bの明るさ… |
カラーレジスタを一括して読み取ります。この機能はVGA専用です。
;-------------------------------- ; パレットテーブルを読む ;-------------------------------- MOV AX,1017H MOV BX,0 MOV CX,64 MOV DX,OFFSET BUFF INT 10H
AX=1800H 文字フォント読み出し(VGA)
入力 | 出力 |
---|---|
AX 1800H BH ページ番号(常に0) BL フォント(常に0) CH シフトJISの第1バイト(半角なら00H) CL シフトJISの第2バイト(半角なら文字コード) DH 幅 DL 高さ DH DLの設定可能範囲 8×16 半角 8×19 半角 16×16 全角 24×24 全角 ES:SI 文字コードを読み出すバッファ |
AL 00H正常 00H以外エラー |
この機能が使えるのはVGAの時だけです。DCGAの時は漢字ROM割り込み(INT 60H)を使います。
AX=1801H 文字フォント書き込み(VGA)
入力 | 出力 |
---|---|
AX 1801H 以下1800Hと同じ |
なし |
この機能が使えるのはVGAの時だけです。DCGAの時は漢字ROMを使うので、フォントの書き換えはできません。
AX=8300H 開始アドレスの読み込み (DCGA)
入力 | 出力 |
---|---|
AX 8300H | AX 開始アドレス |
ハードウェアスクロールさせた時に変化するV-RAMの開始位置を取得します。この機能はDCGAモードのみです。
;----------------------------------------------------- ; 開始アドレス取得 ;----------------------------------------------------- MOV AX,8300H INT 10H MOV [K3],AX
参考文献
『J-3100解析ハンドブック』 1989年 土屋勝著 ナツメ社
『DOS/Vテクニカル・リファレンス・マニュアル』 1993年 芦達剛著 ソフトバンク
『J-3100シリーズ・テクニカルマニュアル』 1994年 南部武彦著 ソフトバンク
『ATOK読本』 1994年 山田祥平 ジャストシステム
『東芝パソコンハンドブック94年版』 平成6年3月1日
このページの先頭へ
『J-3100解析ハンドブック』 1989年 土屋勝著 ナツメ社
『DOS/Vテクニカル・リファレンス・マニュアル』 1993年 芦達剛著 ソフトバンク
『J-3100シリーズ・テクニカルマニュアル』 1994年 南部武彦著 ソフトバンク
『ATOK読本』 1994年 山田祥平 ジャストシステム
『東芝パソコンハンドブック94年版』 平成6年3月1日
広告