ライブラリ
vpmxfer
VCPI を利用した PCI MMIO データ転送ライブラリ
Download: vpmxfer_v01.zip
DOS 環境で PCI の MMIO にアクセスするために作成したものです。 VCPI を使ってプロテクトモードに移行してデータ転送を行います。
本来の目的は PCI の MMIO とのデータのやり取りでしたが、実装上、PCI の MMIO でなくとも 10000h 以上の物理アドレスを直接指定できるメモリ空間との間であればデータ転送が可能です。
使い方概説
vpmxfer では以下6つの関数が提供されています。
; VCPI 関係
check_vcpi PROTO NEAR C
init_vcpi PROTO NEAR C
dispose_vcpi PROTO NEAR C
; 転送関数
vpmxfer_4 PROTO NEAR C dst_addr:dword, src_addr:dword, cnt:word
vpmxfer_2 PROTO NEAR C dst_addr:dword, src_addr:dword, cnt:word
vpmxfer_1 PROTO NEAR C dst_addr:dword, src_addr:dword, cnt:word
VCPI 関係の関数で転送前の VCPI の存在チェックなどを行い、実際のデータ転送を転送関数を呼んで行います。
N_XFER
個の word サイズのデータを転送するコードは以下のような雰囲気になります。
; 定数とバッファの定義
MMIO_OFFSET equ 16 ; 転送したいデータの MMIO 内でのオフセット
N_XFER equ 4
buffer dw N_XFER dup(?)
; 転送処理の例
call get_mmio_base_addr ; eax に MMIO のベースアドレスが得られるとする
add eax, MMIO_OFFSET ; eax=転送元 MMIO アドレス
xor edx, edx
mov dx, ds
shl edx, 4
add edx, offset buffer ; edx=転送先アドレス(1MiB 以下のメモリ)
invoke vpmxfer_2, edx, eax, N_XFER
更新履歴
- 2022/06/11: version 0.1
- 初版