Schneider / Amstrad CPC Forum

Amstrad / Schneider CPC => Programmierung => Topic started by: LambdaMikel on 22. June 2021, 16:38:45

Title: Counter gesucht
Post by: LambdaMikel on 22. June 2021, 16:38:45
CPC-Freunde,
ich will was programmieren in Z80 und brauche dafür einen möglichst unabhängigen 16Bit counter. Haben wir nicht irgendwo im RAM einen Frameticker oder so, den ich nur auslesen muss, der automatisch hochzählt per Interupt? Interupts bleiben bei mir an. Ich kann natürlich auch selbst was aufsetzen, aber a) weiß ich gerade nicht wie das geht mit der Firmware (Frame Fly Ticker oder so), und b) könnte ich natürlich in meiner Anwendung in der "Hauptschleife" einen Zähler aufsetzen, aber schöner wäre halt wenn ich einen schon existierenden Interupt-Counter verwenden könnte der bereits von der Firmware aufgesetzt wurde. Der Kernel sollte doch sowas irgendwo haben? :)
Title: Re: Counter gesucht
Post by: TFM on 22. June 2021, 22:59:17
Guck im Systembuch mal nach denen hier:

&BCE0 KL NEW FAST TICKER

&BCE3 KL ADD FAST TICKER

&BCE6 KL DEL FAST TICKER
Title: Re: Counter gesucht
Post by: LambdaMikel on 22. June 2021, 23:49:23
Ja ok, aber die muss ich ja selbst aufsetzen. Ich dachte, evtl. gibt's im RAM schon ne Addresse wo gezählt wird und die müsste ich nur auslesen dann? Wenn nicht, auch kein Problem, kann ich ja machen.

EDIT: OK, habe mal alle RAM-Addressen mit "count" im Namen aus hier angesehen:
http://www.cantrell.org.uk/david/tech/cpc/cpc-firmware/firmware.pdf

Da scheint wirklich keiner "automatisch zu zählen"  :gruebel:
Title: Re: Counter gesucht
Post by: Shining on 23. June 2021, 09:33:34
Im CPC ist ein 32-Bit Zähler. Reicht dir der?

Unter Basic ist das der mit dem Befehl TIME.

In ASM:

BD0D KL TIME PLEASE

Erfrage den Stand des Interrupt-Zählers
Eingaben: keine
Ausgaben: DEHL enthält die Zeit in 1/300stel Sekunden
Unverändert: AF,BC,IX,IY
Für allgemeine Zeitmessungen lohnt es sich oft nicht, den CPC mit der Rechenzeit
für einen Eventblock zu belasten. Verbrauchte Zeit lässt sich mit diesem Vektor
bequem feststellen. In Basic wird dieser Vektor für die reservierte Variable 'TIME'
benutzt. Da dieser Zähler bei jedem Hardware-Interrupt weitergestellt wird, leidet
seine Genauigkeit mit jedem Kassetten- oder Diskettenzugriff.


BD10 KL TIME SET

Stelle den Interrupt-Zähler auf einen neuen Startwert
Eingaben: DEHL enthält den neuen Wert für den Interrupt-Zähler
Ausgaben: keine
Unverändert: BC,DE,HL,IX,IY
Der Zähler lässt sich auch stellen, um ihn beispielsweise an die Datums- und
Uhrzeit-Eingabe in einem Programm anzupassen. Der gesamte Zeit-Messumfang
des 4-Byte Zählers umfasst etwa 165 Tage.
Title: Re: Counter gesucht
Post by: LambdaMikel on 25. June 2021, 05:21:24
Prima, besten Dank! Genau was ich suche!