mirror of
https://github.com/holub/mame
synced 2025-04-22 16:31:49 +03:00
sound/scspdsp.cpp: Use util::sext for sign extension and use lowercase hexadecimal literals. (#12597)
This commit is contained in:
parent
f8a806b0ba
commit
3adb271db0
@ -92,21 +92,21 @@ void SCSPDSP::Step()
|
||||
//if (!IPtr[0] && !IPtr[1] && !IPtr[2] && !IPtr[3])
|
||||
//break;
|
||||
|
||||
u32 const TRA = (IPtr[0] >> 8) & 0x7F;
|
||||
u32 const TRA = (IPtr[0] >> 8) & 0x7f;
|
||||
u32 const TWT = (IPtr[0] >> 7) & 0x01;
|
||||
u32 const TWA = (IPtr[0] >> 0) & 0x7F;
|
||||
u32 const TWA = (IPtr[0] >> 0) & 0x7f;
|
||||
|
||||
u32 const XSEL = (IPtr[1] >> 15) & 0x01;
|
||||
u32 const YSEL = (IPtr[1] >> 13) & 0x03;
|
||||
u32 const IRA = (IPtr[1] >> 6) & 0x3F;
|
||||
u32 const IRA = (IPtr[1] >> 6) & 0x3f;
|
||||
u32 const IWT = (IPtr[1] >> 5) & 0x01;
|
||||
u32 const IWA = (IPtr[1] >> 0) & 0x1F;
|
||||
u32 const IWA = (IPtr[1] >> 0) & 0x1f;
|
||||
|
||||
u32 const TABLE = (IPtr[2] >> 15) & 0x01;
|
||||
u32 const MWT = (IPtr[2] >> 14) & 0x01;
|
||||
u32 const MRD = (IPtr[2] >> 13) & 0x01;
|
||||
u32 const EWT = (IPtr[2] >> 12) & 0x01;
|
||||
u32 const EWA = (IPtr[2] >> 8) & 0x0F;
|
||||
u32 const EWA = (IPtr[2] >> 8) & 0x0f;
|
||||
u32 const ADRL = (IPtr[2] >> 7) & 0x01;
|
||||
u32 const FRCL = (IPtr[2] >> 6) & 0x01;
|
||||
u32 const SHIFT = (IPtr[2] >> 4) & 0x03;
|
||||
@ -164,10 +164,7 @@ void SCSPDSP::Step()
|
||||
else
|
||||
return;
|
||||
|
||||
INPUTS <<= 8;
|
||||
INPUTS >>= 8;
|
||||
//if(INPUTS & 0x00800000)
|
||||
//INPUTS |= 0xFF000000;
|
||||
INPUTS = util::sext(INPUTS, 24);
|
||||
|
||||
if (IWT)
|
||||
{
|
||||
@ -183,13 +180,7 @@ void SCSPDSP::Step()
|
||||
if (BSEL)
|
||||
B = ACC;
|
||||
else
|
||||
{
|
||||
B = TEMP[(TRA + DEC) & 0x7F];
|
||||
B <<= 8;
|
||||
B >>= 8;
|
||||
//if (B & 0x00800000)
|
||||
//B |= 0xFF000000; //Sign extend
|
||||
}
|
||||
B = util::sext(TEMP[(TRA + DEC) & 0x7f], 24);
|
||||
if (NEGB)
|
||||
B = 0 - B;
|
||||
}
|
||||
@ -200,13 +191,7 @@ void SCSPDSP::Step()
|
||||
if (XSEL)
|
||||
X = INPUTS;
|
||||
else
|
||||
{
|
||||
X = TEMP[(TRA + DEC) & 0x7F];
|
||||
X <<= 8;
|
||||
X >>= 8;
|
||||
//if (X & 0x00800000)
|
||||
//X |= 0xFF000000;
|
||||
}
|
||||
X = util::sext(TEMP[(TRA + DEC) & 0x7f], 24);
|
||||
|
||||
s32 Y = 0; //13 bit
|
||||
if (YSEL == 0)
|
||||
@ -214,9 +199,9 @@ void SCSPDSP::Step()
|
||||
else if (YSEL == 1)
|
||||
Y = this->COEF[COEF] >> 3; //COEF is 16 bits
|
||||
else if (YSEL == 2)
|
||||
Y = (Y_REG >> 11) & 0x1FFF;
|
||||
Y = (Y_REG >> 11) & 0x1fff;
|
||||
else if (YSEL == 3)
|
||||
Y = (Y_REG >> 4) & 0x0FFF;
|
||||
Y = (Y_REG >> 4) & 0x0fff;
|
||||
|
||||
if (YRL)
|
||||
Y_REG = INPUTS;
|
||||
@ -224,46 +209,29 @@ void SCSPDSP::Step()
|
||||
//Shifter
|
||||
s32 SHIFTED = 0; //24 bit
|
||||
if (SHIFT == 0)
|
||||
SHIFTED = std::clamp<s32>(ACC, -0x00800000, 0x007FFFFF);
|
||||
SHIFTED = std::clamp<s32>(ACC, -0x00800000, 0x007fffff);
|
||||
else if (SHIFT == 1)
|
||||
SHIFTED = std::clamp<s32>(ACC * 2, -0x00800000, 0x007FFFFF);
|
||||
SHIFTED = std::clamp<s32>(ACC * 2, -0x00800000, 0x007fffff);
|
||||
else if (SHIFT == 2)
|
||||
{
|
||||
SHIFTED = ACC * 2;
|
||||
SHIFTED <<= 8;
|
||||
SHIFTED >>= 8;
|
||||
//SHIFTED &= 0x00FFFFFF;
|
||||
//if (SHIFTED & 0x00800000)
|
||||
//SHIFTED |= 0xFF000000;
|
||||
}
|
||||
SHIFTED = util::sext(ACC * 2, 24);
|
||||
else if (SHIFT == 3)
|
||||
{
|
||||
SHIFTED = ACC;
|
||||
SHIFTED <<= 8;
|
||||
SHIFTED >>= 8;
|
||||
//SHIFTED &= 0x00FFFFFF;
|
||||
//if (SHIFTED & 0x00800000)
|
||||
//SHIFTED |= 0xFF000000;
|
||||
}
|
||||
SHIFTED = util::sext(ACC, 24);
|
||||
|
||||
//ACCUM
|
||||
Y <<= 19;
|
||||
Y >>= 19;
|
||||
//if (Y & 0x1000)
|
||||
//Y |= 0xFFFFF000;
|
||||
Y = util::sext(Y, 13);
|
||||
|
||||
int64_t const v = (int64_t(X) * int64_t(Y)) >> 12;
|
||||
s64 const v = (s64(X) * s64(Y)) >> 12;
|
||||
ACC = int(v + B);
|
||||
|
||||
if (TWT)
|
||||
TEMP[(TWA + DEC) & 0x7F] = SHIFTED;
|
||||
TEMP[(TWA + DEC) & 0x7f] = SHIFTED;
|
||||
|
||||
if (FRCL)
|
||||
{
|
||||
if (SHIFT == 3)
|
||||
FRC_REG = SHIFTED & 0x0FFF;
|
||||
FRC_REG = SHIFTED & 0x0fff;
|
||||
else
|
||||
FRC_REG = (SHIFTED >> 11) & 0x1FFF;
|
||||
FRC_REG = (SHIFTED >> 11) & 0x1fff;
|
||||
}
|
||||
|
||||
if (MRD || MWT)
|
||||
@ -279,7 +247,7 @@ void SCSPDSP::Step()
|
||||
if (!TABLE)
|
||||
ADDR &= RBL - 1;
|
||||
else
|
||||
ADDR &= 0xFFFF;
|
||||
ADDR &= 0xffff;
|
||||
ADDR += RBP << 12;
|
||||
ADDR <<= 1;
|
||||
if (MRD && (step & 1)) //memory only allowed on odd? DoA inserts NOPs on even
|
||||
@ -301,7 +269,7 @@ void SCSPDSP::Step()
|
||||
if (ADRL)
|
||||
{
|
||||
if (SHIFT == 3)
|
||||
ADRS_REG = (SHIFTED >> 12) & 0xFFF;
|
||||
ADRS_REG = (SHIFTED >> 12) & 0xfff;
|
||||
else
|
||||
ADRS_REG = INPUTS >> 16;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user