;starts playing frequency (in hertz) passed via BX. ;destroys AX, BX, DX. sound: mov dx, 12h ;high word of dividend cmp dx, bx jnc s2 ;if freq > 18 then.. in al, 61h test al, 00000011b ;if not speaker data status jnz s1 ; then.. or al, 00000011b out 61h, al ;set speaker data status mov al, 10110110b out 43h, al ;counter 2 select, low byte then high byte, square wave, 16-bit s1: mov ax, 34DDh ;end if div bx out 42h, al ;counter 2 <- 1234DDh / freq: low byte mov al, ah out 42h, al ;counter 2 <- 1234DDh / freq: high byte s2: ret ;end if nosound: in al, 61h and al, 11111100b out 61h, al ;clear speaker data status ret