Hallo Besucher, der Thread wurde 2,1k mal aufgerufen und enthält 10 Antworten

letzter Beitrag von GoDot am

Geburtstagsabfrage in Basic

  • 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 :)

  • 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.

  • 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:

  • 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.

    https://www.c64-wiki.de/wiki/CIA

    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]

    "Wenn du überredet, ermahnt, unter Druck gesetzt, belogen, durch Anreize gelockt, gezwungen, gemobbt, bloßgestellt, beschuldigt, bedroht, bestraft und kriminalisiert werden musst. Wenn all dies als notwendig erachtet wird, um deine Zustimmung zu erlangen, dann kannst du absolut sicher sein, dass das, was angepriesen wird, nicht zu deinem Besten ist." - Quelle unbekannt.


    "Steve Jobs hat User hervorgebracht, Jack Tramiel Experten." - Quelle unbekannt.

    "Mein Herr, ich teile Ihre Meinung nicht, aber ich würde mein Leben dafür einsetzen, dass Sie sie äußern dürfen." - Voltaire.

    "Diskutiere nie mit einem Idioten - er zieht dich auf sein Niveau hinunter und schlägt dich dort mit seiner Erfahrung!" - Volksweisheit.


    Einmal editiert, zuletzt von kinzi ()

  • 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.