User Tag List

Страница 2 из 2 ПерваяПервая 12
Показано с 11 по 20 из 20

Тема: Помогите с выводом спрайтов

  1. #11

    Регистрация
    03.01.2006
    Адрес
    Рязань
    Сообщений
    2,935
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    1
    Поблагодарили
    1 сообщение
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Вызывай эту процедуру с параметром в HL.

  2. #12

    Регистрация
    20.10.2007
    Адрес
    Челябинск
    Сообщений
    751
    Спасибо Благодарностей отдано 
    33
    Спасибо Благодарностей получено 
    11
    Поблагодарили
    10 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    как это по удобней сделать чтоб, с учетом того что я работаю из под бэйсика?
    Изготовление Картриджей для Денди 1-8 игровки с меню. (0,1,2,3,4,7,71 мапперы), для Сеги 1-8
    https://vk.com/retronicaru

  3. #13

    Регистрация
    20.02.2008
    Адрес
    Siauliai, Lithuania
    Сообщений
    367
    Спасибо Благодарностей отдано 
    42
    Спасибо Благодарностей получено 
    3
    Поблагодарили
    3 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Из бейсика делаешь два POKE и вызываеш процедуру.

    Или делай много входов процедуру:
    Код:
    PIC1:  ld hl,50000
           jr MAIN
    PIC2:  ld hl,50400
           jr MAIN
               ....
    PICX:  ld hl,xxxxxx
           jr MAIN
    MAIN: ld ix,32774
           loop ld a,(hl)
           ld (ix + 2),a
           inc hl
           ld a,(hl)
           ld (ix + 0),
    Последний раз редактировалось Protom; 08.08.2012 в 13:59.
    Альтернативная прошивка для тестера мелкой логики на Мега8515: http://www.8bit.lt/ru/ic-tester

  4. #14

    Регистрация
    20.10.2007
    Адрес
    Челябинск
    Сообщений
    751
    Спасибо Благодарностей отдано 
    33
    Спасибо Благодарностей получено 
    11
    Поблагодарили
    10 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Protom Посмотреть сообщение
    Из бейсика делаешь два POKE и вызываеш процедуру.
    мне интересно как там рассчитывать адрес, если через поке его выставлять.

    на счет много входов, не совсем понял
    Изготовление Картриджей для Денди 1-8 игровки с меню. (0,1,2,3,4,7,71 мапперы), для Сеги 1-8
    https://vk.com/retronicaru

  5. #15

    Регистрация
    18.02.2005
    Адрес
    Набережные Челны
    Сообщений
    1,574
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    3
    Поблагодарили
    2 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Смотрите, у вас программа начинается с адреса 30000 (любимое всеми новичками). Тогда команда LD HL,XXYY будет занимать ячейки 30000, 30001 и 30002.
    Младший байт адреса будет в ячейке 30001, старший в 30002.
    Тогда из Бейсика достаточно написать POKE 30001,<некое нравящееся число> и потом делать запуск.
    Биты рулят лучше байтов, байты рулят шустрее!
    View, Звук, Цвет

  6. #16

    Регистрация
    20.10.2007
    Адрес
    Челябинск
    Сообщений
    751
    Спасибо Благодарностей отдано 
    33
    Спасибо Благодарностей получено 
    11
    Поблагодарили
    10 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от GriV Посмотреть сообщение
    POKE 30001,<некое нравящееся число> и потом делать запуск
    мне нравиться 50000, но что то не работает)
    Изготовление Картриджей для Денди 1-8 игровки с меню. (0,1,2,3,4,7,71 мапперы), для Сеги 1-8
    https://vk.com/retronicaru

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

  8. #17

    Регистрация
    01.03.2005
    Адрес
    Саранск
    Сообщений
    5,830
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    247
    Поблагодарили
    106 сообщений
    Mentioned
    5 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Зачем надо для каждого момента создавать новую тему? Пиши в той же. Посты перенес.
    Свирепый агрессивно-депрессивный мордовец!
    Не уверен - не напрягай!

    Не сдавайся. Дыши?

    Virtual TR-DOS

  9. #18

    Регистрация
    07.02.2008
    Адрес
    г. Рязань
    Сообщений
    2,928
    Спасибо Благодарностей отдано 
    37
    Спасибо Благодарностей получено 
    124
    Поблагодарили
    44 сообщений
    Mentioned
    5 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Сначала поворчу:
    Цитата Сообщение от Руслан Посмотреть сообщение
    Допустим, если такой то бит равен двум,
    Поаккуратнее так... Могут прокомментировать жоско.
    Цитата Сообщение от Руслан Посмотреть сообщение
    но что то не работает)
    А вот так не делаем больше совсем. Всегда пишем как не работает, что показывается/не показывается, как ведет себя программа/компилятор...

    Теперь по делу. Итак, как я понимаю, у тебя есть табличка типа этого:
    Код:
    Экран   Адрес
    --------------
    1        50000
    2        51000
    3        52000
    ...
    Еще допустим, что ты дописал первой строчкой к моему коду ORG 40000, то есть, положил программу в 40000 и оттуда же ее запускаешь.

    Тебе предложили несколько способов вызова, сейчас распишу подробнее.
    Итак, способ №1, самый простой и самый медленный: адрес спрайтовой карты задается в коде первой строкой: ld hl,50000. Чтобы менять его из BASIC'а, надо сделать так примерно:
    Код:
    1000 LET HL=50000: REM HL - адрес нужной карты спрйатов (51000, 52000...)
    1010 LET H=INT(HL/256): LET L=HL-H*256
    1020 POKE 50001,L: POKE 50002,H
    1030 RANDOMIZE USR 40000
    Способ №2 - побыстрее способа №1, но его нельзя использовать если в отсальной программе используется функция Бэйсика RND
    Код:
    1000 LET HL=50000: REM HL - адрес нужной карты спрйатов (51000, 52000...)
    1010 RANDOMIZE HL
    1020 POKE 50001,PEEK 23670: POKE 50002,PEEK 23671
    1030 RANDOMIZE USR 40000
    Эти 2 способа не требуют изменения ассемблерной программы.
    Способ №3 - самый быстрый, но несколько расточительный по памяти.
    Что надо:
    1) убрать строку ld hl,50000 в начале программы.
    2) в следующую после убранной строчку в поле меток написать метку main
    3) для каждой спрайтовой карты дописать перед строкой с main (после ORG) такие строки:
    Код:
            ld hl,50000
            jr main
            ld hl,51000
            jr main
            ld hl,52000
            jr main
    ...
    4) если номер спрайтовой карты хранится в переменной N, то для вывода каждой карты надо написать RANDOMNIZE USR 40000+N*5 (потому что ld hl,NNNN: jr main занимает 5 байт).

    Есть способы еще поменьше и побыстрее, но предлагаю их пока отложить.
    Кстати, у меня к тебе есть 2 вопроса:
    1) зачем ты загружаешь код вывода спрайтов в 32768? У тебя для Бэйсика останется всего 32768-23755 =~ 9 Кб, что очень мало для игры. Ты говорил, что не смог написать игру с помощью Laser Basic'а потому, что тебе не хватило места - но он располагается гораздо ниже, в районе 50000 примерно, то есть под Бэйсик оставалось 26 Кб - и этого тебе не хватило.
    2) Если ты исползуешь Sprite Graber, то процедура вывода карты может быть уменьшена и ускорена. Если надо - обращайся.
    Последний раз редактировалось Alex Rider; 08.08.2012 в 17:16.

  10. #19

    Регистрация
    20.10.2007
    Адрес
    Челябинск
    Сообщений
    751
    Спасибо Благодарностей отдано 
    33
    Спасибо Благодарностей получено 
    11
    Поблагодарили
    10 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    32768 это временное место расположение. Подниму выше. На лазерб не хватило памяти, потому что я расположение координаты спрайтов хранил в том же бэйсике, а это много занимало. Сейчас же у меня 40 экранов вместе с координатами весят 10 кб. и их я могу засунуть куда угодно). А сколько как правило памяти занимают переменные в бэйсике? Есть способы узнать это?
    Изготовление Картриджей для Денди 1-8 игровки с меню. (0,1,2,3,4,7,71 мапперы), для Сеги 1-8
    https://vk.com/retronicaru

  11. #20

    Регистрация
    07.02.2008
    Адрес
    г. Рязань
    Сообщений
    2,928
    Спасибо Благодарностей отдано 
    37
    Спасибо Благодарностей получено 
    124
    Поблагодарили
    44 сообщений
    Mentioned
    5 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Руслан Посмотреть сообщение
    А сколько как правило памяти занимают переменные в бэйсике? Есть способы узнать это?
    Тебе нужен размер каждой переменной? Если да, то надо курить формат хранения переменных в BASIC'е. Если отследить в текущий момент времени, то:
    ELINE=PEEK 23641 + 256 * PEEK 23642: LET VARS = PEEK 23627 + 256 * PEEK 23628: PRINT ELINE - VARS.

Страница 2 из 2 ПерваяПервая 12

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

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

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

Похожие темы

  1. Эмулятор с выводом на принтер
    от SaintTurnip в разделе Эмуляторы
    Ответов: 4
    Последнее: 06.07.2012, 18:49
  2. ПРИГОТОВЛЕНИЕ СПРАЙТОВ IBM > ZX
    от AAA в разделе Для начинающих
    Ответов: 2
    Последнее: 11.10.2011, 16:05
  3. Мерцание спрайтов
    от Slider в разделе Для начинающих
    Ответов: 12
    Последнее: 05.08.2009, 22:51
  4. движение спрайтов
    от женя999 в разделе Графика
    Ответов: 3
    Последнее: 15.06.2009, 21:45

Ваши права

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