Jump to content
ITzTravelInTime

Kx audio driver mod [Sound blaster live!, audigy 1/2/4/RX emu edsp]

250 posts in this topic

Recommended Posts

KX AUDIO DRIVER MOD

 

Hi guys i am a small developer, i really like to use my sound blaster cards on my machines and i love also coding, so when i find the source code for the kx audio driver on git hub and then Eugene, the creator of kx audio driver decided to no longer maintain the project, i decided to start working on a mod of this driver. 

 

With my mod, created starting from the sources of the last version of kx audio driver, and also by using apple developer documentation for pci and audio drivers as reference, i am working to achieve 2 things mainly: get all the cards supported by the driver to work with all the recent versions os macOS and add support for other cards that are not officially supported by the driver that works or could, but needs to be more properly supported.

 

This driver is made to support cards based on the E-mu 10k1, 10k2 and similars (like what is used by audigy rx and audigy 4 cards).

 

Supported cards are:

 

 - most of the sound blaster live!, live! 5.1 and live! 5.1 digital series

 - sound blaster 512

 - sound blaster 256

 - other creative and e-mu sound cards based on the 10k1 chip (cards with the ES1370/ES1371/ES1372/ES1373 chips are not supported)

 - sound blaster Audigy series (1 st gen)

 - sound blaster Audigy 2  and audigy 2 zs series

 - E-MU cards based on the 10k2 sound chip

 - Some Audigy 4 cards (SB0610 only) and the audigy 4 pro

 - Sound blaster Audigy RX (sb0155)

 - other creative and e-mu cards based on the (10k2, 10k2,5 and CA10300 based cards)

 

NOT supported cards:

 

 - Any ISA Sound card

 - ES1370/ES1371/ES1372/ES1373 based sound cards

 - CMI8738/CMI8788 based cards

 - Any CA0106 based card and cards with similar architectures (like sound blaster live! 24 bit, sound blaster audigy SE SB0570, audigy LS and similars, but audigy SA is supported)

 - Any sound blaster x-fi (some of them works on macOS using a modified version of voodoo hda)

 - Any sound blaster recon3D

 - Any sound blaster Z/ZS/ZX and similar series

 - Any sound blaster AE5 series

 

In the time being the things i have modded or added with this mod are:

 

- increased the simple buffer frames number with different values for emu10k1 based cards and emu10k2 based cards (including recent audigy 4 and rx) to reduce and all the audio cracking issues and possibly fixing all of them on a lot of cards

 

- added a more proper support for the pci express sound blaster audigy rx (which basically is an audigy 4 with a pcie bridge chip) 

 

- added more fancy names for the cards in the settings and other menus (so the name will be, for example, SB live! 5.1 SB0060 instead of kx SB0060 [e880] witch was shown in the original driver)

 

- added support to sample rate changing and added lots of sample rates (from 8 khz to 176,4 khz) to accomodate any possible usecase (note that 10k1 sound cards are limited up to 48khz sample rate, and 10k2 based cards are limited to 176,4 khz because of issues getting 192 khz to work, for now the driver goes up to 176,4 khz for such cards) 

 

- added boot args to manage the driver:

 

Boot args to use with the kx audio driver mod:

-kx_disable or -kxdisable or -kxoff

	This will prevent the driver from doing any initialization work, so the driver is basically disabled, 
    use it to boot your ssytem in case the driver is giving you issues and kernel panics while you are 
    trying to boot/using your system, so you are able to remove this driver or replace it with another 
    version of it or to do some truble shooting.

-kx_debug or -kxdebug or -kxspec

	Will show more debug info about the card, mainly the i/o port address and the kind of bus that it uses

-kx_exp_deb or -kx_beta or -kxbeta

	Will enable experimental and probably not working or unstable features like showing inputs for the card 
    or 192 khz sampling rate, use it only for testing and debug purposes, this may likely cause instability 
    and problems in the everyday usage! Use it at your own risk!
    
-kx_original or -kxoriginal

	This will basically turn off almost all the mods of this mod, so the driver will come to work as it was 
    before modding it, this can be usefoul as a "safe mode" like feture to have a working driver in case of 
    problems with features of the mod, so using this means no crsking issues improvements, only 48 khz sample 
    rate and only features of the non-modded kx audio driver for mac os x

 

- created a script file to use with the driver for installing the driver and also to load/unload, update, repolace it and it's libraries.

 

What i'd like to implement but i don't know how to do:

 

 - I'd like mainly to add a more proper support to the pci bridge chip of the audigy rx,

 

 - have audio inputs working,

 

 - fix the support when using more than one card, to get all the cards shown in the settings and other menus,

 

 - have the gameport/midi port of older cards to be used in mac os as a midi in/out

 

If other developers would like to join and help me, you can, and also an hand from other people with testing and feedback will be nice.

 

link for the kext only (if you have clover put it in [your clover efi folder]/clover/kexts/[your macOS version]/ so it will not be deleted when updating macOS):

 
       - download from the downloads section:          kX Audio Driver Mod by ITzTravelInTime 1.01
                                                                           
       - external download:                                      https://dl.dropboxus...Driver.kext.zip
 
link for the installer pack (the best way to install it, but you have to reinstall it when you upgrade macOS, remeber to fix kext permitions and rebuild the kernelcache if you want to remove the kext from it's install directory without using the unistall feature of the provvided script):
     
       - download:                                                   https://dl.dropboxus...aller pack.zip
 
Source code from Git Hub:
 
       -  github repo:                                               https://github.com/ITzTravelInTime/kx-audio-driver
 
NOTE: Some system because of some problems with the HPET may need to use FixHPET in clover and to install the kext in /System/Library/Extensions or to do other kind of hpet mods to run the driver properly, but only on some systems, most systems should not require it

 

DELL181UR.jpg

maxresdefault-2.jpg

Creative_Sound_Blaster_Audigy_SB0090.jpg

pdt_21723.png.png

maxresdefault.jpg

29-102-178-06.jpg

Edited by ITzTravelInTime
added new info of the new mod version

Share this post


Link to post
Share on other sites
Advertisement

Just for who wants to see which audio cards will be recognized by the audio driver, i link to you a .cpp code file which is used to recognize the audio cards in the driver, if you have a copy of the latest official sources, you will find the original version into the project folder/driver/frname.cpp, you can not use mine file as replacement for the frname that there is in the official sources because i use some custom properties, methods and variables that needs changes in other parts of the code to work

#include "kx.h"

int kx_get_friendly_name(unsigned int device,unsigned int subsys,unsigned int chiprev,
                         char *tmp_str,
                         unsigned char &is_51,
                         unsigned char &has_surdac,
                         unsigned char &is_aps,
                         unsigned char &is_10k2,
                         unsigned char &is_10k3,
                         unsigned char &is_a2,
                         unsigned char &is_a2ex,
                         unsigned char &is_k8,
                         unsigned char &is_a4,
                         unsigned char &is_edsp,
                         char &have_ac97,
                         char &lack_ac97,
                         unsigned char &is_zsnb,
                         unsigned char &is_cardbus
                         ,CardBus busName);

int kx_get_friendly_name(unsigned int device,unsigned int subsys,unsigned int chiprev,
                         char *tmp_str,
                         unsigned char &is_51,
                         unsigned char &has_surdac,
                         unsigned char &is_aps,
                         unsigned char &is_10k2,
                         unsigned char &is_10k3,
                         unsigned char &is_a2,
                         unsigned char &is_a2ex,
                         unsigned char &is_k8,
                         unsigned char &is_a4,
                         unsigned char &is_edsp,
                         char &have_ac97,
                         char &lack_ac97,
                         unsigned char &is_zsnb,
                         unsigned char &is_cardbus,
                         CardBus busName)
{
    int ret=0;
    busName = PCI;
    lack_ac97=0;
    have_ac97=0; // autodetect
    
    if(device==0x00041102) // 10k2
        is_10k2=1;
    
    if(device==0x00041102 && chiprev==4)  // a2
        is_a2=1;
    
    if(device==0x00081102) // a2value, ... with p17v
    {
        is_10k2=1;
        is_a2=1;
        is_k8=1;
        
        // this is assumed:
        // if((subsys&0xf0000000)==0x10000000) // any ca0108
        // is_k8=1;
        
        if((subsys&0xf0000000)==0x20000000) // any zsnb
            is_cardbus=1;
        
        if((subsys&0xf0000000)==0x40000000) // any e-dsp v2
            is_edsp=1;
        
        if((subsys&0xff000000)==0x42000000) // any e-dsp v2 cardbus
            is_cardbus=1;
    }
    
    if(is_edsp)
        lack_ac97=1;
    
    if(is_10k2)
        is_51=1; // assume 10k2 is always at least '5.1'
    
    switch(subsys)
    {
        case 0x40011102:
            if(is_10k2==0) // [1]
            {
                strncpy(tmp_str,"EMU EMUAPS",KX_MAX_STRING);
                is_aps=1;
                lack_ac97=1;
            }
            else
            {
                strncpy(tmp_str,"EMU EM8810 10k2",KX_MAX_STRING); // [110] - 1010 v1
                is_edsp=1;
                lack_ac97=1;
            }
            break;
            
        case 0x00201102: // [2]
            strncpy(tmp_str,"Sound Blaster live! CT4670 10k1",KX_MAX_STRING); // live! value
            break;
        case 0x00211102: // [3]
            strncpy(tmp_str,"Sound Blaster live! CT4620 10k1",KX_MAX_STRING); // live! standard
            break;
        case 0x80221102: // [4]
            strncpy(tmp_str,"Sound Blaster live! CT4780 10k1",KX_MAX_STRING); // value digital
            break;
        case 0x80231102: // [5]
            strncpy(tmp_str,"Sound Blaster PCI 512 CT4790 10k1",KX_MAX_STRING); // 512
            break;
        case 0x80251102: // sb0040 ? too // [6]
            strncpy(tmp_str,"Sound Blaster live! CT1140 10k1",KX_MAX_STRING); // MB
            break;
        case 0x80261102: // [7]
            strncpy(tmp_str,"Sound Blaster live! CT4830 10k1",KX_MAX_STRING); // value digital
            break;
        case 0x80271102: // [8]
            strncpy(tmp_str,"Sound Blaster live! CT4832 10k1",KX_MAX_STRING); // value digital
            break;
        case 0x80281102: // [9]
            strncpy(tmp_str,"Sound Blaster live! CT4870 10k1",KX_MAX_STRING); // value
            break;
        case 0x80291102: // [10]
            strncpy(tmp_str,"Sound Blaster live! CT4872 10k1",KX_MAX_STRING); // value
            break;
        case 0x802a1102: // [11]
            strncpy(tmp_str,"Sound Blaster live! CT4890 10k1",KX_MAX_STRING); // k256
            break;
        case 0x802b1102: // [12]
            strncpy(tmp_str,"Sound Blaster PCI 256 CT4891 10k1",KX_MAX_STRING); // 256
            break;
        case 0x002F1102: // M002/M003 // [13]
            strncpy(tmp_str,"Sound Blaster live! CTM002 10k1",KX_MAX_STRING); // MB
            break;
        case 0x80311102: // [14]
            strncpy(tmp_str,"Sound Blaster live! CT4831 10k1",KX_MAX_STRING); // value
            break;
        case 0x80321102: // [15]
            strncpy(tmp_str,"Sound Blaster live! CT4871 10k1",KX_MAX_STRING); // value
            break;
        case 0x80331102: // [16]
            strncpy(tmp_str,"Sound Blaster live! CT4893 10k1",KX_MAX_STRING); // k256
            break;
        case 0x80351102: // [17]
            strncpy(tmp_str,"Sound Blaster live! CT0060 10k1",KX_MAX_STRING);
            is_51=1;
            has_surdac=1;
            break;
        case 0x80401102: // [18]
            strncpy(tmp_str,"Sound Blaster live! CT4760 10k1",KX_MAX_STRING); // live digital entertainment/platinum
            break;
            
        case 0x80501102: // [19]
            strncpy(tmp_str,"Sound Blaster live! CT4750 10k1",KX_MAX_STRING); // was 4820?! k512
            break;
        case 0x80511102: // [20]
            strncpy(tmp_str,"Sound Blaster live! CT4850 10k1",KX_MAX_STRING);
            break;
            
        case 0x80611102: // [21]
            strncpy(tmp_str,"Sound Blaster live! 5.1 SB0060 10k1",KX_MAX_STRING);  // live 5.1
            is_51=1;
            has_surdac=1;
            break;
        case 0x80621102: // [22]
            strncpy(tmp_str,"Sound Blaster live! 5.1 SB0100 10k1",KX_MAX_STRING);  // live 5.1
            is_51=1;
            has_surdac=1;
            break;
        case 0x80631102: // [23]
            strncpy(tmp_str,"DXW MB",KX_MAX_STRING);
            break;
        case 0x80641102: // [24]
            strncpy(tmp_str,"Sound Blaster live! 5.1 SB0102 10k1",KX_MAX_STRING);  // live 5.1
            is_51=1;
            has_surdac=1;
            break;
        case 0x80651102: // [25]
            strncpy(tmp_str,"Sound Blaster live! 5.1 Digital SB022X 10k1",KX_MAX_STRING);
            is_51=1;
            has_surdac=1;
            break;
        case 0x80661102: // [33]
            strncpy(tmp_str,"Sound Blaster live! 5.1 SB0228 10k1",KX_MAX_STRING); // Russ's
            is_51=1;
            has_surdac=1;
            break;
        case 0x100a1102:
            if(!is_10k2)
            {
                if(chiprev==0xa)
                    strncpy(tmp_str,"Sound Blaster live! 5.1 SB0229 10k1",KX_MAX_STRING); // [34] - LS
                else
                    strncpy(tmp_str,"Sound Blaster live! 5.1 SB022b 10k1",KX_MAX_STRING); // [33]
                
                is_51=1;
                has_surdac=1;
            }
            else
            {
                strncpy(tmp_str,"Sound Blaster Audigy 2 SB0246 10k2",KX_MAX_STRING); // Audigy2 gateway oem [88]
            }
            break;
        case 0x80671102: // [32]
            strncpy(tmp_str,"Sound Blaster live! 5.1 Digital SB0220 10k1",KX_MAX_STRING);
            is_51=1;
            has_surdac=1;
            break;
        case 0x80681102: // [26]
            strncpy(tmp_str,"Sound Blaster live! 5.1 CT0061 10k1",KX_MAX_STRING);
            is_51=1;
            has_surdac=1;
            break;
        case 0x80691102: // [27]
            strncpy(tmp_str,"Sound Blaster live! 5.1 SB0101 10k1",KX_MAX_STRING); // value
            is_51=1;
            has_surdac=1;
            break;
        case 0x806a1102: // [28]
            strncpy(tmp_str,"Sound Blaster live! 5.1 SB0103 10k1",KX_MAX_STRING);
            is_51=1;
            has_surdac=1;
            break;
        case 0x806b1102: // [29]
            strncpy(tmp_str,"Sound Blaster live! 5.1 SB0105 10k1",KX_MAX_STRING);
            is_51=1;
            has_surdac=1;
            break;
        case 0x806C1102: // [30]
            strncpy(tmp_str,"Sound Blaster live! 5.1 Digital SB0221 10k1",KX_MAX_STRING);
            is_51=1;
            has_surdac=1;
            break;
        case 0x80711102: // [31]
            strncpy(tmp_str,"Sound Blaster PCI 512 SB0150 10k1",KX_MAX_STRING); // PCI512
            is_51=1;
            has_surdac=1;
            break;
            
        case 0x00401102: // ?.. dead audigy [50]
            strncpy(tmp_str,"Sound Blaster SB0090 10k2",KX_MAX_STRING); // audigy
            break;
        case 0x00411102:
            strncpy(tmp_str,"Sound Blaster CT4820 10k2",KX_MAX_STRING); // [51]
            break;
        case 0x00421102:
            strncpy(tmp_str,"Sound Blaster CT0070 10k2",KX_MAX_STRING); // [52]
            break;
        case 0x00431102:
            strncpy(tmp_str,"Sound Blaster CT0072 10k2",KX_MAX_STRING); // ct0073? // [53]
            break;
        case 0x00511102: // [54]
            strncpy(tmp_str,"Sound Blaster Audigy SB0090 10k2",KX_MAX_STRING); // audigy with golden connectors
            break;
        case 0x00521102: // [55]
            strncpy(tmp_str,"Sound Blaster Audigy SB016X 10k2 CA0100",KX_MAX_STRING); // audigy: plastic + gameport (no 1394)
            // unknown: sb0162 -- audigy w/midi jack + plastic jacks
            break;
        case 0x00531102: // [56]
            strncpy(tmp_str,"Sound Blaster Audigy SB0092 10k2",KX_MAX_STRING); // audigy OEM / Player SB0092
            break;
        case 0x00541102: // [57]
            strncpy(tmp_str,"Sound Blaster Audigy SB0161 10k2 CA0100",KX_MAX_STRING); // audigy
            break;
        case 0x00551102: // [58]
            strncpy(tmp_str,"Sound Blaster Audigy SB0192 10k2",KX_MAX_STRING); // audigy
            break;
        case 0x00561102: // [59]
            strncpy(tmp_str,"Sound Blaster Audigy SB0191 10k2",KX_MAX_STRING); // audigy
            break;
        case 0x00571102: // [60]
            strncpy(tmp_str,"Sound Blaster Audigy (OEM) SB0091 10k2",KX_MAX_STRING); // audigy
            break;
        case 0x00581102: // [61]
            strncpy(tmp_str,"Sound Blaster Audigy (OEM) SB0095 10k2",KX_MAX_STRING); // audigy
            break;
        case 0x00591102: // [62]
            strncpy(tmp_str,"Sound Blaster Audigy SB0230 10k2",KX_MAX_STRING); // audigy
            break;
        case 0x005A1102: // [63]
            strncpy(tmp_str,"Sound Blaster Audigy SB0231 10k2",KX_MAX_STRING); // audigy
            break;
        case 0x005B1102: // [64]
            strncpy(tmp_str,"Sound Blaster Audigy SB0232 10k2",KX_MAX_STRING); // audigy
            break;
        case 0x005C1102: // [65]
            strncpy(tmp_str,"Sound Blaster Audigy SB0238 10k2",KX_MAX_STRING); // audigy
            break;
            
        case 0x10021102: // [80]
            strncpy(tmp_str,"Sound Blaster Audigy 2 SB0240 10k2",KX_MAX_STRING); // Audigy2
            break;
        case 0x10031102: // [81]
            strncpy(tmp_str,"Sound Blaster Audigy 2 SB0243 10k2",KX_MAX_STRING); // Audigy2
            break;
        case 0x10041102: // [82]
            strncpy(tmp_str,"Sound Blaster Audigy 2 SB0242 10k2",KX_MAX_STRING); // Audigy2
            break;
        case 0x10051102: // [83]
            strncpy(tmp_str,"Sound Blaster Audigy 2 Platinum EX SB0280 10k2",KX_MAX_STRING); // Audigy2 Platinum Ex; sb244, sb250, sb290
            is_a2ex=1;
            lack_ac97=1;
            break;
        case 0x10061102: // [86]
            strncpy(tmp_str,"Sound Blaster Audigy 2 (OEM) SB0245 10k2",KX_MAX_STRING); // audigy2 gateway oem
            break;
        case 0x10071102: // [84]
            strncpy(tmp_str,"Sound Blaster Audigy 2 (OEM) SB0244 10k2",KX_MAX_STRING); // audigy2 oem [riva's]
            break;
        case 0x10081102: // [85]
            strncpy(tmp_str,"Sound Blaster Audigy 2 Platinum EX SB0320 10k2",KX_MAX_STRING); // Audigy2 Platinum Ex (with ac97 codec!) + sb290
            is_a2ex=1;
            break;
        case 0x10091102: // [87]
            strncpy(tmp_str,"Sound Blaster Audigy 2 SB0249 10k2",KX_MAX_STRING); // Audigy2 unk
            break;
            
        case 0x20011102: // [101]
            if(is_k8)
            {
                strncpy(tmp_str,"Sound Blaster Audigy 2 ZS Mobile SB0530 10k8",KX_MAX_STRING); // audigy2 ZS Notebook
                is_zsnb=1;
                is_cardbus=1;
                lack_ac97=1;
                busName = NoteBook;
            }
            else // [90]
            {
                strncpy(tmp_str,"Sound Blaster Audigy 2 ZS Platium Pro SB0360 10k2",KX_MAX_STRING); // audigy2 ZS Platinum Pro + sb290
                is_a2ex=1;
            }
            break;
        case 0x20211102: // [105]
            if(is_k8)
            {
                strncpy(tmp_str,"Sound Blaster Audigy 2 ZS Mobile SB2021 10k8",KX_MAX_STRING); // audigy2 zs notebook [?]
                is_zsnb=1;
                is_cardbus=1;
                lack_ac97=1;
                busName = NoteBook;
            }
            break;
        case 0x20021102: // [91]
            strncpy(tmp_str,"Sound Blaster Audigy 2 ZS SB0350 10k2",KX_MAX_STRING); // audigy2 ZS retail + sb250
            break;
        case 0x20031102: // [92]
            strncpy(tmp_str,"Sound Blaster Audigy 2 ZS SB0352 10k2",KX_MAX_STRING); // audigy2 ZS ?
            break;
        case 0x20041102: // [95]
            strncpy(tmp_str,"Sound Blaster Audigy 2 ZS SB035X 10k2",KX_MAX_STRING); // Audigy2 zs sb0350/sb0355 / Gateway OEM
            break;
        case 0x20051102: // [96]
            strncpy(tmp_str,"Sound Blaster Audigy 2 ZS SB035X 10k2",KX_MAX_STRING); // Audigy2 zs SB0350/359
            break;
        case 0x20061102: // [94]
            strncpy(tmp_str,"Sound Blaster Audigy 2 ZS SB035X 10k2",KX_MAX_STRING);
            break;
        case 0x20071102: // [93]
            strncpy(tmp_str,"Sound Blaster Audigy 4 PRO SB0380 10k2 CA10200",KX_MAX_STRING); // audigy4 PRO
            break;
            
        case 0x10001102: // [103]
            strncpy(tmp_str,"Sound Blaster Audigy 2 SB1000 10k2",KX_MAX_STRING); // audigy2 value [?]
            break;
        case 0x10011102: // [100]
            strncpy(tmp_str,"Sound Blaster Audigy 2 SB0400 10k2",KX_MAX_STRING); // audigy2 value
            // has ac97 codec
            break;
        case 0x10211102: // [102]
        {
            strncpy(tmp_str,"Sound Blaster Audigy 4 SB0610 10k2 CA10300",KX_MAX_STRING);
            is_a4=1;
            // has ac97
        }
            break;
            
            //FIXME find subsys id for audigy 4 and put them here
            /*
        case 0x10201102:
        {
            strncpy(tmp_str,"Sound Blaster Audigy 4 SB0660 10k2 CA10300",KX_MAX_STRING);
            is_a4=1;
        }*/
            
        case 0x10221102: // [104]
            strncpy(tmp_str,"Sound Blaster Audigy 2 SB1022 10k2",KX_MAX_STRING); // Audigy2 value ?
            break;
        case 0x10241102:
            strncpy(tmp_str,"Sound Blaster Audigy RX SB1550 10k2 CA10300",KX_MAX_STRING); // audigy rx experimental
            // has ac97 codec
            is_10k3 = 1;
            is_10k2 = 1;
            is_a4=1;
            busName = PCIExpress;
            //ret=-1;
            break;
        case 0x11011102: // [106]
            strncpy(tmp_str,"Sound Blaster Audigy SA SB1101 10k2",KX_MAX_STRING); // Audigy SA ??
            break;
            
        case 0x40021102:
            if(!is_k8)
                strncpy(tmp_str,"EMU E-0404 10k2",KX_MAX_STRING); // [111]
            else
                strncpy(tmp_str,"EMU E-0404 10k8",KX_MAX_STRING); // [120]
            
            is_edsp=1;
            lack_ac97=1;
            break;
        case 0x40031102:
            if(!is_k8)
                strncpy(tmp_str,"EMU E-1010 10k2",KX_MAX_STRING); // [112]
            else
                strncpy(tmp_str,"EMU E-1010 10k8",KX_MAX_STRING); // [121]
            
            is_edsp=1;
            lack_ac97=1;
            break;
        case 0x40041102: // [123]
            if(is_k8)
            {
                strncpy(tmp_str,"EMU EM8960 10k8",KX_MAX_STRING); // EM8960: 1010 PCI
                is_edsp=1;
                lack_ac97=1;
            }
            else
            {
                strncpy(tmp_str,"EMU Un4004 10k2",KX_MAX_STRING); // ??
            }
            break;
        case 0x40051102:
            if(is_k8)
            {
                strncpy(tmp_str,"EMU EM8984 10k8",KX_MAX_STRING); // EM8984: 0404 PCIe
                is_edsp=1;
                lack_ac97=1;
                busName = PCIExpress;
            }
            else
            {
                strncpy(tmp_str,"EMU Un4005 10k2",KX_MAX_STRING); // ??
            }
            break;
        case 0x40071102: // EM8982 - 1010 ('PCIe' series)
        {
            if(is_k8)
            {
                strncpy(tmp_str,"EMU EM8982 10k8",KX_MAX_STRING);
                is_edsp=1;
                lack_ac97=1;
            }
            else
                strncpy(tmp_str,"EMU Un4007 10k2",KX_MAX_STRING);
        }
            busName = PCIExpress;
            break;
            
        case 0x42011102: // [122]
            strncpy(tmp_str,"EMU EM8950 10k8",KX_MAX_STRING); // 1616 CardBus v2
            is_edsp=1;
            lack_ac97=1;
            is_cardbus=1;
            break;
            
        default:
            strncpy(tmp_str,"Generic card",KX_MAX_STRING);
            busName = PCI;
            ret=-1;
            break;
    }
    return ret;
}

int kx_get_friendly_name_from_kx_object(kx_hw &hw, char &tmp_str);

int kx_get_friendly_name_from_kx_object(kx_hw &hw, char &tmp_str){
    
    return kx_get_friendly_name(hw.pci_device,hw.pci_subsys,hw.pci_chiprev,&tmp_str,
                                hw.is_51,hw.has_surdac,
                                hw.is_aps,hw.is_10k2,hw.is_10k3,hw.is_a2,hw.is_a2ex,hw.is_k8,hw.is_a4,hw.is_edsp,
                                hw.have_ac97,hw.lack_ac97,hw.is_zsnb,hw.is_cardbus,hw.busName);
};

int kx_get_friendly_name_from_kx_object_no_string(kx_hw *&hw);

int kx_get_friendly_name_from_kx_object_no_string(kx_hw *&hw){
    char tmp_str[KX_MAX_STRING];
    
    return kx_get_friendly_name(hw->pci_device,hw->pci_subsys,hw->pci_chiprev,tmp_str,
                                hw->is_51,hw->has_surdac,
                                hw->is_aps,hw->is_10k2,hw->is_10k3,hw->is_a2,hw->is_a2ex,hw->is_k8,hw->is_a4,hw->is_edsp,
                                hw->have_ac97,hw->lack_ac97,hw->is_zsnb,hw->is_cardbus,hw->busName);
};

Share this post


Link to post
Share on other sites

Finally i am releasing an alpha of the kx driver mod, there are two ways to use it, with the installer pack and the kext only pack, i suggest the first option, says that, install it and test it on your machines and give me feedback

 

link for the kext only (if you have clover put it in [your clover efi folder]/clover/kexts/[your macOS version]/ so it will not be deleted when updating macOS):

 
link for the installer pack (the best way to install it, but you have to reinstall it when you upgrade macOS):

Share this post


Link to post
Share on other sites

As those cards are almost the only choice for internal cards the development of this driver should get more attention by all the serious Hackintosh users. Unfortunately, just like in the PC world, most people don't care about getting a "real" sound card and stick with the onboard sound.

Share this post


Link to post
Share on other sites

As those cards are almost the only choice for internal cards the development of this driver should get more attention by all the serious Hackintosh users. Unfortunately, just like in the PC world, most people don't care about getting a "real" sound card and stick with the onboard sound.

 

these are not the only alternative for internal sound cards, but are some of the cheapest internal cards that you can find (including the audigy rx that you can find in shops today) there are other alternatives, but they are some professional stuff or expensive stuff, or there are also some sound blaster x-fi that are quite cheap and works with voodoo hda instead and also some professional grade cards works with my kx driver mod

Share this post


Link to post
Share on other sites

For me the card has not worked since Yosemite. I am using now Sierra.

 

please specify which card, so I can help you

Share this post


Link to post
Share on other sites

ok, so, specify which card when switching between posts, first I suggest to you to try mine driver mod and to make sure that the card is properly installed and that you use the kext-dev-mode=1 boot arg that allows the driver to run properly on recent versions of Mac OS

Share this post


Link to post
Share on other sites

I tried both ways to install the kext. Placing it in EFI/CLOVER/KEXTS/OTHER did not work. Using the installer which places the kext in S/L/E did not work either. I got as far as selecting a sound effect to test for sound, when the system froze. This has been the result ever since El Capitan.

Share this post


Link to post
Share on other sites

for clover you don't have to place the kext in EFI/CLOVER/KEXTS/OTHER, but in EFI/CLOVER/KEXTS/[the folder named with the version of mac os you are using] so for example for sierra you have to put the kext in EFI/CLOVER/KEXTS/10.12 for yosemite you have to put it in EFI/CLOVER/KEXTS/10.10 instead, if the driver works you will see in system preferences->sound and in the outputs section a new device that will be named sound blaster audigy 2 zs, i suggest also to boot with -v to and send me video of the booth process with the kext installed, so i can tell to you what is happening and if the driver is working or if it is a hardware problem from the card its' self, also i suggest to you tu try mine installer with the installer packet that will clean previous kext installations of kx driver and will install it in s/l/e or try to install only the kext in clover to EFI/CLOVER/KEXTS/[kext named like the version of mac os you are using] if you use EFI/CLOVER/KEXTS/OTHER the kext will not be loaded at all since that folder is used only for versions of mac os that clover doesn't know, so on sierra you have to to use it, just use the latest version of clover and put the kext in EFI/CLOVER/KEXTS/10.12 and check if you are using kext-dev-mode=1 and -v in the boot args. and then check if does not work check if its an hardware problem, for example use programs like DPCI manager that will list all the pci devices, so if the card appears here the driver should see it, we should investigate what's the error

Share this post


Link to post
Share on other sites

My post states that I did install with your installer to s/l/e. I did see the driver in preferences, sound, output, but when I clicked on sound effects my system froze. This has happened since El Capitan. I wll try to install to kexts/10.12. I am using kext-dev-mode=1

Share this post


Link to post
Share on other sites

ok, the driver works and the card is recognized, i suggest to you to try to boot in safe mode, then reboot normally and you should not have problems, because it clear kernel cache and kext cache

Share this post


Link to post
Share on other sites

ok, the driver works and the card is recognized, i suggest to you to try to boot in safe mode, then reboot normally and you should not have problems, because it clear kernel cache and kext cache

 

 

I will try that.

Share this post


Link to post
Share on other sites

ok, the driver works and the card is recognized, i suggest to you to try to boot in safe mode, then reboot normally and you should not have problems, because it clear kernel cache and kext cache

 

The same thing happened. When I try to play sound, the system freezes.

Share this post


Link to post
Share on other sites

I'm struggling with the crappy VIA2021 onboard on my Gigabyte Z77 D3H.

I managed to get it working in Sierra, but it's very unstable and need to be fixed after few usage.

 

So i decided to keep out of my box my older SoundBlaster live 5.1 value!

 

I get it working good with your driver, but only the green output actually.

The 2nd black output doesn't work (  and it's not displayed too)

The input isn't displayed at all.

 

I use Hackintosh as daw with a  Steinberg MR816X but for daily usage i don't power it up and need to have a working two outputs and an input.

 

Any idea?

Thanks.

Share this post


Link to post
Share on other sites

I'm struggling with the crappy VIA2021 onboard on my Gigabyte Z77 D3H.

I managed to get it working in Sierra, but it's very unstable and need to be fixed after few usage.

 

So i decided to keep out of my box my older SoundBlaster live 5.1 value!

 

I get it working good with your driver, but only the green output actually.

The 2nd black output doesn't work (  and it's not displayed too)

The input isn't displayed at all.

 

I use Hackintosh as daw with a  Steinberg MR816X but for daily usage i don't power it up and need to have a working two outputs and an input.

 

Any idea?

Thanks.

 

the driver (and the original driver that I used to start my work) is limited to use only the green output, currently I don't know how to get work the inputs (I'd like to get at least the pink input to work) on Mac OS X on that cards, I have a prototype of the driver that has the inputs in preferences, but the inputs doesn't works yet, if some one can help me to get it working it will be very help foul (need guys with some experience in driver developing on Mac)

 

 

For the other guys, do you like that name for the sound card or I should use sound blaster instead of sb? I decided for sb because the name is already too long, and putting sound blaster makes it longer

post-1390153-0-67036200-1490134529_thumb.png

Share this post


Link to post
Share on other sites

Actually I'd cut anything behind the RX and use "Sound Blaster", because this is what the packaging says. Consumers don't care about product codes in the end as long as it works.

On the other hand, as long as it's not completely stable, the full string might be helpful for debugging.

Just my $00,02.

Share this post


Link to post
Share on other sites

Actually I'd cut anything behind the RX and use "Sound Blaster", because this is what the packaging says. Consumers don't care about product codes in the end as long as it works.

On the other hand, as long as it's not completely stable, the full string might be helpful for debugging.

Just my $00,02.

yes i understand, i can do it, but i have to do some consistent modifications to get the code to show other stuff only when is enabled some sort of debugging 

Share this post


Link to post
Share on other sites

No I thought about "debugging" in terms of as long as the driver doesn't reach 1.0, you keep the string, once you think it's ready for a stable release you cut the string.

Share this post


Link to post
Share on other sites

No I thought about "debugging" in terms of as long as the driver doesn't reach 1.0, you keep the string, once you think it's ready for a stable release you cut the string.

 

i mean in the code, i can insert a system that can be enabled in some way for example from the info.plist by changing a variable, to enable full string and other experimental features and debugging stuff 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Recently Browsing   0 members

    No registered users viewing this page.

  • Similar Content

    • By Abz79
      up guys,
      I've been hockintoshing for a long while, since Leopard to be exact and last week I replaced my Nvidia 9600GT with a brand new 1050 Ti...
      I have a Lion and El Capitan both were running fine before the 1050 Ti arrived, I read that my new Geforce needs new drivers that are readily supported by Sierra and High sierra.
      So I deleted Capitano and installed High Sierra 10.13 using Niresh distro. All went well and smooth and all my hardware was recognized the only problem left is this:
      My Nvidia driver "WebDriver-378.10.10.10.15.121" installs well with SIP enabled (aka 0x0 with clover) and after reboot the system is perfect with Nvidia web driver running fine
      However after rebooting the Default slow OSX graphics driver is loaded and stays that way until I resinstall the web driver....
       
      It's very annoying, I just can't make it work, I've been reading posts and tutorials for more that a week, nothing works, help is needed
       
      Things I've tried already:
      1. Boot using different clover revisions as old as 3911 and as new as 3509 (the latest)
      2. Tried with clover in the EFI partion and/or Boot partition
      3. Tried using different combos of nvda_drv,, nvidia webdriver, inject stuff (all possible combos in boot and graphics settings)
      4. Tried all available kext (Lilu, Nvidia fixup, Nvidiaegpusupport, NVlibvalfix..) single and combos - in clover kext folder and L/E folder
      5. Tried all different NVram recommendation - problem persisted even when nvram.plist is present or not
      6. Tried running the postscripts from the driver installer pkg
      7. Tried installing the driver via webdriver.sh
      8. Fixing permissions and what not
      And maybe other stuff that I forgot
       
      Things to note:
      When the graphics web driver loads fine KCPM kext utility works fine too but when the default driver is loaded KPCM warns that B0 and B1 SIP options are not enabled even though they are when I test csrutil status
      So I'm somehow thinking of a bug in Clover not applying the SIP restrictions correctly
      I don't know what happens when the driver is reinstalled that makes it work after reboot for 1 time only (I've went through all the pre post scripts in the installer and didn't find anything magical)
       
      It seems nothings works except reinstalling the driver - nothing else matters
      I'm almost pulling my hair - haven't faced such a problem since a very long time
      Any advice is greatly appreciated
       
      Abz
    • By rio2
      How to make AppleHDAController load on Ryzen boards?
      Rename(/add) your audio controller to your DSDT/SSDT as HDEF Add a _DSM method to your HDEF device with layout id 1 Patch the AppleHDAController binary, because it has a static table containing the supported PCI Vendor/DeviceID pairs and it also checks the VendorID against known values. As an example I provide a dif file and patched 10.13.3 binary, but if you want to I can patch the binary for other versions.  
      After AppleHDAController loads to actually get sound working you need to patch AppleHDA.kext for the codec on your board. First I tried to use Lilu+AppleALC for this task, but for some reason it refused to work. (I might look into it later why) But for the time being it was easier to use toleda's cloverALC script for that, but to make it work I had to change(/remove) the specified location of the HDEF device from the script. And for some reason it also required me to mount the EFI partition manually.
       
      Change this:
      if [[ $(cat /tmp/HDEF.txt | grep -c "HDEF@1") != 0 ]]; then Into this:
      if [[ $(cat /tmp/HDEF.txt | grep -c "HDEF") != 0 ]]; then  
      AppleHDAController_Patched10.13.3
      AppleHDAController-10.13.3-AMD.bdiff
    • By Mieze
      Being asked to add support for Realtek's Fast Ethernet PCIe NICs to my RTL8111 driver I got tired of answering the same old question again and again so that I finally decided to write a separate driver for these chips and to make a few of you guys and gals happy.
       
      As of now the driver supports the following members the RTL810X Fast Ethernet family:
      RTL8101E RTL8102E RTL8103E RTL8401E RTL8105E RTL8402 RTL8106E RTL8106EUS RTL8107E Here is a list of the driver's basic features:
      Supports Sierra (maybe El Capitan). 64 bit architecture only. Support for multisegment packets relieving the network stack of unnecessary copy operations when assembling packets for transmission. No-copy receive and transmit. Only small packets are copied on reception because creating a copy is more efficient than allocating a new buffer. TCP, UDP and IPv4 checksum offload (receive and transmit). TCP segmentation offload under IPv4. Support for TCP/IPv6 and UDP/IPv6 checksum offload. Supports Wake on LAN. Support for Energy Efficient Ethernet (EEE) which can be disabled by setting enableEEE to NO in the drivers Info.plist without rebuild. The default is YES. The driver is published under GPLv2. Built using Xcode 4.6.3.  
      Changelog Version 2.0.1 (2018-05-10): Fixes a problem with retrieval of the permanent MAC address on some chips. Version 2.0.0 (2017-04-04): Uses Apple's private driver interface introduced with 10.8. Adds support for the RTL8107E. Supports packet scheduling with QFQ. Adds support for flow control and EEE. Version 1.0.0 (2014-05-24): First offical release.     Installation   Before you install the driver you have to remove any installed driver for RTL810X. Goto /S/L/E and delete the old driver. Recreate the kernel cache. Open System Preferences and delete the corresponding network interface, e. g. en0. If you forget this step you might experience strange problems with certain Apple domains, iTunes and iCloud later. Install the new driver and recreate the kernel cache. Reboot Open System Preferences again, select Network and check if the new network interface has been created automatically or create it manually now. Configure the interface.     Troubleshooting Make sure you have followed the installation instructions especially when you have issues with certain domains while the others are working fine. Use the debug version to collect log data when trying to track down problems. The kernel log messages can be retrieved with "grep kernel /var/log/system.log" in Terminal. Starting from Sierra use "log show --predicate "processID == 0" --debug" in order to retrieve kernel logs. Include the log data when asking for support or giving feedback. I'm an engineer, not a clairvoyant. Don't copy and paste large amounts of log data to your post. Create an archive with the log data and attach it to your post. In case you don't want to make your log data publicly accessible, contact me via PM and I will provide you a mail address to send it directly to me.  Check your BIOS settings. You might want to disable Network Boot and the UEFI Network Stack as these can interfere with the driver. Double check that you have removed any other Realtek kext from your system because they could prevent the driver from working properly. Delete the following files: /Library/Preferences/SystemConfiguration/NetworkInterfaces.plist /Library/Preferences/SystemConfiguration/preferences.plist Verify your bootloader configuration, in particular the kernel flags. Avoid using npci=0x2000 or npci=0x3000.  In Terminal run netstat -s in order to display network statistics. Carefully examine the data for any unusual activity like a high number of packets with bad IP header checksums, etc. In case auto-configuration of the link layer connection doesn't work it might be necessary to select the medium manually in System Preferences under Network for the interface. Use Wireshark to create a packet dump in order to collect diagnostic information. Keep in mind that there are many manufacturers of network equipment. Although Ethernet is an IEEE standard, different implementations may show different behavior causing incompatibilities. In case you are having trouble try a different switch or a different cable.  
      Getting the driver
      There is a prebuilt binary in the Download section of this site: http://www.insanelymac.com/forum/files/file/259-realtekrtl8100-binary/ The source code can be found on Github: https://github.com/Mieze/RealtekRTL8100   Mieze
    • By LarryKu
      Hi everyone,
      I am new, I hope I am posting in the correct forum.
      My specs:
      Processor: Core i5 6500 Skylake 3.2ghz
      Mobo: Gigabyte h170-d3h
      M2SSD: WD Black 256gb PCIe (Mac OSx)
      SSD: Samsung 860 Evo (WIndows 10)
      HDD: WD Blue 1TB
      GPU: Radeon RX 480
      Monitor: BenQ RL2460 24"


      I was able to install High Sierra on a new m2 drive, that I added to the above configuration with windows 10 already installed.
      I had a few issues during install, including the monitor turning off at boot screen.

      Unfortunately, this persists even now. It turns off at about 60% of the progress bar, and to turn it on again I have to unplug/plug back my hdmi.
      Additionally, while all of the usb ports worked during install and while running it out of the clover I had on the usb stick, only the rear ones appear to work now.
      The audio doesn't work either, though I added the correct patch according to my mobo

      Lastly, my other drives are not recognized in the bios anymore. They run fine from boot override but they don't show up in the boot priority (while multiple entries of mac OS do, and they seem to increase in number at every reboot)

      Thanks in advance for the help
×