首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >第1行上的commodore 64平滑滚动条-如果在第0行设置中断,则会在屏幕上跳来跳去

第1行上的commodore 64平滑滚动条-如果在第0行设置中断,则会在屏幕上跳来跳去
EN

Stack Overflow用户
提问于 2019-03-09 19:23:58
回答 1查看 367关注 0票数 3

我在屏幕上的第1行有一个水平平滑的滚动文本。通过在$d016的最低7位上迭代,使用$d016硬件滚动效果来产生平滑滚动效果)。滚动条在屏幕的第1行运行。我已经设置了两个光栅中断。

"noScroller“中断是屏幕中不应该滚动的部分-除了第1行之外,它是整个屏幕。

“scroll”是发生在第1行的中断。我将此中断设置为#50,尽管我认为将其设置为#0是有意义的,因为滚动应该只发生在第1行,但如果我将其设置为#0,则滚动文本会跳来跳去。

"noscroller“中断将发生在第66行-如果我将其设置为#58,似乎就是第1行发生的地方,那么滚动文本就会开始奇怪地跳来跳去。

我的问题是我不知道我的两次中断出了什么问题。我希望$d016平滑滚动只发生在第1行,但我必须使屏幕滚动比第1行更大的区域,否则文本会跳来跳去。这是我的工作代码(滚动屏幕区域太大):

代码语言:javascript
复制
            *=$c000
            sei
            lda #$7f
            sta $dc0d
            sta $dd0d
            and $d011
            sta $d011                  
            ldy #50
            sty $d012
            lda #<scroller
            ldx #>scroller
            sta $0314
            stx $0315
            lda #$01
            sta $d01a
            cli
            rts

 noScroller      lda $d016
            and #$f8
            sta $d016
            ldy #50
            sty $d012
            lda #<scroller
            ldx #>scroller
            sta $0314
            stx $0315
            inc $d019
            jmp $ea31        


scroller        lda $d016
            and #$f8
            adc offset
            sta $d016
            dec offset
            bpl continue
            lda #07
            sta offset

 shiftrow        ldx #$00
            lda $0401,x
            sta $0400,x
            inx
            cpx #39
            bne shiftrow+2

 fetchnewchar    ldx nextchar                
            lda message,x
            sta $0427
            inx
            lda message,x
            cmp #255
            bne continue-3
            ldx #00
            stx nextchar

 continue       ldx #66
           stx $d012
           lda #<noScroller
           ldy #>noScroller
           sta $0314
           sty $0315
           inc $d019
           jmp $ea31



 offset          byte 07  
 nextchar        byte 00
 message         byte 011, 009, 012, 018, 015, 025, 032, 023, 001, 019, 032, 006, 009, 014, 001, 012, 012, 025, 032, 008, 005, 018, 005, 032, 032, 032, 032, 032, 032, 255
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-11 17:00:55

已经很长一段时间了;-)我记得在中断中做真正的工作有时是有问题的,因为计算机很忙,你不会及时得到下一个中断。当您在$0400区域中更新时,该区域将闪烁。也许这就是你需要增大扫描线窗口的原因。

我建议您尝试将寄存器$d016的更改与在$0400中存储文本分开。在重置$d016后,将文本复制移到第二个中断noScroller中,因为在那里您有所需的所有时间。在再次命中顶部扫描线之前,更改将不可见。然后再次试验扫描线$d012,如果您可以使区域恰好像所需的那样小。

在调试期间,您可以在中断开始时更改屏幕的背景颜色,并在中断结束时重置屏幕。你应该在你的屏幕上看到一条短的彩色线条,这条线条有点抖动。这将显示您的中断发生在“何处”。如果您发现每8次中断花费的时间太长,请尝试以39倍的LDA/STA展开循环shiftrow,这会更快。

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

https://stackoverflow.com/questions/55076838

复制
相关文章

相似问题

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