DOSBox-X
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator
src/hardware/snd_pc98/sound/pcm86.h
00001 
00002 enum {
00003         PCM86_LOGICALBUF        = 0x8000,
00004         PCM86_BUFSIZE           = (1 << 16),
00005         PCM86_BUFMSK            = ((1 << 16) - 1),
00006 
00007         PCM86_DIVBIT            = 10,
00008         PCM86_DIVENV            = (1 << PCM86_DIVBIT),
00009 
00010         PCM86_RESCUE            = 20
00011 };
00012 
00013 #define PCM86_EXTBUF            pcm86.rescue                                    // 救済延滞…
00014 #define PCM86_REALBUFSIZE       (PCM86_LOGICALBUF + PCM86_EXTBUF)
00015 
00016 #define RECALC_NOWCLKWAIT(cnt) {                                                                                \
00017                 pcm86.virbuf -= (cnt << pcm86.stepbit);                                                 \
00018                 if (pcm86.virbuf < 0) {                                                                                 \
00019                         pcm86.virbuf &= pcm86.stepmask;                                                         \
00020                 }                                                                                                                               \
00021         }
00022 
00023 typedef struct {
00024         SINT32  divremain;
00025         SINT32  div;
00026         SINT32  div2;
00027         SINT32  smp;
00028         SINT32  lastsmp;
00029         SINT32  smp_l;
00030         SINT32  lastsmp_l;
00031         SINT32  smp_r;
00032         SINT32  lastsmp_r;
00033 
00034         UINT32  readpos;                        // DSOUND再生位置
00035         UINT32  wrtpos;                         // 書込み位置
00036         SINT32  realbuf;                        // DSOUND用のデータ数
00037         SINT32  virbuf;                         // 86PCM(bufsize:0x8000)のデータ数
00038         SINT32  rescue;
00039 
00040         SINT32  fifosize;
00041         SINT32  volume;
00042         SINT32  vol5;
00043 
00044         UINT32  lastclock;
00045         UINT32  stepclock;
00046         UINT    stepmask;
00047 
00048         UINT8   fifo;
00049         UINT8   extfunc;
00050         UINT8   dactrl;
00051         UINT8   _write;
00052         UINT8   stepbit;
00053         UINT8   reqirq;
00054         UINT8   irqflag;
00055         UINT8   padding[1];
00056 
00057         UINT8   buffer[PCM86_BUFSIZE];
00058 } _PCM86, *PCM86;
00059 
00060 typedef struct {
00061         UINT    rate;
00062         UINT    vol;
00063 } PCM86CFG;
00064 
00065 
00066 #ifdef __cplusplus
00067 extern "C" {
00068 #endif
00069 
00070 extern const UINT pcm86rate8[];
00071 
00072 void pcm86_cb(NEVENTITEM item);
00073 
00074 void pcm86gen_initialize(UINT rate);
00075 void pcm86gen_setvol(UINT vol);
00076 
00077 void pcm86_reset(void);
00078 void pcm86gen_update(void);
00079 void pcm86_setpcmrate(REG8 val);
00080 void pcm86_setnextintr(void);
00081 
00082 void SOUNDCALL pcm86gen_checkbuf(void);
00083 void SOUNDCALL pcm86gen_getpcm(void *hdl, SINT32 *pcm, UINT count);
00084 
00085 BOOL pcm86gen_intrq(void);
00086 
00087 #ifdef __cplusplus
00088 }
00089 #endif
00090