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

Windows CE

开发平台:

C/C++

  1. #ifndef _POKEY_H_
  2. #define _POKEY_H_
  3. #ifdef ASAP /* external project, see http://asap.sf.net */
  4. #include "asap_internal.h"
  5. #else
  6. #include "atari.h"
  7. #endif
  8. #define _AUDF1 0x00
  9. #define _AUDC1 0x01
  10. #define _AUDF2 0x02
  11. #define _AUDC2 0x03
  12. #define _AUDF3 0x04
  13. #define _AUDC3 0x05
  14. #define _AUDF4 0x06
  15. #define _AUDC4 0x07
  16. #define _AUDCTL 0x08
  17. #define _STIMER 0x09
  18. #define _SKRES 0x0a
  19. #define _POTGO 0x0b
  20. #define _SEROUT 0x0d
  21. #define _IRQEN 0x0e
  22. #define _SKCTLS 0x0f
  23. #define _POT0 0x00
  24. #define _POT1 0x01
  25. #define _POT2 0x02
  26. #define _POT3 0x03
  27. #define _POT4 0x04
  28. #define _POT5 0x05
  29. #define _POT6 0x06
  30. #define _POT7 0x07
  31. #define _ALLPOT 0x08
  32. #define _KBCODE 0x09
  33. #define _RANDOM 0x0a
  34. #define _SERIN 0x0d
  35. #define _IRQST 0x0e
  36. #define _SKSTAT 0x0f
  37. #define _POKEY2 0x10 /* offset to second pokey chip (STEREO expansion) */
  38. #ifndef ASAP
  39. extern UBYTE KBCODE;
  40. extern UBYTE IRQST;
  41. extern UBYTE IRQEN;
  42. extern UBYTE SKSTAT;
  43. extern int DELAYED_SERIN_IRQ;
  44. extern int DELAYED_SEROUT_IRQ;
  45. extern int DELAYED_XMTDONE_IRQ;
  46. extern UBYTE POT_input[8];
  47. ULONG POKEY_GetRandomCounter(void);
  48. void POKEY_SetRandomCounter(ULONG value);
  49. UBYTE POKEY_GetByte(UWORD addr);
  50. void POKEY_PutByte(UWORD addr, UBYTE byte);
  51. void POKEY_Initialise(int *argc, char *argv[]);
  52. void POKEY_Frame(void);
  53. void POKEY_Scanline(void);
  54. #endif
  55. /* CONSTANT DEFINITIONS */
  56. /* definitions for AUDCx (D201, D203, D205, D207) */
  57. #define NOTPOLY5    0x80 /* selects POLY5 or direct CLOCK */
  58. #define POLY4       0x40 /* selects POLY4 or POLY17 */
  59. #define PURETONE    0x20 /* selects POLY4/17 or PURE tone */
  60. #define VOL_ONLY    0x10 /* selects VOLUME OUTPUT ONLY */
  61. #define VOLUME_MASK 0x0f /* volume mask */
  62. /* definitions for AUDCTL (D208) */
  63. #define POLY9       0x80 /* selects POLY9 or POLY17 */
  64. #define CH1_179     0x40 /* selects 1.78979 MHz for Ch 1 */
  65. #define CH3_179     0x20 /* selects 1.78979 MHz for Ch 3 */
  66. #define CH1_CH2     0x10 /* clocks channel 1 w/channel 2 */
  67. #define CH3_CH4     0x08 /* clocks channel 3 w/channel 4 */
  68. #define CH1_FILTER  0x04 /* selects channel 1 high pass filter */
  69. #define CH2_FILTER  0x02 /* selects channel 2 high pass filter */
  70. #define CLOCK_15    0x01 /* selects 15.6999kHz or 63.9210kHz */
  71. /* for accuracy, the 64kHz and 15kHz clocks are exact divisions of
  72.    the 1.79MHz clock */
  73. #define DIV_64      28 /* divisor for 1.79MHz clock to 64 kHz */
  74. #define DIV_15      114 /* divisor for 1.79MHz clock to 15 kHz */
  75. /* the size (in entries) of the 4 polynomial tables */
  76. #define POLY4_SIZE  0x000f
  77. #define POLY5_SIZE  0x001f
  78. #define POLY9_SIZE  0x01ff
  79. #define POLY17_SIZE 0x0001ffff
  80. #define MAXPOKEYS         2 /* max number of emulated chips */
  81. /* channel/chip definitions */
  82. #define CHAN1       0
  83. #define CHAN2       1
  84. #define CHAN3       2
  85. #define CHAN4       3
  86. #define CHIP1       0
  87. #define CHIP2       4
  88. #define CHIP3       8
  89. #define CHIP4      12
  90. #define SAMPLE    127
  91. /* structures to hold the 9 pokey control bytes */
  92. extern UBYTE AUDF[4 * MAXPOKEYS]; /* AUDFx (D200, D202, D204, D206) */
  93. extern UBYTE AUDC[4 * MAXPOKEYS]; /* AUDCx (D201, D203, D205, D207) */
  94. extern UBYTE AUDCTL[MAXPOKEYS]; /* AUDCTL (D208) */
  95. extern int DivNIRQ[4], DivNMax[4];
  96. extern int Base_mult[MAXPOKEYS]; /* selects either 64Khz or 15Khz clock mult */
  97. extern UBYTE poly9_lookup[POLY9_SIZE];
  98. extern UBYTE poly17_lookup[16385];
  99. #endif