问题标签 [c64]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
839 浏览

c - 如何将 SID 文件包含到 C64 上的 cc65 程序中?

我想在 cc65 程序中包含和播放 .sid 文件(C64 芯片的音乐)。通常 sid 文件包含一个起价为 1000 美元的播放例程,我如何将其链接到我的 cc65 程序?目前,我使用以下命令使用 cc65 编译我的代码:

0 投票
2 回答
956 浏览

assembly - 如何在 Commodore 64 中更改内核 SCNKEY 例程行为

我正在尝试使用 Commodore 64 中的内核例程来实现游戏控制。

下面的代码有一个例外。每个按键都算作单个输入。eg: 一直按住按钮没有效果。每次移动都必须释放并再次按下。我怎样才能改变这种行为?只要按住键,我只想重复动作。

0 投票
3 回答
320 浏览

basic - 是否可以在 Commodore BASIC 的 DATA 语句字符串中存储任何 PETSCII 字符?

我想将一些二进制数据作为DATA语句存储在 Commodore 64 上的 BASIC 程序中。为了节省空间,我更喜欢存储为字符串,而不是数字序列。

是否可以在语句中存储任何字符,从CHR$(0)through ,或者某些字符不可能以这种方式表示?不能在语句中表示的字符的完整列表(如果有的话)是什么?CHR$(255)DATADATA

我特别想知道CHR$(0)双引号(")、换行符和回车符。如果这些可以表示,如何表示?

0 投票
1 回答
276 浏览

emulation - 如何使用 c1541 -write 命令定义文件类型 (VICE)

我正在尝试使用实用程序将foo.txt文件复制到disk.64图像。c1541

我试着写:

该文件被复制,但作为foo.prg

如何使用SEQUSR类型保存它?我试过了:

才发现文件被复制为foo.seq.prg.

0 投票
2 回答
1774 浏览

assembly - 在 Commodore 64 上使用程序集写入磁盘文件

我正在尝试按照这个Codebase64 Tutorial学习如何使用内核例程编写磁盘文件。

我已经复制了我用 Acme Crossassembler 编写的例程,如下所示。它无法打开文件并给出错误消息:“文件未打开”

我已经使用 C64 Programmer's Reference 准备了下面列出的基本例程。它在相同的环境中按预期工作。

那么,为什么我的 asm 例程不起作用?

我正在测试副 2.4

0 投票
2 回答
1182 浏览

assembly - 在 VICE 模拟器中加载 PRG 文件后出现 C64 内存不足错误

?OUT OF MEMORY ERROR当我在返回汇编程序后试图获取磁盘的目录列表时,我得到了。

我准备了一个简单的例程来了解发生了什么,例如:

我的构建脚本是:

当我运行构建脚本模拟器时,会加载 PRG 文件。尝试运行它,但没有任何反应,因为我没有包含 BASIC 加载程序。即使在那之后,如果我写信LOAD "$",8获取目录列表。我得到?OUT OF MEMORY ERROR。那么在上述情况下有什么问题?


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

0 投票
2 回答
878 浏览

c64 - 如何在光栅线中有 9 个精灵

在真正的 Commodore 64 上(不是在模拟器上),一个光栅线上是否可以有超过 8 个精灵?精灵不需要不同。

0 投票
7 回答
3641 浏览

assembly - 从 6502 汇编器获取随机数

尝试使用 JSR $E09A 在我的 Commodore 64 (C64) 上生成一系列随机数,并从 $63 和 $64 中检索数字。(根据我看到的所有文档,当您使用 BASIC 中的 RND(0) 时,它是相同的例程。但无法对其进行迭代。以下将起作用,并在执行时在 $63 和 $64 中放置不同的数字本身。

现在,当我尝试使用以下代码迭代 10 次时,它永远不会返回。

我是否错过了一些如此明显的东西,我看不到它。我不担心它有多“随机”。此时我只想要一系列随机数。

0 投票
3 回答
1968 浏览

assembly - ca65 汇编器和 ld65 链接器

我开始在 Windows 上使用 ca65 汇编器和 ld65 链接器为在 VICE 模拟器上运行的 Commodore C64 计算机创建二进制代码。

我在文件“basic2.s”上写了这个小的“hello world”源代码

我可以使用以下命令进行组装:

ca65 -t c64 basic2.s

并生成“basic2.o”

我阅读了链接器 ld65 的文档,这令人困惑

我试过不成功:

1-带命令

错误是:

2-带命令

错误是:

谢谢

0 投票
1 回答
142 浏览

for-loop - 带小数增量的 For 循环 !=.5 会产生奇怪的结果

创见

我刚刚找到了我的旧 Commodore 64 计算机,将其连接起来,并决定再次尝试学习 Basic。我刚刚完成了第 3 章,其中演示了一个简单的 FOR 循环:

正如预期的那样,这会产生以下结果:

引入浮点数

当步长设置为 1.0 时,上述结果是相同的。但是,除 0.5 之外的其他数字会导致问题:

如果我将步进增量更改为0.5(或 1)以外的任何值,我会得到奇怪的浮点数,显然浮点数设置得越早出现得越早。对于第一次测试,我将 NB 更改为1 TO 40.

试验结果

  • FOR NB = 1 TO 40 STEP .6:1–31 的正常结果,然后是 31.6000001。为了看看我是否会进一步得到奇怪的结果,我将 NB 增加到 100,然后看到奇怪的数字再次从 42 开始:41.2、41,8、42.4、42.9999999、43.5999999 等。
  • FOR NB = 1 TO 40 STEP .4:1-7.4 的正常结果,然后是 7,8000001,然后是正常结果 8.2-22.6,然后是 22.9999999、23.3999999 等。
  • FOR NB = 1 TO 40 STEP .2:1–6.2 的正常结果,然后 6.3999999 以 0.2 为增量直到 8.5999999,然后从 8.7999998 变为 9.9999998,然后从 10.2 开始正常结果。
  • FOR NB = 1 TO 40 STEP .1:1–3.6 的正常结果,然后是 3.6999999 等。
  • FOR NB = 1 TO 40 STEP .05:1–2.3 的正常结果,然后是 2.34999999(注意额外的数字)直到 2.59999999,然后是 2.65–2.7,然后是 2.74999999 等。

失败迭代次数

这些步骤在以下迭代中失败:

  • 0.6 增量在迭代时失败
    • 52 (31.6000001),
    • 51-70就好了,
    • 那么 71–87 是 0.0000001 到很少(例如:42.9999999),
    • 然后 88–103 再减一(例如:53.1999998),
    • 然后进一步减少 104(例如:62.7999997)。
  • 0.4 增量在迭代时失败
    • 18,
    • 19-55 很好,
    • 56–64 在 -.9999999,
    • 65还好
    • 66–84 在 -.9999999,
    • 85-100就好了,
    • 101–116 是 +.0000001,
    • 117 在 0.000002 处继续,依此类推。
  • 0.2 增量在迭代时失败
    • 28 在 -.9999999,
    • 47-107 很好,
    • 108–140 在 +0.0000001 处失败,
    • 141 以后在 +0.0000002 处失败,依此类推
    • 0.1 增量在迭代时失败
    • 28 在 -.9999999,
    • 79-88就好了,
    • 89–90 在 +0.00000001(原文如此)处失败,
    • 91-116没问题,
    • 117–187 在 +0.0000001 处失败,
    • 188 以后在 +0.0000002 处失败,依此类推。
  • 0.05 增量在迭代时失败
    • 28–33 在 -.00000001,
    • 34-35没问题,
    • 36–68 在 -0.00000001 处失败,
    • 69-78就好了,
    • 79–92 在 +0.00000001 处失败,
    • 93–106 在 +0.00000002 处失败,
    • 107 以后在 +0.00000003 处失败,依此类推。

以上注意事项

作为记录,我添加了一个计数器以简化报告;因此程序看起来像这样:

主要问题

我怀疑问题在于如何将十进制转换为二进制,但奇怪的是它在 0.5 步内工作得非常好。是什么导致了这个错误,如何修复它,或者应该如何解释它?我的 Commodore 运行 Basic v2。