Xの savaさん(LP-Project の Lukewarm氏)の記事で知りました。
> x86版NT系WindowsのNTVDM(DOS 5.0相当だがfunc 3306hの「真のバージョン」では5.50を返す。このことにより判別可能なのは逆に有情か…?)
そうだったんだ! 以前 NT系DOSのVerが 5.5 と表示され、?? と思ったことがありました。
> #7208: Re: commannd.com窓 投稿者:konno 2016/02/21(日)
> Meu.com ver.1.20 1991-94 (c) By SEIN
> MSDOS version = 5.50 / revision = 0 / exist in HMA
> う、commannd.com窓のDOSverは、5.50 ??
この時ははて? と思っただけですが
MEU は func 3306hを使って「真のバージョン」を返していたんですね。
ブラウンさんのリストを翻訳すると
DOS 5+ - 真のバージョン番号を取得
AX = 3306h
Return:
BL = major version
BH = minor version
DL = revision (bits 2-0, all others 0)
DH = version flags
bit 3:
DOS is in ROM
bit 4:
DOS is in HMA.
AL = FFh if true DOS version < 5.0
筆記:この関数は、AH=30h とは異なり、常に真のバージョン番号を返します。 その戻り値は SETVER で変更できます。
このようになっています。
掲示板検索したら、文太さんが過去に言及していました。
> #10540: get true ver (ax=$3306) 投稿者:文太 2023/01/29(日)
この記事で確認用のマクロも貼り付けていました。
-----------------------------------------------------------
=== Macrotmp by B ===; always returns "true" dos version
* M
50 ^^ "Macrotmp"
ax=$3306, &i($21) ;vtdos returns 6.20 here
&m("MS-DOS v%d.%d",bx&$FF,bx>>8&$FF) ;vtdos returns the ver of
; ax=$3000, &i($21) ;command.com used again.
; &m("MS-DOS v%d.%d",ax&$FF,ax>>8&$FF) ;So made, it seems.
*
-----------------------------------------------------------
でもこれは別の目的でたまたまだったようで、私は全然気が付きませんでした。(^^;