Hello, Guest the thread was called1.1k times and contains 47 replays

last post from Hucky at the

$DC09 - $DC0B (Echtzeituhr) spinnt

  • Mahlzeit...

    Ich bastel ein bischen mit der Echtzeituhr rum.

    Um z.B den Minutenwert in zwei Bytes anzeigen zu lassen mache ich nun folgendes:


    LDA DC09

    AND #0F

    STA 4001

    LDA DC09

    AND #F0

    ROR

    ROR

    ROR

    ROR

    STA 4000


    Das lasse ich im Interrupt laufen.


    Die Echtzeituhr läuft - und eigentlich sollten mir jetzt die Minuten ab $4000 angezeigt werden.

    Geht nicht :thumbdown:

    Lasse ich z.B. in $5000 den Wert mittels INC im Interrupt hochlaufen (anstelle $DC09) funzt es.


    Bin ich zu doof ?


    Ich muss doch ganz normal den Bereich $DC09-$DC0B auslesen können ?

    Arcade: Twinliner, Fashion Vision,
    "Cosmic Guerilla" cocktail table
    Pins: Bride Of Pinbot + Jack*Bot
    C64, C65, C66, Gammel+Mist...

  • Ich würde statt ROR lieber LSR nehmen, sonst schiebst Du Dir das Carryflag, das evtl. vorher gesetzt war in das High Nibble. Dann kannst Du Dir übrigens auch das AND #$F0 sparen, da das niedrige Nibble ja ins Nirvana rausgeschoben wird.


    Ansonsten ist "geht nicht" zu unkonkret, was passiert denn? Und was erwartest Du?

    ────────────────────────────────────────────────────────────
    Time of Silence - Time of Silence 2 Development Blog
    ────────────────────────────────────────────────────────────

  • $01 ist hoffentlich so gesetzt hast, dass I/O und nicht RAM eingeblendet wird.
    Und ja, aufpassen mit Carry.
    Wenn du ganz sicher sein willst, ob da hardware-seitig was spinnt, einfach mal in BASIC


    Code
    1. 10 PRINT TI$:GOTO 10
    2. RUN

    wenn das tut, was es soll, spinnt höchstens dein Code :P

  • ich hab mal nen kurzes Video gemacht...

    Claus

    Du hast mit dem LSR natürlich Recht. Ich bin über 10 Jahre raus :roll:

    Das hier habe ich im IRQ laufen:

    Eigentlich sollte DC09 als High und Low Nibble in 4000+40001 angezeigt werden.

    Wie im Video zu sehen ist - nix.

    Oder muss ich in $01 ne #34 reinschreiben ?(

    Aber dann habe ich doch das RAM unter dem Portgate. Da kann doch nichts drin stehen ?:gruebel

    Arcade: Twinliner, Fashion Vision,
    "Cosmic Guerilla" cocktail table
    Pins: Bride Of Pinbot + Jack*Bot
    C64, C65, C66, Gammel+Mist...

  • Das Auslesen des Stundenregisters ($dc0b) entkoppelt die Register von der Uhr, das Auslesen der Zehntelsekunden ($dc08) stellt die Kopplung wieder her. Also Stunden/Minuten/Sekunden/Zehntel immer in dieser Reihenfolge lesen!

  • probier ich aus...

    Komme wohl erst heute abend, oder morgen abend dazu...

    Hab halt angenommen, dass man einfach die Werte ab $DC08 "spiegeln" kann.

    Wie es halt mit "normalen" Speicherbereich funktioniert.

    Arcade: Twinliner, Fashion Vision,
    "Cosmic Guerilla" cocktail table
    Pins: Bride Of Pinbot + Jack*Bot
    C64, C65, C66, Gammel+Mist...

  • Na sowas, da hab ich auch mal was neues gelernt :thumbup:. Liegt wohl daran, dass ich die Echtzeituhr in meinem Leben noch nie verwendet habe... ^^

    ────────────────────────────────────────────────────────────
    Time of Silence - Time of Silence 2 Development Blog
    ────────────────────────────────────────────────────────────

  • Die Uhr spinnt weiter :facepalm:

    AM/PM macht nicht das was es soll.

    Fütter ich die Stunden mit einem Wert zwischen 1 und 9 wird das 7.Bit in €DC0B auf 0 gesetzt.

    springt die Uhr auf 10,11,12 oder starte ich die Stunden mit 10,11,12 ist das Bit gesetzt. Wechselt die Uhr von 12 auf 1 wird es gelöscht.

    Vielleicht hat ja wer ne Idee ob und was man bei dem beschriebenen Bit genau beachten muss.

    Ich hab keinen Plan warum das nicht so funzt wie ich das gerne hätte.

    Ich habe eine Idee wie ich es lösen kann - mit dem Bit wäre es halt wesentlich einfacher.

    Vlt. liegt es auch an VICE dass es nicht funzt ?(

    Arcade: Twinliner, Fashion Vision,
    "Cosmic Guerilla" cocktail table
    Pins: Bride Of Pinbot + Jack*Bot
    C64, C65, C66, Gammel+Mist...

    Edited 2 times, last by Hucky ().

  • Kann ich hier nicht nachvollziehen...


    Ich hab dir mal Code angehängt der hier Funktioniert, die Uhr läuft korrekt weiter.


    Ich setze das AM/PM Flag per ORA #80 / AND #7F

  • es liegt evtl. da dran, dass ich das Bit in einem zweiten Schritt gesetzt habe.

    Theoretisch müsste es doch auch funktionieren wenn man

    LDA#89

    STA$DCOB

    macht ?!

    ist doch im Prinzip das gleiche wie

    LDA#09

    ORA#80

    STA$DC0B


    Ich hatte noch folgendes probiert:

    LDA#09

    STA$DC0B

    LDA$DC0B

    ORA#80

    STA$DC0B

    Ist doch alles gleich, oder nicht ? ?(


    Um das Bit auslesen zu können würde ich gerne folgendes machen:

    LDA$DC0B

    STA$4000

    .

    .

    .

    CLC

    LDA$4000

    AND#80

    ROL

    BCS XXXX

    LDA#00

    JMP YYYY

    LDA#01 : XXXX

    STA$ "Carry" : YYYY


    So sollte ich doch dann einen Wert in der Speicherstelle "Carry" haben ob die Uhr in AM (#00) oder PM(#01) läuft ?!

    Arcade: Twinliner, Fashion Vision,
    "Cosmic Guerilla" cocktail table
    Pins: Bride Of Pinbot + Jack*Bot
    C64, C65, C66, Gammel+Mist...

  • EDIT: viel zu langsam

    springt die Uhr auf 10,11,12 oder starte ich die Stunden mit 10,11,12 ist das Bit gesetzt.

    Sicher, dass Dein Auslesecode korrekt ist? Ein einfacher Basic-Test hat hier das erwartete Verhalten gezeigt.


    Und überprüf mal, ob Du wirklich BCD benutzt hast. Wenn man z.B. die Stunden auf "10" setzen will, kann man sich da ja leicht vertun und den Dezimalwert 10 nehmen, obwohl es in diesem Fall $10 sein muss.

    (Interessant, gerade in VICE am Sekundenregister getestet: schreibt man 10 statt $10, zählt das Register brav hoch auf 11, 12, 13, 14, 15 und wrappt dann zu 0!)


    Zu AM/PM muss man eigentlich nur zwei Sachen wissen:

    1. AM/PM ändert sich immer beim Übergang von 11:59:59.9 zu 12:00:00.0 (nicht erst beim Wraparound von 12:59:59.9 zu 1:00:00.0, wie man als 24-Stunden-Zeitangaben-gewohnter Mensch vielleicht vermuten könnte).

    2. Die CIA hat den bekannten Bug, dass das AM/PM-Flag sich nicht nur beim "Ticken" der Uhr ändert, sondern auch beim Beschreiben der Register. Schreibt man 12:00:00.0 AM, geht die Uhr sofort auf 12:00:00.0 PM, und umgekehrt. Alle anderen Uhrzeiten sind natürlich kein Problem.

  • Mac Bacon

    Ich hab die "Labels" da nur neben geschrieben weil ohne Adressen sonst kein Bezug wäre.

    Ich code mit SMON :D

    Da gibts keine Labels ^^

    Also den Wert für die 10. Stunde hab ich wohl schon in HEX eingegeben.

    LDA#10 (Dezimal 16)

    STA$DC0B

    Wenn ich jetzt nicht total verpeilt bin.

    Die Uhr läuft ja auch schon mit 5x7 Pixel grossen Zahlen.

    Das Ding soll mir halt nur 00:00:00 bis 23:59:59 anstelle 2x 12:00:00 bis 11:59:00 anzeigen. Deswegen möchte ich im IRQ unter anderem auch das AM/PM Bit auslesen.

    Vorraussetzung ist natürlich dass das Bit beim starten der Uhr auch vernünftig gesetzt wird :rolleyes:

    Arcade: Twinliner, Fashion Vision,
    "Cosmic Guerilla" cocktail table
    Pins: Bride Of Pinbot + Jack*Bot
    C64, C65, C66, Gammel+Mist...

  • Was mich leicht irritiert, ist dass Du bei den Adressen immer schön ein $ für Hex davorschreibst, bei den Parametern für LDA aber nicht. Vielleicht nur falsch abgeschrieben, oder verwendest Du da evtl. versehentlich Dezimalwerte?


    EDIT: wahrscheinlich ist das nicht das Problem, smon kann ja glaube ich gar keine Dezimalzahlen... :platsch:

    ────────────────────────────────────────────────────────────
    Time of Silence - Time of Silence 2 Development Blog
    ────────────────────────────────────────────────────────────

  • das ist bei SMON so.

    $ hab ich nur hier hingeschrieben

    Wird bei SMON weggelassen.

    Also Adressen ohne $. SMON macht das automatisch.

    Ich geb z.B auch LDA#1B ein. Ist Hex

    Sorry für die Verwirrung :rolleyes:

    Arcade: Twinliner, Fashion Vision,
    "Cosmic Guerilla" cocktail table
    Pins: Bride Of Pinbot + Jack*Bot
    C64, C65, C66, Gammel+Mist...

    Edited once, last by Hucky ().

  • Das Ding soll mir halt nur 00:00:00 bis 23:59:59 anstelle 2x 12:00:00 bis 11:59:00 anzeigen. Deswegen möchte ich im IRQ unter anderem auch das AM/PM Bit auslesen.

    Ich hab mal auf die Schnelle was zusammengeworfen (ungetestet):

    Das Ergebnis kannst Du dann in Nibbles aufsplitten und als separate Ziffern anzeigen (wenn ich mich nicht furchtbar vertan habe).