Skip to content

Commit

Permalink
reios: ignore high order bits for FAD
Browse files Browse the repository at this point in the history
Mask FAD with ffffff. Apparently the regular BIOS does the same. Fixes
bogus FAD issued by Guilty Gear X when playing CD audio.
Issue  flyinghead#1124
  • Loading branch information
flyinghead committed Jul 5, 2023
1 parent a870fb7 commit 30e66d1
Showing 1 changed file with 7 additions and 7 deletions.
14 changes: 7 additions & 7 deletions core/reios/gdrom_hle.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -109,7 +109,7 @@ static void read_sectors_to(u32 addr, u32 sector, u32 count)

static void GDROM_HLE_ReadDMA()
{
u32 fad = gd_hle_state.params[0];
u32 fad = gd_hle_state.params[0] & 0xffffff;
u32 nsect = gd_hle_state.params[1];
u32 buffer = gd_hle_state.params[2];
// params[3] 0
Expand All @@ -123,7 +123,7 @@ static void GDROM_HLE_ReadDMA()

static void GDROM_HLE_ReadPIO()
{
u32 fad = gd_hle_state.params[0];
u32 fad = gd_hle_state.params[0] & 0xffffff;
u32 nsect = gd_hle_state.params[1];
u32 buffer = gd_hle_state.params[2];
// params[3] seekAhead (wince) or 0
Expand Down Expand Up @@ -309,8 +309,8 @@ static void GD_HLE_Command(gd_command cc)

case GDCC_PLAY2:
{
cdda.StartAddr.FAD = gd_hle_state.params[0];
cdda.EndAddr.FAD = gd_hle_state.params[1];
cdda.StartAddr.FAD = gd_hle_state.params[0] & 0xffffff;
cdda.EndAddr.FAD = gd_hle_state.params[1] & 0xffffff;
cdda.repeats = gd_hle_state.params[2];
// params[3] debug (0)
DEBUG_LOG(REIOS, "GDROM: CMD PLAYSEC from %d to %d repeats %d", cdda.StartAddr.FAD, cdda.EndAddr.FAD, cdda.repeats);
Expand All @@ -337,7 +337,7 @@ static void GD_HLE_Command(gd_command cc)

case GDCC_SEEK:
DEBUG_LOG(REIOS, "GDROM: CMD SEEK");
cdda.CurrAddr.FAD = cdda.StartAddr.FAD = gd_hle_state.params[0];
cdda.CurrAddr.FAD = cdda.StartAddr.FAD = gd_hle_state.params[0] & 0xffffff;
// params[1] debug (0)
cdda.status = cdda_t::Paused;
SecNumber.Status = GD_PAUSE;
Expand Down Expand Up @@ -382,7 +382,7 @@ static void GD_HLE_Command(gd_command cc)

case GDCC_DMA_READ_REQ:
{
u32 sector = gd_hle_state.params[0];
u32 sector = gd_hle_state.params[0] & 0xffffff;
u32 num = gd_hle_state.params[1];

DEBUG_LOG(REIOS, "GDROM: CMD READ Sector=%d, Num=%d", sector, num);
Expand Down Expand Up @@ -509,7 +509,7 @@ static void GD_HLE_Command(gd_command cc)
case GDCC_MULTI_DMAREAD:
case GDCC_MULTI_PIOREAD:
{
u32 sector = gd_hle_state.params[0];
u32 sector = gd_hle_state.params[0] & 0xffffff;
u32 num = gd_hle_state.params[1];
// params[2] seekAhead (wince)
bool dma = cc == GDCC_MULTI_DMAREAD;
Expand Down

0 comments on commit 30e66d1

Please sign in to comment.