mirror of
https://github.com/holub/mame
synced 2025-07-05 09:57:47 +03:00
fix SCSP UNPACK sign extension (nw)
This commit is contained in:
parent
1f62d6ecd1
commit
4325f253c3
@ -3,6 +3,9 @@
|
||||
#include "emu.h"
|
||||
#include "scspdsp.h"
|
||||
|
||||
#include <cstring>
|
||||
|
||||
|
||||
namespace {
|
||||
|
||||
uint16_t PACK(int32_t val)
|
||||
@ -34,7 +37,7 @@ static int32_t UNPACK(uint16_t val)
|
||||
int const sign = BIT(val, 15);
|
||||
int exponent = (val >> 11) & 0xF;
|
||||
int const mantissa = val & 0x7FF;
|
||||
uint32_t uval = mantissa << 11;
|
||||
int32_t uval = mantissa << 11;
|
||||
if (exponent > 11)
|
||||
{
|
||||
exponent = 11;
|
||||
@ -57,7 +60,7 @@ static int32_t UNPACK(uint16_t val)
|
||||
|
||||
void SCSPDSP::Init()
|
||||
{
|
||||
memset(this, 0, sizeof(*this));
|
||||
std::memset(this, 0, sizeof(*this));
|
||||
RBL = 0x8000;
|
||||
Stopped = 1;
|
||||
}
|
||||
@ -86,7 +89,7 @@ void SCSPDSP::Step()
|
||||
|
||||
for (int step = 0; step < /*128*/LastStep; ++step)
|
||||
{
|
||||
uint16_t *const IPtr = MPRO + step*4;
|
||||
uint16_t *const IPtr = MPRO + (step * 4);
|
||||
|
||||
//if (!IPtr[0] && !IPtr[1] && !IPtr[2] && !IPtr[3])
|
||||
//break;
|
||||
@ -133,7 +136,6 @@ void SCSPDSP::Step()
|
||||
if (f)
|
||||
{
|
||||
#define DUMP(v) fprintf(f, " " #v ": %04X", v);
|
||||
|
||||
fprintf(f, "%d: ", step);
|
||||
DUMP(ACC);
|
||||
DUMP(SHIFTED);
|
||||
@ -147,6 +149,7 @@ void SCSPDSP::Step()
|
||||
DUMP(ADDR);
|
||||
DUMP(ADRS_REG);
|
||||
fprintf(f, "\n");
|
||||
#undef DUMP
|
||||
}
|
||||
#endif
|
||||
|
||||
@ -221,13 +224,9 @@ void SCSPDSP::Step()
|
||||
|
||||
//Shifter
|
||||
if (SHIFT == 0)
|
||||
{
|
||||
SHIFTED = std::max<int32_t>(std::min<int32_t>(ACC, 0x007FFFFF), -0x00800000);
|
||||
}
|
||||
else if (SHIFT == 1)
|
||||
{
|
||||
SHIFTED = std::max<int32_t>(std::min<int32_t>(ACC * 2, 0x007FFFFF), -0x00800000);
|
||||
}
|
||||
else if (SHIFT == 2)
|
||||
{
|
||||
SHIFTED = ACC * 2;
|
||||
@ -312,7 +311,6 @@ void SCSPDSP::Step()
|
||||
|
||||
if (EWT)
|
||||
EFREG[EWA] += SHIFTED >> 8;
|
||||
|
||||
}
|
||||
--DEC;
|
||||
std::fill(std::begin(MIXS), std::end(MIXS), 0);
|
||||
|
Loading…
Reference in New Issue
Block a user