Thread View: pl.comp.lang.asm
5 messages
5 total messages
Started by piotrg
Tue, 25 Mar 2008 12:37
Odmierzanie czasu
Author: piotrg
Date: Tue, 25 Mar 2008 12:37
Date: Tue, 25 Mar 2008 12:37
43 lines
1833 bytes
1833 bytes
Witam! Mam jako zadanie do zrobienia wspaniałe organki wszystko pięknie już uruchomiłem granie i tak dalej ,ale mam problem z odmierzaniem czasu ile czasu ma grać chwilowo licze w sekundach z portu 70h ale chce miec lepszą rozdzielczość więć chce skorzystac z zegara systemowego .Problem w tym że PC Speaker też działa na tym samym układzie. Czy istnieje możliwość równoczesnego odczytu? Z generatora 0 i generatora 2? Nie mogę korzystać z funkcji dos lub bios Prośba o jakies wsparcie z kodem. Narazie z głosniczkiem mam tyle : mov al,10110110b out 43h,al mov ax,5000; out 42h,al; mov al,ah; out 42h,al; in al,61h or al,3 ; ustawiamy bity: 0 i 1 out 61h,al call opoznienie ;;moja funkcja o rozdzelczosci sekundowej in al,61h and al,0fch ; zerujemy bity: 0 i 1 out 61h,al Pozdro i bedę wdzięczny za pomoc Piotr Grota
Re: Odmierzanie czasu
Author: piotrg
Date: Tue, 25 Mar 2008 14:06
Date: Tue, 25 Mar 2008 14:06
60 lines
2129 bytes
2129 bytes
> Witam! > Mam jako zadanie do zrobienia wspaniałe organki wszystko pięknie już > uruchomiłem granie i tak dalej ,ale mam problem z odmierzaniem czasu ile > czasu ma grać chwilowo licze w sekundach z portu 70h ale chce miec lepszą > rozdzielczość więć chce skorzystac z zegara systemowego .Problem w tym że > PC Speaker też działa na tym samym układzie. Czy istnieje możliwość > równoczesnego odczytu? Z generatora 0 i generatora 2? Nie mogę korzystać z > funkcji dos lub bios > > Prośba o jakies wsparcie z kodem. > > Narazie z głosniczkiem mam tyle : > > mov al,10110110b > > out 43h,al > > mov ax,5000; > > out 42h,al; > > mov al,ah; > > out 42h,al; > > > in al,61h > > or al,3 ; ustawiamy bity: 0 i 1 > > out 61h,al > > call opoznienie ;;moja funkcja o rozdzelczosci sekundowej > > in al,61h > > and al,0fch ; zerujemy bity: 0 i 1 > > out 61h,al > > Chwilowo mam coś takiego na liczenie impulsów ale niestety nie działa tak jak trzeba mov al,00010000b out 43h,al mov al,ds:licznik_2 out 40h,al petla_opozniajaca: in al,40h cmp al,0 jnz petla_opozniajaca
Re: Odmierzanie czasu
Author: piotrg
Date: Tue, 25 Mar 2008 15:50
Date: Tue, 25 Mar 2008 15:50
49 lines
1507 bytes
1507 bytes
> in al,61h > > or al,3 ; ustawiamy bity: 0 i 1 > > out 61h,al > > call opoznienie ;;moja funkcja o rozdzelczosci sekundowej > > in al,61h > > and al,0fch ; zerujemy bity: 0 i 1 > > out 61h,al > ciach Pordziłem sobie w ten sposób mov al,00110100b out 43h,al petla_opozniajaca: in al,40h cmp al,1 jz dodaj in al,40h jmp petla_opozniajaca dodaj: inc ds:licznik_2 cmp ds:licznik_2,83 jne petla_opozniajaca mov ds:licznik_2,byte ptr 0 Czy istnieje jakis lepszy sposób?
Re: Odmierzanie czasu
Author: Bogdan (bogdro)
Date: Wed, 26 Mar 2008 12:16
Date: Wed, 26 Mar 2008 12:16
48 lines
2028 bytes
2028 bytes
piotrg pisze: > Pordziłem sobie w ten sposób > > mov al,00110100b > > out 43h,al > > petla_opozniajaca: > > in al,40h > > cmp al,1 > > jz dodaj > > in al,40h > > jmp petla_opozniajaca > > > dodaj: > > inc ds:licznik_2 > > cmp ds:licznik_2,83 > jne petla_opozniajaca > > > > mov ds:licznik_2,byte ptr 0 > > Czy istnieje jakis lepszy sposób? Bez grzebania w częstotliwości zegara (czyli bez zmian rozsynchronizowujących czas systemowy) na standardowym sprzęcie jakoś tego nie widzę. Ale karta dźwiękowa SB/AdLib może mierzyć czas/odpalać przerwania co 80 i 320 mikrosekund (http://rudy.mif.pg.gda.pl/~bogdro/dos/hw_tut.htm). Pewnie można też zmierzyć szybkość CPU, po czym czekać odpowiednią liczbę taktów. RBIL->PORTS.LST mówi też, że może być układ PIT2. Może sprawdź, czy taki istnieje i go użyj. -- Pozdrawiam/Regards - Bogdan (GNU/Linux & FreeDOS) Kurs asemblera x86 (DOS, GNU/Linux):http://rudy.mif.pg.gda.pl/~bogdro Grupy dyskusyjne o asm: pl.comp.lang.asm alt.pl.asm alt.pl.asm.win32 www.JabberPL.org www.TorProject.org Soft (EN): miniurl.pl/bogdro-soft
Re: Odmierzanie czasu
Author: piotrg
Date: Thu, 27 Mar 2008 18:54
Date: Thu, 27 Mar 2008 18:54
29 lines
2164 bytes
2164 bytes
>> Czy istnieje jakis lepszy sposób? > > Bez grzebania w częstotliwości zegara (czyli bez zmian > rozsynchronizowujących czas systemowy) na standardowym sprzęcie jakoś tego > nie widzę. Ale karta dźwiękowa SB/AdLib może mierzyć czas/odpalać > przerwania co 80 i 320 mikrosekund > (http://rudy.mif.pg.gda.pl/~bogdro/dos/hw_tut.htm). > Pewnie można też zmierzyć szybkość CPU, po czym czekać odpowiednią liczbę > taktów. > RBIL->PORTS.LST mówi też, że może być układ PIT2. Może sprawdź, czy Ok dzięki za wskazówki ale poradziłem sobie w inny sposób Już mi działa jak powinno. Dorwałem sie do przerwania 08 czyli zegarowego i licze sobie takty poprsotu. I sprawdzam czy nie nastąpiło już obliczenie wskazanego czasu. (liczby milisekund). Niestety to był System operacyjny więc żadne funkcje dos i bios odpadały bo tryb chroniony.Wszystko obsługuje samuemu. Można zrobic dyskietke bootowalną i odpalić na kompie. Narazie jest czas i granie speaker może bedzię ochota i zrobiebie czegoś więcej. Pzodro i jeszcza raz dzięki za wskazówki.
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads