User Tag List

Страница 24 из 45 ПерваяПервая ... 202122232425262728 ... ПоследняяПоследняя
Показано с 231 по 240 из 443

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

  1. #231

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

    По умолчанию

    Цитата Сообщение от jerri Посмотреть сообщение
    я смотрел в EMU
    запускаешь Binorum_13
    нажимаешь ВЛЕВО
    нажимаешь и держишь ВНИЗ
    наслаждаешься
    Ах это. Это не зависание, это замирание - суперспособность при движении героя по вертикали

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

    Цитата Сообщение от metamorpho Посмотреть сообщение
    ...
    Например медуза имеет направление вправо и влево. Смещение идёт на 2 пикселя.
    4 кадра 32х24 вправо и 4 кадра 32х2 4 влево.
    Для плавности нужно будет 8 кадров, но пока и на 4-х кадрах неплохая плавность.
    я уже сообразил, что 4, а не 7.

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

    Цитата Сообщение от metamorpho Посмотреть сообщение
    ... KTSerg, а ты можешь выложить код вывода спрайта, который ты написал по методу jerri.
    Я сравню его с моим по тактам. ...
    Там у меня жуткий формат спрайта, и склонность к мерцанию. А скорость из-за развёрнутости алгоритма, практически 4 строки один цикл. И плюс экономия на переходах между планами, т.к. за один заход заполняется две строки, только потом переход на следующий план. Из-за этого мерцание, т.к. изменению подвергается слишком большая площадь спрайта.
    Так-что, можно сказать не юзабельный вариант вывода спрайта.

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

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

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

    Код:
    А - для первого плана, D - для второго, E - для третьего.
    Тогда заполнение спрайта:
    mov h,a  ; первый план
    pop b
    mov m,c
    mov h,d  ; второй план
    mov m,b
    pop b
    mov h,e  ; третий план
    mov m,c
    inr l        ; след. строка
    mov m,b
    pop b
    mov h,d   ; второй план
    mov m,c
    mov h,a   ; первый план
    mov m,b
    inr l        ; след. строка
    pop b
    mov m,c
    ...
    и т.д.
    [свернуть]

    если развернуть, чтобы циклы не проверять, т.к. свободных переменных нет, то ... надо проверить...

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

    metamorpho(03.08.2020)

  2. #232

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

    По умолчанию

    Цитата Сообщение от KTSerg Посмотреть сообщение
    Там у меня жуткий формат спрайта, и склонность к мерцанию. А скорость из-за развёрнутости алгоритма, практически 4 строки один цикл. И плюс экономия на переходах между планами, т.к. за один заход заполняется две строки, только потом переход на следующий план. Из-за этого мерцание, т.к. изменению подвергается слишком большая площадь спрайта.
    Так-что, можно сказать не юзабельный вариант вывода спрайта.
    зато быстрый и эффективный

    рисовать спрайты надо также как идет луч
    горизонтально
    вертикально - всегда будет теаринг.

    кстати если сделать асинхронное освежение, то мерцания может и не быть.

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

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

    Код:
    А - для первого плана, D - для второго, E - для третьего.
    Тогда заполнение спрайта:
    mov h,a  ; первый план
    pop b
    mov m,c
    mov h,d  ; второй план
    mov m,b
    pop b
    mov h,e  ; третий план
    mov m,c
    inr l        ; след. строка
    mov m,b
    pop b
    mov h,d   ; второй план
    mov m,c
    mov h,a   ; первый план
    mov m,b
    inr l        ; след. строка
    pop b
    mov m,c
    ...
    и т.д.
    [свернуть]

    если развернуть, чтобы циклы не проверять, т.к. свободных переменных нет, то ... надо проверить...
    только при переходе к следующему ряду надо все сразу прибавлять.
    плюс 3 inr
    С уважением,
    Jerri / Red Triangle.

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

    metamorpho(03.08.2020)

  3. #233

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

    По умолчанию

    Перевёл пример кода (с Z80 на Векторовский ассемблер) вывода спрайта от Jerri.
    Сравнил по тактам (если я всё правильно посчитал конечно) свой вариант вывода спрайта и вариант от Jerri.
    На вывод 9-и байт + возврат на начальную плоскость + переход на следующую строку
    мой вариант тратит 384 такта
    вариант от Jerri 224 такта
    разница 160 тактов

    Итого на вывод спрайта 24х24 точки (учитавая только чистый вывод 9 байтов + возврат на 1-ю плоскость + переход на следующую строку)
    мой вариант тратит 3072 такта
    вариант от Jerri 1792 такта
    разница 1280 тактов

    1280 тактов похоже это неплохой рывок по скорости.

    Но правильно ли я понял (из слов KTSerg) что вариант от Jerri будет мерцать ?
    Последний раз редактировалось metamorpho; 02.08.2020 в 23:30.

  4. #234

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

    По умолчанию

    Цитата Сообщение от metamorpho Посмотреть сообщение
    ...
    Но правильно ли я понял (из слов KTSerg) что вариант от Jerri будет мерцать ?
    Нет, я говорил о своей модификации этого метода.
    Моя версия склонна к мерцанию, и именно моя версия на практике не юзабельна.
    Быстрая версия алгоритма, но не юзабельная.

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

    metamorpho(03.08.2020)

  5. #235

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

    По умолчанию

    Цитата Сообщение от metamorpho Посмотреть сообщение
    вариант от Jerri 224 такта
    Имхо правильнее все же считать для вывода "блока" из двух строк, я насчитал 464 такта (для ширины 24 точки). Можно немного ускорить переходы между плоскостями, будет 440 тактов. Ну и можно развернуть, тогда не только убираем команды цикла, но и еще чуть ускоряем переходы между плоскостями, должно получится 412 тактов на две строки, но скорее всего понадобится отдельная процедура для частичного вывода спрайтов.
    Последний раз редактировалось ivagor; 03.08.2020 в 06:30.

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

    metamorpho(03.08.2020)

  6. #236

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

    По умолчанию

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

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


    ;процедура обработки прерывания с восстановлением поврежденных данных
    ;при доступе к стеку
    ;регистровая пара для доступа к стеку BC
    im_routine
    di ; di
    ;сохраняем HL и забираем адрес возврата из прерывания
    xthl ; ex (sp),hl
    ;сохраняем его
    shld im_ret ; ld (im_ret),hl
    ;забираем HL
    pop h ; pop hl
    ;сохраняем его чтобы не потерять при манипуляциях с SP
    shld im_hl ; ld (im_hl),hl
    ;сохраняем флаги
    push psw ; push af
    ;вычисляем корректный адрес стека программы
    lxi h,2 ; ld hl,2
    dad sp ; add hl,sp
    ;сохраняем стек программы
    shld im_sp ; ld (im_sp),hl
    pop psw ; pop af
    ;восстановлением поврежденые данные регистром BC
    push b ; push bc

    ;задаем стек прерывания
    lxi sp,im_stek ; ld sp,im_stek
    ;сохраняем все регистры кроме HL
    push psw ; push af,bc,de
    push b
    push d
    ;-----------------------------
    ;ISR
    ;здесь прерывание
    ;-----------------------------
    ;восстанавливаем регистры
    pop d ; pop de,bc,af
    pop b
    pop psw
    ;восстанавливаем HL
    lxi h,2121h ; ld hl,#2121

    im_hl: equ $-2
    ;восстанавливаем стек
    lxi sp,3131h ; ld sp,#3131
    im_sp: equ $-2
    ei ;ei
    ;возвращаемся из обработки прерывания
    jmp 0c3c3h ; jp #c3c3
    im_ret: equ $-2
    [свернуть]


    В этом коде мне не понятны следующие моменты:
    - разве правильно во время прерывания сделать запрет командой DI ?
    - что такое ISR ?
    - что имеется ввиду в строке ";здесь прерывание" какое прерывание ?
    - lxi sp,3131h ;
    im_sp: equ $-2 ; !!!???? разве здесь не споткнётся программа, зачем данные стоят между командами кода - ведь это транслируются в код каких-то команд ?
    ei
    - jmp 0c3c3h ; jp #c3c3 ; почему выход не по RET, а скачок в экранную память ?
    - как и куда внедрить этот код ?

  7. #237

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

    По умолчанию

    Цитата Сообщение от metamorpho Посмотреть сообщение
    - разве правильно во время прерывания сделать запрет командой DI ?
    Это лишняя команда, т.к. процессор запрещает прерывание при начале его обработки.

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

    Цитата Сообщение от metamorpho Посмотреть сообщение
    im_sp: equ $-2
    Дело вкуса, я в таких случаях делаю
    im_sp: lxi sp,3131h
    А обращение будет
    shld im_sp+1

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

    metamorpho(03.08.2020)

  8. #238

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

    По умолчанию

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

    2121 и 3131 - это просто от фанаря, т.к. в начале алгоритма они всегда заменятся на конкретные значения.
    Т.к. состояние стека восстанавливается после перехода к подпрограмме прерывания, то выход из прерываний по JMP значение которого было вытянуто из стека при его восстановлении.
    ISR - это место где пользователь вставляет свою обработку прерывания.
    Т.к. приведённый алгоритм, это только обёртка (восстанавливающая стек) для настоящей подпрограммы прерывания.

    Скинь мне в личку свой е-майл. Кину тебе исходник своей тестилки вывода спрайтов. Там этот алгоритм прерывания реализован.

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

    metamorpho(03.08.2020)

  9. #239

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

    По умолчанию

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

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

    metamorpho(03.08.2020)

  10. #240

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

    По умолчанию

    ivagor, KTSerg спасибо!!
    Код становится яснее

    KTSerg почту скинул см. личку

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

    Ёще хотел уточнить такой вопрос:

    допустим
    Время ПР - это время выполнения программы обработки прерываний
    Время ОП - это время выполнения основной программы

    Тогда если "время ПР" увеличивается, то уделяемое процессором (между прерываниями) "время ОП" уменьшается ?
    Последний раз редактировалось metamorpho; 03.08.2020 в 09:50.

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

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

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

Эту тему просматривают: 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

Ваши права

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