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).