Assembly 6502汇编中位图的绘制

Assembly 6502汇编中位图的绘制,assembly,bitmap,6502,commodore,Assembly,Bitmap,6502,Commodore,所以我一直在尝试在6502中绘制位图(用于Commodore 64)。 当我将图像加载到address2000时,它工作正常,但只要尝试另一个地址,如2400,它就不再工作了 另外,我使用CBM prg Studio作为我的IDE,而Vice作为我的C64仿真器。。。我不知道这是否重要 这是我得到的结果的图像 这是我的代码 *=$0801 BYTE $0E, $08, $0A, $00, $9E, $20, $28 BYTE $32, $33,

所以我一直在尝试在6502中绘制位图(用于Commodore 64)。 当我将图像加载到address2000时,它工作正常,但只要尝试另一个地址,如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"

*=$0801
字节$0E、$08、$0A、$00、$9E、$20、$28
字节$32、$33、$30、$34、$29、$00、$00、$00
*=$0900
; **************************************************************
;                       变量
; **************************************************************
TITLE_CHARMEM=4340美元
头衔=4728美元
TITLE_BACKMEM=$4B10
; **************************************************************
;                       宏
; **************************************************************
; **************************
; 键盘等待
defmkeywait;参数:[键]
@WAITLOOP
lda#$CB
cmp/1
bne@WAITLOOP
endm
; **************************
; 印刷品
defm打印;参数:[字符串]
lda#/1
jsr$AB1E
endm
; **************************************************************
;                       游戏代码
; **************************************************************
初始化
lda#%00111011;启用位图模式
sta$D011
lda#%11011000;启用多色模式
sta$D016
lda标题_BACKMEM;从中加载背景数据
sta$D020;将其存储在后台地址中
sta$D021
ldx#00美元
标题
; 加载图像并将其存储在内存中
; -- 图像数据
lda TITLE_CHARMEM,x
sta$0400,x
lda标题\u CHARMEM+$0100,x
sta$0500,x
lda头衔+0.2万美元,x
sta$0600,x
lda头衔+字符+0300美元,x
sta$0700,x
; -- 颜色数据
lda标题_COLRMEM,x
sta$D800,x
lda头衔+现金+0100美元,x
sta$D900,x
lda头衔+现金+0200美元,x
sta$DA00,x
lda头衔+现金+0300美元,x
sta$DB00,x
因克斯
bne标题
lda#19美元
sta$D018
永远
永远的jmp
*=$23FE;2400-标头的2个字节
INCBIN“位图/标题.prg”
当我将图像加载到adress 2000时,它工作正常,但只要尝试其他地址(如2400),它就不再工作

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


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

您忘记调整目标地址了吗?不清楚title.prg中有什么,它是否有全屏转储?我不太确定什么是全屏转储(如果你问它是否有整个屏幕的数据,那么是的)。但是我已经导出了title.prg,以便其字符、颜色和背景位置与代码中的变量匹配。我也不知道你说的目标地址是什么意思。位图屏幕是2000美元。如果你有一个全屏图像,它必须位于那里。是的,这是正确的。该图像由屏幕内存$0400、颜色$d800和位图$2000组成。所有这些都是固定的(银行设置除外)。为了更准确:位图的地址必须是$2000的倍数,不能是$0000或$8000(因为下半部分将使用内置字符ROM)。显然,位图必须在VIC使用的4000美元银行中,所以2000美元是第0银行中唯一有效的地方。