{\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
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
void YM2612ResetChip_(void);\r
-void YM2612UpdateOne_(short *buffer, int length, int stereo);\r
+int YM2612UpdateOne_(int *buffer, int length, int stereo, int is_buf_empty);\r
\r
int YM2612Write_(unsigned int a, unsigned int v);\r
unsigned char YM2612Read_(void);\r
#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
-#include "../../platform/gp2x/940ctl_ym2612.h"\r
+#include "../../platform/gp2x/940ctl.h"\r
extern int PicoOpt;\r
#define YM2612Init(baseclock,rate) { \\r
if (PicoOpt&0x200) YM2612Init_940(baseclock, rate); \\r
if (PicoOpt&0x200) YM2612ResetChip_940(); \\r
else YM2612ResetChip_(); \\r
}\r
-#define YM2612UpdateOne(buffer,length,stereo) { \\r
- if (PicoOpt&0x200) YM2612UpdateOne_940(buffer, length, stereo); \\r
- else YM2612UpdateOne_(buffer, length, stereo); \\r
-}\r
+#define YM2612UpdateOne(buffer,length,stereo,is_buf_empty) \\r
+ (PicoOpt&0x200) ? YM2612UpdateOne_940(buffer, length, stereo, is_buf_empty) : \\r
+ 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