© Иван Рощин, Москва
| ZXNet | : 500:95/462.53 |
| : bestview@mtu-net.ru | |
| WWW | : http://www.ivr.da.ru |
(«Радиомир. Ваш компьютер» 2/2002, под псевдонимом BV_Creator)
Дата последнего редактирования: 9.11.2002.
Вентилятор нужен, чтобы засасывать комаров через дисковод.
Народная мудрость.
Вот первый вариант процедуры: сигнал воспроизводится через встроенный динамик.
;При тактовой частоте процессора 3,5 МГц один период составит
;3,5*10^6/12,3*10^3 ~= 285 тактов (точное значение 284,55).
;Пусть продолжительность одного полупериода будет 142 такта,
;а другого - 143.
DI
M1 LD B,8 ;7 \
DJNZ $ ;7*13+8=99 |
INC HL ;6 } 130+12=142
LD A,16 ;7 |
OUT (254),A ;11 /
LD B,9 ;7 \
DJNZ $ ;8*13+8=112 |
INC HL ;6 } 143
LD A,0 ;7 |
OUT (254),A ;11 /
JR M1 ;12
А вот второй вариант: для формирования сигнала используется музыкальный сопроцессор.
CHAN EQU 0 ;Используемый канал: 0-A, 1-B, 2-C.
VOL EQU 15 ;Громкость (0-15).
LD HL,#FFBF
LD C,#FD
;При тактовой частоте сопроцессора 1,75 Мгц значение делителя
;частоты тона должно быть равным 1,75*10^6/(12,3*10^3*16) ~= 9
;(точное значение 8,89). Выводим его в регистры частоты тона:
LD B,H
LD A,CHAN*2
OUT (C),A
LD B,L
LD A,9
OUT (C),A
LD B,H
LD A,CHAN*2+1
OUT (C),A
LD B,L
XOR A
OUT (C),A
;Включаем вывод частоты тона:
LD B,H
LD A,7
OUT (C),A
LD B,L
LD A,#FF
RES CHAN,A
OUT (C),A
;Установка громкости:
LD B,H
LD A,8+CHAN
OUT (C),A
LD B,L
LD A,VOL
OUT (C),A
RET
Так как музыкальный сопроцессор работает независимо от основного процессора, то, выполнив эту процедуру, можно в дальнейшем работать с программами, не обращающимися к сопроцессору, и звук не будет прерван.
Обе процедуры формируют сигнал простейшей прямоугольной формы. Но форма
оригинального сигнала много сложнее: как упоминается в [1], он занимает 1 МБ в
формате Real Audio. Поэтому полезный эффект от использования этих процедур
может оказаться ниже ожидаемого. Интересно было бы, если бы