|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Junior Member
Iscritto dal: Dec 2006
Messaggi: 7
|
Assembler, timer di sistema + speaker
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 ![]() |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 18:15.