Сборка 65C816, загружающая данные в таблицу в памяти, не работает должным образом
Кто-нибудь из экспертов ASM хочет что-то объяснить? У меня есть это (закомментированы вторичные цвета):
;
; --- Tables for setting SCB and color tables for color --------
;
ENTRY logocolor
logocolor DC.W $00B0
;$ DC.W $0AD9
DC.W $0FF0
;$ DC.W $0FFB
DC.W $0F60
;$ DC.W $0FA7
DC.W $0E10
;$ DC.W $0E99
DC.W $0F0A
;$ DC.W $0E7C
DC.W $000D
;$ DC.W $0AAE
ENTRY scanbyte
scanbyte DC.B 1
DC.B 1
DC.B 1
DC.B 2
DC.B 3
DC.B 4
DC.B 5
DC.B 6
И подпрограмма, которая загружает цвета:
InitPalette PROC
jsr startup
ldx #7
lop200 phx Save.
lda scanbyte,x
ldy #scrnInfo
ora [<data],y
and #$00FF
inx
inx
phx Scan line number.
pha Scan byte value.
_SetSCB
plx Restore counter.
dex
bpl lop200
pea 0
jsr pushColorTable
_GetColorTable
ldx #6
ldy #10
lop202 phx Save.
phy Save.
lda logocolor,y
ldy #ColorTable+2
sta [<data],y
ldy <screenmode
beq ok202
ldy #ColorTable+10
sta [<data],y
ldy #ColorTable+18
sta [<data],y
ldy #ColorTable+26
sta [<data],y
ok202 phx Table number.
jsr pushColorTable
_SetColorTable
ply Restore.
plx Restore.
dey
dey
dex
bne lop202
brl pop0bytes no error
ENDP
и это приводит к правильным основным цветам в палитрах:
…
$E19E20: 00 00 B0 00 F0 00 FF 0F 00 00 B0 00 F0 0F FF 0F
$E19E30: 00 00 B0 00 F0 00 FF 0F 00 00 B0 00 F0 0F FF 0F
$E19E40: 00 00 F0 0F F0 00 FF 0F 00 00 F0 0F F0 0F FF 0F
…etc
Однако, когда я раскомментирую свои вторичные цвета и пытаюсь загрузить их в ColorTable, скажем, добавив:
ldy #ColorTable+3
sta [<data],y
…Я меняю вещи так, как не ожидал. Мне нужно, чтобы вторичные цвета загружались сразу после основных, например:
…
$E19E20: 00 00 B0 00 D9 0A FF 0F 00 00 B0 00 D9 0A FF 0F
…
Глядя на это немного подробнее, я наметил, что происходит (думаю) в комментариях к коду. Я совершенно новичок в asm…
ldx #6 ;I thnink this is keeping track of each line of the logo
ldy #22 ;this used to be 10, but we have 6 more colors
lop202 phx Save.
phy Save.
;each time we loop back y is decreased by 2, x by 1
lda logocolor,y ; Load defined color value in the table, using y as index into a
ldy #ColorTable+2 ; Load value of ColorTable + 2
sta [<data],y ; Store read defined color
;
;--- here we need some operation to get the next color in the table -----
;
ldy #ColorTable+4 ; then load value of ColorTable + 4
sta [<data],y ; Store read defined color from our imagary operation
ldy <screenmode
beq ok202
;640 mode??? Yes, most certainly is for 640 mode. Need to add the second color here as well.
ldy #ColorTable+10
sta [<data],y
ldy #ColorTable+18
sta [<data],y
ldy #ColorTable+26
sta [<data],y
ok202 phx Table number.
jsr pushColorTable
_SetColorTable
ply Restore.
plx Restore.
dey
dey
dex
bne lop202
brl pop0bytes no error
ENDP
Но мне нужно что-то в ;--- здесь нам нужна какая-то операция, чтобы получить следующий цвет в таблице ----- пробел…
но я вне регистров...
И что же мне делать?
Или все это нужно реорганизовать для повышения эффективности вместо того, чтобы пытаться загрузить еще одно значение из таблицы?