Sound Blaster 16: Difference between revisions

Jump to navigation Jump to search
[unchecked revision][unchecked revision]
(→‎Code: add assembly driver code)
Line 77:
 
==Code==
<source lang="C">
//Digital Sound Processor ports
#define DSP_RESET 0x226
#define DSP_READ 0x22A
#define DSP_WRITE 0x22C
#define DSP_BUFFER 0x22A
#define DSP_STATUS 0x22E
#define DSP_INTERRUPT 0x22F
 
//Digital Sound Processor commands
#define DSP_CMD_OUTPUT_RATE 0x41
#define DSP_CMD_TRANSFER_MODE 0xB6
#define DSP_CMD_STOP 0xD5
#define DSP_CMD_VERSION 0xE1
 
//DMA ports
#define DMA_ADDRES 0xC4
#define DMA_COUNT 0xC6
#define DMA_PAGE 0x8B
#define DMA_SINGLE_MASK 0xD4
#define DMA_TRANSFER_MODE 0xD6
#define DMA_CLEAR_POINTER 0xD8
 
void reset_DSP(void) {
outb(DSP_RESET, 1);
sleep(3); //wait 3 microseconds
outb(DSP_RESET, 0);
if(read_DSP()==0xAA) {
sound_blaster=TRUE;
}
}
 
void sb16_init(void) {
reset_DSP();
 
//if DSP doesnt exist
if(sound_blaster==FALSE) {
return;
}
 
//get DSP version
write_DSP(DSP_CMD_VERSION);
sb16_version_major=read_DSP();
sb16_version_minor=read_DSP();
 
}
</source>
 
<source lang="asm">
%macro OUTB 2
Line 153 ⟶ 104:
OUTB 0x0C, 1 ;flip flop
OUTB 0x0B, 0x49 ;transfer mode
OUTB 0x83, 00x01 ;PAGE TRANSFER (EXAMPLE POSITION IN MEMORY 0x[01]0F04) - SET THIS VALUE FOR YOU
OUTB 0x02, 0x000x0F ;POSITION LOW BIT (EXAMPLE POSITION IN MEMORY 0x01[0F]04) - SET THIS VALUE FOR YOU
OUTB 0x02, 0x000x04 ;POSITON HIGH BIT (EXAMPLE POSITION IN MEMORY 0x010F[04]) - SET THIS VALUE FOR YOU
OUTB 0x03, 0xFF ;COUNT LOW BIT (EXAMPLE 0x0FFF) - SET THIS VALUE FOR YOU
OUTB 0x03, 0x0F ;COUNT HIGH BIT (EXAMPLE 0x0FFF) - SET THIS VALUE FOR YOU
Anonymous user
Cookies help us deliver our services. By using our services, you agree to our use of cookies.

Navigation menu