Eigener Treiber für OPTi 929 Soundkarten

  • Vielleicht erinnert ihr euch noch, als ich 2017 alle meine Soundkarten getestet und hier im Forum vorgestellt habe, da ärgerte ich mich mit den "typischen" Problemen der Soundkarten mit der Kombination aus OPTi929 und einem Windows Sound System Codec herum.
    Dabei fand ich heraus, dass bestimmte Treiber und teilweise auch verschiedene Treiberversionen eines Herstellers mit bestimmten Codecs (AD1848, AD1845, Codecs von Crystal) besser oder schlechter funktionieren. Auch der häufig zu lesende Tipp, diese Soundkarten erst mit dem eigenen und anschließend nochmal mit den MAD16 pro Treibern von OPTi zu initalisieren, deutet ja bereit darauf hin, dass es mehr an der Software, als an der Hardware liegt.
    Aber es lohnt ja nicht zu meckern, besser machen ist angesagt! Also suchte ich mir die Datenblätter zusammen, fand auch noch den sehr hilfreichen Quellcode eines MAD16 Treibers für Linux und setzte mich an meinen 486er.... :tasskaff je nach Zeit, Lust und Laune habe ich da immer mal dran weiter geschrieben.... und hier ist er nun: Dragonspheres Treiber für OPTi 929 Soundkarten!


    Download:
    Dragonspheres OPTi Treiber v1.21.zip


    Und die Readme gibt es von mir auch nochmal als PDF mit Bildern :)
    Dragonspheres Soundkartentreiber.pdf



    Für den OPTi 82C924 angepasste Version:
    OPTi 924 - 1.0.zip




    Den Quellcode habe ich übrigens auf Github allen Interessierten zur Verfügung gestellt.


    In der Zip-Datei findet ihr vier Programme sowie eine deutsche und eine englische Readme:


    929INIT.EXE Initialisiert die Soundkarte und schaltet zwischen SB und WSS Modus um. Anders als beim originalen Treiber von OPTi geht der Wechsel zwischen SB (Pro) und WSS Modus einfach per Kommandozeile (929INIT.EXE /WSS bzw. /SB). Man kann sich also praktische Batch-Dateien für Spiele mit WSS Unterstützung basteln.


    SETUP.EXE Hier lassen sich alle Einstellungen vornehmen, deutlich mehr als bei den Originaltreibern. Es lässt sich einstellen, ob der SB PRO Modus in Mono oder Stereo initialisert wird, welche Sound Blaster DSP Version ausgegeben wird und vieles mehr, was die Kompatibilität mit Spielen beeinflusst. Auch lässt sich direkt testen, ob sich die Karte mit den vorgenommenen Einstellungen initialisieren lässt.
    Beim Beenden bietet das Setup die Möglichkeit, automatisch die SET BLASTER Anweisung in der Autoexec.bat anzupassen und 929INIT dort einzutragen.


    MIXER.EXE Ein komfortabler Mixer. Die WSS kompatiblen Codecs haben zwei interne Eingänge, mit denen normalerweise der FM-Chip und CD-Audio verbunden sind . An welchem Eingang was angeschlossen ist, haben die Hersteller der Soundkarten unterschiedlich umgesetzt. Daher habe ich hier die Möglichkeit eingebaut, Musik über den OPL-3, ein Sample und einen Midi-Testton (ein C-4 mit dem Piano) über MPU401 oder Wavetableheader abzuspielen, um alles ausprobieren zu können.
    Der Mixer liest beim Start die aktuellen Werte vom Chip, zeigt also die momentan eingestellte Lautstärke an. Mit F1 lassen sich die zuletzt gespeicherten Einstellungen laden. Beim Beenden mit ESC werden die Einstellungen gespeichert. Von 929INIT wird die zuletzt gespeicherte Lautstärke auch beim Start des Rechners eingestellt.
    Auch der Mixer nimmt Parameter direkt von der DOS Kommandozeile an: Mit Mixer.exe DAC 100 100 lässt sich z.B. die Lautstärke für die Ausgabe von Samples auf 100% (links und rechts) setzen.


    SBFIX.COM
    ist ein kleines TSR-Programm, das den Sound Blaster Pro Mixer im Auge behält und in den Stereo-Modus zwingt. Der OPTi 929 verhält sich nämlich in einem Punkt anders als ein "echte" SB Pro: Werden im Sound Blaster Modus Audiodaten in Stereo ausgegeben, schaltet der Chip nach erfolgter Wiedergabe wieder auf Mono. Manche Spiele, z.B. Duke Nukem 3D, schalten vor jeder Soundausgabe auf Stereo um, die funktionieren auch super mit dem OPTi-Chip, andere, z.B. Descent, vertrauen darauf, dass der Mixer im Stereo Modus bleibt und es wird nur das erste Sample in Stereo ausgegeben, alle weiteren dann nur in Mono. Hier hilft dann dieses kleine Programm.
    SBFIX braucht ca. 2 KB Speicher, kann aber per LH (Load high) Anweisung in der Autoexec problemlos in den oberen Speicher geladen werden.


    Zur Installation einfach den Treiber in ein beliebiges Verzeichnis kopieren, Setup ausführen und die Einstellungen der Karte vornehmen. :)


    Ich würde mich freuen, wenn der ein oder andere von euch den Treiber ausprobiert und mir eine Rückmeldung gibt, ob alles funktioniert wie es soll oder wo ich noch etwas verbessern kann.

    Meine DOS-Rechner:

    Kleiner Industrie-486er mit 100 MHz (Intel 80486DX-4), 32 MB SD-RAM, Diamond SpeedSTAR 24 und SB 16 ( CT2770 ) + TNDY

    "Frankenstein" Pentium II mit 266 MHz, Elsa Winner 1000 TrioV + Voodoo I, SB 16 (CT2290) + Yamaha DB50XG


    Von mir geschriebene DOS-Programme gibt es hier.

    19 Mal editiert, zuletzt von Dragonsphere ()

  • super! :thumbup: Tolles Engagement was Du da an den Tag legst @Dragonsphere! Und dass Du unser Forum hier zuerst damit verwöhnst macht mich schon sehr stolz! ^^


    Leider wartet jetzt eine 6-Tage-Woche auf mich. Arbeitsmäßig. Ich hatte jetzt 4 Tage frei und da hätte das Testen des Treibers gut gepasst. Hab mir die ZIP aber
    trotzdem sofort gierig gezogen. Werde es frühestens kommenden Sonntag ausprobieren. Da ich immer noch keinen Testrechner habe muß eine laufende Kiste
    auf den OP. Aber das ist es wert!


    Die Miro-Tröten sind ja bekannt für ihren tollen Klang (wenn sie denn laufen) und leider auch für ihre Hakeligkeit. Darum wirst Du wohl über kurz oder lang vielen
    überzeugten und genervten Usern einen großen Dienst getan haben!
    Danke schon mal! :Bier
    vG; Daryl_Dixon

  • Hui, ein komplett selbstgeschriebener DOS-Treiber! Nicht übel, gar nicht übel! :we-are-not-worthy
    Leider hab ich keine Karte mit Opti929A-Chip, "nur" eine PCM12 Rev.E mit 924er, sonst würde ich Dein Meisterwerk mal auf Herz und Nieren durchchecken :D
    Ich nehme mal nicht an, dass Dein Treiber mit anderen OPTis auch läuft???

  • Danke für das viele Lob! [Blockierte Grafik: https://dos-reloaded.de/forum/wcf/images/smilies/smile.png] Das war einfach mal eine interessante Herausforderung, die sich nur an einem echten DOS-PC und mit original Hardware lösen lässt. Obendrein lernt man etwas über die Funtion alter Hardware. Da kommen Spaß und Engagement doch von ganz alleine. :D


    Geschrieben und getestet wurde der Treiber übrigens auf einem 486er DX4 mit 100 MHz. Das ist also die Referenz und auf anderen Systemen könnten die Programme entsprechend zu schnell oder zu langsam laufen. Allerdings habe ich bewusst auf jeglichen 386er Assemblercode verzichtet, sodass theoretisch auch ein 286er ausreichen sollte. Da könnte dann aber der Bildaufbau der Menüs im Setup und beim Mixer etwas dauern... Eventuell setze ich das noch in reinem Assemblercode um. Vieles im Quellcode ist da noch nicht optimiert.



    Ich nehme mal nicht an, dass Dein Treiber mit anderen OPTis auch läuft???


    Die OPTi-Chips haben ein "Passwortregister", das zum einen zur Identifikation des Chips dient und zum anderen unbeabsichtigten Zugriff auf die Soundhardware verhindert. Wahrscheinlich wird der Treiber also einen 924 einfach nicht als 929 erkennen, da er ihn mit dem falschen "Passwort" anspricht, selbst falls der 924 ansonsten registerkompatibel mit dem 929 sein sollte. Wenn ich die Zeit finde, gucke ich mal nach, worin sich beide unterscheiden und ob der 924 ohne großen Aufwand mit zu integrieren ist. Ich habe aber keine Karte mit Opti924 und kann es daher selber nicht ausprobieren.

    Meine DOS-Rechner:

    Kleiner Industrie-486er mit 100 MHz (Intel 80486DX-4), 32 MB SD-RAM, Diamond SpeedSTAR 24 und SB 16 ( CT2770 ) + TNDY

    "Frankenstein" Pentium II mit 266 MHz, Elsa Winner 1000 TrioV + Voodoo I, SB 16 (CT2290) + Yamaha DB50XG


    Von mir geschriebene DOS-Programme gibt es hier.

    Einmal editiert, zuletzt von Dragonsphere ()

  • Ich finde das Megageil, einfach mal so nen Treiber zu programmieren :)


    Auch wenn ich keine opti Soundkarte besitze, meinen vollsten Respekt hast du.

    Compaq Deskpro 286n/12MHz - 1MB - 40MB HDD - 3,5" Floppy //
    Panatek 386DX33 - 80387 - 8MB - 504MB CF2IDE - 5.25" & 3,5" Floppy - SB Vibra - NIC - 512Kb VGA //
    486DX2-66 - 16MB - 4GB CF2IDE - 5,25" & 3,5" 2,88MB Floppy - DVD - SB Vibra - NIC - 1MB CL VLB VGA //
    Intel Pentium 233MMX - 64MB - 16GB CF2IDE - 3,5" Floppy - DVD - SB AWE64 - NIC - 3Dfx Voodoo Banshee//
    Intel Pentium III 600MHz - 256MB - 4GB CF2IDE - 3,5" Floppy - DVD - SB AWE64 - NIC - 3Dfx Voodoo 3 3000 //

  • So, pünktlich zum Wochenede gibt es hier schon ein erstes Update. :D
    Ich habe mich in den letzten Tagen nach Feierabend noch ein paar Feinarbeiten an dem Treiber vorgenommen.


    Änderungen:


    - Zum Testen können im Mixer jetzt Samples auch im WSS Modus abgespielt werden
    - Im Mixer kann jetzt auch ein Testton über den Wavetableheader, die MPU 401 Schnittstelle abgespielt werden


    - Im Setup habe ich einige Einstellungen umbenannt und die Sortierung geändert. Ich hoffe, die Bezeichnungen sind nun verständlicher.
    - Der Hardwaretest im Setup wurde grundlegend überarbeitet.


    - Diverse kleiner Bugfixes und Anpassungen an den Texten
    - 929INIT.EXE hat ja bisher sehr viele Details am Bildschirm angezeigt (das half mir bei der Fehlersuche), nun gibt es mit /Q einen "Quiet Mode" und es wird nur noch das Copyright angezeigt.
    Sieht beim Start des Computers einfach besser aus :)


    Ich habe Startbeitrag editiert und dort die neue Version eingfügt. Das werde ich auch in Zukunft so halten, damit man nicht lange im Thread suchen muss.

    Meine DOS-Rechner:

    Kleiner Industrie-486er mit 100 MHz (Intel 80486DX-4), 32 MB SD-RAM, Diamond SpeedSTAR 24 und SB 16 ( CT2770 ) + TNDY

    "Frankenstein" Pentium II mit 266 MHz, Elsa Winner 1000 TrioV + Voodoo I, SB 16 (CT2290) + Yamaha DB50XG


    Von mir geschriebene DOS-Programme gibt es hier.

  • Noch kurz ein paar Infos:


    Installation:
    Einfach die Dateien ins Hauptverzeichnis von C: oder in einen Ordner kopieren, den ihr in der PATH Variable in der Autoexec ergänzt.
    Dann nacheinander Setup und Mixer ausführen und die Einstellungen vornehmen und testen. Gespeichert werden die beim Beenden automatisch.
    Dann noch 929INIT /INIT /Q in die Autoexec eintragen und die SET BLASTER entsprechend eurer Einstellungen anpassen.
    Das Verzeichnis in der PATH Variable stehen zu haben hat den Vorteil, dass ihr dann jederzeit und aus jedem Ordner mit 929INIT /SB bzw. /WSS zwischen Sound Blaster und WSS wechseln könnt.
    Damit lassen sich dann auch einfach Batchdateien für einzelne Spiele erstellen, die vor bzw. nach dem Spiel den Modus wechseln.


    Einstellungen im Setup:
    Ihr könnt im Setup neben den Standardeinstellungen, wie Port, DMA und Interrupt, unter dem Punkt "Erweiterten Optionen" auswählen, ob der Sound Blaster Modus standardmäßig mit 22.05 kHz stereo or 44.1 kHz mono initialisiert wird. Das macht für manche Spiele (Hocus Pocus z.B.) einen wesentlichen Unterschied für die Soundkartenerkennung aus. Darunter lässt sich auch auswählen, welcher Kristall auf der Karte für die Berehcnung der Sampleraten im SB Modus verwendet werden sollte.
    Normalerweise benutzen die Codecs beide Kristalle (16 und 24 MHz) dafür, aber manche älteren Spiele scheinen besser damit zurecht zu kommen, wenn hier nur der mit 16 MHz ausgewählt wird. Falls ihr bei einer dieser Soundkarten Probleme mit zu schnell / unvollständig abgespielten Samples in manchen Spielen hattet, hilft es hier auf 16 MHz umzustellen. Wolfenstein 3D ist hier so ein Kandidat.
    Standardmodus meint hier übrigens, in welchem Modus sich die Karte nach dem Initialisieren, z.B. nach dem Start des Computers, befinden soll. Ansonsten kann hier noch zwischen OPL3/OPL4 ausgwählt und auch das Timing der FM-Chips umgestellt werden (OPL3/4 Chips können in einen KOPL2 Kompatibilitätsmodus gesetzt werden). Unter den Basiseinstellungen für den Sound Blaster lässt sich auch die DSP Version auswählen, für die sich der OPTi Controller ausgibt.


    Mit F2 werden die Einstellungen gesetzt und das Programm versucht, WSS, Sound Blaster, FM-Chip und Wavetable (sofern aktiviert) zu erkennen. Klappt das nicht, könnt ihr mit F1 einfach zurückgehen und die Einstellungen anpassen.


    Der Mixer sollte Selbsterklärend sein ;)



    Geilomat! echt toll gemacht, blöd nur meine Karte geht nun zu nicetux
    Ich hab nur eine OPTI 924 mit OPL3 Clone.

    Na, dann kann sich der @nicetux aber freuen. Neue Karte und gleich passende Software im Forum dazu!


    Der 924 ist dem 929 anscheined sehr ähnlich. Im Wesentlichen wurde Plug and Pray hinzugefügt. Die Chancen stehen also gut, dass ich euch auch einen OPTi 924 Treiber zusammenbasteln kann.

    Meine DOS-Rechner:

    Kleiner Industrie-486er mit 100 MHz (Intel 80486DX-4), 32 MB SD-RAM, Diamond SpeedSTAR 24 und SB 16 ( CT2770 ) + TNDY

    "Frankenstein" Pentium II mit 266 MHz, Elsa Winner 1000 TrioV + Voodoo I, SB 16 (CT2290) + Yamaha DB50XG


    Von mir geschriebene DOS-Programme gibt es hier.

  • Absolut Spitze. Danke für dieses Engagement, einen Treiber zu entwickeln ist jetzt auch nichts was man einfache mal so nebenbei macht.
    Dann freue ich mich umso mehr wenn die Miro bei mir eintrifft. :D

    Meine Vintagerechner: XT (NEC V20) & Book8088 (v2, VGA) #-# Epson XT portable #-# HighScreen 286@16MHz #-# L&P 286-20MHz #-# Cyrix 386DRx²-33/66 #-# ESCOM Black Slim Am386DX@40MHz #-# SCT Proline Cyrix486DX2@66 #-# Cyrix 5x86@100 VIP #-# Libretto 50CT #-# && 1x Sockel 8 & 3x Sockel4 (60MHz + 66MHz)

  • So, Version 0.8 ist online. :)


    Ich habe die Routinen zum zeichnen der Menüs jetzt komplett in Assembler umgesetzt, damit die etwas schneller / flüssiger laufen. Damit sollten das Setup und der Mixer auch auf einem 386er und 286er gut zu benutzen sein.


    Ansonsten gibt es ein paar neue Funktionen:


    Im Mixer werden die Lautstärken jetzt auch in Prozent angezeigt. Außerdem lassen sich, neben FM-Musik und einem Sample, über den "Wavetable" Button Midi Noten abspielen.
    Ihr könnt die Lautstärke jetzt auch über die Kommandozeile anpassen: "Mixer.exe DAC 100 50" würde z.B. die Lautstärke vom DAC Links auf 100% und Rechts auf 50% setzen.


    Die Prüfung der Einstellungen im Setup wurde komplett überarbeitet. Jetzt werden auch der eingestellte DMA-Kanal für das WSS und Midi/MPU401 getestet.
    Dann habe ich noch ein paar kleine Fehler ausgebessert, die sich ja irgendwie immer einschleichen.



    Mit Ausprobieren von verschiedeen Einstellungen im Setup habe ich jetzt fast alle Spiel zum Laufen gebracht, die vorher mit den Soundkarten nicht wollten.
    Nur Tyrian ist noch zickig und will keinen Sound Blaster erkennen, läuft aber im WSS Modus einwandfrei mit 16 Bit 48 KHz und Stereo.
    Also nicht wirklich ein Problem und der Modus lässt sich ja jetzt auch bequem per Kommandozeile umschalten. Das ärgerte mich bei den originalen Treibern immer sehr, dass da das Umschalten per SB und WSS nicht über die Kommandozeile geht.


    Jetzt kann ich mir für Spiele, die WSS unterstützen, einfach kleine Batchdateien machen und habe Ruhe. :D


    Ich bin jetzt bestens zufrieden mit meinem eigenen kleinen Treiber für die Soundkarte, der all das kann, was ich vorher vermisst habe. Für mich hat sich der Aufwand auf jeden Fall gelohnt und ich hoffe, ich habe auch hier dem ein oder andern Frust mit seiner Soundkarte erspart.


    Der Mixer läuft übrigens nicht über den OPti Controller sondern direkt über den Codec und sollte auch mit anderen Karten funktionieren, die ein WSS kompatibles Codec haben (Analog Devices AD184x.... Crystal CS423x).

    Meine DOS-Rechner:

    Kleiner Industrie-486er mit 100 MHz (Intel 80486DX-4), 32 MB SD-RAM, Diamond SpeedSTAR 24 und SB 16 ( CT2770 ) + TNDY

    "Frankenstein" Pentium II mit 266 MHz, Elsa Winner 1000 TrioV + Voodoo I, SB 16 (CT2290) + Yamaha DB50XG


    Von mir geschriebene DOS-Programme gibt es hier.

  • Das ist ja echt der Wahnsinn! Riesen-Respekt!


    Nur leider komme ich im Moment gar nicht dazu, was zu machen... kann dir aber garantieren dass der Treiber bei mir verwendet werden wird, sofern er mit meinen Karten läuft!

  • Yes! Hab doch noch eine Spacewalker hier mit 929A, die wandert dann vielleicht wirklich in den aktiven Dienst.
    Bisher gingen die Karten mir nur auf den Sack. Aber wenn Treiber mit Hirn geschrieben werden gibt das Hoffnung :D

    "The best way to deal with an electric shock is to make sure nobody sees you get it." -Clive Mitchell
    "I'm still looking to get the team to put moss in." -GabeN (2003)

  • Respekt!


    Muss ich mal schauen welche Opti ich hab und werde das mal testen.


    Ich hab einen heiden Respekt vor Assembler!


    :we-are-not-worthy

  • Könntest du auch einen Treiber Schreiben der Port Adressen mappt ?


    z.B. 0C0h auf 2c0h oder 1E0h wählbar ? mit qemm ist das machbar.


    Würde dir im Gegenzug eine der Tandy Soundkarten zur Verfügung stellen.


    Der Primäre nutzen davon wäre die Karte auch in neueren Geräten mit ISA Slot nutzbar zu machen auf der Original Tandy Adresse.
    Ohne die Spiele patchen zu müssen. (Abgesehen von denen die nach einen Tandy BIOS suchen.)

    совок

  • Wow! Am Wochenende muss ich den neuen Treiber mal testen. Wirklich ganz großes Lob @Dragonsphere für die Arbeit!



    Super idee @matze79

    (Abgesehen von denen die nach einen Tandy BIOS suchen.)

    Wernn man den Tandy BIOS String dann in den noch nicht existenten Treiber mit unterbringen könnte, würden die doch auch gehen? oder seh ich das falsch? So ähnlich machen das doch auch dieser Tandy Emulator.

  • Und jetzt noch support füe den opti924 und gut ist xD


    Ein all in one treiber, das wär was!


    Probier es mal hiermit 924.zip:D Kleines Geschenk zum Wochenende.


    Da ich selber keine Karte mit 924er habe, habe ich keine Ahnung, ob de Treiber überhaupt funktioniert. Ich habe einfach ins Datenblatt geguckt und den Treiber für den 929 entsprechend abgeändert.
    Der 924 ist mit dem 929 registerkompatibel, daher war das jetzt keine große Sache. Allerdings unterstützt der 924 Plug and play, kann Einstellungen auf einem EPROM speichern und hat zusätzliche Register für automatisches Regulieren der Lautstärke, eine eine Funktion namens "Wave" ?( und noch andere Features. Auch kann die Lautstärke über einen Interrupt reguliert werden, den man im Chip aktivieren kann. Plug and play kannst du jetzt im Setup ein/ausschalten, den Rest habe ich jetzt einfach mal ignoriert.
    Berichte bitte mal, was deine Karte zu diesem Treiber so sagt...


    Übrigens ist es bei den OPTis wie auch bei den Codecs so, dass eine kleinere, hintere Zahl ein neueres Modell bezeichnet. Also ein 82C924 ist z.b. neuer als ein 928er oder 929er und bei den Codecs ist ein AD1845 moderner als ein AD1848 usw. Die 93x von OPti sind dann aber wieder eine neue Serie und moderner als die 92xer.




    Interessante Idee, aber bsolut keine einfache Sache. Du bräuchtest dann also so ein TSR, wie beim OPL2LPT?


    Ich guck mir das bei Gelegenheit mal an, Ports abzufangen ist absolut nicht einfach und mit QEMM habe ich bisher noch nichts gemacht.

    Wernn man den Tandy BIOS String dann in den noch nicht existenten Treiber mit unterbringen könnte, würden die doch auch gehen? oder seh ich das falsch? So ähnlich machen das doch auch dieser Tandy Emulator.


    Der String steht ja im Tandy BIOS im ROM, also an einer festen, unveränderlichen Adresse. Ein eigenes Programm wird aber irgendwo in den Speicher geladen, daher klappt das nicht.
    Ein Emulator emuliert ja auch das komplette Bios an der richtigen Stelle.


    Ich hab einen heiden Respekt vor Assembler!

    Dafür bist du unangefochtener Meister des Smoketests und vor deinen Lötkünsten und heilenden Händen für alte Hardware habe ich wirklich Respekt! :)


    Und Assembler ist doch gar nicht so schwer:


    Und schon hast du einen Bildschrim voller Smileys, absolut hardwarenah programmiert :)

    Meine DOS-Rechner:

    Kleiner Industrie-486er mit 100 MHz (Intel 80486DX-4), 32 MB SD-RAM, Diamond SpeedSTAR 24 und SB 16 ( CT2770 ) + TNDY

    "Frankenstein" Pentium II mit 266 MHz, Elsa Winner 1000 TrioV + Voodoo I, SB 16 (CT2290) + Yamaha DB50XG


    Von mir geschriebene DOS-Programme gibt es hier.

  • Ich hab Deinen 924er Treiber meiner Miro PCM12 vorgeworfen, die hat einen OPTi 924. Dein SETUP sagt aber, dass es keine Karte finden würde. Muss ich da vorher noch was machen? PnP vorab selbst initialisieren?

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!