ZX Forum
#04
19 ноября 1997 |
|
Мир звуков Спектрума - глава 3: Как получается звук (устройство BEEP'ра и способы звукоизвлечения).
3. Как получается звук К сожалению, в ZX-Spectrum для управле- ния звуком отведен всего-навсего один бит. Это бит D4 порта 254 (#FE). Но, несмотря на это, программисты умудряются создавать довольно красивые мелодии и эффекты. Когда этот бит установлен, на дина- мик (усилитель) подается напряжение, и его мембрана находится в одном положении. Ког- да же он сброшен, на динамике напряжения нет, и мембрана находится в другом положе- нии. Таким образом, если Вы будете изме- нять состояние этого бита с достаточно вы- сокой частотой, то мембрана будет вибриро- вать и Вы услышите звук. Использовать этот способ можно даже из бейсика: 10 FOR A=1 TO 300: OUT 254,23 20 OUT 254,7: NEXT A И так же легко на ассемблере, но в этом случае придется запрещать прерывания, если Вы хотите получить качественное звучание: 1415. 10 DI ; запрет прерываний 20 LD BC,2560 ; BC=длительность 30 LD A,7 ; A=цвет бордюра 40 BEGIN XOR 16 ; инвертирование бита D4 50 OUT (254),A ; вывод A в порт 254 60 LD D,100 ; D=задержка (частота) 70 PAUSE DEC D ; D=D-1 80 JR NZ,PAUSE ; если D<>0, то цикл 90 DEC BC ; BC=BC-1 100 LD D,A ; сохранение A 110 LD A,B ; BC= 120 OR C ; 0 ? 130 LD A,D ; восстановление A 140 JR NZ,BEGIN ; если BC<>0, то цикл 150 EI ; разрешение прерываний 160 RET ; возврат в бейсик 2 Вы, наверное, заметили, что в этих про- граммах в порт выводится не 16 и 0, что соответствовало бы установке и сбросу би- та D4, а 23 и 7. Дело в том, что этот порт кроме динамика управляет еще цветом бордю- ра и выходом на магнитофон. Познакомимся с его возможностями поближе: Биты D0...D2 определяют цвет бордюра: 000(0) - черный 100(4) - зеленый 001(1) - синий 101(5) - голубой 010(2) - красный 110(6) - желтый 011(3) - фиолетовый 111(7) - белый Бит D3 управляет выходом на магнитофон. Бит D4 управляет звуком. Биты D5...D7 не используются. При вводе байта из порта бит D6 контро- лирует магнитофонный вход. Думаю, теперь понятно, откуда взялись цифры 23 и 7: для установки и сброса бита D4 необходимо последовательно вывести в порт значения 16 и 0. Но при этом надо сохранять цвет бордюра равный 7 (белый). Следовательно, первое значение будет рав- но 16+7=23, а второе - 0+7=7. Вообще-то, Вы можете устанавливать любой цвет бордю- ра. Более того, можно создавать на нем различные цветовые эффекты. Для этого дос- таточно при инвертировании звукового бита использовать разные цвета бордюра. Вы, наверное, заметили, что в приведен- ной выше программе на ассемблере запре- щаются прерывания. Думаю, стоит это пояс- нить. Дело в том, что ZX-Spectrum устроен так, что каждую пятидесятую долю секунды вызывается подпрограмма ПЗУ, расположен- ная с адреса 56 (#38). И, если Вы хотите получить качественный (не трещащий) звуко- вой сигнал, то ее надо отключить, что и достигается запрещением прерываний (коман- да DI). При возврате в бейсик прерывания необходимо снова разрешать (команда EI).
Другие статьи номера:
Похожие статьи:
В этот день... 21 ноября