MS-DOS'ta ses kartı sürücüsü gerçekten nedir?
Bildiğim kadarıyla, ne MS-DOS ne de BIOS ses kartları için herhangi bir API sunmuyor. Bu nedenle, bugün bildiğimiz "sürücü" kavramı yoktur. Kurulum paketinde bulunan aksesuarlar, örnek dosyalar ve Windows ile ilgili şeylerin yanı sıra, bir DOS programının ses kartını kullanması için gerekenler nelerdir?
Bir yerde okuduğum ve artık bulamadığım bir şey, bazı ses kartlarının açılışta 'inaktif' olması ve çalışması için bir tür başlatmaya ihtiyaç duymasıdır. Lütfen buna yorum yapar mısınız?
Yanıtlar
DOS'taki diğer programlara "sürücü" hizmetleri sağlamanın tipik yolu, bir yazılım kesme vektörü kuran bir TSR (Sonlandır ve Yerleşik Kal) programını çalıştırmaktır, öyle ki DOS programlarının çalıştırılması hizmetler için bu INT'yi çalıştırabilir (bkz. Ralph Brown'ın Kesme Listesi ).
Bununla birlikte, ses bağlamında, programlar tipik olarak, doğrudan G / Ç bağlantı noktalarını okuyup yazarak, kesintileri ve DMA aktarımlarını yöneterek, aygıt G / Ç işlemini doğrudan yaparlar. Belki de en azından kısmen multimedya hizmetlerinin hızla gelişmekte olmasından kaynaklanıyor.
DOS tarafından herhangi bir kaynak yönetimi sağlanmadığında, aygıtları manuel olarak algılamanız gerekir, bu da biraz zor olabilir ve G / Ç alanına ne olduğuna bağlı olarak çökmeleri tetikleyebilir. Bazı cihazların, bu riski azaltmak için bir başlatma dizisi gerçekleştirilinceye kadar yalnızca minimum bir G / Ç ayak izini izlemiş olması mümkündür, ancak bu, AdLib, Roland MPU-401 MIDI ve klasik SoundBlaster için kendi yazdığım ses rutinlerinden tanıdığım davranış değildir. kartları.
Temel olarak, algılama, bu yapılandırma noktalarını belirleyen ortam değişkeni kurallarıyla desteklenen geleneksel G / Ç, IRQ ve DMA tahsislerine dayanıyordu.
Temel olarak, beklenen aygıtın varlığında yalnızca belirli bir sonuç vermesi gereken bir kod parçası yazdınız (fx, AdLib kartında yerleşik zamanlayıcıları ayarlayarak) ve onu geleneksel veya belirtilen G / Ç adreslerine göre körce çalıştırdınız gökten ne düştü.
Özet:
Real Sound Blasters'ın onları başlatmak veya desteklemek için bir sürücüye ihtiyacı yoktur. Klonların tek seferlik başlatmaya ihtiyacı olabilir. Egzotik kartlar, bellekte yerleşik çeviri katmanlarına ihtiyaç duyabilir.
Oyunlar, uygun donanım arabirimleriyle 'konuşmak' için kart başına sürücülerden oluşan bir koleksiyon kullanır. Bunlar, oyuna veya HMI veya Miles gibi harici dosyalar koleksiyonuna sabit olarak kodlanabilir.
Durumunuza bağlı olarak, bunlardan biri veya her ikisi de geçerli olabilir.
Halloween Harry'yi gerçek bir Sound Blaster'da oynamak için fazladan dosya gerekmez. SB desteği sabit kodlanmıştır.
Theme Hospital'ı MS-DOS altında bir SB Live PCI üzerinde oynamak için oyun , SB kartını soyutlamak için üçüncü taraf bir Miles sürücüsü kullanır. Kartın kendisi, eski bir SB kartının donanım arayüzünü taklit etmek için bir Canlı sürücü gerektirir.
Burada verilen tüm cevaplar, farklı senaryolar için doğrudur. Kafaları karıştıran şey, her ikisinin de doğru bir şekilde 'sürücüler' olarak adlandırılabileceği iki farklı aşama olmasıdır. Ne demek istediğimi açıklayayım:
Buradaki hemen hemen her şey hem dijitalleştirilmiş ses çıkışı hem de AdLib / OPL2 / OPL3 desteği için eşit olarak geçerlidir.
1) Arayüzü sağlamak için başlatma ve destek
Yasal, birinci taraf Sound Blaster serisi kartlar, doğrudan G / Ç bağlantı noktaları aracılığıyla programlanır. Karta ve karttan tüm veri hareketini yöneten ve 'DSP' * olarak bilinen bir çip vardır. Gerçek bir Sound Blaster'ınız varsa ve oyun, Sound Blaster Serisi Donanım Programlama Kılavuzunda açıklanan arayüzü kullanarak DSP ile Sound Blaster'ı nasıl konuşacağını biliyorsa, o zaman gereken tek şey budur.
* (Tipik olarak yankı gibi programlanabilir bir efekt sağlayan daha sonraki kullanımda bir 'DSP' ile karıştırılmamalıdır.)
Bir klon kartınız veya üçüncü taraf bir 'uyumlu kartınız' varsa, aşağıdakilerden biri geçerlidir:
- Klon kartı tam olarak Sound Blaster serisi kartlardan biri olarak işlev görür ve bir 'sürücü' tarafından başka bir müdahaleye gerek yoktur.
- Kart 'inert' olarak başlar ve biraz yeniden başlatma gerektirir. Bu, IRQ ve DMA ayarları atlama telleri yerine yazılımda yapılan 1995-1997 PnP uyumlu kartlarda yaygındır. Avance ALS100 + tabanlı kartım ve CMI8330 kartlarım, çalışmadan önce bir başlangıç programının çalıştırılmasını gerektirir. Bu program kartla konuşur, ona hangi IRQ ve DMA'nın kullanılacağını söyler ve bu noktadan sonra kart bir klon kartı görevi görür. Bir oyunun Sound Blaster DSP komutlarını Avance komutlarına, vb. Dönüştürmek için bellekte kalıcı bir program bulunmaz. Klon benzeri bir kart için 'sürücüyü' yüklediyseniz, bu büyük olasılıkla sizin için geçerlidir.
- Kart Gravis Ultrasound gibi egzotik olduğu için veya çok yeni olduğu için (nispeten konuşursak: 1996 sonrası) Sound Blaster / Ensoniq PCI kartı olduğu için doğrudan bir klon kartı görevi göremiyorsa, o zaman bir SB klon kartı. Bu kartlar, Sound Blaster DSP komutlarını engellemek ve bunları gerçek zamanlı olarak kartın anlayacağı komutlara çevirmek için yerleşik olarak yüklenecek bir yazılım şim katmanı gerektirir. GUS için bu SBOS'dur. Oynadığınız oyun yerel olarak GUS'u destekliyorsa, SBOS'a ihtiyacınız yoktur. FM yongası / klon yongası bulunmayan kartlar için, altlık katmanı yazılımdaki sesi karışık sonuçlarla gerçek zamanlı olarak sentezleyebilir.
2) Arayüzü tüketmek için oyun desteği
Yukarıdakilerden tamamen bağımsız olarak, oyunun belirli bir ses kartıyla konuşma yeteneğini sağlayan "sürücü" dür. Bu daha kesin bir şekilde bir ses kitaplığı olarak adlandırılabilir, ancak aynı zamanda Sound Blaster / Windows Ses Sistemi vb. DSP işlemcileriyle de konuşması gerektiğinden, aynı zamanda bir sürücüdür. Bu bakımdan, bir DOS oyunu, kendi içinde bir mini işletim sistemi gibidir.
Bu sürücü, ses kartı arayüzünün temel ilkelerini, oyun geliştiricisi için kullanışlı, tutarlı bir komut dizisine dönüştüren bir yordam kitaplığı biçimini alır.
Kendi başına, bir Sound Blaster, tek bir ses çıkışı akışı ve FM yeteneği sağlar. Bir Gravis Ultrason veya SB AWE, ses kartı-RAM'de yerleşik örneklerin birden çok kısa döngü akışına dalgalı bir arayüz sağlar (AWE için SB dijitalleştirilmiş akışa ve FM'e ek olarak). PC hoparlörü bip sesi çıkarır.
Oyun programcısı bu ayrıntı düzeyini düşünmek istemez - müziği başlatmak, bir patlama çalmak, vb. Bu ayrıntıları soyutlamak sürücünün işi olacaktır: çıktıyı başlat / durdur, ses efektlerini başlat / durdur, karıştır onları, hacimleri değiştirin, vb.
İlk oyunlar, bu sürücülerin doğrudan oyuna bir tür geçici bir tarzda kodlanmasını sağlardı - Halloween Harry yalnızca orijinal Sound Blasters'ı destekleyebilir ve destek oyuna kodlanmıştır. Rise of the Triad'ın kendi devasa ses kütüphanesi vardır; Rott açık kaynak olduğundan, size farklı başlatma ve destek tüm alışkanlıkları görebilirsiniz Github .
Theme Hospital gibi geç, olgun MS-DOS oyunları için Miles veya HMI gibi bir kütüphane kullanılır. Düzinelerce ses kartının bulunduğu bir ses kartı kurulum ekranı gördüyseniz, büyük olasılıkla bu kitaplıklardan birini kullanıyorlar. Bunu belirtiyorum çünkü farklı ses kartı sürücüleri .386
veya .ovl
veya .hmi
dosyaları olarak listeleyen bir dizinde gösterilebilir . One Must Fall 2097 ve Jazz Jackrabbit gibi Epic MegaGames Jensen kütüphanesi oyunları , ses kartı sürücülerini MDRV---R.MUS
dosyalarda depolar .
1) ' deki ses kartı sürücüleri , gerekirse ses kartınızla birlikte bir kurulum diskinde sağlanacaktır.
2) ' deki ses kartı sürücüleri , oyunların kendileriyle veya bir kısmıyla birlikte sağlanacaktır.
Çoğu PCI ses kartında, SoundBlaster veya AdLib'in mevcut olmasını bekleyen oyunlar ve diğer uygulamalar için donanım desteği yoktur. Eski kartlar, "kayıt seviyesi uyumluluğu" olarak bilinen şeyi sağlamak için özel bir çaba sarf etti, böylece çok çeşitli mevcut oyunlarla kullanılabilecekti. PCI geldiğinde, Windows tercih edilen PC işletim sistemi haline geldi, bu nedenle DOS oyunlarıyla uyumluluk, donanım düzeyinde daha az önemliydi.
Bu yeni kartlar için DOS "sürücüsü" aslında, normalde Adlib ve SB donanımı tarafından kullanılan G / Ç bağlantı noktalarına erişimi engelleyen ve bunları mevcut ses kartına komutlara dönüştüren bir öykünme yazılımıdır. Bu, yazılımda ses sentezi ve / veya miksaj yapmayı içerebilir.
Herhangi bir donanım gibi, bir ses kartının donanımının da yapılandırılmamış bir durumda çalıştırıldıktan sonra "işlem için hazırlanması" gerekir.
Genellikle bu, belirli değerlerin belirli donanım bağlantı noktalarına ve / veya bellek adreslerine yazılmasını içerir (söz konusu ses kartının varlığını test ettikten sonra). Bundan sonra ses kartı kullanıma hazırdır.
Windows'ta veya diğer herhangi bir modern İşletim Sisteminde bu, işletim sistemi başlatıldığında ve mevcut herhangi bir donanım tarandığında bir sürücü tarafından yapılır. DOS'ta bu yapılandırma (genellikle) başlatıldığında ses kartını kullanan oyun veya uygulama tarafından yapılır. Uygulama başlamadan önce donanım henüz yapılandırılmamıştır.
Sound Blaster ilk piyasaya sürüldüğünde, dijitalleştirilmiş ses özelliklerini kullanmanın belgelenmiş yolu, Creative Labs tarafından sağlanan sağlanan bir kod bloğunu kullanmaktı. Bellek hizmet veriyorsa, bu kod blobunu kullanmak, onu 16 adresin çoklu bir adreste RAM'e okumayı ve bu adresin normalleştirilmiş bir biçimiyle çağırmayı gerektiriyordu (başladığı her hangi segmentin ofset sıfırı). Bellek hizmet veriyorsa, MIDI arabirimi G / Ç bağlantı noktası işlemleri açısından tanımlanmıştır ve dokümantasyon, yeterince hızlı çalışabilen kodun, DMA kullanmadan bir G / Ç bağlantı noktasına tek tek örnekleri nasıl gönderebileceğini belirtmiş olabilir [ SoundBlaster'ı gerçekte kaç program kullandığına göre], ancak Creative Labs'ın beklentisi, insanların sağlanan kod bloğunu kullanmasıydı. Bununla birlikte, net olduğunu sanmıyorum,programcıların bu blob'u her zaman belirli bir addaki bir dosyaya, alternatif uygulamalarla değiştirilmesine izin verecek şekilde belirli bir yere koymalarını veya programcıların bunun için ne kadar alan ayırmasını beklediklerini.