OpenCore Razer Blade Advanced 15 Hackintosh — The Affordable MacBook Guide
Disclaimer: This guide is intended for RBA 15 Mid-2019 (RZ09–03017EM2).
Coming from a top-of-the-line 2016 MacBook Pro, I have grown sick of its keyboard and thermal issues. The new 16-inch MacBook Pro is a great improvement but the price tag is way too high for what it is and I need my new laptop to be able to handle AAA gaming and video editing apart from blockchain and cross-platform mobile development. Eventually I settled on a Mid-2019 Razer Blade Advanced 15 with an RTX 2070 Max-Q.
I need macOS to do most of my development and Windows for gaming, yet the Advanced model only has one M.2 NVMe slot. Here’s how I achieved a perfect laptop Hackintosh running Catalina 10.15.5 + OpenCore and dual-booting Windows 10 with only one 1TB NVMe drive.
First of all, of course, the specs:
- CPU: Intel Core i7–9750H 6 core 12 threads processor, 2.6GHz base, 4.5GHz turbo
- Memory: 16GB dual channel DDR4 2667MHz
- iGPU: Intel UHD 630
- dGPU: Nvidia RTX 2070 Max-Q
- Display: 15.6" FHD 240Hz
- Storage: LITE-ON CA3–8D512 S, 512GB
- Webcam: Windows Hello UVC Camera (w/ IR)
- WiFi: Intel Wireless AC 9560NGW (WiFi 6)
- Sound: Realtek ALC298
- Keyboard: Razer Chroma per-key RGB
- Trackpad: Windows Precision Trackpad
What doesn’t work:
- Intel WiFi
- Windows Hello (obviously)
- RTX 2070 Max-Q
- Display seems to be stuck at 60Hz, cannot force 240Hz with SwitchResX
- Thunderbolt 3 not tested
What works:
- Everything else
Preparations for macOS
Before we start installing macOS, we need to make some hardware and firmware changes to prime our Blade for Darwin. The things we will need to do are:
- Unlock BIOS menu settings
- Swap the WiFi card
- Swap the M.2 NVMe drive
BIOS
BIOS settings will need to be changed in order to save you from massive headaches later. However, not all of the BIOS settings that we need to change are visible to the user by default. We will need to dump the BIOS image, change some built-in visibility settings, and flash the modified image back.
Firstly, follow the relevant steps under “Preparation” from this article: https://github.com/stonevil/Razer_Blade_Advanced_early_2019_Hackintosh
However, before flashing the modified image back, follow this guide to add “Overclocking and Performance” to the main menu. Pay attention specifically to “Moving a hidden menu to your main screen”: http://forum.notebookreview.com/threads/razer-bios-mods-potential-to-unlock-all-hidden-options.830993/
Also, a weird issue I’ve discovered: installing an aftermarket NVMe drive actually hides the unlocked BIOS entires again for reasons beyond my understanding. Simply removing the drive and booting with no drive restores the hidden menus.
Mobile developers that run Android Emulator: After you have followed all the steps above, make sure to leave VT-d and any other virtualization technology ON. Contrary to what the linked GitHub guide says, it will NOT cause any trouble with macOS booting but not having them enabled will cause Android Emulator to crash on startup. Why? Because Android Emulator uses Intel HAXM virtualization technology.
WiFi Swap
The Intel WiFi 6 card that comes with the Blade will not work with macOS because nobody has ported a stable Intel WiFi driver from Linux yet. Most people on the Internet advise newcomers to swap to either a DW1560(BCM94352Z) or DW1830(BCM943602BAED) but those cards either have different sub-versions (but only one sub-version will work) or 3 antennas instead of 2 and both require kexts to work properly. Some of them even cause BSODs in Windows.
Instead of all this mess, I advise you to swap to a BCM94360NG. This card is made by Fenvi, a Chinese company that specifically makes and markets their products to be Hackintosh-compatible. This card does NOT require any drivers whatsoever and starts working even during the installation. It also has official Windows drivers that work wonderfully. Link: https://www.ebay.com/itm/M-2-NGFF-Network-Card-for-Broadcom-BCM94360NG-better-than-BCM94352Z-DW1560-BT4-0/264663343680
M.2 NVMe (Optional)
Apparently earlier Blades came with a Samsung PM981 NVMe drive whose firmware will not work with macOS. Mine came with a LITE-ON NVMe drive and I’m not aware of any compatibility issues between the LITE-ON drives and macOS so feel free to give it a try.
But since I’m dual-booting, I needed more than 512GB. I settled on a Sabrent 1TB NVMe drive and it has been flawless. Some guides ask you to buy a heatsink for the NVMe drive but be aware of certain physical incompatibilities. There is a raised support padding under the NVMe drive for my Blade and it will not tolerate the added thickness of an NVMe heatsink.
Installing macOS + OpenCore
Follow the excellent guide here: https://1revenger1.gitbook.io/laptop-guide/prepare-install-macos/preparing-the-usb-media
Note: It is normal for the trackpad to not be functional. We will have to fix it later.
Caveat: UHD 630
We are lucky because the specific variant of UHD 630 that our Blade uses does not require any platform-id spoofing. You can leave the entries under DeviceProperties completely blank. In other words, no iGPU patching is needed at all. (You must have already set DVMT to 64M in BIOS!)
Caveat: System Product Name
MacBookPro16,1 has been working for me but feel free to try other product names.
Caveat: ACPI binary patching
- Feel free to point out any errors, I’m sure some of them are redundant or unnecessary.
- _OSI to XOSI: 5F4F5349 -> 584F5349
- EC0 -> EC: 4543305F -> 45435F5F
- _BIF -> XBIF (Battery SSDT): 5F424946 -> 58424946
- _BST -> XBST (Battery SSDT): 5F425354 -> 58425354
- SBFG to XBFG (SSDT-I2C): 53424647 -> 58424647, TableSignature: 44534454
- _CRS to XCRS (SSDT-I2C): 144C045F 43525300 -> 144C0458 43525300, TableSignature: 44534454
- HPET _CRS to XCRS: 5F435253 08A019 -> 58435253 08A019
- TIMR IRQ 0 Patch: 22010079 00 -> 22000079 00
- RTC IRQ 8 Patch: 22000179 00 -> 22000079 00
- Rename SSCN to XSCN (I2C): 5353434E -> 5853434E
- Rename FMCN to XMCN (I2C): 464D434E -> 584D434E
- _PTS -> ZPTS (dGPU): 5F505453 01 -> 5A505453 01
- _WAK -> ZWAK (dGPU): 5F57414B 01 -> 5A57414B 01
- RTEC -> XTEC (dGPU): 47055254 45430070 -> 47055854 45430070
Post macOS Installation Kexts + ACPI Hot Patches
Now that you’ve finished installing macOS, a lot of things may seem quite wrong. You may notice the Blade kernel panics whenever it tries to shutdown. The trackpad does not work. Brightness does not work. Battery life is garbage because while WhateverGreen disables the dGPU, it’s still powered on. There is no sound. Let’s fix all that.
Kexts & Bootflags
- Sound: AppleALC. Use layout-id 3. For maximum versatility, don’t define it in the OpenCore configs under DeviceProperties. Use boot flag alcid=3.
- CPU power management: CPUFriend. Follow the instructions on its repo.
- USB port injection: Use Hackintool. They have a great built-in USB port mapping tool and it generates a USBPorts.kext file.
- Trackpad: VoodooI2C & VoodooI2CHID. They won’t work right now because we need to do some SSDT ACPI patching and GPI0 pinning. Also, make sure to download a special version of it from here: https://github.com/VoodooI2C/VoodooI2C/issues/319 The general release most likely will not work 80% of the time. You can read about the reasons in the link above.
- Boot flags: -v keepsyms=1 debug=0x100 alcid=3 igfxcflbklt=1 -igfxmlr -wegnoegpu
ACPI Hot Patching with SSDTs
OpenCore thrives to provide a more Mac-like boot environment. One of the design choices it has made is to not support DSDT injection. This will immediately render 90% of the other guides useless because they rely on patching DSDT. We must translate those DSDT patches into SSDT hot patches.
Get Jack Boyuan Xu’s stories in your inbox
Join Medium for free to get updates from this writer.
OC-little is perhaps the best GitHub repo for OpenCore users because the repo has all the SSDT patches you can possibly think of. However, the entire repo is in Chinese. This is not a problem for me since I’m a native speaker but for you, I can see the problem. Luckily, someone translated the whole thing into English. But take note: the translated repo was last updated in December 2019 while the original repo still receives regular updates. The translated repo is actually severely outdated and the folder structures are quite different. I will be going through the original Chinese repo. Don’t worry, I will explain what they are and tell you specifically what to use.
Let’s go through the folders in the repo, one by one.
Note: You will need MaciASL to compile the following DSL files into AML files.
- 01-AOAC: No patches needed for Blade. AOAC stands for Always On/Always Connected. It can cause S3 sleep and battery life issues.
- 02-Spoofing devices: 02–1 covers spoofing EC for all boards, 02–2 spoofing RTC0 in select 300-series boards, 02–3 PS2N keyboard fix, and 02–4 spoofing ALSD ambient light sensor. If you didn’t rename EC, chances are you couldn’t even boot the installer. We need the ALSD (NOT ALS0!) spoof to get brightness controls to work.
- 03-Binary replacement: No patches needed for Blade. 03–1 covers GPI0 but we will deal with it later.
- 04-OS fixes: It attempts to correct certain hardware behavior by spoofing macOS as Windows 10. Apply the renames and SSDT-OC-XOSI.
- 05-Device injection: 05–1 x86 Intel power management injection, 05–2 PNLF WhateverGreen backlight injection, and 05–3 SBUS injection. We will need to do all three. For 05–1, all the different variants are to accommodate different naming schemes from different OEMs in DSDT and our blade needs SSDT-PLUG-_SB.PR00. For 05–2, there are two types of backlight fixes: ACPIBacklight (that must be used with ACPIBacklight.kext) and generation-specific backlight fix. We will be using the latter, more specifically SSDT-PNLF-CFL. For 05–3, we will be using SSDT-SBUS. There isn’t a lot of documentation regarding this fix but it doesn’t hurt.
- 06-Spoofing missing devices: These fixes attempt to add some devices present in a real Mac but missing otherwise. These are all optional but good-to-haves and depending on your hardware, you may not need all of them. I personally have DMAC, MCHC, MEM2, and PMCR.
- 07-PS2 keyboard mapping: No patches needed for Blade. These patches are optional: their purpose is to map one physical key to another key when pressed. Not even sure it would work with the Blade as the Blade doesn’t have a PS2 keyboard (I could be wrong).
- 08-Battery hot patching: This is one of the more difficult parts of hackintoshing the Blade. The only DSDT battery patch is from a 2014 blade and there aren’t any SSDT battery hot patches specifically for a Mid-2019 RBA. Fear not, I made one. You can find it in my GitHub repo (which I will link at the end).
- 09-Disabling EHCx: No patches needed for Blade.
- 10-PTSWAK patches: These patches attempt to fix some sleep/wake issues. The Blade needs SSDT-PTSWAK.
- 11-PNP0C0E sleep/wake fix: No patches needed for Blade. They attempt to correct issues with pressing the sleep button and lid wake.
- 12–0D/6D patching: No patches needed for Blade. They attempt to correct instant wake issues when trying to sleep. I might need that patch in real life, though.
- 13-Spoofing ethernet: No patches needed for Blade as we have a natively supported AirPort WiFi card.
- 14-Brightness control key patching: No patches needed for Blade.
- 15-CMOS reset fix: No patches needed for Blade. They attempt to correct an issue where the CMOS gets reset during shutdown or reboot.
- 16-ACPI USB mapping: No patches needed for Blade. We used Hackintool for that.
- 17-Disabling PCI devices: No patches needed for Blade. They attempt to disable unsupported PCI devices such as an SD card reader.
- 18-ACPIDebug: Not needed. Adds logging capabilities for ACPI, pretty cool for debugging.
- 19-Device specific patches: No patches needed for Blade.
- 20-I2C patches: We will need SSDT-I2CxConf and another patch specific to our Mid-2019 RBA. It will be in my repo.
- 21-IRQ sound fix: No patches needed for Blade.
- 22-Powering down the dGPU: Needed for Blade in general but those patches don’t work specifically for our Blade. A working version is attached in my repo.
Phew, I guess that’s it for OpenCore patches and patching macOS in general! Your Blade should be fully functional running macOS at this point. Next up, we need to install Windows.
Preparations for Windows
Before we can install Windows, we need to partition our drive and make room for Windows.
- Open Disk Utility.
- Click on “View” on the upper left corner and choose “Show All Devices”.
- Select the upper-most device, which should be the name of your hard drive (in my case “Sabrent Media”) and select “Partition”.
- In the next window, you will be able to adjust the size of your macOS container partition. I sized mine down to 512GB.
- Once you do that, the graphic on the left hand side should update and visually indicate macOS will only take up half of the drive.
- Click on “Apply” to apply the changes.
We then need to make a bootable Windows 10 installer. You can ask Google on how to do that — but remember you must use a method that does not split up install.wim into 2 smaller files!
Installing Windows
You’ve probably installed Windows before but please, read through this carefully! It will save you from an endless pit of despair and the incompetence of Windows 10 installer.
Booting into the installer
Booting into the installer is fairly trivial, just make sure you do it through BIOS instead of OpenCore. Once you boot into the installer, proceed as you normally would until the screen where it asks you where you want to install Windows. You must be very careful not to overwrite your macOS installation! Select the unallocated space and click “New”. It will ask you if it’s okay to create additional partitions, click “OK”. And then STOP THERE!
Applying Windows image with DISM
Going ahead with a clean install will most likely end up with a very ambiguous error message and a ton of weird partitions that you will have to delete one by one after a reboot. Trust me, I spent all night on Google trying to get rid of the installation errors to no avail. Therefore, we will use DISM to directly “extract” Windows to our drive.
Picking up from where we left off, you will now need to close the installation window by clicking on the red “X” on the upper-right corner. You should now be redirected to the welcome screen.
Press Shift+F10 to open up a command prompt. Then,
- Type diskpart
- Type list disk
- Type select disk 0
- Type list vol and take note of the volume letter of the newly created partition intended for Windows as well as the volume letter of the USB drive that houses the installer. If the Windows volume is not mounted (does not have an assigned letter), read this.
- Type exit
- Assuming your removable volume is mounted to D:, type the following: dism /Get-WimInfo /WimFile:D:\Sources\install.wim (or install.esd if you used the Media Creation Tool)
- Take note of the index number of the version of Windows you intend to install.
- Assuming the index number is 1 and the volume intended for Windows in mounted to G:, type the following: dism /Apply-Image /ImageFile:D:\Sources\install.wim /index:1 /ApplyDir:G:\
DISM will now extract Windows to the targeted drive. A progress bar should be visible to you to indicate its progress. When the process finishes, you have all the Windows files but no boot files to boot it. Let’s fix that.
- Type G:\Windows\system32\bcdboot G:\Windows /f UEFI
If the above works, then you’re all set to boot up Windows! If not, you must use diskpart to mount the EFI partition (assuming mounted at S:) and type:
- G:\Windows\system32\bcdboot G:\Windows /s S: /f UEFI
Nice! Now you are all done! Reboot your Blade and you should see Windows booting up. If not, choose Windows Boot Manager in BIOS to boot to Windows. However, there’s a problem.
Getting OpenCore back
Chances are, OpenCore will complete disappear from your BIOS entires. If it’s still present alongside with Window Boot Manager, know that it’s a caching issue and it will go away eventually so you must perform this fix.
Getting rid of Windows Boot Manager
You will need to mount the EFI partition in Windows and navigate to the EFI drive with Explorer++ (run it as an administrator). Then, navigate to EFI — Microsoft — Boot and rename bootmgfw.efi to something else. Reboot, and OpenCore is back but Windows Boot Manager is gone. We will have to get it back again!
Getting Windows Boot Manager back
Someone has already done a great writeup with pictures: https://medium.com/macoclock/guide-multiboot-dualboot-opencore-with-windows-macos-linux-kextcache-131e96784c3f
Look under “POST — INSTALLATION”. Keep in mind where the article mentions bootmgfw.efi, you will have to change it to whatever you renamed it to.
NDK OpenCore
The problem with vanilla OpenCore is that its ACPI hot patches and settings apply to every single OS that it boots, including Windows. However, ACPI hot patches intended for macOS may end up breaking Windows. We want to be able to exclude Windows from those patches. One way would be to add a conditional statement in every single SSDT file but that would be tedious. Instead, you can opt to use NDK’s fork of OpenCore which provides a GUI boot picker and an option to only apply various injections to macOS. Here’s my custom theme:
Wrapping Up
Well that was a wild ride! Now you’ve got a dual-booting Blade that can act as a great productivity tool during day with macOS and gaming machine at night with Windows.
Here’s the promised GitHub link that has the custom dGPU and battery ACPI hot patches: https://github.com/boyuanx/Hackintosh_OC_RBA15_Mid2019
I’d like to thank all the developers involved in the Hackintosh community and thank you all for reading!
Update: The author of this repo has done a way better job of hotpatching things then I have. Check this one out instead! https://github.com/tylernguyen/razer15-hackintosh





![[JAVA-2h] Getters, Setters, Constructors](https://miro.medium.com/v2/resize:fit:1358/format:webp/1*ISmr_vKq19rpcPPKnpwG9A.png)



