[{"data":1,"prerenderedAt":668},["ShallowReactive",2],{"\u002Fblog\u002Fdx9-games-on-mac":3},{"current":4,"previous":658,"next":663},{"id":5,"title":6,"activeDiscussion":7,"body":8,"category":643,"cover":644,"date":645,"description":646,"disabled":7,"extension":647,"highlighted":7,"layout":648,"meta":649,"navigation":170,"path":650,"readTimeInMinutes":180,"seo":651,"stem":652,"tags":653,"useAltColors":170,"__hash__":657},"blog\u002Fdx9-games-on-mac.md","DX9 games on Apple Silicon",false,{"type":9,"value":10,"toc":633},"minimark",[11,16,24,38,41,46,50,72,114,128,135,190,200,204,235,239,255,267,294,297,299,303,309,385,392,395,412,426,429,496,514,520,523,525,529,538,591,595,605,609,618,622,629],[12,13,15],"h1",{"id":14},"running-dx9-32-bit-games-on-apple-silicon-macs","Running DX9 & 32-bit games on Apple Silicon Macs",[17,18,19,20,23],"p",{},"With modern games becoming nothing but a chore, and an ever-increasing array of monetization strategies, more and more people have turned to retro gaming—myself included.",[21,22],"br",{},"\nWhile we can easily emulate a huge library of games spanning several console generations, older PC titles are also becoming increasingly popular.\nIf you find yourself on an Apple Silicon Mac, though, playing older titles, often relying on older DirectX versions, or making use of now-deprecated 32-bit architectures, can get rather tricky.\nIn this short tutorial, I’ll show you how you can run DX9 and 32-bit games on Apple Silicon Macs.",[25,26,29],"simple-callout",{"title":27,"type":28},"Tip","tip",[17,30,31,32,37],{},"If you’re on an Intel Mac, you don’t need any of this. Simply follow ",[33,34,36],"a",{"href":35},"https:\u002F\u002Fsupport.apple.com\u002Fen-us\u002F102622","this guide"," to set up Boot Camp, allowing you to run Windows on bare metal.",[39,40],"hr",{},[42,43,45],"h2",{"id":44},"preparation","Preparation",[47,48,49],"h3",{"id":49},"rosettax87-jit",[17,51,52,53,58,59,61,65,66,71],{},"First off, we need to get our hands on the latest release of ",[33,54,49],{"href":55,"rel":56},"https:\u002F\u002Fgithub.com\u002FLifeisawful\u002Frosettax87_jit\u002Freleases\u002Fdownload\u002Flatest\u002Frosettax87-jit-macos-arm64.tar.gz",[57],"nofollow"," for Apple Silicon Macs.\nDownload it, and unpack it.",[21,60],{},[62,63,64],"code",{},"Archive Utility",", the app that ships with macOS by default, is unable to extract said archive, though, so you either need something like ",[33,67,70],{"href":68,"rel":69},"https:\u002F\u002Fwww.keka.io\u002Fen\u002F",[57],"Keka",", or you can use the following command instead:",[73,74,76],"code-block",{"language":75},"bash",[77,78,82],"pre",{"className":79,"code":80,"language":75,"meta":81,"style":81},"language-bash shiki shiki-themes ayu-dark","tar -xzf rosettax87-jit-macos-arm64.tar.gz -C $HOME\u002FDocuments\u002Frosettax87jit --strip-components=1\n","",[62,83,84],{"__ignoreMap":81},[85,86,89,93,97,101,104,108,111],"span",{"class":87,"line":88},"line",1,[85,90,92],{"class":91},"sP_rH","tar",[85,94,96],{"class":95},"sHCZS"," -xzf",[85,98,100],{"class":99},"skAsU"," rosettax87-jit-macos-arm64.tar.gz",[85,102,103],{"class":95}," -C",[85,105,107],{"class":106},"skCYq"," $HOME",[85,109,110],{"class":99},"\u002FDocuments\u002Frosettax87jit",[85,112,113],{"class":95}," --strip-components=1\n",[17,115,116,117,119,120,123,124,127],{},"Pay close attention to what you name the resulting folder and where it is stored, as we will need both pieces of information when we want to launch our game.",[21,118],{},"\nThe command above will create a folder called ",[62,121,122],{},"rosettax87jit"," in your ",[62,125,126],{},"Documents"," folder with all the required files present.",[17,129,130,131,134],{},"Next up, we need to strip the quarantine attribute from the ",[62,132,133],{},"runtime_loader"," binary, as otherwise, Gatekeeper will prevent us from executing it.\nTo do so, simply run one of the following commands:",[73,136,137],{"language":75},[77,138,140],{"className":79,"code":139,"language":75,"meta":81,"style":81},"# removes the quarantine attribute from extended attributes\nxattr -d com.apple.quarantine $HOME\u002FDocuments\u002Frosettax87jit\u002Fruntime_loader\n\n# clears extended attributes recursively\nxattr -cr $HOME\u002FDocuments\u002Frosettax87jit\u002Fruntime_loader\n",[62,141,142,148,165,172,178],{"__ignoreMap":81},[85,143,144],{"class":87,"line":88},[85,145,147],{"class":146},"sOSKZ","# removes the quarantine attribute from extended attributes\n",[85,149,151,154,157,160,162],{"class":87,"line":150},2,[85,152,153],{"class":91},"xattr",[85,155,156],{"class":95}," -d",[85,158,159],{"class":99}," com.apple.quarantine",[85,161,107],{"class":106},[85,163,164],{"class":99},"\u002FDocuments\u002Frosettax87jit\u002Fruntime_loader\n",[85,166,168],{"class":87,"line":167},3,[85,169,171],{"emptyLinePlaceholder":170},true,"\n",[85,173,175],{"class":87,"line":174},4,[85,176,177],{"class":146},"# clears extended attributes recursively\n",[85,179,181,183,186,188],{"class":87,"line":180},5,[85,182,153],{"class":91},[85,184,185],{"class":95}," -cr",[85,187,107],{"class":106},[85,189,164],{"class":99},[25,191,194],{"title":192,"type":193},"Check your paths","caution",[17,195,196,197,199],{},"As mentioned before, if you don’t closely follow the instructions, you may end up with a different set of files and folders, in completely different locations.",[21,198],{},"That’s fine, as long as you adjust the commands accordingly to reflect your actual setup.",[47,201,203],{"id":202},"wine","Wine",[17,205,206,207,212,213,217,218,221,222,225,226,230,231,234],{},"Once that’s done, we can install Wine, which lets us run Windows applications on macOS, Linux, and BSD systems.\nSimply grab the latest release ",[33,208,211],{"href":209,"rel":210},"https:\u002F\u002Fgithub.com\u002Faitorciki\u002FmacOS_Wine_builds\u002Freleases\u002Ftag\u002F11.6",[57],"here",", then extract it using the methods mentioned ",[33,214,216],{"href":215},"#rosettax87-jit","above",".\nOnce that’s done, you can move the resulting application into your ",[62,219,220],{},"Applications"," folder.\nChecking the requirements listed in the README for the latest release, you can see that you need to be on a macOS version >= macOS Catalina—which every single Apple Silicon Mac is by default—and you also need to have ",[62,223,224],{},"GStreamer.framework"," installed.\nSimply download it from ",[33,227,211],{"href":228,"rel":229},"https:\u002F\u002Fgstreamer.freedesktop.org\u002Fdata\u002Fpkg\u002Fosx\u002F1.28.1\u002Fgstreamer-1.0-1.28.1-universal.pkg",[57],", then run the ",[62,232,233],{},".pkg"," installer.",[47,236,238],{"id":237},"using-d9vk","Using d9vk",[17,240,241,242,246,247,250,251,254],{},"Finally, we need to grab d9vk, which translates Direct3D 9 calls into either Vulkan or Metal, improving both performance and compatibility. You can grab it ",[33,243,211],{"href":244,"rel":245},"https:\u002F\u002Fgithub.com\u002FSikarugir-App\u002Fd9vk\u002Freleases\u002Fdownload\u002Fv1.10.3-20250511\u002Fd9vk-macOS-async-v1.10.3-20250511.tar.gz",[57],".\nExtract it, then move the 32-bit DLL called ",[62,248,249],{},"d3d9.dll"," from the ",[62,252,253],{},"x32"," folder into your game folder.",[17,256,257,258,262,263,266],{},"In my case, I’m using the Steam version of ",[259,260,261],"em",{},"Star Wars - Knights of the Old Republic",", installed on an external drive.\nSince I extracted the archive to my desktop and named it ",[259,264,265],{},"d9vk",", I can move it to the root of my game’s install folder via:",[73,268,269],{"language":75},[77,270,272],{"className":79,"code":271,"language":75,"meta":81,"style":81},"cd ~\u002FDesktop\u002Fd9vk\nmv .\u002Fx32\u002Fd3d9.dll \"\u002FVolumes\u002FNVME SSD\u002FGames\u002FWindows\u002FSteam\u002Fsteamapps\u002Fcommon\u002Fswkotor\u002Fd3d9.dll\"\n",[62,273,274,283],{"__ignoreMap":81},[85,275,276,280],{"class":87,"line":88},[85,277,279],{"class":278},"s-wAU","cd",[85,281,282],{"class":99}," ~\u002FDesktop\u002Fd9vk\n",[85,284,285,288,291],{"class":87,"line":150},[85,286,287],{"class":91},"mv",[85,289,290],{"class":99}," .\u002Fx32\u002Fd3d9.dll",[85,292,293],{"class":99}," \"\u002FVolumes\u002FNVME SSD\u002FGames\u002FWindows\u002FSteam\u002Fsteamapps\u002Fcommon\u002Fswkotor\u002Fd3d9.dll\"\n",[17,295,296],{},"And just like that, all the prep work is done and we can focus on actually running our game.",[39,298],{},[42,300,302],{"id":301},"launching-your-game","Launching your game",[17,304,305,306,308],{},"All that’s left to do is to actually launch your game.",[21,307],{},"\nRefer to the following code block for the commands needed to launch your game:",[73,310,311],{"language":75},[77,312,314],{"className":79,"code":313,"language":75,"meta":81,"style":81},"cd \"\u003CPLACEHOLDER>\"\n\nROSETTA_X87_PATH=\"\u003CPLACEHOLDER>\" \\\nMVK_CONFIG_SYNCHRONOUS_QUEUE_SUBMITS=1 \\\nDXVK_ASYNC=1 \\\nWINEDLLOVERRIDES=\"d3d9=n\" \\\nWINE_DISABLE_NX_COMPAT=1 \\\nwine \"\u003CPLACEHOLDER>\"\n",[62,315,316,323,327,342,350,357,368,376],{"__ignoreMap":81},[85,317,318,320],{"class":87,"line":88},[85,319,279],{"class":278},[85,321,322],{"class":99}," \"\u003CPLACEHOLDER>\"\n",[85,324,325],{"class":87,"line":150},[85,326,171],{"emptyLinePlaceholder":170},[85,328,329,332,336,339],{"class":87,"line":167},[85,330,331],{"class":106},"ROSETTA_X87_PATH",[85,333,335],{"class":334},"sh1d5","=",[85,337,338],{"class":99},"\"\u003CPLACEHOLDER>\"",[85,340,341],{"class":91}," \\\n",[85,343,344,347],{"class":87,"line":174},[85,345,346],{"class":106},"MVK_CONFIG_SYNCHRONOUS_QUEUE_SUBMITS=1 ",[85,348,349],{"class":95},"\\\n",[85,351,352,355],{"class":87,"line":180},[85,353,354],{"class":106},"DXVK_ASYNC=1 ",[85,356,349],{"class":95},[85,358,360,363,366],{"class":87,"line":359},6,[85,361,362],{"class":106},"WINEDLLOVERRIDES=",[85,364,365],{"class":99},"\"d3d9=n\"",[85,367,341],{"class":95},[85,369,371,374],{"class":87,"line":370},7,[85,372,373],{"class":106},"WINE_DISABLE_NX_COMPAT=1 ",[85,375,349],{"class":95},[85,377,379,382],{"class":87,"line":378},8,[85,380,381],{"class":106},"wine ",[85,383,384],{"class":99},"\"\u003CPLACEHOLDER>\"\n",[17,386,387,388,391],{},"You need to replace all instances of ",[62,389,390],{},"\u003CPLACEHOLDER>"," with the correct paths for your machine.",[17,393,394],{},"The first path you need to fill in is the path to your game installation.",[17,396,397,398,400,401,403,404,407,408,411],{},"The second path should point to your rosettax87-jit runtime loader.",[21,399],{},"\nIf you followed my instructions regarding rosettax87-jit, the correct value for ",[62,402,331],{}," should be\n",[62,405,406],{},"\"$HOME\u002FDocuments\u002Frosettax87jit\u002Fruntime_loader\"",", with ",[62,409,410],{},"$HOME"," being an alias for your home directory, so no need to change anything on your end. If you placed it somewhere else, update the path accordingly.",[17,413,414,415,417,418,421,422,425],{},"Finally, we need to fill in the path to our game’s executable. This is a relative path, starting from the root of our game’s installation.",[21,416],{},"\nIn my case, it’s simply ",[62,419,420],{},".\u002Fswkotor.exe",", since the executable is called ",[62,423,424],{},"swkotor.exe"," and is located right within the root of my game’s install folder.",[17,427,428],{},"With all paths filled in, the commands could look like this:",[73,430,431],{"language":75},[77,432,434],{"className":79,"code":433,"language":75,"meta":81,"style":81},"cd \"\u002FVolumes\u002FNVME SSD\u002FGames\u002FWindows\u002FSteamLibrary\u002Fsteamapps\u002Fcommon\u002Fswkotor\"\n\nROSETTA_X87_PATH=\"$HOME\u002FDocuments\u002Frosettax87jit\u002Fruntime_loader\" \\\nMVK_CONFIG_SYNCHRONOUS_QUEUE_SUBMITS=1 \\\nDXVK_ASYNC=1 \\\nWINEDLLOVERRIDES=\"d3d9=n\" \\\nWINE_DISABLE_NX_COMPAT=1 \\\nwine \".\u002Fswkotor.exe\"\n",[62,435,436,443,447,463,469,475,483,489],{"__ignoreMap":81},[85,437,438,440],{"class":87,"line":88},[85,439,279],{"class":278},[85,441,442],{"class":99}," \"\u002FVolumes\u002FNVME SSD\u002FGames\u002FWindows\u002FSteamLibrary\u002Fsteamapps\u002Fcommon\u002Fswkotor\"\n",[85,444,445],{"class":87,"line":150},[85,446,171],{"emptyLinePlaceholder":170},[85,448,449,451,453,456,458,461],{"class":87,"line":167},[85,450,331],{"class":106},[85,452,335],{"class":334},[85,454,455],{"class":99},"\"",[85,457,410],{"class":106},[85,459,460],{"class":99},"\u002FDocuments\u002Frosettax87jit\u002Fruntime_loader\"",[85,462,341],{"class":91},[85,464,465,467],{"class":87,"line":174},[85,466,346],{"class":106},[85,468,349],{"class":95},[85,470,471,473],{"class":87,"line":180},[85,472,354],{"class":106},[85,474,349],{"class":95},[85,476,477,479,481],{"class":87,"line":359},[85,478,362],{"class":106},[85,480,365],{"class":99},[85,482,341],{"class":95},[85,484,485,487],{"class":87,"line":370},[85,486,373],{"class":106},[85,488,349],{"class":95},[85,490,491,493],{"class":87,"line":378},[85,492,381],{"class":106},[85,494,495],{"class":99},"\".\u002Fswkotor.exe\"\n",[17,497,498,499,503,504,507,508,510,511,513],{},"Simply copy ",[500,501,502],"strong",{},"all"," the commands, then start ",[62,505,506],{},"Wine Staging",", which we installed earlier.",[21,509],{},"\nOnce it has started, you should see a terminal window. Simply paste the commands you copied into the terminal window.",[21,512],{},"\nCongrats, you’re now running a DirectX 9 game on an Apple Silicon Mac, with much better performance than previously possible.",[515,516],"simple-image",{"alt":517,"caption":518,"src":519},"“Kotor running on an Apple Silicon Mac”","KOTOR running on an Apple Silicon Mac using the latest version of Wine Staging.","\u002Fimages\u002Fblog\u002Farticles\u002Fdx9-games-on-mac\u002Fkotor-dx9.webp",[17,521,522],{},"Last but not least, we should go over some troubleshooting tips.",[39,524],{},[47,526,528],{"id":527},"troubleshooting","Troubleshooting",[530,531,533,534,537],"h4",{"id":532},"using-game-mode-for-better-performance","Using ",[259,535,536],{},"game mode"," for better performance",[17,539,540,541,543,544,546,547,549,550,552,553,558,559,561,562,564,567,569,570,573,574,576,579,580,582,583,586,587,590],{},"macOS is not able to automatically engage ",[259,542,536],{}," for most DX9 games.",[21,545],{},"\nYou need to manually toggle ",[259,548,536],{},".",[21,551],{},"\nTo do that, you need the full version of ",[33,554,557],{"href":555,"rel":556},"https:\u002F\u002Fdeveloper.apple.com\u002Fxcode\u002F",[57],"Xcode"," installed—simply installing the command-line tools won’t do the trick here.",[21,560],{},"\nCopy the game policy control utility from",[21,563],{},[62,565,566],{},"\u002FApplications\u002FXcode.app\u002FContents\u002FDeveloper\u002Fusr\u002Fbin\u002Fgamepolicyctl",[21,568],{},"\ninto a folder of your choice. If it’s on your ",[62,571,572],{},"PATH",", you can interact with it from anywhere on your system. If not, simply navigate to the folder you stored it in from your terminal, then use",[21,575],{},[62,577,578],{},".\u002Fgamepolicyctl game-mode set on"," to enable game mode.",[21,581],{},"\nSwap the word ",[62,584,585],{},"on"," for ",[62,588,589],{},"off"," to turn it off after your gaming session.",[530,592,594],{"id":593},"my-game-is-not-launching","My game is not launching",[17,596,597,598,601,602,604],{},"If you receive an error along the lines of ",[62,599,600],{},"wine: failed to open ...",", then you forgot to navigate into your game installation folder. Do so by using the ",[62,603,279],{}," command, followed by a space and your game’s install folder.",[530,606,608],{"id":607},"whats-the-easiest-way-to-get-my-games-installation-path","What’s the easiest way to get my game’s installation path?",[17,610,611,612,614,615,617],{},"Navigate to your game install folder in Finder. Open a terminal window and type out ",[62,613,279],{},", followed by a space.",[21,616],{},"\nNext, simply drag your game install folder onto the terminal window. The path will automatically be populated.",[530,619,621],{"id":620},"handling-wine-related-errors","Handling Wine-related errors",[17,623,624,625,628],{},"In most cases, deleting the ",[62,626,627],{},".wine"," folder from the root of your home folder will get rid of all issues.",[630,631,632],"style",{},"html pre.shiki code .sP_rH, html code.shiki .sP_rH{--shiki-default:#59C2FF}html pre.shiki code .sHCZS, html code.shiki .sHCZS{--shiki-default:#95E6CB}html pre.shiki code .skAsU, html code.shiki .skAsU{--shiki-default:#AAD94C}html pre.shiki code .skCYq, html code.shiki .skCYq{--shiki-default:#BFBDB6}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html pre.shiki code .sOSKZ, html code.shiki .sOSKZ{--shiki-default:#5A6673;--shiki-default-font-style:italic}html pre.shiki code .s-wAU, html code.shiki .s-wAU{--shiki-default:#F07178}html pre.shiki code .sh1d5, html code.shiki .sh1d5{--shiki-default:#F29668}",{"title":81,"searchDepth":150,"depth":150,"links":634},[635,640],{"id":44,"depth":150,"text":45,"children":636},[637,638,639],{"id":49,"depth":167,"text":49},{"id":202,"depth":167,"text":203},{"id":237,"depth":167,"text":238},{"id":301,"depth":150,"text":302,"children":641},[642],{"id":527,"depth":167,"text":528},"gaming","\u002Fimages\u002Fblog\u002Fdx9-mac.webp","2026-06-15","Run DirectX 9 and 32-bit games on modern Macs.","md","square",{},"\u002Fdx9-games-on-mac",{"title":6,"description":646},"dx9-games-on-mac",[654,655,656],"Gaming","Tutorial","macOS","l4r4EdhjyAASuE7V3HMwzrdM6kUvnxaWabw-WimJ-6o",{"title":659,"path":660,"stem":661,"date":662,"readTimeInMinutes":150,"children":-1},"Roditch 2.0","\u002Froditch-2.0","roditch-2.0","2026-06-14",{"title":664,"path":665,"stem":666,"date":667,"readTimeInMinutes":359,"children":-1},"Dusklight","\u002Fdusklight","dusklight","2026-06-25",1784357035459]