问题标签 [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 回答
138 浏览

assembly - C64 程序集 - 6502/6510 - 一个接一个地显示一系列三个位图,然后进入字符模式

我在这里有一个相当大的问题,我发现仅用几本参考书、互联网和你的真正难以回答。

  1. 我只想显示一个位图。等待几秒钟。
  2. 把它从记忆中抹去。
  3. 显示另一个位图。再等等。
  4. 从记忆中抹去那个。
  5. 显示最终位图。等最后一次。
  6. 而且,你已经猜到了,把它从记忆中抹去。
  7. 然后进入标准字符模式。 &继续运行我的代码 - 从屏幕空白开始,然后进入询问用户一些文本输入等......

粗体我遇到了真正的麻烦!

这是我用来运行显示位图部分的代码,它只是进入一个无限循环......

到目前为止,我已经尝试重复代码,认为它可以覆盖所有内容,但 *=$1FFE 似乎无法按时间顺序工作,对于每个文件,我都会收到内存覆盖错误,并且它始终默认为显示我用 incbin 函数调用的最后一个位图。有没有办法在每个位图帧之间重置所有内容(但只是变黑)?还是我只是错误地加载了这些图像?

然后进入字符模式也将是棘手的,因为即使使用一个位图我也找不到这样做的方法。也许这整个代码结构是错误的方式,idk...

或者这仅仅是c64无法做到的事情?我不愿意去这里,因为我确信我以前在游戏介绍中看到过位图循环——只是真的挠头想知道怎么做。

再次感谢伙计们,很抱歉在这里缺乏理解,我一般是编程新手,但认为我走在正确的轨道上。我希望很多人可以从您的回答中学习,因为这确实是我认为没有任何信息的东西。

你爱准将的朋友,

詹姆斯(Smokeyparkin)

0 投票
1 回答
120 浏览

assembly - C64 Assembly - 循环通过位图作为我的游戏的图形介绍

汇编:CBM prg Studio

这是我之前的帖子,我觉得我已经取得了一些进展,但仍然非常卡住。 我之前的帖子在几个阶段前就这个问题请求帮助......从乐于助人的社区成员Emir Akayd提交的答案中,我选择了选项 1。

目前我只是使用 TEST JUMPER 来尝试每个图像,并希望在每个加载的图像和初始化到我的游戏之间移动到一个计时器。

我认为这里的解决方案现在对更高级的程序员来说应该是显而易见的。我认为我必须在不那么明显的加载屏幕 Ram 部分或稍后在标签“设置”下的代码中做一些愚蠢的事情,我的评论应该解释一切。

对任何建议都很满意,非常感谢您的关注!

0 投票
1 回答
48 浏览

basic - c64 扩展颜色模式:最后一个字符 63 = 191 使用背景 2?? ($D022)

在扩展颜色模式下:

对于背景 1 上的字符 32 到 63(53281/$D021 值),我可以添加 192 以在背景 2(53282/$D022 值)上得到相同的值。对于 bg1 上的字符 64 到 95,我可以添加 128 以在 bg2 上得到相同的值

……至少理论上是这样的。但我发现字符 chr$(63) 落入第二组:所以 63 + 128 = chr$(191) 打印正确,但 chr$(255) 没有?不是很大,我可以解决,但我不愿意相信文档是错误的,特别是因为 64 似乎是比 63 更明智的截止点。这可能是一个副错误?

0 投票
1 回答
191 浏览

assembly - 将内存地址传递给C64程序集中的子程序?

那么如何将“scr1”传递给“param”呢?我知道这是一个内存地址,所以它不适合 1 字节的寄存器。最好的方法是什么?

编辑:

感谢您的回答!下面发布的解决方案效果很好,但这同时使用了 X 和 Y 寄存器。如果“函数”调用依赖于 X 或 Y 的 KERNAL 例程,或者我自己的代码需要 X 来完成某些事情,该怎么办?在这种情况下,我猜这不会按预期工作?

我对汇编程序完全陌生,所以我对很多事情感到困惑。

基本上我想传递地址,因为我想避免代码重复。我有一个简单的函数,可以像这样在屏幕上打印一个字符串:

但这仅适用于 scr1。如果想打印其他东西,我需要复制似乎很浪费的代码。

这在汇编程序中可以接受吗?我的意思是,在 C 或任何其他语言中,您只需编写一个可重用的函数或方法。但是在汇编程序中这似乎很难做到,因为只有 3 个寄存器,它们被很多东西使用。

克服此限制的最佳方法是什么?

0 投票
2 回答
67 浏览

assembly - 在 C64 汇编程序中保存和重用寄存器?

我有这个代码:

我想创建将字符串打印到屏幕的例程。参数是字符串的地址和用作计数器的 X 寄存器。由于 X 也在函数内部使用,因此我将其值存储在 tmp 变量中。

但是这段代码什么也没打印。我对组装完全陌生,所以可能我不明白这应该如何工作。请参阅代码注释。我在这里做错了什么?

0 投票
1 回答
24 浏览

assembly - 有没有办法从 C64 的 Kick Assembler 中的宏访问全局常量

我已经定义了一个const用作 KickAssembler (C64) 宏中的参数。这有效:

这不会:

因此,如果符号是在宏中定义的,它会在汇编过程中被识别。但如果是 global,则不是。
我的动机是拥有全局符号,因此只有一个地方可以更改它们。
有没有办法做到这一点?

0 投票
1 回答
127 浏览

c64 - Commodore C64 如何检测 PAL 或 NTSC

背景资料

我目前正在使用 KickC [测试版] 为 Commodore C64 开发一个编程 API,让我能够更轻松地开发小程序、应用程序和可能的一些游戏;我突然想到我可能需要一种方法来检查我的代码是在 PAL 还是 NTSC 机器上运行,在后一种情况下,是哪个 NTSC 机器,因为旧的 NTSC C64 的扫描线比新的 C64 版本少一个。

在寻求帮助后,Robin Harbron 给我发了一个代码片段,其中包括连接 CMD SuperCPU(我的最终目标机器)。由于他将其作为汇编发送,我不得不按原样使用大部分内容,但使用 KickC 中的 ASM 指令,如下所示:

在我的脚本顶部,我有这样的getMachineType全局声明:

目前,我的peek()功能是这样的:

所以现在我可以确定运行我的程序的主机上可用的扫描行数,从而更容易地创建 PAL 和 NTSC 兼容的可执行文件。

KickC 可从CSDb.dk下载,并将使用Kick Assembler构建和组装

0 投票
1 回答
149 浏览

assembly - 在 6502 汇编器中编写子程序的最佳方法?

我是汇编程序的新手,所以这是一个简单的问题:

我的自定义子例程更改XYA寄存器。他们操纵这些以产生所需的结果。在例程开始时将这些值推送到堆栈并在之前恢复它们是一个好主意RTS吗?

我的意思是,这样我可以编写可以从任何地方调用的例程,而不会弄乱“状态”或影响其他例程。但是这样使用堆栈可以吗?还是有更好的方法来做到这一点?

0 投票
0 回答
67 浏览

assembly - 如何在 6502 汇编器中正确使用中断处理程序?

我是汇编程序的新手,所以这个问题听起来可能很愚蠢,但究竟应该在光栅中断处理程序中实现什么类型的代码?

所以我知道这个处理程序在渲染所需的光栅线时被调用。但这似乎只发生一次(如果我确认中断)。除非我清除屏幕或重新绘制它的相关部分,否则不会再次调用处理程序例程,对吗?

那么使用中断有什么意义呢?

如果有这样的主循环:

...然后我有一个无限循环监控一切,所以我不明白我用中断做什么?

我的意思是,我认为中断可以用来实现事件系统。它们通过等待消除了轮询和浪费 CPU 周期的需要。但如果它们只发生一次,那么这是不可能的。

如果我这样承认,则该方法仅被调用一次。如果我不这样做,它会被一遍又一遍地调用。

所以请帮助我理解这里的概念。

使用中断的正确方法是什么?它们适用于什么功能?我应该什么时候使用它们?

谢谢!

0 投票
1 回答
50 浏览

assembly - 我想我已经解决了光栅中断文本/位图模式,但我有这个奇怪的文本错误

汇编:CBM prg Studio。

大家好,圣诞快乐,节日快乐 :) 我的中断中的文本输出是怎么回事?我必须在这里遗漏一些明显的东西,但请看一下附图......

它应该说:

“进入第一个候选人的范围……”

*位图显示

“开始我的 Y/N?”

看看所附的图像,自己看看。

下面是代码。感谢您抽出时间来看看,这让我困惑了一整晚!

:) 詹姆斯点击这里查看图片