mirror of
https://github.com/holub/mame
synced 2025-05-24 14:56:21 +03:00
Fixed random lfsr generation in pokey.c. This fixes MT00501 while tempest is still starting up. [Couriersud]
This commit is contained in:
parent
d211dd4ec3
commit
94a28f7834
@ -89,7 +89,7 @@
|
|||||||
#define VERBOSE_SOUND 0
|
#define VERBOSE_SOUND 0
|
||||||
#define VERBOSE_TIMER 0
|
#define VERBOSE_TIMER 0
|
||||||
#define VERBOSE_POLY 0
|
#define VERBOSE_POLY 0
|
||||||
#define VERBOSE_RAND 0
|
#define VERBOSE_RAND 1
|
||||||
|
|
||||||
#define LOG(x) do { if (VERBOSE) logerror x; } while (0)
|
#define LOG(x) do { if (VERBOSE) logerror x; } while (0)
|
||||||
|
|
||||||
@ -419,6 +419,46 @@ static void poly_init(UINT8 *poly, int size, int left, int right, int add)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void rand_init(UINT8 *rng, int size, int left, int right, int add)
|
static void rand_init(UINT8 *rng, int size, int left, int right, int add)
|
||||||
|
{
|
||||||
|
int mask = (1 << size) - 1;
|
||||||
|
int i;
|
||||||
|
UINT32 lfsr = 0;
|
||||||
|
|
||||||
|
LOG_RAND(("rand %d\n", size));
|
||||||
|
|
||||||
|
if (size == 17)
|
||||||
|
{
|
||||||
|
for( i = 0; i < mask; i++ )
|
||||||
|
{
|
||||||
|
/* calculate next bit @ 7 */
|
||||||
|
int in8 = !((lfsr >> 8) & 1) ^ ((lfsr >> 13) & 1);
|
||||||
|
int in = (lfsr & 1);
|
||||||
|
lfsr = lfsr >> 1;
|
||||||
|
lfsr = (lfsr & 0xff7f) | (in8 << 7);
|
||||||
|
lfsr = (in << 16) | lfsr;
|
||||||
|
*rng = (lfsr >> 8) & 0xff; /* use bits 0..7 */
|
||||||
|
LOG_RAND(("%05x: %02x\n", lfsr, *rng));
|
||||||
|
rng++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
for( i = 0; i < mask; i++ )
|
||||||
|
{
|
||||||
|
/* calculate next bit */
|
||||||
|
int in = !((lfsr >> 0) & 1) ^ ((lfsr >> 5) & 1);
|
||||||
|
lfsr = lfsr >> 1;
|
||||||
|
lfsr = (in << 8) | lfsr;
|
||||||
|
*rng = lfsr & 0xff; /* use bits 0..7 */
|
||||||
|
LOG_RAND(("%05x: %02x\n", lfsr, *rng));
|
||||||
|
rng++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#if 0
|
||||||
|
static void rand_init_old(UINT8 *rng, int size, int left, int right, int add)
|
||||||
{
|
{
|
||||||
int mask = (1 << size) - 1;
|
int mask = (1 << size) - 1;
|
||||||
int i, x = 0;
|
int i, x = 0;
|
||||||
@ -436,7 +476,7 @@ static void rand_init(UINT8 *rng, int size, int left, int right, int add)
|
|||||||
x = ((x << left) + (x >> right) + add) & mask;
|
x = ((x << left) + (x >> right) + add) & mask;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
static void register_for_save(pokey_state *chip, device_t *device)
|
static void register_for_save(pokey_state *chip, device_t *device)
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user