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