optimizations, fixes, hacks, psp, ...
[picodrive.git] / Pico / sound / ym2612.h
index 20147ff..e87cbc1 100644 (file)
@@ -76,15 +76,16 @@ typedef struct
 {\r
        int             clock;          /* master clock  (Hz)   */\r
        int             rate;           /* sampling rate (Hz)   */\r
-       double  freqbase;       /* frequency base       */\r
-       UINT8   address;        /* address register     */\r
-       UINT8   status;         /* status flag          */\r
+       double  freqbase;       /* 08 frequency base       */\r
+       UINT8   address;        /* 10 address register     */\r
+       UINT8   status;         /* 11 status flag          */\r
        UINT8   mode;           /* mode  CSM / 3SLOT    */\r
        UINT8   fn_h;           /* freq latch           */\r
        int             TA;                     /* timer a              */\r
        int             TAC;            /* timer a maxval       */\r
        int             TAT;            /* timer a ticker       */\r
        UINT8   TB;                     /* timer b              */\r
+       UINT8   pad[3];\r
        int             TBC;            /* timer b maxval       */\r
        int             TBT;            /* timer b ticker       */\r
        /* local time tables */\r
@@ -135,9 +136,32 @@ typedef struct
        INT32           dacout;\r
 \r
        FM_OPN          OPN;                            /* OPN state            */\r
+\r
+       UINT32          slot_mask;                      /* active slot mask (performance hack) */\r
 } YM2612;\r
 #endif\r
 \r
+extern int   *ym2612_dacen;\r
+extern INT32 *ym2612_dacout;\r
+extern FM_ST *ym2612_st;\r
+\r
+\r
+#define YM2612Read() ym2612_st->status\r
+\r
+#define YM2612PicoTick(n) \\r
+{ \\r
+       /* timer A */ \\r
+       if(ym2612_st->mode & 0x01 && (ym2612_st->TAT+=64*n) >= ym2612_st->TAC) { \\r
+               ym2612_st->TAT -= ym2612_st->TAC; \\r
+               if(ym2612_st->mode & 0x04) ym2612_st->status |= 1; \\r
+       } \\r
+ \\r
+       /* timer B */ \\r
+       if(ym2612_st->mode & 0x02 && (ym2612_st->TBT+=64*n) >= ym2612_st->TBC) { \\r
+               ym2612_st->TBT -= ym2612_st->TBC; \\r
+               if(ym2612_st->mode & 0x08) ym2612_st->status |= 2; \\r
+       } \\r
+}\r
 \r
 \r
 void YM2612Init_(int baseclock, int rate);\r
@@ -157,8 +181,6 @@ void *YM2612GetRegs(void);
 #define YM2612ResetChip     YM2612ResetChip_\r
 #define YM2612UpdateOne     YM2612UpdateOne_\r
 #define YM2612Write         YM2612Write_\r
-#define YM2612Read          YM2612Read_\r
-#define YM2612PicoTick      YM2612PicoTick_\r
 #define YM2612PicoStateLoad YM2612PicoStateLoad_\r
 #else\r
 /* GP2X specific */\r
@@ -177,10 +199,6 @@ extern int PicoOpt;
                                YM2612UpdateOne_(buffer, length, stereo, is_buf_empty);\r
 #define YM2612Write(a,v) \\r
        (PicoOpt&0x200) ?  YM2612Write_940(a, v) : YM2612Write_(a, v)\r
-#define YM2612Read() \\r
-       (PicoOpt&0x200) ?  YM2612Read_940()      : YM2612Read_()\r
-#define YM2612PicoTick(n) \\r
-       (PicoOpt&0x200) ?  YM2612PicoTick_940(n) : YM2612PicoTick_(n)\r
 #define YM2612PicoStateLoad() { \\r
        if (PicoOpt&0x200) YM2612PicoStateLoad_940(); \\r
        else               YM2612PicoStateLoad_(); \\r