mirror of
https://github.com/holub/mame
synced 2025-06-08 05:44:09 +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])
|
//if (!IPtr[0] && !IPtr[1] && !IPtr[2] && !IPtr[3])
|
||||||
//break;
|
//break;
|
||||||
|
|
||||||
u32 const TRA = (IPtr[0] >> 8) & 0x7F;
|
u32 const TRA = (IPtr[0] >> 8) & 0x7f;
|
||||||
u32 const TWT = (IPtr[0] >> 7) & 0x01;
|
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 XSEL = (IPtr[1] >> 15) & 0x01;
|
||||||
u32 const YSEL = (IPtr[1] >> 13) & 0x03;
|
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 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 TABLE = (IPtr[2] >> 15) & 0x01;
|
||||||
u32 const MWT = (IPtr[2] >> 14) & 0x01;
|
u32 const MWT = (IPtr[2] >> 14) & 0x01;
|
||||||
u32 const MRD = (IPtr[2] >> 13) & 0x01;
|
u32 const MRD = (IPtr[2] >> 13) & 0x01;
|
||||||
u32 const EWT = (IPtr[2] >> 12) & 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 ADRL = (IPtr[2] >> 7) & 0x01;
|
||||||
u32 const FRCL = (IPtr[2] >> 6) & 0x01;
|
u32 const FRCL = (IPtr[2] >> 6) & 0x01;
|
||||||
u32 const SHIFT = (IPtr[2] >> 4) & 0x03;
|
u32 const SHIFT = (IPtr[2] >> 4) & 0x03;
|
||||||
@ -164,10 +164,7 @@ void SCSPDSP::Step()
|
|||||||
else
|
else
|
||||||
return;
|
return;
|
||||||
|
|
||||||
INPUTS <<= 8;
|
INPUTS = util::sext(INPUTS, 24);
|
||||||
INPUTS >>= 8;
|
|
||||||
//if(INPUTS & 0x00800000)
|
|
||||||
//INPUTS |= 0xFF000000;
|
|
||||||
|
|
||||||
if (IWT)
|
if (IWT)
|
||||||
{
|
{
|
||||||
@ -183,13 +180,7 @@ void SCSPDSP::Step()
|
|||||||
if (BSEL)
|
if (BSEL)
|
||||||
B = ACC;
|
B = ACC;
|
||||||
else
|
else
|
||||||
{
|
B = util::sext(TEMP[(TRA + DEC) & 0x7f], 24);
|
||||||
B = TEMP[(TRA + DEC) & 0x7F];
|
|
||||||
B <<= 8;
|
|
||||||
B >>= 8;
|
|
||||||
//if (B & 0x00800000)
|
|
||||||
//B |= 0xFF000000; //Sign extend
|
|
||||||
}
|
|
||||||
if (NEGB)
|
if (NEGB)
|
||||||
B = 0 - B;
|
B = 0 - B;
|
||||||
}
|
}
|
||||||
@ -200,13 +191,7 @@ void SCSPDSP::Step()
|
|||||||
if (XSEL)
|
if (XSEL)
|
||||||
X = INPUTS;
|
X = INPUTS;
|
||||||
else
|
else
|
||||||
{
|
X = util::sext(TEMP[(TRA + DEC) & 0x7f], 24);
|
||||||
X = TEMP[(TRA + DEC) & 0x7F];
|
|
||||||
X <<= 8;
|
|
||||||
X >>= 8;
|
|
||||||
//if (X & 0x00800000)
|
|
||||||
//X |= 0xFF000000;
|
|
||||||
}
|
|
||||||
|
|
||||||
s32 Y = 0; //13 bit
|
s32 Y = 0; //13 bit
|
||||||
if (YSEL == 0)
|
if (YSEL == 0)
|
||||||
@ -214,9 +199,9 @@ void SCSPDSP::Step()
|
|||||||
else if (YSEL == 1)
|
else if (YSEL == 1)
|
||||||
Y = this->COEF[COEF] >> 3; //COEF is 16 bits
|
Y = this->COEF[COEF] >> 3; //COEF is 16 bits
|
||||||
else if (YSEL == 2)
|
else if (YSEL == 2)
|
||||||
Y = (Y_REG >> 11) & 0x1FFF;
|
Y = (Y_REG >> 11) & 0x1fff;
|
||||||
else if (YSEL == 3)
|
else if (YSEL == 3)
|
||||||
Y = (Y_REG >> 4) & 0x0FFF;
|
Y = (Y_REG >> 4) & 0x0fff;
|
||||||
|
|
||||||
if (YRL)
|
if (YRL)
|
||||||
Y_REG = INPUTS;
|
Y_REG = INPUTS;
|
||||||
@ -224,46 +209,29 @@ void SCSPDSP::Step()
|
|||||||
//Shifter
|
//Shifter
|
||||||
s32 SHIFTED = 0; //24 bit
|
s32 SHIFTED = 0; //24 bit
|
||||||
if (SHIFT == 0)
|
if (SHIFT == 0)
|
||||||
SHIFTED = std::clamp<s32>(ACC, -0x00800000, 0x007FFFFF);
|
SHIFTED = std::clamp<s32>(ACC, -0x00800000, 0x007fffff);
|
||||||
else if (SHIFT == 1)
|
else if (SHIFT == 1)
|
||||||
SHIFTED = std::clamp<s32>(ACC * 2, -0x00800000, 0x007FFFFF);
|
SHIFTED = std::clamp<s32>(ACC * 2, -0x00800000, 0x007fffff);
|
||||||
else if (SHIFT == 2)
|
else if (SHIFT == 2)
|
||||||
{
|
SHIFTED = util::sext(ACC * 2, 24);
|
||||||
SHIFTED = ACC * 2;
|
|
||||||
SHIFTED <<= 8;
|
|
||||||
SHIFTED >>= 8;
|
|
||||||
//SHIFTED &= 0x00FFFFFF;
|
|
||||||
//if (SHIFTED & 0x00800000)
|
|
||||||
//SHIFTED |= 0xFF000000;
|
|
||||||
}
|
|
||||||
else if (SHIFT == 3)
|
else if (SHIFT == 3)
|
||||||
{
|
SHIFTED = util::sext(ACC, 24);
|
||||||
SHIFTED = ACC;
|
|
||||||
SHIFTED <<= 8;
|
|
||||||
SHIFTED >>= 8;
|
|
||||||
//SHIFTED &= 0x00FFFFFF;
|
|
||||||
//if (SHIFTED & 0x00800000)
|
|
||||||
//SHIFTED |= 0xFF000000;
|
|
||||||
}
|
|
||||||
|
|
||||||
//ACCUM
|
//ACCUM
|
||||||
Y <<= 19;
|
Y = util::sext(Y, 13);
|
||||||
Y >>= 19;
|
|
||||||
//if (Y & 0x1000)
|
|
||||||
//Y |= 0xFFFFF000;
|
|
||||||
|
|
||||||
int64_t const v = (int64_t(X) * int64_t(Y)) >> 12;
|
s64 const v = (s64(X) * s64(Y)) >> 12;
|
||||||
ACC = int(v + B);
|
ACC = int(v + B);
|
||||||
|
|
||||||
if (TWT)
|
if (TWT)
|
||||||
TEMP[(TWA + DEC) & 0x7F] = SHIFTED;
|
TEMP[(TWA + DEC) & 0x7f] = SHIFTED;
|
||||||
|
|
||||||
if (FRCL)
|
if (FRCL)
|
||||||
{
|
{
|
||||||
if (SHIFT == 3)
|
if (SHIFT == 3)
|
||||||
FRC_REG = SHIFTED & 0x0FFF;
|
FRC_REG = SHIFTED & 0x0fff;
|
||||||
else
|
else
|
||||||
FRC_REG = (SHIFTED >> 11) & 0x1FFF;
|
FRC_REG = (SHIFTED >> 11) & 0x1fff;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (MRD || MWT)
|
if (MRD || MWT)
|
||||||
@ -279,7 +247,7 @@ void SCSPDSP::Step()
|
|||||||
if (!TABLE)
|
if (!TABLE)
|
||||||
ADDR &= RBL - 1;
|
ADDR &= RBL - 1;
|
||||||
else
|
else
|
||||||
ADDR &= 0xFFFF;
|
ADDR &= 0xffff;
|
||||||
ADDR += RBP << 12;
|
ADDR += RBP << 12;
|
||||||
ADDR <<= 1;
|
ADDR <<= 1;
|
||||||
if (MRD && (step & 1)) //memory only allowed on odd? DoA inserts NOPs on even
|
if (MRD && (step & 1)) //memory only allowed on odd? DoA inserts NOPs on even
|
||||||
@ -301,7 +269,7 @@ void SCSPDSP::Step()
|
|||||||
if (ADRL)
|
if (ADRL)
|
||||||
{
|
{
|
||||||
if (SHIFT == 3)
|
if (SHIFT == 3)
|
||||||
ADRS_REG = (SHIFTED >> 12) & 0xFFF;
|
ADRS_REG = (SHIFTED >> 12) & 0xfff;
|
||||||
else
|
else
|
||||||
ADRS_REG = INPUTS >> 16;
|
ADRS_REG = INPUTS >> 16;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user