Geburtstagsabfrage in Basic

Es gibt 10 Antworten in diesem Thema, welches 2.658 mal aufgerufen wurde. Der letzte Beitrag (6. April 2018 um 12:09) ist von GoDot.

  • Liebe Coder-Gemeinde,

    Mein Ziel ist es in Basic ein Mini-Programm für eine Geburtstagsabfrage zu erstellen.
    Was mir dazu noch fehlt, ist eine Möglichkeit, wie man aus Basic das aktuelle Datum abfragen kann.
    Aus dem (viel unterschätzten) C64 Bedienungshandbuch, hab ich lediglich rauslesen können, dass man mit der Variablen TI$ die aktuelle Uhrzeit abfragen kann.
    Wie sieht es aber mit dem aktuellen Tag aus?
    Kann mir jemand Optionen für mein Problem nennen?

    Vielen Dank im Voraus :)

  • Die Variable Ti$ zählt nur die Zeit seit dem Einschalten des Geräts und auch das nicht vollständig, weil die Zählung unterbrochen werden kann.

    Da der C64 keine Echtzeituhr an Bord hat, frage ich mich gerade warum Du davon ausgehst, dass Du Datum und Uhrzeit abfragen kannst?

  • Einfach ein SD2IEC mit Real Time Clock Chip anschaffen.
    Dann kann man Zeit/Datum einfach daraus auslesen und hat auch noch einen sehr nützlichen Massenspeicher.

    LIFE IS SHORT - Break the rules, do more, need less, smile often, be brave, stay true, dream big, forgive quickley, kiss slowly, love truly, laugh uncontrollably and never regret anything that made you smile.

  • VICE bietet die Möglichkeit einen DS12C887 RTC zu aktivieren.
    Wie kann man den in BASIC auslesen?

    Bitte melde dich an, um diesen Link zu sehen.
    Bitte melde dich an, um diesen Link zu sehen. / Bitte melde dich an, um diesen Link zu sehen.

    Nichts hält länger als ein Provisorium

  • VICE bietet die Möglichkeit einen DS12C887 RTC zu aktivieren.
    Wie kann man den in BASIC auslesen?

    Ein Blick in den Source sagt: man POKEt die Nummer des gewünschten Registers an die gewählte Basisadresse (z.B. $de00) und kann den Wert des Registers dann aus "Basisadresse+1" (also $de01) PEEKen bzw. per POKE verändern. Mögliche Register:

    Yes, I'm the guy responsible for the Bitte melde dich an, um diesen Link zu sehen. cross assembler. And some Bitte melde dich an, um diesen Link zu sehen..

  • Hallo Flo1975!

    Wie schon geschrieben bietet der C64 ohne zusätzliche Hardware keine bateriegepufferte Echtzeituhr. Also musst du dem Brotkasten beim Start deines Geburtstasgsprogramms erstmal die aktuelle Zeit "anlernen".
    Die aktuelle Tagezeit kannst du in der Systemvariable TI$ definieren. Z. B. TI$="104051" bedeutet es ist 10 Uhr 40 und 51 Sekunden. Nach TI$="235959", also 23 Uhr 59 und 59 Sekunden wird TI$ auf "000000" zurückgesetzt. Das muss dein Programm abfangen um das Datum hochzuzählen. Für Jahr, Monat und Tag musst du selbst ein Workaround schreiben.

    Wie auch schon gesagt arbeiten die Systemvariablen TI$ und TI ungenau, da die von gewissen Eigenarten des C64 "ausgebremst" werden.

    Hier noch ein in 5 Minuten zusammengeschusteres Beispielprogramm. Es werden keine Falscheingaben abgefangen und das oben genannte Jahr-Monat-Tag-Workaraund fehlt.

    10 input"jahr";ja$
    20 input"monat (01-12)";mo$
    30 input"tag (01-31)";ta$
    40 input"stunde (00-23)";st$
    50 input"minute (00-60)";mi$
    90 ti$=st$+mi$+"00"
    99 print"{clr}"
    100 print"{home}heute ist der ";ta$;".";mo$;".";ja$
    120 print"es ist ";ti$;" uhr"
    130 goto 100

  • Danke für Eure Kommentare und Hilfestellungen.
    Ich habe schon befürchtet, dass dies etwas aufwendiger sein würde.
    Wollte von Euch Profis eine Bestätigug haben, dass es da keinen einfacheren Trick gibt.
    Werde mich nun hinsetzen, und mir eine Option (analog von LordRudi) überlegen.
    VICE scheidet leider aus, da ich die Umsetzung gerne auf dem richtigen Brotkasten und ohne Zusatz-HW realisieren würde.
    Auch wenn ich dafür nach jedem Start eine Datumsabfrage integrieren muss.

    Herzlichen Dank nochmal an alle für Euer schnelles Feedback.

    Top Community :thumbsup:

  • Bevor du "von Hand" was zum Thema Datum drumrumprogrammierst, schau dir doch mal die Echtzeituhr in den CIAs an: Wenn du da einmalig Datum und Zeit beim Programmstart reinschreibst, hast du eine sehr genaue Uhr samt korrektem Datum, solange der C64 läuft; im Gegensatz zu TI$, das nur ungenau läuft.

    Bitte melde dich an, um diesen Link zu sehen.

    Die CIAs kannst du von BASIC aus mit ein paar POKEs programmieren und mit ein paar PEEKs auslesen.

    [edit]

    Früh am Morgen und keinen Kaffee, da kommt nur Blödsinn raus. :( Sorry!
    Die CIAs haben kein Datum.

    [/edit]


  • Hi kinzi,

    kein Thema.
    Wollte dich gerade fragen, ob ich etwas überlesen habe, da "Time Of Day" [Takteingang für Echtzeituhr (50/60Hz)], sich auf den aktuellen Tag bezieht, und nach 12 Stunden das PM-Flag invertiert wird.

    Aber trotzdem Danke. Ich freue mich über jede Anregung - mit oder ohne Kaffee. ^^

  • Natürlich kann man zum genauren Timing auch die CIA-Timer auslesen. Aber ich denke mal, daß in deinem Fall die Basic-Timer ausreichen sollten ;) Es soll wohl nicht bruchteil-sekundengenau sein...

    Zur Kalender-Programmierung gibt es im Netz sicherlich tausende Programmierbeispiele in jeglichen Programmiersprachen. Im CBM-Basic gab es das damals öffter in Zeitschriften wie der 64´er.

  • in Zeitschriften wie der 64´er.

    Zum Beispiel in der GO64 als Programmierkurs. (Weiß aber die Ausgaben nicht mehr...)

    Arndt

    GoDot C64 Image Processing
    Bitte melde dich an, um diesen Link zu sehen. - Bitte melde dich an, um diesen Link zu sehen. - Bitte melde dich an, um diesen Link zu sehen.
    Bitte melde dich an, um diesen Link zu sehen. - Bitte melde dich an, um diesen Link zu sehen. - Bitte melde dich an, um diesen Link zu sehen.