User Tag List

Страница 11 из 39 ПерваяПервая ... 789101112131415 ... ПоследняяПоследняя
Показано с 101 по 110 из 443

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

Комбинированный просмотр

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1

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

    По умолчанию

    Исследуя исходники Лебедева, а именно его способ вывода спрайта, заметил что он
    вначале подпрограммы вывода спрайта запрещает прерывания, а в конце снова их разрешает.
    Чем грозит запрет прерываний в основном цикле игры ?

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

  3. #2

    Регистрация
    20.06.2007
    Адрес
    С.-Петербург
    Сообщений
    4,323
    Спасибо Благодарностей отдано 
    1,037
    Спасибо Благодарностей получено 
    820
    Поблагодарили
    491 сообщений
    Mentioned
    26 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

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

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

    metamorpho(20.07.2020)

  4. #3

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

    По умолчанию

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


  5. #4

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

    По умолчанию

    Цитата Сообщение от metamorpho Посмотреть сообщение
    ... Не понимаю почему со стеком не получается.
    А при выводе спрайта с помощью стека, точно прерывания запрещал перед выводом спрайта и разрешал после вывода?

  6. #5

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

    По умолчанию

    Цитата Сообщение от KTSerg Посмотреть сообщение
    А при выводе спрайта с помощью стека, точно прерывания запрещал перед выводом спрайта и разрешал после вывода?
    Да

  7. #6

    Регистрация
    01.03.2005
    Адрес
    Samara
    Сообщений
    4,921
    Спасибо Благодарностей отдано 
    363
    Спасибо Благодарностей получено 
    327
    Поблагодарили
    250 сообщений
    Mentioned
    13 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    metamorpho, а давай попробуем без запретов прерываний методом Медногова


    как ты выводишь графику?
    С уважением,
    Jerri / Red Triangle.

  8. #7

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

    По умолчанию

    Вот вывод графики через стек пробовал - в целом работет но есть артефакты на экране

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



    ; универсальный вывод трети спрайта для затирания пустого места

    SpriteC8zerowww:

    PUSH H
    PUSH D
    PUSH B
    PUSH PSW

    MOV A,H ; сохраняем начало столбик X плоскость (1) куда выводим графику
    STA pozic_xP1
    ADI 20H ; вычисляем следующую плоскость (2) начальный столбец
    STA pozic_xP2 ; сохраняем
    ADI 20H ; вычисляем следующую плоскость (3) начальный столбец
    STA pozic_xP3 ; сохраняем
    MOV D,L
    ;=======================
    LXI H,0 ; ВЫВОД "ПУСТОГО" СПРАЙТА. (СДЕЛАН ОТДЕЛЬНО ПО
    DAD SP ; БЫСТРОМУ АЛГОРИТМУ ДЛЯ ПОВЫШЕНИЯ БЫСТРОДЕЙСТВИЯ).
    SHLD BUFSP
    DI
    LXI B,00h

    LDA pozic_xP1
    MOV H,A ; установка первого столбца X плоскость (1) куда выводим графику
    MOV L,D
    SPHL
    PUSH B
    PUSH B
    PUSH B
    PUSH B
    INR H
    SPHL
    PUSH B
    PUSH B
    PUSH B
    PUSH B
    INR H
    SPHL
    PUSH B
    PUSH B
    PUSH B
    PUSH B

    LDA pozic_xP2
    MOV H,A ; установка первого столбца X плоскость (1) куда выводим графику
    MOV L,D
    SPHL
    PUSH B
    PUSH B
    PUSH B
    PUSH B
    INR H
    SPHL
    PUSH B
    PUSH B
    PUSH B
    PUSH B
    INR H
    SPHL
    PUSH B
    PUSH B
    PUSH B
    PUSH B

    LDA pozic_xP3
    MOV H,A ; установка первого столбца X плоскость (1) куда выводим графику
    MOV L,D
    SPHL
    PUSH B
    PUSH B
    PUSH B
    PUSH B
    INR H
    SPHL
    PUSH B
    PUSH B
    PUSH B
    PUSH B
    INR H
    SPHL
    PUSH B
    PUSH B
    PUSH B
    PUSH B

    LHLD BUFSP
    SPHL
    EI
    POP PSW
    POP B
    POP D
    POP H

    RET
    [свернуть]


    А что это за метод Медногова ?

  9. #8

    Регистрация
    01.03.2005
    Адрес
    Samara
    Сообщений
    4,921
    Спасибо Благодарностей отдано 
    363
    Спасибо Благодарностей получено 
    327
    Поблагодарили
    250 сообщений
    Mentioned
    13 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от metamorpho Посмотреть сообщение
    Вот вывод графики через стек пробовал - в целом работет но есть артефакты на экране

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



    ; универсальный вывод трети спрайта для затирания пустого места

    SpriteC8zerowww:

    PUSH H
    PUSH D
    PUSH B
    PUSH PSW

    MOV A,H ; сохраняем начало столбик X плоскость (1) куда выводим графику
    STA pozic_xP1
    ADI 20H ; вычисляем следующую плоскость (2) начальный столбец
    STA pozic_xP2 ; сохраняем
    ADI 20H ; вычисляем следующую плоскость (3) начальный столбец
    STA pozic_xP3 ; сохраняем
    MOV D,L
    ;=======================
    LXI H,0 ; ВЫВОД "ПУСТОГО" СПРАЙТА. (СДЕЛАН ОТДЕЛЬНО ПО
    DAD SP ; БЫСТРОМУ АЛГОРИТМУ ДЛЯ ПОВЫШЕНИЯ БЫСТРОДЕЙСТВИЯ).
    SHLD BUFSP
    DI
    LXI B,00h

    LDA pozic_xP1
    MOV H,A ; установка первого столбца X плоскость (1) куда выводим графику
    MOV L,D
    SPHL
    PUSH B
    PUSH B
    PUSH B
    PUSH B
    INR H
    SPHL
    PUSH B
    PUSH B
    PUSH B
    PUSH B
    INR H
    SPHL
    PUSH B
    PUSH B
    PUSH B
    PUSH B

    LDA pozic_xP2
    MOV H,A ; установка первого столбца X плоскость (1) куда выводим графику
    MOV L,D
    SPHL
    PUSH B
    PUSH B
    PUSH B
    PUSH B
    INR H
    SPHL
    PUSH B
    PUSH B
    PUSH B
    PUSH B
    INR H
    SPHL
    PUSH B
    PUSH B
    PUSH B
    PUSH B

    LDA pozic_xP3
    MOV H,A ; установка первого столбца X плоскость (1) куда выводим графику
    MOV L,D
    SPHL
    PUSH B
    PUSH B
    PUSH B
    PUSH B
    INR H
    SPHL
    PUSH B
    PUSH B
    PUSH B
    PUSH B
    INR H
    SPHL
    PUSH B
    PUSH B
    PUSH B
    PUSH B

    LHLD BUFSP
    SPHL
    EI
    POP PSW
    POP B
    POP D
    POP H

    RET
    [свернуть]


    А что это за метод Медногова ?
    это у тебя не вывод спрайта, это у тебя стирание спрайта.

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

    прерывание выглядит так
    надеюсь ты умеешь код Z80


    Код:
    ISR
             di
             ex (sp),hl       ;забираем в hl адрес возврата 
             ld  (isr_jmp),hl ;сохраняем его для выхода 
             pop hl            ;восстанавливаем hl
    ;здесь надо сохранить стек
             ld (isr_stek),sp ;это для Z80 у тебя будет чуть по другому
    ;--------------------------
             push bc           ;ВСЕГДА используем BC для рисования спрайтов и прочих элементов
                                  ;восстанавливаем данные на стеке 
    ;скорее всего рисовать через стек на экране не будет очень хорошей идеей.
    
             ld     sp,isr_own_stek 
             push hl,de,bc,af
    
    ;дальше прерываем 
    
            pop af,bc,de,hl
            ld sp,$
    isr_stek equ $-2
            ei 
            jp $
    isr_jmp equ $-2
    при рисовании спрайта всегда использовать BC

    например
    Код:
    ;hl адрес спрайта
    ;de адрес на экране
         
    ;первую пару забираем вот такой комбинацией
              ld c,(hl)
              inc hl
              ld b,(hl)
              inc hl        
              ld sp,hl
              ex de,hl
    
              ld (hl),c
              inc l
              ld (hl),b
              inc l
              pop bc
           
              etc
    С уважением,
    Jerri / Red Triangle.

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

    metamorpho(21.07.2020)

  10. #9

    Регистрация
    20.06.2007
    Адрес
    С.-Петербург
    Сообщений
    4,323
    Спасибо Благодарностей отдано 
    1,037
    Спасибо Благодарностей получено 
    820
    Поблагодарили
    491 сообщений
    Mentioned
    26 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Я попробовал по быстрому вставить в рыбу с гиббоном, у меня рисуется черный прямоугольник. По тексту я тоже навскидку ничего особенного не вижу. Видимо причина артефактов где-то еще.
    Больше игр нет

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

    metamorpho(21.07.2020)

  11. #10

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

    По умолчанию

    Быстрый вывод спрайтов - это хорошо, но я бы в первую очередь попробовал уменьшить моргания спрайта. Код я не видел, но могу предположить, что при движении спрайт сначала стирается полностью, потом полностью рисуется на новом месте. Если наложение спрайтов не планируется (или этот случай можно отрабатывать отдельно), то лучше стирать только там, где спрайта уже нет (или не будет), а там где он будет - не стирать, а сразу выводить.
    Второй момент - у меня по видео создалось впечатление, что спрайты выводятся по плоскостям (сначала одна, потом вторая и т.д.). Так быстрее, но ввиду невозможности сделать двойную буферизацию я бы лучше сделал вывод сразу в три плоскости, это намного уменьшит вероятность заметности этапов прорисовки. Как примерно можно сделать:
    1. Запрещаем прерывания (метод Медноногова тут не поможет, регистров не хватает), сохраняем стек.
    2. Формируем в BC, DE и HL адреса трех плоскостей.
    3. Выводим примерно так (8 точек с 8 цветами): pop psw\ dcx sp\ stax b\ dcr c\ pop psw\ dcx sp\ stax d\ dcr e\ pop psw\ dcx sp\ mov m,a\ dcr l
    Это не самый быстрый вариант в принципе, но самый быстрый с "почти одновременным" выводом в три плоскости.
    4. Возвращаем стек, разрешаем прерывания.

    Если фоновая музыка с AY или ВИ53 не планируется, то в запрете прерываний проблем нет.

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

    metamorpho(21.07.2020)

Страница 11 из 39 ПерваяПервая ... 789101112131415 ... ПоследняяПоследняя

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

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

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

Ваши права

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