ไดรเวอร์การ์ดเสียงใน MS-DOS คืออะไร?
ตามความรู้ของฉันทั้ง MS-DOS และ BIOS ไม่มี API ใด ๆ สำหรับการ์ดเสียง ดังนั้นแนวคิดเรื่อง "คนขับ" จึงขาดหายไปอย่างที่เรารู้กันในปัจจุบัน นอกเหนือจากอุปกรณ์เสริมและไฟล์ตัวอย่างและสิ่งที่เกี่ยวข้องกับ Windows ที่พบในแพ็คเกจการตั้งค่าสิ่งที่จำเป็นสำหรับโปรแกรม DOS ในการใช้การ์ดเสียงคืออะไร?
สิ่งหนึ่งที่ฉันอ่านที่ไหนสักแห่งและไม่สามารถหาได้อีกต่อไปคือการ์ดเสียงบางตัว 'ไม่ใช้งาน' เมื่อเปิดเครื่องและต้องการการเริ่มต้นบางอย่างเพื่อให้ทำงานได้ คุณสามารถแสดงความคิดเห็นเกี่ยวกับเรื่องนี้ได้หรือไม่?
คำตอบ
วิธีทั่วไปในการให้บริการ "ไดรเวอร์" กับโปรแกรมอื่น ๆ ใน DOS คือการเรียกใช้โปรแกรม TSR (Terminate and Stay Resident) โดยติดตั้งเวกเตอร์ขัดจังหวะซอฟต์แวร์เพื่อให้การรันโปรแกรม DOS สามารถเรียกใช้ INT นี้สำหรับบริการได้ (ดูรายการขัดจังหวะของ Ralph Brown )
อย่างไรก็ตามในบริบทของเสียงโปรแกรมมักจะทำ I / O ของอุปกรณ์โดยตรงโดยการอ่านและเขียนพอร์ต I / O โดยตรงจัดการการขัดจังหวะและการถ่ายโอน DMA เมื่อเกี่ยวข้อง อย่างน้อยส่วนหนึ่งอาจเกิดจากการที่บริการมัลติมีเดียมีการพัฒนาอย่างรวดเร็ว
หากไม่มีการจัดการทรัพยากรโดย DOS คุณจะต้องตรวจจับอุปกรณ์ด้วยตนเองซึ่งอาจเป็นเรื่องยุ่งยากเล็กน้อยและอาจทำให้เกิดข้อขัดข้องขึ้นอยู่กับสิ่งที่เกิดขึ้นในการติดตั้งในพื้นที่ I / O เป็นไปได้ว่าอุปกรณ์บางอย่างตรวจสอบรอยเท้า I / O ขั้นต่ำเท่านั้นจนกว่าจะมีการดำเนินการตามลำดับการเริ่มต้นเพื่อลดความเสี่ยงนี้ แต่นี่ไม่ใช่พฤติกรรมที่ฉันรับรู้จากกิจวัตรเสียงที่ฉันเขียนขึ้นเองสำหรับ AdLib, Roland MPU-401 MIDI และ SoundBlaster แบบคลาสสิก การ์ด
โดยส่วนใหญ่การตรวจจับจะขึ้นอยู่กับการจัดสรร I / O, IRQ และ DMA แบบเดิมที่เสริมด้วยอนุสัญญาตัวแปรสภาพแวดล้อมที่ระบุจุดกำหนดค่าเหล่านี้
โดยพื้นฐานแล้วคุณเขียนโค้ดส่วนหนึ่งที่ควรให้ผลลัพธ์บางอย่างในการตั้งค่าล่วงหน้าของอุปกรณ์ที่คาดไว้เท่านั้น (fx การตั้งค่าตัวจับเวลาออนบอร์ดบนการ์ด AdLib) และเรียกใช้โดยสุ่มสี่สุ่มห้ากับที่อยู่ I / O ทั่วไปหรือที่ระบุและเห็น สิ่งที่หล่นลงมาจากท้องฟ้า
สรุป:
Real Sound Blasters ไม่จำเป็นต้องมีไดรเวอร์เพื่อเริ่มต้นหรือสนับสนุน โคลนอาจต้องเริ่มต้นเพียงครั้งเดียว การ์ดแปลกใหม่อาจต้องการเลเยอร์การแปลที่อาศัยหน่วยความจำ
เกมใช้ชุดไดรเวอร์ต่อการ์ดเพื่อ 'พูดคุย' กับอินเทอร์เฟซฮาร์ดแวร์ที่เหมาะสม สิ่งเหล่านี้สามารถฮาร์ดโค้ดลงในเกมหรือชุดไฟล์ภายนอกเช่นใน HMI หรือไมล์
ขึ้นอยู่กับสถานการณ์ของคุณอาจใช้ข้อใดข้อหนึ่งหรือทั้งสองข้อนี้
ในการเล่นฮัลโลวีนแฮร์รี่บน Sound Blaster จริงไม่จำเป็นต้องใช้ไฟล์พิเศษใด ๆ การสนับสนุน SB เป็นแบบฮาร์ดโค้ด
ในการเล่นTheme Hospitalบน SB Live PCI ภายใต้ MS-DOS เกมนี้จะใช้ไดรเวอร์ Miles ของบุคคลที่สามเพื่อแยกการ์ด SB ออก การ์ดตัวนี้ต้องใช้ไดรเวอร์ Live เพื่อเลียนแบบอินเทอร์เฟซฮาร์ดแวร์ของการ์ด SB รุ่นเก่า
คำตอบทั้งหมดที่ให้มานี้ถูกต้องสำหรับสถานการณ์ต่างๆ สิ่งที่อาจทำให้สับสนคือมีสองขั้นตอนที่แตกต่างกันซึ่งทั้งสองสามารถเรียกได้อย่างถูกต้องว่า 'ไดรเวอร์' ให้ฉันอธิบายสิ่งที่ฉันหมายถึง:
เกือบทุกอย่างที่นี่ใช้กับทั้งเอาต์พุตเสียงดิจิทัลและการสนับสนุน AdLib / OPL2 / OPL3 อย่างเท่าเทียมกัน
1) การเริ่มต้นและสนับสนุนการจัดเตรียมอินเทอร์เฟซ
การ์ดซีรีส์ Sound Blaster ของบุคคลที่หนึ่งที่ถูกต้องตามกฎหมายได้รับการตั้งโปรแกรมโดยตรงผ่านพอร์ต I / O มีชิปออนบอร์ดที่เรียกว่า 'DSP' * ซึ่งจัดการการเคลื่อนย้ายข้อมูลทั้งหมดเข้าและออกจากการ์ด หากคุณมี Sound Blaster ตัวจริงและเกมรู้วิธี 'พูดคุย Sound Blaster' กับ DSP โดยใช้อินเทอร์เฟซที่อธิบายไว้ในคู่มือการเขียนโปรแกรมฮาร์ดแวร์ Sound Blaster Seriesนั่นคือทั้งหมดที่จำเป็น
* (เพื่อไม่ให้สับสนกับ 'DSP' ในการใช้งานในภายหลังซึ่งโดยทั่วไปจะให้เอฟเฟกต์ที่ตั้งโปรแกรมได้เช่น reverb)
หากคุณมีการ์ดโคลนหรือ "การ์ดที่เข้ากันได้" ของบุคคลที่สามให้ใช้ข้อใดข้อหนึ่งต่อไปนี้:
- การ์ดโคลนทำหน้าที่เป็นหนึ่งในการ์ดซีรีส์ Sound Blaster และไม่จำเป็นต้องมีการแทรกแซงจาก 'ไดรเวอร์' อีกต่อไป
- การ์ดเริ่ม 'เฉื่อย' และต้องมีการเริ่มต้นบางอย่าง นี่เป็นเรื่องปกติสำหรับการ์ดที่รองรับ PnP ในปี 1995-1997 ซึ่งการตั้งค่า IRQ และ DMA จะทำในซอฟต์แวร์แทนที่จะใช้จัมเปอร์ การ์ดที่ใช้ Avance ALS100 + ของฉันและการ์ด CMI8330 จำเป็นต้องมีโปรแกรมเริ่มต้นทำงานก่อนจึงจะทำงานได้ โปรแกรมนี้พูดคุยกับการ์ดบอกว่าจะใช้ IRQ และ DMA อะไรและจากจุดนั้นเป็นต้นไปการ์ดจะทำหน้าที่เป็นการ์ดโคลน ไม่มีโปรแกรมถาวรอยู่ในหน่วยความจำเพื่อแปลคำสั่ง Sound Blaster DSP ของเกมเป็นคำสั่ง Avance เป็นต้นหากคุณติดตั้ง 'ไดรเวอร์' สำหรับการ์ดที่มีลักษณะคล้ายโคลนสิ่งนี้น่าจะเหมาะกับคุณมากที่สุด
- หากการ์ดไม่สามารถทำหน้าที่เป็นการ์ดโคลนได้โดยตรงเนื่องจากมีความแปลกใหม่เช่น Gravis Ultrasound หรือการ์ดใหม่ (ค่อนข้างพูด: โพสต์ปี 1996) การ์ด Sound Blaster / Ensoniq PCI จะไม่สามารถเริ่มต้นได้ง่ายๆเพื่อทำหน้าที่เป็น การ์ดโคลน SB การ์ดเหล่านี้ต้องใช้ซอฟต์แวร์ shim layer เพื่อโหลดที่อยู่อาศัยเพื่อสกัดกั้นคำสั่ง Sound Blaster DSP และแปลแบบเรียลไทม์ตามคำสั่งที่การ์ดเข้าใจ สำหรับ GUS นี่คือ SBOS หากเกมที่คุณเล่นรองรับ GUS โดยกำเนิดคุณก็ไม่จำเป็นต้องใช้ SBOS สำหรับการ์ดที่ไม่มีชิป FM / ชิปโคลนอยู่เลเยอร์ชิมอาจสังเคราะห์เสียงในซอฟต์แวร์แบบเรียลไทม์โดยมีผลลัพธ์แบบผสม
2) การสนับสนุนเกมเพื่อ -consume- อินเทอร์เฟซ
เป็นอิสระจากข้างต้นโดยสิ้นเชิงคือ 'ไดรเวอร์' ที่ให้ความสามารถของเกมในการพูดคุยกับการ์ดเสียงที่เฉพาะเจาะจง สิ่งนี้อาจเรียกได้ว่าเป็นไลบรารีเสียงอย่างแม่นยำมากขึ้น แต่เนื่องจากต้องพูดคุยกับโปรเซสเซอร์ DSP ของ Sound Blaster / Windows Sound System และอื่น ๆ จึงเป็นไดรเวอร์ด้วย ในแง่นี้เกม DOS เป็นเหมือนระบบปฏิบัติการขนาดเล็กในตัวมันเอง
ไดรเวอร์นี้ใช้รูปแบบของไลบรารีของรูทีนที่นำพื้นฐานดั้งเดิมของอินเทอร์เฟซการ์ดเสียงมาเป็นชุดคำสั่งที่มีประโยชน์และสอดคล้องกันสำหรับนักพัฒนาเกม
Sound Blaster ให้สตรีมเสียงและ FM แบบเอาต์พุตเดียว Gravis Ultrasound หรือ SB AWE ให้อินเทอร์เฟซแบบ wavetable ไปยังสตรีมแบบวนซ้ำสั้น ๆ ของตัวอย่างการ์ดเสียง - RAM-Resident (นอกเหนือจากสตรีมดิจิทัล SB และ FM สำหรับ AWE) ลำโพง PC ส่งเสียงบี๊บ
โปรแกรมเมอร์เกมไม่ต้องการคิดถึงรายละเอียดระดับนี้พวกเขาต้องการเริ่มเพลงเล่นการระเบิด ฯลฯ มันจะเป็นงานของคนขับที่จะสรุปรายละเอียดเหล่านี้: เอาต์พุตเริ่ม / หยุด, เอฟเฟกต์เสียงเริ่ม / หยุด, มิกซ์ ปรับเปลี่ยนปริมาณ ฯลฯ
เกมในช่วงต้นจะมีการเข้ารหัสไดรเวอร์เหล่านี้ลงในเกมโดยตรงในรูปแบบเฉพาะกิจ - ฮัลโลวีนแฮร์รี่สามารถรองรับเฉพาะ Sound Blasters ดั้งเดิมเท่านั้นและการสนับสนุนนั้นได้รับการเข้ารหัสในเกมRise of the Triadมีคลังเสียงขนาดใหญ่ของตัวเอง ตั้งแต่ Rott เปิดแหล่งที่มา, คุณสามารถดูทั้งหมดของที่แตกต่างกัน initialisation และการสนับสนุนการปฏิบัติบนGithub
สำหรับเกม MS-DOS ที่เป็นผู้ใหญ่ในช่วงปลาย ๆ เช่นTheme Hospital จะใช้ไลบรารีเช่น Miles หรือ HMI หากคุณเคยเห็นหน้าจอการตั้งค่าการ์ดเสียงที่มีการ์ดเสียงมากมายแสดงว่าพวกเขามักจะใช้หนึ่งในไลบรารีเหล่านี้ ฉันชี้ให้เห็นสิ่งนี้เนื่องจากไดรเวอร์การ์ดเสียงที่แตกต่างกันสามารถแสดงในรายการไดเร็กทอรีเป็น.386
หรือ.ovl
หรือ.hmi
ไฟล์ เกมมหากาพย์ MegaGames Jensen ไลบรารีเช่นOne Must Fall 2097และJazz Jackrabbit จะเก็บไดรเวอร์การ์ดเสียงไว้ในMDRV---R.MUS
ไฟล์
ไดรเวอร์การ์ดเสียงใน1)จะมีให้ในดิสก์การติดตั้งพร้อมกับการ์ดเสียงของคุณหากจำเป็น
ไดรเวอร์การ์ดเสียงใน2)จะมีให้หรือเป็นส่วนหนึ่งของเกมด้วยตัวเอง
การ์ดเสียง PCI ส่วนใหญ่ไม่รองรับฮาร์ดแวร์สำหรับเกมและแอพพลิเคชั่นอื่น ๆ ที่คาดว่าจะมี SoundBlaster หรือ AdLib การ์ดรุ่นเก่าใช้ความพยายามเป็นพิเศษในการจัดหาสิ่งที่เรียกว่า "ความเข้ากันได้ของระดับการลงทะเบียน" เพื่อให้สามารถใช้กับเกมที่มีอยู่ได้หลากหลาย เมื่อถึงเวลา PCI Windows ก็กลายเป็นระบบปฏิบัติการของพีซีที่เลือกดังนั้นความเข้ากันได้กับเกม DOS จึงมีความสำคัญน้อยกว่าในระดับฮาร์ดแวร์
"ไดรเวอร์" ของ DOS สำหรับการ์ดรุ่นใหม่เหล่านี้เป็นซอฟต์แวร์จำลองซึ่งสกัดกั้นการเข้าถึงพอร์ต I / O ตามปกติที่ครอบครองโดยฮาร์ดแวร์ Adlib และ SB และแปลงเป็นคำสั่งไปยังการ์ดเสียงจริงที่มีอยู่ ซึ่งอาจรวมถึงการสังเคราะห์เสียงและ / หรือการผสมในซอฟต์แวร์
เช่นเดียวกับฮาร์ดแวร์อื่น ๆ ฮาร์ดแวร์ของการ์ดเสียงจะต้อง“ เตรียมพร้อมสำหรับการใช้งาน” หลังจากเปิดเครื่องในสถานะที่ไม่ได้กำหนดค่า
โดยปกติจะประกอบด้วยการเขียนค่าบางอย่างไปยังพอร์ตฮาร์ดแวร์และ / หรือที่อยู่หน่วยความจำ (หลังจากทดสอบการมีการ์ดเสียงดังกล่าว) หลังจากนี้การ์ดเสียงก็พร้อมสำหรับการใช้งาน
ใน Windows หรือระบบปฏิบัติการสมัยใหม่อื่น ๆ ไดรเวอร์จะดำเนินการเมื่อบูตระบบปฏิบัติการและสแกนหาฮาร์ดแวร์ที่มีอยู่ ใน DOS การกำหนดค่านี้ (โดยปกติ) จะทำโดยเกมหรือแอปพลิเคชันที่ใช้การ์ดเสียงเมื่อเริ่มต้น ก่อนที่แอปพลิเคชันจะเริ่มทำงานฮาร์ดแวร์ยังไม่ได้รับการกำหนดค่า
เมื่อเปิดตัว Sound Blaster เป็นครั้งแรกวิธีการใช้คุณสมบัติเสียงดิจิทัลที่บันทึกไว้คือการใช้โค้ดที่ให้มาซึ่งได้รับจาก Creative Labs หากหน่วยความจำทำหน้าที่โดยใช้โค้ดหยดนี้จำเป็นต้องอ่านลงใน RAM ที่ที่อยู่แบบพหุคูณ 16 และเรียกใช้ด้วยรูปแบบปกติของที่อยู่นั้น (ชดเชยศูนย์ของส่วนใดก็ตามที่เกิดขึ้นเพื่อเริ่มต้นที่) หากหน่วยความจำให้บริการอินเทอร์เฟซ MIDI ถูกกำหนดในแง่ของการทำงานของพอร์ต I / O และเอกสารประกอบอาจระบุว่าโค้ดที่ทำงานได้เร็วพอที่จะส่งออกแต่ละตัวอย่างไปยังพอร์ต I / O ได้อย่างไรโดยไม่ต้องใช้ DMA [ซึ่งสุดท้ายแล้ว เป็นจำนวนโปรแกรมที่ใช้ SoundBlaster จริง ๆ ] แต่ฉันคิดว่าความคาดหวังของ Creative Labs คือผู้คนจะใช้โค้ดหยดที่ให้มา ฉันไม่คิดว่ามันจะชัดเจน แต่ไม่ว่าพวกเขาคาดหวังว่าโปรแกรมเมอร์จะใส่หยดนั้นไว้ในไฟล์ที่มีชื่อที่แน่นอนในที่ใดที่หนึ่งเพื่อให้สามารถแทนที่ด้วยการใช้งานทางเลือกหรือพื้นที่ที่คาดว่าโปรแกรมเมอร์จะจัดสรรให้