/* This file is part of jpcsp. Jpcsp is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Jpcsp is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Jpcsp. If not, see <http://www.gnu.org/licenses/>. */ package jpcsp.HLE.kernel.types; /** usermode version of SceModule */ public class SceKernelModuleInfo extends pspAbstractMemoryMappedStructureVariableLength { // PSP info // http://psp.jim.sh/pspsdk-doc/structSceKernelModuleInfo.html public byte nsegment; public byte[] reserved = new byte[3]; // these never get touched, nsegment is not 32-bit in this struct public int[] segmentaddr = new int[4]; public int[] segmentsize = new int[4]; public int entry_addr; public int gp_value; public int text_addr; public int text_size; public int data_size; public int bss_size; public short attribute; public byte[] version = new byte[2]; public String name; public SceKernelModuleInfo() { } /** SceKernelModuleInfo contains a subset of the data in SceModule */ public void copy(SceModule sceModule) { nsegment = (byte)(sceModule.nsegment & 0xFF); segmentaddr[0] = sceModule.segmentaddr[0]; segmentaddr[1] = sceModule.segmentaddr[1]; segmentaddr[2] = sceModule.segmentaddr[2]; segmentaddr[3] = sceModule.segmentaddr[3]; segmentsize[0] = sceModule.segmentsize[0]; segmentsize[1] = sceModule.segmentsize[1]; segmentsize[2] = sceModule.segmentsize[2]; segmentsize[3] = sceModule.segmentsize[3]; entry_addr = sceModule.entry_addr; gp_value = sceModule.gp_value; text_addr = sceModule.text_addr; text_size = sceModule.text_size; data_size = sceModule.data_size; bss_size = sceModule.bss_size; attribute = sceModule.attribute; version[0] = sceModule.version[0]; version[1] = sceModule.version[1]; name = sceModule.modname; } @Override protected void read() { super.read(); nsegment = (byte)(read8() & 0xFF); reserved[0] = (byte)(read8() & 0xFF); reserved[1] = (byte)(read8() & 0xFF); reserved[2] = (byte)(read8() & 0xFF); segmentaddr[0] = read32(); segmentaddr[1] = read32(); segmentaddr[2] = read32(); segmentaddr[3] = read32(); segmentsize[0] = read32(); segmentsize[1] = read32(); segmentsize[2] = read32(); segmentsize[3] = read32(); entry_addr = read32(); gp_value = read32(); text_addr = read32(); text_size = read32(); data_size = read32(); bss_size = read32(); attribute = (short)(read16() & 0xFFFF); version[0] = (byte)(read8() & 0xFF); version[1] = (byte)(read8() & 0xFF); name = readStringNZ(28); } @Override protected void write() { super.write(); write8(nsegment); writeSkip(3); write32(segmentaddr[0]); write32(segmentaddr[1]); write32(segmentaddr[2]); write32(segmentaddr[3]); write32(segmentsize[0]); write32(segmentsize[1]); write32(segmentsize[2]); write32(segmentsize[3]); write32(entry_addr); write32(gp_value); write32(text_addr); write32(text_size); write32(data_size); write32(bss_size); write16(attribute); write8(version[0]); write8(version[1]); writeStringNZ(28, name); } }