修改的C64 PRG BASIC头?

6

我最近购买了C64 Mini 并尝试使用Turbo Macro Pro v1.2 编写一些汇编代码。

在编写hello world程序时,我发现一个教程使用了自动运行BASIC头文件。

我也尝试包含 PRINT CHR $(147)以清除屏幕,但是出现了内存不足错误。

原始的BASIC头文件是:

*=$0801
.byte $0c, $08, $0a, $00, $9e, $20
.byte $34, $30, $39, $36, $00, $00
.byte $00

我修改为:

*=$0801
.byte $0e, $08, $0a, $00, $99, $20
.byte $c7, $28, $31, $34, $37, $29
.byte $00, 
.byte $19, $08, $14, $00, $9e, $20
.byte $34, $30, $39, $36, $00, $00
.byte $00

当我从TMP进行组装和运行,然后输入LIST时,我会得到以下结果:
10 PRINT CHR$(147)
20 SYS 4096

但是当我运行时,在第10行出现了内存不足的错误。

我做错了什么吗?还是这个指令真的超出了内存限制?

TMP仍在后台加载到内存中。我目前是在VICE中运行此代码。


不清楚 TMP 是什么。那是你的整个代码吗?你是否为你的 PRG 设置了加载地址?听起来好像 CHR$ 正尝试分配一个新字符串,但因为它认为没有剩余的可用内存而失败了。 - Jester
抱歉,TMP是Turbo Macro Pro v1.2。在完整的代码中,我有一些汇编代码位于* = $1000处。但如果BASIC行是10 SYS 4096,则不会出现内存错误。 - Dacobi
结果证明,如果我将其组装到磁盘上,然后重新启动并从磁盘运行,它就可以正常工作,因此必须是TMP的某些内存问题。我只是不明白是什么问题。 - Dacobi
1个回答

3
我猜想TMP会为查找表、中间代码等分配尽可能多的内存。最后它不希望BASIC 搞乱一切,所以它会将 BASIC 内存的顶部指向安全区域。 可分配的BASIC内存可以在43-44和55-56的指针中找到,这表示BASIC内存的起始/结束位置。通常情况下,它们是$0801到$A000,但我猜测TMP会对它们进行其他设置。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接