在VICE仿真器中加载PRG文件后出现C64内存不足错误

时间:2017-04-19 14:45:59

标签: assembly c64

当我在返回程序集例程后尝试获取磁盘的目录列表时,我得到#!/usr/bin/env python3 import os import tempfile msg = "THIS IS A HORRIBLE MESSAGE" txt = None try: txt = tempfile.mkstemp(dir='.', suffix='.txt')[1] with open(txt, "w") as f: f.write(msg) except Exception as exp: raise exp finally: if txt: os.remove(txt)

我准备了一个简单的例行程序,只是为了理解发生了什么,例如:

?OUT OF MEMORY ERROR

我的构建脚本是:

*=$c000

 lda #$00
 sta $d020
 rts

当我运行构建脚本时,模拟器会加载PRG文件。尝试运行它,但没有任何反应,因为我没有包括BASIC加载器。即使在那之后,如果我写C:\...\acme0.95.6win\acme.exe --outfile build\ROUTFILE --format cbm RSOURCEFILE C:\...\tools\WinVICE-2.4-x64\x64.exe build\ROUTFILE 来获取目录列表。我得到了LOAD "$",8。那么在上面的场景中出了什么问题?

PRG文件的十六进制转储是:

?OUT OF MEMORY ERROR

2 个答案:

答案 0 :(得分:6)

这似乎只是Commodore 64加载程序的工件。当您使用LOAD命令在内存中加载某些内容时,指向各种BASIC数据区域的开头和结尾的指针将被设置为加载程序之后的地址。因此,对于以$ C000加载的6字节程序,这些指针设置为$ C006。但是BASIC内存指针的结尾仍然是$ A000。这会产生无效的情况,因为指向BASIC数据区的指针高于BASIC允许使用的最大地址。它最终看起来像BASIC已经耗尽内存。

通常这不是问题。你只能将程序集程序加载到$ C000,这样通常是第一件事,加载程序后你唯一要做的就是输入SYS 49152来执行程序,就像Jester提到的那样。如果你想加载程序但不立即执行它你可以通过使用Peter Kofler的答案中给出的NEW命令修复无效指针问题,这应该将指针重置为有效的默认状态,同时保留代码装载在$ C000未经修改。

答案 1 :(得分:4)

有时在将数据加载到更高的内存区域后,在你的情况下$ c000,内存指针被破坏(如doynax建议的那样)。你需要做一个

NEW

解决这个问题。 (基本内存指针更新到加载文件的末尾。如果文件在$ A000之后结束,则超出基本内存,导致OUT OF MEMORY ERROR。)之后,您将能够加载$。由于您没有基本代码,因此不会造成任何伤害。

我不知道你正在使用的工具,但正如Jester所提到的,你的代码需要加载为8,1所以加载地址是受到尊重的。您共享的代码是正确的,它以00 C0作为前两个字节(加载地址)开始。

如果load "$",8成功并且您的文件位于磁盘上,请尝试加载,8,1,然后尝试sys 49152(即0xC000)。