1

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

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

这是我得到的结果的图像 我的结果图片

这是我的代码


*=$0801

        BYTE    $0E, $08, $0A, $00, $9E, $20, $28
        BYTE    $32, $33, $30, $34, $29, $00, $00, $00

*=$0900

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

TITLE_CHARMEM   = $4340
TITLE_COLRMEM   = $4728
TITLE_BACKMEM   = $4B10

; **************************************************************
;                       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 #$00

TITLE
        ; Load the image and store it in memory
        ; -- Image data
        lda TITLE_CHARMEM,x
        sta $0400,x
        lda TITLE_CHARMEM + $0100,x
        sta $0500,x
        lda TITLE_CHARMEM + $0200,x
        sta $0600,x
        lda TITLE_CHARMEM + $0300,x
        sta $0700,x

        ; -- Color data
        lda TITLE_COLRMEM,x
        sta $D800,x
        lda TITLE_COLRMEM + $0100,x
        sta $D900,x
        lda TITLE_COLRMEM + $0200,x
        sta $DA00,x
        lda TITLE_COLRMEM + $0300,x
        sta $DB00,x

        inx
        bne TITLE

        lda #$19
        sta $D018

FOREVER
        jmp FOREVER

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

1 回答 1

2

当我将图像加载到地址 2000 时,它工作正常,但是一旦尝试像 2400 这样的不同地址,它就不再工作了。

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

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

于 2020-09-14T14:12:05.863 回答