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

User Tag List

Страница 1 из 2 12 ПоследняяПоследняя
Показано с 1 по 10 из 19

Тема: AY и такты. Предельные возможности.

  1. #1
    Master
    Регистрация
    27.01.2005
    Сообщений
    895
    Спасибо Благодарностей отдано 
    25
    Спасибо Благодарностей получено 
    176
    Поблагодарили
    142 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию AY и такты. Предельные возможности.

    На последнем CSP возникла дискуссия по поводу того, а можно ли сделать плеер для в 300 тактов. К сожалению, мои надежды на лучшее разбились. В 300 тактов никак не укладывается. Поделюсь своими мыслями, если кому интересно.

    Как известно, AY представлен в виде двух портов - FFFD (регистр адреса) и BFFD - (регистр данных).

    Как бы я не извращался - самый быстрый вывод такой:

    ld c,#FD ; один раз, 7 тактов
    ;-----------------
    ; Вывод в один регистр
    ld b,#FF ; BC = FFFD ; 7
    ld A, <номер регистра> ; 7
    out (c),a ; 12
    ld b,#BF ; BC = BFFD ; 7
    ld A, <данные, записываемые в регистр> ; 7
    out (c),a ; 12
    ;-----------------------------------ВСЕГО: 52 такта

    То есть для записи одного регистра AY меньше 52 тактов не получишь (если кто знает как - то прошу поправить меня).

    Для воспроизведения одного канала, надо как минимум запись в 2 регистра управления частотой. То есть 104 такта.

    То есть имеем следующие предельные (минимальные) параметры вывода звука:

    Полное управление AY (11 регистров, без управления огибающей): 52*11 = 572 такта.

    Управление тремя каналами. (6 регистров, только частота без громкости и шума): 52*6 = 312 тактов.

    Управление двумя каналами. (4 регистра, только частота без громкости и шума): 52*4 = 208 тактов.

    Управление одним каналом + шум. (4 регистра, частота и шум ): 52*4 = 208 тактов.


    В принципе, два последних варианта вполне укладываются в 300 тактов. Только музыканты будут не в восторге)


    Недостатки такого способа вывода звука очевидны: очень большой объем кода. Ну и конвертор писать надо.

    Достоинства тоже есть - минимально возможно время и постоянное время выполнения.
    Последний раз редактировалось SfS; 01.08.2017 в 06:03.

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

  3. #2
    Master Аватар для DenisGrachev
    Регистрация
    15.04.2011
    Адрес
    г. Новосибирск
    Сообщений
    741
    Спасибо Благодарностей отдано 
    39
    Спасибо Благодарностей получено 
    211
    Поблагодарили
    44 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Самое главное зачем? Ради пары линии которые никто не увидет на реальной машине? )
    Какой-нибудь самый кривой PSG плеер около 1200 тактов, что за проблема?

    Не вникал, про АУ ничего не знаю почти, наверняка у тебя есть неучтённые моменты. Просто в лоб:

    ld c,#FD ; один раз, 7 тактов
    ld de,#BFFF; 10 тактов

    ;-----------------
    ; Вывод в один регистр
    ld hl, <номер регистра + данные, записываемые в регистр>;10
    ld b,e ; BC = FFFD ; 4
    out (c),l ; 12
    ld b,d ; BC = BFFD ; 4
    out (c),h ; 12
    ;-----------------------------------ВСЕГО: 42 такта
    Последний раз редактировалось DenisGrachev; 01.08.2017 в 07:13.

  4. #3
    Master
    Регистрация
    27.01.2005
    Сообщений
    895
    Спасибо Благодарностей отдано 
    25
    Спасибо Благодарностей получено 
    176
    Поблагодарили
    142 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Да. Давно я не кодил на спеке) 42 - уже куда лучше)


    Зачем? А чтобы было

    Дискуссия началась с того, что одному товарищу надо было в деме уложиться в 300 тактов.



    Полное управление AY (11 регистров, без управления огибающей): 42*11 = 462 такта.

    Управление тремя каналами. (6 регистров, только частота без громкости и шума): 42*6 = 252 такта. (УКЛАДЫВАЕМСЯ в 300 тактов с запасом! Два канала + шум или три канала без шума)

  5. #4
    Master Аватар для DenisGrachev
    Регистрация
    15.04.2011
    Адрес
    г. Новосибирск
    Сообщений
    741
    Спасибо Благодарностей отдано 
    39
    Спасибо Благодарностей получено 
    211
    Поблагодарили
    44 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от SfS Посмотреть сообщение
    Да. Давно я не кодил на спеке) 42 - уже куда лучше)

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

    Ну да ладно, спортивный интерес тоже хорошо!

  6. #5
    Master
    Регистрация
    27.01.2005
    Сообщений
    895
    Спасибо Благодарностей отдано 
    25
    Спасибо Благодарностей получено 
    176
    Поблагодарили
    142 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Другой вопрос, что при выводе 6 регистров за кадр, 1 секунда звука будет занимать 9*6*50 = 2700 байт.
    То есть на страничку войдет всего 6 секунд такой "музыки")

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

    Насчет линии и товарища.

    Я бы просто побил экран на две части и если вывод на борюдюр в нижней части, то выводил бы звук ДО вывода на бордюр. Если вывод на экран в верхней части - то выводил бы звук после вывода на бордюр. Но я наверное плохо понял, что ему надо и почему так критичны 300 тактов.

  7. #6
    Master Аватар для DenisGrachev
    Регистрация
    15.04.2011
    Адрес
    г. Новосибирск
    Сообщений
    741
    Спасибо Благодарностей отдано 
    39
    Спасибо Благодарностей получено 
    211
    Поблагодарили
    44 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от SfS Посмотреть сообщение
    Другой вопрос, что при выводе 6 регистров за кадр, 1 секунда звука будет занимать 9*6*50 = 2700 байт.
    То есть на страничку войдет всего 6 секунд такой "музыки")
    есть же какое-то время сразу с начала прерывания (около 3584 тактов на пентагоне), пока ещё луч не начал рисовать вот там и надо сделать постоянную по времени процедуру которая всех спасёт.

  8. #7
    Master
    Регистрация
    27.01.2005
    Сообщений
    895
    Спасибо Благодарностей отдано 
    25
    Спасибо Благодарностей получено 
    176
    Поблагодарили
    142 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от DenisGrachev Посмотреть сообщение
    есть же какое-то время сразу с начала прерывания (около 3584 тактов на пентагоне), пока ещё луч не начал рисовать вот там и надо сделать постоянную по времени процедуру которая всех спасёт.
    Имеется ввиду кадровый гасящий импульс?

  9. #8
    Master Аватар для DenisGrachev
    Регистрация
    15.04.2011
    Адрес
    г. Новосибирск
    Сообщений
    741
    Спасибо Благодарностей отдано 
    39
    Спасибо Благодарностей получено 
    211
    Поблагодарили
    44 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от SfS Посмотреть сообщение
    Имеется ввиду кадровый гасящий импульс?
    Скорее всего да Вообще, сейчас проснуться и придут нормальные кодеры, не как я и ещё что-нибудь предложат

  10. #9
    Master
    Регистрация
    27.01.2005
    Сообщений
    895
    Спасибо Благодарностей отдано 
    25
    Спасибо Благодарностей получено 
    176
    Поблагодарили
    142 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Ну я на асме 100 лет не кодировал посерьезному)
    Так что пусть кодеры резвятся)

  11. #10
    Guru
    Регистрация
    27.02.2005
    Адрес
    москва
    Сообщений
    13,767
    Записей в дневнике
    1
    Спасибо Благодарностей отдано 
    142
    Спасибо Благодарностей получено 
    1,173
    Поблагодарили
    770 сообщений
    Mentioned
    18 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    заранее подготовленные данные часто выводят таким способом
    Код:
    outi
    ld b,e
    outi / outd
    ld b,d
    outi
    ...
    ещё возможно похимичить с неполной дешифрацией
    Код:
    ;bc=#c0fd
    ;de=#090a
    	LD   A,#08
    	OUT  (C),A
    	OUTI
    	INC  B
    	INC  H
    	OUT  (C),D
    	OUTD
    	INC  B
    	INC  H
    	OUT  (C),E
    	OUTI
    Последний раз редактировалось goodboy; 01.08.2017 в 09:54.

Страница 1 из 2 12 ПоследняяПоследняя

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

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

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

Похожие темы

  1. Новые возможности форума !
    от AAA в разделе Форум
    Ответов: 11
    Последнее: 13.07.2011, 09:06
  2. Интересный вопрос про циклы и такты
    от Володя Березин в разделе Программирование
    Ответов: 5
    Последнее: 09.02.2009, 07:12
  3. расширяем возможности ОСи)))
    от Sayman в разделе Оси
    Ответов: 0
    Последнее: 28.10.2008, 08:35
  4. Cчитаем такты... (2SMT)
    от rasmer в разделе Эмуляторы
    Ответов: 11
    Последнее: 10.08.2005, 07:29
  5. Новые возможности Unreal
    от razer в разделе Эмуляторы
    Ответов: 122
    Последнее: 26.02.2005, 02:05

Ваши права

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