User Tag List

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

Тема: Вот такая весчь:

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

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

    Регистрация
    18.02.2005
    Адрес
    Набережные Челны
    Сообщений
    1,574
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    3
    Поблагодарили
    2 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    Cool

    Сейчас витает у меня одна идея... скорей похожая на бред.
    Смысл такой - самая "дибильная" команда во всех кодерах - это переход на следующий цикл вывода.

    Т.е. Либо оно выглядит так:
    Out (c),X
    Ret - аж целых десять тактов при 12 вывода

    либо
    Out (c),X
    .. - здесь какие то вычисления для перехода, что по определению больше или равно 4 тактам
    Jp (HL) - ещё 4 такта, итого 8

    Вот я долго думал как избавиться - и пришёл к единственному выводу - это просто убрать Ret.

    :-D

    Теперь вывод звука идёт без Ret!

    А для этого программа кодер генерирует готовый Z80 код - т.е. команды типа Out (c),X NOP и прочие для забивки тактами для тактовых промежутков:

    Out (c),d ; подъём динамика
    Nop ; задержка 4 такта, пока не займёт нужное положение
    Out (c),c ; опускание
    Inc hl ; пауза 6 тактов, hl вообще никак не используется - только регистры С и D пользуются популярностью
    Out (с),d ; здесь сразу после подъёма должно идти опускание без паузы
    Out (c),c ; оно и есть
    Nop
    Nop ; пауза 8 тактов на опускание
    Out (c),d ; очередной подъём
    и т.д. - именно такое будет генерировать программа кодер

    Единственное, что меня сдерживает - что этот код будет жутко неоптимальный - около 2-3 секунд проигрывания на всё тело в памяти около 1 метра - зато он будет максимально точный. Кроме того, в отличие от предыдущих версий он имеет возможность (по крайней мере теоретически) распаковываться после загрузки, т.е. фактически полный диск займёт около 20-30 секунд звучания, после каждой отгрузки будет распаковка в память и само проигрывание.

    Ага, чуть не забыл
    Фишка в том, что почти все предыдущие (кроме песни бабы яги) самплы были в постоянным размером цикла, тут нет. Тут раземр цикла непостоянен, зато очень ... быстр что ли.
    Т.е. дискретность следующая:
    Первый вывод в порт, поэтому само собой длина при длительности размера цикла равной 1 равна 12 тактам - Out (c),X
    Длительность цикла при размере 2 - 16 тактов - Out (c),X и Nop
    и далее идёт добавление под два такта -
    3 размер - 18 тактов
    4 - 20
    5 - 22
    6 - 24 и т.д., причём так как генерируется готовый код, то ограничений по размеру цикла нет - хоть 493859836986й размер ((((((-; Огромные промежутки (они возможны только теоретически, практически они просто не встречаются) можно кодировать даже командами циклов типа ld b,12 djnz $
    Последний раз редактировалось GriV; 10.11.2006 в 22:15.
    Биты рулят лучше байтов, байты рулят шустрее!
    View, Звук, Цвет

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

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

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

Ваши права

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