首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C64程序集- 6502/6510 -一个一个地显示一系列三个位图,然后进入字符模式

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

Stack Overflow用户
提问于 2021-07-11 15:25:29
回答 1查看 193关注 0票数 3

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

  1. 我只想显示一个位图。等几个secs.
  2. Wipe,memory.
  3. Display的另一个位图。等待again.
  4. Wipe,memory.
  5. Display中的那个,最后一个位图。等待您猜到的最后一个time.
  6. And,,从memory.
  7. Then中删除它,进入标准字符模式。&继续运行我的代码--从屏幕空白开始,然后移动到询问用户一些文本输入等等.

大胆的位,我有真正的麻烦!

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

代码语言:javascript
复制
*=$1000

        lda $4710
        sta $d020
        sta $d021
        ldx #$00

loaddccimage
        lda $3f40,x
        sta $0400,x
        lda $4040,x
        sta $0500,x
        lda $4140,x
        sta $0600,x
        lda $4240,x
        sta $0700,x
        lda $4328,x
        sta $d800,x
        lda $4428,x
        sta $d900,x
        lda $4528,x
        sta $da00,x
        lda $4628,x
        sta $db00,x
        inx
        bne loaddccimage

        lda #$3b
        sta $d011
        lda #$18
        sta $d016
        lda #$18
        sta $d018
        
        jsr *

*=$1FFE
        incbin "ASTRO1.prg"

到目前为止,我尝试重复代码,认为它可以重写所有东西,但是*=$1FFE似乎没有按时间顺序工作,对于每个文件,我得到一个内存过写错误,它总是默认显示我用incbin函数调用的最后一个位图。是否有办法在每个位图帧之间重置所有内容(但只需转到黑色)?还是我只是不正确地加载这些图像?

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

或者这仅仅是c64不能做的事情呢?我不愿意去这里,因为我肯定我见过位图循环在游戏介绍-只是真的抓我的头,想知道如何可以做到。

再次感谢各位,并对这里缺乏理解感到抱歉,我是新的编程一般,但认为我在正确的轨道上。我希望很多人能从你的回答中学到一些东西,因为我认为这是真的没有任何信息。

你可爱的准将朋友

詹姆斯(Smokeyparkin)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-07-12 09:19:00

你有三个选择。

  1. ,您可以将所有三个位图都包含到不同的内存位置,并将它们一个接一个地传输到正确的位置。例如,您当前将第一个位图加载到$2000。这很好。您可以加载下一个位图到$4800和$7000。当您需要显示下一个位图时,将它们相应地转移到正确的位置。
  2. 可以将位图加载到适当的维也纳国际中心位图位置,如$2000、$6000、$e000等。然后,您所需要做的就是更改$dd00并进行银行转换。但是要小心,$6000是可以的,但是要能够使用$e000,您需要禁用Kernal。事情变得更加棘手,你需要摆弄01美元的价值。
  3. 你可以使用IRQ加载程序,就像Krill的IRQ加载器一样。你可以在网上搜索。使用IRQ加载程序,您可以包括第一个位图,然后再将其他位图从磁盘加载到$2000位置,然后重复相同的操作。当然,您可能需要显示其他内容,加载消息可能在加载过程中。更好的方法是使用$2000和$6000作为位图,将下一张图片加载到另一个银行,并再次使用$dd00进行银行切换。这样,您的初始PRG文件将只包含第一张图片,并且您可以从磁盘加载其余的.

回到字符模式,只需将$d011、$d016和$d018设置为它们的初始值就足够了(如果您更改它,也可以使用$dd00 )。

代码语言:javascript
复制
    lda #$1b
    sta $d011
    lda #$c8
    sta $d016
    lda #$14
    sta $d018

对于造成延迟的问题,请检查我的回答:How to create a delay in asm for the MOS 6502

要输入键盘,请检查我的答案:Compare keystrokes - Assembly CCS64

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68337563

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档