我在这里误解了什么吗? 128kB 远小于 0xFFFFFF 字节。
最佳答案
好的,老问题,但这只是在谷歌中出现的,我完全可以回答这个问题。
这里的混淆在于 RAM、ROM 和 SNES 的总地址空间之间的差异。虽然 SNES 确实只有 128K 的 RAM,但这只是 volatile 内存,并没有考虑 ROM 空间。工作 RAM 映射到 bank 7E 和 7F,每个 64K。 VRAM 是另一个 32K 的 volatile 存储器,但在标准地址空间内无法访问,需要通过特殊寄存器写入。
最常见的 ROM 映射(在社区中称为 LoROM 和 HiROM)映射每个 bank 中地址空间上半部分的 32K bank 或完整的 64K bank。 “LoROM”映射 32K 组(00:8000-00:FFFF, 01:8000-01:FFFF, ..., 3F:8000-3F:FFFF, 镜像在 80:8000-BF:FFFF)而 HiROM 映射 64K 组(C0:0000-C0:FFFF, C1:0000:C1-FFFF, ... FF:0000-FF:FFFF)。如前所述,工作 RAM 映射到 64K 组 7E 和 7F。我不太熟悉 SRAM 的工作原理,但它映射到 70:0000 iirc 并在 7X 区域的几个附加库中进行镜像。
编辑:进一步说明,ROM当然是只读的。它是您的程序数据(读取:游戏、其指令和 Assets )的存储位置。任何需要修改的内容(需要解压缩的压缩数据、关卡数据、敌人、玩家统计数据、各种背景上的任何显示的瓷砖 map 等)都会传输到 RAM (7E/7F) 进行处理。 ROM 是印在您墨盒芯片上的内容,而 RAM 只是在每次系统启动时填充垃圾数据;在游戏的初始化步骤中使用简单的循环将 RAM 清零是相当标准的做法。
希望这能说明问题!
关于memory - 如果 SNES 有 128k 内存并且在汇编中,您可以引用 $FF :FFFF addresses, 这是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18970177/