我有一行水平平滑滚动的文本在屏幕上第一行。平滑滚动效果使用$ d016硬件滚动效果,通过迭代$ d016的7个最低位)来实现。滚动器运行在屏幕的第1行。我设置了两个光栅中断。
“noScroller”中断是不应该滚动的屏幕部分 -整个屏幕除了第一行。
“scroller”是发生在第1行的中断。 我将此中断设置为#50,尽管我认为将其设置为#0是有意义的,因为滚动只应在第1行发生,但如果我将其设置为#0,则滚动文本会跳来跳去。
“noscroller”中断设置为发生在第#66行-如果我将其设置为似乎是第1行发生的地方的#58,则滚动文本开始奇怪地跳来跳去。
我的问题是我不知道我的2个中断有什么问题。我希望$ d016平滑滚动仅在第1行发生,但我必须使屏幕上更大的区域滚动而不仅仅是第1行,否则文本将跳来跳去。这是我的工作代码(具有太大的滚动屏幕区域):
“noScroller”中断是不应该滚动的屏幕部分 -整个屏幕除了第一行。
“scroller”是发生在第1行的中断。 我将此中断设置为#50,尽管我认为将其设置为#0是有意义的,因为滚动只应在第1行发生,但如果我将其设置为#0,则滚动文本会跳来跳去。
“noscroller”中断设置为发生在第#66行-如果我将其设置为似乎是第1行发生的地方的#58,则滚动文本开始奇怪地跳来跳去。
我的问题是我不知道我的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