User Tag List

Страница 7 из 14 ПерваяПервая ... 34567891011 ... ПоследняяПоследняя
Показано с 61 по 70 из 140

Тема: Реконструкция CGLIB для использования из OMSI Pascal

  1. #61

    Регистрация
    24.08.2007
    Адрес
    Днепропетровская обл.
    Сообщений
    1,681
    Спасибо Благодарностей отдано 
    2,717
    Спасибо Благодарностей получено 
    170
    Поблагодарили
    130 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Можете объяснить, что делает инструкция DEC #0 ?

    Цитата Сообщение от SuperMax Посмотреть сообщение
    вопрос - откуда фиксация на двухцветности ? УКНЦ таки может 16цветов
    В графике? Точно 16, не 8? Или имеется в виду цветность через палитры? Тогда вроде даже больше.

    В старых машинках при минимуме цветов было общепринято юзать графику, которая исполнена одним цветом. Поэтому можно такую графику хранить в виде битов, где 1 - цвет (выбранный из), и 0 - либо прозрачность, либо цвет фона, либо ещё один цвет (выбранный из). Ессно, я не предлагаю это для динамических объектов, только для статики и прочей декоративной графики.

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

  3. #62

    Регистрация
    22.03.2018
    Адрес
    г. Усть-Каменогорск, Казахстан
    Сообщений
    1,410
    Спасибо Благодарностей отдано 
    91
    Спасибо Благодарностей получено 
    178
    Поблагодарили
    138 сообщений
    Mentioned
    21 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Oleg N. Cher Посмотреть сообщение
    Можете объяснить, что делает инструкция DEC #0 ?
    Выше записывается счетчик цикла: MOV R0,3$+2
    БK 0010-01, БК 11М, БК11М+,МС 0511 (УКНЦ)х3, Atari 65XE, Commodore 64, AMIGA 500 (HDD), ZX EVO

  4. #63

    Регистрация
    24.08.2007
    Адрес
    Днепропетровская обл.
    Сообщений
    1,681
    Спасибо Благодарностей отдано 
    2,717
    Спасибо Благодарностей получено 
    170
    Поблагодарили
    130 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Выложил работающую процедуру вывода спрайта, адаптированную для работы из OMSI Pascal:





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

    По ссылке будет храниться вся подсистема с текущим снапом. Вызывается всё из XDev. Там есть батники, по которым можно понять как собирать. Цель, которую я преследую: не только разобраться с графическими примитивами в УКНЦ, но и сделать более лёгкий старт для желающих покодить для УКНЦ (а может и для БК/ДВК) тем людям, которые точно не будут копаться в ассемблере.

    Сейчас стоит задача адаптировать вывод спрайта под произвольную ширину. При этом ширина должна задаваться не в байтах, а в пикселях. Возражения слышал, пусть в байте будут незначащие разряды. Всё равно такой вывод спрайта очень нужен. Помощи буду рад.

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

    BlaireCas(17.03.2020)

  5. #64

    Регистрация
    24.08.2007
    Адрес
    Днепропетровская обл.
    Сообщений
    1,681
    Спасибо Благодарностей отдано 
    2,717
    Спасибо Благодарностей получено 
    170
    Поблагодарили
    130 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Как оказалось, данная процедура вывода спрайта выводит только по OR. Приделать AND и XOR не составит особого труда, но мне бы пригодился вывод с чисткой именно пиксельной, а не знакоместной маской. Т.е. как я себе это представляю: первый и последний байт строки в экранной памяти обрабатывается специальной маской, которая чистит пространство под вывод спрайта нужного размера. Средние строки выводятся просто по MOVB, т.е. замещают собой содержимое экрана. Для упрощения можно минимальную ширину спрайта сделать 8 пикселей (1 байт).

    Есть сочувствующие и желающие мне помочь в этом деле? Чтобы в итоге получилась нормальная универсальная подпрограмма вывода спрайтов. Только без антимонии и философии типа "нафиг оно надо", ок? Это контрпродуктивно.

    Остаётся удивляться, почему у вас нет такой нормальной готовой процедуры вывода спрайтов.
    Последний раз редактировалось Oleg N. Cher; 17.03.2020 в 11:12.

  6. #65

    Регистрация
    22.03.2018
    Адрес
    г. Усть-Каменогорск, Казахстан
    Сообщений
    1,410
    Спасибо Благодарностей отдано 
    91
    Спасибо Благодарностей получено 
    178
    Поблагодарили
    138 сообщений
    Mentioned
    21 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Oleg N. Cher Посмотреть сообщение
    Средние строки выводятся просто по MOVB,
    Какой MOVB???? Ты выводишь слово в первый и второй план сразу.
    Цитата Сообщение от Oleg N. Cher Посмотреть сообщение
    Остаётся удивляться, почему у вас нет такой нормальной готовой процедуры вывода спрайтов.
    Потому что это не нормальная, а извратная процедура.. все делается гораздо проще с помощью маски без всяких затираний.
    БK 0010-01, БК 11М, БК11М+,МС 0511 (УКНЦ)х3, Atari 65XE, Commodore 64, AMIGA 500 (HDD), ZX EVO

  7. #66

    Регистрация
    24.08.2007
    Адрес
    Днепропетровская обл.
    Сообщений
    1,681
    Спасибо Благодарностей отдано 
    2,717
    Спасибо Благодарностей получено 
    170
    Поблагодарили
    130 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Ладно. Формулирую требования к процедуре вывода спрайта:

    • 1. Спрайт четырёхцветный для работы из ЦП. Формат: ширина (в пикселях); высота (в пикселях); данные спрайта

      2. Координаты задаются в пикселях

      3. Длина и ширина спрайта задаётся в пикселях. Если ширина не кратна 8, то незначащие биты данных спрайта при выводе игнорируются: допустим, при ширине 12 [XXXXXXXX][XXXXOOOO]: X заюзанная точка, O игнорируемая.

      4. Экранное место под вывод спрайта длина*ширина чистится. Вывод по XOR, OR и AND не нужен (собственно, нужен, но для него процедура уже есть)

  8. #67

    Регистрация
    22.03.2018
    Адрес
    г. Усть-Каменогорск, Казахстан
    Сообщений
    1,410
    Спасибо Благодарностей отдано 
    91
    Спасибо Благодарностей получено 
    178
    Поблагодарили
    138 сообщений
    Mentioned
    21 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Oleg N. Cher Посмотреть сообщение
    Экранное место под вывод спрайта длина*ширина чистится.
    Когда ты выводишь BISом под спрайтом тоже все чистится, поставь между первым и вторым BISом CLR и проверку на последний байт по ширине (его не стирай)
    Если ты уже вывел спрайт и тебе нужно передвинуть его на одну точку, согласно твоему ТЗ как ты сотрешь предыдущий???
    Последний раз редактировалось S_V_B; 17.03.2020 в 11:54.
    БK 0010-01, БК 11М, БК11М+,МС 0511 (УКНЦ)х3, Atari 65XE, Commodore 64, AMIGA 500 (HDD), ZX EVO

  9. #68

    Регистрация
    24.08.2007
    Адрес
    Днепропетровская обл.
    Сообщений
    1,681
    Спасибо Благодарностей отдано 
    2,717
    Спасибо Благодарностей получено 
    170
    Поблагодарили
    130 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Согласно моему ТЗ, вывод спрайта будет затирать весь прямоугольник под спрайтом, т.е. я его выведу сразу поверх старого. Если был сдвиг на 1 пиксель вправо или влево, то останется затереть только вертикальную линию слева или справа. Но у меня в игре такого вывода не будет.

    Ты видел бегающего чувачка в Laser2Demo.zip? Там 4 спрайта в разных фазах. Просто познакоместный вывод одной фазы спрайта поверх спрайта в другой фазе.

    Код:
      FOR x := -2 TO 30 BY 2 DO
        FOR phase := 1 TO 4 DO
          gr.PTBL(x, 0, phase);
          b.PAUSE(5);
        END;
      END;
    С выводом по OR так не получится. А если перед выводом каждой файзы вначале чистить прямоугольник, то да, будет мерцать. Поэтому чистку надо совместить с выводом.

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

    Цитата Сообщение от S_V_B Посмотреть сообщение
    Когда ты выводишь BISом под спрайтом тоже все чистится
    Разве? А, по-моему, нет. BIS делает наложение данных спрайта по OR с данными, уже находящимися на экране. Тогда как чистка подразумевает их замещение. Т.е. если на экране единицы, а в спрайте нули, то это нули должны затереть единицы.

    Цитата Сообщение от S_V_B Посмотреть сообщение
    поставь между первым и вторым BISом CLR и проверку на последний байт по ширине (его не стирай)
    А что это даст? Судя по моим прикидкам, всё обстоит сложнее. Но я не очень досконально понимаю как оно работает. Всё ещё плаваю.
    Последний раз редактировалось Oleg N. Cher; 17.03.2020 в 12:08.

  10. #69

    Регистрация
    22.03.2018
    Адрес
    г. Усть-Каменогорск, Казахстан
    Сообщений
    1,410
    Спасибо Благодарностей отдано 
    91
    Спасибо Благодарностей получено 
    178
    Поблагодарили
    138 сообщений
    Mentioned
    21 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Oleg N. Cher Посмотреть сообщение
    А что это даст? Судя по моим прикидкам, всё обстоит сложнее.
    До цикла вывода нужно сделать BIC (NOT(от счетчика сдвига)), а после BIC(маску от счетчика сдвига).
    в середине CLR. Проще сразу маску на весь спрайт использовать.

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

    Цитата Сообщение от Oleg N. Cher Посмотреть сообщение
    Разве? А, по-моему, нет. BIS делает наложение данных спрайта по OR с данными, уже находящимися на экране. Тогда как чистка подразумевает их замещение. Т.е. если на экране единицы, а в спрайте нули, то это нули должны затереть единицы.
    Цитата Сообщение от Oleg N. Cher Посмотреть сообщение
    поставь между первым и вторым BISом CLR и проверку на последний байт по ширине (его не стирай)
    см выше.

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

    Цитата Сообщение от Oleg N. Cher Посмотреть сообщение
    Остаётся удивляться, почему у вас нет такой нормальной готовой процедуры вывода спрайтов.
    Такая процедура нужна только под конкретное приложение (для тебя), чтобы карты в стопочку сложить друг на друга
    У меня обычно если спрайты накладываются они должны бабахнуть

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

    В твоем случае карты же не будут двигаться?
    1. сделай ширину кратную байту
    2. выводить только видимую часть карты (смысл накладывать, стирать - делать кучу лишних тормозов).
    Действительно полезная процедура - вывод части спрайта.
    Последний раз редактировалось S_V_B; 17.03.2020 в 12:42.
    БK 0010-01, БК 11М, БК11М+,МС 0511 (УКНЦ)х3, Atari 65XE, Commodore 64, AMIGA 500 (HDD), ZX EVO

  11. #70

    Регистрация
    24.08.2007
    Адрес
    Днепропетровская обл.
    Сообщений
    1,681
    Спасибо Благодарностей отдано 
    2,717
    Спасибо Благодарностей получено 
    170
    Поблагодарили
    130 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    С картами я разберусь, тут бы со спрайтами сперва разобраться. Делать ширину, кратную байту, не с руки. Придётся перепланировать всю графику, получится уже другая игра.

    Вопрос актуален именно в исходной формулировке.

    Про пользу от вывода части спрайта не спорю. Но как - тоже по OR?

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

    Цитата Сообщение от S_V_B Посмотреть сообщение
    Логичнее сделать отдельную процедуру очистки заданного участка, а не пихать ее в вывод спрайта, поскольку она не всегда нужна будет.
    Думал об этом. Но с предварительной чисткой будет сильнее мерцать. А если совместить чистку с выводом линии, то не так.
    Последний раз редактировалось Oleg N. Cher; 17.03.2020 в 13:58.

Страница 7 из 14 ПерваяПервая ... 34567891011 ... ПоследняяПоследняя

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

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

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

Похожие темы

  1. Turbo Pascal для msx/msx2
    от Оззя в разделе MSX
    Ответов: 4
    Последнее: 23.02.2020, 23:59
  2. Ответов: 7
    Последнее: 12.12.2019, 04:12
  3. Turbo Pascal 4 и CP/M 3 для Корвета
    от litwr в разделе Корвет
    Ответов: 10
    Последнее: 26.11.2019, 04:19
  4. Язык PL/M. Возможность использования.
    от James DiGreze в разделе Программирование
    Ответов: 18
    Последнее: 15.01.2006, 12:19

Ваши права

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