User Tag List

Показано с 1 по 10 из 443

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

Древовидный режим

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

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

    По умолчанию

    Цитата Сообщение от svofski Посмотреть сообщение
    Если ширма -- это просто черная рамка, то достаточно перерисовать столько строк, на сколько прокрутка. Правда в этом случае целесообразность ширмы под вопросом, зачем она? Но если там будет HUD с жизнями, уровнем, счетом итд, это будет не просто стереть две строки. Весь HUD придется перерисовывать целиком каждый раз.
    Вверху и внизу экрана есть по 8 строк, которые появились из-за выбора размера спрайта 24х24 в итоге экран 240х240.
    Ширма нужна для скрытия внизу рисования частей спрайтов при вертикальном скроллинге (они мельтешат).
    Вверху ширма просто закрывает торчащую треть спрайта, т.к. в этой трети не отображается анимация движущихся элементов.
    Сдвиг экрана при вертикальном скроллинге происходит так:
    внизу экрана рисуется строка 8 точек и происходит скроллинг на 8 точек
    итак три раза т.е. 8 х 3 =24 т.е. высота одного блока уровня

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

    Сейчас код ширмы такой:

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


    ; это в программе обработки прерываний
    ;=================== ширма вверху
    call shirm0 ; стираем ширму
    lhld ashirm
    lda scroll
    adi 1
    mov l,a
    shld ashirm
    call shirm1 ; рисуем ширму
    call shirmbon ; дополнительно ещё раз рисуем первые семь столбиков чтобы убрать глюки слева вверху
    ;======================================= ширма снизу
    call shirm0wwt ; стираем ширму
    lhld ashirm2 ;
    lda scroll
    adi 9
    mov l,a
    shld ashirm2 ;
    call shirm1wwt ; рисуем ширму
    ;=======================================

    ;================ Это подпрограммы

    ; стираем ширму
    shirm0: lxi h,0
    shld shirmx+1
    jmp shirm
    ;
    shirm1: lxi h,0FFFFh
    shld shirmx+1
    ; jmp shirm
    ;
    shirm: lxi h,0
    dad sp ; HL=HL+SP
    shld s_sp ; сохраняем значение стека
    ;
    lhld ashirm ; в HL помещаем адрес куда выводить на экран
    lxi d,0100h ; 256
    shirmx: lxi b,0
    mvi a,31
    ;
    shirmc: sphl ; перенос из HL в SP 8
    push b ; запись в экран 16
    push b
    push b
    push b
    dad d ; HL=HL+DE(256) переход на следующий столбик 12
    dcr a ; 8
    jnz shirmc ; 12

    lhld s_sp ; возвращаем значение стека
    sphl
    ret

    ;===================================
    shirm0wwt: lxi h,0
    shld shirmxwwt+1
    jmp shirmwwt
    ;
    shirm1wwt: lxi h,0FFFFh
    shld shirmxwwt+1
    ;jmp shirmwwt
    ;
    shirmwwt: lxi h,0
    dad sp
    shld s_sp
    ;
    lhld ashirm2
    lxi d,0100h
    shirmxwwt: lxi b,0
    mvi a,31 ;32
    ;
    shirmcwwt: sphl
    push b
    push b
    push b
    push b
    dad d
    dcr a
    jnz shirmcwwt
    ;
    lhld s_sp
    sphl
    ;
    ret
    ;======================================================
    shirmbon:
    lxi h,0
    dad sp ; HL=HL+SP
    shld s_sp ; сохраняем значение стека
    ;
    lhld ashirm ; в HL помещаем адрес куда выводить на экран
    lxi d,0100h ; 256
    shirmxbon: lxi b,0ffffh
    mvi a,7
    ;
    shirmcbon: sphl ; перенос из HL в SP
    push b ; запись в экран
    push b
    push b
    push b
    dad d ; HL=HL+DE(256) переход на следующий столбик
    dcr a
    jnz shirmcbon

    lhld s_sp ; возвращаем значение стека
    sphl
    ret
    [свернуть]


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

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

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

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

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

Ваши права

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