[過去ログ] 今夜も Wine で乾杯! - 23本目 (998レス)
1-

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
671
(2): login:Penguin [sage] 2022/04/17(日) 07:19:25.26 ID:ONuqPY9B(1)調 AAS
Windows3.1時代の16bitアプリ動かない…
672
(2): login:Penguin [sage] 2022/04/17(日) 07:35:18.71 ID:cYFH+4CE(1)調 AAS
16ビットプログラムは非対応でなかったかな
673
(3): login:Penguin [sage] 2022/04/17(日) 08:51:41.63 ID:iZt/TDlj(1)調 AAS
>>671-672
WineはWindowsと違ってx86_64上でも16bitアプリに対応しているよ
ただしDOSBoxをインストールする必要あり

このSameGameで64bit Windows 10で動かないけどWine 7.0で動くことを確認済み
https://www.vector.co.jp/soft/dl/win31/game/se005521.html

16bitアプリはNT系Windowsではntvdmを利用していて、nvvdmはx86_64のlongモード非対応の
仮想8086モードを使用するので32bit Windowsでしか動作しないけど、Linuxの32bit Wineのwinevdmは
DOSBoxの8086、80286エミュレーション機能を自動的に利用するので16bitアプリも動作する

ちなみにWindowsに32bitアプリとしてWineとwinevdmを移植したものがあって
これを使うと64bit Windowsでも16bitアプリが動かせるはず

https://github.com/otya128/winevdm
674
(1): login:Penguin [sage] 2022/04/18(月) 15:29:10.38 ID:FL8qeWrS(1/2)調 AAS
>>673
そのwinevdmをビルドしてみて?
675: login:Penguin [sage] 2022/04/18(月) 15:48:26.61 ID:FL8qeWrS(2/2)調 AAS
>>674
汎用freewareレベルなら16bitアプリは確かに動くなしかしだから証明された訳でもない。
676
(1): login:Penguin [sage] 2022/04/19(火) 00:09:25.36 ID:6BsM3YVq(1/2)調 AAS
>>673
16ビットと言っても
?DOS用で、リアルモードまたは仮想8086モード向けのコード
?Win3.x用で、16ビットプロテクトモードまたは16ビット互換モード向けのコード
の2種類あって、

i)32bitWindowsの場合、?は仮想8086モードに移行して直接動作(ntvdm)、?は16ビットプロテクトモードに移行して直接動作(wowexec)

ii)32bitlinux上のwineの場合、?は仮想8086モードに移行して直接動作(vm86システムコール利用)、?は16ビットプロテクトモードに移行して直接動作(modify_ldtシステムコール利用)

iii)64bitlinux上のwineの場合、?はDOSBoxのエミュレーション(longモードでは仮想8086モード非対応のため)、?は16ビット互換モードに移行して直接動作(32bitwineからmodify_ldtシステムコール利用)

iv)64bitWindowsの場合、?は非対応(longモードでは仮想8086モード非対応のため)、?も非対応(MSのやる気がないため)

v)64bitWindows上のwinevdmでは、??いずれもエミュレーションまたはCPUの仮想化機能を使う
677: login:Penguin [sage] 2022/04/19(火) 00:19:41.66 ID:6BsM3YVq(2/2)調 AAS
>>671-673
結局、Windows3.1向けの16ビットアプリケーションは64bit環境でも動作するが、
1) 32bitのWineをインストールしなければならない(32bitのWindowsアプリが動けばOK)
2) DOSBoxは不要(エミュレーションなしで動く)
3) modify_ldtシステムコールが禁止されていたりすると動かない
678
(2): login:Penguin [sage] 2022/04/19(火) 10:24:43.26 ID:WRR9mRIv(1/2)調 AAS
>>676
> ii)32bitlinux上のwineの場合、?は仮想8086モードに移行して直接動作(vm86システムコール利用)
Wine4.0でvm86システムコールを利用するコードが削除され、以降はdosboxのCPUエミュレーションで
リアルモードのコードを実行するようになっているはず

dosboxを利用するコードが入ったのはWine1.4

Wineのコードをgrep vm86して確認してみて

> ?は16ビットプロテクトモードに移行して直接動作(modify_ldtシステムコール利用)

自分もこう動いているように思っていたんだけど実際のwineでmodify_ldtを使っている箇所は
https://source.winehq.org/git/wine.git/blob/HEAD:/dlls/ntdll/signal_i386.c
https://source.winehq.org/git/wine.git/blob/HEAD:/libs/wine/ldt.c
の2つで、下はobsoleteになっていて使っていないっぽい

コード読み切れていないから全然理解できていないだけど、本当にWineは16bitプロテクトモードの
コードの実行にmodify_ldtを利用している?

winevdmのコードを見てもdosboxを呼びだしているのはわかるんだけど、どこまでdosboxのCPU
エミュレータでコードを動かしているかわからん


続1
679
(1): login:Penguin [sage] 2022/04/19(火) 10:33:08.62 ID:WRR9mRIv(2/2)調 AAS
あとWine7.0のANNOUNCEで32bitWineなしでも実行できる新しいWOW64を実装したっていっているけど
実際はまだ32bit<->64
64(2): login:Penguin [sage] 2020/05/24(日) 17:57:39.01 ID:m3nanvwf(1)調 AAS
スレチかもしれんが
Android版のWineよりExagearっていうアプリの方が断然完成度が高い
armのSoCだとAndroid版Wineはarmのソフトしか動かないけど
Exagearはx86のソフトも動く
難点は開発·公開が終了していてグレーな手段でしか手に入らないこと
bitのコードが実装されていない気がするんだけど

wow64cpuでmodify_ldtを使うと思うんだけどそんなコード入っていないように見える
https://source.winehq.org/git/wine.git/tree/HEAD:/dlls/wow64cpu

この辺にもない
https://source.winehq.org/git/wine.git/tree/HEAD:/dlls/wow64
https://source.winehq.org/git/wine.git/tree/HEAD:/dlls/wow64win

Wine7.6でも変わらない
680: login:Penguin [sage] 2022/04/20(水) 00:54:34.60 ID:s2MtO61K(1/2)調 AAS
>>678
今は32bit環境がないからdosプログラムがどうなっているかはすぐには確認できないけど、Win3.x向けプログラムはWine7.6でもmodify_ldtを使っている(少なくとも俺環では)
strace -f wine <win16app.exe> |& grep modify_ldt
で一杯出る
あと、64bitのlinux環境では32bit用セグメントが常にGDTに用意されていたと思うから、32bit互換モードにはfar jmp一発で移れる(アセンブリで試しに書いたら動いた)
681
(1): login:Penguin [sage] 2022/04/20(水) 03:25:51.41 ID:s2MtO61K(2/2)調 AAS
>>678
https://source.winehq.org/git/wine.git/blob/HEAD:/include/wine/asm.h
を見る限り、MacとAndroidの場合に16bit用のLDT関連がobsoleteになるっぽい
確かにMacは今や32bit互換モードも含めてobsoleteだし、Androidはセキュリティのためseccompで多くの不要なシステムコールを禁止している

あと、https://source.winehq.org/git/wine.git/blob/HEAD:/dlls/wow64cpu/cpu.c
の144行とかにfar jmpがあるから、ここでモード移行かな
これはWindowsのHeaven's Gateと同じ方式
不要になるのは32bitのlinuxのライブラリ(/usr/libとか/usr/lib32にある.so)であって、Wineの32bitライブラリ(syswow64にあるやつ)は必要
1-
あと 317 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.577s*