memory - 如果 SNES 有 128k 内存并且在汇编中,您可以引用 $FF :FFFF addresses, 这是如何工作的?

标签 memory ram addressing

我在这里误解了什么吗? 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/

上一篇:SQL 选择 MAX(COUNT)

下一篇:R成对积

相关文章:

android - 如何解决堆空间错误?

c++ - 为什么默认情况下不使用 NULL 初始化指针?

r - 在 R 中使用 sapply() 的内存有效方式

c - 如何在 Linux 上设置没有 root 权限的可编程 ram 磁盘

c - 使用 C 确定地址线的数量和 RAM 字的大小

python - ctypes内存管理: how and when free the allocated resources?

c++ - 结构内存分配中的 char*

arrays - Fortran:普通数组与存储相同数据量的对象所需的 RAM

C# foreaching 通过 list<struct> 不会改变值

Java:直接 IntBuffer 的大小限制?