;this program waits for user input. if the user presses '1' it outputs a string, if '2' it exits .model small .stack 100h .data doHz = 2280 reHz = 2031 miHz = 1810 faHz = 1708 solHz = 1522 laHz = 1356 siHz = 1208 pause dw ? pause1 dw ? .code init: mov ax,@data ;initialize data sector mov ds,ax mov ax,3 ;initialize video mode: text int 10h top: in al,64h ;check port 64 - do nothing AND al,1 ;if no keys are pressed cmp al,1 jne top in al,60h ;read in key pressed cmp al,2 je goDo cmp al,3 je goRe cmp al,4 je goMi cmp al,5 je goFa cmp al,6 je goSol cmp al,7 je goLa cmp al,8 je goSi cmp al,9 ;exit condition - key '8' je fin jmp top ;no conditions are matched goDo: call do jmp top goRe: call re jmp top goMi: call mi jmp top goFa: call fa jmp top goSol: call sol jmp top goLa: call la jmp top goSi: call siH jmp top fin: mov ah,4ch ;return control to OS int 21h ;************************* wait1: mov pause,0ffh agn1: mov pause1,0ffh agn2: dec pause1 jnz agn2 dec pause jnz agn1 ret ;************************* do: mov ax,doHz out 42h,al ;set sound to DO mov al,ah out 42h,al call output ret ;************************* re: mov ax,reHz out 42h,al ;set sound to RE mov al,ah out 42h,al call output ret ;************************* mi: mov ax,miHz out 42h,al ;set sound to MI mov al,ah out 42h,al call output ret ;************************* fa: mov ax,faHz out 42h,al ;set sound to FA mov al,ah out 42h,al call output ret ;************************* sol: mov ax,solHz out 42h,al ;set sound to SOL mov al,ah out 42h,al call output ret ;************************* la: mov ax,laHz out 42h,al ;set sound to LA mov al,ah out 42h,al call output ret ;************************* siH: mov ax,siHz out 42h,al ;set sound to SI mov al,ah out 42h,al call output ret ;************************* output: in al,61h OR al,00000011 ;set 61h port to output sound out 61h,al call wait1 in al,61h AND al,11111100b ;set 61h port to output sound out 61h,al ret end