什么是未使用的内存地址?

时间:2018-10-12 14:22:14

标签: assembly commodore

由于我对旧的计算机硬件感兴趣,因此阅读了HTML page on Commodore 64 memory allocations,我偶然发现表中的一个单元格声称该内存地址未使用。这到底意味着什么?这是否意味着如果您想在该地址中放一些东西,就可以放任何您想放的东西?感到困惑,将不胜感激。谢谢。 enter image description here

3 个答案:

答案 0 :(得分:6)

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

  

这些零页地址对于编程   C64-如此有用,内部KERNAL和BASIC系统ROM使   使用其中的大多数,只剩下极少数完全“安全”的   供机器语言程序员用于自己的目的,   不会冒系统崩溃的风险。

因此,内存映射仅对KERNAL和BASIC有效。

其他程序-包括您的程序-可能会毫无风险地访问未使用的地址。如果加载了其他程序,则必须找出它们所访问的地址。您也可以访问其他地址-即使它们被其他程序使用-如果您完全了解 然后会发生...

答案 1 :(得分:2)

LT; DR

它是指工作ram地址,它未被BASIC或KERNAL例程使用,并且可供通用编程使用。

详细说明:

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

下面是从COMPUTE! magazine issue 32

获取的常规内存映射

enter image description here

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

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

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

尽管有聪明的解决方案。与实用程序工具一样,假定您不使用数据集,则驻留在数据集缓冲区($ 033C- $ 03FB)中,或将屏幕ram用作临时缓冲区并有效地在屏幕上填充乱码。

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

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

还请注意:用户编写的ML程序通常放置在$ C000- $ D000中,BASIC解释器不触摸它,并将其称为“ Free Ram”。

答案 2 :(得分:2)

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变量和数组来存储程序的数据。