Отрисовка растрового изображения в сборке 6502

поэтому я пытался нарисовать растровое изображение в 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"

person Insert joke here    schedule 15.07.2020    source источник
comment
Вы забыли настроить адреса назначения? Непонятно, что в title.prg, есть ли дамп на весь экран? Это нельзя просто переместить и ожидать, что оно сработает.   -  person Jester    schedule 16.07.2020
comment
Я не совсем уверен, что такое полноэкранный дамп (если вы спрашиваете, есть ли у него данные для всего экрана, то да). Но я экспортировал title.prg так, чтобы расположение символов, цветов и фона соответствовало переменным в коде. Также я не уверен, что вы подразумеваете под адресами назначения.   -  person Insert joke here    schedule 16.07.2020
comment
Растровый экран стоит 2000 долларов. Если у вас есть полноэкранное изображение, оно должно быть там.   -  person Jester    schedule 16.07.2020
comment
Итак, всякий раз, когда у вас есть полноэкранное изображение, оно должно стоить 2000 долларов?   -  person Insert joke here    schedule 16.07.2020
comment
Да, это правильно. Изображение состоит из экранной памяти по цене 0400 долларов, цвета по цене d800 и растрового изображения по цене 2000 долларов. Все они фиксированы (кроме настройки банка).   -  person Jester    schedule 16.07.2020
comment
Чтобы быть более точным: адрес растрового изображения должен быть кратным $2000 и не может быть $0000 или $8000 (поскольку нижние половины вместо этого будут использовать встроенное символьное ПЗУ). И, очевидно, растровое изображение должно находиться в банке 4000 долларов, используемом VIC, поэтому 2000 долларов — единственное место, которое работает в 0-м банке.   -  person Karol S    schedule 16.07.2020


Ответы (1)


Когда я загружаю изображение на адрес 2000, он работает нормально, но как только я пытаюсь использовать другой адрес, например 2400, он больше не работает.

Это ваш ответ. Битмап должен располагаться по тому же адресу, по которому видеочип будет его считывать. Обычно этот адрес стоит 2000 долларов, но его можно изменить.

Точно так же цвет всегда должен находиться по адресу $d800. Этот адрес зафиксирован аппаратно.

person OmarL    schedule 14.09.2020