да это то как раз не проблема (дизассемблер звука), он там маленький. меня в своё время заинтересовал резонанс встроенного пьезоспикера на одном из значений штатного sound (такой резкий дребезжащий звук, очень сильно отличается от смежных, да и от остальных тонов вообще).
Code:
DE94
DE94 ; ███████████████ S U B R O U T I N E ███████████████████████████████████████
DE94
DE94 ; Выдача звука.
DE94 ;
DE94 ; параметры:
DE94 ; 1) в L "частота" (длительность полуволны)
DE94 ; 2) в D длительность звукового сигнала
DE94 ;
DE94 ; кодирование условное, т.к. частота
DE94 ; задаётся в формате 0x00??, а длительность в 0x??FF
DE94 ; соответственно количество полупериодов в заданной
DE94 ; длительности это отношение одного к другому или:
DE94 ; 256 * (T + 1) - 1 - F
DE94 ; где T время, а F условная "частота"
DE94
DE94 SOUND: ; CODE XREF: seg000:F81Ej
DE94 mvi h, 0
DE96 mvi e, 0FFh
DE98
DE98 pause_cycle: ; CODE XREF: SOUND+28j
DE98 mov b, h ; bc = hl
DE99 mov c, l ; т.е. это, фактически,
DE99 ; частота (длительность полупериода)
DE9A mvi a, 0FFh ; 1 ===> SPEAKER
DE9C out 0C2h
DE9E
DE9E pause_tick1: ; CODE XREF: SOUND+13j
DE9E dcx d ; do {
DE9F mov a, d ; if (--de == 0) exit;
DEA0 ora e
DEA1 rz
DEA2 nop
DEA3 nop
DEA4 dcx b ; } while (--bc);
DEA5 mov a, b
DEA6 ora c
DEA7 jnz pause_tick1 ; do {
DEAA mvi a, 0FEh ; 0 ===> SPEAKER
DEAC out 0C2h
DEAE mov b, h ; bc = hl
DEAF mov c, l ; т.е. это, фактически,
DEAF ; частота (длительность полупериода)
DEB0
DEB0 pause_tick2: ; CODE XREF: SOUND+25j
DEB0 dcx d ; do {
DEB1 mov a, d ; if (--de == 0) exit;
DEB2 ora e
DEB3 rz
DEB4 nop
DEB5 nop
DEB6 dcx b ; } while (--bc);
DEB7 mov a, b
DEB8 ora c
DEB9 jnz pause_tick2 ; do {
DEBC jmp pause_cycle ; bc = hl
DEBC ; End of function SOUND
DEBC