【问题标题】:Modified C64 PRG BASIC header?修改 C64 PRG BASIC 标头?
【发布时间】:2019-12-29 15:56:52
【问题描述】:

我最近买了一个 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 行得到 OUT OF MEMORY ERROR。

我做错了吗?还是这条指令真的内存不足?

TMP 仍然在后台加载到内存中。 我目前正在 VICE 中运行它。

【问题讨论】:

  • 不清楚TMP 是什么。那是你的全部代码吗?您是否为PRG 设置了加载地址?听起来CHR$ 正在尝试分配一个新字符串并失败,因为它认为没有剩余的可用内存。
  • 抱歉,TMP 是 Turbo Macro Pro v1.2。在完整代码中,我有一些汇编代码 *=1000 美元。但如果 BASIC 行是 10 SYS 4096,我不会收到 OUT OF MEMORY ERROR。
  • 事实证明,如果我组装到磁盘然后重新启动并从磁盘运行它工作正常,那么 TMP 一定是一些内存问题。我只是不明白什么。

标签: assembly basic 6502 c64


【解决方案1】:

我猜想 TMP 会为查找表、中间代码等分配所有内存。它最不想做的就是 BASIC 把事情搞砸了,所以它会将 BASIC 内存的顶部指向安全的地方。 可分配的 BASIC 内存可以在 43-44 和 55-56 的指针中找到,指示 BASIC 内存的开始/结束。通常情况下,它们是 $0801 到 $A000,但我猜 TMP 会以其他方式设置它们。

【讨论】:

    猜你喜欢
    • 2019-01-25
    • 1970-01-01
    • 1970-01-01
    • 2013-05-03
    • 2015-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多