Atividade 4: Programação de entrada/saída:
emulando um piano via teclado e alto-falante do PC
Editado em 14 Out 2003
Data de submissão: 09/10/03. Prazo de Entrega: 23/10/02.
O objetivo desta atividade é escrever um programa em assembler para
controlar dispositivos de Entrada/Saída de um PC, em particular
o uso do controlador 8253 para acionar o alto-falante
e o uso do teclado para emular um piano simples.
Utilize como modelo a rotina contida no programa
inhand.c
visto em aula e que utiliza programação de E/S sobre o chip de temporização
8253
que existe em todo PC. O 8253 é programado para emitir uma onda quadrada com uma
freqüencia escolhida, que ao ser injetada no alto-falante do PC, este emite um
som com essa freqüencia.
Ecreva um programa inteiramente em assembler,
porém sem usar interrupções.
O seu programa deve:
Observações:
-
a função em C outportb(num_porta, valor_8bits)
corresponde à instrução em assembler: out
num_porta, al
-
a função em C inportb(num_porta) corresponde
à instrução em assembler: in al, num_porta
-
freqüências razoavelmente audíveis num PC vão
de 60 hz a 9000 hz .
Veja a tabela Frequency Table no final do documento sobre o
8253 e alto-falante do PC.
Sugestão: utilize as frequencias mais altas. Observe que as freqüencias de
uma oitava são o dobro da oitava anterior ( e os contadores são metade).
Por exemplo a nota dó = 1046.50 hz = 2x 523.25 e a nota ré seguinte teria 2x587.33 hz.
É simples, portanto, estender a tabela além de 1046.50 hz.
- a fim de limpar o buffer de entrada do teclado (que só é ecoado após
o prompt do término do seu programa!) utilize a função do DOS: mov ah, 0ch int 21h,
após emitir o som de cada tecla.
- Opcional: implemente uma pianola, com um música de sua escolha.
Use a rotina
time vista em aula para calcular o tempo de duração de cada nota sendo tocada.
V. deve demonstrar o funcionamento do seu programa no laboratório
e entregar uma impressão em assembler (no formato .lst)