【问题标题】:What is an unused memory address?什么是未使用的内存地址?
【发布时间】:2019-03-17 19:20:20
【问题描述】:

阅读此HTML page on Commodore 64 memory allocations,因为我对旧计算机硬件感兴趣,我偶然发现了表中的一个单元格,该单元格声称内存地址未使用。这究竟意味着什么?这是否意味着如果你想在那个地址里放一些东西,你可以放任何你想要的东西?很困惑,并会感谢所有答案。谢谢。

【问题讨论】:

标签: assembly 6502 commodore


【解决方案1】:

BASIC 和 KERNAL 使用大部分零页(地址 $0000$00FF),几乎没有留给您自己的程序使用。未使用的地址是$0002$00FB$00FE

零页在 6502 和相关 CPU 上是特殊的。考虑指令:

LDA $1234

这会将地址$1234 的内容加载到累加器(寄存器之一)。对于零页地址,此指令有一个更快的版本:

LDA $02

到目前为止,没什么大不了的,但是有两种间接寻址模式需要零页。例如:

LDA ($FB),y

读取$FB$FC的内容,把它们当作little-endian的16位地址,把Y寄存器的值加到这个16位地址上,然后从这个地址加载累加器地址。请注意,这使用零页中的两个相邻字节。这使得接近零页末尾的四个未使用字节比$02 处的一个未使用字节更有用。

如果您刚刚开始,您可以只使用四个字节的零页。稍后,您可能会考虑保存和恢复 BASIC 使用的一部分零页。如果您从程序中调用任何 KERNAL 例程,您将希望避免 KERNAL 使用的部分。

如果您使用 BASIC 编程,那么这些都不重要。您可能只会使用PEEKPOKE 来控制视频、音频和I/O。您可以使用 BASIC 变量和数组来存储程序的数据。

【讨论】:

    【解决方案2】:

    LT;DR

    它是指工作内存地址,不被 BASIC 或 KERNAL 例程使用,并免费用于通用编程用途。

    详细解释:

    您所引用的页面是一个非常好的资源,但是如果您不熟悉系统本身,它就太详细了。我建议在深入了解此类细节之前了解一般内存布局。

    下面是取自COMPUTE! magazine issue 32的通用内存映射

    c64 内存映射是高度可配置的。您可以看到位于 RAM 区域顶部的 I/O 和 ROM 区域。在 C64 架构中,ROM 区域下方总是隐藏着 RAM。您可以关闭不需要到达下方 RAM 的 ROM 区域,并在需要时切换回 ROM(或 I/O)。您还可以将屏幕内存移动到您想要的任何位置。

    只有 $0000-$0400 之间的区域,称为工作 ram,是固定的,因为该区域由操作系统(BASIC 解释器和 KERNAL 例程)使用。如果你想在工作内存中使用内存而不产生奇怪的副作用,你必须关闭 BASIC 或 KERNAL ROM。

    例如:如果你关闭 BASIC rom,你可以安全地使用从 $2 到 $90 的零页地址

    虽然有一些巧妙的解决方案。与实用工具一样,假设您不会使用数据集,驻留在数据集缓冲区 ($033C-$03FB) 或使用屏幕内存作为临时缓冲区并有效地用乱码填充屏幕。

    我还必须提醒,内存的第一页(从 $0000 到 $00FF)对于 6502 系列 CPUS 来说是极其重要的。该区域称为零页。在零页上工作的指令在内存中占用更少的字节,并且执行速度更快一个周期。此外,索引间接和间接索引内存模式仅在零页中可用。

    如果您需要保留默认内存配置并且仍然需要一些零页变量,则需要在零页中找到未使用的地址。这是在详细的内存映射中被称为“未使用”的主要原因。

    另请注意:用户编写的 ML 程序通常放置在 $C000-$D000 中,BASIC 解释器不会触及,称为“Free Ram”

    【讨论】:

      【解决方案3】:

      内存映射通常应该指定哪些程序使用该内存。如果他们说“未使用”,这意味着这些指定的程序不使用这个地址。在这里你可以看得更清楚:https://www.c64-wiki.com/wiki/Zeropage:

      这些零页地址在编程时非常有用和重要 C64 - 非常有用,内部 KERNAL 和 BASIC 系统 ROM 使 使用它们中的大多数,只留下少数完全“安全”的 供机器语言程序员用于他们自己的目的, 不会冒系统崩溃的风险。

      所以,内存映射只对 KERNAL 和 BASIC 有效。

      其他程序(包括您的程序)可以无风险地访问未使用的地址。如果加载了其他程序,您必须找出它们访问了哪些地址。您也可以访问其他地址 - 即使它们被其他程序使用 - 如果您确切地知道会发生什么...

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-01-03
        • 2018-10-17
        • 1970-01-01
        • 2012-12-01
        • 2019-02-19
        • 2012-12-29
        相关资源
        最近更新 更多