Пример #1
0
        protected internal override void read()
        {
            drvAddr = read32();
            arg     = read32();

            if (drvAddr == 0)
            {
                drv = null;
            }
            else
            {
                drv = new pspIoDrv();
                drv.read(mem, drvAddr);
            }
        }
Пример #2
0
        public virtual void installDrivers()
        {
            Memory mem = Memory.Instance;

            dumpIoIoctl_0x02125803 = readBytes("ms.ioctl.0x02125803");

            hleInit();

            pspIoDrv      controllerDrv         = new pspIoDrv();
            pspIoDrvFuncs controllerFuncs       = new pspIoDrvFuncs();
            string        controllerName        = "mscmhc";
            string        controllerDescription = "MS host controller";

            pspIoDrv      storageDrv         = new pspIoDrv();
            pspIoDrvFuncs storageFuncs       = new pspIoDrvFuncs();
            string        storageName        = "msstor";
            string        storageDescription = "MSstor whole dev";

            pspIoDrv      partitionDrv         = new pspIoDrv();
            pspIoDrvFuncs partitionFuncs       = new pspIoDrvFuncs();
            string        partitionName        = "msstor0p";
            string        partitionDescription = "MSstor partition #1";

            int Length = 0;

            Length += controllerDrv.@sizeof() + controllerFuncs.@sizeof() + controllerName.Length + 1 + controllerDescription.Length + 1;
            Length += storageDrv.@sizeof() + storageFuncs.@sizeof() + storageName.Length + 1 + storageDescription.Length + 1;
            Length += partitionDrv.@sizeof() + partitionFuncs.@sizeof() + partitionName.Length + 1 + partitionDescription.Length + 1;
            SysMemInfo memInfo = Modules.SysMemUserForUserModule.malloc(SysMemUserForUser.KERNEL_PARTITION_ID, "sceMSstor-mscmhc", SysMemUserForUser.PSP_SMEM_Low, Length, 0);

            int controllerDrvAddr         = memInfo.addr;
            int controllerFuncsAddr       = controllerDrvAddr + controllerDrv.@sizeof();
            int storageDrvAddr            = controllerFuncsAddr + controllerFuncs.@sizeof();
            int storageFuncsAddr          = storageDrvAddr + storageDrv.@sizeof();
            int partitionDrvAddr          = storageFuncsAddr + controllerFuncs.@sizeof();
            int partitionFuncsAddr        = partitionDrvAddr + partitionDrv.@sizeof();
            int controllerNameAddr        = partitionFuncsAddr + partitionFuncs.@sizeof();
            int controllerDescriptionAddr = controllerNameAddr + controllerName.Length + 1;
            int storageNameAddr           = controllerDescriptionAddr + controllerDescription.Length + 1;
            int storageDescriptionAddr    = storageNameAddr + storageName.Length + 1;
            int partitionNameAddr         = storageDescriptionAddr + storageDescription.Length + 1;
            int partitionDescriptionAddr  = partitionNameAddr + partitionName.Length + 1;

            installIoFunctions(controllerFuncs, storageFuncs, partitionFuncs);

            Utilities.writeStringZ(mem, controllerNameAddr, controllerName);
            Utilities.writeStringZ(mem, controllerDescriptionAddr, controllerDescription);
            controllerDrv.nameAddr        = controllerNameAddr;
            controllerDrv.name            = controllerName;
            controllerDrv.devType         = 1;
            controllerDrv.unknown         = 0;
            controllerDrv.descriptionAddr = controllerDescriptionAddr;
            controllerDrv.description     = controllerDescription;
            controllerDrv.funcsAddr       = controllerFuncsAddr;
            controllerDrv.ioDrvFuncs      = controllerFuncs;
            controllerDrv.write(mem, controllerDrvAddr);

            Utilities.writeStringZ(mem, storageNameAddr, storageName);
            Utilities.writeStringZ(mem, storageDescriptionAddr, storageDescription);
            storageDrv.nameAddr        = storageNameAddr;
            storageDrv.name            = storageName;
            storageDrv.devType         = 1;
            storageDrv.unknown         = 0;
            storageDrv.descriptionAddr = storageDescriptionAddr;
            storageDrv.description     = storageDescription;
            storageDrv.funcsAddr       = storageFuncsAddr;
            storageDrv.ioDrvFuncs      = storageFuncs;
            storageDrv.write(mem, storageDrvAddr);

            Utilities.writeStringZ(mem, partitionNameAddr, partitionName);
            Utilities.writeStringZ(mem, partitionDescriptionAddr, partitionDescription);
            partitionDrv.nameAddr        = partitionNameAddr;
            partitionDrv.name            = partitionName;
            partitionDrv.devType         = 1;
            partitionDrv.unknown         = 0;
            partitionDrv.descriptionAddr = partitionDescriptionAddr;
            partitionDrv.description     = partitionDescription;
            partitionDrv.funcsAddr       = partitionFuncsAddr;
            partitionDrv.ioDrvFuncs      = partitionFuncs;
            partitionDrv.write(mem, partitionDrvAddr);

            int sceIoAddDrv = NIDMapper.Instance.getAddressByName("sceIoAddDrv");

            if (sceIoAddDrv != 0)
            {
                SceKernelThreadInfo thread = Modules.ThreadManForUserModule.CurrentThread;
                Modules.ThreadManForUserModule.executeCallback(thread, sceIoAddDrv, new AfterAddDrvController(thread, sceIoAddDrv, storageDrvAddr, partitionDrvAddr), false, controllerDrvAddr);
            }
        }