Can you believe it? I wrote this code over 10 years ago... I wonder whether it still compiles and runs. ;±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±± ; Beep speaker; period given by beep_div, duration by beep_len. ;±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±± beep proc pushx ax,bx,cx,dx,si,di,es,ds ;preserve registers mov al,10110110b ; select 8253 mov dx,43h ; control port address out dx,al dec dx ; timer 2 address mov ax,cs:[beep_div] out dx,al ; low byte of divisor xchg ah,al out dx,al ; high byte of divisor mov dx,61h in al, dx ; get current value of control bits push ax or al,3 out dx,al ; turn speaker on ;±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±± ; Wait for desired duration by monitoring time-of-day 18 Hz clock ;±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±± mov bx,cs:[timer_low] mov cx,-1 beeplp: mov ax,cs:[timer_low] sub ax, bx cmp ax,cs:[beep_len] jg beepover loop beeplp beepover: ; Turn off speaker pop ax and al,not 3 ; turn speaker off out dx,al popx ds,es,di,si,dx,cx,bx,ax ret beep endp