From 0c4333a1dc006a1d8f694a525557c0e4648331f1 Mon Sep 17 00:00:00 2001 From: Liu Date: Sun, 23 Jun 2024 10:12:53 +0800 Subject: [PATCH] MemSpace --- docs/SDK/sdks.md | 7 ------- docs/memspace.md | 38 ++++++++++++++++++++++++++++++++++++++ mkdocs.yml | 3 ++- 3 files changed, 40 insertions(+), 8 deletions(-) delete mode 100644 docs/SDK/sdks.md create mode 100644 docs/memspace.md diff --git a/docs/SDK/sdks.md b/docs/SDK/sdks.md deleted file mode 100644 index de28dd7..0000000 --- a/docs/SDK/sdks.md +++ /dev/null @@ -1,7 +0,0 @@ -# Cooperating with different SDKs - -`PSPSDK`是民间爱好者自发通过逆向工程研究得到的SDK。围绕着这套SDK,已经移植出多种库。`PSPSDK`随着PSP破解的发展不断迭代,从以前的`M33`格式到后来的格式。 - -目前,官方的SDK已经泄露在互联网上,通过在互联网档案馆搜寻不难得到。随着官方SDK的泄露,随之而来的是大量的官方文档,它们对于PSP的运作机理进行了很好的补充。作为初学者阅读这些文档有助于我们更好地使用`PSPSDK`。 - -事实上,现在`PSPSDK`的功能和配套软件在某些方面已经远远超过了官方SDK。但是`PSPSDK`少收录了部分系统库(系统调用)的函数,亦缺乏许多函数参数的解释。另外,官方SDK还收录了索尼开发的的部分第三方库。这些库能够使我们的程序中UI等的设计更接近当时PSP官方出品的程序。 \ No newline at end of file diff --git a/docs/memspace.md b/docs/memspace.md new file mode 100644 index 0000000..8dce737 --- /dev/null +++ b/docs/memspace.md @@ -0,0 +1,38 @@ +# Memory Address Space 内存地址空间 + +PSP 1000 的物理内存为 32MB. PSP 2000/3000 的物理内存为 64MB。 + +32MB 即 2^25B,物理内存地址范围为 0x00000000~0x02000000. + +# 虚拟地址空间 + +| 虚拟地址 | 用途 | +| ----------------------------------- | -------------------------- | +| 0x00000000~0x40000000(2^30B=1024MB) | 用户态可访问内存(缓存) | +| 0x40000000~0x80000000 | 用户态可访问内存(未缓存) | +| 0x80000000~0xA0000000(2^29B=512MB) | 内核态可访问内存(缓存) | +| 0xA0000000~0xC0000000 | 内核态可访问内存(未缓存) | + +# 虚拟内存如何映射到物理内存? + +## 通过下面的地址访问物理内存时会经过缓存 + +| VM Start | VM End | Size | Segement | PM Start | PM End | +| ---------- | ---------- | ---- | ------------------------------- | ---------- | ---------- | +| 0x88000000 | 0x887fffff | 8MB | 内核态(缓存) | 0x00000000 | 0x007fffff | +| 0x08800000 | 0x09ffffff | 24MB | 用户态(缓存) | 0x00800000 | 0x01ffffff | +| 0x0a00000 | 0x0bffffff | 32MB | 用户态(缓存)(PSP2000/PSP3000) | 0x02000000 | 0x04000000 | + +## 通过下面的地址访问物理内存时不经过缓存 + +# 虚拟内存如何映射到其他物理设备? + +| VM Start | VM End | Size | Segement | Description | +| ---------- | ---------- | ---- | ---------------- | ------------------------------------------ | +| 0x00010000 | 0x00013fff | | 用户态(缓存) | 操作按钮 | +| 0x04000000 | 0x041fffff | 2MB | 用户态(缓存) | 显存/帧缓冲区 | +| 0xbfc00000 | 0xbfcfffff | 1MB | 内核态(未缓存) | 内存中的硬件异常表(Exception Vector Table) | + +# 游戏的默认加载地址 + +0x08804000,属于用户态缓存区域。 diff --git a/mkdocs.yml b/mkdocs.yml index 72ef3d5..2b2cc78 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -29,13 +29,14 @@ nav: - Font: 'libs\font.md' - VFPU: '' - Media Engine: 'mediaengine.md' + - Module Load: 'moudleload.md' - CMake: 'cmake.md' - Debug: 'debug.md' - Release: 'release.md' - CI / CD: 'githubactions.md' - Reverse Engineering: - Disasm: 'assembly.md' - - Memory Space: 'moudleload.md' + - Memory Space: 'memspace.md' - Patch: - 'patch.md' - 'patchexe.md'