protected internal override void read() { drvAddr = read32(); arg = read32(); if (drvAddr == 0) { drv = null; } else { drv = new pspIoDrv(); drv.read(mem, drvAddr); } }
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); } }