На последнем 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 тактов. Только музыканты будут не в восторге)
Недостатки такого способа вывода звука очевидны: очень большой объем кода. Ну и конвертор писать надо.
Достоинства тоже есть - минимально возможно время и постоянное время выполнения.