==========================================================================
Dokumentation zu MicroTimer V1.1
Author:          Volker Rudolph, Medicusstr. 31 / 6750 Kaiserslautern
Telefon:         0631/17160
==========================================================================

MicroTimer ist ein Modul, mit dem man sehr präzise Zeitmessungen
vornehmen kann.
Es verwendet dafür die beiden Timer der CIA-B, die vom Betriebssystem
nicht gebraucht werden.
Sie werden gekoppelt, und ermöglichen so eine maximale Meßdauer von
2^31 Mikrosekunden (ca. 35 Minuten). Die Auflösung der Timer beträgt
ca. 1.4 Mikrosekunden.

Zu den Prozeduren:

  1)  ›33mPROCEDURE StartTimer;›31m
      Startet die Zeitmessung.

  2)  ›33mPROCEDURE LookTimer(VAR micros:LONGINT);›31m
      Verstrichene Zeit auslesen ohne die Timer zu stoppen.

  3)  ›33mPROCEDURE StopTimer(VAR micros:LONGINT);›31m
      Timer stoppen und verstrichene Zeit auslesen.

  4)  ›33mPROCEDURE MicrosToTime(VAR minutes, seconds:CARDINAL;
                micros:LONGINT; inputMicros:LONGINT);›31m
      Mikrosekunden in Minuten, Sekunden und restliche Mikrosekunden
      umrechnen.

      StopTimer und LookTimer liefern eine 0 zurück, falls die
      maximale Meßdauer überschritten wurde.


[4mBeispielprogamm RunTime:[0m

Aufruf:
  RunTime "<program> <arguments>"

  RunTime startet das Programm <program> mit den Argumenten
  <arguments> und ermittelt dessen Ausführungsdauer.

[32mAnmerkung von Amok:
[1m[4m[33m!! Wichtig !! Achtung !![0m[33m

[33mDer CIA-B Timer wird auch vom serial.device benützt! Wer also gerade
in irgendeiner Mailbox hängt und etwas herunterlädt, sollte dieses Programm
NICHT BENUTZEN![m

Wer dieses Modul in seinen Programmen verwendet muß dafür sorgen, daß es
keine Konflikte mit gleichzeitig laufenden Programmen gibt, die den Timer
im CIA-B eventuell auch verwenden[31m. Leider gibt es im Betriebssystem keine
Prozedur zum Allozieren dieses Timers, so daß man auf eine Behelflösung mit
Ports ausweichen muß. Wir schlagen vor, vor dem Benutzen des Timers

* Forbid() auszuführen,
* zu prüfen, ob es einen Port mit dem Namen "ciab.timer" gibt (mit
  FindPort). Wenn ja, Permit() und abbrechen, da schon jemand anderes den
  Timer hat.
* Port mit diesem Namen erzeugen (mit CreatePort),
* Permit().

Nach Benutzen des Timers

* Mit DeletePort den Port entfernen

Der Name des Ports ist im Definitionsmodul schon als Konstante Deklariert.

Trotz dieser Methode darf trotzdem nicht 100%ig davon ausgegangen werden,
daß keine Störungen auftreten, denn es gibt möglicherweise Programme, die
sich nicht daran halten. Es ist dafür zu sorgen, daß ein Programm auch dann
nicht abstürzt, wenn der MicroTimer einmal falsche Werte liefert.
[33mWenn Sie die hohe Präzision des MicroTimers nicht benötigen, aber auf
Zuverlässigkeit angewiesen sind, benutzen Sie besser das timer.device![31m
(siehe auch Module "Timer2" auf Amok#12 und "TimerSupport" auf Amok#14).


[33m[4mZu beachten[0m
Wer selbst Programme schreibt, die direkt auf die Hardware zugreifen,
sollte auch darauf achten, diese vom Betriebssystem korrekt anzufordern,
damit es keine Konflikte mit dem Multitasking gibt.
Wer beispielsweise den Parallelport benutzt, indem er direkt auf die
CIA-Bits zugreift, sollte mit Resources.AllocMiscResource() den Port
anfordern und am Schluß mit FreeMiscResource() freigeben. Ähnliche
Prozeduren gibt es für den Disk-Port, die CIA-Interrupts, die Paddle-Ports
usw. (dieses Modul ist eine Not-Ausnahme, da das Betriebssystem die Timer
des CIA-B nicht benutzt und auch nicht verwaltet).

