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

📄 nes_apu.h

📁 linux下的MPEG1
💻 H
字号:
/*** Nofrendo (c) 1998-2000 Matthew Conte (matt@conte.com)****** This program is free software; you can redistribute it and/or** modify it under the terms of version 2 of the GNU Library General ** Public License as published by the Free Software Foundation.**** 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.  To obtain a ** copy of the GNU Library General Public License, write to the Free ** Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.**** Any permitted reproduction of these routines, in whole or in part,** must bear this legend.****** nes_apu.h**** NES APU emulation header file** $Id: nes_apu.h,v 1.2 2003/01/09 19:50:03 jkeil Exp $*/#ifndef _NES_APU_H_#define _NES_APU_H_#ifdef __GNUC__#define  INLINE      static inline#elif defined(WIN32)#define  INLINE      static __inline#else#define  INLINE      static#endif/* define this for realtime generated noise */#define  REALTIME_NOISE#define  APU_WRA0       0x4000#define  APU_WRA1       0x4001#define  APU_WRA2       0x4002#define  APU_WRA3       0x4003#define  APU_WRB0       0x4004#define  APU_WRB1       0x4005#define  APU_WRB2       0x4006#define  APU_WRB3       0x4007#define  APU_WRC0       0x4008#define  APU_WRC2       0x400A#define  APU_WRC3       0x400B#define  APU_WRD0       0x400C#define  APU_WRD2       0x400E#define  APU_WRD3       0x400F#define  APU_WRE0       0x4010#define  APU_WRE1       0x4011#define  APU_WRE2       0x4012#define  APU_WRE3       0x4013#define  APU_OAMDMA     0x4014#define  APU_SMASK      0x4015#define  APU_JOY0       0x4016#define  APU_JOY1       0x4017/* length of generated noise */#define  APU_NOISE_32K  0x7FFF#define  APU_NOISE_93   93#define  APU_BASEFREQ   (NES_MASTER_CLOCK / 12)/* to/from 16.16 fixed point */#define  APU_TO_FIXED(x)    ((x) << 16)#define  APU_FROM_FIXED(x)  ((x) >> 16)/* channel structures *//* As much data as possible is precalculated,** to keep the sample processing as lean as possible*/ typedef struct rectangle_s{   uint8 regs[4];   boolean enabled;      int32 phaseacc;   int32 freq;   int32 output_vol;   boolean fixed_envelope;   boolean holdnote;   uint8 volume;   int32 sweep_phase;   int32 sweep_delay;   boolean sweep_on;   uint8 sweep_shifts;   uint8 sweep_length;   boolean sweep_inc;   int32 freq_limit;   int32 env_phase;   int32 env_delay;   uint8 env_vol;   int vbl_length;   uint8 adder;   int duty_flip;} rectangle_t;/*enum{   COUNTMODE_LOAD,   COUNTMODE_COUNT};*/typedef struct triangle_s{   uint8 regs[3];   boolean enabled;   int32 freq;   int32 phaseacc;   int32 output_vol;   uint8 adder;   boolean holdnote;   boolean counter_started;   /* quasi-hack */   int write_latency;//   boolean countmode;   int vbl_length;   int linear_length;} triangle_t;typedef struct noise_s{   uint8 regs[3];   boolean enabled;   int32 freq;   int32 phaseacc;   int32 output_vol;   int32 env_phase;   int32 env_delay;   uint8 env_vol;   boolean fixed_envelope;   boolean holdnote;   uint8 volume;   int vbl_length;#ifdef REALTIME_NOISE   uint8 xor_tap;#else   boolean short_sample;   int cur_pos;#endif /* REALTIME_NOISE */} noise_t;typedef struct dmc_s{   uint8 regs[4];   /* bodge for timestamp queue */   boolean enabled;      int32 freq;   int32 phaseacc;   int32 output_vol;   uint32 address;   uint32 cached_addr;   int dma_length;   int cached_dmalength;   uint8 cur_byte;   boolean looping;   boolean irq_gen;   boolean irq_occurred;} dmc_t;enum{   APU_FILTER_NONE,   APU_FILTER_LOWPASS,   APU_FILTER_WEIGHTED};typedef struct{   uint32 min_range, max_range;   uint8 (*read_func)(uint32 address);} apu_memread;typedef struct{   uint32 min_range, max_range;   void (*write_func)(uint32 address, uint8 value);} apu_memwrite;/* external sound chip stuff */typedef struct apuext_s{   void  (*init)(void);   void  (*shutdown)(void);   void  (*reset)(void);   int32 (*process)(void);   apu_memread *mem_read;   apu_memwrite *mem_write;} apuext_t;/* APU queue structure */#define  APUQUEUE_SIZE  4096#define  APUQUEUE_MASK  (APUQUEUE_SIZE - 1)/* apu ring buffer member */typedef struct apudata_s{   uint32 timestamp, address;   uint8 value;} apudata_t;typedef struct apu_s{   rectangle_t rectangle[2];   triangle_t triangle;   noise_t noise;   dmc_t dmc;   uint8 enable_reg;   apudata_t queue[APUQUEUE_SIZE];   int q_head, q_tail;   uint32 elapsed_cycles;   void *buffer; /* pointer to output buffer */   int num_samples;   boolean mix_enable[6];   int filter_type;   int32 cycle_rate;   int sample_rate;   int sample_bits;   int refresh_rate;   void (*process)(void *buffer, int num_samples);   /* external sound chip */   apuext_t *ext;} apu_t;#ifdef __cplusplusextern "C" {#endif /* __cplusplus *//* Function prototypes */extern apu_t *apu_create(int sample_rate, int refresh_rate, int sample_bits, boolean stereo);extern void apu_destroy(apu_t *apu);extern void apu_setext(apu_t *apu, apuext_t *ext);extern void apu_setfilter(int filter_type);extern void apu_process(void *buffer, int num_samples);extern void apu_reset(void);extern void apu_setchan(int chan, boolean enabled);extern int32 apu_getcyclerate(void);extern apu_t *apu_getcontext(void);extern uint8 apu_read(uint32 address);extern void apu_write(uint32 address, uint8 value);/* for visualization */extern void apu_getpcmdata(void **data, int *num_samples, int *sample_bits);#ifdef __cplusplus}#endif /* __cplusplus */#endif /* _NES_APU_H_ *//*** $Log: nes_apu.h,v $** Revision 1.2  2003/01/09 19:50:03  jkeil** NSF audio files were crashing on SPARC.**** - Define the correct HOST_ENDIAN for SPARC** - remove unaligned memory accesses**** Revision 1.1  2003/01/08 07:04:35  tmmm** initial import of Nosefart sources**** Revision 1.12  2000/07/04 04:54:48  matt** minor changes that helped with MAME**** Revision 1.11  2000/07/03 02:18:53  matt** much better external module exporting**** Revision 1.10  2000/06/26 05:00:37  matt** cleanups**** Revision 1.9  2000/06/23 03:29:28  matt** cleaned up external sound inteface**** Revision 1.8  2000/06/20 04:06:16  matt** migrated external sound definition to apu module**** Revision 1.7  2000/06/20 00:07:35  matt** added convenience members to apu_t struct**** Revision 1.6  2000/06/09 16:49:02  matt** removed all floating point from sound generation**** Revision 1.5  2000/06/09 15:12:28  matt** initial revision***/

⌨️ 快捷键说明

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