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

时间:2019-03-09 11:23:58

标签: assembly c64 6510

我在屏幕上的第1行有此水平平滑滚动文本。使用$ d016硬件滚动效果通过对$ d016的最低7位进行迭代来实现平滑滚动效果。滚动条在屏幕的第1行上运行。我设置了两个光栅中断。

“ noScroller”中断是不应滚动的屏幕部分 -这是第一行以外的整个屏幕。

“滚动器”是发生在第1行的中断。 我已经将此中断设置为#50,尽管我认为将其设置为#0是有道理的,因为滚动仅应发生在第1行,但是如果我将其设置为#0,则滚动文本会跳来跳去。

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

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

            *=$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

1 个答案:

答案 0 :(得分:1)

已经很长时间了;-)我记得在中断中进行实际工作有时会遇到问题,因为计算机很忙,而且您将无法及时得到下一个中​​断。当您确实在$0400区域中进行更新时,该区域将会闪烁。也许这就是您需要增加扫描线窗口的原因。

我建议您尝试将寄存器$d016的更改与将文本存储在$0400分开。重置noScroller之后,将文本复制移至第二个中断$d016中,因为您一直有需要。直到再次点击顶部扫描行,更改才会显示。然后,如果您可以使扫描区域$d012的大小恰到好处,那么请再次尝试。

在调试过程中,您可以在中断开始时更改屏幕的背景色,并在结束时将其重置。您应该在屏幕上看到一条短的彩色线条,该线条会有些晃动。这将向您显示中断发生的“位置”。如果您发现每个第8次中断花费的时间都太长,请尝试使用39倍的LDA / STA展开循环shiftrow,这会更快。