User Tag List

Страница 25 из 45 ПерваяПервая ... 212223242526272829 ... ПоследняяПоследняя
Показано с 241 по 250 из 443

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

  1. #241

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

    По умолчанию

    Цитата Сообщение от metamorpho Посмотреть сообщение
    ...
    Ёще хотел уточнить такой вопрос:

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

    Тогда если "время ПР" увеличивается, то уделяемое процессором (между прерываниями) "время ОП" уменьшается ?
    А куда деваться, конечно уменьшается.
    Тут наверное удобнее себе представить временнУю шкалу, которая показывает время выполнения ОП.
    Если прерывания отключены, то просто всё время выполняется ОП.
    Если прерывания включаем, то каждые 20мсек, происходит прерывание, которое отвлекает ресурсы процессора от выполнения ОП на обработку ПР.
    Можно представить себе жуткий случай, когда ПР на столько перегружено задачами, что на его обработку требуется время близкое к 20мсек... Тогда ОП будут доставаться только крохи от ресурсов процессора, между тем как одно ПР закончилось, и началось другое.

    Есть одна очевидная ситуация. Пока выполняется прерывание, новое не произойдёт, т.к. оно аппаратно запрещено. Если прерывание перегружено и выполняется более 20мсек, то это приведёт к потерям (пропускам) прерываний. Типа должно уже начаться новое и сделать что-то очень важное, но предыдущее ещё не закончилось... что-то важное не будет сделано...

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

    metamorpho(03.08.2020)

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

  3. #242

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

    По умолчанию

    Если это так, тогда справедливо к тактам программы вывода спрайта (по методу Jerri) прибавить такты (время) затраченные на обработку-восстановление стека (по методу Jerri) в прерывании ?
    Но как правильно это можно посчитать ?
    Это к тому чтобы точно понять насколько вариант от Jerri быстрее.
    Последний раз редактировалось metamorpho; 03.08.2020 в 10:55.

  4. #243

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

    По умолчанию

    Цитата Сообщение от metamorpho Посмотреть сообщение
    Пытаюсь вникнуть как работает этот метод.
    Похоже я несовсем правильно понял,
    но насколько я понял подпрограмма рисования спрайта (от 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 ?
    interrupt sub routine

    обработка прерывания

    - что имеется ввиду в строке ";здесь прерывание" какое прерывание ?
    имеется ввиду "здесь обрабатываем прерывание"


    - lxi sp,3131h ;
    im_sp: equ $-2 ; !!!???? разве здесь не споткнётся программа, зачем данные стоят между командами кода - ведь это транслируются в код каких-то команд ?
    нет, потому что метка указывает на данные заносимые в регистр стека

    ei
    - jmp 0c3c3h ; jp #c3c3 ; почему выход не по RET, а скачок в экранную память ?
    im_ret equ $-2
    это не скачок в экранную память, здесь подставляется адрес возврата

    и происходит прыжок на продолжение выполнения кода

    - как и куда внедрить этот код ?
    это процедура обработки прерывания.

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

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



    шторка высотой 24 скрывает спрайты уходящие вверх и вниз.
    и часть лабиринта.

    справа ты видишь вариант 1 = мой вариант хранения спрайта - линейный по 3м битпланам
    вариант 2 более быстрый по отрисовке но более геморойный в хранении спрайта.

    и также нацарапана вероятность появления марцания.

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


    Нажмите на изображение для увеличения. 

Название:	IMG_20200803_124604.jpg 
Просмотров:	213 
Размер:	48.9 Кб 
ID:	73206
    С уважением,
    Jerri / Red Triangle.

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

    metamorpho(03.08.2020)

  5. #244

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

    По умолчанию

    Цитата Сообщение от jerri Посмотреть сообщение
    не знаю как Вектор обрабатывает прерывания
    Дело не в векторе, и 8080 и z80 запрещают прерывания в начале их обработки. В случае z80 есть специфика с nmi, но и там до retn или ei прерывания тоже будут запрещены.

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

    metamorpho(03.08.2020)

  6. #245

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

    По умолчанию

    Цитата Сообщение от ivagor Посмотреть сообщение
    Дело не в векторе, и 8080 и z80 запрещают прерывания в начале их обработки. В случае z80 есть специфика с nmi, но и там до retn или ei прерывания тоже будут запрещены.
    Не знаю, в свое время я ориентировался на крупных производителей ПО, в ранних программах прерывания запрещались при обработке прерывания и разрешались при при завершении. Возможно были нюансы
    С уважением,
    Jerri / Red Triangle.

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

    metamorpho(03.08.2020)

  7. #246

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

    По умолчанию

    Jerri, спасибо за подробные объяснения!!
    Я всё больше понимаю что к чему в ассемблере.
    Отдельное спасибо за визуализацию !!

    Метод вывода спрайта, который ты предлагаешь очень хорош.
    И я уже близок к тому чтобы перейти на более быстрый вывод спрайта, но мне нужно точно понять насколько твой вариант быстрее того что я сейчас использую.
    Но я не могу понять как правильно подсчитать.
    Вот твоя программа вывода спрайта состоит по сути из двух частей:
    1-я это вывод спрайта
    2-я это программа, которая встроена в обработку прерываний.
    Одно без другого не будет работать.
    Так вот вопрос как подсчитать сколько времени отнимает 2-я часть программы у процессора ?
    По сути это время нужно будет прибавить к 1-й части и только тогда будет видна полная картина сколько времени (тактов) уходит на отрисовку одного полного спрайта используя твой метод.

  8. #247

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

    По умолчанию

    Цитата Сообщение от metamorpho Посмотреть сообщение
    ...
    Но я не могу понять как правильно подсчитать.
    Вот твоя программа вывода спрайта состоит по сути из двух частей:
    1-я это вывод спрайта
    2-я это программа, которая встроена в обработку прерываний.
    Одно без другого не будет работать.
    Так вот вопрос как подсчитать сколько времени отнимает 2-я часть программы у процессора ?
    По сути это время нужно будет прибавить к 1-й части и только тогда будет видна полная картина сколько времени (тактов) уходит на отрисовку одного полного спрайта используя твой метод.
    Быстрее - медленнее, больше - меньше...
    Всё в мире относительно...
    " Три волосины на голове, это много или мало? А три волосины в тарелке с супом, это много или мало? "

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

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

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

    Сделать два варианта программы. Первый вывод спрайта без использования стека. Второй по обсуждаемой методике, с соответствующим алгоритмом вывода спрайта и обработки прерывания.

    И сравнить за какое время счетчики переполнятся.
    В каком варианте переполнились быстрее, и на сколько быстрее.

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

    metamorpho(03.08.2020)

  9. #248

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

    По умолчанию

    В emu и emu80 можно просто поставить бряки в начало интересующего фрагмента программы и в конец и эмулятор напишет, сколько прошло тактов.

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

    metamorpho(03.08.2020), parallelno(01.07.2022)

  10. #249

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

    По умолчанию

    Цитата Сообщение от metamorpho Посмотреть сообщение
    Jerri, спасибо за подробные объяснения!!
    Я всё больше понимаю что к чему в ассемблере.
    Отдельное спасибо за визуализацию !!

    Метод вывода спрайта, который ты предлагаешь очень хорош.
    И я уже близок к тому чтобы перейти на более быстрый вывод спрайта, но мне нужно точно понять насколько твой вариант быстрее того что я сейчас использую.
    Но я не могу понять как правильно подсчитать.
    Вот твоя программа вывода спрайта состоит по сути из двух частей:
    1-я это вывод спрайта
    2-я это программа, которая встроена в обработку прерываний.
    Одно без другого не будет работать.
    Так вот вопрос как подсчитать сколько времени отнимает 2-я часть программы у процессора ?
    По сути это время нужно будет прибавить к 1-й части и только тогда будет видна полная картина сколько времени (тактов) уходит на отрисовку одного полного спрайта используя твой метод.
    Итак давай сначала.
    Твоя программа обработки прерывания

    4 push. Сохранение регистров.
    4 pop. Восстановление регистров
    Ei
    Ret

    + Компактно
    - нельзя использовать рисование спрайтов через стек.



    Моя программа при сохранении раза в 2-3 дольше.
    Остальное идентично.

    -чуть больше
    +Спрайты рисуем очень быстро через стек

    Скорость рисования спрайтов моей программой ты оценивал на 30-40 процентов быстрее
    Те вместо 3х спрайтов ты нарисуешь 4
    И при этом ещё и музыка играет.


    И кстати поле в визуализации заявлено до 11*10
    С уважением,
    Jerri / Red Triangle.

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

    metamorpho(03.08.2020)

  11. #250

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

    По умолчанию

    Как считаете правильно ли такое вычисление ?

    КР580ВМ80А - каждая команда выполняется за 1…5 машинных циклов, каждый из которых состоит из 3…5 тактов.
    Минимальное время выполнения простых регистровых команд 4 такта.
    Таким образом максимальная производительность процессора оценивается в 625 тысяч оп/c.

    Частота прерываний 50 Гц
    50 раз в секунду процессор прерывает выполнение основной программы
    и выполняет программу обработки прерываний и ресурсы-такты процессора отнимаются от выполнения ОСНОВНОЙ программы.

    Та часть программы (Jerri) которая восстанавливает стек в программе прерываний использует каждое прерывание 284 такта.
    Значит 50х284 такта=14200 тактов в 1 секунду отнимает 2-я часть программы (которая в прерываниях восстанавливает стек)

    Например допустим за 1 секунду 15 раз (по 4 спрайта за раз) основная программа рисует спрайты.
    15 раз х 4 спрайта = 60 раз/с идёт исполнение программы вывода спрайта на экран

    Полный вывод одного спрайта:
    Обычная программа вывода спрайта = 7520 такта (развёрнутый цикл)
    1-я часть программы вывода спрайта Jerri = 5564 такта (развёрнутый цикл)
    Разница 1956 тактов за один раз
    1956 х 60 раз = 117 360 такта - 14200 тактов (использует 2-я часть программы от Jerri)=103160 такта экономия за секунду

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

    Начал внедрение метода Jerri в проект.
    Оформил прерывание и вроде работает всё нормально, но при скроллинге выдаёт неправильную работу
    вывода спрайтов по 8 строк которые печатаются - см. (rom)
    Ничего не изменял кроме программы прерывания.
    Почему могла возникнуть эта проблема ?
    Вот код программы прерывания.


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


    ;================================== обработка прерываний
    INIT:
    xthl ; обмен HL SP
    shld im_ret+1 ; сохраним адрес возврата из прерываний
    pop h
    shld im_hl+1 ; сохраним значение HL при выходе из прерываний
    push psw
    lxi h,2 ;\ вычисляем указатель стека
    dad sp ;/
    shld im_sp+1 ; сохраним указатель стека
    pop psw
    push b ; восстановим данные испорченные стеком

    lxi sp,im_stek ; временный указатель стека для прерываний
    push PSW
    push b
    push d

    ;============================== мои задачи
    ;PUSH H
    ;PUSH B
    ;PUSH D
    ;PUSH PSW

    LDA WRPAL ; ПРОВЕРКА РАЗРЕШЕНИЯ ЗАПИСИ ПАЛИТРЫ В
    ORA A ; ОЗУ ЦВЕТОГЕНЕРАТОРА.
    JZ NWRPAL
    MVI A,88H
    OUT 00H
    feutral: 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
    ;============================================
    ;jmp EXINIT
    ; ОБРАБОТКА ВЫСОТЫ И ДЛИТЕЛЬНОСТИ ЗВУКА ПО НОМЕРУ ПАРАМЕТРА ЗВУКА.
    ;
    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

    ;==================================================

    lda kub_napr
    cpi 3 ; движение вверх скрол вниз
    jnz ruft12
    ;=======затриаем_сверху=4 строки + снизу рисуем 8 строк
    ; стираем ширму сверху
    lxi b,0
    lxi h,0
    dad sp ; HL=HL+SP
    shld s_sp ; сохраняем значение стека
    lda scroll
    sui 7
    mov l,a
    mvi h,0e0h
    mvi a,32
    shirmczz: sphl ; перенос из HL в SP 8
    push b ; запись в экран 16
    push b ; запись в экран 16
    inr h
    dcr a ; 8
    jnz shirmczz ; 12

    ; рисуем снизу
    lxi b,0FFFFh
    lda scroll
    adi 9
    mov l,a
    mvi h,0e1h
    mvi a,31
    shirmc2r: sphl ; перенос из HL в SP 8
    push b ; запись в экран 16
    push b ; запись в экран 16
    push b ; запись в экран 16
    push b ; запись в экран 16
    inr h
    dcr a ; 8
    jnz shirmc2r ; 12

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


    ruft12:
    cpi 4 ; движение вниз скрол вверх затриаем снизу строку 08 + сверху рисуем 8 строк
    jnz ruft14 ;иначе ничего не делаем
    ;=======затриаем_сверху=4 строки + снизу рисуем 8 строк
    ; стираем ширму снизу
    lxi b,0
    lxi h,0
    dad sp ; HL=HL+SP
    shld s_sp ; сохраняем значение стека
    lda scroll
    adi 13
    mov l,a
    mvi h,0e0h
    mvi a,32
    shirmc44: sphl ; перенос из HL в SP 8
    push b ; запись в экран 16
    push b ; запись в экран 16
    inr h
    dcr a ; 8
    jnz shirmc44 ; 12

    ; рисуем сверху
    lxi b,0FFFFh
    lda scroll
    adi 1
    mov l,a
    mvi h,0e1h
    mvi a,31
    shirmc2r44: sphl ; перенос из HL в SP 8
    push b ; запись в экран 16
    push b ; запись в экран 16
    push b ; запись в экран 16
    push b ; запись в экран 16
    inr h
    dcr a ; 8
    jnz shirmc2r44 ; 12

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

    ruft14:
    ; выход из прерываний
    pop d
    pop b
    pop psw
    im_hl: lxi h,$2121
    im_sp: lxi sp,$3131
    ei
    im_ret: jmp $c3c3
    [свернуть]
    Вложения Вложения

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

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

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

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

Ваши права

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