PDA

View Full Version : Assembler, timer di sistema + speaker


RaidenForce
22-12-2006, 09:27
Ciao a tutti! Sono nuovo... spero che qualcuno mi possa aiutare con il mio problema, che mi sta facendo diventare matto... devo costruire un programma che generi un suono dallo speaker di sistema e impostare una durata da 1/64 di secondo a 2 secondi. Il suono riesco a generarlo, ma è il ciclo di attesa che non funziona bene... il mio primo approccio al programma è stato questo:

ciclo1:
mov al,es:046ch
add al,1d
ciclo2:
cmp es:046ch,al
jne ciclo2

inc cx

cmp cx,bx
jl ciclo1

che in pratica legge da 0000:046c i tick del timer correnti, e aspetta fin quando non ne passa un altro. Così funziona, e anche bene, l'unico problema è che il tempo di attesa + piccolo che riesco a generare è di 1/18 di secondo... Successivamente, ho scoperto che il timer può generare intervalli piccoli fino a 848 nanosecondi. e il programma che è venuto fuori è questo:

mov bx,1000 ;microsecondi di attesa

mov al,bl
out 42h,al
mov al,bh
out 42h,al

in al,61h
or al,00000011b
out 61h,al

ciclo:
mov dx,bx

mov al,80h
out 43h,al

in al,42h
mov ah,al
in al,42h
xchg al,ah
mov bx,ax
cmp ax,dx
jb ciclo

in al,61h
and al,00000001b
out 61h,al

e questa procedura, in sè funziona, soltanto che quando la cpu esegue "mov al,80h; out 43h,al" va a modificare il contenuto del registro di controllo, cambiando la frequenza della nota che sta suonando! se qualcuno c ha capito qualcosa mi risponda :) grazie dell'attenzione