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

📄 doswss.h

📁 wince下著名的视频播放器源码
💻 H
字号:
/*	MikMod sound library	(c) 1998, 1999 Miodrag Vallat and others - see file AUTHORS for	complete list.	This library is free software; you can redistribute it and/or modify	it under the terms of the GNU Library General Public License as	published by the Free Software Foundation; either version 2 of	the License, or (at your option) any later version.	This program is distributed in the hope that it will be useful,	but WITHOUT ANY WARRANTY; without even the implied warranty of	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the	GNU Library General Public License for more details.	You should have received a copy of the GNU Library General Public	License along with this library; if not, write to the Free Software	Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA	02111-1307, USA.*//*==============================================================================  $Id: doswss.h,v 1.1 2004/02/01 02:01:17 raph Exp $  Windows Sound System and compatible soundcards definitions==============================================================================*/#ifndef __DOSWSS_H__#define __DOSWSS_H__#include "dosdma.h"#include "dosirq.h"#define WSS_ADDR			(wss.port + 0x04)#define WSS_DATA			(wss.port + 0x05)#define WSS_STATUS			(wss.port + 0x06)#define WSS_PIO				(wss.port + 0x07)/* WSS_ADDR: Bits 0-4 select an internal register to read/write */#define WSSR_INPUT_L			0x00	/* Left input control register */#define WSSR_INPUT_R			0x01	/* RIght input control register */#define WSSR_AUX1_L			0x02	/* Left Aux #1 input control */#define WSSR_AUX1_R			0x03	/* Right Aux #1 input control */#define WSSR_CD_L			0x04	/* Left Aux #2 input control */#define WSSR_CD_R			0x05	/* Right Aux #2 input control */#define WSSR_MASTER_L			0x06	/* Left output control */#define WSSR_MASTER_R			0x07	/* Right output control */#define WSSR_PLAY_FORMAT		0x08	/* Clock and data format */#define WSSR_IFACE_CTRL			0x09	/* Interface control */#define WSSR_PIN_CTRL			0x0a	/* Pin control */#define WSSR_TEST_INIT			0x0b	/* Test and initialization */#define WSSR_MISC_INFO			0x0c	/* Miscellaneaous information */#define WSSR_LOOPBACK			0x0d	/* Digital Mix */#define WSSR_COUNT_HIGH			0x0e	/* Playback Upper Base Count */#define WSSR_COUNT_LOW			0x0f	/* Playback Lower Base Count */#define WSSR_ALT_FEATURE_1		0x10	/* alternate #1 feature enable */#define WSSR_ALT_FEATURE_2		0x11	/* alternate #2 feature enable */#define WSSR_LINE_IN_L			0x12	/* left line input control */#define WSSR_LINE_IN_R			0x13	/* right line input control */#define WSSR_TIMER_LOW			0x14	/* timer low byte */#define WSSR_TIMER_HIGH			0x15	/* timer high byte */#define WSSR_IRQ_STATUS			0x18	/* irq status register */#define WSSR_MONO_IO_CTRL		0x1a	/* mono input/output control */#define WSSR_REC_FORMAT			0x1c	/* record format */#define WSSR_REC_COUNT_HIGH		0x1e	/* record upper count */#define WSSR_REC_COUNT_LOW		0x1f	/* record lower count *//* WSS_ADDR bits 7-5 definition */#define WSSM_INIT			0x80	/* Codec is initializing */#define WSSM_MCE			0x40	/* Mode change enable */#define WSSM_TRD			0x20	/* Transfer Request Disable *//* bits 4-0 are indirect register address (0-15) *//* WSS_STATUS bit masks */#define WSSM_CUL			0x80	/* Capture data upper/lower byte */#define WSSM_CLR			0x40	/* Capture left/right sample */#define WSSM_CRDY			0x20	/* Capture data read */#define WSSM_SOUR			0x10	/* Playback over/under run error */#define WSSM_PUL			0x08	/* Playback upper/lower byte */#define WSSM_PLR			0x04	/* Playback left/right sample */#define WSSM_PRDY			0x02	/* Playback data register read */#define WSSM_INT			0x01	/* interrupt status *//* Definitions for output level registers */#define WSSM_MUTE			0x80	/* Mute this output source *//* bits 5-0 are left output attenuation select (0-63) *//* bits 5-0 are right output attenuation select (0-63) *//* Definitions for clock and data format register (WSSR_PLAY_FORMAT) */#define WSSM_STEREO			0x10	/* stero mode */#define WSSM_ULAW_8			0x20	/* 8-bit U-law companded */#define WSSM_16BITS			0x40	/* 16 bit twos complement data - little endian */#define WSSM_ALAW_8			0x60	/* 8-bit A-law companded */#define WSSM_16BITS_BE			0xc0	/* 16-bit twos complement data - big endian */#define WSSM_ADPCM_16			0xa0	/* 16-bit ADPCM *//* Bits 3-1 define frequency divisor */#define WSSM_XTAL1			0x00	/* 24.576 crystal */#define WSSM_XTAL2			0x01	/* 16.9344 crystal *//* Definitions for interface control register (WSSR_IFACE_CTRL) */#define WSSM_CAPTURE_PIO		0x80	/* Capture PIO enable */#define WSSM_PLAYBACK_PIO		0x40	/* Playback PIO enable */#define WSSM_AUTOCALIB			0x08	/* auto calibrate */#define WSSM_SINGLE_DMA			0x04	/* Use single DMA channel */#define WSSM_PLAYBACK_ENABLE		0x01	/* playback enable *//* Definitions for Pin control register (WSSR_PIN_CTRL) */#define WSSM_IRQ_ENABLE			0x02	/* interrupt enable */#define WSSM_XCTL1			0x40	/* external control #1 */#define WSSM_XCTL0			0x80	/* external control #0 *//* Definitions for WSSR_TEST_INIT register */#define WSSM_CALIB_IN_PROGRESS 0x20	/* auto calibrate in progress *//* Definitions for misc control register (WSR_MISC_INFO) */#define WSSM_MODE2			0x40	/* MODE 2 */#define WSSM_MODE3			0x6c	/* MODE 3 - enhanced mode *//* Definitions for codec irq status (WSSR_IRQ_STATUS) */#define WSSM_PLAYBACK_IRQ		0x10#define WSSM_RECORD_IRQ			0x20#define WSSM_TIMER_IRQ			0x40typedef unsigned char boolean;#ifndef FALSE#define FALSE				0#define TRUE				1#endif/* Play mode bits */#define WSSMODE_16BITS			0x0001#define WSSMODE_STEREO			0x0002#define WSSMODE_SIGNED			0x0004/* You can fill some members of this struct (i.e. port,irq,dma) before * calling wss_detect() or wss_open()... this will ignore environment settings. */typedef struct {	boolean ok;			/* Set if this structure is properly filled */	int port;			/* Base codec port */	int irq;			/* codec IRQ */	int dma;			/* codec DMA */	irq_handle *irq_handle;		/* The interrupt handler */	dma_buffer *dma_buff;		/* Pre-allocated DMA buffer */	unsigned char mode;		/* Current WSS mode (WSSMODE_XXX) */	boolean open;			/* Whenever the card has been opened */	int samples;			/* Number of samples in DMA buffer */	unsigned char level;		/* Output level (63..0): doesn't change when mute */	unsigned char curlevel;		/* Current output level (63(min)..0(max)) */	volatile int irqcount;		/* Incremented on each IRQ... for diagnostics */	void (*timer_callback) ();	/* Called TWICE per buffer play */} __wss_state;extern __wss_state wss;/* Wait until codec finishes initialization */static inline boolean __wss_wait(){	int count;	for (count = 10000; count >= 0; count--)		if (!(inportb(WSS_ADDR) & WSSM_INIT))			return TRUE;	return FALSE;}static inline void __wss_outreg(unsigned char reg, unsigned char val){	outportb(WSS_ADDR, reg);	outportb(WSS_DATA, val);}static inline unsigned char __wss_inreg(unsigned char reg){	outportb(WSS_ADDR, reg);	return inportb(WSS_DATA);}/* Set some bits in a specific register */static inline void __wss_regbit_set(unsigned char reg, unsigned char mask){	outportb(WSS_ADDR, reg);	outportb(WSS_DATA, inportb(WSS_DATA) | mask);}/* Reset some bits in a specific register */static inline void __wss_regbit_reset(unsigned char reg, unsigned char mask){	outportb(WSS_ADDR, reg);	outportb(WSS_DATA, inportb(WSS_DATA) & ~mask);}/* Detect whenever WSS is present and fill "wss" structure */extern boolean wss_detect();/* Reset WSS */extern void wss_reset();/* Open WSS for usage */extern boolean wss_open();/* Finish working with WSS */extern boolean wss_close();/* Enable/disable speaker output */extern void wss_output(boolean enable);/* Adjust frequency rate to nearest WSS available */extern unsigned int wss_adjust_freq(unsigned int freq);/* Start playing from DMA buffer in either 8/16 bit mono/stereo */extern boolean wss_start_dma(unsigned char mode, unsigned int freq);/* Stop playing from DMA buffer */extern void wss_stop_dma();/* Query current position/total size of the DMA buffer */extern void wss_query_dma(unsigned int *dma_size, unsigned int *dma_pos);/* Set output level (0(min)-63(max)) */extern void wss_level(int level);#endif /* __DOSWSS_H__ *//* ex:set ts=4: */

⌨️ 快捷键说明

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