Apa yang dimaksud dengan driver kartu suara di MS-DOS?
Sepengetahuan saya, baik MS-DOS maupun BIOS tidak menawarkan API apa pun untuk kartu suara. Oleh karena itu konsep "pengemudi" tidak ada, seperti yang kita kenal sekarang. Terlepas dari aksesori dan file contoh dan hal-hal yang berhubungan dengan Windows yang ditemukan dalam paket pengaturan, apa hal penting yang diperlukan untuk program-DOS untuk menggunakan kartu suara?
Satu hal yang telah saya baca di suatu tempat dan tidak dapat ditemukan lagi adalah bahwa beberapa kartu suara 'tidak aktif' saat power-up dan membutuhkan semacam inisialisasi untuk bekerja. Bisakah Anda mengomentari ini?
Jawaban
Cara khas untuk menyediakan layanan "driver" ke program lain di DOS adalah dengan menjalankan program TSR (Terminate and Stay Resident) yang menginstal vektor interupsi perangkat lunak sehingga menjalankan program DOS dapat memanggil INT ini untuk layanan (lihat Daftar Interupsi Ralph Brown ).
Namun, dalam konteks suara, program biasanya akan melakukan I / O perangkat secara langsung dengan membaca dan menulis port I / O secara langsung, menangani interupsi dan transfer DMA jika relevan. Mungkin karena, setidaknya, sebagian karena fakta bahwa layanan multimedia berkembang pesat.
Dengan tidak adanya manajemen sumber daya yang disediakan oleh DOS, Anda harus mendeteksi perangkat secara manual yang mungkin sedikit rumit dan berpotensi memicu kerusakan tergantung pada apa yang terjadi saat dipasang di ruang I / O. Ada kemungkinan bahwa beberapa perangkat hanya memantau jejak I / O minimal sampai urutan init dilakukan untuk mengurangi risiko ini, tetapi ini bukan perilaku yang saya kenali dari rutinitas suara yang saya tulis sendiri untuk AdLib, Roland MPU-401 MIDI dan SoundBlaster klasik kartu-kartu.
Terutama, deteksi didasarkan pada alokasi I / O, IRQ dan DMA konvensional yang dilengkapi dengan konvensi variabel lingkungan yang menentukan titik konfigurasi ini.
Anda pada dasarnya menulis sepotong kode yang seharusnya hanya memberikan hasil tertentu dalam kehadiran perangkat yang diharapkan (fx mengatur timer on-board pada kartu AdLib) dan menjalankannya secara membabi buta terhadap alamat I / O konvensional atau ditentukan dan melihat apa yang jatuh dari langit.
Ringkasan:
Real Sound Blasters tidak membutuhkan driver untuk menginisialisasi atau mendukung mereka. Klon mungkin memerlukan inisialisasi satu kali. Kartu eksotis mungkin memerlukan lapisan terjemahan yang tinggal di memori.
Game menggunakan kumpulan driver per kartu untuk 'berbicara' dengan antarmuka perangkat keras yang sesuai. Ini dapat di-hardcode ke dalam game, atau kumpulan file eksternal seperti di HMI atau Miles.
Bergantung pada situasi Anda, salah satu atau keduanya mungkin berlaku.
Untuk memainkan Halloween Harry dengan Sound Blaster sungguhan, tidak diperlukan file tambahan. Dukungan SB di-hardcode.
Untuk memainkan Theme Hospital di SB Live PCI di bawah MS-DOS, game menggunakan driver Miles pihak ketiga untuk mengabstraksi kartu SB. Kartu itu sendiri membutuhkan driver Live untuk meniru antarmuka perangkat keras dari kartu SB yang lebih lama.
Semua jawaban yang diberikan sejauh ini benar, untuk skenario yang berbeda. Yang mungkin membingungkan adalah ada dua fase berbeda yang keduanya bisa disebut 'driver' dengan benar. Izinkan saya menjelaskan apa yang saya maksud:
Hampir semua yang ada di sini berlaku untuk keluaran audio digital dan dukungan AdLib / OPL2 / OPL3 secara merata.
1) Inisialisasi dan dukungan untuk -memberikan- antarmuka
Rangkaian kartu Sound Blaster pihak pertama yang sah diprogram langsung melalui port I / O. Ada chip on-board yang dikenal sebagai 'DSP' * yang menangani semua pergerakan data ke dan dari kartu. Jika Anda memiliki Sound Blaster yang sebenarnya, dan gim tersebut tahu cara 'berbicara Sound Blaster' ke DSP menggunakan antarmuka yang dijelaskan dalam Panduan Pemrograman Perangkat Keras Sound Blaster Series maka hanya itu yang diperlukan.
* (Jangan bingung dengan 'DSP' dalam penggunaan selanjutnya yang biasanya memberikan efek yang dapat diprogram seperti reverb.)
Jika Anda memiliki kartu klon atau 'kartu yang kompatibel' pihak ketiga, maka salah satu hal berikut ini berlaku:
- Kartu klon benar-benar bertindak sebagai salah satu kartu seri Sound Blaster dan tidak diperlukan intervensi lebih lanjut oleh 'pengemudi'.
- Kartu mulai 'inert' dan membutuhkan beberapa inisialisasi. Hal ini umum terjadi pada kartu yang kompatibel dengan 1995-1997 PnP yang pengaturan IRQ dan DMA-nya dilakukan dalam perangkat lunak dan bukan dengan jumper. Kartu berbasis Avance ALS100 + dan kartu CMI8330 saya memerlukan program start-up untuk dijalankan sebelum dapat berfungsi. Program ini berbicara ke kartu, memberi tahu IRQ dan DMA apa yang akan digunakan, dan sejak saat itu kartu tersebut bertindak sebagai kartu klon. Tidak ada program persisten yang berada di memori untuk menerjemahkan perintah Sound Blaster DSP game ke dalam perintah Avance, dll. Jika Anda telah menginstal 'driver' untuk kartu mirip klon, ini kemungkinan besar berlaku untuk Anda.
- Jika kartu tersebut tidak dapat secara langsung bertindak sebagai kartu klon karena eksotik seperti Ultrasonografi Gravis, atau kartu Sound Blaster / Ensoniq PCI yang sangat baru (secara relatif: pasca 1996), maka kartu tersebut tidak dapat hanya diinisialisasi menjadi bertindak sebagai Kartu klon SB. Kartu ini memerlukan lapisan shim perangkat lunak yang akan dimuat residen untuk mencegat perintah Sound Blaster DSP dan menerjemahkannya secara real time ke perintah yang dipahami kartu. Untuk GUS, ini adalah SBOS. Jika game yang Anda mainkan secara native mendukung GUS, maka Anda tidak memerlukan SBOS. Untuk kartu yang tidak memiliki chip FM / chip klon, lapisan shim dapat mensintesis audio dalam perangkat lunak secara real-time, dengan hasil yang beragam.
2) Dukungan game untuk -mengonsumsi- antarmuka
Sepenuhnya independen dari yang di atas, adalah 'pengemudi' yang menyediakan kemampuan permainan untuk berbicara dengan kartu suara tertentu. Ini bisa lebih tepatnya disebut perpustakaan audio, tetapi karena itu juga harus berbicara dengan prosesor DSP Sound Blaster / Windows Sound System dll, itu juga driver. Dalam hal ini, game DOS adalah semacam sistem operasi mini dalam dirinya sendiri.
Driver ini mengambil bentuk pustaka rutinitas yang mengabstraksi dasar primitif dari antarmuka kartu suara menjadi sekumpulan perintah yang berguna dan konsisten untuk pengembang game.
Dengan sendirinya, Sound Blaster menyediakan aliran output tunggal dari audio dan kemampuan FM. Gravis Ultrasound atau SB AWE menyediakan antarmuka wavetable ke beberapa aliran loop pendek dari sampel sound-card-RAM-resident (selain aliran digital SB dan FM, untuk AWE). Speaker PC berbunyi bip.
Pemrogram game tidak ingin memikirkan tingkat detail ini - mereka ingin memulai musik, memainkan ledakan, dll. Tugas pengemudi adalah untuk mengabstraksi detail ini: mulai / hentikan keluaran, mulai / hentikan efek suara, campur mereka, mengubah volume, dll.
Game awal akan memiliki driver ini yang dikodekan langsung ke dalam game dengan cara ad-hoc - Halloween Harry hanya dapat mendukung Sound Blasters asli, dan dukungan tersebut di-hardcode ke dalam game. Rise of the Triad memiliki perpustakaan suaranya sendiri yang sangat besar; karena RoTT adalah open source, Anda dapat melihat semua inisialisasi dan rutinitas dukungan yang berbeda di Github .
Untuk game MS-DOS dewasa akhir seperti Theme Hospital , perpustakaan seperti Miles atau HMI digunakan. Jika Anda pernah melihat layar pengaturan kartu suara dengan lusinan kartu suara yang tersedia, kemungkinan besar mereka menggunakan salah satu perpustakaan ini. Saya menunjukkan ini karena driver kartu suara yang berbeda dapat ditampilkan dalam daftar direktori sebagai .386
atau .ovl
atau .hmi
file. Epic MegaGames Jensen-library game seperti One Must Fall 2097 dan Jazz Jackrabbit menyimpan driver kartu suara mereka dalam MDRV---R.MUS
file.
Driver kartu suara di 1) akan disediakan pada disk instalasi dengan kartu suara Anda, jika diperlukan.
Driver kartu suara di 2) akan disediakan dengan atau bagian dari permainan itu sendiri.
Kebanyakan kartu suara PCI tidak memiliki dukungan perangkat keras untuk permainan dan aplikasi lain yang mengharapkan adanya SoundBlaster atau AdLib. Kartu yang lebih lama melakukan upaya khusus untuk menyediakan apa yang dikenal sebagai "kompatibilitas level register", sehingga bisa digunakan dengan berbagai macam permainan yang ada. Pada saat PCI tiba, Windows telah menjadi sistem operasi PC pilihan, jadi kompatibilitas dengan game DOS kurang penting di tingkat perangkat keras.
"Driver" DOS untuk kartu yang lebih baru ini sebenarnya adalah perangkat lunak emulasi, yang mencegat akses ke port I / O yang biasanya ditempati oleh perangkat keras Adlib dan SB, dan mengubahnya menjadi perintah ke kartu suara yang sebenarnya. Ini mungkin termasuk melakukan sintesis audio dan / atau pencampuran dalam perangkat lunak.
Seperti perangkat keras lainnya, perangkat keras kartu suara perlu "disiapkan untuk pengoperasian" setelah dinyalakan dalam keadaan tidak dikonfigurasi.
Biasanya ini terdiri dari penulisan nilai tertentu ke port perangkat keras dan / atau alamat memori tertentu (setelah menguji keberadaan kartu suara tersebut). Setelah ini, kartu suara siap untuk dioperasikan.
Di Windows atau Sistem Operasi modern lainnya, hal ini dilakukan oleh driver setelah mem-boot sistem operasi dan memindai perangkat keras apa pun yang ada. Dalam DOS konfigurasi ini (biasanya) dilakukan oleh permainan atau aplikasi yang menggunakan kartu suara ketika dimulai. Sebelum aplikasi dimulai, perangkat keras belum dikonfigurasi.
Ketika Sound Blaster pertama kali diperkenalkan, cara terdokumentasi untuk menggunakan fitur audio digital adalah dengan menggunakan gumpalan kode yang disediakan yang disediakan oleh Creative Labs. Jika memori berfungsi, menggunakan gumpalan kode ini perlu membacanya ke dalam RAM pada beberapa alamat 16, dan memanggilnya dengan bentuk alamat yang dinormalisasi (mengimbangi nol dari segmen apa pun yang kebetulan dimulainya). Jika memori berfungsi, antarmuka MIDI didefinisikan dalam hal operasi port I / O, dan dokumentasinya mungkin telah menentukan bagaimana kode yang dapat berjalan cukup cepat dapat mengeluarkan sampel individu ke port I / O tanpa menggunakan DMA [yang akhirnya menjadi berapa banyak program yang benar-benar menggunakan SoundBlaster], tetapi menurut saya harapan Creative Labs adalah bahwa orang-orang akan menggunakan gumpalan kode yang disediakan. Saya tidak berpikir itu jelas, bagaimanapun,apakah mereka mengharapkan pemrogram akan selalu meletakkan gumpalan itu dalam file dengan nama tertentu di tempat tertentu agar dapat diganti dengan implementasi alternatif, atau berapa banyak ruang yang mereka harapkan untuk dialokasikan oleh pemrogram.