如何在 2 列中显示交替的文本行?

How to display alternate lines of text in 2 columns?

我有这部分代码,所有文本行都会同时出现在屏幕上。 现在我想让每一行都从另一边出现在屏幕上(即左边的第一行,右边的第二行等)。 有人可以帮忙吗?

Start                   SEI
                        LDX #
                        STX 86
                        DEX
                        STX $D020
                        STX $D021
                        JSR $E544

mainLoop               LDA #$FA
waitRaster             CMP $D012
                        BNE waitRaster
waitRaster2            CMP $D012
                        BEQ waitRaster2

                        LDA #[=10=]F
                        STA $D020
                        JSR UpdateThings
                        INC $D020
                        JMP mainLoop

UpdateThings        ; is state 0 ?
                        LDA State
                        BNE nextState
                    ; yes, call Move Text to Screen routine
                        JSR MoveTextIn
nextState              RTS

我在这里尝试了一些改变..

MoveTextIn              LDX 02
                        LDY Counter
loop                   ; LDA TextLines1+(1*40),x
                       ; STA 00+(1*40),X
                        LDA TextLines2+(1*40),y 
                        STA 00+(1*40),X
                       ; LDA TextLines+(5*40),Y 
                       ; STA 00+(5*40),X
                        INX 
                        INY
                        CPY #
                        BNE loop
and there....
                       ; LDX #
                        TXA
                        SEC 
                        SBC Counter
                        TAY

这里又是...

loop2                   ;LDA TextLines1+(0*40),x
                        ;STA 00+(0*40),X
                        LDA TextLines2+(0*40),y 
                        STA 00+(0*40),X
                        ;LDA TextLines+(4*40),Y 
                        ;STA 00+(4*40),X
                        DEX 
                        DEY
                        BPL loop2

                        LDA Counter
                        BEQ TextMoveDone

                        DEC Counter
                        RTS
TextMoveDone            INC State
                        RTS

State                   !byte 0

Counter                 !byte 

TextLines1              !scr "!x-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-xx!"
TextLines2              !scr "!x      commodore master soft         x!"
                        !scr "!        -------------------           !"
                        !scr "!         somewhere in 2019.           !"
                        !scr "!          ----------------            !"
                        !scr "! -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-  !"

好的,谢谢大家。我找到了答案:

一种可能性是让计数器从 0 变为 240,并且它会更新一次 一帧加+1....

如果值为 0 - 39,它将移动第 1 行并计算将文本放到屏幕上所需的位置 如果值为 40 - 79 它将移动第 2 行 + 相同 ... 如果值为 200 - 239 它将移动第 6 行 + 相同 如果值为 240,则所有移动都已完成...

其他方法是让计数器变为 0..40,当 40 时,它会添加 linecounter。

我正在复制下面的解决方案。我认为这是不言自明的。

在跳转到 MoveTextIn 之前必须将计数器设置为零

MoveTextIn
shiftRight      ldx #[=10=]
                lda textLines1+(0*40),x
                sta 00+(0*40),x
                lda textLines1(2*40),x
                sta 00+(2*40),x
                lda textLines1(4*40),x
                sta 00+(4*40),x

                inx
                cmp #
                bne shiftRight

shiftLeft       lda textLines1+(1*40),x
                sta 00+(1*40),x
                lda textLines1(3*40),x
                sta 00+(3*40),x
                lda textLines1(5*40),x
                sta 00+(5*40),x

                dex
                bne shiftLeft

copyRight       ldx counter
                lda textLines1+(1*40),x
                sta 00+(1*40)-1
                lda textLines1+(3*40),x
                sta 00+(3*40)-1
                lda textLines1+(5*40),x
                sta 00+(5*40)-1

copyLeft        sec
                lda #
                sbc counter
                tax
                lda textLines1+(0*40),x
                sta 00+(0*40)-1
                lda textLines1+(2*40),x
                sta 00+(2*40)-1
                lda textLines1+(4*40),x
                sta 00+(4*40)-1

                inc counter
                lda counter
                cmp #
                beq textMoveDone
                rts

textMoveDone    inc state
                rts