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:

    10.11. defektes µT RAM im Apple //e ersetzt

    10.11. defektes µT RAM im Atari 130XE ersetzt

    12.11. VC20 mit black screen: defekter Videotransistor ersetzt

  • 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
    JSR $1EFE
            BEQ NoKey; Springe wenn ZERO-Flag gesetzt (Akku = 0)
    
            ; Taste auswerten
    
    
    NoKey   ; keine Taste gedrückt


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

    Einmal editiert, zuletzt von Stefan67 ()

  • 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

    »It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration.« (Edsger W. Dijkstra)


    Homespage| Computerarchäologie | Blog | Forschung

  • 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
    XOR A ; 1 Byte, 4 Taktzyklen


    Beim 6502:

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