MS-DOS에서 실제로 사운드 카드 드라이버는 무엇입니까?

Dec 31 2020

내가 아는 한 MS-DOS 나 BIOS는 사운드 카드 용 API를 제공하지 않습니다. 그러므로 오늘날 우리가 알고 있듯이 "운전자"라는 개념은 없습니다. 설치 패키지에있는 액세서리와 샘플 파일 및 Windows 관련 항목 외에 DOS 프로그램이 사운드 카드를 사용하는 데 필요한 필수 요소는 무엇입니까?

내가 어딘가에서 읽었고 더 이상 찾을 수없는 한 가지는 전원을 켤 때 일부 사운드 카드가 '비활성'상태이며 작동하려면 일종의 초기화가 필요하다는 것입니다. 이것에 대해 의견을 주시겠습니까?

답변

5 Retrograde Dec 31 2020 at 06:21

DOS에서 다른 프로그램에 "드라이버"서비스를 제공하는 일반적인 방법은 소프트웨어 인터럽트 벡터를 설치하는 TSR (Terminate and Stay Resident) 프로그램을 실행하여 DOS 프로그램이 서비스를 위해이 INT를 호출 할 수 있도록하는 것입니다 ( Ralph Brown의 인터럽트 목록 참조 ).

그러나 사운드 컨텍스트에서 프로그램은 일반적으로 I / O 포트를 직접 읽고 쓰고 관련이있을 때 인터럽트 및 DMA 전송을 처리하여 장치 I / O를 직접 수행합니다. 적어도 부분적으로는 멀티미디어 서비스가 빠르게 발전하고 있기 때문일 수 있습니다.

DOS에서 제공하는 리소스 관리가 없으면 장치를 수동으로 감지해야하는데,이 장치는 약간 까다로울 수 있으며 I / O 공간에 설치된 항목에 따라 충돌을 유발할 수 있습니다. 일부 장치는이 위험을 줄이기 위해 초기화 시퀀스가 ​​수행 될 때까지 최소한의 I / O 풋 프린트 만 ​​모니터링 할 수 있지만, 이것은 내가 AdLib, Roland MPU-401 MIDI 및 클래식 SoundBlaster에 대해 직접 작성한 사운드 루틴에서 인식하는 동작이 아닙니다. 카드.

주로 감지는 이러한 구성 지점을 지정하는 환경 변수 규칙에 의해 보완 된 기존 I / O, IRQ 및 DMA 할당을 기반으로했습니다.

기본적으로 예상되는 장치 (AdLib 카드에 온보드 타이머를 설정하는 fx)에 특정 결과 만 제공하는 코드를 작성하고 기존 또는 지정된 I / O 주소에 대해 맹목적으로 실행하고 하늘에서 떨어진 것.

22 knol Dec 31 2020 at 18:10

요약:

  1. Real Sound Blaster는 초기화하거나 지원하는 데 드라이버가 필요하지 않습니다. 클론은 일회성 초기화가 필요할 수 있습니다. 이국적인 카드에는 메모리 상주 번역 레이어가 필요할 수 있습니다.

  2. 게임은 카드 별 드라이버 모음을 사용하여 적절한 하드웨어 인터페이스와 '대화'합니다. 이것들은 게임에 하드 코딩되거나 HMI 또는 Miles와 같은 외부 파일 모음 일 수 있습니다.

상황에 따라이 중 하나 또는 둘 다 적용될 수 있습니다.

실제 Sound Blaster에서 Halloween Harry 를 재생하려면 추가 파일이 필요하지 않습니다. SB 지원은 하드 코딩됩니다.

MS-DOS에서 SB Live PCI에서 Theme Hospital 을 플레이하기 위해 게임은 타사 Miles 드라이버를 사용하여 SB 카드를 추상화합니다. 카드 자체에는 구형 SB 카드의 하드웨어 인터페이스를 모방하기 위해 Live 드라이버가 필요합니다.


지금까지 여기에 제공된 모든 답변은 다른 시나리오에 대해 정확합니다. 혼란 스러울 수있는 것은 둘 다 '드라이버'라고 정확하게 불릴 수있는 두 가지 별개의 단계가 있다는 것입니다. 내가 의미하는 바를 설명하겠습니다.

여기에있는 거의 모든 것이 디지털화 된 오디오 출력과 AdLib / OPL2 / OPL3 지원 모두에 동일하게 적용됩니다.

1) 인터페이스를 제공하기위한 초기화 및 지원

합법적 인 자사 Sound Blaster 시리즈 카드는 I / O 포트를 통해 직접 프로그래밍됩니다. 카드와의 모든 데이터 이동을 처리하는 'DSP'*로 알려진 칩이 내장되어 있습니다. 실제 Sound Blaster가 있고 게임이 Sound Blaster 시리즈 하드웨어 프로그래밍 가이드에 설명 된 인터페이스를 사용하여 DSP에 'Sound Blaster와 대화'하는 방법을 알고 있다면 그게 전부입니다.

* (일반적으로 리버브와 같은 프로그램 가능한 효과를 제공하는 나중에 사용하는 'DSP'와 혼동하지 마십시오.)

복제 카드 또는 타사 '호환 카드'가있는 경우 다음 중 하나가 적용됩니다.

  • 복제 카드는 Sound Blaster 시리즈 카드 중 하나로 정확히 작동하며 '드라이버'의 추가 개입이 필요하지 않습니다.
  • 카드는 '비활성'상태로 시작하며 일부 초기화가 필요합니다. 이는 IRQ 및 DMA 설정이 점퍼가 아닌 소프트웨어에서 수행되는 1995-1997 PnP 호환 카드에서 일반적입니다. 내 Avance ALS100 + 기반 카드와 CMI8330 카드는 작동하기 전에 시작 프로그램을 실행해야합니다. 이 프로그램은 카드와 통신하여 사용할 IRQ 및 DMA를 알려주며, 그 시점부터 카드는 복제 카드 역할을합니다. 게임의 Sound Blaster DSP 명령을 Avance 명령 등으로 변환하기위한 영구 프로그램이 메모리에 상주하지 않습니다. 클론과 유사한 카드 용 '드라이버'를 설치 한 경우이 방법이 적용됩니다.
  • 카드가 Gravis Ultrasound처럼 이국적이거나 아주 새로운 (상대적으로 말하면 : 1996 년 이후) Sound Blaster / Ensoniq PCI 카드이기 때문에 복제 카드로 직접 작동 할 수없는 경우 간단히 초기화하여 SB 클론 카드. 이러한 카드에는 Sound Blaster DSP 명령을 가로 채서 카드가 이해하는 명령으로 실시간으로 변환하기 위해 상주하는 소프트웨어 shim 레이어가 필요합니다. GUS의 경우 SBOS입니다. 플레이중인 게임이 기본적으로 GUS를 지원하는 경우 SBOS가 필요하지 않습니다. FM 칩 / 클론 칩이없는 카드의 경우 shim 레이어가 실시간으로 소프트웨어에서 오디오를 합성하여 혼합 된 결과를 얻을 수 있습니다.

2) 인터페이스를-소비하기위한 게임 지원

위와 완전히 독립적으로 특정 사운드 카드와 대화 할 수있는 게임 기능을 제공하는 '드라이버'입니다. 좀 더 정확하게는 오디오 라이브러리라고 할 수 있지만 Sound Blaster / Windows Sound System 등 DSP 프로세서와도 통신해야하므로 드라이버이기도합니다. 이 점에서 DOS 게임은 일종의 미니 운영 체제와 같습니다.

이 드라이버는 사운드 카드 인터페이스의 기본 기본 요소를 게임 개발자를위한 유용하고 일관된 명령 집합으로 추상화하는 루틴 라이브러리 형식을 취합니다.

그 자체로 Sound Blaster는 오디오 및 FM 기능의 단일 출력 스트림을 제공합니다. Gravis Ultrasound 또는 SB AWE는 사운드 카드 RAM 상주 샘플의 여러 짧은 루프 스트림에 대한 웨이브 테이블 인터페이스를 제공합니다 (AWE를위한 SB 디지털 스트림 및 FM에 추가). PC 스피커에서 신호음이 울립니다.

게임 프로그래머는 이러한 수준의 세부 사항에 대해 생각하고 싶지 않습니다. 음악을 시작하고, 폭발을 연주하는 등의 작업을 원합니다. 시작 / 중지 출력, 시작 / 중지 사운드 효과, 믹스 등 세부 정보를 추상화하는 것이 운전자의 임무입니다. 볼륨 변경 등

초기 게임에서는 이러한 드라이버를 일종의 임시 방식으로 게임에 직접 코딩했습니다. Halloween Harry 는 오리지널 사운드 블래스터 만 지원할 수 있으며 지원은 게임에 하드 코딩되어 있습니다. Rise of the Triad 에는 자체적으로 거대한 사운드 라이브러리가 있습니다. RoTT는 오픈 소스이므로 Github 에서 다양한 초기화 및 지원 루틴을 모두 볼 수 있습니다 .

Theme Hospital 과 같은 최신 성숙 MS-DOS 게임의 경우 Miles 또는 HMI와 같은 라이브러리가 사용됩니다. 수십 개의 사운드 카드를 사용할 수있는 사운드 카드 설정 화면을 본 경우 이러한 라이브러리 중 하나를 사용할 가능성이 높습니다. 다른 사운드 카드 드라이버가 .386또는 .ovl또는 .hmi파일 로 나열된 디렉토리에 표시 될 수 있기 때문에 이것을 지적 합니다. One Must Fall 2097Jazz Jackrabbit 과 같은 Epic MegaGames Jensen 라이브러리 게임 은 사운드 카드 드라이버를 MDRV---R.MUS파일 에 저장합니다.


1) 의 사운드 카드 드라이버는 필요한 경우 사운드 카드와 함께 설치 디스크에 제공됩니다.

2) 의 사운드 카드 드라이버 는 게임 자체와 함께 제공되거나 게임의 일부입니다.

16 Chromatix Dec 31 2020 at 12:16

대부분의 PCI 사운드 카드에는 SoundBlaster 또는 AdLib이있을 것으로 예상되는 게임 및 기타 응용 프로그램에 대한 하드웨어 지원이 없습니다. 이전 카드는 "등록 레벨 호환성"을 제공하기 위해 특별한 노력을 기울 였기 때문에 기존의 다양한 게임에서 사용할 수있었습니다. PCI가 도착했을 때 Windows는 PC 운영 체제가되었으므로 DOS 게임과의 호환성은 하드웨어 수준에서 덜 중요했습니다.

이러한 최신 카드의 DOS "드라이버"는 실제로 에뮬레이션 소프트웨어로, Adlib 및 SB 하드웨어가 일반적으로 사용하는 I / O 포트에 대한 액세스를 가로 채서이를 실제 사운드 카드에 대한 명령으로 변환합니다. 여기에는 소프트웨어에서 오디오 합성 및 / 또는 믹싱 수행이 포함될 수 있습니다.

4 StarCat Dec 31 2020 at 06:29

다른 하드웨어와 마찬가지로 사운드 카드의 하드웨어는 구성되지 않은 상태에서 전원을 켠 후 "작동 준비"를해야합니다.

일반적으로 이것은 특정 하드웨어 포트 및 / 또는 메모리 주소에 특정 값을 쓰는 것으로 구성됩니다 (해당 사운드 카드가 있는지 테스트 한 후). 그런 다음 사운드 카드를 작동 할 준비가되었습니다.

Windows 또는 기타 최신 운영 체제에서는 운영 체제를 부팅하고 존재하는 하드웨어를 검색 할 때 드라이버가이 작업을 수행합니다. DOS에서이 구성은 (보통) 사운드 카드가 시작될 때 사용하는 게임이나 응용 프로그램에 의해 수행됩니다. 응용 프로그램이 시작되기 전에 하드웨어가 아직 구성되지 않았습니다.

1 supercat Jan 02 2021 at 00:37

Sound Blaster가 처음 소개되었을 때 디지털화 된 오디오 기능을 사용하는 문서화 된 방법은 Creative Labs에서 제공 한 제공된 코드 덩어리를 사용하는 것이 었습니다. 메모리가 제공되는 경우이 코드 blob을 사용하려면 16의 배수 주소에서 RAM으로 읽고 해당 주소의 정규화 된 형식으로 호출해야합니다 (시작된 세그먼트의 오프셋 0). 메모리가 제공되는 경우 MIDI 인터페이스는 I / O 포트 작동 측면에서 정의되었으며, 문서는 충분히 빠르게 실행할 수있는 코드가 DMA를 사용하지 않고 I / O 포트에 개별 샘플을 출력 할 수있는 방법을 지정했을 수 있습니다. 실제로 SoundBlaster를 사용하는 프로그램의 수는 몇 개입니까?]하지만 Creative Labs의 기대는 사람들이 제공된 코드 덩어리를 사용하는 것이 었습니다. 나는 그것이 분명하다고 생각하지 않지만프로그래머가 대체 구현으로 대체 할 수 있도록 특정 위치에 특정 이름을 가진 파일에 항상 해당 blob을 넣을 것이라고 예상했는지 또는 프로그래머가 할당 할 공간을 예상했는지 여부.