public int IoInit()
 {
     //Console.Error.WriteLine("HleInterop: " + HleInterop);
     //Console.Error.WriteLine("PspIoDrv: " + new IntPtr(PspIoDrv));
     //Console.Error.WriteLine("PspIoDrvFuncs: " + new IntPtr(PspIoDrvFuncs));
     //Console.Error.WriteLine("IoInit: " + new IntPtr(PspIoDrvFuncs->IoInit));
     return((int)HleInterop.ExecuteFunctionNow(
                PspIoDrvFuncs->IoInit,
                PspMemory.PointerToPspAddressUnsafe(PspIoDrvArg)
                ));
 }
Example #2
0
        public int sceMpegCreate(SceMpegPointer *sceMpegPointer, void *mpegData, int mpegSize,
                                 SceMpegRingbuffer *sceMpegRingbuffer, int frameWidth, int mode, int ddrTop)
        {
            //return -1;

            var mpeg = GetMpeg(sceMpegPointer);

            if (mpegSize < sceMpegQueryMemSize(0))
            {
                throw (new SceKernelException(SceKernelErrors.ERROR_MPEG_NO_MEMORY));
            }

            // Update the ring buffer struct.
            if (sceMpegRingbuffer->PacketSize == 0)
            {
                sceMpegRingbuffer->PacketsAvailable = 0;
            }
            else
            {
                sceMpegRingbuffer->PacketsAvailable =
                    (int)((sceMpegRingbuffer->DataEnd.Address - sceMpegRingbuffer->Data.Address) /
                          sceMpegRingbuffer->PacketSize);
            }

            sceMpegRingbuffer->SceMpeg = Memory.PointerToPspPointer(sceMpegPointer);

            SceMpeg *sceMpegData = (SceMpeg *)(((byte *)mpegData) + 0x30);

            sceMpegPointer->SceMpeg = Memory.PointerToPspPointer(sceMpegData);

            PointerUtils.StoreStringOnPtr("LIBMPEG", Encoding.UTF8, sceMpegData->MagicBytes);
            PointerUtils.StoreStringOnPtr("001", Encoding.UTF8, sceMpegData->VersionBytes);
            sceMpegData->Pad = -1;
            sceMpegData->RingBufferAddress          = Memory.PointerToPspPointer(sceMpegRingbuffer);
            sceMpegData->RingBufferAddressDataUpper = sceMpegRingbuffer->DataEnd;
            sceMpegData->FrameWidth                 = frameWidth;
            sceMpegData->SceMpegAvcMode.Mode        = -1;
            sceMpegData->SceMpegAvcMode.PixelFormat = GuPixelFormats.Rgba8888;
            sceMpegData->VideoFrameCount            = 0;
            sceMpegData->AudioFrameCount            = 0;

            sceMpegRingbuffer->PacketsTotal = 0;

            mpeg.ReadPackets = numPackets => (int)HleInterop.ExecuteFunctionNow(sceMpegRingbuffer->Callback,
                                                                                sceMpegRingbuffer->Data,
                                                                                numPackets, sceMpegRingbuffer->CallbackParameter);

            mpeg._Mpeg = sceMpegPointer;
            mpeg.Data  = sceMpegData;
            mpeg.Create();

            return(0);
        }
Example #3
0
        public int ExecuteQueued(CpuThreadState cpuThreadState, bool mustReschedule)
        {
            var executedCount = 0;

            //Console.WriteLine("ExecuteQueued");
            if (!HasScheduledCallbacks)
            {
                return(executedCount);
            }
            //Console.WriteLine("ExecuteQueued.HasScheduledCallbacks!");
            //Console.Error.WriteLine("STARTED CALLBACKS");
            while (HasScheduledCallbacks)
            {
                var hleCallback = DequeueScheduledCallback();

                /*
                 *  var FakeCpuThreadState = new CpuThreadState(CpuProcessor);
                 *  FakeCpuThreadState.CopyRegistersFrom(CpuThreadState);
                 *  HleCallback.SetArgumentsToCpuThreadState(FakeCpuThreadState);
                 *
                 *  if (FakeCpuThreadState.PC == 0x88040E0) FakeCpuThreadState.PC = 0x880416C;
                 */
                //Console.WriteLine("ExecuteCallback: PC=0x{0:X}", FakeCpuThreadState.PC);
                //Console.WriteLine("               : A0=0x{0:X}", FakeCpuThreadState.GPR[4]);
                //Console.WriteLine("               : A1=0x{0:X}", FakeCpuThreadState.GPR[5]);
                try
                {
                    _hleInterop.ExecuteFunctionNow(hleCallback.Function, hleCallback.Arguments);
                }
                catch (Exception e)
                {
                    Console.Error.WriteLine(e);
                }
                finally
                {
                    //Console.WriteLine("               : PC=0x{0:X}", FakeCpuThreadState.PC);
                    executedCount++;
                }

                //Console.Error.WriteLine("  CALLBACK ENDED : " + HleCallback);
                if (mustReschedule)
                {
                    //Console.Error.WriteLine("    RESCHEDULE");
                    break;
                }
            }

            executedCount += _hleInterop.ExecuteAllQueuedFunctionsNow();
            //Console.Error.WriteLine("ENDED CALLBACKS");

            return(executedCount);
        }
Example #4
0
        public void Handler()
        {
            Console.Error.WriteLine("Handler!!");
            if (HandlerEnabled)
            {
                UpdateElapsedTime(true);
                PspSharedInfo->ElapsedScheduled.MicroSeconds = HandlerTime;
                PspSharedInfo->ElapsedReal.MicroSeconds      = ElapsedAccumulatedTime;

                uint Result = HleInterop.ExecuteFunctionNow(
                    HandlerCallback,
                    Id,
                    Memory.PointerToPspAddressSafe(&PspSharedInfo->ElapsedScheduled),
                    Memory.PointerToPspAddressSafe(&PspSharedInfo->ElapsedReal),
                    HandlerArgument
                    );
                Console.Error.WriteLine("Handler ENABLED!! {0}", Result);
            }
        }