*************************************************************************** * * * CONTROL.EXEのINT 0D9Hについて * * * *************************************************************************** 本ドキュメントでは、CONTROL.EXEの隠れ機能であるINT 0D9H割り込み の使い方について、独自に解析した結果をまとめたものです(従って、富士通等に 問い合わせることはご遠慮ください)。個人で解析した結果ですので、図表中に抜 けがある部分や解釈上の誤りがあると思いますが、お気付きのことがありましたら、 私の方に連絡をもらえると幸いです。 §1:CONTROL.EXEの”INT 0D9H”システムコールインターフェース ------------------------------------------------------------------------------ INT 0D9H 【 機 能 】CONTROL.EXEとTMENU.EXPの共通テーブルアドレスポインタの取得 【 コール 】 AH=00H AL=00H ES=0060H(ネイティブモードでの呼び出し時のみ) 【リターン】リアルモード(COM/EXEファイル中) ES = 共通テーブルのあるセグメント ES:BX = 共通テーブル中の再起動指定フラグのアドレス  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ネイティブモード(EXP/REXファイル中) EBX = 共通テーブルのセグメント及び再起動指定フラグのアドレス (上位16ビットがリアル空間上でのセグメント、下位16ビット が再起動指定フラグアドレス)  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ 【 補 足 】・CONTROL.EXEとTMENU.EXPの共通テーブルのアドレスポインタを取得し ます。共通テーブルには、TownsMENUの表示モード・再起動指定 (TownsMENUに戻らずに別のプログラムを起動する機能)・システ ムドライブに関する情報などが、納まっています(別表参考)。 ・BXまたはEBXの下位16ビットとして得られるアドレスは、共通テーブル の先頭アドレスではないので注意してください(先頭アドレスは,得ら れたセグメントのO番地からです)。またネイティブモードでアクセス する場合、DOS-Extenderではセレクタ60Hにリアル空間の1MBがマッ ピングされているので、実際のアクセスには、 (1)データアクセス用のセグメントレジスタを0060Hに設定 (2)得られたEBXの値をリアル空間上の実アドレスに変換 といった手続きが必要となります(アクセス例参考)。 ------------------------------------------------------------------------------ §2:”INT 0D9H”のアクセス例 ------------------------------------------------------------------------------ (1) リアルモードでのアクセス mov ax,0000H int 0D9H 戻ってきた時点で、es:オフセットアドレスをアクセスすることで、共通テーブル上 のアドレスをアクセスできる。また、es:bxをアクセスすることで、再起動 指定フラグのアドレスを、直接取得することができる。 (2) ネイティブモードでのアクセス mov ax,0060H ; mov es,ax ;esにリアル空間のセレクタを設定 mov ax,0000H int 0D9H mov eax,ebx ; and eax,0FFFF0000H ; and ebx,00000FFFFH ; shr eax,12 ; and ebx,eax ;リアル空間上のアドレスの変換 この時点での、es:ebxが共通テーブル上の再起動指定フラグのアドレスを指すこ とになる。また、 mov ax,0060H ; mov es,ax ;esにリアル空間のセレクタを設定 mov ax,0000H int 0D9H and ebx,0FFFF0000H ; shr ebx,12 ; とすれば、es:オフセットアドレス[ebx]をアクセスすることで、共通テーブル上のアドレ スをアクセスできる。 ------------------------------------------------------------------------------ §3:共通テーブルの内容 ┌─────┬──────────────────┬─────────────┐ │OFFSET │内容 │備考(初期状態など) │ │ADDRESS │ │ │ ├─────┼──────────────────┼─────────────┤ │0000-0006 │??? │ │ ├─────┼──────────────────┼─────────────┤ │0007-0015 │CD-ROMベースで起動した場合に用いられ│"Q:\DRIVE_R.IMG" │ │ │る"DRIVE_R.IMG"を、読み込むためのコ │(Q以外にしても、利用され │ │ │マンド文字列データ │ くなるだけです。) │ ├─────┼──────────────────┼─────────────┤ │0016-003D │TownsOSで用いる"TMENU.EXP"を読み │ │ │ │込むための、コマンド文字列データ │ │ │ │ │ │ │・0016-0023│・RUN386.EXEのパス │・"?:\RUN386.EXE" │ │ │ (特に$0016はRUN386.EXEを読み込む │ "?"は、起動時に決まるシ │ │ │  のに使うドライブ名) │ ステムドライブ名。但し │ │ │ │ CD-ROMから起動した場合は │ │ │ │ "R"(スプライトRAMを利用し│ │ │ │ 仮想RAMディスクドライブ) │ │ │ │ となる。 │ │ │ │ │ │・0024 │・TMENU.EXPを読み込む際に、RUN386.EXE│・24($18) │ │ │ で使うパラメータのサイズ │ │ │ │ │ │ │・0025-003D│・TMENU.EXPを読み込む際に、RUN386.EXE│・"-Maxibuf 32 ?:\TMENU "│ │ │ で使うパラメータ文字列 (特に$0031 │ "?"は起動時のシステムドラ│ │ │ はTownsMENU関係のファイルを読 │ イブ名(以下でも同様)。 │ │ │ み込むの使うドライブ名) │ │ │ │ │ │ ├─────┼──────────────────┼─────────────┤ │003E-004F │TownsOSで用いる"T_OAK2.EXE"を読み│ │ │ │込むための、コマンド文字列データ │ │ │ │ │ │ │・003E-004A│・T_OAK2.EXEのパス │・"?:\T_OAK2.EXE" │ │ │ ($003EがT_OAK2.EXEのドライブ名) │ │ │ │ │ │ │・004B │・T_OAK2.EXEで使うパラメータのサイズ │・2($02) │ │ │ │ │ │・004C-004F│・T_OAK2.EXEで使うパラメータ文字列 │・" +" │ ├─────┼──────────────────┼─────────────┤ │0050-00B6 │??? │ │ ├─────┼──────────────────┼─────────────┤ │00B7-00CB │TownsMENUでの表示に関するデータ│ │ │ │ etc. │ │ │ │ │ │ │・00B7-00C3│・選択ファイルのワイルドカード文字列 │・初期状態では"*.*" │ │ │ │ │ │ │ │ │ │・00C4 │・RUN386.EXEのあるドライブ番号 │・起動時はシステムドライブ │ │ │ $00=A,$01=B,・・・,$10=Q,・・・ │ 番号 │ │ │ │ │ │・00C5 │・表示モード変更フラグ(???) │・表示形式の変更を行うと$01│ │ │ $00=変更されていない,$01=変更した │ となる。 │ │ │ │ │ │・00C6 │・??? │ │ │ │ │ │ │・00C7 │・ワイルドカード指定有効フラグ(bit7) │・初期状態では$00 │ │ │ および │ (ワイルドカード指定は無効│ │ │ ファイル表示モードにおける詳細情報 │ で、かつファイル表示はフ│ │ │ 表示指定フラグ(bit0,1) │ ァイル名のみ) │ │ │ bit7=1:ワイルドカード指定を有効 │ │ │ │ bit1=1:日付表示も行う │ なお、V1.1L30ではTownsM│ │ │ bit0=1:ファイルサイズ表示も行う │ ENUから詳細情報を、日付│ │ │例)$83=TownsMENUのファイル名表│ またはサイズのみで指定す │ │ │ 示において、ワイルドカードの指定│ る事が、できなくなってい │ │ │ を有効にし、かつファイルの詳細情│ る。 │ │ │ 報もすべて表示する │ │ │ │ │ │ │・00C8 │・表示モード指定フラグ │・初期状態では$00 │ │ │ $00=アイコン表示,$01=ファイル表示 │ │ │ │ │ │ │・00C9 │・ファイル名の表示順指定フラグ │・初期状態では$00 │ │ │ $00or$04=ABC順 │ │ │ │ $02 =日付順 │ │ │ │ $04 =種類(拡張子)順 │ │ │ │ │ │ │・00CA │・CRTC非初期化フラグ │(本文参照) │ │ │ not$00=次のプログラムを実行する際 │ │ │ │ にCRTCの初期化を行なわない。│ │ │ │ │ │ │・00CB │・TMENU.EXPのあるドライブ番号 │・起動時はシステムドライブ │ │ │ $00=A,$01=B,・・・,$10=Q,・・・ │ 番号 │ ├─────┼──────────────────┼─────────────┤ │00CC-0145 │再起動指定に関するデータ │ │ │ │ │ │ │・00CC・CD │・再起動指定フラグ │(本文参照) │ │ │ not$0000=現在実行中のコマンドの終 │なお、"INT 0D9H"によって得│ │ │ 了後、TownsMENUに戻 │られるES:BXの値は、このア │ │ │ らず指定されたプログラム │ドレスを指している │ │ │ を実行する │ │ │ │ │ │ │・00CE・CF │・再起動指定によって実行するプログラ │ │ │ │ ムにわたすERRORLEVEL(0-255) │ │ │ │ │ │ │・00D0-00D5│・??? │ │ │ │ │ │ │・00D6-0145│・再起動指定によって実行するプログラ │・ドライブ名、パス名、拡張子 │ │ │ ムのコマンド文字列 │ は、いずれも省略不可 │ │ │ │ │ └─────┴──────────────────┴─────────────┘ NIFTY-Serve MAH00510 山下 博 Oh!FM NET FM-00145