Je place ici quelques notes sur le Motorola 6809, pour me remettre rapidement dans le bain lorsque je change de processeur.
Registres
- 2 accumulateurs 8 bits A et B, qui peuvent se joindre en un seul accumulateur 16 bits D
- 1 registre d'index X 16 bits
- 1 registre SP (Stack Pointer)
- 1 registre PC (Program Counter)
- 1 registre d'état : 11HINZVC
- 5, H : half carry
- 4, I : interrupt
- 3, N : negative
- 2, Z : zero
- 1, V : overflow
- 0, C : carry
Interruptions
- NMI (Non Maskable Interrupt)
- IRQ1 (Interrupt Request) : pour les périphériques externes
- IRQ2 (Interrupt Request) : pour le timer et l'interface série
IRQ1 a la priorité sur IRQ2.
Vecteurs d’interruptions :
MSB | LSB | Interruption |
---|---|---|
FFFE | FFFF | Reset |
FFFC | FFFD | NMI |
FFFA | FFFB | Software interrupt (SWI) |
FFF8 | FFF9 | IRQ1 |
FFF6 | FFF7 | ICF (Input Capture) |
FFF4 | FFF5 | OCF (Output Compare) |
FFF2 | FFF3 | TOF (Timer Overflow) |
FFF0 | FFF1 | SCI (RDRF + ORFE + TDRE) |
Ensemble des Instructions
Mode d'adressage
- Implied/Inherent : aucune donnée n'est nécessaire
- Immediate : la donnée est dans l'instruction (1 ou 2 octets)
- Direct : la donnée est dans l'octet suivant (1 octet, le poids fort est fixé à $00)
- Extended : la donnée est dans les deux octets suivants (adresse 16 bits)
- Indexed : la donnée est dans la mémoire, à l'adresse donnée par le registre d'index (opérande de 8 bits ajoutée à X)
- Relative : la donnée est dans l'octet suivant, signée (pour les branchements)
Instructions
Opérations à pointeur | Mnemonic | Imm | Dir | Ind | Ext | Inh | Operation | HINZVC |
---|---|---|---|---|---|---|---|---|
Compare Index Reg | CPX | X | X | X | X | X - M : M + 1 | ..!!!! | |
Decrement Index Reg | DEX | X | X - 1-> X | ...!.. | ||||
Decrement SP | DES | X | SP - 1-> SP | ...... | ||||
Increment Index Reg | INX | X | X + 1-> X | ...!.. | ||||
Increment SP | INS | X | SP + 1-> SP | ...... | ||||
Load Index Reg | LDX | X | X | X | X | M -> Xh, M+1 -> Xl | ..!!0. | |
Load SP | LDS | X | X | X | X | M -> SPh, M+1 -> SPl | ..!!0. | |
Store Index Reg | STX | X | X | X | Xh -> M, Xl -> M+1 | ..!!0. | ||
Store SP | STS | X | X | X | SPh -> M, SPl -> M+1 | ..!!0. | ||
Index to Stack | TXS | X | X - 1 -> SP | ...... | ||||
Stack to Index | TSX | X | SP + 1 -> X | ...... | ||||
Add B with X | ABX | X | B + X -> B | ...... | ||||
Push X | PSHX | X | Xl->(SP),SP-1>SP,Xh... | ...... | ||||
Pull X | PULX | X | (SP)+1->SP,Xh->Xh,... | ...... |
Operations Acc. & Mémoire | Mnemonic | Imm | Dir | Ind | Ext | Inh | Operation | HINZVC |
---|---|---|---|---|---|---|---|---|
Add Accumulators | ABA | X | A + B -> A | !.!!!! | ||||
Add B to X | ABX | X | 00:B + X -> X | ...... | ||||
Add A with Carry | ADCA | X | X | X | X | A + M + C -> A | !.!!!! | |
Add B with Carry | ADCB | X | X | X | X | B + M + C -> B | !.!!!! | |
Add with A | ADDA | X | X | X | X | A + M -> A | !.!!!! | |
Add with B | ADDB | X | X | X | X | B + M -> B | !.!!!! | |
Add Double | ADDD | X | X | X | X | D + M:M+1 -> D | ..!!!! | |
And with A | ANDA | X | X | X | X | A & M -> A | ..!!0. | |
And with B | ANDB | X | X | X | X | B & M -> B | ..!!0. | |
Shift Left Arithmetic M | ASL | X | X | B7 dans C, C dans B0 | ..!!!! | |||
Shift Left Arithmetic A | ASLA | X | B7 dans C, C dans B0 | ..!!!! | ||||
Shift Left Arithmetic B | ASLB | X | B7 dans C, C dans B0 | ..!!!! | ||||
Shift Left Arithmetic D | ASLD | X | B15 dans C, C dans B0 ? | ..!!!! | ||||
Shift Right Arithmetic M | ASR | X | X | B0 dans C, B7 dans B7 | ..!!!! | |||
Shift Right Arithmetic A | ASRA | X | B0 dans C, B7 dans B7 | ..!!!! | ||||
Shift Right Arithmetic B | ASRB | X | B0 dans C, B7 dans B7 | ..!!!! | ||||
Bit Test A | BITA | X | X | X | X | A & M, A non modifié | ..!!0. | |
Bit Test B | BITB | X | X | X | X | B & M, B non modifié | ..!!0. | |
Compare A/B with M | CBA | X | A & B, A/B non modifié | ..!!!! | ||||
Clear Memory | CLR | X | X | 00 -> M | ..0100 | |||
Clear A | CLRA | X | 0 -> A | ..0100 | ||||
Clear B | CLRB | X | 0 -> B | ..0100 | ||||
Compare with A | CMPA | X | X | X | X | A - M | ..!!!! | |
Compare with B | CMPB | X | X | X | X | B - M | ..!!!! | |
1's Complement M | COM | X | X | ~M -> M | ..!!01 | |||
1's Complement A | COMA | X | ~A -> A | ..!!01 | ||||
1's Complement B | COMB | X | ~B -> B | ..!!01 | ||||
Decimal Adj. A | DAA | X | Ajustement BCD | ..!!!! | ||||
Decrement M | DEC | X | X | M - 1 -> M | ..!!!. | |||
Decrement A | DECA | X | A - 1 -> A | ..!!!. | ||||
Decrement B | DECB | X | B - 1 -> B | ..!!!. | ||||
Exclusive OR with A | EORA | X | X | X | X | A ^ M -> A | ..!!0. | |
Exclusive OR with B | EORB | X | X | X | X | B ^ M -> B | ..!!0. | |
Increment M | INC | X | X | M + 1 -> M | ..!!!. | |||
Increment A | INCA | X | A + 1 -> A | ..!!!. | ||||
Increment B | INCB | X | B + 1 -> B | ..!!!. | ||||
Load to A | LDAA | X | X | X | X | M -> A | ..!!0. | |
Load to B | LDAB | X | X | X | X | M -> B | ..!!0. | |
Load to D | LDD | X | X | X | X | M:M+1 -> D | ..!!0. | |
Logical Shift Left M | LSL | X | X | B7 dans C, 0 dans B0 | ..!!!! | |||
Logical Shift Left A | LSLA | X | B7 dans C, 0 dans B0 | ..!!!! | ||||
Logical Shift Left B | LSLB | X | B7 dans C, 0 dans B0 | ..!!!! | ||||
Logical Shift Left D | LSLD | X | B15 dans C, 0 dans B0 ? | ..!!!! | ||||
Shift Right Logical M | LSR | X | X | B0 dans C, 0 dans B7 | ..0!!! | |||
Shift Right Logical A | LSRA | X | B0 dans C, 0 dans B7 | ..0!!! | ||||
Shift Right Logical B | LSRB | X | B0 dans C, 0 dans B7 | ..0!!! | ||||
Shift Right Logical D | LSRD | X | B0 dans C, 0 dans B15 ? | ..0!!! | ||||
Multiply | MUL | X | A * B -> D | .....! | ||||
2's Complement M | NEG | X | X | -M -> M | ..!!!! | |||
2's Complement A | NEGA | X | -A -> A | ..!!!! | ||||
2's Complement B | NEGB | X | -B -> B | ..!!!! | ||||
No Operation | NOP | X | ...... | |||||
Logical OR with A | ORAA | X | X | X | X | A | M -> A | |
Logical OR with B | ORAB | X | X | X | X | B | M -> B | |
Push A | PSHA | X | A -> (SP), SP - 1 -> SP | ...... | ||||
Push B | PSHB | X | B -> (SP), SP - 1 -> SP | ...... | ||||
Pull A | PULA | X | SP + 1 -> SP, (SP) -> A | ...... | ||||
Pull B | PULB | X | SP + 1 -> SP, (SP) -> B | ...... | ||||
Rotate Left M | ROL | X | X | C dans B0, B7 dans C | ..!!!! | |||
Rotate Left A | ROLA | X | C dans B0, B7 dans C | ..!!!! | ||||
Rotate Left B | ROLB | X | C dans B0, B7 dans C | ..!!!! | ||||
Rotate Right M | ROR | X | X | C dans B7, B0 dans C | ..!!!! | |||
Rotate Right A | RORA | X | C dans B7, B0 dans C | ..!!!! | ||||
Rotate Right B | RORB | X | C dans B7, B0 dans C | ..!!!! | ||||
Subtract A with B | SBA | X | A - B -> A | ..!!!! | ||||
Subtract with Carry with A | SBCA | X | X | X | X | A - M - C -> A | ..!!!! | |
Subtract with Carry with B | SBCB | X | X | X | X | B - M - C -> B | ..!!!! | |
Store A | STAA | X | X | X | A -> M | ..!!0. | ||
Store B | STAB | X | X | X | B -> M | ..!!0. | ||
Store D | STD | X | X | X | D -> M:M+1 | ..!!0. | ||
Subtract from A | SUBA | X | X | X | X | A - M -> A | ..!!!! | |
Subtract from B | SUBB | X | X | X | X | B - M -> B | ..!!!! | |
Subtract Double | SUBD | X | X | X | X | D - M:M+1 -> D | ..!!!! | |
Transfer A to B | TAB | X | A -> B | ..!!0. | ||||
Transfer B to A | TBA | X | B -> A | ..!!0. | ||||
Test Zero or Minus M | TST | X | X | M, M non modifié | ..!!00 | |||
Test Zero or Minus A | TSTA | X | A, A non modifié | ..!!00 | ||||
Test Zero or Minus B | TSTB | X | B, B non modifié | ..!!00 |
Sauts et Branches | Mnemonic | Dir | Rel | Ind | Ext | Inh | Test | HINZVC |
---|---|---|---|---|---|---|---|---|
Branch Always | BRA | X | ...... | |||||
Branch Never | BRN | X | ...... | |||||
Branch on Carry Clear | BCC | X | C = 0 | ...... | ||||
Branch on Carry Set | BCS | X | C = 1 | ...... | ||||
Branch on Equal | BEQ | X | Z = 1 | ...... | ||||
Branch on Greater or Equal | BGE | X | N ^ V = 0 | ...... | ||||
Branch on Greater | BGT | X | (N ^ V) | Z = 0 | ||||
Branch on Higher | BHI | X | C + Z = 0 | ...... | ||||
Branch on Higher or Same | BHS | X | C = 0 | ...... | ||||
Branch on Less or Equal | BLE | X | (N ^ V) | Z = 1 | ||||
Branch on Less than 0 | BLT | X | N ^ V = 1 | ...... | ||||
Branch on Minus | BMI | X | N = 1 | ...... | ||||
Branch on Not Equal | BNE | X | Z = 0 | ...... | ||||
Branch on Overflow Clear | BVC | X | V = 0 | ...... | ||||
Branch on Overflow Set | BVS | X | V = 1 | ...... | ||||
Branch on Plus | BPL | X | N = 0 | ...... | ||||
Branch to Subroutine | BSR | X | ...... | |||||
Jump | JMP | X | X | ...... | ||||
Jump to Subroutine | JSR | X | X | X | ...... | |||
Return from Interrupt | RTI | X | !!!!!! | |||||
Return from Subroutine | RTS | X | ...... | |||||
Software Interrupt | SWI | X | !1!!!! | |||||
Wait for Interrupt | WAI | X | ...... |
Manipulation des drapeaux | Mnemonic | Inh | Operation | HINZVC |
---|---|---|---|---|
Clear Carry | CLC | X | 0 -> C | .....0 |
Clear Interrupt | CLI | X | 0 -> I | .0.... |
Clear Overflow | CLV | X | 0 -> V | ....0. |
Set Carry | SEC | X | 1 -> C | .....1 |
Set Interrupt | SEI | X | 1 -> I | .1.... |
Set Overflow | SEV | X | 1 -> V | ....1. |
Accumulator to CCR | TAP | X | A -> CCR | !!!!!! |
CCR to Accumulator | TPA | X | CCR -> A | ...... |
Ports
Port 1
P10-P17 : entrées/sorties, 8 bits. Toutes les lignes sont configurables en entrée ou en sortie indépendamment.
Port 2
P20-P24 : entrées/sorties, 5 bits.
- P20 et P21 déterminent le mode de fonctionnement du processeur (lors du reset)
- Si P21 est configuré en sortie, il est lié à la fonction de comparison du timer
- Peut être utilisé comme port série
- Les lignes sont configurables en entrée ou en sortie indépendamment.
Port 3
P30-P37 : entrées/sorties, 8 bits. Adresses et données multiplexées. A0 à A7 et D0 à D7.
Port 4
P40-P47 : adressage de la mémoire externe, A8 à A15.
Mémoire interne
- 128 octets de RAM interne
Timer programmable
- Compteur ($09:$0A) : lecture seule. Une écriture dans $09 reset le compteur à $FFF8, à éviter.
- Comparateur ($0B:$0C) : 16 bits, lecture/écriture. Lorsqu'il est égal au compteur, OCF est mis à 1.
- Capture d'entrée ($0D:$0E) : lecture seule. Enregistre la valeur du compteur lorsqu'une transition est détectée, tel que définie par IEG.
- Contrôle du Timer ($08) : lecture, écriture sur bits 0-4. Les bits de poids fort représentent l'état.