6502程序集绘制位图

Drawing bitmap in 6502 assembly

所以我一直在尝试在 6502 中绘制位图(对于 Commodore 64)。 当我将图像加载到地址 2000 时,它工作正常,但一旦尝试不同的地址,如 2400,它就不再工作了。

我还使用 CBM prg Studio 作为我的 IDE,使用 Vice 作为我的 C64 模拟器...不知道这是否重要。

这是我得到的结果的图片

这是我的代码


*=01

        BYTE    [=10=]E, , [=10=]A, [=10=], E, , 
        BYTE    , , , , , [=10=], [=10=], [=10=]

*=00

; **************************************************************
;                       VARIABLES
; **************************************************************

TITLE_CHARMEM   = 40
TITLE_COLRMEM   = 28
TITLE_BACKMEM   = B10

; **************************************************************
;                       MACROS
; **************************************************************

; **************************
; KEYWAIT
defm KEYWAIT                    ; Paramters: [Key]
@WAITLOOP
        lda #$CB
        cmp /1
        bne @WAITLOOP

        endm


; **************************
; PRINT
defm PRINT                      ; Paramters: [String]
        lda #</1
        ldy #>/1
        jsr $AB1E
        endm

; **************************************************************
;                       GAME CODE
; **************************************************************

INIT
        lda #%00111011          ; Enable bitmap mode
        sta $D011
        lda #%11011000          ; Enable multicolor mode
        sta $D016

        lda TITLE_BACKMEM       ; Load background data from
        sta $D020               ; Store it in the background addresses
        sta $D021

        ldx #[=10=]

TITLE
        ; Load the image and store it in memory
        ; -- Image data
        lda TITLE_CHARMEM,x
        sta 00,x
        lda TITLE_CHARMEM + 00,x
        sta 00,x
        lda TITLE_CHARMEM + 00,x
        sta 00,x
        lda TITLE_CHARMEM + 00,x
        sta 00,x

        ; -- Color data
        lda TITLE_COLRMEM,x
        sta $D800,x
        lda TITLE_COLRMEM + 00,x
        sta $D900,x
        lda TITLE_COLRMEM + 00,x
        sta $DA00,x
        lda TITLE_COLRMEM + 00,x
        sta $DB00,x

        inx
        bne TITLE

        lda #
        sta $D018

FOREVER
        jmp FOREVER

*=FE         ; 2400 - 2 bytes for the header
INCBIN "bitmaps/title.prg"

When I load the image into adress 2000 it's works fine, but as soon as try a different address like 2400 it doesn't work anymore.

这就是你的答案。位图需要位于视频芯片将要读取它的同一地址。通常该地址是 2000 美元,但可以更改。

同样,颜色必须始终位于地址 $d800。这个地址是硬件固定的。