adjuster HCOUNT/HINT timings, improved fast menu scrolling, removed unused SRC algorithms

This commit is contained in:
ekeeke31 2008-09-13 15:37:15 +00:00
parent 4c374d034a
commit deec7ecd2f
12 changed files with 34 additions and 69 deletions

View File

@ -8,6 +8,7 @@ CURRENT:
- YM2612(MAME): fixed a bug in SSG-EG emulation code, fix Level 1 music in Alisia Dragoon - YM2612(MAME): fixed a bug in SSG-EG emulation code, fix Level 1 music in Alisia Dragoon
- YM2612(MAME): improved Detune overflow accuracy, fix high-frequency sound effects & musics in many games - YM2612(MAME): improved Detune overflow accuracy, fix high-frequency sound effects & musics in many games
- YM2612(MAME): fixed registers 0x20-0x26 Reset state, fix intro music in B.O.B - YM2612(MAME): fixed registers 0x20-0x26 Reset state, fix intro music in B.O.B
- adjusted HCounter values, fix Sonic 3D bonus stage
[NGC/Wii] [NGC/Wii]
- improved menu scrolling using Wiimote D-PAD - improved menu scrolling using Wiimote D-PAD

View File

@ -337,9 +337,9 @@ uint8 vc_pal_240[313] = {
*/ */
uint8 cycle2hc32[488] = { uint8 cycle2hc32[488] = {
0x85, 0x85, 0x85, 0x86, 0x86, 0x87, 0x87, 0x87, 0x88, 0x88, 0x88, 0x89, 0x89, 0x89, 0x8A, 0x8A, 0x85, 0x85, 0x86, 0x86, 0x87, 0x87, 0x87, 0x88, 0x88, 0x88, 0x89, 0x89, 0x89, 0x8A, 0x8A, 0x8A,
0x8A, 0x8B, 0x8B, 0x8B, 0x8C, 0x8C, 0x8D, 0x8D, 0x8D, 0x8E, 0x8E, 0x8E, 0x8F, 0x8F, 0x8F, 0x90, 0x8B, 0x8B, 0x8B, 0x8C, 0x8C, 0x8D, 0x8D, 0x8D, 0x8E, 0x8E, 0x8E, 0x8F, 0x8F, 0x8F, 0x90, 0x90,
0x90, 0x90, 0x91, 0x91, 0x91, 0x92, 0x92, 0x92, 0x93, 0x93, 0x90, 0x91, 0x91, 0x91, 0x92, 0x92, 0x92, 0x93, 0x93,
0xE9, 0xE9, 0xE9, 0xEA, 0xEA, 0xEA, 0xE9, 0xE9, 0xE9, 0xEA, 0xEA, 0xEA,
0xEB, 0xEB, 0xEB, 0xEC, 0xEC, 0xEC, 0xED, 0xED, 0xED, 0xEE, 0xEE, 0xEE, 0xEF, 0xEF, 0xF0, 0xF0, 0xEB, 0xEB, 0xEB, 0xEC, 0xEC, 0xEC, 0xED, 0xED, 0xED, 0xEE, 0xEE, 0xEE, 0xEF, 0xEF, 0xF0, 0xF0,
0xF0, 0xF1, 0xF1, 0xF1, 0xF2, 0xF2, 0xF2, 0xF3, 0xF3, 0xF3, 0xF4, 0xF4, 0xF4, 0xF5, 0xF5, 0xF6, 0xF0, 0xF1, 0xF1, 0xF1, 0xF2, 0xF2, 0xF2, 0xF3, 0xF3, 0xF3, 0xF4, 0xF4, 0xF4, 0xF5, 0xF5, 0xF6,
@ -368,13 +368,13 @@ uint8 cycle2hc32[488] = {
0x71, 0x72, 0x72, 0x72, 0x73, 0x73, 0x73, 0x74, 0x74, 0x74, 0x75, 0x75, 0x75, 0x76, 0x76, 0x76, 0x71, 0x72, 0x72, 0x72, 0x73, 0x73, 0x73, 0x74, 0x74, 0x74, 0x75, 0x75, 0x75, 0x76, 0x76, 0x76,
0x77, 0x77, 0x77, 0x78, 0x78, 0x79, 0x79, 0x79, 0x7A, 0x7A, 0x7A, 0x7B, 0x7B, 0x7B, 0x7C, 0x7C, 0x77, 0x77, 0x77, 0x78, 0x78, 0x79, 0x79, 0x79, 0x7A, 0x7A, 0x7A, 0x7B, 0x7B, 0x7B, 0x7C, 0x7C,
0x7C, 0x7D, 0x7D, 0x7D, 0x7E, 0x7E, 0x7E, 0x7F, 0x7F, 0x80, 0x80, 0x80, 0x81, 0x81, 0x81, 0x82, 0x7C, 0x7D, 0x7D, 0x7D, 0x7E, 0x7E, 0x7E, 0x7F, 0x7F, 0x80, 0x80, 0x80, 0x81, 0x81, 0x81, 0x82,
0x82, 0x82, 0x83, 0x83, 0x83, 0x84, 0x84, 0x84 0x82, 0x82, 0x83, 0x83, 0x83, 0x84, 0x84, 0x84, 0x85,
}; };
uint8 cycle2hc40[488] = { uint8 cycle2hc40[488] = {
0xA5, 0xA5, 0xA6, 0xA6, 0xA7, 0xA7, 0xA7, 0xA8, 0xA8, 0xA9, 0xA9, 0xAA, 0xAA, 0xAA, 0xAB, 0xAB, 0xA4, 0xA5, 0xA5, 0xA6, 0xA6, 0xA7, 0xA7, 0xA7, 0xA8, 0xA8, 0xA9, 0xA9, 0xAA, 0xAA,
0xAC, 0xAC, 0xAD, 0xAD, 0xAD, 0xAE, 0xAE, 0xAF, 0xAF, 0xB0, 0xB0, 0xB1, 0xB1, 0xB1, 0xB2, 0xB2, 0xAA, 0xAB, 0xAB, 0xAC, 0xAC, 0xAD, 0xAD, 0xAD, 0xAE, 0xAE, 0xAF, 0xAF, 0xB0, 0xB0, 0xB1, 0xB1,
0xB3, 0xB3, 0xB4, 0xB4, 0xB4, 0xB5, 0xB5, 0xB6, 0xB6, 0xB1, 0xB2, 0xB2, 0xB3, 0xB3, 0xB4, 0xB4, 0xB4, 0xB5, 0xB5, 0xB6, 0xB6,
0xE4, 0xE4, 0xE4, 0xE5, 0xE5, 0xE6, 0xE6, 0xE4, 0xE4, 0xE4, 0xE5, 0xE5, 0xE6, 0xE6,
0xE7, 0xE7, 0xE7, 0xE8, 0xE8, 0xE9, 0xE9, 0xEA, 0xEA, 0xEB, 0xEB, 0xEB, 0xEC, 0xEC, 0xED, 0xED, 0xE7, 0xE7, 0xE7, 0xE8, 0xE8, 0xE9, 0xE9, 0xEA, 0xEA, 0xEB, 0xEB, 0xEB, 0xEC, 0xEC, 0xED, 0xED,
0xEE, 0xEE, 0xEE, 0xEF, 0xEF, 0xF0, 0xF0, 0xF1, 0xF1, 0xF1, 0xF2, 0xF2, 0xF3, 0xF3, 0xF4, 0xF4, 0xEE, 0xEE, 0xEE, 0xEF, 0xEF, 0xF0, 0xF0, 0xF1, 0xF1, 0xF1, 0xF2, 0xF2, 0xF3, 0xF3, 0xF4, 0xF4,
@ -403,7 +403,7 @@ uint8 cycle2hc40[488] = {
0x8D, 0x8D, 0x8D, 0x8E, 0x8E, 0x8F, 0x8F, 0x90, 0x90, 0x90, 0x91, 0x91, 0x92, 0x92, 0x93, 0x93, 0x8D, 0x8D, 0x8D, 0x8E, 0x8E, 0x8F, 0x8F, 0x90, 0x90, 0x90, 0x91, 0x91, 0x92, 0x92, 0x93, 0x93,
0x94, 0x94, 0x94, 0x95, 0x95, 0x96, 0x96, 0x97, 0x97, 0x97, 0x98, 0x98, 0x99, 0x99, 0x9A, 0x9A, 0x94, 0x94, 0x94, 0x95, 0x95, 0x96, 0x96, 0x97, 0x97, 0x97, 0x98, 0x98, 0x99, 0x99, 0x9A, 0x9A,
0x9A, 0x9B, 0x9B, 0x9C, 0x9C, 0x9D, 0x9D, 0x9D, 0x9E, 0x9E, 0x9F, 0x9F, 0xA0, 0xA0, 0xA1, 0xA1, 0x9A, 0x9B, 0x9B, 0x9C, 0x9C, 0x9D, 0x9D, 0x9D, 0x9E, 0x9E, 0x9F, 0x9F, 0xA0, 0xA0, 0xA1, 0xA1,
0xA1, 0xA2, 0xA2, 0xA3, 0xA3, 0xA4, 0xA4, 0xA4, 0xA1, 0xA2, 0xA2, 0xA3, 0xA3, 0xA4, 0xA4,
}; };

View File

@ -4,7 +4,7 @@
#include <fat.h> #include <fat.h>
#include <sys/dir.h> #include <sys/dir.h>
#define CONFIG_VERSION "GENPLUS 1.2.2 " #define CONFIG_VERSION "GENPLUS 1.2.3 "
t_config config; t_config config;

View File

@ -146,23 +146,7 @@ void soundmenu ()
sprintf (items[1], "FM Volume: %1.2f", config.fm_preamp); sprintf (items[1], "FM Volume: %1.2f", config.fm_preamp);
sprintf (items[2], "Volume Boost: %dX", config.boost); sprintf (items[2], "Volume Boost: %dX", config.boost);
sprintf (items[3], "LowPass Filter: %s", config.filter ? " ON":"OFF"); sprintf (items[3], "LowPass Filter: %s", config.filter ? " ON":"OFF");
if (config.hq_fm == 0) sprintf (items[4], "HQ YM2612: OFF"); sprintf (items[4], "HQ YM2612: %s", config.hq_fm ? " ON":"OFF");
else if (config.fm_core)
{
/* GENS core only got linear resampling */
sprintf (items[4], "HQ YM2612: LINEAR");
}
else
{
/* MAME core uses libsamplerate */
if (config.hq_fm == 1) sprintf (items[4], "HQ YM2612: LINEAR");
else if (config.hq_fm == 2) sprintf (items[4], "HQ YM2612: LOW");
else if (config.hq_fm == 3) sprintf (items[4], "HQ YM2612: FAST");
else if (config.hq_fm == 4) sprintf (items[4], "HQ YM2612: MEDIUM");
#ifdef USE_SINC_BEST
else if (config.hq_fm == 5) sprintf (items[4], "HQ YM2612: BEST");
#endif
}
sprintf (items[5], "FM core: %s", config.fm_core ? "GENS" : "MAME"); sprintf (items[5], "FM core: %s", config.fm_core ? "GENS" : "MAME");
ret = domenu (&items[0], count, 1); ret = domenu (&items[0], count, 1);
@ -194,11 +178,7 @@ void soundmenu ()
break; break;
case 4: case 4:
#ifdef USE_SINC_BEST config.hq_fm ^= 1;
config.hq_fm = (config.hq_fm + 1) % (config.fm_core ? 2 : 6);
#else
config.hq_fm = (config.hq_fm + 1) % (config.fm_core ? 2 : 5);
#endif
if (genromsize) if (genromsize)
{ {
audio_init(48000); audio_init(48000);

View File

@ -71,7 +71,7 @@ static const u16 pad_keys[8] =
#define PAD_LEFT 2 #define PAD_LEFT 2
#define PAD_RIGHT 3 #define PAD_RIGHT 3
#define MAX_HELD_CNT 10 #define MAX_HELD_CNT 8
static u32 held_cnt = 0; static u32 held_cnt = 0;
static u32 wpad_dirmap[3][4] = static u32 wpad_dirmap[3][4] =
@ -537,8 +537,8 @@ static void wpad_update(s8 num, u8 i, u32 exp)
} }
else else
{ {
old_x -= input.analog[2][0]; old_x += input.analog[2][0];
old_y -= input.analog[2][1]; old_y += input.analog[2][1];
} }
} }
@ -750,27 +750,12 @@ u16 ogc_input__getMenuButtons(void)
WPAD_IR(0, &ir); WPAD_IR(0, &ir);
/* wiimote directions */ /* wiimote directions */
if (q & WPAD_BUTTON_UP) if (q & WPAD_BUTTON_UP) p |= ir.valid ? PAD_BUTTON_UP : PAD_BUTTON_LEFT;
{ else if (q & WPAD_BUTTON_DOWN) p |= ir.valid ? PAD_BUTTON_DOWN : PAD_BUTTON_RIGHT;
held_cnt = 0; else if (q & WPAD_BUTTON_LEFT) p |= ir.valid ? PAD_BUTTON_LEFT : PAD_BUTTON_DOWN;
p |= ir.valid ? PAD_BUTTON_UP : PAD_BUTTON_LEFT; else if (q & WPAD_BUTTON_RIGHT) p |= ir.valid ? PAD_BUTTON_RIGHT : PAD_BUTTON_UP;
}
else if (q & WPAD_BUTTON_DOWN) if (h & WPAD_BUTTON_UP)
{
held_cnt = 0;
p |= ir.valid ? PAD_BUTTON_DOWN : PAD_BUTTON_RIGHT;
}
else if (q & WPAD_BUTTON_LEFT)
{
held_cnt = 0;
p |= ir.valid ? PAD_BUTTON_LEFT : PAD_BUTTON_DOWN;
}
else if (q & WPAD_BUTTON_RIGHT)
{
held_cnt = 0;
p |= ir.valid ? PAD_BUTTON_RIGHT : PAD_BUTTON_UP;
}
else if (h & WPAD_BUTTON_UP)
{ {
held_cnt ++; held_cnt ++;
if (held_cnt == MAX_HELD_CNT) if (held_cnt == MAX_HELD_CNT)

View File

@ -399,7 +399,7 @@ static void gxScale(void)
} }
xshift = (config.aspect || !gc_pal) ? 8 : 4; xshift = (config.aspect || !gc_pal) ? 8 : 4;
yshift = vdp_pal ? 1 : -1; yshift = vdp_pal ? 1 : 3;
} }
else else
{ {

View File

@ -30,8 +30,7 @@
** half length : 340238 ** half length : 340238
** increment : 2381 ** increment : 2381
*/ */
#ifdef USE_SINC_BEST #ifndef NGC
static const struct slow_high_qual_coeffs_s static const struct slow_high_qual_coeffs_s
{ int increment ; { int increment ;
coeff_t coeffs [340239] ; coeff_t coeffs [340239] ;

View File

@ -30,7 +30,7 @@
** half length : 22437 ** half length : 22437
** increment : 491 ** increment : 491
*/ */
#ifndef NGC
static const struct slow_mid_qual_coeffs_s static const struct slow_mid_qual_coeffs_s
{ int increment ; { int increment ;
coeff_t coeffs [22438] ; coeff_t coeffs [22438] ;
@ -22478,3 +22478,4 @@ static const struct slow_mid_qual_coeffs_s
} }
} ; /* mid_qual_coeffs */ } ; /* mid_qual_coeffs */
#endif

View File

@ -186,13 +186,13 @@ sinc_set_converter (SRC_PRIVATE *psrc, int src_enum)
temp_filter.index_inc = fastest_coeffs.increment ; temp_filter.index_inc = fastest_coeffs.increment ;
break ; break ;
#ifndef NGC
case SRC_SINC_MEDIUM_QUALITY : case SRC_SINC_MEDIUM_QUALITY :
temp_filter.coeffs = slow_mid_qual_coeffs.coeffs ; temp_filter.coeffs = slow_mid_qual_coeffs.coeffs ;
temp_filter.coeff_half_len = ARRAY_LEN (slow_mid_qual_coeffs.coeffs) - 1 ; temp_filter.coeff_half_len = ARRAY_LEN (slow_mid_qual_coeffs.coeffs) - 1 ;
temp_filter.index_inc = slow_mid_qual_coeffs.increment ; temp_filter.index_inc = slow_mid_qual_coeffs.increment ;
break ; break ;
#ifdef USE_SINC_BEST
case SRC_SINC_BEST_QUALITY : case SRC_SINC_BEST_QUALITY :
temp_filter.coeffs = slow_high_qual_coeffs.coeffs ; temp_filter.coeffs = slow_high_qual_coeffs.coeffs ;
temp_filter.coeff_half_len = ARRAY_LEN (slow_high_qual_coeffs.coeffs) - 1 ; temp_filter.coeff_half_len = ARRAY_LEN (slow_high_qual_coeffs.coeffs) - 1 ;

View File

@ -868,11 +868,11 @@ INLINE signed int op_calc1(UINT32 phase, unsigned int env, signed int pm)
INLINE void advance_lfo() INLINE void advance_lfo()
{ {
UINT8 pos; UINT8 pos;
UINT8 prev_pos; /*UINT8 prev_pos;*/
if (ym2612.OPN.lfo_inc) /* LFO enabled ? */ if (ym2612.OPN.lfo_inc) /* LFO enabled ? */
{ {
prev_pos = ym2612.OPN.lfo_cnt>>LFO_SH & 127; /*prev_pos = ym2612.OPN.lfo_cnt>>LFO_SH & 127;*/
ym2612.OPN.lfo_cnt += ym2612.OPN.lfo_inc; ym2612.OPN.lfo_cnt += ym2612.OPN.lfo_inc;
@ -895,7 +895,7 @@ INLINE void advance_lfo()
} }
/* PM works with 4 times slower clock */ /* PM works with 4 times slower clock */
prev_pos >>= 2; /*prev_pos >>= 2;*/
pos >>= 2; pos >>= 2;
/* update PM when LFO output changes */ /* update PM when LFO output changes */
/*if (prev_pos != pos)*/ /* can't use global lfo_pm for this optimization, must be chip->lfo_pm instead*/ /*if (prev_pos != pos)*/ /* can't use global lfo_pm for this optimization, must be chip->lfo_pm instead*/

View File

@ -164,7 +164,7 @@ void sound_update(void)
} }
/* samplerate conversion */ /* samplerate conversion */
src_simple (&src_data, SRC_LINEAR + 1 - config.hq_fm, 2); src_simple (&src_data, SRC_SINC_FASTEST, 2);
/* this is basically libsamplerate "src_float_to_int_array" function, adapted to interlace samples */ /* this is basically libsamplerate "src_float_to_int_array" function, adapted to interlace samples */
len = snd.buffer_size; len = snd.buffer_size;
@ -220,8 +220,8 @@ void fm_write(unsigned int cpu, unsigned int address, unsigned int data)
{ {
if (address & 1) if (address & 1)
{ {
snd.fm.curStage = fm_sample_cnt(cpu); snd.fm.curStage = fm_sample_cnt(cpu);
fm_update(); fm_update();
} }
_YM2612_Write(address & 3, data); _YM2612_Write(address & 3, data);
} }

View File

@ -231,9 +231,8 @@ int system_frame (int do_skip)
hint_pending = 1; hint_pending = 1;
hvint_updated = 0; hvint_updated = 0;
/* previous scanline was shortened (see below), we execute extra cycles on this line */ /* adjust timings to take decrement in account */
if (line != 0) aim_m68k += 36; if ((line != 0) || (h_counter == 0)) aim_m68k += 36;
}
/* HINT will be triggered on next line, approx. 36 cycles before VDP starts line rendering */ /* HINT will be triggered on next line, approx. 36 cycles before VDP starts line rendering */
/* during this period, any VRAM/CRAM/VSRAM writes should NOT be taken in account before next line */ /* during this period, any VRAM/CRAM/VSRAM writes should NOT be taken in account before next line */