Вызывай эту процедуру с параметром в HL.
Вызывай эту процедуру с параметром в HL.
как это по удобней сделать чтоб, с учетом того что я работаю из под бэйсика?
Изготовление Картриджей для Денди 1-8 игровки с меню. (0,1,2,3,4,7,71 мапперы), для Сеги 1-8
https://vk.com/retronicaru
Из бейсика делаешь два 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
Изготовление Картриджей для Денди 1-8 игровки с меню. (0,1,2,3,4,7,71 мапперы), для Сеги 1-8
https://vk.com/retronicaru
Смотрите, у вас программа начинается с адреса 30000 (любимое всеми новичками). Тогда команда LD HL,XXYY будет занимать ячейки 30000, 30001 и 30002.
Младший байт адреса будет в ячейке 30001, старший в 30002.
Тогда из Бейсика достаточно написать POKE 30001,<некое нравящееся число> и потом делать запуск.
Изготовление Картриджей для Денди 1-8 игровки с меню. (0,1,2,3,4,7,71 мапперы), для Сеги 1-8
https://vk.com/retronicaru
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
Зачем надо для каждого момента создавать новую тему? Пиши в той же. Посты перенес.
Свирепый агрессивно-депрессивный мордовец!
Не уверен - не напрягай!
Не сдавайся. Дыши?
Virtual TR-DOS
Сначала поворчу:
Поаккуратнее так... Могут прокомментировать жоско.
А вот так не делаем больше совсем. Всегда пишем как не работает, что показывается/не показывается, как ведет себя программа/компилятор...
Теперь по делу. Итак, как я понимаю, у тебя есть табличка типа этого:
Еще допустим, что ты дописал первой строчкой к моему коду ORG 40000, то есть, положил программу в 40000 и оттуда же ее запускаешь.Код:Экран Адрес -------------- 1 50000 2 51000 3 52000 ...
Тебе предложили несколько способов вызова, сейчас распишу подробнее.
Итак, способ №1, самый простой и самый медленный: адрес спрайтовой карты задается в коде первой строкой: ld hl,50000. Чтобы менять его из BASIC'а, надо сделать так примерно:
Способ №2 - побыстрее способа №1, но его нельзя использовать если в отсальной программе используется функция Бэйсика RNDКод: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 способа не требуют изменения ассемблерной программы.Код:1000 LET HL=50000: REM HL - адрес нужной карты спрйатов (51000, 52000...) 1010 RANDOMIZE HL 1020 POKE 50001,PEEK 23670: POKE 50002,PEEK 23671 1030 RANDOMIZE USR 40000
Способ №3 - самый быстрый, но несколько расточительный по памяти.
Что надо:
1) убрать строку ld hl,50000 в начале программы.
2) в следующую после убранной строчку в поле меток написать метку main
3) для каждой спрайтовой карты дописать перед строкой с main (после ORG) такие строки:
4) если номер спрайтовой карты хранится в переменной N, то для вывода каждой карты надо написать RANDOMNIZE USR 40000+N*5 (потому что ld hl,NNNN: jr main занимает 5 байт).Код:ld hl,50000 jr main ld hl,51000 jr main ld hl,52000 jr main ...
Есть способы еще поменьше и побыстрее, но предлагаю их пока отложить.
Кстати, у меня к тебе есть 2 вопроса:
1) зачем ты загружаешь код вывода спрайтов в 32768? У тебя для Бэйсика останется всего 32768-23755 =~ 9 Кб, что очень мало для игры. Ты говорил, что не смог написать игру с помощью Laser Basic'а потому, что тебе не хватило места - но он располагается гораздо ниже, в районе 50000 примерно, то есть под Бэйсик оставалось 26 Кб - и этого тебе не хватило.
2) Если ты исползуешь Sprite Graber, то процедура вывода карты может быть уменьшена и ускорена. Если надо - обращайся.
Последний раз редактировалось Alex Rider; 08.08.2012 в 17:16.
32768 это временное место расположение. Подниму выше. На лазерб не хватило памяти, потому что я расположение координаты спрайтов хранил в том же бэйсике, а это много занимало. Сейчас же у меня 40 экранов вместе с координатами весят 10 кб. и их я могу засунуть куда угодно). А сколько как правило памяти занимают переменные в бэйсике? Есть способы узнать это?
Изготовление Картриджей для Денди 1-8 игровки с меню. (0,1,2,3,4,7,71 мапперы), для Сеги 1-8
https://vk.com/retronicaru
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)