C64 Assembly - 6502/6510 - отображение серии из трех растровых изображений одно за другим с последующим переходом в символьный режим

У меня здесь довольно большой вопрос, на который мне очень трудно ответить, имея всего пару справочников, Интернет и ваш покорный слуга.

  1. Я просто хочу отобразить растровое изображение. Подождите пару секунд.
  2. Сотри это из памяти.
  3. Отобразите другое растровое изображение. Подождите еще раз.
  4. Сотри это из памяти.
  5. Отобразите окончательное растровое изображение. Подождите в последний раз.
  6. И, как вы уже догадались, сотрите это из памяти.
  7. Затем войдите в стандартный символьный режим. & Продолжить выполнение моего кода, который начинается с пустого экрана и переходит к запросу пользователя ввести текст и т. Д.

Биты, выделенные жирным шрифтом, у меня возникли серьезные проблемы!

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

      *=$1000

        lda $4710
        sta $d020
        sta $d021
        ldx #$00

loaddccimage
        lda $3f40,x
        sta $0400,x
        lda $4040,x
        sta $0500,x
        lda $4140,x
        sta $0600,x
        lda $4240,x
        sta $0700,x
        lda $4328,x
        sta $d800,x
        lda $4428,x
        sta $d900,x
        lda $4528,x
        sta $da00,x
        lda $4628,x
        sta $db00,x
        inx
        bne loaddccimage

        lda #$3b
        sta $d011
        lda #$18
        sta $d016
        lda #$18
        sta $d018
        
        jsr *

*=$1FFE
        incbin "ASTRO1.prg"

До сих пор я пытался повторить код, думая, что он может просто перезаписать все, но *=$1FFEE, похоже, не работает в хронологическом порядке, с каждым файлом я получаю ошибку перезаписи памяти, и всегда по умолчанию отображение последнего растрового изображения, которое я вызываю с помощью функции incbin. Есть ли способ сбросить все (но просто перейти в черный цвет) между каждым кадром растрового изображения? Или я просто неправильно загружаю эти изображения?

Переход в символьный режим также будет сложным, поскольку я не могу найти способ сделать это даже с одним растровым изображением. Возможно, вся эта структура кода - неправильный путь, идк ...

Или это просто то, что c64 не может сделать? Я не хочу идти сюда, потому что уверен, что раньше видел цикл растровых изображений во вступлении к играм - просто ломаю голову, пытаясь понять, как это можно сделать.

Еще раз спасибо, ребята, и извините за непонимание, я новичок в программировании в целом, но думаю, что нахожусь на правильном пути. Я надеюсь, что многие смогут извлечь уроки из ваших ответов, потому что это действительно то, о чем я думаю, на самом деле нет никакой информации.

Ваш любящий друг Коммодор,

Джеймс (Смокипаркин)

1 ответ

У вас есть три альтернативы.

  1. Вы можете включить все три растровых изображения в разные ячейки памяти и перенести их по одному в нужное место. Например, в настоящее время вы загружаете свое первое растровое изображение до $2000. Все в порядке. Вы можете загрузить следующие растровые изображения до 4800 и 7000 долларов. Затем перенесите их в нужные места, когда вам нужно показать следующее растровое изображение.
  2. Вы можете загружать растровые изображения в подходящие позиции растровых изображений VIC, такие как $2000, $6000, $ e000 и т. Д. Затем все, что вам нужно сделать, это изменить $dd00 и переключить банк. Но будьте осторожны, 6000 долларов - это нормально, но для того, чтобы иметь возможность использовать 000 долларов, вам необходимо отключить Kernal ROM. Здесь все становится немного сложнее, вам нужно возиться со значениями $ 01.
  3. Вы можете использовать загрузчик IRQ, например загрузчик IRQ Krill. Вы можете поискать его в Интернете. Используя загрузчик IRQ, вы можете включить первое растровое изображение, а затем снова загрузить другие растровые изображения с диска в расположение $ 2000 и повторить то же самое. Конечно, вы можете захотеть показать что-то еще, может быть, сообщение о загрузке во время загрузки. Лучше использовать $ 2000 и $ 6000 для растрового изображения, загрузить следующее изображение в другой банк и снова переключить банк, используя $dd00. Таким образом, ваш исходный файл PRG будет включать только первое изображение, а остальное вы сможете загрузить с диска.

Что касается возврата в символьный режим, достаточно просто установить $ d011, $ d016 и $ d018 на их начальные значения (также $dd00, если вы его измените).

          lda #$1b
    sta $d011
    lda #$c8
    sta $d016
    lda #$14
    sta $d018

Для создания задержки проверьте мой ответ здесь:Как создать задержку в asm для MOS 6502

Для ввода с клавиатуры проверьте мой ответ здесь:Сравните нажатия клавиш - Сборка CCS64

Другие вопросы по тегам