Site logo

Triceraprog
La programmation depuis le Crétacé

Notes sur le Motorola 6809 ()

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.