Важная информация

User Tag List

Показано с 1 по 8 из 8

Тема: Программа для последовательной смены изображений

  1. #1
    Junior Аватар для RTeh
    Регистрация
    22.10.2009
    Адрес
    Череповец
    Сообщений
    10
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию Программа для последовательной смены изображений

    Здравствуйте.
    Потребовалось написать небольшую программу для последовательного вывода на экран Спектрума изображений (стандартные 256х192). Программа будет загружаться с кассеты, поэтому требуется прогрузить изображения в память заранее, а выводить их уже из памяти, чтобы избежать длительных загрузок.
    В Бейсике я не силен, поэтому полет фантазии ограничился лишь
    Код:
    10 LOAD "0000" CODE 40000,6912
    20 LOAD "0001" CODE 30000,6912
    Т.е. попыткой загрузки в память этих картинок, что вроде бы проходит успешно. А вот с выводом возникает проблема, т.е. всевозможные комбинации операторов ничего не дают.
    Посоветуйте разумные способы решения поставленной задачи.

  2. #1
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  3. #2
    Guru Аватар для null_device
    Регистрация
    26.09.2009
    Адрес
    г. Красноярск
    Сообщений
    3,095
    Спасибо Благодарностей отдано 
    21
    Спасибо Благодарностей получено 
    83
    Поблагодарили
    67 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    RTeh, вывести изображения из памяти на экран средствами бейсика можно, но врятли это получится с приемлимой скоростью:

    Код:
    ...
    30 FOR I=0 TO 6911
    40 POKE 16384+I, PEEK (30000+I)
    50 NEXT I
    ...
    60 FOR I=0 TO 6911
    70 POKE 16384+I, PEEK (40000+I)
    80 NEXT I


    ---------- Post added at 09:08 ---------- Previous post was at 08:42 ----------

    Обычно, данную задачу решают с помощью ассемблера. Например, так:

    текст курсивом, от точки с запятой не набирать, это комментарии
    10 FOR I=0 TO 11
    20 READ N : POKE m+I, N ; здесь m - адрес с которого удобно расположить подпрограмму в кодах
    30 NEX I
    40 DATA 33, 0, 0 ; LD HL, (nn)
    50 DATA 17, 0, 64 ; LD DE, (16384)
    60 DATA 1, 0, 27 ; LD BC, (6912)
    70 DATA 237, 176 ; LDIR
    80 DATA 201 ; RET
    ...
    100 RANDOMIZE n ; здесь n - адрес с которого лежит картинка, которую будем выводить
    110 POKE m+1, PEEK 23670 : POKE m+2, PEEK 23671 ; здесь m+1 и m+2 - непосредственно значения, зависящие от числа в операторе 20
    120 RANDOMIZE USR m ; вызов подпрограммы в кодах
    Текст программы по 80 строку выполняется один раз. Для удобства, после выполнения, его можно сохранить командой SAVE "name" CODE m,12 и подгружать в случае необходимости (вместо выполнения этих операторов).
    Текст с 100 строки можно выполнять сколько угодно раз, меняя значение n на нужное.
    Последний раз редактировалось null_device; 24.07.2013 в 17:26.
    Когда есть, но не знаешь где - это все равно, что нету.

  4. #3
    Guru Аватар для breeze
    Регистрация
    11.02.2005
    Адрес
    【RB】
    Сообщений
    3,692
    Спасибо Благодарностей отдано 
    29
    Спасибо Благодарностей получено 
    42
    Поблагодарили
    30 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    А не проще ли воспользоваться паковщиками картинок? Во первых и места меньше занимают (можно в память больше загрузить сразу) и не надо мучатся с кодами, вызываешь сразу процедуру RANDOMIZE USR 49152 (например) и красиво проявляется на экране.
    (๑•̀ㅂ•́)و✧ Doors UI → https://t.me/doorsui | https://t.me/atari_xl_xe ← Atari XL/XE (●´ω`●)ゞ

  5. #4
    Junior Аватар для RTeh
    Регистрация
    22.10.2009
    Адрес
    Череповец
    Сообщений
    10
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    null_device, спасибо за развернутый ответ. С первым вариантом разобрался, пробую второй (пока вывод хотя бы одного изображения). Программа выполняется, но на экране ничего не появляется, моментально выводится OK.
    Код:
    10 LOAD "0000" CODE 40000,6912
    20 LOAD "0001" CODE 30000,6912
    30 FOR I=0 TO 11
    40 READ N : POKE 50000+I, N
    50 NEXT I
    60 DATA 33, 0, 0
    70 DATA 17, 64, 0
    80 DATA 1, 27, 0
    90 DATA 237, 176
    100 DATA 201
    110 RANDOMIZE 30000
    120 POKE 50001, PEEK 23670 : POKE 50002, PEEK 23671
    130 RANDOMIZE USR 50000
    Пока лишь предположение, что переменная N нигде не вводится.

  6. #5
    Guru Аватар для null_device
    Регистрация
    26.09.2009
    Адрес
    г. Красноярск
    Сообщений
    3,095
    Спасибо Благодарностей отдано 
    21
    Спасибо Благодарностей получено 
    83
    Поблагодарили
    67 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    RTeh, Адрес был "шиворот-на-выворот". Сперва должен идти "младший байт" (давно не пользовался этими операторами).

    ---------- Post added at 20:25 ---------- Previous post was at 20:20 ----------

    Цитата Сообщение от breeze Посмотреть сообщение
    А не проще ли воспользоваться паковщиками картинок?
    Проще, но для начала, лучше потренироваться "на кошках".
    Последний раз редактировалось null_device; 24.07.2013 в 17:34.
    Когда есть, но не знаешь где - это все равно, что нету.

  7. #6
    Junior Аватар для RTeh
    Регистрация
    22.10.2009
    Адрес
    Череповец
    Сообщений
    10
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Попробовал, пока результат тот же: ОК и пустой экран.

  8. #7
    Guru Аватар для null_device
    Регистрация
    26.09.2009
    Адрес
    г. Красноярск
    Сообщений
    3,095
    Спасибо Благодарностей отдано 
    21
    Спасибо Благодарностей получено 
    83
    Поблагодарили
    67 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    RTeh, Как оказалось, накосячил в других операторах. Проверьте листинг.
    Снапшот в анреале запускается с адреса 30000, картинка лежит с 40000. Все работает.
    Последний раз редактировалось null_device; 03.10.2015 в 13:40.
    Когда есть, но не знаешь где - это все равно, что нету.

  9. #8
    Junior Аватар для RTeh
    Регистрация
    22.10.2009
    Адрес
    Череповец
    Сообщений
    10
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    null_device, еще раз большое спасибо! Все работает.

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Программа BIORITMUS
    от Quest в разделе Софт
    Ответов: 23
    Последнее: 21.03.2013, 21:24
  2. Нужна программа!!!
    от Biozoom в разделе Музыка
    Ответов: 113
    Последнее: 12.11.2010, 14:23
  3. Ответов: 18
    Последнее: 18.06.2006, 16:50

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •