User Tag List

Страница 13 из 45 ПерваяПервая ... 91011121314151617 ... ПоследняяПоследняя
Показано с 121 по 130 из 443

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

  1. #121

    Регистрация
    24.08.2012
    Адрес
    г. Волжский
    Сообщений
    458
    Спасибо Благодарностей отдано 
    792
    Спасибо Благодарностей получено 
    268
    Поблагодарили
    103 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    ivagor, svofski, KTSerg и всем другим спасибо за советы, идеи и поддержку !!

    Цитата Сообщение от ivagor Посмотреть сообщение
    Все же процедура только для статичных или и для подвижных объектов (ГГ)?
    У меня три разных подпрограммы вывода спрайтов.
    1-я рисует те спрайты, которые не движуться (3 столбика по 24 байта)
    2-я рисует те спрайты, которые движуться (4 столбика по 24 байта)
    3-я рисует по частям (3 столбика по 8 байтов) спрайты (верхнюю, среднюю и нижнюю часть), которые выходят из под ширмы (высотой 8 точек) при вертикальном скроллинге

    Реализовал вариант вывода спрайта "сразу в три плоскости" со стеком.
    Пришлось переписывать формат сохраняемого файла моего
    конвертора графики с РС на формат .db 1,2,3 для вставки в ассемблер.
    Но это того стоило, это отличная идея от ivagor - оно реально НЕМОРГАЕТ !!!!
    В приложении (rom) - смотреть только без движения т.к. реализовал только одну
    подпрограмму когда спрайты не движуться.

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

    В связи с этим возник второй основополагающий момент - звук.
    Т.к. использование стека (запрет DI) может повлиять на использование звука,
    то мне нужно сразу со звуком понять, на что можно расчитывать и соответственно писать программу вывода графики "сразу в три плоскости" или через стек или без него.

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

    Также мне нужно будет выводить звуковые эффекты.
    Я так понял есть два варианта:
    - первый сделать это через программу обработки прерываний
    - второй сделать это в основном цикле программы

    Какой вариант предпочтительней ? Какие плюсы и минусы этих вариантов ?

    Я так понял звук можно формировать через порт 01, а также через ВИ53.
    Какие преимущества и недостатки есть у этих способов ?
    Вложения Вложения
    • Тип файла: 7z Binorum.7z (3.5 Кб, Просмотров: 132)

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

  3. #122

    Регистрация
    22.02.2014
    Адрес
    г. Курган
    Сообщений
    1,706
    Спасибо Благодарностей отдано 
    275
    Спасибо Благодарностей получено 
    318
    Поблагодарили
    222 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Нужно ещё уточнить один момент...
    В прерываниях не должно быть вызова подпрограмм, которые выводят на экран спрайты.
    В прерывании должна быть только работа с ширмой и программирование скроллинга (про опрос клавы и музыке пока речь не идёт, говорим о графике).

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


    С моей (субъективной) точки зрения, основной цикл программы и прерывание должны взаимодействовать следующим образом:
    Основной цикл программы крутится, можно даже ждать прерывания, парой ei, hlt.
    Сразу после прерывания проверяем состояние клавы.
    Если движения нет, то обрабатываем меняющиеся объекты (сверху вниз, убегая от луча).
    Если есть движение по вертикали, то ещё и выводим под ширмой новые элементы лабиринта, после чего присваиваем некой переменной значение, что стены готовы. И уходим на ожидание прерывания.
    В прерывании проверяем значение переменной, которая говорит, что стены готовы, переставляем ширму и присваиваем новое значение для скроллинга (не забывая сбросить значение переменной, что стены готовы).

    С моей точки зрения, в таком случае, артефактов должно быть минимум. Особенно если ещё и оптимизировать вывод спрайтов подвижных объектов.
    [свернуть]

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

    metamorpho(22.07.2020)

  4. #123

    Регистрация
    07.08.2008
    Адрес
    г. Уфа
    Сообщений
    8,390
    Спасибо Благодарностей отдано 
    763
    Спасибо Благодарностей получено 
    2,367
    Поблагодарили
    1,317 сообщений
    Mentioned
    38 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Как я понял в последнем текущем варианте "одновременный" вывод используется только для неподвижных спрайтов и ГГ стоя на месте теперь не моргает. При движении по вертикали не моргает, предположительно из-за фактической синхронизации с разверткой и убеганием от луча. А вот при движении по горизонтали артефакты заметны. Ну и кирпичи портятся при движении по вертикали.
    Если двигаться будет только ГГ, то можно просто привязать его вывод к развертке (до луча или после) и делать это самым быстрым способом не обращая внимания на порядок вывода байтов. Но если планируются и другие движущиеся объекты, то все они от луча явно не убегут и надо переходить на "одновременный" или почти одновременный вывод в три плоскости. Из почти одновременных один вариант я упоминал - выводить фрагментами 8x8 точек (8 байт одной плоскости, потом второй и третьей). Еще один вариант - выводить построчно, три байта одной плоскости, потом второй и третьей. Причем этот вывод удобнее и быстрее сделать змейкой:
    Первая строка: первая плоскость направо, вторая налево, третья направо
    Вторая строка: третья плоскость налево, вторая направо, первая налево
    Т.е. две строки образуют "элементарную единицу" вывода. Справедливости ради - любой вывод будет быстрее змейкой, не только построчный. Плюс "почти одновременных" вариантов - там можно или метод Медноногова использовать или просто не использовать стек и в обоих этих случаях отказаться от запрета прерываний.

    Насчет звука - если использовать ВИ53 в режиме 3 и стартовать/глушить звуки по прерываниям, то легко получить одинаковую длительность звуков и минимальную загрузку процессора. Но звуки будут сравнительно простые.

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

    metamorpho(22.07.2020)

  5. #124

    Регистрация
    01.03.2005
    Адрес
    Samara
    Сообщений
    4,866
    Спасибо Благодарностей отдано 
    328
    Спасибо Благодарностей получено 
    310
    Поблагодарили
    234 сообщений
    Mentioned
    12 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    metamorpho, метод Медноногова позволяет выводить спрайты без запрета прерываний. Он для этого и делался.
    поэтому я его тебе и рекомендую.
    С уважением,
    Jerri / Red Triangle.

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

    metamorpho(22.07.2020)

  6. #125

    Регистрация
    24.08.2012
    Адрес
    г. Волжский
    Сообщений
    458
    Спасибо Благодарностей отдано 
    792
    Спасибо Благодарностей получено 
    268
    Поблагодарили
    103 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    На данный момент определился что не буду использовать стек совместно с DI, т.к. это приводит к глюкам с ширмой, а также может помешать реализации звуков через программу обработки прерывания.

    Написал свой вариант вывода спрайта по методу ivagor "сразу в 3 плоскости" без использования стека и без DI.
    В приложении (rom).
    Результат вроде неплохой. Очень редко появляется моргание.
    По моим подсчётам (если я правильно подсчитал) уступает варианту со стеком на 20 тактов по выводу одной строки.
    Вот код вывода одной строки

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


    DCR L
    LDA pozic_xP1
    MOV H,A ; адрес плоскости 1
    LDAX D
    MOV M,A
    INX D
    DAD B ; адрес плоскости 2
    LDAX D
    MOV M,A
    INX D
    DAD B ; адрес плоскости 3
    LDAX D
    MOV M,A
    INX D
    [свернуть]
    Вложения Вложения

  7. #126

    Регистрация
    07.08.2008
    Адрес
    г. Уфа
    Сообщений
    8,390
    Спасибо Благодарностей отдано 
    763
    Спасибо Благодарностей получено 
    2,367
    Поблагодарили
    1,317 сообщений
    Mentioned
    38 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    В Binorium_7 морганий не вижу, может они и есть, но получается очень редкие, с этим вполне можно жить.
    Есть возможность небольшого ускорения за счет перехода к змейке по плоскостям. Условно делим картинку на блоки 8x2 точки
    1. Вывод первых 8 точек как сейчас, только добавляем lxi b,8192
    2. Вывод вторых 8 точек в обратном направлении по плоскостям, добавляем lxi b,-8192
    lda+mov убираем. lxi - 12 тактов и 3 байта; lda+mov - 24 такта и 4 байта, т.е. выигрыш 12 тактов и 1 байт на каждых 8 точках.

    Вариант одновременного вывода со стеком можно разогнать до скорости "обычного" вывода со стеком, если интерливить спрайты по 2 штуки, т.е. хранить их с шагом в 2 байта и вставлять в промежуток другой спрайт. При этом можно будет избавиться от трех dcx sp на 8 точек, т.е. -24 такта. Это просто для полноты картины, не агитирую за этот вариант, т.к. тут надо прерывания запрещать.
    Последний раз редактировалось ivagor; 22.07.2020 в 06:03.

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

    metamorpho(22.07.2020)

  8. #127

    Регистрация
    22.02.2014
    Адрес
    г. Курган
    Сообщений
    1,706
    Спасибо Благодарностей отдано 
    275
    Спасибо Благодарностей получено 
    318
    Поблагодарили
    222 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

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

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

    По поводу Binorium_7.
    При старте персонаж из стены выскакивает?
    А что происходит при перезапуске программы (БЛК+СБР) ? Или это только в эмуляторе emu (не успел остальные проверить) что-то с палитрой странное?

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

    metamorpho(22.07.2020)

  9. #128

    Регистрация
    07.08.2008
    Адрес
    г. Уфа
    Сообщений
    8,390
    Спасибо Благодарностей отдано 
    763
    Спасибо Благодарностей получено 
    2,367
    Поблагодарили
    1,317 сообщений
    Mentioned
    38 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    В Binorium_7 есть небольшая шероховатость - при скролле вверх виден паразитный штрих справа вверху.

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

    metamorpho(22.07.2020)

  10. #129

    Регистрация
    22.02.2014
    Адрес
    г. Курган
    Сообщений
    1,706
    Спасибо Благодарностей отдано 
    275
    Спасибо Благодарностей получено 
    318
    Поблагодарили
    222 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от ivagor Посмотреть сообщение
    В Binorium_7 есть небольшая шероховатость - при скролле вверх виден паразитный штрих справа вверху.
    Мне вот ещё интересен один момент...
    На сколько я понимаю, сейчас используется две ширмы, одна вверху и одна внизу... не будем обращать внимание на то, что это по сути одна сплошная ширма...
    Мне вот, что интересно, при смещении, сначала удаляются обе ширмы, а потом они обе восстанавливаются уже на новом месте... (это ведь лишние затраты ресурсов).
    Или всё-таки удаляется только одна, а потом с другой стороны выставляется новая? (что экономит затраты на ширму в два раза)

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

    metamorpho(22.07.2020)

  11. #130

    Регистрация
    07.08.2008
    Адрес
    г. Уфа
    Сообщений
    8,390
    Спасибо Благодарностей отдано 
    763
    Спасибо Благодарностей получено 
    2,367
    Поблагодарили
    1,317 сообщений
    Mentioned
    38 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Подробно операции с ширмой не смотрел, но кое-что там меня смутило. Совершенно точно надо объединить стирание ширмы в старой позиции и рисование ее в новой. dad d для перехода к соседнему столбцу не нужен, меняем на inr h. Теперь есть две регистровые пары, в одну заносим 0000 для стирания, в другую - FFFF для рисования. И подряд 8 push (половина - B и половина - D). Грубо это будет (8*16+8)*32=4352 такта.

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

    metamorpho(22.07.2020)

Страница 13 из 45 ПерваяПервая ... 91011121314151617 ... ПоследняяПоследняя

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

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

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

Похожие темы

  1. Бейсики для Вектора-06Ц и клонов
    от ivagor в разделе Вектор
    Ответов: 696
    Последнее: 25.10.2025, 02:34
  2. Картотека ПО для Вектора-06ц
    от svofski в разделе Вектор
    Ответов: 719
    Последнее: 04.04.2024, 11:13
  3. Восстановление Вектора-06ц
    от Daniil Chislov 86 в разделе Вектор
    Ответов: 100
    Последнее: 11.03.2021, 00:23
  4. Ответов: 198
    Последнее: 26.04.2020, 13:05
  5. Ответов: 58
    Последнее: 06.07.2019, 23:56

Ваши права

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