mirror of
https://github.com/joncampbell123/dosbox-x.git
synced 2025-05-08 19:32:39 +08:00

NOTE: auto-magically re-imported by HAL 9000 HASH: 7884f673eec92928243a1b7a123569c82235e833 (original)
265 lines
13 KiB
Plaintext
265 lines
13 KiB
Plaintext
|
|
|
|
|
|
|
|
|
|
|
|
----------------------------------------------------------------------
|
|
DOCUMENT:
|
|
|
|
PROGRAMMING DIFFERENCES BETWEEN SOUND MASTER II AND SOUND BLASTER
|
|
FOR RECORDING AND PLAYBACK OF VOICE (DMA AND NON-DMA MODES)
|
|
Version 1.0
|
|
April 2, 1991
|
|
|
|
Programming and Documentation by Ryan Hanlon
|
|
Copyright (c) 1991, Covox, Inc. All Rights Reserved
|
|
|
|
----------------------------------------------------------------------
|
|
QUICK COMPARISON
|
|
|
|
---------------------------------------------------------
|
|
SOUND MASTER II SOUND BLASTER
|
|
---------------------------------------------------------
|
|
BASE PORTS 0x0220, 0x0240, 0x0210, 0x0220, 0x0230
|
|
0x0280, 0x02C0 0x0240, 0x0250, 0x0260
|
|
---------------------------------------------------------
|
|
BASE PORT 8254 TIMER 0 = 0x08 RESET = 0x06
|
|
OFFSET 8254 TIMER 1 = 0x09 READ DATA = 0x0A
|
|
8254 TIMER 2 = 0x0A WRITE COMMAND/DATA = 0x0C
|
|
8254 CONTROL = 0x0B WRITE BUFFER STATUS = 0x0C
|
|
CLEAR IRQ = 0x0C DATA AVAILABLE STATUS = 0x0E
|
|
DISABLE VMDMA = 0x0D
|
|
ENABLE VMDMA = 0x0E
|
|
DAC OFFSET = 0x0F
|
|
---------------------------------------------------------
|
|
MAXIMUM INPUT (ADC) 25KHz INPUT (ADC) 13KHz
|
|
I/O RATES OUTPUT (DAC) 100KHz OUTPUT (DAC) 13KHz
|
|
(8 bit only)
|
|
---------------------------------------------------------
|
|
DATA 2 bit, 3 bit, 4 bit 2 bit, 3 bit, 4 bit
|
|
true ADPCM (high quality) differential PCM (not ADPCM)
|
|
COMPRESSION optional silence encoding optional silence encoding
|
|
---------------------------------------------------------
|
|
AVAILABLE 3, 4, 5, 6, 7 2, 3, 5, 7
|
|
IRQ'S
|
|
---------------------------------------------------------
|
|
COMMANDS N/A 8 BIT DAC OUTPUT = 0x10
|
|
8 BIT ADC INPUT = 0x20
|
|
8 BIT DMA INPUT = 0x24
|
|
8 BIT DMA OUTPUT = 0x14
|
|
2 BIT DMA OUTPUT = 0x16
|
|
2 BIT DMA REFERENCE = 0x17
|
|
2.6 BIT DMA OUTPUT = 0x76
|
|
2.6 BIT DMA REF. = 0x77
|
|
4 BIT DMA OUTPUT = 0x74
|
|
4 BIT DMA REFERENCE = 0x75
|
|
HALT DMA = 0xD0
|
|
CONTINUE DMA = 0xD4
|
|
SET TIME CONSTANT = 0x40
|
|
MULTI-CHANNEL DAC = 0x6?
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
TURN ON SPEAKER = 0xD1
|
|
TURN OFF SPEAKER = 0xD3
|
|
CARD IDENTIFICATION = 0xE0
|
|
GET DSP VERSION NUM = 0xE1
|
|
----------------------------------------------------------------------
|
|
NON-DMA INPUT OF 8 BIT PCM SOUND DATA
|
|
|
|
SOUND MASTER II SOUND BLASTER
|
|
--------------------------- --------------------------------
|
|
INITIALIZE SM II FOR INPUT INITIALIZE THE DSP FOR INPUT OF PCM DATA
|
|
1. Set up timing method. 1. Reset the DSP chip by writing a '1'
|
|
to the RESET PORT (offset 0x06).
|
|
2. Wait 3 micro-seconds.
|
|
3. Write a '0' to the RESET PORT.
|
|
4. Insure that the DSP was initialized
|
|
by polling for '0xAA' at the READ
|
|
DATA PORT (offset 0x0A)
|
|
5. Wait for the MSB of the WRITE DATA
|
|
COMMAND PORT (offset 0x0C) to equal
|
|
0.
|
|
6. Write 0xD3 command (TURN OFF SPEAKER)
|
|
to the WRITE DATA/COMMAND PORT.
|
|
7. Set up timing method.
|
|
|
|
INPUT PCM DATA FROM SM II INPUT PCM DATA FROM DSP
|
|
2. Read byte of PCM data 8. Wait for the MSB of the WRITE DATA/
|
|
from DAC PORT (offset COMMAND PORT (offset 0x0C) to equal
|
|
0x0F). 0.
|
|
3. Wait for correct timing 9. Write 0x20 command (8 BIT ADC INPUT)
|
|
and repeat step 2 until to the WRITE DATA/COMMAND PORT.
|
|
end of transfer. 10. Wait for the MSB of the WRITE DATA/
|
|
COMMAND PORT (offset 0x0C) to equal
|
|
1.
|
|
11. Read byte of PCM data from the READ
|
|
DATA PORT (offset 0x0A).
|
|
12. Wait for correct timing and repeat
|
|
steps 8 through 11 until end of
|
|
transfer.
|
|
----------------------------------------------------------------------
|
|
NON-DMA OUTPUT OF 8 BIT PCM SOUND DATA
|
|
|
|
SOUND MASTER II SOUND BLASTER
|
|
--------------------------- --------------------------------
|
|
INITIALIZE SM II FOR OUTPUT INITIALIZE THE DSP FOR OUTPUT OF PCM DATA
|
|
1. Set up timing method. 1. Reset the DSP chip by writing a '1'
|
|
to the RESET PORT (offset 0x06).
|
|
2. Wait 3 micro-seconds.
|
|
3. Write a '0' to the RESET PORT.
|
|
4. Insure that the DSP was initialized
|
|
by polling for '0xAA' at the READ
|
|
DATA PORT (offset 0x0A)
|
|
5. Wait for the MSB of the WRITE DATA
|
|
COMMAND PORT (offset 0x0C) to equal
|
|
0.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
6. Write 0xD1 command (TURN ON SPEAKER)
|
|
to the WRITE DATA/COMMAND PORT.
|
|
7. Set up timing method.
|
|
|
|
OUTPUT PCM DATA FROM SM II INPUT PCM DATA FROM DSP
|
|
2. Read byte of PCM data 8. Wait for the MSB of the WRITE DATA/
|
|
from DAC PORT (offset COMMAND PORT (offset 0x0C) to equal
|
|
0x0F). 0.
|
|
3. Wait for correct timing 9. Write 0x10 command (8 BIT ADC OUTPUT)
|
|
and repeat step 2 until to the WRITE DATA/COMMAND PORT.
|
|
end of transfer. 10. Wait for the MSB of the WRITE DATA/
|
|
COMMAND PORT (offset 0x0C) to equal 1.
|
|
11. Write a byte of PCM data to the WRITE
|
|
DATA/COMMAND PORT (offset 0x0C).
|
|
12. Wait for correct timing and repeat
|
|
steps 8 through 11 until end of
|
|
transfer.
|
|
----------------------------------------------------------------------
|
|
DMA INPUT OF 8 BIT PCM SOUND DATA
|
|
|
|
SOUND MASTER II SOUND BLASTER
|
|
--------------------------- --------------------------------
|
|
INITIALIZE THE SM II FOR INPUT INITIALIZE THE DSP FOR INPUT OF PCM DATA
|
|
1. Disable VMDMA on the sm II 1. Reset the DSP chip by writing a '1'
|
|
by writting any value to to the RESET PORT (offset 0x06).
|
|
the DISABLE VMDMA PORT 2. Wait 3 micro-seconds.
|
|
(offset 0x0D). 3. Write a '0' to the RESET PORT.
|
|
4. Insure that the DSP was initialized
|
|
by polling for '0xAA' at the READ
|
|
DATA PORT (offset 0x0A)
|
|
5. Wait for the MSB of the WRITE DATA
|
|
COMMAND PORT (offset 0x0C) to equal
|
|
0.
|
|
6. Write 0xD3 command (TURN OFF SPEAKER)
|
|
to the WRITE DATA/COMMAND PORT.
|
|
|
|
2. Setup 8237 DMA controller 7. Setup 8237 DMA controller and IRQ
|
|
and IRQ handlers. handlers.
|
|
|
|
3. Write control byte to the 8. Wait for the MSB of the WRITE DATA
|
|
8254 controller on the COMMAND PORT to equal 0.
|
|
SM II. 9. Write 0x40 command (SET TIME CONSTANT)
|
|
4. Write LSB of the input rate to the WRITE DATA/COMMAND PORT.
|
|
to the 8254 on the SM II. 10. Wait for the MSB of the WRITE DATA
|
|
5. Write MSB of the input rate COMMAND PORT to equal 0.
|
|
to the 8254 on the SM II. 11. Write one byte value to WRITE DATA/
|
|
COMMAND PORT for desired input rate.
|
|
|
|
6. Enable VMDMA on the SM II 12. Wait for the MSB of the WRITE DATA
|
|
by writing any value to the COMMAND PORT to equal 0.
|
|
ENABLE VMDMA PORT (offset 13. Write 0x24 command (8 BIT DMA INPUT)
|
|
0x0E). to the WRITE DATA/COMMAND PORT.
|
|
|
|
----------------------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
DMA OUTPUT OF 8 BIT PCM SOUND DATA
|
|
|
|
SOUND MASTER II SOUND BLASTER
|
|
--------------------------- --------------------------------
|
|
INITIALIZE THE SM II FOR OUTPUT INITIALIZE THE DSP FOR OUTPUT OF PCM DATA
|
|
1. Disable VMDMA on the sm II 1. Reset the DSP chip by writing a '1'
|
|
by writting any value to to the RESET PORT (offset 0x06).
|
|
the DISABLE VMDMA PORT 2. Wait 3 micro-seconds.
|
|
(offset 0x0D). 3. Write a '0' to the RESET PORT.
|
|
4. Insure that the DSP was initialized
|
|
by polling for '0xAA' at the READ
|
|
DATA PORT (offset 0x0A)
|
|
5. Wait for the MSB of the WRITE DATA
|
|
COMMAND PORT (offset 0x0C) to equal
|
|
0.
|
|
6. Write 0xD2 command (TURN ON SPEAKER)
|
|
to the WRITE DATA/COMMAND PORT.
|
|
|
|
2. Setup 8237 DMA controller 7. Setup 8237 DMA controller and IRQ
|
|
and IRQ handlers. handlers.
|
|
|
|
3. Write control byte to the 8. Wait for the MSB of the WRITE DATA
|
|
8254 controller on the COMMAND PORT to equal 0.
|
|
SM II. 9. Write 0x40 command (SET TIME CONSTANT)
|
|
4. Write LSB of the input rate to the WRITE DATA/COMMAND PORT.
|
|
to the 8254 on the SM II. 10. Wait for the MSB of the WRITE DATA
|
|
5. Write MSB of the input rate COMMAND PORT to equal 0.
|
|
to the 8254 on the SM II. 11. Write one byte value to WRITE DATA/
|
|
COMMAND PORT for desired input rate.
|
|
6. Enable VMDMA on the SM II 12. Wait for the MSB of the WRITE DATA
|
|
by writing any value to the COMMAND PORT to equal 0.
|
|
ENABLE VMDMA PORT (offset 13. Write 0x14 command (8 BIT DMA OUTPUT)
|
|
0x0E). to the WRITE DATA/COMMAND PORT.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|