Akku im 6502 auf Null testen

  • Liebes Forum,


    beim KIM-1 liefert die Routine AK (aufzurufen per JSR $1EFE) im Akku 0 zurück wenn keine Taste gedrückt wurde. Vom Z80 bin ich es gewohnt, den Akku mit sich selbst zu verORen oder verANDen, weil das effizienter ist als ein CP 0. Muss ich beim 6502 ein CMP #0 durchführen, oder gibt es da auch einen besseren Weg?


    Danke,
    AlMaSys

  • BNE und BEQ sollten gehen, die werten das Zero Flag aus.


    Gruß x1541

    Zuletzt repariert:
    19.11. Toshiba 3,5" Floppy defekter Elko durch Kerko getauscht auf Motorplatine
    27.11. 1541B Dauerlauf, Elko im Resetschaltkreis defekt, nicht der 7406 wie zuerst verdächtigt!
    21.5. PET2001 zweimal 7805 Regler getauscht, 6540-010 durch Adapter ersetzt, sowie 3x 6550

  • Wenn die AK Routine den Inhalt des Akku auf 0 gesetzt hat, ist ebenfalls das ZERO-Flag gesetzt, im weiteren Verlauf (nach dem Aufruf von AK) einfach entsprechend mit dem Ergebnis weiterarbeiten, also zum Beispiel:


    Code
    1. JSR $1EFE
    2. BEQ NoKey; Springe wenn ZERO-Flag gesetzt (Akku = 0)
    3. ; Taste auswerten
    4. NoKey ; keine Taste gedrückt


    Extra vorher den Akku noch mit 0 vergleichen, also "CMP #0" ist nicht nötig.

  • Liebes Forum,


    beim KIM-1 liefert die Routine AK (aufzurufen per JSR $1EFE) im Akku 0 zurück wenn keine Taste gedrückt wurde. Vom Z80 bin ich es gewohnt, den Akku mit sich selbst zu verORen oder verANDen, weil das effizienter ist als ein CP 0. Muss ich beim 6502 ein CMP #0 durchführen, oder gibt es da auch einen besseren Weg?


    Danke,
    AlMaSys


    Ich habe die Frage jetzt so verstanden, dass du wissen möchtest, wie du den Akku auf 0 setzt, oder?


    LDA #0

  • Nein ich denke die Frage ist bereits beantwortet.
    Der 6502 hat tatsaechlich die Eigenheit die Flags IMMER zu setzen, so dass ein CMP #0 entfaellt (es sei denn es folgten andere Operationen wie LDX #2, dann muss man explizit auf CMP #0 testen natuerlich)


  • Ich habe die Frage jetzt so verstanden, dass du wissen möchtest, wie du den Akku auf 0 setzt, oder?
    LDA #0


    Auf den Z80 geprägt wie ich nun mal bin habe ich mich gefragt, ob es beim 6502 einen effizienteren Weg gibt als CMP #0 um den Akku auf 0 zu testen.


    Um den Akku auf 0 zu setzen würde ich bin Z80 ein XOR A verwenden, beim 6502 ist aber der beste Weg schlicht LDA #0?


    Genießt die Sonne,
    AlMaSys

  • Um den Akku auf 0 zu setzen würde ich bin Z80 ein XOR A verwenden, beim 6502 ist aber der beste Weg schlicht LDA #0?


    Ja so ist es.


    Beim Z80:

    Code
    1. XOR A ; 1 Byte, 4 Taktzyklen


    Beim 6502:

    Code
    1. LDA #0 ; 2 Bytes, 2 Taktzyklen


    "XOR" heißt beim 6502 "EOR", und ist dort nicht direkt mit dem Akku bzw. Register selbst möglich, sondern nur mit einer Konstanten oder dem Inhalt einer Adresse.