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

User Tag List

Страница 20 из 28 ПерваяПервая ... 161718192021222324 ... ПоследняяПоследняя
Показано с 191 по 200 из 277

Тема: Пишу шедевр для «Вектора 06Ц»

  1. #191
    Member Аватар для metamorpho
    Регистрация
    24.08.2012
    Адрес
    г. Волжский
    Сообщений
    80
    Спасибо Благодарностей отдано 
    137
    Спасибо Благодарностей получено 
    30
    Поблагодарили
    13 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от jerri Посмотреть сообщение
    Ну вот у тебя нарисован спрайт героя.
    И ты героя двигаешь. Как ты стираешь след от героя?
    Мне прост влом разбирать программу
    Поверх старого спрайта печатаю новый со сдвигом - получается одновременно и движение и затирание следа.

  2. #192
    Guru Аватар для jerri
    Регистрация
    01.03.2005
    Адрес
    Samara
    Сообщений
    3,844
    Спасибо Благодарностей отдано 
    113
    Спасибо Благодарностей получено 
    93
    Поблагодарили
    76 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от metamorpho Посмотреть сообщение
    Поверх старого спрайта печатаю новый со сдвигом - получается одновременно и движение и затирание следа.
    То есть герой меньше чем 24х24
    С уважением,
    Jerri / Red Triangle.
    [02.05.2014] не забудь этот день. Чубайс должен умереть. Dixi.
    [l'Abbey des morts TSEvo EV...5%]

  3. #193
    Member Аватар для metamorpho
    Регистрация
    24.08.2012
    Адрес
    г. Волжский
    Сообщений
    80
    Спасибо Благодарностей отдано 
    137
    Спасибо Благодарностей получено 
    30
    Поблагодарили
    13 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от jerri Посмотреть сообщение
    То есть герой меньше чем 24х24
    Нет, герой 24х24. Когда например идёт сдвиг влево то у меня есть готовые спрайты 32х24 в котором идёт сдвиг влево и анимация заодно.
    А когда герой стоит на месте то печатается спрайт 24х24. При сдвиге вверх тоже печатается 24х24 т.к. в спрайте снизу и сверху есть запас чёрных-нулевых линий.

  4. #194
    Guru Аватар для jerri
    Регистрация
    01.03.2005
    Адрес
    Samara
    Сообщений
    3,844
    Спасибо Благодарностей отдано 
    113
    Спасибо Благодарностей получено 
    93
    Поблагодарили
    76 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от metamorpho Посмотреть сообщение
    Нет, герой 24х24. Когда например идёт сдвиг влево то у меня есть готовые спрайты 32х24 в котором идёт сдвиг влево и анимация заодно.
    А когда герой стоит на месте то печатается спрайт 24х24. При сдвиге вверх тоже печатается 24х24 т.к. в спрайте снизу и сверху есть запас чёрных-нулевых линий.
    Ага у тебя есть спрайты 32*24 и спрайты 24*24
    С уважением,
    Jerri / Red Triangle.
    [02.05.2014] не забудь этот день. Чубайс должен умереть. Dixi.
    [l'Abbey des morts TSEvo EV...5%]

  5. #195
    Guru Аватар для jerri
    Регистрация
    01.03.2005
    Адрес
    Samara
    Сообщений
    3,844
    Спасибо Благодарностей отдано 
    113
    Спасибо Благодарностей получено 
    93
    Поблагодарили
    76 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

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

    - - - Добавлено - - -

    вот тебе архив с комментариями
    3 файла

    interrupt.a80 правильные прерывания для работы с программой отрисовки спрайтов

    Скрытый текст

    Код:
    ;процедура обработки прерывания с восстановлением поврежденных данных
    ;при доступе к стеку
    ;регистровая пара для доступа к стеку BC
    im_routine
    	di
    ;сохраняем HL и забираем адрес возврата из прерывания
    	ex	(sp),hl
    ;сохраняем его
    	ld	(im_ret),hl
    ;забираем HL
    	pop	hl
    ;сохраняем его чтобы не потерять при манипуляциях с SP
    	ld	(im_hl),hl
    ;сохраняем флаги
    	push	af
    ;вычисляем корректный адрес стека программы
    	ld	hl,2
    	add	hl,sp
    ;сохраняем стек программы
    	ld	(im_sp),hl
    	pop	af
    ;восстановлением поврежденые данные регистром BC
    	push	bc
    	
    ;задаем стек прерывания	
    	ld	sp,im_stek
    ;сохраняем все регистры кроме HL
    	push	af,bc,de
    ;-----------------------------
    ;ISR
    ;здесь прерывание	 	
    ;-----------------------------
    ;восстанавливаем регистры
    	pop	de,bc,af
    ;восстанавливаем HL
    	ld	hl,#2121
    im_hl	equ	$-2
    ;восстанавливаем стек
    	ld	sp,#3131
    im_sp	equ	$-2
    	ei
    ;возвращаемся из обработки прерывания
    	jp	#c3c3
    im_ret	equ	$-2
    [свернуть]

    sprite.a80 две подпрограммы быстрого вывода через стек
    но тебе надо будет поменять формат спрайтов
    сначала вся линия для одного плана, потом для другого, потом для третьего.
    это значительно ускорит вывод.

    вектор использует систему битпланов при формировании цвета точки
    вот здесь на примере идентичной системы Commodore Amiga более менее рассказано


    Скрытый текст

    Код:
    ;вывод спрайта в системе битпланов Вектор 06
    ;ширина спрайта -24
    ;на входе
    ;bc адрес спрайта
    ;de aдрес на экране 
    ;E-Y D-X 
    ;A высота спрайта/2
    
    drop24
    	ld	hl,0
    	add	hl,sp
    	ld	(sprite_sp0),hl
    	ld	h,b
    	ld	l,c
    	ld	c,(hl)
    	inc	hl
    	ld	b,(hl)
    	inc	hl
    	ld	sp,hl
    ;задаем Y в L
    	ld	l,e
    ;задаем высоту спрайта в E
    	ld	e,a
    ;задаем X в A
    	ld	a,d
    ;переход между битпланами
    	ld	d,#20	
    drop240
    	ld	h,a
    ;рисуем на первом плане
    	ld	(hl),c
    	inc	h
    	ld	(hl),b
    	inc	h
    	pop	bc
    	ld	(hl),c
    ;переход на второй битплан
    	add	a,d
    
    	ld	h,a
    ;рисуем на втором плане
    	ld	(hl),b
    	inc	h
    	pop	bc
    	ld	(hl),c
    	inc	h
    	ld	(hl),b
    	pop	bc
    ;переход на третий битплан
    	add	a,d
    
    	ld	h,a
    ;рисуем на третьем плане
    	ld	(hl),c
    	inc	h
    	ld	(hl),b
    	inc	h
    	pop	bc
    	ld	(hl),c
    ;возвращаемся на первый план	
    	sub	#40
    ;переходим на следующую строку
    	inc	l	
    
    ;повторяем цикл рисования
    ;
    	ld	(hl),b
    	inc	h
    	pop	bc
    	ld	(hl),c
    	inc	h
    	ld	(hl),b
    	pop	bc
    ;переход на второй битплан
    	add	a,d
    
    	ld	h,a
    ;рисуем на втором плане
    	ld	(hl),c
    	inc	h
    	ld	(hl),b
    	inc	h
    	pop	bc
    	ld	(hl),c
    ;переход на третий битплан
    	add	a,d
    
    	ld	h,a
    ;рисуем на третьем плане
    	ld	(hl),b
    	inc	h
    	pop	bc
    	ld	(hl),c
    	inc	h
    	ld	(hl),b
    ;выбираем следующую пару байтов для цикла рисования
    	pop	bc
    
    ;возвращаемся на первый план	
    	sub	#40
    ;переходим на следующую строку
    	inc	l	
    ;проверяем на завершение цикла 
    	dec	e
    	jp	nz,drop240	
    sprite_sp
    	ld	sp,#3131
    sprite_sp0 equ	$-2
    	ret
    
    ;ширина спрайта -32
    ;на входе
    ;bc адрес спрайта
    ;de aдрес на экране 
    ;E-Y D-X 
    ;A высота спрайта/2
    
    drop32
    	ld	hl,0
    	add	hl,sp
    	ld	(sprite_sp0),hl
    	ld	h,b
    	ld	l,c
    	ld	c,(hl)
    	inc	hl
    	ld	b,(hl)
    	inc	hl
    	ld	sp,hl
    ;задаем Y в L
    	ld	l,e
    ;задаем высоту спрайта в E
    	ld	e,a
    ;задаем X в A
    	ld	a,d
    ;переход между битпланами
    	ld	d,#20	
    drop320
    	ld	h,a
    ;рисуем на первом плане
    	ld	(hl),c
    	inc	h
    	ld	(hl),b
    	inc	h
    	pop	bc
    	ld	(hl),c
    	inc	h
    	ld	(hl),b
    	pop	bc
    ;переход на второй битплан
    	add	a,d
    
    	ld	h,a
    ;рисуем на втором плане
    	ld	(hl),c
    	inc	h
    	ld	(hl),b
    	inc	h
    	pop	bc
    	ld	(hl),c
    	inc	h
    	ld	(hl),b
    	pop	bc
    ;переход на третий битплан
    	add	a,d
    
    	ld	h,a
    ;рисуем на третьем плане
    	ld	(hl),c
    	inc	h
    	ld	(hl),b
    	inc	h
    	pop	bc
    	ld	(hl),c
    	inc	h
    	ld	(hl),b
    	pop	bc
    ;возвращаемся на первый план	
    	sub	#40
    ;переходим на следующую строку
    	inc	l	
    
    ;повторяем цикл рисования
    ;
    	ld	(hl),c
    	inc	h
    	ld	(hl),b
    	inc	h
    	pop	bc
    	ld	(hl),c
    	inc	h
    	ld	(hl),b
    	pop	bc
    ;переход на второй битплан
    	add	a,d
    
    	ld	h,a
    ;рисуем на втором плане
    	ld	(hl),c
    	inc	h
    	ld	(hl),b
    	inc	h
    	pop	bc
    	ld	(hl),c
    	inc	h
    	ld	(hl),b
    	pop	bc
    ;переход на третий битплан
    	add	a,d
    
    	ld	h,a
    ;рисуем на третьем плане
    	ld	(hl),c
    	inc	h
    	ld	(hl),b
    	inc	h
    	pop	bc
    	ld	(hl),c
    	inc	h
    	ld	(hl),b
    ;выбираем следующую пару байтов для цикла рисования
    	pop	bc
    
    ;возвращаемся на первый план	
    	sub	#40
    ;переходим на следующую строку
    	inc	l	
    ;проверяем на завершение цикла 
    	dec	e
    	jp	nz,drop320	
    	jp	sprite_sp
    [свернуть]

    И небольшая таблица в EXCEL
    с памяткой по переводу команд из z80 в i8080 и назад.
    чтобы понять как это работает

    interrupt.zip
    Последний раз редактировалось jerri; 01.08.2020 в 22:05. Причина: багу нашел
    С уважением,
    Jerri / Red Triangle.
    [02.05.2014] не забудь этот день. Чубайс должен умереть. Dixi.
    [l'Abbey des morts TSEvo EV...5%]

  6. Этот пользователь поблагодарил jerri за это полезное сообщение:

    metamorpho (02.08.2020)

  7. #196
    Master
    Регистрация
    22.02.2014
    Адрес
    г. Курган
    Сообщений
    934
    Спасибо Благодарностей отдано 
    56
    Спасибо Благодарностей получено 
    105
    Поблагодарили
    82 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Я тут собрал "болванку" по образцу этой программы.
    Спрайты 24х24 на 3 плоскости, на экране 10х10 ячеек игрового поля, ширма 16 строк.
    Вывод спрайтов с использованием стека на чтение.
    Прерывания, те, которые тут обсуждаются, для данного метода вывода спрайтов.

    В итоге получается, что при перемещениях персонажа по горизонтали, и отрисовка ещё 5-ти подвижных объектов спокойно укладывается между прерываниями, т.е. требуется менее 20мс.
    А вот при перемещении по вертикали, из-за подготовки поля под ширмой, до прерывания можно обработать только 4-е подвижных объекта, и совсем без запаса.
    Последний раз редактировалось KTSerg; 02.08.2020 в 05:19.

  8. Этот пользователь поблагодарил KTSerg за это полезное сообщение:

    metamorpho (02.08.2020)

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

  10. #197
    Guru Аватар для jerri
    Регистрация
    01.03.2005
    Адрес
    Samara
    Сообщений
    3,844
    Спасибо Благодарностей отдано 
    113
    Спасибо Благодарностей получено 
    93
    Поблагодарили
    76 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    KTSerg, ты как поле готовишь?
    Мой метод спрайтов посмотрел?
    С уважением,
    Jerri / Red Triangle.
    [02.05.2014] не забудь этот день. Чубайс должен умереть. Dixi.
    [l'Abbey des morts TSEvo EV...5%]

  11. #198
    Master
    Регистрация
    22.02.2014
    Адрес
    г. Курган
    Сообщений
    934
    Спасибо Благодарностей отдано 
    56
    Спасибо Благодарностей получено 
    105
    Поблагодарили
    82 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от jerri Посмотреть сообщение
    KTSerg, ты как поле готовишь?
    Мой метод спрайтов посмотрел?
    Это то, что под спойлером, начинается с ";вывод спрайта в системе битпланов Вектор 06" ?
    Нет пока не смотрел. Сейчас гляну.
    Мнемоника там не привычная, на первый взгляд от Z80.

  12. #199
    Guru Аватар для jerri
    Регистрация
    01.03.2005
    Адрес
    Samara
    Сообщений
    3,844
    Спасибо Благодарностей отдано 
    113
    Спасибо Благодарностей получено 
    93
    Поблагодарили
    76 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от KTSerg Посмотреть сообщение
    Это то, что под спойлером, начинается с ";вывод спрайта в системе битпланов Вектор 06" ?
    Нет пока не смотрел. Сейчас гляну.
    Мнемоника там не привычная, на первый взгляд от Z80.
    Ну да. От z80
    С уважением,
    Jerri / Red Triangle.
    [02.05.2014] не забудь этот день. Чубайс должен умереть. Dixi.
    [l'Abbey des morts TSEvo EV...5%]

  13. #200
    Master
    Регистрация
    22.02.2014
    Адрес
    г. Курган
    Сообщений
    934
    Спасибо Благодарностей отдано 
    56
    Спасибо Благодарностей получено 
    105
    Поблагодарили
    82 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от jerri Посмотреть сообщение
    KTSerg, ты как поле готовишь?
    Мой метод спрайтов посмотрел?
    jerri, примерно да. Только у меня алгоритм значительно длиннее, и не построчно, а по две строки.
    Т.е. две строки в одной колонке, потом две во второй, в третьей. Потом переход на след. план. По две строки справа налево. Переход на след. план. Снова по две строки в право. И так дважды.
    За счет более длинного и развёрнутого алгоритма, по тактам, мой не значительно быстрее. Видимо за счет меньшего количества проверок на конц цикла. Т.к. у тебя на 4 строки дважды проверка на повтор, а у меня один раз.
    Поскольку у тебя, переход между планами и проверка циклов компактнее, чем у меня.
    Спасибо за идею.
    И подозреваю, что у моего метода "по две строки" выше вероятность появлению мельтешения (мерцания).

    - - - Добавлено - - -

    jerri, в алгоритме рисования спрайта, есть для меня один не понятный момент.
    При переходе на след строку (в средине алгоритма):

    Код:
            ld      (hl),c
    ;возвращаемся на первый план
            sub     #40
    ;переходим на следующую строку
            inc     l
    ;повторяем цикл рисования
            ld      (hl),b
    Уменьшение аккумулятора на 40 - это я понимаю, переход не след строку "inc l" - тоже.
    А как происходит перевод регистра H - на начало?
    Не пропущено "mov h,a" ?
    Последний раз редактировалось KTSerg; 02.08.2020 в 06:36.

Страница 20 из 28 ПерваяПервая ... 161718192021222324 ... ПоследняяПоследняя

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

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

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

  1. Heimdallr

Похожие темы

  1. Бейсики для Вектора-06Ц и клонов
    от ivagor в разделе Вектор
    Ответов: 68
    Последнее: 15.05.2020, 11:11
  2. Ответов: 198
    Последнее: 26.04.2020, 13:05
  3. Картотека ПО для Вектора-06ц
    от svofski в разделе Вектор
    Ответов: 612
    Последнее: 27.10.2019, 20:41
  4. Восстановление Вектора-06ц
    от Daniil Chislov 86 в разделе Вектор
    Ответов: 72
    Последнее: 14.10.2019, 12:20
  5. Ответов: 58
    Последнее: 06.07.2019, 23:56

Ваши права

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