Выпуск эмулятора FEX 2412, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π΅Π³ΠΎ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ x86-ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° систСмах ARM64

ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½ выпуск ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° FEX 2412, Ρ€Π°Π·Π²ΠΈΠ²Π°ΡŽΡ‰Π΅Π³ΠΎ эмулятор для выполнСния ΠΈΠ³Ρ€ ΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, собранных для Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€ x86 ΠΈ x86-64, Π² Linux-ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠΈ Π½Π° систСмах с процСссорами ARM64 (AArch64). Π‘Ρ€Π΅Π΄ΠΈ ΠΏΡ€ΠΎΡ‡Π΅Π³ΠΎ, эмулятор FEX примСняСтся ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠΌ Asahi для ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ запуска Π² Linux-окруТСниях, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΡ… Π½Π° систСмах с ARM-Ρ‡ΠΈΠΏΠ°ΠΌΠΈ Apple Silicon, ΠΈΠ³Ρ€ ΠΈΠ· ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π° Steam, собранных для Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹ x86_64. Код ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° написан Π½Π° языкС Π‘++ с ассСмблСрными вставками ΠΈ распространяСтся ΠΏΠΎΠ΄ Π»ΠΈΡ†Π΅Π½Π·ΠΈΠ΅ΠΉ MIT.

Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ для запуска x86-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π² ARM64-ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠΈ, ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ΡΡ Π² Ρ„ΠΎΡ€ΠΌΠ΅ overlay-прослойки с ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΊΠΎΡ€Π½Π΅Π²ΠΎΠΉ Π€Π‘ (rootfs), поставляСмой Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ squashfs. Подобная прослойка Π΄Π°Ρ‘Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΎΠ±ΠΎΠΉΡ‚ΠΈΡΡŒ Π±Π΅Π· создания ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ chroot-окруТСния. Π—Π°Π³Ρ€ΡƒΠ·ΠΊΠ° ΡƒΠΆΠ΅ сформированных ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠ² rootfs производится ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²Π»Π΅Π½Π½ΠΎΠΉ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚ΠΎΠΉ FEXRootFSFetcher.

Для ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ доступа ΠΊ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹ΠΌ возмоТностям хост-окруТСния, Ρ‚Π°ΠΊΠΈΠΌ ΠΊΠ°ΠΊ срСдства для Ρ€Π°Π±ΠΎΡ‚Ρ‹ со Π·Π²ΡƒΠΊΠΎΠΌ ΠΈ 3D-Π³Ρ€Π°Ρ„ΠΈΠΊΠΎΠΉ, Π² rootfs ΠΏΠΎΠΌΠ΅Ρ‰Π°ΡŽΡ‚ΡΡ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ thunk-Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, Ρ‚Ρ€Π°Π½ΡΠ»ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠ΅ обращСния ΠΊ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°ΠΌ ΠΈ ΠΊΠΎΠ΄Ρƒ Π½Π° сторонС хост-систСмы (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠ΅Ρ€Π΅Π½Π°ΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒΡΡ обращСния ΠΊ OpenGL ΠΈ Vulkan). ΠŸΠΎΠ΄ΠΎΠ±Π½Ρ‹Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΈ Π½Π° сторонС хоста для обращСния ΠΊ ΠΊΠΎΠ΄Ρƒ Π² гостСвом ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠΈ. Π‘Ρ€Π΅Π΄ΠΈ доступных для проброса Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ: libEGL, libGL, libSDL2, libX11, libVDSO, libasound, libdrm, libfex_malloc, libvulkan, libwayland-client ΠΈ libxshmfence.

Из ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² Π½ΠΎΠ²ΠΎΠΉ вСрсии отмСчаСтся Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ с запуском ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° Steam, ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ эмуляции x86-инструкции PAUSE Π½Π° использованиС ARM-инструкции WFE вмСсто YIELD, обСспСчСниС эмуляции систСмных Π²Ρ‹Π·ΠΎΠ²ΠΎΠ², Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Ρ… для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π³Π΅ΠΉΠΌΠΏΠ°Π΄Π°ΠΌΠΈ, ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΠ΅ эмуляции CPUID ΠΈ RDTSCP, рСструктуризация FEXCore (бэкСнд эмуляции CPU), устранСниС Π½Π΅Π΄ΠΎΡ€Π°Π±ΠΎΡ‚ΠΎΠΊ Π² эмуляции Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠΉ AVX.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: opennet.ru