User Tag List

Страница 8 из 39 ПерваяПервая ... 456789101112 ... ПоследняяПоследняя
Показано с 71 по 80 из 443

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

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

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

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

    По умолчанию

    Осмелюсь показать свою идею по заполнению ширмы.
    Сразу скажу, я этим ни когда не пользовался и не протестировал.
    Не призываю это использовать, просто как пример, может на какие мысли подтолкнёт.

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


    сохранение указателя стека
    lxi h,0000h
    dad sp
    shld sohr_sp

    подготовка регистров.
    HL должна читать адрес шиирмы, который где-то вычисляется и хранится в памяти
    lhld adr_shirm - в HL загрузить адрес верхней строки "ширмы" из памяти.
    lxi d,$0100 - в DE загрузить смещение для перехода к следующей колонке "ширмы".
    lxi b,$ffff - в BC загружаем "ширму" или $0000 для её снятия.
    mvi a,$20 - счетчик количества колонок ширмы, если пользоваться циклом

    shirm_scr:
    sphl - адрес ширмы в указатель стека
    push b - две строки ширмы
    push b - две строки ширмы
    dad d - переход на следующую колонку ширмы

    dcr a - счетчик циклов для ширмы
    jnz shirm_scr - на повтор цикла

    восстановление указателя стека
    lhld sohr_sp
    sphl

    если циклом не пользоваться, а просто повторить 32 раза 4 команды загрузки ширмы, то её заполнение ускоряется на 30%.
    [свернуть]


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

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

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

    metamorpho(17.07.2020)

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

  3. #2

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

    По умолчанию

    Отключил одну плоскость. Сделал "ширму". Смотрится более ровно чем в исходном варианте, но попрежнему мельтишит.
    Дальше хочу попробовать уменьшить вывод прибавки графики до 4-х строк (сейчас 8 строк) при скроллинге, выглядеть должно получше.
    Если и это не даст приемлемый вид отображения, то возможно буду пробовать применить советы svofski.



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

    Цитата Сообщение от KTSerg Посмотреть сообщение
    metamorpho, это глобальные изменения и самих спрайтов и алгоритмов их вывода... я много раз косячил, просто начиная вносить глобальные изменения в программы, не создав сначала копию уже рабочего проекта...
    KTSerg, спасибо за совет. Да я тоже это проходил Стараюсь почаще сохранять варианты кода.

  4. #3

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

    По умолчанию

    Пока не могу посмотреть видео, гляну вечером.
    Но мне кажется, что при работе с ширмой важно синхронизировать её формирование с прерыванием.
    При скроллинге вверх, не должно быть проблем с мерцанием, а вот при скроллинге вниз, ширма будет перескакивать в верх экрана, и нужно успевать быстро её удалить, пока "луч" не добрался до вывода верхних строк рабочей области экрана.
    Это моё субъективное мнение.
    Последний раз редактировалось KTSerg; 17.07.2020 в 08:36.

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

    metamorpho(17.07.2020)

  5. #4

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

    По умолчанию

    Не претендую на оптимальность, но вот как написано заполнение ширмы в River Raid: ClearBlinds и DrawBlinds
    https://github.com/svofski/incursion...rsion.asm#L493

    Согласен с KTSerg -- ширма не освобождает от необходимости синхронизации, синхронизация так же важна, как и без нее.

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

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

    metamorpho(17.07.2020)

  6. #5

    Регистрация
    05.01.2009
    Адрес
    Харьков
    Сообщений
    157
    Спасибо Благодарностей отдано 
    24
    Спасибо Благодарностей получено 
    13
    Поблагодарили
    11 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Автор, а вот тебе источник вдохновения для будущего шедевра:

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

    metamorpho(17.07.2020)

  7. #6

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

    По умолчанию

    Цитата Сообщение от x-code Посмотреть сообщение
    Автор, а вот тебе источник вдохновения для будущего шедевра:
    x-code, спасибо!! Именно такого рода геймплей будет мой первый пробный шедевр


    KTSerg, svofski спасибо за советы,
    но я явно не улавливаю тему синхронизации

    Например вот эта мысль: "Если скролл вверх, внизу надо нарисовать новое. Это можно сделать в интервал от прерывания до начала сканирования лучом обновляемой области."

    Как узнать когда начался "интервал от прерывания до начала сканирования лучом обновляемой области" ?
    Может пример какой есть ?

    Ещё как узнать насколько может быть долгой программа обработки прерываний ?
    Последний раз редактировалось metamorpho; 17.07.2020 в 12:33.

  8. #7

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

    По умолчанию

    metamorpho, если не секрет, покажи код подпрограммы прерывания.
    Что у тебя там обрабатывается?
    В игре например палитру можно программировать не в прерывании а один раз при старте программы отдельной процедурой, ну и если есть необходимость специально вызывать процедуру программирования палитры.

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

    metamorpho(17.07.2020)

  9. #8

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

    По умолчанию

    Тут все просто. Каждый кадр занимает ровно 59904 такта. Время исполнения каждой инструкции дано в таблице. Дальше можно просто посчитать.

    Разумеется рассчитывать весь экран -- это очень занудно. Для почти всех случаев достаточно оценочных данных и простеньких замеров. Можно в отладчике смотреть на число тактов, VV по крайней мере показывает текущий такт экрана, это очень удобно. Или можно выводить другой цвет бордюра, как я делал. Сделал какую-то тормозную процедуру, поменял бордюр с черного на красный до и с красного на черный после. Посмотрел на экран, ага, вот столько строк у меня ушло на этот спрайт, или что-то такое.
    Больше игр нет

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

    metamorpho(17.07.2020), parallelno(01.07.2022)

  10. #9

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

    По умолчанию

    Конечно не секрет Этот код практически без изменений я взял у Лебедева

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


    INIT: PUSH H
    PUSH B
    PUSH D
    PUSH PSW
    LDA WRPAL ; ПРОВЕРКА РАЗРЕШЕНИЯ ЗАПИСИ ПАЛИТРЫ В
    ORA A ; ОЗУ ЦВЕТОГЕНЕРАТОРА.
    JZ NWRPAL
    MVI A,88H
    OUT 00H
    LXI H,COLR15 ; ЗАПИСЬ ПАЛИТРЫ.
    LXI D,100FH
    INIT1: MOV A,E
    OUT 02
    MOV A,M
    OUT 0CH
    OUT 0CH
    OUT 0CH
    OUT 0CH
    OUT 0CH
    DCX H
    OUT 0CH
    DCR E
    OUT 0CH
    DCR D
    OUT 0CH
    JNZ INIT1
    NWRPAL: MVI A,8AH ; ПРОВЕРКА НАЖАТИЯ НА ЛЮБУЮ КЛАВИШУ
    OUT 00 ; МАТРИЦЫ КЛАВИАТУРЫ 8*8 (КРОМЕ УС,СС,РУС/ЛАТ).
    XRA A
    OUT 03
    IN 2
    STA STATUS
    MVI A,0FEH ; ПРОВЕРКА НАЖАТИЯ НА КЛАВИШИ ИГРОВОГО РЯДА.
    OUT 03
    IN 02
    STA KEYKOD
    MVI A,88H
    OUT 00
    LDA BORDER ; УСТАНОВКА ЦВЕТА БОРДЮРА.
    ANI 0FH
    OUT 02
    LDA SCROLL ; УСТАНОВКА ВЕРТИКАЛЬНОГО ПОЛОЖЕНИЯ ЭКРАНА.
    OUT 03
    ;
    ; ОБРАБОТКА ВЫСОТЫ И ДЛИТЕЛЬНОСТИ ЗВУКА ПО НОМЕРУ ПАРАМЕТРА ЗВУКА.
    ;
    LDA TON ; ВЗЯТЬ КОД ИЗ БУФЕРА НОМЕРОВ ПАРАМЕТРОВ ЗВУКА.
    ORA A ; НОМЕР ПАРАМЕТРА УСТАНОВЛЕН?
    JZ TSSOUN ; ЕСЛИ НЕТ - ПЕРЕЙТИ НА ПРОВЕРКУ ОТРАБОТКИ ДЛИТ.ЗВУКА.
    DCR A ; УМЕНШИТЬ НОМЕР НА 1, Т.К. МАССИВ НАЧИН. С НУЛЕВОГО.
    ADD A ; УМНОЖИТЬ НОМЕР ПАРАМЕТРОВ ЗВУКА НА 4, ТАК КАК
    ADD A ; ПАРАМЕТРЫ ОДНОГО ЗВУКА ЗАНИМАЮТ 4 БАЙТА.
    MOV E,A ; ПОДГОТОВИТЬ В "DE" СМЕЩЕНИЕ ОТ НАЧАЛА ПАРАМЕТРОВ.
    MVI D,0
    LXI H,BAZTON ; УСТАНОВИТЬ В "HL" АДРЕС НАЧАЛА ПАРАМЕТРОВ ЗВУКА.
    DAD D ; СЛОЖЕНИЕМ С "DE" ПОЛУЧИТЬ В "HL" АДРЕС НУЖНЫХ ПАРАМ.
    MVI A,0B6H ; УСТАНОВИТЬ РЕЖИМ 3 ТАЙМЕРА ДЛЯ КАНАЛА 2, ЗАПИСЬ КОЭФ-
    OUT 08 ; ФИЦИЕНТА ДЕЛЕНИЯ В ДВА БАЙТА - СНАЧАЛА МЛ. ПОТОМ СТ.
    MOV A,M ; ВЗЯТЬ МЛАДШИЙ БАЙТ КОЭФФ. ДЕЛЕНИЯ И
    OUT 09 ; ЗАПИСАТЬ В КАНАЛ 2 ТАЙМЕРА.
    INX H ; ПЕРЕДВИНУТЬ УКАЗАТЕЛЬ НА СЛЕДУЮЩИЙ БАЙТ ПАРАМЕТРОВ.
    MOV A,M ; ВЗЯТЬ СТАРШИЙ БАЙТ КОЭФФ. ДЕЛЕНИЯ И
    OUT 09 ; ЗАПИСАТЬ В КАНАЛ 2 ТАЙМЕРА.
    INX H
    MOV E,M ; ВЗЯТЬ В ПАРУ "DE" ДЛИТЕЛЬНОСТЬ ЗВУЧАНИЯ.
    INX H
    MOV D,M
    XCHG ; И ЗАПИСАТЬ ЕЕ В
    SHLD STSOUN ; СЧЕТЧИК ВРЕМЕНИ ЗВУЧАНИЯ.
    XRA A ; ОБНУЛИТЬ БУФЕР НОМЕРОВ ПАРАМЕТРОВ ЗВУКА (Т.Е. ПАРА-
    STA TON ; МЕТРЫ ВЗЯТЫ И ИХ НЕ НУЖНО СНОВА ОПРЕДЕЛЯТЬ).
    JMP EXINIT ; ВЫЙТИ ИЗ П/П ОБРАБОТКИ СИСТЕМНОГО ПРЕРЫВАНИЯ.
    ;
    TSSOUN: LHLD STSOUN ; ВЗЯТЬ СЧЕТЧИК ВРЕМЕНИ ЗВУЧАНИЯ И ПРОВЕРИТЬ,
    MOV A,H ; РАВЕН ЛИ ОН НУЛЮ (ВРЕМЯ ЗВУЧАНИЯ КОНЧИЛОСЬ)?
    ORA L
    JZ OFSOUN ; ЕСЛИ КОНЧИЛОСЬ - ВЫКЛЮЧИТЬ ЗВУК!
    DCX H ; УМЕНЬШИТЬ СЧЕТЧИК.
    SHLD STSOUN
    JMP EXINIT ; И ВЫЙТИ ИЗ П/П ПРЕРЫВАНИЯ.
    OFSOUN: MVI A,0B6H ; ВЫКЛЮЧИТЬ КАНАЛ 2 ТАЙМЕРА ПУТЕМ ЗАПИСИ В РЕГ.
    OUT 08 ; РЕЖИМА УПР. СЛОВА ДЛЯ ЭТОГО КАНАЛА БЕЗ ПАРАМ.
    EXINIT: XRA A
    STA WRPAL
    POP PSW
    POP D
    POP B
    POP H
    EI
    RET
    [свернуть]
    Последний раз редактировалось metamorpho; 17.07.2020 в 15:43.

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

    KTSerg(18.07.2020)

  11. #10

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

    По умолчанию

    Цитата Сообщение от metamorpho Посмотреть сообщение
    Конечно не секрет Этот код практически без изменений я взял у Лебедева
    ...
    metamorpho, запусти вот это.
    К твоему прерыванию добавил ширму и измерение цвета бордюра по методике svofski, для визуализации момента, когда заканчивается обработка прерывания.
    когда цвет бордюра красный - выполняется прерывание, когда прерывание заканчивается - цвет меняется на зелёный.
    Пробовал ширму в 8 строк, без музыки прерывание заканчивается точно с началом вывода рабочей области экрана, если ширму расположить внизу экрана, должно быть нормально, ведь стираться она успевает, а установка ширмы внизу экрана - луч до неё не успевает добежать.
    По центру экрана ширма. Мусор - визуализация скролинга.
    Вложения Вложения

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

    metamorpho(17.07.2020)

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

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

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

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

Ваши права

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