Сборка C64 - Циклическое перебор растровых изображений как графическое введение в мою игру

Монтажник: CBM prg Studio

Это из моего предыдущего поста, где я чувствую, что добился некоторого успеха, но все еще очень застрял. Мой предыдущий пост с просьбой о помощи по этой проблеме несколько этапов назад... Из ответа, представленного полезным членом сообщества, Эмир Акайд , я выбрал вариант 1.

На данный момент я просто использую TEST JUMPER, чтобы попробовать каждое изображение, чтобы перейти к таймеру между каждым загруженным изображением и инициализацией в моей игре.

Я думаю, что решение здесь должно показаться очевидным для более продвинутого программиста. Я думаю, что я, должно быть, делаю что-то глупое либо в не столь очевидных разделах «Загрузка экрана Ram», либо позже в коде под настройкой метки, мои комментарии должны все объяснить.

Рад любым предложениям и большое спасибо за внимание!

; 10 SYS (4096)


*=$0801

        BYTE    $0E, $08, $0A, $00, $9E, $20, $28,  $34, $30, $39, $36, $29, $00, $00, $00

*=$1FFE
        incbin "ASTRO1.prg" ;2 bytes behind as stated in tutorial due to header.
*=$5FFE
        incbin "ASTRO2.prg"
*=$9FFE
        incbin "ASTRO3.prg"

*=$1000


start1              ;         SET THE BACKGROUND SCREEN COLOURS!
        lda #$00    ; This is where the main background colour of image is
        sta $d020   ; sent to the C64 background and boarder.
        sta $d021   ; Becasue all three images have black as their backgrounds
        ldx #$00    ; I have just used the black colour from the system to 
                    ; store them respectively.


        jmp LDimg2  ; TEST JUMPER! Change this each time to view a different 
                    ; bitmap? Once working, which it isn't, we can look at adding
                    ; a timer to allow for switching between each bitmap at game 
                    ; start.


LDimg1              ;             LOADING THE SCREEN RAM.
        lda $3f40,x ; The Charmem data from the export is loaded into A
        sta $0c00,x ; This is a loop that fills the next400 bytes of screen
        lda $4040,x ; RAM with our data from the bitmap
        sta $0d00,x
        lda $4140,x
        sta $0e00,x
        lda $4240,x
        sta $0f00,x

        lda $4328,x ;              LOADING COLOUR RAM!
        sta $d800,x
        lda $4428,x
        sta $d900,x
        lda $4528,x
        sta $da00,x
        lda $4628,x
        sta $db00,x
        inx         ; Inc the X registry   
        bne LDimg1  ; While x is not equal to zero keep branch looping!    

        jmp setup

LDimg2              ;             LOADING THE SCREEN RAM.
        lda $3f40,x ; The Charmem data from the export is loaded into A
        sta $4c00,x ; This is a loop that fills the next400 bytes of screen
        lda $4040,x ; RAM with our data from the bitmap
        sta $4d00,x
        lda $4140,x
        sta $4e00,x
        lda $4240,x
        sta $4f00,x
        
        lda $4328,x ;              LOADING COLOUR RAM!
        sta $d800,x
        lda $4428,x
        sta $d900,x
        lda $4528,x
        sta $da00,x
        lda $4628,x
        sta $db00,x
        inx         ; Inc the X registry   
        bne LDimg2  ; While x is not equal to zero keep branch looping!    

        jmp setup

LDimg3              ;             LOADING THE SCREEN RAM.
        lda $3f40,x ; The Charmem data from the export is loaded into A
        sta $8c00,x ; This is a loop that fills the next400 bytes of screen
        lda $4040,x ; RAM with our data from the bitmap
        sta $8d00,x
        lda $4140,x
        sta $8e00,x
        lda $4240,x
        sta $8f00,x
        

        lda $4328,x ;              LOADING COLOUR RAM!
        sta $d800,x
        

        lda $4428,x
        sta $d900,x
        lda $4528,x
        sta $da00,x
        lda $4628,x
        sta $db00,x
        inx         ; Inc the X registry   
        bne LDimg3  ; While x is not equal to zero keep branch looping!   

        jmp setup


setup
     
        lda #$3b    ;             BITMAP MODE!
        sta $d011   ; Mode storage. #$3b is Bitmap mode.

        lda #$18    ;            COLOUR MODE!?
        sta $d016   ; Load $d016 into #$18 we switch to multi-colour mode.

        lda #$38    ; image 1 - I understand that this 0c00 / 0400 = 3 
                    ; & the 8 comes from 2000 (starting mem of Bitmap) divided
                    ; by 0400 (screen RAM in bytes).
        sta $d018   ; Guessing the significance of this address is screen based?

        ;lda #$??  ; image 2 - doing the math above with the image two the 
                   ; conditions the results here are 13 & 18, but how do I 
                   ; combine larger hex numbers like this?
        ;sta $d018 ; See query above
        
        ;lda #$??  ; image 3 - As above the math here is clear. But how do I 
                   ; combine the results into the 2 numbers?
        ;sta $d018

play    jmp play


person Smokeyparkin    schedule 12.07.2021    source источник
comment
Вам не нужно переключать банки VIC с помощью регистра $DD00? См. sta.c64.org/cbm64mem.html.   -  person Michael    schedule 13.07.2021
comment
Да, это похоже на двойной голландский для меня. Как бы я это сделал?   -  person Smokeyparkin    schedule 13.07.2021


Ответы (1)


Если я вас правильно понял, вы пытаетесь скопировать растровое изображение в область, из которой VIC-II настроен на чтение. Это не то, что делает ваша программа!

Ваша программа начинается с start1, устанавливает цвет фона и границы на черный, а затем переходит к LDimg2, который копирует оперативную память экрана в какое-то место назначения, затем переходит к setup, а затем переходит к play, что представляет собой бесконечный цикл.

Ваша процедура setup, кажется, настраивает все для растрового изображения 1 (но ваша программа, похоже, копирует (часть) только растровое изображение 2?).

Следующее предположение, потому что я не вижу, что внутри ASTRO1.prg. Но LDimg2 копирует что-то из ASTRO1.prg в регион, начинающийся с $4c00. Однако, похоже, он не копирует все растровое изображение. Битовая карта C64 составляет 8 килобайт. Вы копируете только 1 килобайт.

person OmarL    schedule 01.08.2021