Спасибо. Отправил. Подождёмс...
Спасибо. Отправил. Подождёмс...
Написал свою обвязку. И вижу определённые траблы в предложенной Санчезом процедуре спрайтовалки по таблице. Результат:
Первый косяк - видимо, где то ошибается на один бит в сдвигах в его процедуре, потому что самый левым выводит тот, который должен быть самым правым (в пределах 8 бит). Видно на образе мышки, как две вертикальные полоски в начале знакомест. Возможно также не правильно генерится сама таблица. Таблицу положил по красивому адресу #c000. А в своём коде я уверен на 100%. Кто разберётся, в чём проблема?
Второй косяк ещё более неожиданный. Заявлено, что спрайтоваться будет в любое место в пределах координат 0..255,0..191. И фигушки. По горизонтали не может вывести в диапазоне 247...255, т.е. в последнем правом знакоместе экрана нет попиксельного позиционирования. На любой Х в последнем знакоместе выводит всегда в координату 247 без сдвига.
Третий косяк, - нифига не пойму в каком виде нужно пихать спрайт на вход, с этими новомодными выпендрёжами. Скормил стандартные маску и спрайт - не правильно выводит. Проинвертировал маску и спрайт, - снова не правильно выводит (как на картинке). Так как надо то?
Что, никто не тестил сие произведение?
Вот код без клипинга. Всё чётко и понятно:
Помогайте разобраться, а то Санчеза ждать можно годами, и так и не дождаться.Код:;вывод спрайтов любой ширины, со сдвигом от 1 до 7 ;104 такта на один байт с маской, 71680/104 = 689 байт за кадр ;Вывод одного байта с маской: ;HL' = адрес спрайта ;D' = старший байт адреса таблицы смещений offset_tab ;BC' = данные предыдущего байта (в начале каждой линии нужно обнулять) ;HL = адрес на экране ;6656 тактов вывод 2х2 стрелки с маской + небольшой обвес ld hl,mouse_Spr ld d,#c0 ;offset_tab ld bc,0 exx ld hl,(XYMOUSE) ;кладём в hl X и Y мышки call SCRADR ;получаем на выходе в hl адрес в экранной области ld b,16 loopspr call sprite inc hl call sprite exx ld bc,0 ;на это, кстати, никак не реагирует, хотя написано, что должно exx call SCRAD3 ;down_hl dec hl ;по сути перевели на следующую строчку в экране djnz loopspr
- - - Добавлено - - -
Ща обратил внимание,что мы не передаём в коде точного позиционирования по Х. Посему "второй косяк" это не косяк. Надо научиться передавать подпрограмме спрайтовалки СДВИГ. Как? Через регистр D' может? И я не правильно понял по описанию для чего он нужен. И не правильно закодировал. Тогда, что в него надо правильно передавать и в каком формате?
Последний раз редактировалось DragonsLord; 12.04.2021 в 09:24.
Я так и предположил, как самый вероятный вариант. Потому что в Аллодах Алония так, как ты говоришь. Сегодня попробую.
По коду обвязки есть мысли? Как передавать внутрь смещение в байте?
Я вот чёт не понял нифига. 3584/7 = 512 байт в таблице для одного сдвига. НАФИГА? Если должно быть 256. 256 - это же все возможные значения, встречающиеся внутри байта. Нахрена ещё столько же в таблице держать непонятно чего? Сказали же чётко, что масковые и спрайтовые сдвиги объединены за счёт изменения формата хранения и вывода.
Последний раз редактировалось DragonsLord; 15.04.2021 в 06:15.
Или не объединены, и там всётаки две таблицы раздельно для маски и спрайта?
DragonsLord(15.04.2021)
С уважением,
Jerri / Red Triangle.
AlexBel(20.03.2022)
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)