标签: commodore

在Commodore 64中绘制屏幕边框

好.我希望它不会被关闭,因为我有25年的好奇心,我很想理解这个伎俩.

在商品64中,6569 VIC无法解决边界问题.您所能做的就是在中心区域绘制像素,即光标移动的像素.边框总是均匀的,虽然你可以用捅53280改变它的颜色,如果我没记错的颜色.

尽管如此,我清楚地记得游戏介绍边框的特色是图形,就像完全可以寻址一样.我试图理解它是如何工作的,但从未达到过这一点.传说说这是一个聪明的精灵用途,在某些情况下,可能会被边界划出,但我不知道它是否是一个都市传说.

编辑:只需从提供的链接中读取此内容即可

精灵在垂直光栅线上复用(超过8个精灵,有时多达120个精灵).在Group Crest于2007年5月发布Krestage 3之前,人们普遍认为在一条栅格线上不会出现超过8个精灵,但是分配新的Y坐标会使其重新出现在屏幕下方.

这是邪恶的....你击败了栅格并重新定位精灵然后到达那里......

c64 commodore retro-computing

56
推荐指数
3
解决办法
6696
查看次数

如何在Commodore 64中禁用屏幕?

我知道这个问题是非常特殊的问题,但我知道这里有一些c64代码大师.所以,这是我的问题.

当我尝试使用$ d011技巧禁用屏幕时,上/下边框也会打开.我想这样做而不打开上/下边框.可能吗?

c64 commodore 6510

17
推荐指数
1
解决办法
880
查看次数

在Commodore Basic 4.0中打印电路板?

我在Commodore Basic 6502中打印一块点有问题.

这就是我所要做的:(这是一个子程序)

10 INPUT "Please enter a number:", X
20 DIM A$(X, X)
30 FOR I = 0 TO X
40 FOR J = 0 TO X
50 A$(I, J) = "."
60 NEXT
70 NEXT
80 PRINT A$
END
Run Code Online (Sandbox Code Playgroud)

任何人都可以帮我解决这个问题,因为当我将它粘贴到模拟器中时,键入END,并按Enter键字面上没有任何反应?

任何帮助深表感谢.我正在尝试建立一个单词搜索游戏.

basic commodore

12
推荐指数
1
解决办法
139
查看次数

使用xa65汇编程序创建Commodore 64 .prg

我正在尝试学习6510汇编,因为我正在运行Debian xa65是我想要使用的汇编程序.

到目前为止,我写了一段看起来像这样的代码:

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

*=$1000
INC 53280
INC 53281
JMP $1000
Run Code Online (Sandbox Code Playgroud)

现在,第一个.byte部分一旦加载就会被"自动启动"程序.这是我从教程中找到的东西,据我所知,它只会运行SYS 4096,使CPU开始执行地址$ 1000的代码

其余的代码应该只是开始闪烁C64的外边框和内边框,并永远重复.

组装时我只需运行以下命令:

xa test.s -o test.prg
Run Code Online (Sandbox Code Playgroud)

然后我尝试将test.prg加载到VICE中进行测试.使用LOAD"TEST.PRG",8,1:即使文件加载它也不会自动启动,如果我键入RUN则没有任何反应:如果我键入LIST则相同: - 唯一的结果是着名的READY.和光标一样快乐地闪烁着.

我试图删除自动启动的东西,只组装从*= $ 1000开始的代码,但我得到了相同的结果.尝试从SYS 4096开始也会导致READY,仅此而已.

我确信我没有正确使用xa汇编程序,但我无法弄清楚我是如何为C64创建一个合适的PRG文件来使用的.我究竟做错了什么?

assembly c64 commodore 6510

10
推荐指数
2
解决办法
1370
查看次数

在Commodore 64 BASIC中选择随机字符串

我的程序上有这个变量声明:

X="MAGENTA"
Y="CYAN"
Z="TAN"
A="KHAKI"
Run Code Online (Sandbox Code Playgroud)

现在我想要的是随机选择其中一个和PRINT它.但是怎么做呢?

string random basic commodore

9
推荐指数
1
解决办法
606
查看次数

独立测试中的6502与Commodore PET中断的行为

我正在FPGA上构建Commodore PET.我已经在Kansas Lava中实现了我自己的6502内核(代码可以在https://github.com/gergoerdi/mos6502-kansas-lava获得),并在其周围放置足够的IO(https://github.com/gergoerdi/eightbit-kansas-lava)我能够启动原始的Commodore PET ROM,获得一个闪烁的光标并开始输入.

但是,在输入经典的BASIC程序之后

10 PRINT "HELLO WORLD"
20 GOTO 10
Run Code Online (Sandbox Code Playgroud)

它会在一段时间后(几秒钟后)崩溃

?ILLEGAL QUANTITY ERROR IN   10
Run Code Online (Sandbox Code Playgroud)

因为我的代码具有相当合理的每操作码测试覆盖率,并且它通过AllSuiteA,我想我会考虑更复杂行为的测试,这就是我如何到达Klaus Dormann的中断测试套件.在Kansas Lava模拟器中运行它已经指出了我原来的中断实现中的大量错误:

  • I进入中断处理程序时未设置该标志
  • B标志是所有的地方
  • IRQ中断被完全忽略,除非I它们到达时未设置(正确的行为似乎是在I设置时排队中断以及何时取消设置,它们仍然应该被处理)

修好这些之后,我现在可以成功运行Klaus Dormann测试,所以我希望将我的机器加载到真正的FPGA上,运气好的BASIC崩溃可能会消失.

然而,修复了所有这些中断错误并在模拟器中通过中断测试的新版本现在无法响应键盘输入,甚至只是在真实FPGA上闪烁光标.请注意,键盘输入和光标闪烁都是响应外部IRQ(从屏幕VBlank信号连接)完成的,所以这意味着固定版本以某种方式打破了所有中断处理 ...

我正在寻找任何可能出错的模糊建议或如何开始调试.

完整代码可在https://github.com/gergoerdi/mos6502-kansas-lava/tree/interrupt-rewrite获得,违规提交(修复测试并打破PET)是7a09b794af.我意识到这与最小可行再现完全相反,但变化本身很小,因为我不知道它出错的地方,并且因为重现问题需要一台功能足以引导库存Commodore PET ROM的机器,所以我不要我不知道怎么缩小它...

添加:

我设法在同一个硬件上用一个非常简单的(我敢说最小的)ROM而不是库存PET ROM重现相同的问题:

        .org $C000        

reset:
        ;; Initialize PIA
        LDY #$07
        STY $E813

        LDA #30
        STA $42
        STA $8000
        CLI
        JMP *

irq:
        CMP $E812               ; ACK …
Run Code Online (Sandbox Code Playgroud)

interrupt 6502 emulation lava commodore

8
推荐指数
1
解决办法
225
查看次数

C64 程序集渲染精灵

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

这是我的程序集:

    .segment "CODE"

    ; set sprite pointer index
    ; this, multiplied by $40, is the address
    ; in this case, the address is $2000
    ; $80 * $40 = $2000
    lda #$80
    sta $07f8

    ; enable sprite 0
    lda #$01
    sta $d015

    ; set x and y position
    lda #$80
    sta $d001
    sta $d002

loop:
    jmp loop

    .segment "GFXDATA"

    .byte $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
    .byte $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
    .byte $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
    .byte $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF …
Run Code Online (Sandbox Code Playgroud)

assembly c64 6502 commodore ca65

8
推荐指数
1
解决办法
764
查看次数

仍然是6502,VIC和SID的未来(和现在)?

作为我之前的好奇心问题的衍生物,我有一个后续的好奇心.是否有6502,VIC和SID芯片的未来和/或应用?我知道它们仍然是生产和使用的.例如,我记得6502是小型家电的理想控制器芯片.SID肯定仍然出现在一些"复古"声音合成器中,虽然我的猜测是它只是模仿.那个VIC怎么样?

社区维基问题,因为没有正确的答案.

commodore

6
推荐指数
1
解决办法
537
查看次数

Commodore 64 BASIC中的多线功能

所以,我想在Commodore 64 BASIC中编写更大的函数.到目前为止,从我从其他来源(例如各种C64 wiki,以及C64本身的用户手册)看到的,函数定义只能是一行.也就是说,我似乎无法在BASIC中找到括号中的类似构造/其他语言用于描述代码块的其他内容.

有谁知道我如何在BASIC中编写多行代码块?

单行功能示例:

10 def fn X(n) = n + 1
20 print fn X(5) rem Correctly called function. This will output 6
Run Code Online (Sandbox Code Playgroud)

但我做不了类似的事情:

10 def fn X(n) = 
20 n = n + 1
30 print n
40 rem I'd like the definition of function X to end at line 30 above 
50 fn X(5) rem Produces syntax error on line 40
Run Code Online (Sandbox Code Playgroud)

感谢您的时间!

basic function c64 multiline commodore

6
推荐指数
1
解决办法
704
查看次数

如何在引号内打印引号但在commodore 64 basic v.2.0中

我正在写一个小小的爱好c64文本冒险,我已经停在一个非常具体的时刻.也就是说,我不知道如何在引用内引用任何内容.

如何在商品64基本v.2.0中做到这一点.

c64 commodore

5
推荐指数
1
解决办法
642
查看次数