Ins*_*ere 2 assembly bitmap 6502 commodore
所以我一直在尝试在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"
Run Code Online (Sandbox Code Playgroud)
当我将图像加载到地址 2000 时,它工作正常,但一旦尝试其他地址(例如 2400),它就不再工作了。
这就是你的答案。位图需要位于视频芯片要读取它的同一地址。通常该地址为 2000 美元,但可以更改。
同样,颜色必须始终位于地址 $d800 处。该地址在硬件中是固定的。
归档时间: |
|
查看次数: |
601 次 |
最近记录: |