pokeysnd.h
上传用户:wstnjxml
上传日期:2014-04-03
资源大小:7248k
文件大小:6k
源码类别:

Windows CE

开发平台:

C/C++

  1. /*****************************************************************************/
  2. /*                                                                           */
  3. /* Module:  POKEY Chip Simulator Includes, V2.3                              */
  4. /* Purpose: To emulate the sound generation hardware of the Atari POKEY chip. */
  5. /* Author:  Ron Fries                                                        */
  6. /*                                                                           */
  7. /* Revision History:                                                         */
  8. /*                                                                           */
  9. /* 09/22/96 - Ron Fries - Initial Release                                    */
  10. /* 04/06/97 - Brad Oliver - Some cross-platform modifications. Added         */
  11. /*                          big/little endian #defines, removed <dos.h>,     */
  12. /*                          conditional defines for TRUE/FALSE               */
  13. /* 01/19/98 - Ron Fries - Changed signed/unsigned sample support to a        */
  14. /*                        compile-time option.  Defaults to unsigned -       */
  15. /*                        define SIGNED_SAMPLES to create signed.            */
  16. /*                                                                           */
  17. /*****************************************************************************/
  18. /*                                                                           */
  19. /*                 License Information and Copyright Notice                  */
  20. /*                 ========================================                  */
  21. /*                                                                           */
  22. /* PokeySound is Copyright(c) 1996-1998 by Ron Fries                         */
  23. /*                                                                           */
  24. /* This library is free software; you can redistribute it and/or modify it   */
  25. /* under the terms of version 2 of the GNU Library General Public License    */
  26. /* as published by the Free Software Foundation.                             */
  27. /*                                                                           */
  28. /* This library is distributed in the hope that it will be useful, but       */
  29. /* WITHOUT ANY WARRANTY; without even the implied warranty of                */
  30. /* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Library */
  31. /* General Public License for more details.                                  */
  32. /* To obtain a copy of the GNU Library General Public License, write to the  */
  33. /* Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.   */
  34. /*                                                                           */
  35. /* Any permitted reproduction of these routines, in whole or in part, must   */
  36. /* bear this legend.                                                         */
  37. /*                                                                           */
  38. /*****************************************************************************/
  39. #ifndef _POKEYSOUND_H
  40. #define _POKEYSOUND_H
  41. #include "config.h"
  42. #include "pokey.h"
  43. #ifndef _TYPEDEF_H
  44. #define _TYPEDEF_H
  45. /* define some data types to keep it platform independent */
  46. #ifdef COMP16 /* if 16-bit compiler defined */
  47. #define int8  char
  48. #define int16 int
  49. #define int32 long
  50. #else /* else default to 32-bit compiler */
  51. #define int8  char
  52. #define int16 short
  53. #define int32 int
  54. #endif
  55. #define uint8  unsigned int8
  56. #define uint16 unsigned int16
  57. #define uint32 unsigned int32
  58. #endif
  59. /* CONSTANT DEFINITIONS */
  60. /* As an alternative to using the exact frequencies, selecting a playback
  61.    frequency that is an exact division of the main clock provides a higher
  62.    quality output due to less aliasing.  For best results, a value of
  63.    1787520 MHz is used for the main clock.  With this value, both the
  64.    64 kHz and 15 kHz clocks are evenly divisible.  Selecting a playback
  65.    frequency that is also a division of the clock provides the best
  66.    results.  The best options are FREQ_64 divided by either 2, 3, or 4.
  67.    The best selection is based on a trade off between performance and
  68.    sound quality.
  69.    Of course, using a main clock frequency that is not exact will affect
  70.    the pitch of the output.  With these numbers, the pitch will be low
  71.    by 0.127%.  (More than likely, an actual unit will vary by this much!) */
  72. #define FREQ_17_EXACT     1789790 /* exact 1.79 MHz clock freq */
  73. #define FREQ_17_APPROX    1787520 /* approximate 1.79 MHz clock freq */
  74. #ifdef __cplusplus
  75. extern "C" {
  76. #endif
  77. /* #define SIGNED_SAMPLES */ /* define for signed output */
  78. #ifdef  SIGNED_SAMPLES /* if signed output selected */
  79. #define SAMP_MAX 127 /* then set signed 8-bit clipping ranges */
  80. #define SAMP_MIN -128
  81. #define SAMP_MID 0
  82. #else
  83. #define SAMP_MAX 255 /* else set unsigned 8-bit clip ranges */
  84. #define SAMP_MIN 0
  85. #define SAMP_MID 128
  86. #endif
  87. /* init flags */
  88. #define SND_BIT16 1
  89. #define SND_STEREO 2
  90. extern int32 snd_playback_freq;
  91. extern uint8 snd_num_pokeys;
  92. extern int enable_new_pokey;
  93. extern int stereo_enabled;
  94. extern int serio_sound_enabled;
  95. extern int console_sound_enabled;
  96. extern void (*Pokey_process_ptr)(void *sndbuffer, unsigned int sndn);
  97. extern void (*Update_pokey_sound)(uint16 addr, uint8 val, uint8 /*chip*/, uint8 gain);
  98. extern void (*Update_serio_sound)(int out, UBYTE data);
  99. extern void (*Update_consol_sound)(int set);
  100. extern void (*Update_vol_only_sound)(void);
  101. int Pokey_sound_init(uint32 freq17, uint16 playback_freq, uint8 num_pokeys,
  102.                      unsigned int flags
  103. #ifdef __PLUS
  104.                      , int clear_regs
  105. #endif
  106.                      );
  107. void Pokey_process(void *sndbuffer, unsigned int sndn);
  108. int Pokey_DoInit(void);
  109. void Pokey_set_mzquality(int quality);
  110. #ifdef __cplusplus
  111. }
  112. #endif
  113. #endif