mirror of
https://github.com/hrydgard/ppsspp.git
synced 2025-04-02 11:01:50 -04:00
commit
d82b09b087
3 changed files with 53 additions and 12 deletions
|
@ -163,7 +163,10 @@ public:
|
||||||
return id;
|
return id;
|
||||||
}
|
}
|
||||||
MipsCall *get(u32 id) {
|
MipsCall *get(u32 id) {
|
||||||
return calls_[id];
|
auto iter = calls_.find(id);
|
||||||
|
if (iter == calls_.end())
|
||||||
|
return NULL;
|
||||||
|
return iter->second;
|
||||||
}
|
}
|
||||||
MipsCall *pop(u32 id) {
|
MipsCall *pop(u32 id) {
|
||||||
MipsCall *temp = calls_[id];
|
MipsCall *temp = calls_[id];
|
||||||
|
@ -1614,7 +1617,9 @@ int sceKernelStartThread(SceUID threadToStartID, u32 argSize, u32 argBlockPtr)
|
||||||
// TODO: Maybe this happens even for worse-priority started threads?
|
// TODO: Maybe this happens even for worse-priority started threads?
|
||||||
dispatchEnabled = true;
|
dispatchEnabled = true;
|
||||||
|
|
||||||
__KernelChangeReadyState(currentThread, true);
|
if (cur && cur->isRunning())
|
||||||
|
cur->nt.status &= ~THREADSTATUS_RUNNING;
|
||||||
|
__KernelChangeReadyState(cur, currentThread, true);
|
||||||
hleReSchedule("thread started");
|
hleReSchedule("thread started");
|
||||||
}
|
}
|
||||||
else if (!dispatchEnabled)
|
else if (!dispatchEnabled)
|
||||||
|
|
|
@ -571,11 +571,11 @@ u32 sceMpegQueryStreamSize(u32 bufferAddr, u32 sizeAddr)
|
||||||
AnalyzeMpeg(bufferAddr, &ctx);
|
AnalyzeMpeg(bufferAddr, &ctx);
|
||||||
|
|
||||||
if (ctx.mpegMagic != PSMF_MAGIC) {
|
if (ctx.mpegMagic != PSMF_MAGIC) {
|
||||||
ERROR_LOG(HLE, "sceMpegQueryStreamOffset: Bad PSMF magic");
|
ERROR_LOG(HLE, "sceMpegQueryStreamSize: Bad PSMF magic");
|
||||||
Memory::Write_U32(0, sizeAddr);
|
Memory::Write_U32(0, sizeAddr);
|
||||||
return ERROR_MPEG_INVALID_VALUE;
|
return ERROR_MPEG_INVALID_VALUE;
|
||||||
} else if ((ctx.mpegOffset & 2047) != 0 ) {
|
} else if ((ctx.mpegOffset & 2047) != 0 ) {
|
||||||
ERROR_LOG(HLE, "sceMpegQueryStreamOffset: Bad offset");
|
ERROR_LOG(HLE, "sceMpegQueryStreamSize: Bad offset");
|
||||||
Memory::Write_U32(0, sizeAddr);
|
Memory::Write_U32(0, sizeAddr);
|
||||||
return ERROR_MPEG_INVALID_VALUE;
|
return ERROR_MPEG_INVALID_VALUE;
|
||||||
}
|
}
|
||||||
|
@ -1081,7 +1081,6 @@ int sceMpegGetAvcAu(u32 mpeg, u32 streamId, u32 auAddr, u32 attrAddr)
|
||||||
WARN_LOG(HLE, "sceMpegGetAvcAu(%08x, %08x, %08x, %08x): bad mpeg handle", mpeg, streamId, auAddr, attrAddr);
|
WARN_LOG(HLE, "sceMpegGetAvcAu(%08x, %08x, %08x, %08x): bad mpeg handle", mpeg, streamId, auAddr, attrAddr);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
DEBUG_LOG(HLE, "sceMpegGetAvcAu(%08x, %08x, %08x, %08x)", mpeg, streamId, auAddr, attrAddr);
|
|
||||||
|
|
||||||
SceMpegRingBuffer mpegRingbuffer;
|
SceMpegRingBuffer mpegRingbuffer;
|
||||||
Memory::ReadStruct(ctx->mpegRingbufferAddr, &mpegRingbuffer);
|
Memory::ReadStruct(ctx->mpegRingbufferAddr, &mpegRingbuffer);
|
||||||
|
@ -1089,8 +1088,9 @@ int sceMpegGetAvcAu(u32 mpeg, u32 streamId, u32 auAddr, u32 attrAddr)
|
||||||
SceMpegAu sceAu;
|
SceMpegAu sceAu;
|
||||||
sceAu.read(auAddr);
|
sceAu.read(auAddr);
|
||||||
|
|
||||||
if (mpegRingbuffer.packetsRead == 0) {
|
if (mpegRingbuffer.packetsRead == 0 || mpegRingbuffer.packetsFree == mpegRingbuffer.packets) {
|
||||||
// delayThread(mpegErrorDecodeDelay)
|
// delayThread(mpegErrorDecodeDelay)
|
||||||
|
DEBUG_LOG(HLE, "PSP_ERROR_MPEG_NO_DATA=sceMpegGetAvcAu(%08x, %08x, %08x, %08x)", mpeg, streamId, auAddr, attrAddr);
|
||||||
return PSP_ERROR_MPEG_NO_DATA;
|
return PSP_ERROR_MPEG_NO_DATA;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1135,6 +1135,7 @@ int sceMpegGetAvcAu(u32 mpeg, u32 streamId, u32 auAddr, u32 attrAddr)
|
||||||
Memory::Write_U32(1, attrAddr);
|
Memory::Write_U32(1, attrAddr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
DEBUG_LOG(HLE, "%x=sceMpegGetAvcAu(%08x, %08x, %08x, %08x)", result, mpeg, streamId, auAddr, attrAddr);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1158,7 +1159,6 @@ int sceMpegGetAtracAu(u32 mpeg, u32 streamId, u32 auAddr, u32 attrAddr)
|
||||||
WARN_LOG(HLE, "sceMpegGetAtracAu(%08x, %08x, %08x, %08x): bad mpeg handle", mpeg, streamId, auAddr, attrAddr);
|
WARN_LOG(HLE, "sceMpegGetAtracAu(%08x, %08x, %08x, %08x): bad mpeg handle", mpeg, streamId, auAddr, attrAddr);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
DEBUG_LOG(HLE, "sceMpegGetAtracAu(%08x, %08x, %08x, %08x)", mpeg, streamId, auAddr, attrAddr);
|
|
||||||
|
|
||||||
SceMpegRingBuffer mpegRingbuffer;
|
SceMpegRingBuffer mpegRingbuffer;
|
||||||
Memory::ReadStruct(ctx->mpegRingbufferAddr, &mpegRingbuffer);
|
Memory::ReadStruct(ctx->mpegRingbufferAddr, &mpegRingbuffer);
|
||||||
|
@ -1168,6 +1168,11 @@ int sceMpegGetAtracAu(u32 mpeg, u32 streamId, u32 auAddr, u32 attrAddr)
|
||||||
|
|
||||||
int result = 0;
|
int result = 0;
|
||||||
|
|
||||||
|
if (mpegRingbuffer.packetsFree == mpegRingbuffer.packets) {
|
||||||
|
DEBUG_LOG(HLE, "PSP_ERROR_MPEG_NO_DATA=sceMpegGetAtracAu(%08x, %08x, %08x, %08x)", mpeg, streamId, auAddr, attrAddr);
|
||||||
|
return PSP_ERROR_MPEG_NO_DATA;
|
||||||
|
}
|
||||||
|
|
||||||
//...
|
//...
|
||||||
// TODO: Just faking it.
|
// TODO: Just faking it.
|
||||||
sceAu.pts += videoTimestampStep;
|
sceAu.pts += videoTimestampStep;
|
||||||
|
@ -1186,6 +1191,7 @@ int sceMpegGetAtracAu(u32 mpeg, u32 streamId, u32 auAddr, u32 attrAddr)
|
||||||
Memory::Write_U32(0, attrAddr);
|
Memory::Write_U32(0, attrAddr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
DEBUG_LOG(HLE, "%x=sceMpegGetAtracAu(%08x, %08x, %08x, %08x)", result, mpeg, streamId, auAddr, attrAddr);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1270,10 +1276,29 @@ u32 sceMpegRingbufferQueryPackNum(int memorySize)
|
||||||
u32 sceMpegFlushAllStream(u32 mpeg)
|
u32 sceMpegFlushAllStream(u32 mpeg)
|
||||||
{
|
{
|
||||||
MpegContext *ctx = getMpegCtx(mpeg);
|
MpegContext *ctx = getMpegCtx(mpeg);
|
||||||
ERROR_LOG(HLE, "UNIMPL sceMpegFlushAllStream(%08x)", mpeg);
|
if (!ctx) {
|
||||||
if ( ctx->videoFrameCount > 0 || ctx->audioFrameCount > 0) {
|
WARN_LOG(HLE, "sceMpegFlushAllStream(%08x): bad mpeg handle", mpeg);
|
||||||
//__MpegFinish();
|
return -1;
|
||||||
}
|
}
|
||||||
|
WARN_LOG(HLE, "UNIMPL sceMpegFlushAllStream(%08x)", mpeg);
|
||||||
|
|
||||||
|
ctx->avcRegistered = false;
|
||||||
|
ctx->atracRegistered = false;
|
||||||
|
ctx->pcmRegistered = false;
|
||||||
|
ctx->dataRegistered = false;
|
||||||
|
|
||||||
|
ctx->streamMap.clear();
|
||||||
|
ctx->isAnalyzed = false;
|
||||||
|
|
||||||
|
if (Memory::IsValidAddress(ctx->mpegRingbufferAddr))
|
||||||
|
{
|
||||||
|
auto ringbuffer = Memory::GetStruct<SceMpegRingBuffer>(ctx->mpegRingbufferAddr);
|
||||||
|
|
||||||
|
ringbuffer->packetsFree = ringbuffer->packets;
|
||||||
|
ringbuffer->packetsRead = 0;
|
||||||
|
ringbuffer->packetsWritten = 0;
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1308,7 +1333,15 @@ u32 sceMpegAvcCsc(u32 mpeg, u32 sourceAddr, u32 rangeAddr, int frameWidth, u32 d
|
||||||
u32 sceMpegRingbufferDestruct(u32 ringbufferAddr)
|
u32 sceMpegRingbufferDestruct(u32 ringbufferAddr)
|
||||||
{
|
{
|
||||||
DEBUG_LOG(HLE, "sceMpegRingbufferDestruct(%08x)", ringbufferAddr);
|
DEBUG_LOG(HLE, "sceMpegRingbufferDestruct(%08x)", ringbufferAddr);
|
||||||
// Don't need to do anything here
|
|
||||||
|
if (Memory::IsValidAddress(ringbufferAddr))
|
||||||
|
{
|
||||||
|
auto ringbuffer = Memory::GetStruct<SceMpegRingBuffer>(ringbufferAddr);
|
||||||
|
|
||||||
|
ringbuffer->packetsFree = ringbuffer->packets;
|
||||||
|
ringbuffer->packetsRead = 0;
|
||||||
|
ringbuffer->packetsWritten = 0;
|
||||||
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -33,7 +33,10 @@ int KeyboardDevice::UpdateState(InputState &input_state) {
|
||||||
bool doAlternate = alternate && (alternator++ % 10) < 5;
|
bool doAlternate = alternate && (alternator++ % 10) < 5;
|
||||||
|
|
||||||
for (int i = 0; i < sizeof(key_pad_map)/sizeof(key_pad_map[0]); i += 2) {
|
for (int i = 0; i < sizeof(key_pad_map)/sizeof(key_pad_map[0]); i += 2) {
|
||||||
if (GetAsyncKeyState(key_pad_map[i]) && !doAlternate) {
|
if (!GetAsyncKeyState(key_pad_map[i])) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (!doAlternate || key_pad_map[i + 1] > PAD_BUTTON_SELECT) {
|
||||||
input_state.pad_buttons |= key_pad_map[i+1];
|
input_state.pad_buttons |= key_pad_map[i+1];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue