Сборка 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

Но мне нужно что-то в ;--- здесь нам нужна какая-то операция, чтобы получить следующий цвет в таблице ----- пробел…

но я вне регистров...

И что же мне делать?

Или все это нужно реорганизовать для повышения эффективности вместо того, чтобы пытаться загрузить еще одно значение из таблицы?

0 ответов

Другие вопросы по тегам