Born Dead
#0G
31 марта 2000 |
|
Coding своими руками - Супер-быстрый MCC player.
════════════════════════════════════════════════════════════════ ЇЄ╒▐╟░░╟▐╒ЄєЇCODING СВОИМИ РУКАМИ-II ЇєЄ╒▐╟░░╟▐╒ЄєЇ ════════════════════════════════════════════════════════════════ (c) MOn5+Er^Sa9e Супер-быстрый player with MCC Без вступлений и окончаний приведу самый распоследний вариант плейера для MCC метода! Теперь им можно воспроизводить ВСЕ - теорема Котельникова играет на нас! EI ;до запуска в порт AY n7 записать #FF! HALT LD SP,START-SAMPLE-ADRESS LD IX,LOOP LD DE,#08+256*('MCC_TBL+1) LD BC,#FFFD OUT (C),E ;вкл. 8 AY_порт (крайний канал) LOOP: POP HL LD E,L LD A,(DE) DEC D EX AF,AF' LD A,(DE) LD E,9 OUT (253),A EX AF,AF' OUT (C),E OUT (253),A LD E,H LD A,(DE) INC D EX AF,AF' LD A,(DE) LD E,8 OUT (253),A EX AF,AF' OUT (C),E OUT (253),A JP (IX) Обработчик INT'а: INT: POP IY ;взяли адр. возврата PUSH HL ;восстановили испорченный SAMPL LD HL,0 ADD HL,SP LD BC,END_SAMPLE_ADDRESS OR A SBC HL,BC JR NC,END_INT LD BC,#FFFD POP HL JP (IY) END_INT: выход из player'а 160 тактов на две выборки сэмпла. 80 тактов на выборку. Fдискрет.=3,5 МГц/80=43,75 кГц. Плеер использует только один крайний канал AY, можно и два для двойной громкости (на качество в принципе почти не влияет кол-во крайних каналов...) Единственный недостаток, можно слегка проскочить конец сэмпла, т.к. проверка раз в INT, но недостаток легко исправляется: в конце сэмпла (а он обязательно беззнаковый 0..#FF, а не -128 до +127) заполнен 896 байт "тишиной" - байтом #80 и всё. Почему 896 - т.к. в INT'е 71680 тактов (maximum на нетурбированной машине), а 71680/80=896!
Другие статьи номера:
Похожие статьи:
В этот день... 21 ноября