Важная информация

User Tag List

Страница 16 из 22 ПерваяПервая ... 121314151617181920 ... ПоследняяПоследняя
Показано с 151 по 160 из 217

Тема: ROBOTZ! Releases

  1. #151
    Activist Аватар для PPC
    Регистрация
    01.03.2011
    Адрес
    Stamford
    Сообщений
    335
    Спасибо Благодарностей отдано 
    46
    Спасибо Благодарностей получено 
    42
    Поблагодарили
    18 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от ivagor Посмотреть сообщение
    Очевидное (тупое) решение - запретить прерывания на время задания стека на исходник спрайта (в КД), т.е. EI будет перед первым POP читающим данные спрайта. Наверно можно как-то изящнее[COLOR="Silver"]
    Тогда приходим к тому, с чем боремся - по паре di/ei на вывод тайла
    На самом деле, я сейчас поглядел на код, и вижу, что при запрещённых прерываниях, можно выкинуть переключения квазидиска туда-сюда на выводе каждого тайла. Там вся бодяга из-за каких-то 2х пар push/pop во внешнем цикле вывода во вьюпорт. На стеке хранится начало тайлмапа и координата тайла в видео ОЗУ. Само переключение - это 40 тактов, плюс push/pop дважды - ещё 48 (на Векторе). Итого 88. Можно в 68 всё уложить, если использовать ячейки памяти. Это 20 тактов экономии на тайл. Но всяко с запрещёнными прерываниями.

    Цитата Сообщение от ivagor Посмотреть сообщение
    Кстати, с адаптером z80 Фролова спековский вариант можно использовать практически дословно, т.к. он может читать из КД через ld r,(hl)
    Тогда надо иметь 2 рендерера и определять, какой адаптер квазидиска установлен. Совместимость со "стандартным" Кишинёвским адаптером я терять не хочу. В общем-то, такое обдумывалось.
    Цитата Сообщение от ivagor Посмотреть сообщение
    Или так: при старте уровня "закешировать" в основном озу по 2 первых байта из всех актуальных для уровня спрайтов
    Кстати не такая уж и плохая идея на самом деле. Изящно. Может получиться. Правда, "актуальных для уровня спрайтов" там 512 только для тайлов (задний и передний планы уровня) плюс спрайты. Легко пара килобайт выходит.

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

  3. #152
    Guru
    Регистрация
    07.08.2008
    Адрес
    г. Уфа
    Сообщений
    7,843
    Спасибо Благодарностей отдано 
    654
    Спасибо Благодарностей получено 
    1,818
    Поблагодарили
    1,044 сообщений
    Mentioned
    22 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от PPC Посмотреть сообщение
    Тогда приходим к тому, с чем боремся - по паре di/ei на вывод тайла
    Да, но длительность нахождения в режиме с запретом прерываний при таком подходе все же значительно меньше, соответственно намного меньше и вероятность пропуска прерывания

  4. #153
    Activist Аватар для PPC
    Регистрация
    01.03.2011
    Адрес
    Stamford
    Сообщений
    335
    Спасибо Благодарностей отдано 
    46
    Спасибо Благодарностей получено 
    42
    Поблагодарили
    18 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    В глобальной картине "мира" роботов, применительно к выплёвыванию во вьюпорт и неравномерностью саунд трека, это будут копейки по сравнению с тем, как сейчас
    В общем, пищи для размышлений достаточно. Если кто-то хочет поучаствовать, глядеть надоть на процедуру с меткой Render: в прикреплённом файле (кодировка 866, ДОС-овская).
    Вложения Вложения
    • Тип файла: 7z SLR.7z (9.6 Кб, Просмотров: 53)

  5. #154
    Guru Аватар для jerri
    Регистрация
    01.03.2005
    Адрес
    Samara
    Сообщений
    4,752
    Спасибо Благодарностей отдано 
    265
    Спасибо Благодарностей получено 
    283
    Поблагодарили
    211 сообщений
    Mentioned
    12 Post(s)
    Tagged
    0 Thread(s)

    Smile

    тогда да
    вот такой вариант

    Код:
    ;hl адрес спрайта+2
    ;bc первая пара спрайтов (а что делать если урезание будет)
    
    ld (ret_sp0),sp
     ld sp,hl
     ex de,hl
     ld (hl),c
     inc h
     ld (hl),b
     ...
     pop bc
     ld (hl),c
     inc h
     ld (hl),b
    
     ld sp,$
    retsp equ $-2
     ret
    С уважением,
    Jerri / Red Triangle.

  6. #155
    Guru
    Регистрация
    07.08.2008
    Адрес
    г. Уфа
    Сообщений
    7,843
    Спасибо Благодарностей отдано 
    654
    Спасибо Благодарностей получено 
    1,818
    Поблагодарили
    1,044 сообщений
    Mentioned
    22 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Если в основной памяти нет места под "кеш" начала спрайтов/тайлов, то можно так: "кеш" (в данном случае скорее резерв) хранить в КД, при выводе спрайта/тайла прерывание не запрещать, а в обработчике прерывания проверять sp. Если sp "неудачный", то восстановить начало спрайта из резерва. Очевидный недостаток - обработчик прерывания немного распухнет и замедлится.

    UPD: Непринципиальная поправка - в данном случае восстанавливать из резерва придется не начало текущего спрайта, а конец предыдущего.
    Последний раз редактировалось ivagor; 21.10.2015 в 18:01. Причина: поправка

  7. #156
    Guru Аватар для jerri
    Регистрация
    01.03.2005
    Адрес
    Samara
    Сообщений
    4,752
    Спасибо Благодарностей отдано 
    265
    Спасибо Благодарностей получено 
    283
    Поблагодарили
    211 сообщений
    Mentioned
    12 Post(s)
    Tagged
    0 Thread(s)

    Cool

    Цитата Сообщение от ivagor Посмотреть сообщение
    Если в основной памяти нет места под "кеш" начала спрайтов/тайлов, то можно так: "кеш" (в данном случае скорее резерв) хранить в КД, при выводе спрайта/тайла прерывание не запрещать, а в обработчике прерывания проверять sp. Если sp "неудачный", то восстановить начало спрайта из резерва. Очевидный недостаток - обработчик прерывания немного распухнет и замедлится.
    не....
    концепт неверный

    со спрайтами работаем по методе Медноногова

    но после каждого спрайта держим 2 байта пустых.
    чтобы при установке при приходе прерывания в этом месте

    Код:
       ld sp,hl
       pop bc
    чтобы испорченная пара байтов не принадлежала спрайту
    С уважением,
    Jerri / Red Triangle.

  8. #157
    Guru
    Регистрация
    07.08.2008
    Адрес
    г. Уфа
    Сообщений
    7,843
    Спасибо Благодарностей отдано 
    654
    Спасибо Благодарностей получено 
    1,818
    Поблагодарили
    1,044 сообщений
    Mentioned
    22 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от jerri Посмотреть сообщение
    после каждого спрайта держим 2 байта пустых.
    так вобще хорошо! Незначительное увеличение сложности расчета адреса спрайта, зато обработчик прерывания можно упростить

  9. #158
    Activist Аватар для PPC
    Регистрация
    01.03.2011
    Адрес
    Stamford
    Сообщений
    335
    Спасибо Благодарностей отдано 
    46
    Спасибо Благодарностей получено 
    42
    Поблагодарили
    18 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    В общем, мне кажется, что проще всего на момент вывода во вьюпорт подменять ISR на специальный вариант, использующий память вместо стека для сохранения вообще всех регистров, затем - выключить квазидиск, переключиться на свой локальный стек. А по концу ISR просто восстанавливать все регистры и режим КД и делать jmp, как выше.
    По окончании вывода во вьюпорт - вернуть на вектор ISR7 нормальную ISR.
    Тогда не надо делать промежутки между спрайтами.
    Как-то так:
    Код:
    di
    shld TheHL
    lda IsLastWord
    jnz   skipRestore
    pop h
    push b
    
    SkipRestore:lxi h,0
    dad sp
    shld TheSP
    lxi h,0
    dad d
    ...
    DB (lxi)
    TheHL: DW 0
    ...
    Можно вместо IsLastWord использовать факт, что тайлы выводятся на совершенно определённые адреса видеопамяти, и анализировать регистр <L>
    Последний раз редактировалось PPC; 21.10.2015 в 19:08.

  10. #159
    Guru
    Регистрация
    07.08.2008
    Адрес
    г. Уфа
    Сообщений
    7,843
    Спасибо Благодарностей отдано 
    654
    Спасибо Благодарностей получено 
    1,818
    Поблагодарили
    1,044 сообщений
    Mentioned
    22 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    PPC, мне кажется ты вчера помнил, а сейчас как-то забыл (работа наверно влияет) про запись в стек текущего адреса при начале обработки прерывания.

  11. #160
    Activist Аватар для PPC
    Регистрация
    01.03.2011
    Адрес
    Stamford
    Сообщений
    335
    Спасибо Благодарностей отдано 
    46
    Спасибо Благодарностей получено 
    42
    Поблагодарили
    18 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от ivagor Посмотреть сообщение
    PPC, мне кажется ты вчера помнил, а сейчас как-то забыл (работа наверно влияет) про запись в стек текущего адреса при начале обработки прерывания.
    Так я вроде запорченный спрайт восстанавливаю. Просто если SP уже переключен, то этого делать не надо. А в качестве индикатора, надо ли восстанавливать стек, можно использовать в ISR, скажем, значение старшего байта <SP>. Или что-то не так?

Страница 16 из 22 ПерваяПервая ... 121314151617181920 ... ПоследняяПоследняя

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

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

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

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