5

我在这里误解了什么吗?128kB 远小于 0xFFFFFF 字节。

4

2 回答 2

7

好的,老问题,但这只是在谷歌中弹出,我完全可以回答这个问题。

这里的混淆在于 RAM、ROM 和 SNES 的总地址空间之间的差异。虽然 SNES 确实只有 128K 的 RAM,但这只是易失性内存,并没有考虑 ROM 空间。工作 RAM 映射到 bank 7E 和 7F,每个 64K。VRAM 是另一种 32K 的易失性存储器,但在标准地址空间内无法访问,需要通过特殊寄存器写入。

最常见的 ROM 映射(在社区中称为 LoROM 和 HiROM)映射每个 bank 中地址空间上半部分的 32K bank 或完整的 64K bank。"LoROM" 映射 32K 个 bank (00:8000-00:FFFF, 01:8000-01:FFFF, ..., 3F:8000-3F:FFFF, 镜像在 80:8000-BF:FFFF) 而 HiROM 映射 64K 个 bank (C0:0000-C0:FFFF, C1:0000:C1-FFFF, ... FF:0000-FF:FFFF)。如前所述,工作 RAM 映射到 64K 组 7E 和 7F。我对 SRAM 的工作原理不是很熟悉,但它映射到 70:0000 iirc,并在 7X 区域的其他几个库中镜像。

编辑:进一步说明,ROM当然是只读的。它是您的程序数据(阅读:游戏、它的指令和它的资产)存储的地方。任何需要修改的内容(需要解压缩的压缩数据、关卡数据、敌人、玩家统计数据、各种背景上显示的瓦片地图等)都会被传输到 RAM (7E/7F) 进行处理。ROM 是印在墨盒芯片上的内容,而 RAM 只是在每次系统启动时填充垃圾数据;在游戏的初始化步骤中使用简单的循环将 RAM 清零是相当标准的做法。

希望这能说明问题!

于 2014-07-09T23:56:03.620 回答
5

SNES 的地址空间远大于实际地址数这一事实不是问题。在 64 位机器上,指针足够大,可以寻址 1.844674407×10 19个字节,大约是 100 亿 GB。我从来没有见过有这么多内存的电脑,但这不是问题。有些地址只是不引用内存中的任何地址。

希望这可以帮助!

于 2013-09-23T23:12:33.797 回答