2000 4a0b 0000 T ... 6502-KURZBESCHR.
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*                                                                     *
*               KURZBESCHREIBUNG ZUM PROZESSOR 6502                   *
*                                                                     *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

Dieser Mikroprozessor 6502 ist ein LSI Schaltkreis in NMOS-Technologie
mit 8 Bit Datenbreite. Im Vergleich zum Z80 zeichnet er sich weniger
durch eine Vielzahl von Registern und verfuegbaren internen Operationen
aus, sondern eher durch effektive Adressierungsarten und eine hochent-
wickelte BCD-Arithmetik. 1983 hatte er einen Anteil von 34% aller 8 bit
Prozessoren. Der 6502 ist aufwaertskompatibel zum 16 bit Bus der 68000-
Familie.

REGISTERSATZ

     A  Akkumulator
     Y  Indexregister
     X  Indexregister
     PC Befehlszaehler
     S  Stackpointer
     P  Processor Status Register

Aufbau des Registors P
----------------------

  Bit   7  N  Negativ-Bit
        6  V  Ueberlauf-Bit
        5
        4  B  BREAK-Flag
        3  D  Dezimalmodus
        2  I  Interrupt Flag
        1  Z  Zero
        0  C  Carry

ADRESSIERUNGSARTEN
------------------
Accumulator (Acc)              Ein-Byte Befehl, Inhalt von A betreffend
Immediate (Imm)                Zweites Byte enthaelt Konstante als
                               Operanden
Absolute (Abs)                 Zweites Byte gibt niederwertiges, das
                               dritte hoeherwertiges Byte einer
                               Arbeitsadresse an
Zero Page (ZP)                 Kurzform, zweites Byte enthaelt Adresse
                               in Seite Null
Indexed Absolute (Abs X o. Y)  Adresse wird durch Addition des X oder
                               Y Register-Inhaltes zur angegebenen
                               Adresse gebildet(low,high)
Indexed Zero Page (ZP,X o. Y)  Kurzform, Adresse in Seite Null
Implied (Ipl)                  Im Code ist Angabe des Operanden
                               implizit enthalten
Relative (Rel)                 2.Byte gibt Abstand zum Sprungziel an
                               (Zweierkomplement)
Absolute Indirect (Ind)        Angegebene Adr. weist auf Speicherzelle,
                               in der niederw. Byte eines Sprungzieles
                               steht, hoeherw. Byte in folg. Zelle
Indexed Indirect (Ind,X)       Die Summe aus dem zweiten Byte des
                               Befehls und dem Inhalt des X Registers
                               zeigt auf erste zweier aufeinanderfol-
                               gender Zellen in Seite Null, welche die
                               Arbeitsadresse enthalten
Indirect Indexed ((Ind),Y)     2. Byte zeigt auf erste von zwei Zellen
                               in Seite 0 die eine Adresse enthalten;
                               Addition von Y ergibt Arbeitsadresse

BEFEHLSSATZ
-----------

Mnemonic                       Aktion

ADC  Add with Carry            A+M+C->A
AND  Logical AND               A^B->A
ASL  Arithmetic Shift Left
BCC  Branch on Carry Clear     Verzweige falls C=0
BCS  Branch on Carry Set       Verzweige falls C=1
BEQ  Branch on Result Zero     Verzweige falls Z=1
BIT  Test Bits                 M7->N;M6->V;A^M und aktualisiere Z
BMI  Branch on Result Minus    Verzweige falls N=1
BNE  Branch on Result not 0    Verzweige falls Z=0
BPL  Branch on Result Plus     Verzweige falls N=0
BRK  Force Break               PC+2;P->STACK;B=1,(FFFE,FFFF)->PC
BVS  Branch on Overflow Clear  Verzweige falls V=0
BVS  Branch on Overflow Set    Verzweige falls V=1
CLC  Clear Carry Flag          0->C
CLD  Clear Decimal Mode        0->D
CLI  Clear Interrupt Mask      0->I
CLV  Clear Overflow Flag       0->V
CMP  Compare with Accumulator  A-M und aktualisiere N,Z,C
CPX  Compare with X Register   X-M und aktualisiere N,Z,C
CPY  Compare with Y Register   Y-M und aktualisiere N,Z,C
DEC  Decrement Memory          M-1->M
DEX  Decrement X Register      X-1->X
DEY  Decrement Y Register      Y-1->Y
EOR  Logical Exclusive OR      A M->A
INC  Increment Memory          M+1->M
INX  Increment X Register      X+1->X
INY  Increment Y Register      Y+1->Y
JMP  Jump to new location      ADDRESS->PC
JSR  Jump to Subroutine        PC+2->STACK;ADDRESS->PC
LDA  Load Accumulator          M->A
LDX  Load X Register           M->X
LDY  Load Y Register           M->Y
LSR  Logical Shift Rigth
NOP  No Operation              keine
ORA  Logical OR                A M->A
PHA  Push Accumulator          A->STACK;SP-1->SP
PHP  Push Processor Status     P->STACK;SP-1->SP
PLA  Pull Accumulator          STACK->A;SP+1->SP
PLP  Pull Processor Status     STACK->P;SP+1->SP
ROL  Rotate Left
ROR  Rotate Right
RTI  Return from Interrupt     STACK->P;SP+1->SP;STACK->PC;SP+2->SP
RTS  Return from Subroutine    STACK+1->PC;SP+2->SP
SBC  Subtract with Carry       A-M-C->A
SEC  Set Carry Flag            1->C
SED  Set Decimal Mode          1->D
SEI  Set Interrupt Flag        1->I
STA  Store Accumulator         A->M
STX  Store X Register          X->M
STY  Store Y Register          Y->M
TAX  Transfer Acc to X Reg     A->X
TAY  Transfer Acc to Y Reg     A->Y
TSX  Transfer PSR to X Reg     P->X
TXA  Transfer X Reg to Acc     X->A
TYA  Transfer Y Reg to Acc     Y->A
TXS  Transfer X Reg to PSR     X->P

CODE MATRIX
-----------

      0     1     2    4   5    6    8    9    A    C     D     E
    ---------------------------------------------------------------
    |BRK|  ORA  |   |    |ORA |ASL |PHP| ORA |ASL|     | ORA | ASL |
 0  |Ipl|(Ind,X)|   |    | ZP | ZP |Ipl| Imm |Acc|     | Abs | Abs |
    |1 7|  2 6  |   |    |2 3 |2 5 |1 3 |2 2 |1 2|     | 3 4 | 3 6 |
    ----------------------------------------------------------------
    |BPL|  ORA  |   |    |ORA |ASL |CLC| ORA |   |     | ORA | ASL |
 1  |Rel|(Ind),Y|   |    |ZP,X|ZP,X|Ipl|Abs,Y|   |     |Abs,X|Abs,X|
    |2 2|  2 5  |   |    |2 4 |2 6 |1 2| 3 4 |   |     | 3 4 | 3 7 |
    ----------------------------------------------------------------
    |JSR|  AND  |   |BIT |AND |ROL |PLP| AND |ROL| BIT | AND | ROL |
 2  |Abs|(Ind,X)|   | ZP | ZP | ZP |Ipl| Imm |Acc| Abs | Abs | Abs |
    |3 6|  2 6  |   |2 3 |2 3 |2 5 |1 4| 2 2 |1 2| 3 4 | 3 4 | 3 6 |
    ----------------------------------------------------------------
    |BMI|  AND  |   |    |AND |ROL |SEC| AND |   |     | AND | ROL |
 3  |Rel|(Ind),Y|   |    |ZP,X|ZP,X|Ipl|Abs,Y|   |     |Abs,X|Abs,X|
    |2 2|  2 5  |   |    |2 4 |2 6 |1 2| 3 4 |   |     | 3 4 | 3 7 |
    ----------------------------------------------------------------
    |RTI|  EOR  |   |    |EOR |LSR |PHA| EOR |LSR| JMP | EOR | LSR |
 4  |Ipl|(Ind,X)|   |    | ZP | ZP |Ipl| Imm |Acc| Abs | Abs | Abs |
    |1 6|  2 6  |   |    |2 3 |2 5 |1 3| 2 2 |1 2| 3 3 | 3 4 | 3 6 |
    ----------------------------------------------------------------
    |BVC|  EOR  |   |    |EOR |LSR |CLI| EOR |   |     | EOR | LSR |
 5  |Rel|(Ind),Y|   |    |ZP,X|ZP,X|Ipl|Abs,Y|   |     |Abs,X|Abs,X|
    |2 2|  2 5  |   |    |2 4 |2 6 |1 2| 3 4 |   |     | 3 4 | 3 7 |
    ----------------------------------------------------------------
    |RTS|  ADC  |   |    |ADC |ROR |PLA| ADC |ROR| JMR | ADC | ROR |
 6  |Ipl|(Ind,X)|   |    | ZP | ZP |Ipl| Imm |Acc| Ind | Abs | Abs |
    |1 6|  2 6  |   |    |2 3 |2 5 |1 4| 2 2 |1 2| 3 5 | 3 4 | 3 6 |
    ----------------------------------------------------------------
    |BVS|  ADC  |   |    |ADC |ROR |SEI| ADC |   |     | ADC | ROR |
 7  |Rel|(Ind),Y|   |    |ZP,X|ZP,X|Ipl|Abs,Y|   |     |Abs,X|Abs,X|
    |2 2|  2 5  |   |    |2 4 |2 6 |1 2| 3 4 |   |     | 3 4 | 3 7 |
    ----------------------------------------------------------------
    |   |  STA  |   |STY |STA |STX |DEY|     |TXA| STY | STA | STX |
 8  |   |(Ind,X)|   | ZP | ZP | ZP |Ipl|     |Ipl| Abs | Abs | Abs |
    |   |  2 6  |   |2 3 |2 3 |2 3 |1 2|     |1 2| 3 4 | 3 4 | 3 4 |
    ----------------------------------------------------------------
    |BCC|  STA  |   |STY |STA |STX |TYA| STA |TXS|     | STA |     |
 9  |Rel|(Ind),Y|   |ZP,X|ZP,X|ZP,Y|Ipl|Abs,Y|Ipl|     |Abs,X|     |
    |2 2|  2 6  |   |2 4 |2 4 |2 4 |1 2| 3 5 |1 2|     | 3 5 |     |
    ----------------------------------------------------------------
    |LDY|  LDA  |LDX|LDY |LDA |LDX |TAY| LDA |TAX| LDY | LDA | LDX |
 A  |Imm|(Ind,X)|Imm| ZP | ZP | ZP |Ipl| Imm |Ipl| Abs | Abs | Abs |
    |2 2|  2 6  |2 2|2 3 |2 3 |2 3 |1 2| 2 2 |1 2| 3 4 | 3 4 | 3 4 |
    ----------------------------------------------------------------
    |BCS|  LDA  |   |LDY |LDA |LDX |CLV| LDA |TSX| LDY | LDA | LDX |
 B  |Rel|(Ind),Y|   |ZP,X|ZP,X|ZP,Y|Ipl|Abs,Y|Ipl|Abs,X|Abs,X|Abs,Y|
    |2 2|  2 5  |   |2 4 |2 4 |2 4 |1 2| 3 4 |1 2| 3 4 | 3 4 | 3 4 |
    ----------------------------------------------------------------
    |CPY|  CMP  |   |CPY |CMP |DEC |INY| CMP |DEX| CPY | CMP | DEC |
 C  |Imm|(Ind,X)|   | ZP | ZP | ZP |Ipl| Imm |Ipl| Abs | Abs | Abs |
    |2 2|  2 6  |   |2 3 |2 3 |2 5 |1 2| 2 2 |1 2| 3 4 | 3 4 | 3 6 |
    ----------------------------------------------------------------
    |BNE|  CMP  |   |    |CMP |DEC |CLD| CMP |   |     | CMP | DEC |
 D  |Rel|(Ind),Y|   |    |ZP,X|ZP,X|Ipl|Abs,Y|   |     |Abs,X|Abs,X|
    |2 2|  2 5  |   |    |2 4 |2 6 |1 2| 3 4 |   |     | 3 4 | 3 7 |
    ----------------------------------------------------------------
    |CPX|  SBC  |   |CPX |SBC |INC |INX| SBC |NOP| CPX | SBC | INC |
 E  |Imm|(Ind,X)|   | ZP | ZP | ZP |Ipl| Imm |Ipl| Abs | Abs | Abs |
    |2 2|  2 6  |   |2 3 |2 3 |2 5 |1 2| 2 2 |1 2| 3 4 | 3 4 | 3 6 |
    ----------------------------------------------------------------
    |BEQ|  SBC  |   |    |SBC |INC |SED| SBC |   |     | SBC | INC |
 F  |Rel|(Ind),Y|   |    |ZP,X|ZP,X|Ipl|Abs,Y|   |     |Abs,X|Abs,X|
    |2 2|  2 5  |   |    |2 4 |2 6 |1 2| 3 4 |   |     | 3 4 | 3 7 |
    ----------------------------------------------------------------





        1       Code:                           A1
    ---------
    |  LDA  |   Mnemonic:                       Load Accumulator
 A  |(Ind,X)|   Adressierung:                   Indexed Indirect
    |  2 6  |   Azahl Bytes, Maschinenzyklen:   2,6
    --------

BEMERKUNG:
----------
Der Prozessor hat einen Maskenfehler. Ist das zweite Byte in einem
indirekten Sprungbefehl gleich FF, so wird falsch adressiert.
Beispiel: Der Code fuer JMP (07FF) ist 6C FF 07. Die Zieladresse
muesste aus den Zellen 07FF und 0800 geholt werden. Der Prozessor
liest indessen 07FF und 0700.


QUELLENVERZEICHNISS
-------------------
Kleincomputerfibel   von J. Groh   Akademie-Verlag Berlin 1986

printet by:   C O M P U T E R D R U C K 
              Ultn. Kretschmer, Andreas
              PSF 31212/H5  Wolfen 4440