Miten lyhyitä viiveitä? Miten korvata...

Saku-foorumi » Uusi sukupolvi: MorphOS » Ohjelmointi » Viestit 2006 » Miten lyhyitä viiveitä? Miten korvata MS-DOSin tekstitila? « Edellinen Seuraava »

Kirjoittaja Viesti
 

JPQ
Torstaina, 2. maaliskuuta, 2006 - klo 22.49:   
Miten lyhyitä viiveitä ? myös classic amigalla toimiva tapa kiinnostaa
nyt ei riitä Delayn 1/50sekunnin tarkkuus. Ja toiseksi miten voisin
tehdä ikkunan joka korvaisi MS-DOSin tekstitilaa. Oma softa tekstitila
on kyllä mielessä mutta sen api olisi aika karu ja muutenkin eli
onnistuisiko CON/RAW ikkunalla jonka avaan halutulla kirjasinlajilla ?

 

JPQ
Torstaina, 2. maaliskuuta, 2006 - klo 22.53:   
Ihanne tarkkuus viiveelle voisi olla jopa 1ms.
PS. classic amigan amigaoseista tarkoitan siis os3.9 jota vanhempien
kanssa toimivuus on toki plussaa. Eikä se saattaa tietenkään tappaa
moniajoa tai hidastaakkaan kait sitä pahemmin.

 

Jarmo Piippo
Perjantaina, 3. maaliskuuta, 2006 - klo 8.37:   
JPQ: classisillahan noita tehdään CIA-B-piirin ajastimilla, jotka pyörivät yli 700 kHz:n tarkkuudella. Moniajoa niiden lueskelu ei hidasta, jos laittaa ne ilmoittamaan laskurin täyttymisestä keskeytyksillä, ja varaa resurssit käyttöönsä ennen niiden osoittelua. Esimerkkiohjelmia löytynee Aminetistä ym.

Pegasoksessa ei ehkä noin tehty classic-ohjelma toimi, tai ainakaan samalla tarkkuudella (liekö kukaan testannut?).

 

Jon
Perjantaina, 3. maaliskuuta, 2006 - klo 9.09:   
Käytä timer.deviceä. CIA-tuki löytyy käsittääkseni vain Amithlonista ja UAE:sta.

Joissakin C-kirjastoissa tulee usleep(mikrosekunnit) ja toki myös SDL_Delay(millisekunnit):tä voi käyttää mutta loppupeleissä timer.device hoitaa hommat kotiin.

 

Jarmo Piippo
Perjantaina, 3. maaliskuuta, 2006 - klo 10.03:   
Jon: eli CIA:ta käyttävät ohjelmat eivät toimi A1:ssä tai Pegasoksessa? Harmi. Mutta tosiaan timer.devicen tarkkuuskin riittänee tuohon JPQ:n millisekunnin vaatimukseen, täyden reson CIA:sta kuitenkin saa irti vain "laittomin" keinoin iskemällä hardista. :-)

 

Jon
Perjantaina, 3. maaliskuuta, 2006 - klo 10.47:   
Jarmo Piippo: käsittääkseni näin. Muuten suurin osa tracker/player-ohjelmista toimisi ja näin ei ole ainakaan A1:llä.

Miksei muuten alkuperäinen timer.device käyttänyt CIA:ta, vai käyttikö?

 

itix
Perjantaina, 3. maaliskuuta, 2006 - klo 13.31:   
Pegasoksella voi käyttää UNIT_CPUCLOCK timeriä jolla on parempi tarkkuus kuin CIA-ajastimilla. Mut UNIT_MICROHZ on yleensä ihan riittävä.

Jos on laiska eikä jaksa avata timeriä voi käyttää TimeDelay() funktiota, löytyy amiga.lib/abox.a kirjastosta.

 

JPQ
Perjantaina, 3. maaliskuuta, 2006 - klo 13.46:   
itix: täytyykin kattella mutta missä on abox.aan dokumentit.
PS. en ole laiska mutta tämän käyttö vois olla selkeintä.

 

JPQ
Perjantaina, 3. maaliskuuta, 2006 - klo 13.52:   
itix: abox.a varmaan menee mukaan arvaanko oikein sillain kuin
PowerSDLän ne palat. Ja onko dokut samat kuin amiga.libissä jollei
tosiaan missä on ? amiga.libin ohjeet lieneekin tiedossa missä on.

 

itix
Perjantaina, 3. maaliskuuta, 2006 - klo 21.34:   
abox.a on MorphOS:n amiga.lib, dokit on AOS SDK:ssa.

 

JPQ
Perjantaina, 3. maaliskuuta, 2006 - klo 23.13:   
itix: eli eroja ei ole ?

 

itix
Lauantaina, 4. maaliskuuta, 2006 - klo 12.27:   
Eroja ei ole.

 

Jarmo Piippo
Maanantaina, 6. maaliskuuta, 2006 - klo 11.01:   
itix: Mielenkiintoista! Kuinka hyvään tarkkuuteen noilla Pegasoksessa käytännössä pääsee (todellinen mittaustarkkuus)? Ja löytyykö kovosta sellaista ohjelmoitavaa laskuria, joka vastaisi suunnilleenkaan CIA:ta? Noin tarkka koneen ulkopuolisten tapahtumien mittaus tarjoaisi mahdollisuuksia vaikka mihin.

 

Piru
Maanantaina, 6. maaliskuuta, 2006 - klo 13.53:   
@Jarmo Piippo
"Kuinka hyvään tarkkuuteen noilla Pegasoksessa käytännössä pääsee (todellinen mittaustarkkuus)?"

MorphOS:ssa tarkkuus ei ole paras mahdollinen johtuen käyttöjärjestelmästä johtuvista latensseista. Tämähän pätee lähes aina: Jos pyydetään viivettä, todellisuudessa aikaa kuluu hieman enemmän kuin pyydetty.

Raudasta:

UNIT_CPUCLOCK käyttää nimenomaan PPC prosessorin sisäistä laskuria (timebase). Yleensä se pyörii neljäsosalla väyläkellosta. Esimerkiksi Peg2:ssa se on 133.333MHz.../4 eli 33.333...MHz. Tuon kanssa voi sitten pyytää keskeytyksiä ym.

Käytännössä kaikki ajastus on toteutettu timebase:lla.

 

Piru
Maanantaina, 6. maaliskuuta, 2006 - klo 14.24:   
Jos kuitenkin kyseessä on mittaus (tapahtuman A ja B välinen aika) niin tuo timebase juoksee tasaisella nopeudella kokoajan. Jos suorittaa kalibroinnin jossa tyhjän tapahtuman mittausviive poistetaan, saadaan hyvinkin tarkkoja tuloksia.

 

Jarmo Piippo
Tiistaina, 7. maaliskuuta, 2006 - klo 8.57:   
Piru: Hyvältä kuulostaa. Kuinkas leveä rekisteri tuo timebase on, eli mikä on pisin aika ennen sen pyörähtämistä ympäri? MorphOS:n kanssa ei liene mahdollista/helppoa sammuttaa moniajoa ja lukea rautaa suoraan, kuten classiceissa?

 

Piru
Tiistaina, 7. maaliskuuta, 2006 - klo 9.44:   
@Jarmo Piippo

"Kuinkas leveä rekisteri tuo timebase on, eli mikä on pisin aika ennen sen pyörähtämistä ympäri?"

Timebase rekisteri on 64-bittinen, joten 2**64-1 / timebase_freq sekuntia.

"MorphOS:n kanssa ei liene mahdollista/helppoa sammuttaa moniajoa ja lukea rautaa suoraan, kuten classiceissa?"

Tuon rekisterin lukeminen onnistuu myös suoraan pienellä koodinpätkällä (inline asm), joten tässä ei ole mitään ongelmaa. Tämä siksi että rekisteri on osa normaalia prosessorin user-puolen ominaisuutta.

 

Jarmo Piippo
Tiistaina, 7. maaliskuuta, 2006 - klo 10.05:   
Piru: No eipä tule sitten ihan heti raja vastaan, voi ajastaa näköjään tuhansia vuosia. :-) Löytyyköhän PPC-pohjaisista koneista muitakin kivoja bonus-yllätyksiä päivitystä harkitsevan Classic-harrastajan näkökulmasta...

Lisää viestisi tähän
Viestisi:
Käyttäjätunnus: Postitus informaatiota:
Tämä on yksityinen keskustelupalsta. Vain rekisteröidyt käyttäjät ja moderaattorit voivat postittaa tänne.
Salasana:
valinnat: Aktivoi URL:t automaattisesti tässä viestissä
Toimenpide: