Jump to content

Opcode Emulator (OPEMU) Plug-in Project


Meowthra
69 posts in this topic

Recommended Posts

13 hours ago, jsl2000 said:

Is there any special patch for AMD FX-6300 or Ryzen 1700X CPU's hackintosh for its 32-bit application ?

 

no

Apple has removed some 32-bit libraries depend

 

libraries:dylib、Frameworks

 

macOS 10.15 will completely remove the 32-bit library

 

https://appleinsider.com/articles/18/06/05/mojave-is-apples-last-version-of-macos-to-support-32-bit-apps

 

You can Try run QuickTime 7 on Intel Machines,Also can't work.

Edited by Meowthra
Link to comment
Share on other sites

  • 1 month later...
On 5/28/2019 at 9:39 PM, Meowthra said:

AVX/AVX2 instruction set for Pentium / Celeron CPU

 

 

On 11/16/2017 at 8:51 PM, Meowthra said:
Intel Haswell Pentium / Celeron Series Or older processor expansion instruction set Emulation
 

 

On 11/17/2018 at 10:43 AM, Meowthra said:

OS X 10.12 or later Pentium and Celeron Unable Support
Because OS X 10.12 and later Haswell OpenGL Driver Requires AVX Instructions
So the Processor Must Support the AVX Instruction Set.
Unless there is a Source code that can be Recompiled.

Can you please make it clearer or tell me where to look? Is this only for Haswell or older devices? Can it enable QE/CI on a G4600 (HD 630) desktop?

Link to comment
Share on other sites

  • 2 weeks later...

The recent World of Warcraft seems to use CPU features of newer Intel CPUs that my Mac Pro 3,1 lacks. I tried to use the opcode emulator to bypass this issue but it keeps crashing. Any idea what CPU feature World of Warcraft could use that is not supported by my CPUs? In Windows it is indeed running fine.

Link to comment
Share on other sites

  • 2 months later...
On 8/12/2019 at 10:29 AM, habkeinehdd said:

The recent World of Warcraft seems to use CPU features of newer Intel CPUs that my Mac Pro 3,1 lacks. I tried to use the opcode emulator to bypass this issue but it keeps crashing. Any idea what CPU feature World of Warcraft could use that is not supported by my CPUs? In Windows it is indeed running fine.

try this: https://forums.macrumors.com/threads/mp3-1-others-sse-4-2-emulation-to-enable-amd-metal-driver.2206682/

 

Question: does VSSE4.2 and SSE4.2 mean the same thing?

Link to comment
Share on other sites

  • 6 months later...

Hi- Sorry to stir up a dormant thread, but are there any plans to update OpCode Emulator for OpenCore? More specifically and possibly, one that would be compatible with cMP? Looking for an AVX Emulator to see if it's a valid "workaround" for loading UAD Luna software. Thanks in advance!

Link to comment
Share on other sites

  • 4 months later...

Hi Meo,

 

I hacked rex into vex registers to make it work on a intel c2d without vmx.

maybe this is a very old cpu and not worth it.

 

Playing a bit more with code the emulator works but i'm getting always crashes on trustd daemon. Only me or same for others using the driver ?

Edited by jalavoui
Link to comment
Share on other sites

  • 4 weeks later...
  • 3 months later...
  • 5 months later...

Inside src.zip i've included the emulator binary (move both kexts to clover Kexts/other)

 

this is made for core2duo cpus with no SSE4.1

 

the config.plist are kernel patches  for  10.14.2  - add them to clover before try to boot

 

this might also work with old macs and amd  cpus.

 

the emulator requires a vanilla kernel + cpu patches (check amd native kernel thread for other kernel versions patches).

 

boot with -v flag for verbose log

 

select kernel cpu patch in clover patches options

 

i found a bug in ioPresentment framework that prevents graphics from loading.

inside ioPresentmentCreateAssociationMap() the ioPresentmentFindAGDCMatch() returns error 0xe00002c2 (invalid parameter?)

 

__int64 __fastcall ioPresentmentFindAGDCMatch(char *a1)
{

  v31 = 0;
  v33 = 0;
  v32 = 0;
  v30 = 0LL;
  v28 = 44LL;
  v27 = 0LL;
  v26 = 0LL;
  v45 = 0;
  v44 = 0LL;
  v43 = 0LL;
  v42 = 0LL;
  v1 = 5;
  if ( a1 )
  {
    v1 = IOMasterPort(0LL, &v31);
    if ( !v1 )
    {
      v3 = IOServiceMatching("AppleGraphicsDeviceControl");
      v1 = 5;
      if ( v3 )
      {
        v4 = (char *)v3;
        v1 = IOServiceGetMatchingServices(v31, v3, &v33);
        if ( !v1 )
        {
          v1 = 29;
          if ( (unsigned int)IOIteratorIsValid(v33) == 1 )
          {
            v29 = a1;
            v5 = IOIteratorNext(v33);
            if ( v5 )
            {
              v6 = 0;
              while ( 1 )
              {
                v1 = IOServiceOpen(v5, mach_task_self_, 2LL, &v32);
                if ( !v1 )
                {
                  v4 = (_BYTE *)(&dword_0 + 1);
                  v25 = &v28;
                  v10 = IOConnectCallMethod(v32, 1LL, 0LL, 0LL, 0LL, 0LL, 0LL, 0LL, &v42);
                  if ( v10 || !v28 )
                  {
                    v4 = (char *)&dword_10;
                    if ( (unsigned __int8)os_log_type_enabled(&_os_log_default, 16LL) )
                    {
                      HIWORD(v21) = 256;
                      v22 = 0;
                      v23 = 4;
                      v24 = v10;
                      v4 = (char *)&_os_log_default;
                      _os_log_error_impl(&dword_0, &_os_log_default, 16LL, aErrorUnableToG_1, (char *)&v21 + 2, 8LL);
                    }
                  }
                  else if ( (unsigned int)(v45 - 1) <= 1 )
                  {
                    v4 = (char *)&v30;
                    if ( !(unsigned int)IORegistryEntryGetRegistryEntryID(v5, &v30) )
                    {
                      DWORD2(v26) = v5;
                      *(_QWORD *)&v26 = v30;
                      v27 = 0LL;
                      v11 = (__int64 *)ioPresentmentGetNodeMap(&v26);
                      if ( v11 )
                      {
                        IOObjectRetain(DWORD2(v26));
                        v12 = 48LL * v6;
                        v4 = v29;
                        *(_QWORD *)&v29[v12 + 48] = v11[5];
                        *(_QWORD *)&v4[v12 + 40] = v11[4];
                        *(_QWORD *)&v4[v12 + 32] = v11[3];
                        *(_QWORD *)&v4[v12 + 24] = v11[2];
                        v13 = *v11;
                        *(_QWORD *)&v4[v12 + 16] = v11[1];
                        *(_QWORD *)&v4[v12 + 8] = v13;
                        free(v11);
                        ++v6;
                      }
                    }
                  }
                  v1 = IOServiceClose(v32);
                  if ( v1 )
                  {
                    v4 = (_BYTE *)(&dword_0 + 1);
                    if ( (unsigned __int8)os_log_type_enabled(&_os_log_default, 1LL) )
                    {
                      HIWORD(v21) = 256;
                      v22 = 0;
                      v23 = 4;
                      v24 = v1;
                      v4 = (char *)&_os_log_default;
                      _os_log_impl(&dword_0, &_os_log_default, 1LL, aWarningUnableT, (char *)&v21 + 2, 8LL);
                    }
                  }
                  else
                  {
                    v1 = 0;
                  }
                  goto LABEL_31;
                }
                v41 = 0LL;
                v40 = 0LL;
                v39 = 0LL;
                v38 = 0LL;
                v37 = 0LL;
                v36 = 0LL;
                v35 = 0LL;
                *(_OWORD *)v34 = 0LL;
                IORegistryEntryGetName(v5, v34);
                v4 = v34;
                if ( strncmp("AppleGPUWrangler", v34, 0x80uLL) )
                {
                  v1 = IORegistryEntryGetRegistryEntryID(v5, &v30);
                  v4 = (char *)&dword_10;
                  v7 = os_log_type_enabled(&_os_log_default, 16LL);
                  if ( v1 )
                  {
                    if ( !v7 )
                      goto LABEL_31;
                    v14 = 2;
                    v15 = 2;
                    v16 = 32;
                    v17 = 8;
                    v18 = v34;
                    v19 = 0;
                    v20 = 4;
                    v21 = v1;
                    v8 = 18LL;
                    v4 = (char *)&_os_log_default;
                    v9 = aErrorUnableToO_0;
                  }
                  else
                  {
                    v1 = 0;
                    if ( !v7 )
                      goto LABEL_31;
                    v14 = 2;
                    v15 = 3;
                    v16 = 32;
                    v17 = 8;
                    v18 = v34;
                    *(_WORD *)&v19 = 2048;
                    *(_QWORD *)&v21 = v30;
                    HIWORD(v24) = 1024;
                    LODWORD(v25) = 0;
                    v8 = 28LL;
                    v4 = (char *)&_os_log_default;
                    v9 = aErrorUnableToO;
                  }
                  _os_log_error_impl(&dword_0, &_os_log_default, 16LL, v9, &v14, v8);
                }
LABEL_31:
                IOObjectRelease(v5, v4);
                v5 = IOIteratorNext(v33);
                if ( v6 > 0xFu || !v5 )
                  goto LABEL_35;
              }
            }
            v6 = 0;
            v1 = 0;
LABEL_35:
            if ( v33 )
            {
              IOObjectRelease(v33, v4);
              v33 = 0;
            }
            *(_QWORD *)v29 = v6;
          }
        }
      }
    }
  }
  result = __stack_chk_guard;
  if ( __stack_chk_guard == v46 )
    result = v1;
  return result;
}

 

config.plist.zip

src.zip

Edited by jalavoui
updated src.zip
  • Like 4
Link to comment
Share on other sites

  • 4 weeks later...
On 6/18/2021 at 7:28 AM, hardcorehenry said:

Could someone rework OpcodeEmulator, so it’d work with MacKernelSDK and Xcode 12 compatibility. I have already done it, but I’m not coder/developer and it’d be better if someone more skilled did it.

Attaching my reworked version.

Clone latest Lilu debug and MacKernelSDK into OpcodeEmulator and build kext.

 

OpcodeEmulator.zip 139.56 kB · 2 downloads

It compiles fine. There are some warnings.

OpcodeEmulator.zip

Edited by startergo
  • Thanks 1
Link to comment
Share on other sites

  • 2 months later...
  • 1 year later...
  • 2 weeks later...

EpcodeEmulator causes KP with message: "Lilu   patcher: @ trying to use long jump on top of slotted jump, please use routeMultipleLong"

Anyone knows how to use routeMultipleLong instead of routeFunction in OpcodeEmulator/Kern_opemu.cpp (hook kernel_trap and hook user_trap)?

Edited by hardcorehenry
Link to comment
Share on other sites

  • 3 weeks later...

I edited OpcodeEmulator(project.pbxpro, kern_opemu.cpp, kern_opemu.hpp) and it doesn’t KP with latest Lilu.kext anymore. I’d appreciate if someone took look at it and suggest or better correct it if needed.

Spoiler

911326771_ScreenShot2022-10-24at10_35_38AM.png.933290a5b3ec68411f853172eed9e29f.png

 

It shows debug output like in screenshot(needed -liludbgall -opemudbg liludelay=1000).

Spoiler

225208936_ScreenShot2022-10-24at9_59_44AM.thumb.png.9aaeacae75ce6f8de0e98aeacc5fb5af.png

 

After adding -opemubeta it also loads in Catalina(don’t have higher MacOS versions right now).

 

OpcodeEmulator.zip

Link to comment
Share on other sites

2 hours ago, hardcorehenry said:

I edited OpcodeEmulator(project.pbxpro, kern_opemu.cpp, kern_opemu.hpp) and it doesn’t KP with latest Lilu.kext anymore. I’d appreciate if someone took look at it and suggest or better correct it if needed.

  Reveal hidden contents

911326771_ScreenShot2022-10-24at10_35_38AM.png.933290a5b3ec68411f853172eed9e29f.png

 

It shows debug output like in screenshot(needed -liludbgall -opemudbg liludelay=1000).

  Hide contents

225208936_ScreenShot2022-10-24at9_59_44AM.thumb.png.9aaeacae75ce6f8de0e98aeacc5fb5af.png

 

After adding -opemubeta it also loads in Catalina(don’t have higher MacOS versions right now).

 

OpcodeEmulator.zip 146.94 kB · 0 downloads

would you mind to share the opcodeEmulator.kext will try it on my pentiumg5400 with Ventura

Link to comment
Share on other sites

  • 1 month later...
  • 3 weeks later...
×
×
  • Create New...