• 検索結果がありません。

MDH-J0004

N/A
N/A
Protected

Academic year: 2021

シェア "MDH-J0004"

Copied!
143
0
0

読み込み中.... (全文を見る)

全文

(1)

SOFTWARE USER’S GUIDE

DOS System(日本語環境モデル)

システム構築ガイド

(2)

■ 安全にお使い頂くために

安全にご利用頂くために、本製品をご使用になる前に必ず製品のマニュアルに記載されて

いる

取扱い上のご注意

を最後までお読みください。

本製品は機能追加、品質向上のため予告なく仕様を変更する場合があります。

継続的にご利用頂く場合でも、必ずSOFTWARE USER’S GUIDEをお読みください。本製品

のご使用には、ハードウェア, ソフトウェアの専門知識が必要です。

各図記号は以下のような意味を表しています。

警告

!

この表示を無視して誤った取扱いをすると、使用者が死亡または重傷を

負う可能性があると思われる事項があることを示しています。

注意

!

この表示を無視して誤った取扱いをすると、人が傷害を負うことが想定

される内容および物的損害の発生が想定される事項があることを示し

ています。

禁止

分解禁止

接触禁止

行ってはならない禁止事項があることを示しています。指示内容

をよく読み、禁止されている事項は絶対に行わないでください。

静電気注意

静電気により、製品破損の恐れがありますのでご注意ください。

注意

注意すべき点を示しています。

本書に掲載されている会社名, 製品名はそれぞれ各社の商標または登録商標です。 © 2007, 2012Interface Corporation 株式会社インタフェースの許可なく複製, 改変等を行うことはできません。

(3)

DOS System(日本語環境モデル)システム構築ガイド

製品ドキュメントのご紹介

本製品に関する情報を下記の通りご用意しております。 必要に応じて、適切なものをご利用ください。 マニュアル 内 容 システム構築ガイド 無償 DOS System(日本語環境モデル)システム構築ガ イドです。

無償:弊社Web site(www.interface.co.jp)からのダウンロードは無料です。 有償:ドキュメント類の冊子(印刷物)での提供は有料販売となります。

(4)

DOS System(日本語環境モデル)システム構築ガイド

目 次

製品ドキュメントのご紹介

1

第 1 章 本書概要

6

1.1 本書概要 ... 6

第 2 章 Interface DOS System(日本語環境モデル)製品紹介

7

2.1 製品構成 ... 7

2.2 Interface DOS System(日本語環境モデル)概要 ... 7

2.3 機能と特長 ... 8

第 3 章 インタフェースモジュール制御

9

3.1 概要 ... 9

3.1.1 インタフェースモジュール制御方法 ... 9

3.1.2 ハードウェア制御に必要な処理 ... 9

3.2 Interface DOS System 開発らくらくパッケージ... 9

3.2.1 ライブラリ動作環境... 10 3.2.2 ファイル一覧... 10 3.3 ハードウェアリソース情報取得・表示... 12 3.3.1 ハードウェアリソース情報 ... 12 3.3.2 PCI コンフィギュレーション情報表示方法 ... 12 3.3.3 ハードウェアリソース情報取得方法 ... 14 ■概要 ... 14 ■リソース取得ライブラリ関数一覧 ... 14 ■構造体説明 ... 17 ■リソース情報取得関数使用例 ... 18 3.4 I/O アクセス・メモリアクセス ... 19 3.4.1 I/O ポートへのアクセス ... 19 3.4.2 メモリアクセス(1MB 以上のメモリ空間アクセス) ... 20 3.4.3 DOS 用 4GB メモリアクセスユーティリティ... 20 ■概要 ... 20 3.4.4 1MB 以上のメモリ空間へのアクセス ... 21 ■ライブラリ関数一覧 ... 21 ■ライブラリ関数個別説明 ... 22 ■メモリアクセス関数使用例 ... 35 ■CPU のメモリキャッシュ機能を利用したメモリ間でのデータ高速転送 ... 35 ■メモリキャッシュ関数使用時の制限事項... 36 ■メモリキャッシュ機能使用時のサンプルプログラムコード 1 ... 36 ■メモリキャッシュ機能使用時のサンプルプログラムコード 2 ... 37 3.4.5 EMM386 環境での 4GB メモリ空間へのアクセス ... 38 ■EMM386 使用時の制限事項... 38 ■EMM386 使用時のサンプルプログラムコード ... 39

(5)

DOS System(日本語環境モデル)システム構築ガイド 3.5 割り込み設定・制御 ... 40 3.5.1 割り込み処理とは... 40 3.5.2 割り込み処理の流れ... 41 3.5.3 割り込み処理... 41 ■概要 ... 41 ■割り込みライブラリ関数一覧 ... 42 ■割り込みライブラリ関数個別説明 ... 42 3.5.4 割り込み処理関数使用例 ... 45 3.5.5 割り込み信号の伝播遅延 ... 48 ■概要 ... 48 ■使用方法 ... 48 3.6 インタフェースモジュール使用例... 48 3.6.1 I/O ポート入出力制御 ... 49 3.6.2 メモリアクセス制御... 50 3.6.3 割り込み制御... 52 3.7 CardBus デバイス使用方法 ... 54 3.7.1 ハードウェアリソース設定 ... 54 3.7.2 CardBus 設定方法(CardBus イネーブラ使用方法)... 54 ■概要 ... 54 ■使用方法 ... 55

第 4 章 CPU 制御 56

4.1 SpeedStep 機能 ... 56 4.2 クロックデューティ制御 ... 58 4.3 CPU 温度測定機能... 59 4.4 電源電圧測定機能 ... 60 4.5 ウォッチドッグタイマ機能 ... 64 4.6 ハードウェアタイマ機能 ... 66 4.7 その他ハードウェア機能 ... 67 4.7.1 電源プッシュボタン制御 ... 67 4.7.2 システム再起動... 68 4.7.3 システムシャットダウン ... 68 ■ウォッチドッグタイマ関数使用例 ... 69 4.8 システムリカバリ ... 70 4.8.1 リカバリソフトウェア ... 70 4.8.2 リカバリ操作手順... 70 4.9 BIOS アップデート ... 71 4.10 CF 活線挿抜 ... 73 4.10.1 概要 ... 73 4.10.2 ドライバ組み込み... 74 4.10.3 ドライバ常駐解除... 74 4.10.4 BIOS 設定... 75 ■リムーバブルメディア用 BIOS 設定 ... 75 ■固定ディスク用 BIOS 設定 ... 75 4.11 ハードディスクモータ無停止ユーティリティ ... 76

(6)

DOS System(日本語環境モデル)システム構築ガイド

第 5 章 ネットワーク 77

5.1 マルチキャスト UDP ライブラリ... 77 5.1.1 概要 ... 77 5.1.2 動作環境... 77 5.1.3 ファイル一覧... 77 5.2 設定 ... 78 5.2.1 LAN ドライバの組み込み... 78 5.3 リファレンス ... 79 5.3.1 関数一覧... 79 5.4 API 実行手順... 79 5.4.1 UDP 送信側... 79 5.4.2 UDP 受信側... 79 5.5 関数個別説明 ... 80 5.6 構造体説明 ... 84 5.6.1 in_ addr 構造体 ... 84 5.6.2 sockaddr_in 構造体 ... 84 5.7 サンプルプログラムの実行 ... 84 5.8 Wake On LAN を利用する ... 85 5.8.1 事前準備... 85 5.8.2 使用方法... 86

第 6 章 スロットイン電源モジュール, バッテリモジュール状態監視 87

6.1 関数一覧 ... 88 6.1.1 スロットイン電源モジュール関数一覧 ... 88 6.1.2 バッテリモジュール関数一覧 ... 88 6.2 スロットイン電源モジュール監視機能... 89 6.3 バッテリモジュール監視機能 ... 97 6.4 スロットイン電源モジュール状態監視ユーティリティ(PMON.EXE) ... 99

第 7 章 デジタル入出力, 汎用 LED, ブザー制御 101

7.1 デジタル入出力, 汎用 LED, ブザー制御関数 ... 102 7.1.1 関数一覧... 102 7.1.2 個別説明... 103

第 8 章 BIOS 割り込み一覧 112

8.1 INT 10h VGA BIOS ... 112

8.1.1 INT 10h ビデオサービス ... 112 8.2 INT 11h システム情報割り込み ... 114 8.2.1 INT 11h システム情報取得 ... 114 8.3 INT 12h メモリサイズの取得 ... 115 8.3.1 INT 12h メモリ量の取得 ... 115 8.4 INT 13h ディスケットサービス ... 115 8.4.1 INT 13h ステータスコード ... 115 8.4.2 INT 13h ディスケットサービス ... 115

(7)

DOS System(日本語環境モデル)システム構築ガイド 8.5 INT 14h シリアルサービス... 119 8.5.1 モデムステータス... 119 8.5.2 ラインステータス... 119 8.5.3 INT 14h シリアルサービス ... 119 8.5.4 INT 15h システムサービス ... 121 8.6 INT 15h ビッグメモリサービス ... 124 8.7 INT 15h PS/2 マウスサービス ... 125 8.7.1 PS/2 マウスステータスコード取得 ... 125 8.7.2 INT 15h PS/2 マウスサービス... 125 8.8 INT 16h キーボードサービス ... 127 8.9 INT 1Ah タイマサービス ... 128

8.10 INT 1Ah PCI サービス... 129

8.10.1 PCI サービスステータスコード... 129

8.10.2 INT 1Ah 一般 PCI サービス ... 129

第 9 章 BIOS データ領域 132

9.1 BIOS データ領域定義 ... 132 9.2 拡張 BIOS データ領域 ... 136

第 10 章 割り込みベクタ 137

10.1 割り込みベクタ ... 137

第 11 章 情報サービス 138

11.1 情報の入手方法 ... 138 11.2 製品使用登録 ... 138 11.3 FAQ(よく寄せられる質問)... 138 11.4 組み込み済み OS の情報 ... 138

(8)

DOS System(日本語環境モデル)システム構築ガイド

第1章 本書概要

1.1 本書概要

本書は DOS System(日本語環境モデル)を使用した、ハードウェア制御, 弊社CPUモ ジュールの制御を解説したドキュメントです。

DOS起動メディアに収録されているライブラリ, ユーティリティを使用したそれぞれの制御方法や、 マルチキャストUDPの使用方法を解説しています。

第3章ではDOS起動メディアに収録されている DOS System開発らくらくパッケージを 使った、インタフェースモジュールの制御方法を説明しています。

第4章ではDOS起動メディアに収録されている DOS System開発らくらくパッケージを 使った、CPUモジュールの制御方法を説明しています。

第5章ではDOS起動メディアに収録されている DOS System開発らくらくパッケージを 使った、マルチキャストUDPライブラリの使用方法を説明しています。

第6章ではDOS起動メディアに収録されている DOS System開発らくらくパッケージを 使った、スロットイン電源モジュール, バッテリモジュールの状態監視方法を説明しています。

第7章では、弊社FAコントローラ製品に搭載されている、デジタル入出力共用端子4点, 汎用LED 2点, ブザー機能の制御方法を説明しています。

(9)

DOS System(日本語環境モデル)システム構築ガイド

第2章 Interface DOS System(日本語環境モデル)製品紹介

2.1 製品構成

DOS起動メディアは下記の内容で構成されています。 起動メディアの収録内容 名 称 内 容 収録ディレクトリ DOS System 開発らくらくパッケージ 1) PCIデバイスのリソース取得 2) 4GBメモリアクセス 3) 割り込みアクセス 4) CPU制御 5) スロットイン電源モジュール状態監視 6) デジタル入出力, 汎用LED, ブザー制御等 開発支援総合パッケージソフトウェア ¥IFDOS

DOS外部コマンド DOSの各種外部コマンドを収録 ¥DOS LANドライバ ・Intel 用 LAN マネージャドライバ

・Intel 用パケットドライバ

・VIA 用 LAN マネージャドライバ ・VIA 用パケットドライバ

¥LANDRV

2.2 Interface DOS System(日本語環境モデル)概要

DOS System(日本語環境モデル)は、MS-DOS互換OSで、日本語入力も行うことができ ます。

さらに、収録されている DOS System開発らくらくパッケージを使用することで、簡単 にインタフェースモジュールの制御やCPUの制御を行うことができます。

(10)

DOS System(日本語環境モデル)システム構築ガイド

2.3 機能と特長

●MS-DOS互換 DOS System(日本語環境モデル)は、MS-DOS互換OSです。OSとしての安定性は、 Windows, Linuxをはるかに凌ぎ、シングルタスクで、リアルタイム性の高いシステムを構築する ことができます。 ●日本語入力 DOS System(日本語環境モデル)は、日本語入力も行うことができます。 開発者, 組み込み後のお客様ともに扱いやすいモデルです。 ● DOS System開発らくらくパッケージを収録

PCIデバイスのリソース取得, 4GBメモリアクセス, PCIデバイスの割り込み登録, CPU制御, スロ ットイン電源モジュール状態監視等が簡単に行える、総合開発支援パッケージを収録しています。 ●ネットワーク接続 DOS System(ネットワークモデル)のような強力なネットワーク機能はありませんが、 DOS System開発らくらくパッケージにマルチキャストUDPライブラリを収録して います。 ●DOS用CardBusイネーブラ収録 DOS用CardBusイネーブラを使用することで、DOS用のカードサービスがない環境でも、CardBus 製品を使用できます。 ●CF活線挿抜対応 フロントパネルに挿入したCFを、活線挿抜するためのドライバを同梱しています。

注意

CFの後継品移行に伴い、本ドライバは使用できなくなりました。弊社採用CFの生産終了に 伴い後継品へ変更しましたが、後継品(2012年6月以降の製品)では活線挿抜に対応しており ません。

(11)

DOS System(日本語環境モデル)システム構築ガイド

第3章 インタフェースモジュール制御

3.1 概要

本章では、 DOS System(日本語環境モデル)でインタフェースモジュールを制御するた めの方法を説明します。 DOSでインタフェースモジュールを制御するためのライブラリが提供されている場合は、専用のラ イブラリソフトを使用します。ライブラリソフトがない場合は直接制御する必要があります。

3.1.1 インタフェースモジュール制御方法

ハードウェアベンダからインタフェースモジュールを制御するための専用ライブラリが提供されて いる場合があります。弊社の場合、DOSでインタフェースモジュールを制御するために、DOS専用 ライブラリ(GPDシリーズ)を提供しております。弊社製インタフェースモジュールをご使用の場合 は、幣社Web site(www.interface.co.jp)よりGPDシリーズをダウンロードし、インタフェースモジュー ルの制御を行ってください。 ハードウェアベンダから制御用ライブラリが提供されていない場合、お客様が直接インタフェース モジュールを制御する必要があります。

3.1.2 ハードウェア制御に必要な処理

お客様がインタフェースモジュールを直接制御するには、主に以下の処理が必要となります。 1) ハードウェアリソース情報(I/Oポートアドレスまたはメモリアドレス, 割り込み番号)の取得 2) I/Oポートまたはメモリへのアクセス 3) 割り込みの制御 I/Oポートやメモリ等の仕様は、インタフェースモジュールごとに決まっています。 DOSでインタフェースモジュールを直接制御する場合は、ハードウェアベンダにお問い合わせの上、 各インタフェースモジュールの仕様を必ずご確認ください。

3.2 Interface DOS System開発らくらくパッケージ

DOS System(日本語環境モデル)には DOS System開発らくらくパッケージ を収録しています。開発らくらくパッケージの総合ライブラリを使用することで、『9ページ 3.1.2 ハードウェア制御に必要な処理』の3つを簡単に行うことができます。 DOS System開発らくらくパッケージには、上記インタフェースモジュールの制御以外 にも様々な機能を持っています。利用方法については、次章以降で説明します。

注意

起動メディアに収録されている DOS System開発らくらくパッケージは、弊社製 FAコントローラ以外では動作しません。 製品名 DOS System開発らくらくパッケージ 収録ディレクトリ ¥IFDOS

(12)

DOS System(日本語環境モデル)システム構築ガイド

3.2.1 ライブラリ動作環境

対応言語 Microsoft C Microsoft C/C++ Microsoft C/C++ Turbo C Turbo C++ Borland C++ Borland C++ Open Watcom C/C++ Open Watcom C/C++ Ver.6.0 Ver.7.0 Ver.8.0 Ver.2.0 (英語版) Ver.4.0 Ver.5.0 Ver.5.2 Ver.1.5 Ver.1.6 メモリモデル スモール, ラージ, ヒュージ

3.2.2 ファイル一覧

フォルダ名 ファイル名 内 容 IFDOS.H 総合ライブラリ用ヘッダファイル INCLUDE IFDJSOCK.H マルチキャストUDP用ヘッダファイル IFDOSMS.LIB MSC用総合ライブラリファイル(スモール) IFDOSML.LIB MSC用総合ライブラリファイル(ラージ) IFDOSMH.LIB MSC用総合ライブラリファイル(ヒュージ) IFDOSTS.LIB TC, BC用総合ライブラリファイル(スモール) IFDOSTL.LIB TC, BC用総合ライブラリファイル(ラージ) IFDOSTH.LIB TC, BC用総合ライブラリファイル(ヒュージ) IFDOSWS.LIB Watcom用総合ライブラリファイル(スモール) IFDOSWL.LIB Watcom用総合ライブラリファイル(ラージ) IFDOSWH.LIB Watcom用総合ライブラリファイル(ヒュージ) IFSOCKMS.LIB MSC用マルチキャストUDP ライブラリファイル(スモール) IFSOCKML.LIB MSC用マルチキャストUDP ライブラリファイル(ラージ) IFSOCKMH.LIB MSC用マルチキャストUDP ライブラリファイル(ヒュージ) IFSOCKTS.LIB TC, BC用マルチキャストUDP ライブラリファイル(スモール) IFSOCKTL.LIB TC, BC用マルチキャストUDP ライブラリファイル(ラージ) IFSOCKTH.LIB TC, BC用マルチキャストUDP ライブラリファイル(ヒュージ) IFSOCKWS.LIB Watcom用マルチキャストUDP ライブラリファイル(スモール) IFSOCKWL.LIB Watcom用マルチキャストUDP ライブラリファイル(ラージ) LIB IFSOCKWH.LIB Watcom用マルチキャストUDP ライブラリファイル(ヒュージ) RMCFPM11.COM※ CFスロット(パネル面)活線挿抜ドライバ SETCARD.EXE DOS用CardBusイネーブラ FBIMEM4G.COM 4GBメモリアクセスユーティリティ ISRFIX.EXE 割り込み信号伝播遅延対策サポートドライバ IFDOS DRIVERS HDON.EXE ハードディスクモータ無停止ユーティリティ ※ CFの後継品移行に伴い、本ドライバは使用できなくなりました。弊社採用CFの生産終了に伴 い後継品へ変更しましたが、後継品(2012年6月以降の製品)では活線挿抜に対応しておりません。

(13)

DOS System(日本語環境モデル)システム構築ガイド フォルダ名 ファイル名 内 容 FBIPCIDG.EXE PCIデバイス表示ユーティリティ PBCN.EXE プッシュボタン制御ユーティリティ REBOOT.EXE システムリブートユーティリティ POFF.EXE システムシャットダウンユーティリティ SPSTEP.EXE クロックスピード制御ユーティリティ CLKDTY.EXE クロックデューティ制御ユーティリティ THERMAL.EXE CPU温度測定ユーティリティ VOLTAGE.EXE 電圧測定ユーティリティ GETMAC.EXE MACアドレス取得ユーティリティ PMON.EXE スロットイン電源モジュール状態監視ユーテ ィリティ TOOLS IFLASH.EXE BIOSアップデートユーティリティ MCASSEND.C マルチキャストUDP送信用サンプルソース MCASRECV.C マルチキャストUDP受信用サンプルソース BCMPSEND.BAT Borland C++用バッチファイル TCMPSEND.BAT Turbo C++用バッチファイル MCMPSEND.BAT Microsoft C/C++用バッチファイル VCMPSEND.BAT Visual C/C++用バッチファイル MCASSEND.EXE マルチキャストUDP送信用サンプルプログラム IFDOS SAMPLES MCUDP MCASRECV.EXE マルチキャストUDP受信用サンプルプログラム

(14)

DOS System(日本語環境モデル)システム構築ガイド

3.3 ハードウェアリソース情報取得・表示

3.3.1 ハードウェアリソース情報

PCIデバイスを制御するためには、制御するインタフェースモジュールのハードウェアリソース情 報(I/Oポートアドレス, メモリアドレス, IRQ)を取得する必要があります。 ハードウェアリソース情報はインタフェースモジュールのPCIコンフィギュレーションレジスタに 格納されています。

3.3.2 PCIコンフィギュレーション情報表示方法

PCIデバイスを制御するには、ハードウェアリソース情報が必要です。 PCIデバイスの場合、ハードウェアリソースは、システム起動時にBIOSが自動的に割り当てます。 また、CardBusの場合は弊社製CardBusイネーブラが割り当てます。(CardBusイネーブラの詳細は『54 ページ 3.7 CardBusデバイス使用』を参照してください。) BIOSはハードウェアリソースを、インタフェースモジュールの「PCIコンフィギュレーション情報」 に書き込み、管理します。このPCIコンフィギュレーション情報はPCIバスにつながっている全ての デバイスに存在し、ハードウェアリソース情報以外にもメーカ名やデバイスの種類等の情報が管理 されています。 DOS上で認識されているPCIデバイスのコンフィギュレーション情報を表示するユーティリティを 起動メディアに収録しています。本ユーティリティを使用することで、DOS上から簡単にPCIデバイ ス情報を確認できます。 収録ディレクトリ ¥IFDOS¥TOOLS 製品名 PCIデバイス表示ユーティリティ 実行ファイル名 FBIPCIDG.EXE DOS上で上記実行ファイルを実行すると下記のような画面に、認識されているPCIデバイスの一覧 情報が表示されます。

※ 表示は16進数です。例えば、弊社PCI-466102の場合、Vendor IDは1147h, Device IDは1235h(4661) と表示されます。

(15)

DOS System(日本語環境モデル)システム構築ガイド

「Enter」キーを押すと選択されているデバイスのコンフィギュレーション情報の詳細表示画面に移 行します。

(16)

DOS System(日本語環境モデル)システム構築ガイド

3.3.3 ハードウェアリソース情報取得方法

DOS System開発らくらくパッケージの総合ライブラリを使用することで、ハードウェ アリソース情報の取得をプログラム上から簡単に行うことができます。

■概要

総合ライブラリを使用することで、プログラム上から簡単にハードウェアリソース情報を取得す ることができます。 総合ライブラリのAPI関数をプログラム上から使用する場合は「include」ディレクトリ内の 「IFDOS.H」を使用し、「lib」ディレクトリ内からご使用のコンパイラ, メモリモデルに合った総 合ライブラリをリンクして使用してください。 総合ライブラリのリソース取得機能を利用する場合、PCIコンフィギュレーション情報として、以 下の4つがポイントとなります。 コンフィギュレーション情報 内 容 Vendor ID ベンダID。PCIデバイスメーカを示すIDです。 弊社製品は1147hになっています。 Device ID デバイスID。ベンダIDで指定されるPCIデバイスメーカが自 社のデバイスに割り当てた16ビットのIDです。 弊社製品のデバイスIDは製品型式になっています。 (例)PCI-2702Cなら0A8Eh(2702), PCI-466102なら1235h(4661) になります。 ※ 詳細は各GPDシリーズをご確認ください。

Base Address I/Oポートやメモリの先頭アドレスです。BIOSがPCIデバイス に、自動的に割り当てます。 PCIデバイスは1枚で最大6つのBase Addressを持つことがで きます。 最下位ビットが1の時、このBase AddressはI/O空間を意味しま す。実際のI/Oポートアドレスは、この値をFFFChでマスクし た値です。 また、最下位ビットが0の時、このベースアドレスはメモリ 空間を意味します。実際のメモリアドレスは、この値を FFFFFFF0hでマスクした値です。

Interrupt Line 割り込み番号です。Base Address同様BIOSがPCIデバイスに自 動的に割り当てます。 総合ライブラリは、ベンダIDとデバイスIDでインタフェースモジュールを特定し、そのインタ フェースモジュールに割り当てられているPCIコンフィギュレーション情報を取得します。

■リソース取得ライブラリ関数一覧

No. 関数名 機 能 1 PciGetConfigReg デバイスのリソース情報を取得します。 2 PciGetConfigRegEx デバイスのリソース情報を取得します。

(17)

DOS System(日本語環境モデル)システム構築ガイド リソース情報取得関数個別説明 1. PciGetConfigReg 【機能】 ベンダID, デバイスIDから、インタフェースモジュールに割り当てられたI/Oポートアドレス, メモリアドレス, 割り込み番号を取得します。サブシステムID, サブベンダIDを区別する時や、 全てのPCIコンフィギュレーションレジスタの値を取得したい場合は、PciGetConfigRegEx関数 を使用します。 【書式】 #include "IFDOS.h"

int IFCDECL PciGetConfigReg( int index,

unsigned int ven_id, unsigned int dev_id, unsigned long bar[], char *irq ) 【パラメータ】 index ハードウェアリソース情報を取得したいPCIデバイスの、インタフェース モジュールのインデックス番号を指定します。 (RSW1の値とは関係ありません) 同一型式のインタフェースモジュールが1枚しかない場合は1を指定しま す。複数枚ある場合には何枚目のPCIデバイスのリソースを取得するか指 定します。 ven_id ハードウェアリソース情報を取得したいインタフェースモジュールのベ ンダIDを指定します。 dev_id ハードウェアリソース情報を取得したいインタフェースモジュールのデ バイスIDを指定します。 bar[6] BaseAddress[0]~BaseAddress[5]を格納する変数へのポインタです。 irq 割り込み番号を格納する変数へのポインタです。 【戻り値】 0 :正常終了(インタフェースモジュールが見つかりました)。 -1 : PCI BIOSがありません。 -2 :インタフェースモジュールが1枚も見つかりませんでした。 -3 :これ以上インタフェースモジュールがありません。 -9 :本関数は DOS System(日本語環境モデル)以外では使用できません。

(18)

DOS System(日本語環境モデル)システム構築ガイド

2. PciGetConfigRegEx 【機能】

ベンダID, デバイスID, サブベンダID, サブシステムIDから、インタフェースモジュールに割り 当てられたI/Oポートアドレス, メモリアドレス, 割り込み番号を取得します。

本関数では、全てのPCIコンフィギュレーションレジスタの値を取得できます。

【書式】

#include "IFDOS.h"

int IFCDECL PciGetConfigRegEx( int index,

unsigned int ven_id, unsigned int dev_id, unsigned int subven_id, unsigned int subsys_id, unsigned int *bus_info, PPCI_CONFIG pciData ) 【パラメータ】 index インタフェースモジュールのインデックス番号を指定します。 (RSW1の値とは関係ありません) 同一型式のインタフェースモジュールが1枚しかない場合は1を指定しま す。複数枚ある場合には何枚目のインタフェースモジュールのリソース を取得するか指定します。 ven_id インタフェースモジュールのベンダIDを指定します。 dev_id インタフェースモジュールのデバイスIDを指定します。 subven_id インタフェースモジュールのサブベンダIDを指定します。 sybsys_id インタフェースモジュールのサブシステムIDを指定します。 bus_info バス情報を格納する変数へのポインタです。 バス情報は、以下の形式で格納されます。 ビット15~ビット8:バス番号 ビット7~ビット3:デバイス番号 ビット2~ビット0:ファンクション番号 pciData PCIコンフィギュレーションレジスタの値を格納する構造体へのポイン タです。 【戻り値】 0 :正常終了(インタフェースモジュールが見つかりました)。 -1 : PCI BIOSがありません。 -2 :インタフェースモジュールが1枚も見つかりませんでした。 -3 :これ以上インタフェースモジュールがありません。 -9 :本関数は DOS System(日本語環境モデル)以外では使用できません。

(19)

DOS System(日本語環境モデル)システム構築ガイド

■構造体説明

PCI_CONFIG構造体 【機能】 PCIコンフィギュレーションレジスタの値を格納します。 【書式】

typedef struct _PCI_CONFIG {

unsigned short VendorID; /* 00: Vendor ID */ unsigned short DeviceID; /* 02: Device ID */ unsigned short Command; /* 04: Command */ unsigned short Status; /* 06: Status */ unsigned char RevisionID; /* 08: Revision */ unsigned char ProgIf; /* 09: ProgIf */ unsigned char SubClass; /* 0A: Sub Class */ unsigned char BaseClass; /* 0B: Base */ unsigned char CacheLineSize; /* 0C: Cache Line */ unsigned char LatencyTimer; /* 0D: Latency */ unsigned char HeaderType; /* 0E: Header */ unsigned char BIST; /* 0F: BIST */ unsigned long BaseAddresses[6]; /* 10: Base Address */ unsigned long CIS; /* 28: CIS Pointer */ unsigned short SubVendorID; /* 2C: Subsystem Vendor ID */ unsigned short SubSystemID; /* 2E: Subsystem ID */ unsigned long ROMBaseAddress; /* 30: ROM Base Address */ unsigned char CapabilitiesPtr; /* 34: Capabilities Pointer */ unsigned char Reserved1[3]; /* 35: Reserved */ unsigned long Reserved2[1]; /* 38: Reserved */ unsigned char InterruptLine; /* 3C: INT Line */ unsigned char InterruptPin; /* 3D: INT Pin */ unsigned char MinimumGrant; /* 3E: MIN_GNT */ unsigned char MaximumLatency; /* 3F: MAX_LAT */ unsigned char DeviceSpecific[192]; /* 40: */ } PCI_CONFIG, *PPCI_CONFIG; 【パラメータ】 ここでは、主なパラメータのみを説明します。 BaseAddresses[6] BaseAddress[0]~BaseAddress[5]を格納する変数です。 InterruptLine 割り込み番号を格納する変数です。 RevisionID Revisionを格納する変数です。 他のパラメータについては、PCI仕様書をご覧ください。

(20)

DOS System(日本語環境モデル)システム構築ガイド

■リソース情報取得関数使用例

リソース情報取得関数を使用したサンプルプログラムで使用例の説明をします。 下記の処理を実行することで、PCIデバイスのI/Oポート, メモリ, 割り込み等のリソースを取得でき ます。 【プログラム例(PCI-3161)】 01 /* PCI-3161のリソース情報を取得し、表示するプログラム例です。 */ 02 #include <stdio.h> 03 #include "IFDOS.h" /* 総合ライブラリヘッダファイル */

04 unsigned long bar[6]; /* ベースアドレスを格納する配列 */ 05 unsigned short ioadr; /* I/Oポートアドレスを格納する変数 */ 06 unsigned long memadr; /* メモリアドレスを格納する変数 */ 07 char irq; /* 割り込み番号を格納する変数 */ 08 void main(void)

09 {

10 PciGetConfigReg ( 1, 0x1147, 3161, bar, &irq );/* リソース情報の取得 */ 11 ioadr = (unsigned short)bar[0] & 0xfffc; /* I/Oポートアドレス抽出 */ 12 memadr = (unsigned short)bar[1] & 0xfffffff0L; /* メモリアドレス抽出 */ 13 printf ( "I/O PORT ADDRESS:%4x¥n" , ioadr ); /* I/Oポートアドレス表示 */ 14 printf ( "MEMORY ADDRESS:%8x¥n" , memadr ); /* メモリアドレス表示 */ 15 printf ( "INTERRUPT NUMBER:%d¥n" , irq ); /* 割り込み番号表示 */ 16 }

【解説】

ハードウェアリソース情報を取得したいインタフェースモジュールを、インデックス番号, ベンダ ID, デバイスIDの3つでPciGetConfigReg関数に特定させます。

PciGetConfigReg関数はbarにI/Oポートかメモリアドレスを格納し、irqには割り込み番号が格納しま す。抽出したioadrにI/Oアクセス、memadrにメモリアクセスすれば、ハードウェアを直接制御する ことができます。

注意

リンク時は総合ライブラリを一緒にリンクしてください。

(21)

DOS System(日本語環境モデル)システム構築ガイド

3.4 I/Oアクセス・メモリアクセス

取得したI/OポートにI/Oアクセス、メモリアドレスにメモリアクセスを行い、インタフェースモジ ュールを制御します。 4GB空間へのメモリアクセスに対しても、開発らくらくパッケージの総合ライブラリを使用するこ とで、簡単にアクセスすることができます。

3.4.1 I/Oポートへのアクセス

■I/OマップドI/O方式 専用のI/Oアドレス空間にI/Oポートアドレスを割り当てる方式です。メモリ空間が狭いCPU等で はメモリ空間を広く確保することができます。 I/OポートへのアクセスはI/Oアクセス命令(入力命令, 出力命令)を用います。 ■メモリマップドI/O方式 専用I/Oアドレス空間ではなく、データメモリと同じメモリ空間にI/Oポートアドレスを割り当て る方式です。 通常のメモリアクセスと同じように、メモリ上に割り当てたI/Oポートへアクセスできます。アク セスにはメモリアクセス命令(リード命令, ライト命令)を使用します。 DOSからI/OマップドI/OのI/Oポートアドレスにアクセスする場合、I/Oポートアドレスにinp, outp コマンドで入出力命令を行い、制御することができます。 メモリ空間 I/O空間 アドレス空間 0xFFFF 0x0000 メモリマップドI/O 0xFF00 0xFEFF 0x0001 I/Oもメモリも、メモリアクセス命令でアクセス メモリ空間 I/O空間 アドレス空間 0xFFFF 0x0000 メモリマップドI/O 0xFF00 0xFEFF 0x0001 I/Oもメモリも、メモリアクセス命令でアクセス メモリ空間 I/O空間 アドレス空間 0xFF 0x00 0xFFFF 0x0000 I/OマップドI/O 0xFFFE 0x0001 ・I/O空間にはI/O命令でアクセス ・メモリ空間にはメモリアクセス命令でアクセス メモリ空間 I/O空間 アドレス空間 0xFF 0x00 0xFFFF 0x0000 I/OマップドI/O 0xFFFE 0x0001 ・I/O空間にはI/O命令でアクセス ・メモリ空間にはメモリアクセス命令でアクセス I/OマップドI/O方式とメモリマップドI/O方式の違い メモリアクセスを行う場合、取得したリソースにそのままinp, outpコマンドを使用してアクセスす ることはできません。 メモリアクセスを行うには、『20ページ 3.4.2 メモリアクセス(1MB以上のメモリ空間アクセス)』 をご確認ください。

(22)

DOS System(日本語環境モデル)システム構築ガイド

3.4.2 メモリアクセス(1MB以上のメモリ空間アクセス)

通常、DOSでは1MB以上のメモリ空間にアクセスすることができません。アクセスするためには専 用のドライバが必要となります。 DOS System開発らくらくパッケージに、メモリアクセスユーティリティ FBIMEM4G.COMを収録しています。FBIMEM4G.COMを実行することで、4GBまでのメモリ空間に アクセスできるようになり、総合ライブラリを使用して、4GBまでのメモリ空間に対してバイト・ ワード・ダブルワード単位でのリード/ライトが行えます。 メモリアクセスユーティリティは、PROTECTモードでi386のグローバルディスクリプタテーブルを 書き換え、REALモードに戻ってくる、ということを行っています。

このため32ビットレジスタ(EBX, ESI, EDI)を使って、4GBメモリ空間のアドレスを指定できるよう になります。 総合ライブラリは、この32ビットレジスタを使ってメモリの読み書きをしています。

3.4.3 DOS用4GBメモリアクセスユーティリティ

4GBメモリアクセスユーティリティの概要, 使用方法を説明します。 収録ディレクトリ ¥IFDOS¥DRIVERS 製品名 4GBメモリアクセスユーティリティ 実行ファイル名 FBIMEM4G.COM

■概要

DOSのREALモードでは、CPUのセグメントリミットが64KBに制限されるため、32ビットレジスタ (EBX, ESI, EDI)による1MBを超えるメモリ空間へのアクセスは、例外が発生します。

DOS System開発らくらくパッケージに収録されている、FBIMEM4G.COMの実行によ り、1MBを超えるメモリ空間へのアクセスが有効となります。 FBIMEM4G.COMはメモリ常駐タイプです。コンベンショナルメモリを約2KB使用します。

注意

CPUモードが仮想86モードの時は4GB空間にアクセスできません。 CPUのGDTを変更するアプリケーションは動作しません。 FBIMEM4G.COMを実行していない状態で、4GBの領域にアクセスするとコントローラがハン グアップするのでご注意ください。 制御対象モジュールの割り込み番号がIRQ5(CPUの例外割り込み番号)の場合、正常に動作 しません。BIOS等で、IRQ5に割り当てられないようにしてください。

(23)

DOS System(日本語環境モデル)システム構築ガイド

3.4.4 1MB以上のメモリ空間へのアクセス

FBIMEM4G.COMの実行により、4GBメモリ空間へのメモリアクセスができます。 DOS System開発らくらくパッケージの総合ライブラリを使用することで、メモリアク セスを行います。 総合ライブラリのAPI関数をプログラム上から使用する場合は「include」ディレクトリ内の 「IFDOS.H」を使用し、「lib」ディレクトリ内からご使用のコンパイラ, メモリモデルに合った総 合ライブラリをリンクして使用してください。

■ライブラリ関数一覧

No. 関数名 機 能 1 UioPeekByte 指定したメモリから1バイト(8ビット)データを読み込みます。 2 UioPeekWord 指定したメモリから1ワード(16ビット)データを読み込みます。 3 UioPeekDword 指定したメモリから1ダブルワード(32ビット)データを読み込みます。 4 UioPokeByte 指定したメモリに、1バイト(8ビット)データを書き込みます。 5 UioPokeWord 指定したメモリに、1ワード(16ビット)データを書き込みます。 6 UioPokeDword 指定したメモリに、1ダブルワード(32ビット)データを書き込みます。 7 UioWriteBlock 指定したメモリに、ブロックデータを書き込みます。 8 UioReadBlock 指定したメモリからブロックデータを読み込みます。 9 UioFillByte 指定したメモリにバイトデータを指定回数分、書き込みます。 10 UioFillWord 指定したメモリにワードデータを指定回数分、書き込みます。 11 UioFillDword 指定したメモリにダブルワードデータを指定回数分、書き込みます。 12 UioEnableCache 外部メモリの指定した領域のメモリキャッシュを有効にします。 13 UioDisableCache メモリ領域へのキャッシュを無効にします。 14 UioMemCopy 指定したメモリ領域から指定サイズ分データをコピーします。 15 UioMemAreaInit 連続メモリ領域確保のための初期化動作を行います。 16 UioMemAlloc メモリ領域の確保を行います。 17 UioMemFree 確保しているメモリ領域の開放を行います。 18 UioMemContArea 現在確保できる最大連続メモリ領域のサイズを取得します。 19 EmmInit EMM386.EXEを初期化します。 20 EmmDisable CPUモードをREALモードに移行させます。 21 EmmEnable CPUモードを仮想86モードに移行させます。 22 GetCpuMode CPUモードを取得します。

(24)

DOS System(日本語環境モデル)システム構築ガイド

■ライブラリ関数個別説明

1. UioPeekByte 【機能】 指定したメモリから1バイト(8ビット)データを読み込みます。 【書式】 #include "IFDOS.h"

unsigned char IFCDECL far UioPeekByte ( unsigned long _address

); 【パラメータ】 _address データを読み込むメモリのアドレスです。 【戻り値】 処理が正常に終了すると読み込まれたデータの値を返します。 【記述例】 メモリアドレス00400000hのデータをバイト単位で読み込みます。 ReadData = UioPeekByte(0x00400000L); 2. UioPeekWord 【機能】 指定したメモリから、1ワード(16ビット)データを読み込みます。 【書式】 #include "IFDOS.h"

void IFCDECL far UioPeekWord ( unsigned long _address

); 【パラメータ】 _address データを読み込むメモリのアドレスです。 【戻り値】 処理が正常に終了すると読み込まれたデータの値を返します。 【記述例】 メモリアドレス00400000hのデータをワード単位で読み込みます。 ReadData = UioPeekWord(0x00400000L);

(25)

DOS System(日本語環境モデル)システム構築ガイド 3. UioPeekDword 【機能】 指定したメモリから、1ダブルワード(32ビット)データを読み込みます。 【書式】 #include "IFDOS.h"

unsigned long IFCDECL far UioPeekDword ( unsigned long _address

); 【パラメータ】 _address データを読み込むメモリのアドレスです。 【戻り値】 処理が正常に終了すると読み込まれたデータの値を返します。 【記述例】 メモリアドレス00400000hのデータをダブルワード単位で読み込みます。 ReadData = UioPeekDword(0x00400000L); 4. UioPokeByte 【機能】 指定したメモリに、1バイト(8ビット)データを書き込みます。 【書式】 #include "IFDOS.h"

void IFCDECL far UioPokeByte ( unsigned long _address,

unsigned char _data

); 【パラメータ】 _address データを書き込むメモリのアドレスです。 _data 書き込むデータです。 【戻り値】 戻り値はありません。 【記述例】 メモリアドレス00400000hへバイトデータ(FFh)を書き込みます。 UioPokeByte(0x00400000L, 0xFF);

(26)

DOS System(日本語環境モデル)システム構築ガイド 5. UioPokeWord 【機能】 指定したメモリに、1ワード(16ビット)データを書き込みます。 【書式】 #include "IFDOS.h"

void IFCDECL far UioPokeWord ( unsigned long _address,

unsigned short _data ); 【パラメータ】 _address データを書き込むメモリのアドレスです。 _data 書き込むデータです。 【戻り値】 戻り値はありません。 【記述例】 メモリアドレス00400000hへワードデータ(FFFFh)を書き込みます。 UioPokeWord(0x00400000L, 0xFFFF); 6. UioPokeDword 【機能】 指定したメモリに、1ダブルワード(32ビット)データを書き込みます。 【書式】 #include "IFDOS.h"

void IFCDECL far UioPokeDword ( unsigned long _address,

unsigned long _data

); 【パラメータ】 _address データを書き込むメモリのアドレスです。 _data 書き込むデータです。 【戻り値】 戻り値はありません。 【記述例】 メモリアドレス00400000hへダブルワードデータ(FFFFFFFFh)を書き込みます。 UioPokeDword(0x00400000L, 0xFFFFFFFFL);

(27)

DOS System(日本語環境モデル)システム構築ガイド 7. UioWriteBlock 【機能】 指定したメモリにブロックデータを書き込みます。 【書式】 #include "IFDOS.h"

void IFCDECL far UioWriteBlock ( unsigned long _address,

void far *_data,

unsigned long _length

); 【パラメータ】 _address データを書き込むメモリ領域の先頭アドレスです。 *_data 書き込むデータを格納する変数へのfarポインタです。 _length 書き込むサイズ(バイト単位)です。 【戻り値】 戻り値はありません。 【記述例】 メモリアドレス00400000hへ配列データを16バイト書き込みます。 UioWriteBlock(0x00400000L, *data, 0x10); 8. UioReadBlock 【機能】 指定したメモリにブロックデータを読み込みます。 【書式】 #include "IFDOS.h"

void IFCDECL far UioReadBlock ( unsigned long _address,

void far *_data,

unsigned long _length

); 【パラメータ】 _address データを読み込むメモリ領域の先頭アドレスです。 *_data 読み込むデータを格納する変数へのfarポインタです。 _length 読み込むサイズ(バイト単位)です。 【戻り値】 戻り値はありません。 【記述例】 メモリアドレス00400000hから配列へ16バイト読み込みます。 UioReadBlock(0x00400000L, *data, 0x10);

(28)

DOS System(日本語環境モデル)システム構築ガイド 9. UioFillByte 【機能】 指定したメモリにバイトデータを指定回数分、書き込みます。 【書式】 #include "IFDOS.h"

void IFCDECL far UioFillByte ( unsigned long _address,

unsigned long _count,

unsigned char _data

); 【パラメータ】 _address データ書き込みを開始するメモリ領域の先頭アドレスです。 _count 書き込みを行う回数です。 _data 書き込むデータです。 【戻り値】 戻り値はありません。 【記述例】 メモリアドレス00400000hから16バイト, データ(FFh)を書き込みます。 UioFillByte(0x00400000L, 0x10, 0xFF); 10. UioFillWord 【機能】 指定したメモリにワードデータを指定回数分、書き込みます。 【書式】 #include "IFDOS.h"

void IFCDECL far UioFillWord ( unsigned long _address,

unsigned long _count,

unsigned short _data ); 【パラメータ】 _address データ書き込みを開始するメモリ領域の先頭アドレスです。 _count 書き込みを行う回数です。 _data 書き込むデータです。 【戻り値】 戻り値はありません。 【記述例】 メモリアドレス00400000hから16バイト, データ(FFFFh)を書き込みます。 UioFillWord(0x00400000L, 0x08, 0xFFFF);

(29)

DOS System(日本語環境モデル)システム構築ガイド 11. UioFillDword 【機能】 指定したメモリにダブルワードデータを指定回数分、書き込みます。 【書式】 #include "IFDOS.h"

void IFCDECL far UioFillDword ( unsigned long _address,

unsigned long _count,

unsigned long _data

); 【パラメータ】 _address データ書き込みを開始するメモリ領域の先頭アドレスです。 _count 書き込みを行う回数です。 _data 書き込むデータです。 【戻り値】 戻り値はありません。 【記述例】 メモリアドレス00400000hから16バイト, データ(FFFFFFFFh)を書き込みます。 UioFillDword(0x00400000L, 0x04, 0xFFFFFFFFL);

(30)

DOS System(日本語環境モデル)システム構築ガイド 12. UioEnableCache 【機能】 外部メモリの指定した領域のメモリキャッシュを有効にします。 【書式】 #include "IFDOS.h"

void IFCDECL far UioEnableCache ( unsigned long _address,

unsigned long _size

); 【パラメータ】 _address メモリキャッシュを有効にするメモリの先頭アドレスです。 _size メモリキャッシュを有効とするメモリサイズ(バイト)です。 【戻り値】 戻り値はありません。 【記述例】 メモリアドレス00400000hから10000hバイト分のメモリキャッシュを有効にします。 UioEnableCache(0x00400000L, 0x00010000L); 【備考】 外部メモリ(メインメモリ以外)を指定してください。 キャッシュが有効にできるサイズ指定は、最小4096バイト(1000h)から実装メモリの最大有効サ イズまでです。また4096の倍数で指定する必要があります。(1000hのn倍で指定する。) 実行環境により使用できるメモリの最大有効サイズは異なります。

(31)

DOS System(日本語環境モデル)システム構築ガイド 13. UioDisableCache 【機能】 メモリ領域へのキャッシュを無効にします。 【書式】 #include "IFDOS.h"

void IFCDECL far UioDisableCache ( unsigned long _address,

unsigned long _size

); 【パラメータ】 _address UioEnableCache関数で指定したメモリの先頭アドレスです。 _size UioEnableCache関数で指定したメモリサイズ(バイト)です。 【戻り値】 戻り値はありません。 【記述例】 メモリアドレス00400000hから10000hバイト分のメモリキャッシュを無効にします。 UioDisableCache(0x00400000L, 0x00010000L); 【備考】 UioEnableCache関数でキャッシュを有効にしたアドレス, サイズを指定してください。 14. UioMemCopy 【機能】 指定したメモリ領域から指定サイズ分データをコピーします。 【書式】 #include "IFDOS.h"

void IFCDECL far UioMemCopy ( unsigned long _raddress,

unsigned long _waddress,

unsigned long _size

); 【パラメータ】 _raddress 読み込み先の先頭アドレスです。 _waddress 書き込み先の先頭アドレスです。 _size 転送するサイズ(バイト)です。 【戻り値】 戻り値はありません。 【記述例】 メモリアドレス00400000hから10000バイト分のデータをメモリアドレス00100000hへ書き込みま す。 UioMemCopy(0x00400000L, 0x00100000L, 0x00010000L);

(32)

DOS System(日本語環境モデル)システム構築ガイド 15. UioMemAreaInit 【機能】 連続メモリ領域確保のための初期化動作を行います。 【書式】 #include "IFDOS.h"

unsigned long IFCDECL far UioMemAreaInit ( void ); 【パラメータ】 パラメータはありません。 【戻り値】 処理が正常に終了すると確保できる最大のメモリサイズを返します。処理が異常終了すると0 を返します。 【記述例】 連続メモリ領域確保のための初期化動作を行います。 ret = UioMemAreaInit(); 【備考】 本APIを実行するには最低65MB以上のメモリ空き領域が必要です。本APIを実行し得られた最 大メモリサイズ+1MBまでをシステムの管理領域として使用します。 システム管理領域へ直接データを書き込んだ場合、本APIでのメモリの管理が正しく行われな くなります。 また、UioMemAreaInit関数を実行後、UioMemAlloc関数を実行してください。

(33)

DOS System(日本語環境モデル)システム構築ガイド 16. UioMemAlloc 【機能】 メモリ領域の確保を行います。 【書式】 #include "IFDOS.h"

unsigned long IFCDECL far UioMemAlloc ( unsigned long _MemSize

); 【パラメータ】 _MemSize 確保するメモリサイズ(64KB単位)です。 【戻り値】 処理が正常に終了すると割り当てられた登録ハンドル(メモリの上位アドレス)を返します。処 理が異常終了すると0を返します。 【記述例】 メモリ領域に10000hの連続領域を確保します。 handle = UioMemAlloc(0x10000L); メモリアクセスできる領域は、ハンドルからサイズ分引いたアドレスとなります。 MemAddress = (handle) – (0x10000L) 確保したメモリ領域にアクセスします。 UioPokeByte(MemAddress, 0x55); 【備考】 UioMemAreaInit関数を実行後、UioMemAlloc関数を実行してください。 確保できるメモリの最小単位は64KBです。 また64KB未満の値は切り捨てられます。(例:11000h → 10000h) 【注意】 確保した メモリ領域 0DDE0000h 0CDE0000h 1000000h 00000000h FFFFFFFFh メモリから指定サイズ分(01000000h)メモリ確保する場合、UioMemAlloc(0x1000000)と指定します。 この時handleとして0DDE0000hが返った場合、確保した領域の先頭アドレスは、 handle(0DDE0000h) - サイズ(01000000h)で0CDE0000hとなり、0CDE0000hから01000000hサイズの メモリ領域が確保されています。

(34)

DOS System(日本語環境モデル)システム構築ガイド 17. UioMemFree 【機能】 確保しているメモリ領域の開放を行います。 【書式】 #include "IFDOS.h"

int IFCDECL far UioMemFree ( unsigned long _handle

); 【パラメータ】 _handle 開放する領域の登録ハンドルです。 【戻り値】 処理が正常に終了すると0を返します。処理が異常終了すると-1を返します。 【記述例】 確保した連続領域を開放します。 handle = UioMemAlloc(0x10000L); ret = UioMemFree(handle); 【備考】 UioMemAlloc関数で取得した登録ハンドルを指定してください。それ以外のアドレスでは開放 を行いません。 18. UioMemContArea 【機能】 現在確保できる最大連続メモリ領域のサイズを取得します。 【書式】 #include "IFDOS.h"

unsigned long IFCDECL far UioMemContArea ( void ); 【パラメータ】 パラメータはありません。 【戻り値】 処理が正常に終了すると現在確保できる最大連続領域サイズを返します。処理が異常終了する と0を返します。 【記述例】 確保できる連続領域サイズを取得します。 MemSize = UioMemContArea();

(35)

DOS System(日本語環境モデル)システム構築ガイド 19. EmmInit 【機能】 EMM386.EXEを初期化します。 【書式】 # include "IFDOS.h" int IFCDECL far EmmInit(

void ); 【パラメータ】 パラメータはありません。 【戻り値】 処置が正常終了すると1を返します。処理が異常終了すると0を返します。 【記述例】 EMM386を初期化します。 ret = EmmInit(); 【備考】

EmmInitを実行していない状態で、EmmDisable関数, EmmEnable関数を使用した場合、CPUモー

ドの切り替えができなくなります。モード切り替えができなくなった場合は、コマンドライン より“EMM386 AUTO”または“EMM386 ON”を実行し、EMM386を初期化してください。

20. EmmDisable 【機能】

CPUモードをREALモードに移行させます。

【書式】

# include "IFDOS.h"

int IFCDECL far EmmDisable( void ); 【パラメータ】 パラメータはありません。 【戻り値】 処置が正常終了すると1を返します。処理が異常終了すると0を返します。 【記述例】 CPUモードをREALモードに切り替えます。 ret = EmmDisable();

(36)

DOS System(日本語環境モデル)システム構築ガイド 21. EmmEnable 【機能】 CPUモードを仮想86モードに移行させます。 【書式】 # include "IFDOS.h"

int IFCDECL far EmmEnable( void ); 【パラメータ】 パラメータはありません。 【戻り値】 処置が正常終了すると1を返します。処理が異常終了すると0を返します。 【記述例】 CPUモードを仮想86モードに切り替えます。 ret = EmmEnable(); 22. GetCpuMode 【機能】 CPUモードを取得します。 【書式】 # include "IFDOS.h"

int IFCDECL far GetCpuMode( void ); 【パラメータ】 パラメータはありません。 【戻り値】 CPUモードがREALモードの場合1を返します。 CPUモードが仮想86モードの場合0を返します。 【記述例】 CPUモードを取得します。 ret = GetCpuMode();

(37)

DOS System(日本語環境モデル)システム構築ガイド

■メモリアクセス関数使用例

メモリアクセス関数を使用したサンプルプログラムで使用例の説明をします。 サンプルプログラムでは、メモリ領域に対してバイト・ワード・ダブルワードでそれぞれ入出力を行 います。 01 /* 4GBメモリアクセス サンプルプログラムソース */ 02 #include <stdio.h> 03 #include "IFDOS.h" /* 総合ライブラリヘッダファイル */ 04 int main(void) 05 {

06 unsigned char bReadData, bWriteData = 0x12; 07 unsigned int wReadData, wWriteData = 0x3456; 08 unsigned long dReadData, dWriteData = 0x98765432L;

09 UioPokeByte(0xE1800000L , bWriteData); /* バイト出力 */ 10 bReadData = UioPeekByte(0xE1800000L); /* バイト入力 */ 11 printf( "INPUT BYTE DATA: %02x ¥n", bReadData); /* バイトデータ表示 */

12 UioPokeWord(0xE1800000L + 0x10 , wWriteData ); /* ワード出力 */ 13 wReadData = UioPeekWord(0xE1800000L + 0x10); /* ワード入力 */ 14 printf( "INPUT WORD DATA: %04x ¥n", wReadData); /* ワードデータ表示 */ 15 UioPokeDword(0xE1800000L + 0x20 , dWriteData ); /* ダブルワード出力 */ 16 dReadData = UioPeekDword(0xE1800000L + 0x20); /* ダブルワード入力 */ 17 printf("INPUT DWORD DATA: %08lX ¥n",dReadData); /*ダブルワードデータ表示 */ 18 return(0); 19 } ※ サンプル中のメモリアドレス(E1800000h)はご使用の環境に応じた適切な値(PciGetConfigReg関 数で取得したメモリアドレス等)に変更してください。 【解説】 UioPoke系関数でメモリライトを行い、UioPeek系関数でメモリリードを行うことができます。

■CPUのメモリキャッシュ機能を利用したメモリ間でのデータ高速転送

UioEnableCache関数を使用することで、指定したメモリ領域間でデータの高速転送が行えます(バー スト転送機能)。分散処理コントローラやメモリンクインタフェースモジュール等メモリを搭載し たモジュール上のメモリへの高速アクセスを行う場合に役立ちます。

(38)

DOS System(日本語環境モデル)システム構築ガイド

■メモリキャッシュ関数使用時の制限事項

・ メモリをキャッシュする範囲は外部メモリ(メインメモリ以外)を指定してください。 ・ キャッシュが有効にできるサイズ指定は最小4096バイト(1000h)から実装メモリの最大有効サイ ズまでです。また4096の倍数で指定する必要があります。(1000hのn倍で指定する。) ・ 実装している外部メモリのサイズによりキャッシュできるメモリの最大有効サイズは異なります。

■メモリキャッシュ機能使用時のサンプルプログラムコード1

01 /* 4GBメモリアクセス サンプルプログラムソース メモリキャッシュ機能使用時 */ 02 /* 外部メモリ間でのデータ転送 */ 03 #include <stdio.h> 04 #include "IFDOS.h" /* 総合ライブラリヘッダファイル */ 05 void main() 06 {

07 unsigned long adr = 0xE1D00000L; /* キャッシュを開始するメモリアドレス */ 08 unsigned long cache_size = 0x200000L;/* メモリキャッシュサイズ */ 09 /* メモリキャッシュを有効にする(指定アドレス~+2MBキャッシュ有効) */ 10 /* 引数はキャッシュを有効にするメモリの先頭アドレス、 */ 11 /* 有効にするサイズの順で指定します。 */ 12 UioEnableCache(adr , cache_size); 13 /* データ転送 指定アドレスから+1MBの領域を指定アドレス+1MBから+1MBへ転送する */ 14 /* 引数は転送元の先頭アドレス, 転送先の先頭アドレス, 転送サイズの順で指定 */ 15 UioMemCopy(adr, adr+ cache_size / 2, cache_size / 2);

16 /* メモリキャッシュを無効にする */ 17 /* 引数はキャッシュを有効にした範囲と同じ箇所を指定します。*/ 18 UioDisableCache(adr, cache_size); 19 } ※ サンプル中のメモリアドレスはご使用の環境に応じた適切な値に変更してください。 【解説】 4行目 メモリアクセスライブラリのヘッダファイルを挿入します。 7行目 キャッシュを開始するメモリアドレスを設定します。アドレスは使用するコントローラ により異なります。 8行目 キャッシュサイズを指定します。 12行目 指定範囲のメモリキャッシュを有効にします。 15行目 メモリ間でデータ転送を行います。 18行目 メモリキャッシュを解除します。

(39)

DOS System(日本語環境モデル)システム構築ガイド

■メモリキャッシュ機能使用時のサンプルプログラムコード2

01 /* 4GBメモリアクセス サンプルプログラムソースメモリキャッシュ機能使用時 */ 02 /* メインメモリ、外部メモリ間でのデータ転送 */ 03 #include <stdio.h> 04 #include "IFDOS.h" /*メモリアクセス関数ヘッダファイル */ 05 void main() 06 {

07 unsigned long adr = 0xE1D00000L; /* キャッシュを開始するメモリアドレス */ 08 unsigned long mainadr = 0x1000000L; /* メインメモリのアドレス */ 09 unsigned long cache_size = 0x100000L; /* メモリキャッシュサイズ */ 10 /*メモリキャッシュを有効にする(指定アドレス~+1MBキャッシュ有効) */ 11 /* 引数はキャッシュを有効にするメモリの先頭アドレス, */ 12 /* 有効にするサイズの順で指定します。 */ 13 UioEnableCache(adr , cache_size); 14 /* 指定したメインメモリのアドレスから1MBのデータを指定した外部メモリへ転送 */ 15 /* 引数はメインメモリのアドレス, 外部メモリのアドレス, 転送サイズの順で指定 */ 16 UioMemCopy(mainadr, adr, cache_size);

17 /* メモリキャッシュを無効にする */ 18 /* 引数はキャッシュを有効にした範囲と同じ箇所を指定します。 */ 19 UioDisableCache(adr, cache_size); 20 } ※ サンプル中のメモリアドレスはご使用の環境に応じた適切な値に変更してください。 【解説】 7行目 キャッシュを開始するメモリアドレスを設定します。アドレスは使用するコントローラ により異なります。 8行目 データ元のメインメモリアドレスを指定します。アドレスは使用するコントローラによ り異なります。 9行目 キャッシュサイズを指定します。 13行目 指定範囲のメモリキャッシュを有効にします。 16行目 メインメモリ, 外部メモリ間でデータ転送を行います。 19行目 メモリキャッシュを解除します。 ※ メインメモリはシステムがすでにキャッシュしているので、UioEnableCache関数でキャッシュを有 効にする必要はありません。また、システム領域や、インタフェースモジュールの占有している領 域をキャッシュしてしまうと、システムがハングアップしたり、インタフェースモジュールへアク セスできなくなるため、それらの領域へのキャッシュは行わないようにしてください。

(40)

DOS System(日本語環境モデル)システム構築ガイド

3.4.5 EMM386環境での4GBメモリ空間へのアクセス

CPUモード切り替え関数を用いることで、EMM386等EMSドライバ組み込み環境下(仮想86モード環 境下)でも4GBメモリ空間へのアクセスを行うことができます。

注意

EmmDisable関数, EmmEnable関数を使用してCPUモードを切り替える前に、必ずEmmInit関

数を実行して、EMM386.EXEを初期化してください。 仮想86モードの状態でメモリアクセス関数(UioPeek関数, UioPoke関数)を実行するとCPUが ハングアップします。

■EMM386使用時の制限事項

1. config.sysファイル内では、HIMEM.SYSをEMM386.EXEより先に導入してください。 2. EMM386.EXEのスイッチ, パラメータは「ON」または「AUTO」以外設定しないでください。 CONFIG.SYSの設定例: DOS= HIGH FILE= 20 BUFFERS= 30 REM HIMEM.SYSを先に導入する DEVICE=C:¥DOS¥HIMEM.SYS REM EMM386.EXEのオプションは「ON」または「AUTO」 DEVICE=¥DOS¥EMM386.EXE AUTO

(41)

DOS System(日本語環境モデル)システム構築ガイド

■EMM386使用時のサンプルプログラムコード

01/* EMM386使用時4GBメモリアクセスサンプルプログラムソース */ 02 #include <stdio.h> 03 #include "IFDOS.h" /* 総合ライブラリヘッダファイル */ 04 void main() 05 {

06 unsigned long memadr = 0x01000000; /* 4GBメモリ空間のメモリアドレス */ 07 int ret; 08/* EMM386.EXEの初期化 */ 09 EmmInit(); 10/* CPUモードの確認 */ 11 ret = GetCpuMode(); 12 /* CPUモードを切り替える(REALモードへ移行)*/ 13 if(ret != 1) 14 { 15 ret = EmmDisable(); 16 if(ret) printf("CPUモードの切り替えに成功¥n"); 17 else 18 { 19 printf("CPUモードの切り替えに失敗¥n"); 20 return; 21 } 22 } 23 /* 4GB空間へのアクセス */

24 UioPokeDword(memadr, 0xAAAABBBB); /* データをライトする(DWORDアクセス)*/ 26 UioPeekDword(memadr); /* データをリードする(DWORDアクセス)*/ 27/* CPUモードを切り替える(仮想86モードへ移行) */ 28 EmmEnable(); 29 } ※ サンプル内のメモリアドレス(0x01000000等)はご使用の環境に応じた適切な値に変更してくだ さい。 ※ 64MB以下のメモリ空間にはシステムが占有している領域があります。 メモリ空間へのアクセスは、システムの使用していないメモリ空間をご使用ください。

(42)

DOS System(日本語環境モデル)システム構築ガイド

3.5 割り込み設定・制御

3.5.1 割り込み処理とは

割り込みとは、「実行している処理を一時中断して、別の処理を行うこと」です。 下図の処理系等を使って説明をすると、実行中のメイン処理中に割り込みが発生した場合、コント ローラはメイン処理を一時中断し、割り込み処理を優先的に処理し、完了後にメイン処理に復帰す るという流れになります。

割り込み処理

メイン処理 1

割り

込み

発生

割り込み処理フロー

メイン処理 3

メイン処理 2

②自分のインタフェースモジュール からの割り込み? ①割り込みが発生! ③割り込み処理実行! ③別の割り込み処理にチェイン Yes! No! ■自分のインタフェースモジュールへの 割り込みか判断する必要あり! 共有 A B IRQ2 IRQ3 IRQ4 ■IRQ が共有される インタフェースモジュールは、PCIバスにつながっている他のデバイスと割り込みを共有します。 どのデバイスと共有するかは、BIOS等によって決められます。 FBIPCIDG.EXEでInterrupt Pin(割り込みピン番号)を確認することでIRQの状況を見ることができま す。 PCIデバイスは、IRQの空きがなくてもどれかのPCIデバイスと共有すれば良いので、IRQが不足す ることはありません。 IRQを共有することでIRQが不足するということは避けられますが、その副作用として、発生した割 り込みがどのデバイスから発生した物かを判断するという処理が必要になります。 割り込みの発生したデバイスを判断する方法として、PCIデバイスが持つ、「割り込み要因ステー タス」を利用します。割り込み発生時に割り込み要因ステータスを確認し、どのデバイスから割り 込みが発生しているか順に確認していきます。最初のデバイスで割り込みを確認できなければ次の デバイスの割り込み処理へ、そこでも確認できなければまた次のデバイスへ、と割り込み処理を移 行させていきます。(この処理を割り込み処理のチェインまたはチェインニングといいます。)

参照

関連したドキュメント

where it does not matter). 10.4] for a discussion of the relation between sequences of this form and elliptic divisibility sequences defined via a bilinear recurrence or the sequence

Key words: Density theorem, prehomogeneous vector spaces, quadratic forms, Tamagawa numbers, local zeta functions.. The first author was partially supported by Teijin

— Algebraic curves, finite fields, rational points, genus, linear codes, asymp- totics, tower of curves.. The author was partially supported by PRONEX #

Keywords: Traceability Conjecture, Path Partition Conjecture, oriented graph, generalized tournament, traceable, k-traceable, longest path.. ∗ Supported by NRF

This research was supported by Natural Science Foundation of the Higher Education Institutions of Jiangsu Province (10KJB110003) and Jiangsu Uni- versity of Science and

Key words and phrases: Vasyunin-cotangent sum, Estermann zeta function, fractional part function, Riemann Hypothesis.. Supported by Université d’Evry Val d’Essonne and

By classical theory the operator −D 2 is symmetric, but not essentially self adjoint, with the domain consisting of compactly supported smooth functions satisfying these boundary

— Infinitely near singular points, characteristic exponents, Differentiation The- orem, Numerical Exponent Theorem, Ambient Reduction Theorem.. The author was supported by the