ライブラリ

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
    • 初版