问题标签 [commodore]

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 投票
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 投票
2 回答
384 浏览

random - 在 C64 Basic 中生成随机方向

我已经运行了 C64 用户手册第 5 章中的“More Bouncing Balls”基本程序,并在该章的最后一页添加了内容。代码如下:

为此在末尾添加了行,ɔ:

这些行与问题无关,但为了完整起见,我将它们包括在内。

我想为球的方向添加随机性chr$(81)(当然,将 DX 和 DY 都设置为 1,会使它们都以垂直相反的方向“推动”球,ɔ:在两者之间,等于 45°。DXDY

但是当尝试使用随机数时,我会得到真正奇怪的行为。我假设这个数字必须在 0 和 1 之间,所以尝试(INT(10*RND(1))+1)/10了 ,并将第 40 行更改为设置DXDY这个随机数。相反,我得到的是一些非常奇怪的行为。球会以可预测的角度快速移动,在右侧消失并在左侧重新出现,向下移动几行,然后完全消失,然后在屏幕顶部出现水平方向一个接一个地绘制不动的球,然后坠毁. 当设置DXorDY为整数,即 2 时,我仍然会得到一些奇怪的行为,例如球在一端消失并在另一端重新出现,在这种情况下,程序将在几秒钟后结束。

是什么导致了这种不稳定的行为?以及如何设置第 40 行中的参数以允许球在撞到墙上时向不同方向移动(有点像 Pong 中的)?

DX注意 1:在第 80 行和第 100 行进行更改时DY,我得到了一些有趣的抖动运动,但正如预期的那样,就好像在屏幕上绘制的球是一个不均匀的球体。

注 2:我知道通常不应在标题中包含标签,但不确定如果我将它们排除在外,这个问题是否会变得难以搜索。如果需要,请随意编辑标题;我很高兴接受教育。

0 投票
0 回答
89 浏览

basic - 即使使用“启用运行停止”戳也无法启用列表

好吧,我下载了一个旧的非英语文本冒险,当然,“为了专业性”已经禁用列表。即使在输入启用“运行停止/恢复”和启用“列表”的戳后,它也会不断地询问输入(在游戏中)。我什至尝试在开始屏幕上输入列表,但它认为模拟的“运行/停止-恢复”就像任何其他按钮一样。“按任意键”(仅用我们的语言......)。

与可下载的 .prg 链接:

http://retrospec.sgn.net/users/tomcat/yu/C64/MiscGames/Html/BezMilosti.php

PS:由于在 VICE 中拖动屏幕时会自动加载 .prg 格式,我什至制作了一个新的 .d64 磁盘,因此引发了臭名昭著的“正在加载。准备就绪”。状态。从那个地方我确实进入了戳。

PS 2:我已经在“lemon”的“场景”类别下发布了一个关于这个问题的主题和主题,这是专门针对 Commodore 的顶级网站

*编辑(导入链接):

https://www.lemon64.com/forum/viewtopic.php?t=69043

0 投票
3 回答
542 浏览

assembly - 什么是未使用的内存地址?

因为我对旧的计算机硬件感兴趣,所以阅读这个关于 Commodore 64 内存分配的 HTML 页面时,我偶然发现了表中的一个单元格,它声称内存地址未使用。这究竟意味着什么?这是否意味着如果你想在那个地址里放一些东西,你可以放任何你想要的东西?很困惑,并会感谢所有答案。谢谢。 在此处输入图像描述

0 投票
1 回答
59 浏览

serial-port - C64 + DigiConnect SP 消息以 1 字符连接而不是使用 BASIC 的完整字符串发送

使用带有 GLINK LT RS-232 适配器的 Commodore 64,连接到配置为将 RAW TCP 发送到我家庭网络上的静态 IP/端口的 Digi-Connect SP。Destination 是一个 socat 进程,通过详细日志记录将流量传递到其他地方。

在 OS X 机器上测试从 bash shell 命中 socat,发出curl http://192.168.1.91:1234I get a valid response 并且 socat 日志显示

但是当我在 C64 BASIC 代码片段上运行以下命令时:

socat 日志显示:

我不确定我是否在 C64 端做错了什么导致发送单个字符,或者它是否是不正确的 Digi-Connect 设置。

Digi 串行设置为:

  • TCP 客户端设置:
    • 自动建立 TCP 连接
      • 始终连接并保持连接
    • 建立与以下网络服务的连接:
      • 服务器:192.168.1.91
      • 服务:原始 TCP
      • TCP 端口:1234
      • 启用 TCP 保持活动:开
  • 基本串行设置
    • 波特:300
    • 数据位:8
    • 奇偶校验:无
    • 停止位:0
    • 流量控制:硬件
  • 高级串行设置
    • (这里没有配置)
0 投票
1 回答
361 浏览

assembly - 如何为 6502 CPU (C64) 设置 CMake 交叉组装工具链?

我正在尝试为名为TMPx的 Commodore 64/6502 交叉汇编器建立一个尽可能可重复使用的 cmake 构建系统。

我的问题是:

  • 根据主机平台,我如何让 CMake [尝试] 在各种指定位置检测并设置可执行路径tmpx和正确路径?TMPx.exe
    • 如果这可能的,./cmake/下面列出的哪些模块是这样的搜索/查找?
  • 有没有办法cmake .检测并列出 TMPX 版本,而不是显示

    --ASM_TMPX编译器标识未知

除此之外,非常感谢其他意见和建议。

(这是我的git repo和下面的文件)

我的./CMakeLists.txt

通过遵循CMake wiki 中的本指南,到目前为止,我已经完成了以下 cmake 模块接近完成和半工作:

./cmake/CMakeASM_TMPXInformation.cmake

./cmake/CMakeDetermineASM_TMPXCompiler.cmake

./cmake/CMakeTestASM_TMPXCompiler.cmake

./cmake/Platform/C64.cmake

0 投票
1 回答
49 浏览

basic - MID$ 函数的问题

我正在尝试在新行上打印出给定字符串的每个字符。

我不断得到

非法数量错误 5

我不知道为什么。

0 投票
2 回答
149 浏览

commodore - 如何将小写字符串更改为大写字符串以及在 commodore 64 上大写的首字母?

我在 Commodore 64 模拟器上输入了“hello world”。我必须将其打印为 hello world HELLO WORLD Hello World

我怎样才能只使用一个打印语句来做到这一点?

0 投票
3 回答
67 浏览

graphics - How do I retain proper background on a character-based graphics system?

I got feeling retro and decided to write my favorite 8-bit computer game (Williams' Defender) on my first computer (Commodore PET 4032). All the code is being done in 6502 Assembly language. For those not familiar with the PET, all the graphics are character-based and to build games you move different characters around a 40 column x 25-row screen. This is very old tech - there are no sprites, no graphics layers, no ability to AND at the screen level, etc that we would be used to today.

I want the game to have multiple "laser beams" to be fired at the same time, and those laser beams might go on top of one another as they traverse the screen. Right now, as the beams move along the screen they store in memory what was underneath themselves and then replace what was underneath themselves as they move along to restore the background to its original state. The problem comes when a second laser goes on top of the first .. the first moves along and replaces the original background rather than leaving the second laser on top, then that second laser moves along and leaves artifacts of the first behind.

Is there a classic "light" algorithm or rule-set that allows multiple objects to move across one another such that the original proper things underneath are retained? I've tried different approaches (swapping backgrounds as things traverse, etc) but nothing seems to give me the correct result that I want.

0 投票
2 回答
1054 浏览

assembly - C64 程序集渲染精灵

我使用ca65 汇编器ld65 链接器在 Commodore 64 的 6502 汇编器中编写了一个短程序。该程序应该在显示器中心附近的某处渲染一个实心方形精灵,但我没有看到任何正在渲染的东西。

这是我的组装:

这是我的链接器脚本,改编自ca65 推荐的链接器脚本,用于 c64 上的手写汇编程序。我所做的唯一更改是添加“GFXDATA”段,以便我可以将我的精灵存储在 address $2000

这是我用来编译和链接的命令:

这是编译后的mapfile的内容:

以及最终二进制文件的十六进制转储:

“GFXDATA”段是我的精灵。精灵是 64 字节的$FF,所以它应该看起来像一个实心正方形。该精灵数据位于 address $2000

“CODE”段从通常的 BASIC 开始位置开始,ca65 正在为我插入一个 BASIC 加载程序,所以我可以run在加载程序后输入。

我没有切换 VIC 的银行,所以屏幕仍然在它的默认地址范围 ( $0400-$07FF),这个范围的最后 8 个字节是我的精灵指针。我只使用精灵指针 0 ( $07f8) 因为我只有一个精灵。

当我运行程序时,一切都被锁定了——这是意料之中的,因为程序以无限循环结束。但我在屏幕上的任何地方都看不到精灵:

在 VICE 中运行的程序

我错过了什么?