MS-DOS Player内のコードで、以下のような処理で検証をしています。
const char hoge[]="あいうえおかきくけこ";
// ES:BX = 0000:0000
CPU_LOAD_SREG(CPU_ES_INDEX, 0);
CPU_BX=0;
memcpy(mem + CPU_ES_BASE + CPU_BX, hoge, sizeof(hoge));
// クリップボードを開く
CPU_AX=0x1701;
msdos_int_2fh_17h();
// クリップボードを空にする
CPU_AX=0x1702;
msdos_int_2fh_17h();
// ES:BXからSI:DIだけクリップボードにコピーする
// 10バイトなので「あいうえお」だけコピーする
// ※ お尻にnull-terminatorを追加してコピーされる
CPU_SI=0;
CPU_DI=10;
CPU_DX=1;
CPU_AX=0x1703;
msdos_int_2fh_17h();
// クリップボードを閉じる
CPU_AX=0x1708;
msdos_int_2fh_17h();
// クリップボードを開く
CPU_AX=0x1701;
msdos_int_2fh_17h();
// クリップボード内のデータのサイズを取得
CPU_DX=1;
CPU_AX=0x1704;
msdos_int_2fh_17h();
// クリップボード内のデータをES:BXに取得
CPU_DX=1;
CPU_AX=0x1705;
msdos_int_2fh_17h();
// クリップボードを閉じる
CPU_AX=0x1708;
msdos_int_2fh_17h();
クリップボード内のデータサイズの取得は、GlobalSize()を使うよりも、
strlen()でデータの文字列長を取得するほうが良さげっぽいですね。
次のリリースで変更しておきます。