User Tag List

Страница 1 из 2 12 ПоследняяПоследняя
Показано с 1 по 10 из 18

Тема: Вывод атрибутов из буфера

  1. #1

    Регистрация
    25.09.2009
    Адрес
    Одесса
    Сообщений
    2,311
    Спасибо Благодарностей отдано 
    96
    Спасибо Благодарностей получено 
    186
    Поблагодарили
    89 сообщений
    Mentioned
    4 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию Вывод атрибутов из буфера

    Пытаюсь написать вывод атрибутов из буфера на видимую область.
    Причём сам буфер на данный момент по ширине составляет 64х24 атрибутных пикселя на случай, если атрибутные пикчи будут вылазить за экран и чтоб не производить проверку при их рендеринге в буфер. Но вообще я бы хотел ещё и по вертикали его расширить для тех же целей. Но пока даже с горизонтальной шириной не выходит. Прога крашит. Что тут не так?

    Код:
    SWAP_BUF 
    		Ld a, 24 ;количество строк атрибутов
    		ld hl, virtbuf ;адрес буфера
    		ld de, #5800 ; видимый экран
    	BUF_LOOP
    		
    		dup 32
    		Ldi 
    		edup
    		
    		Ld bc, 32 ;(64 - 32) остаток строки буфера
    		Add hl,bc
    		Dec a
    		Jr nz,	BUF_LOOP
    - - - Добавлено - - -

    Тока щас осенило, что возможно буфер залазит на область бейсика, из которого я провожу вызов теста... Ладно. Завтра уже проверю по адресам

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

  3. #2

    Регистрация
    26.03.2008
    Адрес
    Питкяранта
    Сообщений
    1,822
    Спасибо Благодарностей отдано 
    274
    Спасибо Благодарностей получено 
    122
    Поблагодарили
    95 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от ALKO Посмотреть сообщение
    бейсика, из которого я провожу вызов теста
    А ещё подозрительно не видно RET...

  4. #3

    Регистрация
    03.07.2021
    Адрес
    г. Кировск
    Сообщений
    922
    Спасибо Благодарностей отдано 
    87
    Спасибо Благодарностей получено 
    211
    Поблагодарили
    156 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Если бы буфер залазил на область бейсика - крашилось бы и без процедуры вывода.
    Саму же процедуру, если нужна скорость, можно развернуть и выводить через стек.
    При этом сохранится возможность "сдвига" по вертикали и горизонтали, код несложный.

  5. #4

    Регистрация
    08.09.2005
    Адрес
    Воронеж
    Сообщений
    4,963
    Записей в дневнике
    3
    Спасибо Благодарностей отдано 
    319
    Спасибо Благодарностей получено 
    312
    Поблагодарили
    236 сообщений
    Mentioned
    11 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    взял бы, да банально оттрассировал бы давно, чем гадать и ответов ждать
    Прихожу без разрешения, сею смерть и разрушение...

  6. #5

    Регистрация
    26.03.2008
    Адрес
    Питкяранта
    Сообщений
    1,822
    Спасибо Благодарностей отдано 
    274
    Спасибо Благодарностей получено 
    122
    Поблагодарили
    95 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Lethargeek Посмотреть сообщение
    взял бы, да банально оттрассировал бы давно, чем гадать и ответов ждать
    А ещё лучше - снапку кинул сюда. Уже ведь любопытно стало

  7. #6

    Регистрация
    25.09.2009
    Адрес
    Одесса
    Сообщений
    2,311
    Спасибо Благодарностей отдано 
    96
    Спасибо Благодарностей получено 
    186
    Поблагодарили
    89 сообщений
    Mentioned
    4 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Спасбо за внимание. Всë пашет норм.

  8. #7

    Регистрация
    25.09.2009
    Адрес
    Одесса
    Сообщений
    2,311
    Спасибо Благодарностей отдано 
    96
    Спасибо Благодарностей получено 
    186
    Поблагодарили
    89 сообщений
    Mentioned
    4 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    У меня процедура заточена под фиксированный размер спрайтов.
    Если желаю указать другой, то мне надо менять значения счётчиков (регистры BC), а также итерацию для перехода на следующую строку (в данном случае Add #55), которая имеет зависимость от ширины спрайта.
    Помогите это дело автоматизировать, чтоб при этом оно не сильно просело по скорости.
    Допустим, размеры спрайта будут в двух первых числах DEFB, а далее уже сами данные.


    Код:
    	
    
    ; расчет адреса атрибутов знакоместа на экране
    ; вход: h=строка экрана, l=столбец экрана
    ; выход: hl=адрес знакоместа на экране, b=строка экрана, c=столбец экрана
    			
    			ld	a,h
    			rrca
    			rrca
    			rrca
    			ld	e,a
    			and	#31
    			or	#246 ; умножить наааа 255
    			ld	d,a
    			ld	a,e
    			and	#0 ; +0  получаем начало атриутной области
    			or	l
    			ld	e,a
    
    			ld hl, #IDLE_PLAYER
    
    			LD c,#10 ;высота спрайта
    DRAW_SPRITE2:
    			LD b,#9 ;шырина спрайта
    DRAW_SPRITE1:
    			ld a,(hl)
    			or a
    			jp z, TRANSPARENT ; пиксель просрачный?
    
    			ld (de),a
    			
    TRANSPARENT:	inc de
    			;dec de ;для зеркалки
    			inc hl
    
    			djnz DRAW_SPRITE1
    
    			Ld a,e
    			Add #55;#32-9; прибавл¤ем к DE 55 (64 (ширина буфера) минус ширина спрайта)
    			;add 73 ; 64 (ширина буфера) плюс ширина спрайта) - для зеркалки
    			Ld e,a;(low byte)
    			Adc d
    			Sub e
    			Ld d,a;(high byte)
    
    			DEC c
    			JR NZ, DRAW_SPRITE2
    			ret
    - - - Добавлено - - -

    В данном случае рисует в буфер начиная с адреса 62976

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

    Ну и да, буфер шире реального экрана (64 пиксела), дабы не вычислять границы экрана при рисовании

  9. #8

    Регистрация
    02.05.2015
    Адрес
    г. Таллин, Эстония
    Сообщений
    1,691
    Спасибо Благодарностей отдано 
    302
    Спасибо Благодарностей получено 
    223
    Поблагодарили
    159 сообщений
    Mentioned
    11 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от ALKO Посмотреть сообщение
    У меня процедура заточена под фиксированный размер спрайтов.
    Если желаю указать другой, то мне надо менять значения счётчиков (регистры BC), а также итерацию для перехода на следующую строку
    Перед вызовом процедуры в зависимости от ширины спрайта просто модифицируй эти значения в коде.

    ld a, 10 ; height
    ld (DRAW_SPRITE2-1), a
    ld a, 9 ; width
    ld (DRAW_SPRITE1-1), a
    ...
    call draw_sprite
    Heavy on the disasm
    Eric and the disasm
    Mask 3: Venom strikes disasm
    Bard's disasm

  10. #9

    Регистрация
    08.09.2005
    Адрес
    Воронеж
    Сообщений
    4,963
    Записей в дневнике
    3
    Спасибо Благодарностей отдано 
    319
    Спасибо Благодарностей получено 
    312
    Поблагодарили
    236 сообщений
    Mentioned
    11 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Bedazzle Посмотреть сообщение
    Перед вызовом процедуры в зависимости от ширины спрайта просто модифицируй эти значения в коде.
    зачем, если
    Цитата Сообщение от ALKO Посмотреть сообщение
    Допустим, размеры спрайта будут в двух первых числах DEFB, а далее уже сами данные.
    тогда проще передать в hl адрес спрайта и в коде сразу прочитать с инкрементом из (hl)
    можно даже смещение для следующей строки хранить рядом с байтами размера
    Прихожу без разрешения, сею смерть и разрушение...

  11. #10

    Регистрация
    02.05.2015
    Адрес
    г. Таллин, Эстония
    Сообщений
    1,691
    Спасибо Благодарностей отдано 
    302
    Спасибо Благодарностей получено 
    223
    Поблагодарили
    159 сообщений
    Mentioned
    11 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Lethargeek Посмотреть сообщение
    зачем, если

    тогда проще передать в hl адрес спрайта и в коде сразу прочитать с инкрементом из (hl)
    Не понял. В hl же адрес экрана должен быть? Зачем оттуда читать?


    Цитата Сообщение от Lethargeek Посмотреть сообщение
    можно даже смещение для следующей строки хранить рядом с байтами размера
    Ну, это зависит можно ли раздувать память под спрайты. И оно будет медленнее, чем модифицирующийся хардкод.
    Heavy on the disasm
    Eric and the disasm
    Mask 3: Venom strikes disasm
    Bard's disasm

Страница 1 из 2 12 ПоследняяПоследняя

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

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

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

Похожие темы

  1. Ответов: 43
    Последнее: 03.10.2015, 07:09
  2. вывод символа 4*8
    от Dexus в разделе Программирование
    Ответов: 15
    Последнее: 14.04.2011, 14:14
  3. Вывод на HD мониторы
    от jimled в разделе Изображение
    Ответов: 1
    Последнее: 28.01.2008, 15:09
  4. порт атрибутов Spectculator 6.30
    от Totem в разделе Эмуляторы
    Ответов: 0
    Последнее: 08.01.2008, 17:20
  5. Вывод изображения
    от Shnurkov в разделе Изображение
    Ответов: 5
    Последнее: 10.02.2007, 15:07

Ваши права

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