Как отобразить альтернативные строки текста в 2 столбца? - PullRequest
0 голосов
/ 15 мая 2019

У меня есть эта часть кода, где все текстовые строки появляются на экране одновременно. Теперь я хочу, чтобы каждая строка появлялась на экране с другой стороны (т.е. первая строка слева, вторая справа и т. Д.). Кто-нибудь может помочь?

Start                   SEI
                        LDX #$01
                        STX $0286
                        DEX
                        STX $D020
                        STX $D021
                        JSR $E544

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

                        LDA #$0F
                        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 $0400+(1*40),X
                        LDA TextLines2+(1*40),y 
                        STA $0400+(1*40),X
                       ; LDA TextLines+(5*40),Y 
                       ; STA $0400+(5*40),X
                        INX 
                        INY
                        CPY #$28
                        BNE loop
and there....
                       ; LDX #$27
                        TXA
                        SEC 
                        SBC Counter
                        TAY

и снова здесь ...

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

                        LDA Counter
                        BEQ TextMoveDone

                        DEC Counter
                        RTS
TextMoveDone            INC State
                        RTS

State                   !byte 0

Counter                 !byte $10

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

Ответы [ 2 ]

0 голосов
/ 28 мая 2019

Я копирую свое решение ниже.Я думаю, что это само за себя.

счетчик должен быть установлен в ноль, прежде чем перейти к MoveTextIn

MoveTextIn
shiftRight      ldx #$00
                lda textLines1+(0*40),x
                sta $0400+(0*40),x
                lda textLines1(2*40),x
                sta $0400+(2*40),x
                lda textLines1(4*40),x
                sta $0400+(4*40),x

                inx
                cmp #$40
                bne shiftRight

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

                dex
                bne shiftLeft

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

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

                inc counter
                lda counter
                cmp #$40
                beq textMoveDone
                rts

textMoveDone    inc state
                rts
0 голосов
/ 22 мая 2019

Хорошо, спасибо всем. Я нашел ответ:

Одна возможность - счетчик с 0 до 240, и он будет обновлен один раз. кадр, добавляющий +1 к нему ....

если значение будет 0 - 39, оно будет перемещать строку 1 и вычислять местоположения, необходимые для вывода текста на экран если значение будет 40 - 79, оно будет перемещать строку 2 + то же ... если значение будет 200 - 239, оно переместит строку 6 + то же самое если значение равно 240, все перемещение выполнено ...

Другим способом было бы иметь счетчик, который идет 0..40, а когда 40, он добавляет linecounter.

...