我得到?OUT OF MEMORY ERROR当我试图让磁盘返回后汇编程序的目录列表.
我准备了一个简单的例行程序,只是为了理解发生了什么,例如:
*=$c000
 lda #$00
 sta $d020
 rts
我的构建脚本是:
C:\...\acme0.95.6win\acme.exe --outfile build\ROUTFILE --format cbm RSOURCEFILE
C:\...\tools\WinVICE-2.4-x64\x64.exe build\ROUTFILE
当我运行构建脚本时,模拟器会加载PRG文件.尝试运行它,但没有任何反应,因为我没有包括BASIC加载器.即使在那之后,如果我写入LOAD "$",8目录列表.我到了?OUT OF MEMORY ERROR.那么上面的场景有什么问题呢?
PRG文件的十六进制转储是:
00 c0 a9 00 8d 20 d0 60 
这似乎只是Commodore 64如何加载程序的工件.当您使用LOAD命令在内存中加载某些内容时,指向各种BASIC数据区域的开头和结尾的指针将被设置为加载程序之后的地址.因此,对于以$ C000加载的6字节程序,这些指针设置为$ C006.但是BASIC内存指针的结尾仍然是$ A000.这会产生无效的情况,因为指向BASIC数据区的指针高于BASIC允许使用的最大地址.它最终看起来像BASIC已经耗尽内存.
通常这不是问题.您只能将汇编程序加载到$ C000,并且通常是第一件事,加载程序后您唯一要做的就是通过输入来执行程序SYS 49152,就像Jester提到的那样.如果你想要加载的程序,但不执行它的时候,你可以通过使用新的命令,如彼得·科夫勒的答案给出,这应该重置指针的有效默认状态修复无效指针问题,同时留下$ C000装载代码修改.
有时,在将数据加载到较高的内存区域(例如$ c000)后,内存指针已损坏(如doynax建议)。你需要做一个
NEW
解决这个问题。(基本内存指针将更新到已加载文件的末尾。如果文件在$ A000之后结束,则表示您不在基本内存中,导致OUT OF MEMORY ERROR。)。之后,您将可以加载$。由于您没有基本代码,因此不会造成任何伤害。
我不知道您使用的工具是什么,但是正如Jester所提到的,您的代码需要加载为,8,1,因此尊重加载地址。您共享的代码是正确的,它以00 C0加载地址的前两个字节开头。
如果load "$",8成功并且文件在磁盘上,请尝试加载它,8,1,然后再尝试sys 49152(0xC000)。