⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dossb.h

📁 这是著名的TCPMP播放器在WINDWOWS,和WINCE下编译通过的源程序.笔者对其中的LIBMAD库做了针对ARM MPU的优化. 并增加了词幕功能.
💻 H
📖 第 1 页 / 共 2 页
字号:
#define SBM_GENDAC_SIGNED		0x20
#define SBM_GENDAC_STEREO		0x40

/* DSP version masks */
#define SBVER_10			0x0100	/* Original SoundBlaster */
#define SBVER_15			0x0105	/* SoundBlaster 1.5 */
#define SBVER_20			0x0200	/* SoundBlaster 2.0 */
#define SBVER_PRO			0x0300	/* SoundBlaster Pro */
#define SBVER_PRO2			0x0301	/* SoundBlaster Pro 2 */
#define SBVER_16			0x0400	/* SoundBlaster 16 */
#define SBVER_AWE32			0x040c	/* SoundBlaster AWE32 */

typedef unsigned char boolean;

#ifndef FALSE
#define FALSE				0
#define TRUE				1
#endif

/* Play mode bits */
#define SBMODE_16BITS			0x0001
#define SBMODE_STEREO			0x0002
#define SBMODE_SIGNED			0x0004

/* Mask for capabilities that never change */
#define SBMODE_MASK			(SBMODE_16BITS | SBMODE_STEREO)

/* You can fill some members of this struct (i.e. port,irq,dma) before
 * calling sb_detect() or sb_open()... this will ignore environment settings.
 */
typedef struct {
	boolean ok;			/* Are structure contents valid? */
	int port, aweport;		/* sb/awe32 base port */
	int irq;			/* SoundBlaster IRQ */
	int dma8, dma16;		/* 8-bit and 16-bit DMAs */
	int maxfreq_mono;		/* Maximum discretization frequency / mono mode */
	int maxfreq_stereo;		/* Maximum discretization frequency / stereo mode */
	unsigned short dspver;		/* DSP version number */
	irq_handle *irq_handle;		/* The interrupt handler */
	dma_buffer *dma_buff;		/* Pre-allocated DMA buffer */
	unsigned char caps;		/* SoundBlaster capabilities (SBMODE_XXX) */
	unsigned char mode;		/* Current SB mode (SBMODE_XXX) */
	boolean open;			/* Whenever the card has been opened */
	volatile int irqcount;		/* Incremented on each IRQ... for diagnostics */
	void (*timer_callback) ();	/* Called TWICE per buffer play */
} __sb_state;

extern __sb_state sb;

extern void __sb_wait();

static inline boolean __sb_dsp_ready_in()
{
	int count;
	for (count = 10000; count >= 0; count--)
		if (inportb(SB_DSP_DATA_IN_STATUS) & SBM_DSP_READY)
			return TRUE;
	return FALSE;
}

static inline boolean __sb_dsp_ready_out()
{
	int count;
	for (count = 10000; count >= 0; count--)
		if ((inportb(SB_DSP_DATA_OUT_STATUS) & SBM_DSP_READY) == 0)
			return TRUE;
	return FALSE;
}

static inline void __sb_dsp_out(unsigned char reg)
{
	__sb_dsp_ready_out();
	outportb(SB_DSP_DATA_OUT, reg);
}

static inline unsigned char __sb_dsp_in()
{
	__sb_dsp_ready_in();
	return inportb(SB_DSP_DATA_IN);
}

static inline void __sb_dspreg_out(unsigned char reg, unsigned char val)
{
	__sb_dsp_out(reg);
	__sb_dsp_out(val);
}

static inline void __sb_dspreg_outwlh(unsigned char reg, unsigned short val)
{
	__sb_dsp_out(reg);
	__sb_dsp_out(val);
	__sb_dsp_out(val >> 8);
}

static inline void __sb_dspreg_outwhl(unsigned char reg, unsigned short val)
{
	__sb_dsp_out(reg);
	__sb_dsp_out(val >> 8);
	__sb_dsp_out(val);
}

static inline unsigned char __sb_dspreg_in(unsigned char reg)
{
	__sb_dsp_out(reg);
	return __sb_dsp_in();
}

static inline void __sb_dsp_ack_dma8()
{
	inportb(SB_DSP_DMA8_IRQ);
}

static inline void __sb_dsp_ack_dma16()
{
	inportb(SB_DSP_DMA16_IRQ);
}

static inline unsigned short __sb_dsp_version()
{
	unsigned short ver;
	__sb_dsp_out(SBDSP_VERSION);
	__sb_dsp_ready_in();
	ver = ((unsigned short)__sb_dsp_in()) << 8;
	ver |= __sb_dsp_in();
	return ver;
}

static inline void __sb_mixer_out(unsigned char reg, unsigned char val)
{
	outportb(SB_MIXER_REGSEL, reg);
	outportb(SB_MIXER_DATA, val);
}

static inline unsigned char __sb_mixer_in(unsigned char reg)
{
	outportb(SB_MIXER_REGSEL, reg);
	return inportb(SB_MIXER_DATA);
}

/* Enable stereo transfers: sbpro mode only */
static inline void __sb_stereo(boolean stereo)
{
	unsigned char val = __sb_mixer_in(SBMIX_OUTPUT_SELECT);
	if (stereo)
		val |= SBM_MIX_STEREO;
	else
		val &= ~SBM_MIX_STEREO;
	__sb_mixer_out(SBMIX_OUTPUT_SELECT, val);
}

/* Detect whenever SoundBlaster is present and fill "sb" structure */
extern boolean sb_detect();
/* Reset SoundBlaster */
extern void sb_reset();
/* Start working with SoundBlaster */
extern boolean sb_open();
/* Finish working with SoundBlaster */
extern boolean sb_close();
/* Enable/disable speaker output */
extern void sb_output(boolean enable);
/* Start playing from DMA buffer in either 8/16 bit mono/stereo */
extern boolean sb_start_dma(unsigned char mode, unsigned int freq);
/* Stop playing from DMA buffer */
extern void sb_stop_dma();
/* Query current position/total size of the DMA buffer */
extern void sb_query_dma(unsigned int *dma_size, unsigned int *dma_pos);

#endif /* __DOSSB_H__ */

/* ex:set ts=4: */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -