C64 Assembly - Циклическое переключение растровых изображений в качестве графического введения в мою игру
Ассемблер: CBM prg Studio
Это из моего предыдущего поста, где я чувствую, что кое-что продвинулся, но все еще очень застрял. Мое предыдущее сообщение с просьбой о помощи по этому вопросу несколько этапов назад ... по ответу, представленному полезным членом сообщества Emir Akaydın , я выбрал вариант 1.
На данный момент я просто использую TEST JUMPER, чтобы попробовать каждое изображение, пытаясь переключиться на таймер между каждым загруженным изображением и инициализацией в моей игре.
Я думаю, что решение здесь должно казаться очевидным более продвинутому программисту. Я думаю, что я должен делать что-то глупое либо в не столь очевидных разделах Загрузка экрана Ram, либо позже в коде под меткой «setup», мои комментарии должны все объяснить.
Доволен любыми предложениями и большое спасибо за внимание!
; 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
1 ответ
Если я вас правильно понял, вы пытаетесь скопировать растровое изображение в область, из которой VIC-II настроен на чтение. Но это не то, что делает ваша программа!
Ваша программа начинается в
start1
, устанавливает черный цвет фона и цвет границы, а затем переходит к, который копирует оперативную память экрана в какое-либо место назначения, а затем переходит к, а затем переходит к
play
который представляет собой бесконечный цикл.
Ваш
setup
подпрограмма, кажется, настраивает вещи для растрового изображения 1 (но ваша программа, кажется, копирует только (часть) растрового изображения 2?).
Следующее - предположение, потому что я не могу видеть, что внутри. Но
LDimg2
кажется, копирует что-то из
ASTRO1.prg
в регион, начиная с
$4c00
. Однако похоже, что он не копирует все растровое изображение. Растровое изображение C64 составляет 8 килобайт. Вы копируете только 1 килобайт.