reios: cdda support
This commit is contained in:
parent
55f76d02c0
commit
e162f3ac83
|
@ -49,14 +49,3 @@ u16 reply_71[] =
|
||||||
|
|
||||||
|
|
||||||
u32 reply_71_sz=sizeof(reply_71);
|
u32 reply_71_sz=sizeof(reply_71);
|
||||||
char szExDT[8][32] =
|
|
||||||
{
|
|
||||||
"Any...",
|
|
||||||
"CD-DA",
|
|
||||||
"Mode1",
|
|
||||||
"Mode2",
|
|
||||||
"Mode2-Form1",
|
|
||||||
"Mode2-Form2",
|
|
||||||
"Mode2-Non-XA",
|
|
||||||
"-> GD UNKNOWN TYPE <="
|
|
||||||
};
|
|
||||||
|
|
|
@ -134,6 +134,7 @@ struct GD_SecNumbT
|
||||||
u8 full;
|
u8 full;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
extern GD_SecNumbT SecNumber;
|
||||||
|
|
||||||
struct read_params_t
|
struct read_params_t
|
||||||
{
|
{
|
||||||
|
@ -212,6 +213,7 @@ struct cdda_t
|
||||||
};
|
};
|
||||||
}CurrAddr,EndAddr,StartAddr;
|
}CurrAddr,EndAddr,StartAddr;
|
||||||
} ;
|
} ;
|
||||||
|
extern cdda_t cdda;
|
||||||
|
|
||||||
union ByteCount_t
|
union ByteCount_t
|
||||||
{
|
{
|
||||||
|
@ -254,11 +256,7 @@ extern GD_HardwareInfo_t GD_HardwareInfo;
|
||||||
|
|
||||||
//Response strings
|
//Response strings
|
||||||
extern u16 reply_a1[];
|
extern u16 reply_a1[];
|
||||||
extern u16 reply_11[];
|
|
||||||
extern u16 reply_71[];
|
extern u16 reply_71[];
|
||||||
extern char szExDT[8][32];
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#define GD_IMPEDHI0_Read 0x005F7000 // (R) These are all
|
#define GD_IMPEDHI0_Read 0x005F7000 // (R) These are all
|
||||||
|
|
|
@ -39,6 +39,23 @@ u32 libGDR_GetTrackNumber(u32 sector, u32& elapsed)
|
||||||
return 0xAA;
|
return 0xAA;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool libGDR_GetTrack(u32 track_num, u32& start_fad, u32& end_fad)
|
||||||
|
{
|
||||||
|
if (track_num == 0 || track_num > disc->tracks.size())
|
||||||
|
return false;
|
||||||
|
start_fad = disc->tracks[track_num - 1].StartFAD;
|
||||||
|
end_fad = disc->tracks[track_num - 1].EndFAD;
|
||||||
|
if (end_fad == 0)
|
||||||
|
{
|
||||||
|
if (track_num == disc->tracks.size())
|
||||||
|
end_fad = disc->LeadOut.StartFAD - 1;
|
||||||
|
else
|
||||||
|
end_fad = disc->tracks[track_num].StartFAD - 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
//TODO : fix up
|
//TODO : fix up
|
||||||
u32 libGDR_GetDiscType()
|
u32 libGDR_GetDiscType()
|
||||||
{
|
{
|
||||||
|
|
|
@ -132,7 +132,7 @@ void GD_HLE_Command(u32 cc, u32 prm)
|
||||||
switch(cc)
|
switch(cc)
|
||||||
{
|
{
|
||||||
case GDCC_GETTOC:
|
case GDCC_GETTOC:
|
||||||
WARN_LOG(REIOS, "GDROM: *FIXME* CMD GETTOC CC:%X PRM:%X",cc,prm);
|
WARN_LOG(REIOS, "GDROM: *FIXME* CMD GETTOC PRM:%X", prm);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case GDCC_GETTOC2:
|
case GDCC_GETTOC2:
|
||||||
|
@ -144,7 +144,7 @@ void GD_HLE_Command(u32 cc, u32 prm)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case GDCC_INIT:
|
case GDCC_INIT:
|
||||||
INFO_LOG(REIOS, "GDROM: CMD INIT CC:%X PRM:%X",cc,prm);
|
INFO_LOG(REIOS, "GDROM: CMD INIT PRM:%X", prm);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case GDCC_PIOREAD:
|
case GDCC_PIOREAD:
|
||||||
|
@ -157,27 +157,50 @@ void GD_HLE_Command(u32 cc, u32 prm)
|
||||||
|
|
||||||
|
|
||||||
case GDCC_PLAY_SECTOR:
|
case GDCC_PLAY_SECTOR:
|
||||||
WARN_LOG(REIOS, "GDROM: CMD PLAYSEC? CC:%X PRM:%X",cc,prm);
|
WARN_LOG(REIOS, "GDROM: CMD PLAYSEC? PRM:%X", prm);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case GDCC_RELEASE:
|
case GDCC_RELEASE:
|
||||||
WARN_LOG(REIOS, "GDROM: CMD RELEASE? CC:%X PRM:%X",cc,prm);
|
WARN_LOG(REIOS, "GDROM: CMD RELEASE? PRM:%X", prm);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case GDCC_STOP:
|
case GDCC_STOP:
|
||||||
WARN_LOG(REIOS, "GDROM: CMD STOP CC:%X PRM:%X",cc,prm);
|
INFO_LOG(REIOS, "GDROM: CMD STOP PRM:%X", prm);
|
||||||
|
cdda.playing = false;
|
||||||
|
SecNumber.Status = GD_STANDBY;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case GDCC_SEEK:
|
case GDCC_SEEK:
|
||||||
WARN_LOG(REIOS, "GDROM: CMD SEEK CC:%X PRM:%X",cc,prm);
|
INFO_LOG(REIOS, "GDROM: CMD SEEK PRM:%X", prm);
|
||||||
|
cdda.playing = false;
|
||||||
|
SecNumber.Status = GD_PAUSE;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case GDCC_PLAY:
|
case GDCC_PLAY:
|
||||||
WARN_LOG(REIOS, "GDROM: CMD PLAY PRM:%X args: %x %x %x %x", prm, ReadMem32(prm), ReadMem32(prm + 4), ReadMem32(prm + 8), ReadMem32(prm + 12));
|
{
|
||||||
|
|
||||||
|
u32 first_track = ReadMem32(prm);
|
||||||
|
u32 last_track = ReadMem32(prm + 4);
|
||||||
|
u32 repeats = ReadMem32(prm + 8);
|
||||||
|
u32 start_fad, end_fad, dummy;
|
||||||
|
libGDR_GetTrack(first_track, start_fad, dummy);
|
||||||
|
libGDR_GetTrack(last_track, dummy, end_fad);
|
||||||
|
INFO_LOG(REIOS, "GDROM: CMD PLAY first_track %x last_track %x repeats %x start_fad %x end_fad %x param4 %x", first_track, last_track, repeats,
|
||||||
|
start_fad, end_fad, ReadMem32(prm + 12));
|
||||||
|
cdda.playing = true;
|
||||||
|
cdda.StartAddr.FAD = start_fad;
|
||||||
|
cdda.EndAddr.FAD = end_fad;
|
||||||
|
cdda.repeats = repeats;
|
||||||
|
if (SecNumber.Status != GD_PAUSE || cdda.CurrAddr.FAD < start_fad || cdda.CurrAddr.FAD > end_fad)
|
||||||
|
cdda.CurrAddr.FAD = start_fad;
|
||||||
|
SecNumber.Status = GD_PLAY;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case GDCC_PAUSE:
|
case GDCC_PAUSE:
|
||||||
WARN_LOG(REIOS, "GDROM: CMD PAUSE CC:%X PRM:%X",cc,prm);
|
INFO_LOG(REIOS, "GDROM: CMD PAUSE");
|
||||||
|
cdda.playing = false;
|
||||||
|
SecNumber.Status = GD_PAUSE;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case GDCC_READ:
|
case GDCC_READ:
|
||||||
|
@ -266,7 +289,7 @@ void GD_HLE_Command(u32 cc, u32 prm)
|
||||||
// 1 | 0 | 0 | 0 | 0 | repeat count
|
// 1 | 0 | 0 | 0 | 0 | repeat count
|
||||||
// ------------------------------------------------------
|
// ------------------------------------------------------
|
||||||
// 2-3 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0
|
// 2-3 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0
|
||||||
WriteMem32(dst0, 2); // repeat 0, status 2 (standby)
|
WriteMem32(dst0, (cdda.repeats << 8) | SecNumber.Status);
|
||||||
|
|
||||||
// bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0
|
// bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0
|
||||||
// byte | | | | | | | |
|
// byte | | | | | | | |
|
||||||
|
@ -372,7 +395,7 @@ void gdrom_hle_op()
|
||||||
|
|
||||||
|
|
||||||
case GDROM_SECTOR_MODE:
|
case GDROM_SECTOR_MODE:
|
||||||
INFO_LOG(REIOS, "GDROM: HLE GDROM_SECTOR_MODE PTR_r4:%X",r[4]);
|
WARN_LOG(REIOS, "GDROM: HLE GDROM_SECTOR_MODE PTR_r4:%X",r[4]);
|
||||||
for(int i=0; i<4; i++) {
|
for(int i=0; i<4; i++) {
|
||||||
SecMode[i] = ReadMem32(r[4]+(i<<2));
|
SecMode[i] = ReadMem32(r[4]+(i<<2));
|
||||||
INFO_LOG(REIOS, "%08X", SecMode[i]);
|
INFO_LOG(REIOS, "%08X", SecMode[i]);
|
||||||
|
|
|
@ -793,6 +793,7 @@ void libGDR_GetToc(u32* toc,u32 area);
|
||||||
u32 libGDR_GetDiscType();
|
u32 libGDR_GetDiscType();
|
||||||
void libGDR_GetSessionInfo(u8* pout,u8 session);
|
void libGDR_GetSessionInfo(u8* pout,u8 session);
|
||||||
u32 libGDR_GetTrackNumber(u32 sector, u32& elapsed);
|
u32 libGDR_GetTrackNumber(u32 sector, u32& elapsed);
|
||||||
|
bool libGDR_GetTrack(u32 track_num, u32& start_fad, u32& end_fad);
|
||||||
|
|
||||||
// 0x00600000 - 0x006007FF [NAOMI] (modem area for dreamcast)
|
// 0x00600000 - 0x006007FF [NAOMI] (modem area for dreamcast)
|
||||||
u32 libExtDevice_ReadMem_A0_006(u32 addr,u32 size);
|
u32 libExtDevice_ReadMem_A0_006(u32 addr,u32 size);
|
||||||
|
|
Loading…
Reference in New Issue