🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.lang.asm
5 messages
5 total messages Started by piotrg Tue, 25 Mar 2008 12:37
Odmierzanie czasu
#1742
Author: piotrg
Date: Tue, 25 Mar 2008 12:37
43 lines
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
#1743
Author: piotrg
Date: Tue, 25 Mar 2008 14:06
60 lines
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
#1744
Author: piotrg
Date: Tue, 25 Mar 2008 15:50
49 lines
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
#1745
Author: Bogdan (bogdro)
Date: Wed, 26 Mar 2008 12:16
48 lines
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
#1746
Author: piotrg
Date: Thu, 27 Mar 2008 18:54
29 lines
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