Diskussion:HSG

Aus C64-Wiki
Zur Navigation springenZur Suche springen

TOD-Messung[Quelltext bearbeiten]

Die Quelle ist offenbar für eine NTSC-Umgebung, wo eine nicht korrekte initialisierte TOD "zufällig" stimmt (ungesetztes Bit im CIA-Register entspricht 60 Hz). Im PAL-Fall muss aber auf 50 Hz umgeschaltet werden (also die RTC im 60 Hz Modus einen zu geringen Wert liefert).

  • Die Initialisierung setzt das Frequenzbit entsprechend dem PAL/NTSC-Flag in Speicherstelle 678.
  • Die Array-Variable T() ist auch nicht notwendig. Einfach T reicht, nur muss man bei TAND aufpassen, da das mit dem TAN-Token kollidiert, daher die AND-Argumente umgedreht.
  • Die Ausgabe ist falsch, weil nach dem Komma die Zehntelsekunde als Hundertstel angezeigt wird. Korrektur in 250, wo die Sekunden aus Zeichen 1 und 2 und die Zehntelsekunde aus Zeichen 4 zusammengestellt werden. In der Schleife wird nicht mehr das "," eingefügt.

Hier die korrigierte Version:

200 rem:init tod clock
210 fori=2to3:poke56331-i,0:next:poke56334,peek(678)*128+1:return
220 rem:read tod clock
230 tm$="":fori=2to3:t=peek(56331-i)
240 tm$=tm$+chr$(48+(240andt)/16)+chr$(48+(15andt))
250 nexti:tm$=left$(tm$,2)+","+right$(tm$,1):return

Die Tests sollte man noch mal durchlaufen lassen und die Screenshots korrigieren. --JohannKlasek (Diskussion) 11:48, 22. Mär. 2022 (CET)

Diese Zeitmessungs-Routine funktioniert nun. Nur aus Neugierde, warum nicht einfach
210 TI$="000000":RETURN
und
230 TM$=STR$(TI/60):RETURN
Die Systemvariable TI ist zwar nicht so exakt wie die CIA-Timer, was aber für die nur einige Sekunden lange Messung nicht relevant sein sollte. Vermutlich sogar besser, da die CIA-Routine selbst Zeit braucht, insbesondere durch die FOR-Schleife. --Michael.Gentner (Diskussion) 14:02, 22. Mär. 2022 (CET)
Die Grafikroutinen verwenden meist als Bitmap das RAM unter dem ROM, weshalb die Routinen den Interrupt blockieren. Bei kurzen Blockaden geht ein Jiffy-Tick zwar nicht verloren, aber wenn hier länger gesperrt wird kann das eine oder andere 1/60 schon unter den Tisch fallen. Daher besser nicht viel spekulieren, sondern den TOD-Timer verwenden.
Die FOR-Schleife ist kein Problem und ruft keine Verzögerung hervor, weil beim ersten Registerzugriff auf die TOD-Zeit, die Uhr gelatcht ist - also fürs Auslesen eingefroren ist und erst mit dem Lesen der Zehntelsekunde wieder den nächsten Wert liefert. ;)
--JohannKlasek (Diskussion) 19:27, 22. Mär. 2022 (CET)
Verstehe, danke für die Erläuterungen. :) --Michael.Gentner (Diskussion) 08:50, 23. Mär. 2022 (CET)