Présentation du microprocesseur 6809
École nationale des sciences appliquées de Fès, Maroc ACHRAF MAHHA
ELARBI ENNAIR
Powered by www.microelec.patricklecoq.fr All right reserved
« Le microprocess microprocesseur eur 6809 de Motorola est un microprocesseur 8 bits -grand successeur du 6800 - dont l'organisation interne est orientée 16 bits. »
Il possède 59 instructions (plus de 1460 instructions avec toutes l es combinaisons) et il comprend:
Un bus Data sur 8 bits; Un bus d'adresse sur 16 bits permettant un adressage mémoire de 64 KiloOctets; Deux accumulateurs de 8 bits " A" et " B" transformables en 1 accumulateur de 16 bits " D". Y" pour la gestion des Deux registres d'index de 16 bits " X" et " Y piles utilisateur et système; Deux registres pointeur de pile " U" et "S"; Un pointeur de page " DP" de 8 bits servant à l'adressage direct de la mémoire; Un registre d'état "CC" sur 8 bits; Le compteur de programme sur 16 bits " PC" pointant toujours sur l'adresse que le microprocesseur doit exécuter.
Il existe deux versions de ce processeur, le 6809 et le 6809E. Leur brochage diffère ainsi que leurs signaux mais leur jeu d'instruction est identique. 1. Le 6809 possède possède une horloge interne. 2. Le 6809E a lui besoin d'une horloge externe. externe. Le 6809 de Motorola fut au départ produit en versions 1 MHz et 2 MHz, mais des versions plus rapides furent produites par la suite. Le 6809 possède 9 modes d'adressage:
L'adressage inhérent L'adressage immédiat L'adressage direct L'adressage étendu L'adressage étendu indirect L'adressage relatif court L'adressage relatif long L'adressage indexé L'adressage indexé indirect
Organisation du processeur 6809 :
Le microprocesseur, fabriqué en technologie MOS Canal N, comporte 40 broches et il est alimenté en 5V uniquement. (Broche Vssc'est le GND soit 0V, Vcc c'est le 5V) Il a un cycle d'horloge interne de 2 MHz (fréquence externe divisée par 4) ; Il possède 3 bus indépendants :
Bus de données sur 8 bits (D0 à D7) est bidirectionnel et chaque sortie peut piloter 8 charges TTL; Bus d'adresse sur 16 bits ( A0 à A15) est unidirectionnel, il peut piloter 8 charges TTL; Bus de contrôle de 10 bits pour le 6809 et de 12 bits pour le 6809E:
1 - Le signal lecture-écriture R/W (read/write) détermine le sens du transfert des données. Lorsque R/W = 1, le 6809 fait une lecture. Lorsque R/W = 0, le 6809 fait une écriture sur le bus de données. 2 et 3 - Les lignes d'état du bus BA (Bus Available) et BS (Bus State) renseignent les périphériques du 6809 sur la disponibilité des bus de données et d'adresse.
BA = BS = 0 : le 6809 les bus de données et d'adresse sont disponible BA = 0, BS = 1 : le 6809 vient de recevoir une interruption. Boitier HD6809E de Hitachi BA = 1, BS = 0 : Exécution de l'instruction SYNC. Le 6809 attend la synchronisation sur une ligne d'interruption avec ses bus à haute impédance. BA = BS = 1 : Signal HALT sur 6809 => Les bus sont à haute impédance.
4 - La ligne HALT permet d'interrompre de façon matérielle le déroulement d'un programme. Le 6809 termine l'instruction en cours puis positionne BA et BS à 1. Le déroulement reprend dès que la broche HALT est à 1.
5 - La ligne RESET permet la réinitialisation complète du 6809. Le 6809 se relance en lecture du vecteur RESET aux adresses FFFE-FFFF, il charge ce vecteur dans le compteur programme et se replace en exécution. 6 - La ligne NMI (Non Masquable Interrupt) est une ligne d'interruption non masquable. Elle permet d'exécuter une routine d'interruption dont l'adresse est contenue dans le vecteur FFFC-FFFD. Le contenu de la totalité des registres du 6809 est sauvegardé dans la pile système. 7 - La ligne FIRQ ( Fast Interrupt Request) a son vecteur situé en FFFA-FFFB, elle est masquée ou non suivant l'état du bit F du registre CC. Les registres du 6809 ne sont sauvegardés que partiellement. 8 - La ligne IRQ (Interrupt Request) a son vecteur en FFF8-FFF9. Elle est conditionnée par le bit 1 de CC et tous les registres sont sauvegardés. Le déroulement de la routine peut être interrompu par FIRQ ou NMI. Signaux spécifiques au 6809
Les entrées d'horloge XTAL et EXTAL Les sorties E et Q sont des horloges destinées aux périphériques du processeur. Elles sont en quadrature de phase. L'entrée mémoire prête MRDY ( Memory ReaDy) permet l'allongement de l'horloge E. L'entrée accès direct mémoire DMA / BREQ suspend le fonctionnement du 6809, permettant ainsi la libération des bus pour des périphériques intelligents ou un rafraîchissement de mémoires dynamiques. Signaux spécifiques au 6809E
Les broches Ein et Qin sont les entrées d'horloges du 6809E. Ces deux signaux doivent être en quadrature. Le signal d'indication de dernier cycle LIC (Last Instruction Cycle) est à l'état haut LIC = 1 à chaque fois que le microprocesseur exécute le dernier cycle machine d'une instruction. Le siganl TSC (Three State Control) joue le même rôle que DMA/BREQ pour le 6809 et offre les mêmes possibilités. Le signal de prévention d'accès mémoire AVMA (Advanced Valid Memory Address) nous prévient en passant à l'état haut au cours du cycle d'un accès bus par le 6809E. Le signal BUSY a le même fonctionnement qu'AVMA mais elle ne passe à l'état haut que pendant l'exécution d'une lecture-écriture d'une donnée.
Organisation interne du processeur 6809
Le 6809 possède plusieurs registres utilisés pour l a manipulation et le traitement des données. Ils sont :
2 accumulateurs de 8 bits A et B transformables en 1 accumulateur de 16 bits, D. Ils sont utilisés pour les instructions arithmétiques, logiques et de chargement de données 8 bits (ou 16 bits) en mémoire. Ils sont pour cela entièrement identiques. L'accumulateur D L'accumulateur D est en fait la concaténation de A et B, le registre A représentant les poids forts (bits 8 à 15) et B les poids faibles (bits 0 à 7). 2 registres d'index X et et Y Y,, sur 16 bits. Ils permettent d'adresser tout l'espace mémoire avec en plus la capacité d'être pré-décrémenté ou post-incrémenté pour faciliter le traitement de variables en tables. 2 registres pointeurs de pile U et S. U (User) est utilisé uniquement par le programmeur. S (System) par le système pour les opérations de sauvegarde en cas d'interruption ou de saut à un sous-programme (Adresse de retour). La pile est un emplacement ou le microprocesseur sauvegarde le contenu de ses registres internes pendant un certain temps. Elles opèrent en mode dernier entré-premier sorti (LIFO : Last In - First Out). Le pointeur de pile pointe vers la dernière entée effective de la pile. Un compteur programme PC ( Program Counter), sur 16 bits, pointe l'adresse mémoire à laquelle le 6809 doit exécuter une instruction.
Un registre "codes conditions" CC CC,, affichant en permanence l'état de ces bits. Le contenu du registre d'état est essentiellement conditionné par l'ALU. Le bits C (Carry - BO) est positionné lors d'une opération arithmétique uniquement. Il est à 1 dans le cas d'une addition dont le résultat est supérieur à 255 ($FF) ou lorsque le résultat d'une soustraction (SUB, NEG, CMP, SBC) est positif. Dans le cas de l'instruction MUL (A multiplié par B, résultat sur 16 bits dans D), CARRY est égal au bit B7 de D. Le bit V (oVerflow - B1) est le résultat d'un OU EXCLUSIF entre les retenues arithmétiques de B6 et de B7. Les opérations logiques de chargements, de stockages et de transferts positionnent V à 0. Seules les opérations comme ADD, ADC, SUB, SBC, NEG et CMP positionnent V à la valeur appropriée. Le bit Z (Zéro - B2) est l'indicateur d'un résultat nul. Toutes les instructions positionnent ce bit. Le bit N (NEGATIVE - B3) indique un résultat négatif. Pour toutes les instructions, N prend la valeur du bit de poids fort de l'opérande ou de l'accumulateur en mouvement. Il est très utile lors de travaux signés sur des entiers compris entre +127 et -128. Le bit I (Interrupt -B4) autorise lorsque il est à 0 le traitement des interruptions IRQ et les dévalident quand il est à 1. Ce bit est uniquement manipulé par l'utilisateur mais est positionné à 1 par un RESET . Le bit H (Half-carry - B5) est un bit de demi-retenue entre le quartet faible et le quartet fort de A ou B. Le bit F (Fast interrupt - B6) conditionne le traitement de la ligne FIRQ. Il est à 0 après un RESET et dans ce cas FIRQ est dévalidée. Si l'utilisateur le force à 1, FIRQ est traitée. Le bit E (B7) est l'indicateur de sauvegarde partielle lié à la ligne d'interruption FIRQ. Lorsqu'il est à 0 après un RESET seulement, une partie des registres internes sont sauvegardés pendant le traitement de l'interruption. Lorsqu'il est à 1, tous les registres sont sauvegardés dans la pile système. Un registre de "page mémoire" DP (Direct Page), sur 8 bits, est utilisé pour adresser des pages en mémoire. Une page est un bloc de 256 mots. Aussi les emplacements mémoire 0 à 255 forment la page 0 de la mémoire. Le 6809 possède un bus d'adresse de 16 bits, cela donne 256 pages. Le registre DP spécifie le numéro de page, c'est à dire les 8 bits de poids fort d'une adresse. Les 8 autres bits sont indiqués par l'instruction à exécuter. Le registre DP permet une exécution plus rapide des programmes. Il est automatiquement remis à 00 par un RESET.
Modes d'adressage :
L'adressage inhérent Le code opératoire contient toute l'information nécessaire à l'exécution de l'instruction. Ex: ABX, ASLA, RORA, etc. L'adressage immédiat Le code opératoire est directement suivi par un opérande de 1 ou 2 octets. Ex: CMPA #$2B06 --> Comparaison de A avec la valeur hexa 2B06; ADDB #%1001100 --> Addition de la valeur binaire 1001100 à B. L'adressage direct Il permet en collaboration avec le registre DP de charger un accumulateur avec le contenu de n'importe quelle adresse mémoire. Ex: Avec DP = 00 LDA < $00 charge A avec le contenu de l'adresse $0000; CMPX < $35 compare X avec le contenu des adresses $0035 et $0036. L'adressage étendu Il permet d'atteindre toute la mémoire mais avec un opérande à 2 octets. Ex: LDA $5100 --> charge A avec le contenu de l'adresse $5100. L'adressage étendu indirect C'est le contenu de l'adresse citée comme opérande qui va indiquer l'adresse mémoire. Ex: On a à l'adresse $0100 de la mémoire la valeur $35 et l'adresse $0101 contient la valeur $B7. LDA [$1000] ---> CHARGE A avec le contenu de l'adresse $35B7. L'adressage relatif court Il permet d'atteindre toute la mémoire par un déplacement de +127 ou -128 octets. Ex: A l'adresse $00FE on a l'instruction BRA $0110 Branchement à l'adresse $0110. ($0110(de BRA $0110) - $0100 (de PC) = $0010 cette valeur est ajoutée au compteur programme lors de l'exécution) L'adressage relatif long Même principe que l'adressage relatif court mais permet d'atteindre toute la mémoire par un déplacement de +32767 à -32768. Ex: LBEQ $2000 --> Branche le déroulement à l'adresse $2000 si le bit Z de CC est positionné.
L'adressage indexé On utilise un registre d'index de 16 bits qui spécifie une base à laquelle on ajoute un déplacement signé de 5, 8 ou 16 bits. L'adressage indexé indirect Le registre d'index contient l'adresse effective de l'octet à manipuler.
Description des instructions du 6809 ajoute l'accumulateur B à X (non signé) addition du contenu mémoire à ADCA, ADCB l'accumulateur avec retenue ADDA, ADDB addition mémoire à l'accumulateur addition mémoire avec ADDD accumulateur D (16 bits) ET logique mémoire et ANDA, ANDB l'accumulateur ANDCC ET logique du CCR avec la mémoire ASL, ASLA, ASLB décalage arithmétique à gauche ASR, ASRA, ASRB décalage arithmétique à droit branchement si pas de retenue (bit BCC, LBCC C) BCS, LBCS branchement si retenu (bit C) BEQ, LBEQ branchement si égal à zéro (bit Z) branchement si supérieur ou égale à BGE, LBGE zéro branchement si supérieur à zéro BGT, LBGT (signé) branchement si supérieur (non BHI, LBHI signé) branchement si supérieur ou égal BHS, LBHS (non signé) test d'un bit mémoire avec BITA, BITB l'accumulateur branchement si inférieur ou égal BLE, LBLE (signé) BLO, LBLO branchement si inférieur (non signé) branchement si inférieur ou égal BLS, LBLS (non signé) BLT, LBLT branchement si inférieur (signé) BMI, LBMI branchement si négatif (bit N) branchement si différent de zéro (bit BNE, LBNE Z) BPL, LBPL branchement si positif (bit N) BRA, LBRA branchement inconditionnel BRN, LBRN non branchement BSR, LBSR branchement à un sous-programme branchement si pas de BVC, LBVC dépassement (bit V) BVS, LBVS branchement si dépassement (bit V) mise à zéro mémoire ou de CLR, CLRA, CLRB l'accumulateur ABX
comparaison mémoire avec l'accumulateur comparaison mémoire avec CMPD l'accumulateur D (16 bits) comparaison pointeur de pile avec CMPS, CMPU mémoire CMPX, CMPY comparaison index avec mémoire complément à deux de la mémoire COM, COMA, COMB ou de l'accumulateur ET logique du CCR et attente CWAI d'interruption DAA ajustement décimale de A décrémentation de 1 mémoire ou DEC, DECA, DECB accumulateur OU exclusif mémoire et EORA, EORB accumulateur EXG D,R Echange de D et de R Echange de R1 et R2 (R1, R2 = A, EXG R1,R2 B, CC, DP) Incrémentation de 1 mémoire ou INC, INCA, INCB accumulateur JMP saut inconditionnel JSR saut à un sous-programme chargement d'un accumulateur à LDA, LDB partie de la mémoire chargement de la pile à partie de la LDS, LDU mémoire chargement de l'index à partie de la LDX, LDU mémoire chargement de l'adresse effective LEAS, LEAU dans le pointeur de pile chargement de l'adresse effective LEAX, LEAY dans l'index décalage logique à gauche mémoire LSL, LSLA, LSLB ou accumulateur décalage logique à droite mémoire LSR, LSRA, LSRB ou accumulateur MUL multiplication non signée (AxB=D) NEG, NEGA, NEGB négation mémoire ou accumulateur NOP Non OPération OU logique mémoire et l'ORA, ORB accumulateur OU logique du CCR avec la ORCC mémoire empilement de tout registre sauf S PSHS sur la pile S empilement de tout registre sauf U PSHU sur la pile U Dépilement de tout registre sauf S PULS sur la pile S Dépilement de tout registre sauf U PULU sur la pile U rotation à gauche mémoire ou ROL, ROLA, ROLB accumulateur rotation à droite mémoire ou ROR, RORA, RORB accumulateur RTI retour d'interruption RTS retour de sous-programme soustraction accumulateur et de la SBCA, SBCB mémoire avec retenue CMPA, CMPB
extension du signe B au travers de l'accumulateur A STA, STB stockage accumulateur en mémoire STD stockage de D en mémoire (16 bits) stockage de pointeur de pile en STS, STU mémoire STX, STY stockage de l'index en mémoire soustraction accumulateur mémoire SUBA, SUBB sans retenue SUBD soustraction D et mémoire (16 bits) SW11, SW12, SW13 interruption par logiciel synchronisation avec une SYNC interruption TFR D,R transfert de D dans R TFR R,D transfert de R dans D TFR R1,R2 transfert de R1 dans R2 TST, TSTA, TSTB test d'une mémoire ou accumulateur SEX
Jeu d'instruction du 6809 Addressing Mode Immediate Direct Indexed Extended Inherent Instruction Mnemonic Op ~ # Op ~ # Op ~ # Op ~ # Op ~ # ABX ADC
ADD
AND
ASL
ASR
3A ADCA ADCB ADDA ADDB ADDD ANDA ANDB ANDCC ASLA ASLB ASL ASRA ASRB ASR
89 2 2
99 4 2
A9
4+ 2+ B9
5 3
A = A+M+C
C9 8B CB C3 84 C4 1C
D9 9B DB D3 94 D4
E9 AB EB E3 A4 E4
4+ 4+ 4+ 6+ 4+ 4+
5 5 5 7 5 5
B = B+M+C A = A+M B = B+M D = D+M:M+1 A = A && M B = B && M C = CC && IMM
2 2 2 4 2 2 3
2 2 2 3 2 2 2
4 4 4 6 4 4
2 2 2 2 2 2
08 6
07 6
2
2
2+ 2+ 2+ 2+ 2+ 2+
68 6+ 2+
67 6+ 2+
F9 BB FB F3 B4 F4
3 3 3 3 3 3 48 2 1 58 2 1
Arithmetic shift left
47 2 1 57 2 1
Arithmetic shift right
78 7 3
77 7 3
BITA
85 2 2
95
4 2
A5
4+ 2+ B5
5 3
BITB
C5 2 2
D5 4 2
E5
4+ 2+ F5
5 3
BIT
CLR CMP
CLRA CLRB CLR CMPA
Description X = B+X 3 1 (Unsigned)
4F 5F 81 2 2
0F 6 2 91 4 2
6F A1
6+ 2+ 7F 4+ 2+ B1
7 3 5 3
CC bit 5 3 2 1 0 H N Z V C
!+ !+ !+ !+ !+
8 8 8 8 8 8
Bit Test A (M&&A) Bit Test B (M&&B) 2 1 A=0 2 1 B=0 M=0 Compare M from 8 A
!+ !+ !+ !+ !+ !+ !+ !+ !+ !+ !+ !+ !+ !+
!+ !+ !+ !+ !+ !+ !+ !+ !+ !+ !+ !+ !+ !+
!+ !+ !+ !+ !+ !+ 0 0 !+ !+ !+
!+
!+
0
!+
!+
0
0 0 0 !+
1 1 1 !+
0 0 0 !+
!+ !+ !+ !+ !+ !+
7 !+ !+ !+ !+ !+ !+
0 0 0 !+
CMPB CMPD CMPS CMPU CMPX CMPY
COM
C1 2 2
D1 4 2
E1
10 5 83 11 5 8C 11 5 83 4 8C
10 7 93 11 7 9C 11 7 93 9C 6
10 A3
4 4 4 3
10 5 4 8C
4+ 2+ F1
5 3
Compare M from 8 B
8 4
Compare M:M+1 from D
!+
!+
!+
!+
8 4
Compare M:M+1 from S
!+
!+
!+
!+
8 4
Compare M:M+1 from U
!+
!+
!+
!+
2
7+ 3+ 10 B3 11 7+ 3+ 11 AC BC 11 7+ 3+ 11 A3 B3 AC 6+ 2+ BC
7 3
Compare M:M+1 from X
!+
!+
!+
!+
10 7 3 9C
10 7+ 3+ 10 AC BC
8 4
Compare M:M+1 from Y
!+
!+
!+
!+
3 3 3
INC
!+
0
1
COMB
53 2
!+
!+
0
1
!+
!+
0
1
03 6 3C
2
63 6+ 2+
73 7 3
=> 2 20
DECA DECB DEC EORA EORB R1,R2 INCA INCB INC
19 2 4A 2 5A 2 88 2 2 C8 2 2 1E 8 2
0A 6 2 6A 6+ 2+ 7A 7 3 98 4 2 A8 4+ 2+ B8 5 3 D8 4 2 E8 4+ 2+ F8 5 3 4C 2 5C 2
JMP
0C 6 0E 3
2 2
6C 6+ 2+ 7C 7 3 6E 3+ 2+ 7E 4 3
JSR
9D 7
2
AD 7+ 2+ BD 8 3
Instr
LD
LEA
!+
!+
DAA
EXG
!+
43 2 1
CWAI
EOR
!+
COMA
COM
DEC
A = complement(A) B= 1 complement(B) M= complement(M) CC = CC ^ IMM; Wait for Interrupt 1 Decimal Adjust A 1 A=A-1 1 B=B-1 M=M-1 A = A XOR M B = M XOR B Exchange R1,R2 1 A=A+1 1 B=B+1 M=M+1 pc = EA Jump to subroutine
!+
Mnemonic LDA LDB LDD LDS
Immediate Op ~ # 86 2 2 C6 2 2 CC 3 3 10 4 4 CE
LDU LDX
CE 8E
LDY
10 8E
LEAS
3 3 3 3 4 4
Instruction 6809 suite Addressing Mode Direct Indexed Extended Inherent Op ~ # Op ~ # Op ~ # Op ~ # 96 4 2 A6 4+ 2+ B6 5 3 D6 4 2 E6 4+ 2+ F6 5 3 DC 5 2 EC 5+ 2+ FC 6 3 10 6 3 10 6+ 3+ 10 7 4 DE EE FE DE 5 2 EE 5+ 2+ FE 6 3 9E 5 2 AE 5+ 2+ BE 6 3 10 6 3 10 6+ 3+ 10 7 4 9E AE BE 32 4+ 2+
Description A=M B=M D = M:M+1
7 !+ !+ 0 !+ !+ !+ !+ !+ !+ !+ !+ !+ !+ !+ 0 !+ !+ 0 !+ !+ !+
!+ !+ !+
!+
!+ !+ !+
CC bit 5 3 2 1 0 H N Z V C !+ !+ 0 !+ !+ 0 !+ !+ 0
S = M:M+1
!+
!+
0
U = M:M+1 X = M:M+1
!+ !+
!+ !+
0 0
Y = M:M+1
!+
!+
0
S = EA
LSL
LEAU LEAX LEAY LSLA LSLB
33 30 31
U = EA X = EA Y = EA 48 2 58 2
LSL
LSR
4+ 2+ 4+ 2+ 4+ 2+
08
6 2
68
6
2+
78
7 3
LSRA LSRB
44 2 54 2
LSR
04
6 2
64
6
2+ 74
3D 11 1 NEGA NEGB
40 2 50 2
NEG
00
6 2
60
6
2+
70
12 2 ORA ORB ORCC PSHS
PSH PSHU PULS PUL PULU
ROL
8A
2 2
9A
4 2 AA
4 2+ BA 5
3
CA
2 2
DA
4 2 EA
4 2+ FA 5
3
1A 34
3 5 + 5 + 5 + 5 +
36 35 37
2 2 49 2 59 2 09
6 2
69
6
2+
79
7 3
RORA RORB
46 2 56 2 06
6 2
66
6
2+ 76
!+
!+
!+
0 0
!+ !+
!+ !+
0
!+
!+
!+
9
D = A*B (Unsigned) A = !A + 1 B = !B + 1
8 8
!+ !+
!+ !+
!+ !+
!+ !+
M = !M + 1
8
!+ !+
!+
!+
!+
!+
!+
0
!+
!+
0 7
!+ !+
!+ !+
!+ !+
!+
!+
!+
!+
1 1
0 0
!+ !+
!+ !+
0
!+
!+
Rotate Right thru carry
82
2 2
92
4 2 A2
4 2+ B2 5
3
C2
2 2
D2
4 2 E2
4 2+ F2 5
3
B=B-M-C 8
39 5
SEX
1D 2 STA
!+
Return from ? ? Interrupt Return from subroutine A=A-M-C 8 !+
RTS
ST
!+ !+
!+ !+
6/1 1 5
3B
SBCB
!+ !+
1 1 Rotate left thru carry
7 3
RTI
SBC
!+ !+
C = CC || IMM Push Registers on S Stack Push Registers on U Stack Pull Registers from S Stack Pull Registers from U Stack
ROLA ROLB
SBCA
Logical shift right
B = B || M
2
ROR
Logical shift left
1 No Operation A = A || M
2 2
ROL
ROR
1 1
7 3
NOP
OR
1 1
7 3
MUL
NEG
1 1
!+ !+ !+ !+
97
4 2 A7
4 2+ B7 5 3
1
1
Sign extend B into A M=A
!+ !+ !+
?
?
?
!+ !+
!+
!+ !+
!+
!+ !+ 0
0
STB STD STS STU STX
SUB
SUBB SUBD
4 2 E7
4 2+
F7
5
3
DD
5 2 ED
5 2+ FD 6 3
10 DF
6 3 10 EF
DF
5 2 EF
6 3+ 10 7 4 FF 5 2+ FF 6 3
9F
5 2 AF
5 2+ BF 6 3
6 3 10 AF 4 2 A0
6 3+ 10 7 4 BF 4 2+ B0 5 3
80
2 2
10 9F 90
C0
2 2
D0
4 2 E0
4 2+
83
4 3
93
6 2 A3
6 2+ B3 7 3
STY SUBA
D7
F0
5
3
10 20 2 SWI
SWI2 3F 11 20 2 SWI3 3F
TFR TST
!+
!+
0
M:M+1 = S
!+
!+
0
M:M+1 = U
!+
!+
0
M:M+1 = X
!+
!+
0
M:M+1 = Y
!+
!+
0
A = A - M
8
!+
!+
!+
!+
B=B-M
8
!+
!+
!+
!+
!+
!+
!+
!+
!+ !+
!+ !+
0 0
!+
!+
0
Software interrupt 1 Software interrupt 2 Software interrupt 3
>= Synchronize to 1 4 Interrupt R2 = R1 4D 2 1 Test A 5D 2 1 Test B
SYNC
!+ 0
M:M+1 = D
D = D - M:M+1 3F 19 1
SWI
!+
M=B
13
R1,R2 TSTA TSTB
1F
6 2
TST
0D
6 2
6D
6
2+ 7D 7 3
Test M
Légende : !+ Test and set if true, cleared otherwise = Transfer into Not Affected H Half carry (from bit 3) CC Condition Code Register N Negative (sign bit) : Concatenation Z Zero Result || Logical or V Overflow, 2's complement && Logical and C Carry from ALU EOR Logical Exclusive or
OP Operation Code(Hexadecimal) ! Complement of M ~ Number of MPU Cycles # Number of Program Bytes + Arithmetic Plus - Arithmetic Minus * Multiply
Notes: 1. This column gives a base cycle and byte count. To obtain total count, add the values obtained from the INDEXED ADDRESSING MODE table, in Appendix F. 2. Rl and R2 may be any pair of 8 bit or any pair of 16 bit registers. The 8 bit registers are: A, B, CC, DP The 16 bit registers are: X, Y, U, S, D, PC
3. EA is the effective address. 4. The PSH and PUL instructions require 5 cycles plus 1 cycle for each byte pushed or pulled. 5. 5(6) means: 5 cycles if branch not taken, 6 cycles if taken (Branch instructions. 6. SWI sets I and F bits. SW12 and SW13 do not affect I and F. 7. Conditions Codes set as a direct result of the instruction. 8. Value of half carry flag is undefined. 9. Special Case Carry set if b7 is SET.
Interruption 6809 Evénement Restart
Adresse
Fonctionnalité
FFFE
FFFC
E=1 PSHS X,Y,D,U,DP,PC,CC F=1 I=1 PC = [$FFFC] {19 cycles}
FFFA
E=1 PSHS X,Y,D,U,DP,PC,CC F=1 I=1 PC = [$FFFA] {19 cycles}
FFF8
E=1 PSHS X,Y,D,U,DP,PC,CC F=1 I=1 PC = [$FFF8] {19 cycles}
FFF6
E=0 PSHS PC,CC F=1 I=1 PC = [$FFF6] {10 cycles}
FFF4
E=1 PSHS X,Y,D,U,DP,PC,CC PC = [$FFF4] {20 cycles}
SWI3
FFF2
E=1 PSHS X,Y,D,U,DP,PC,CC PC = [$FFF2] {20 cycles}
Reserved
FFF0
NMI
SWI
IRQ
FIRQ
SWI2
Programmation : Le programme doit être saisi dans un fichier texte non formaté avec l'extension ." ASM ". ASM". On peut utiliser:
Le bloc note, Ultraedit, etc. sous Windows;
VI, Gedit sous Linux.
Puis, on utilisera un assembleur comme : AS6809 X6809 Macro Assembler AS 1418
Exemple : Programme simple de test d'une zone RAM : Adresse
Code
Mnémonique Label
Opération
$A000
12
NOP
$A001
F6400A
LDB
$A004
12
NOP
$A005
4F
CLR A
$A006
5F
CLR B
$A007
8E0000
$A00A
Opérande pourquoi pas ... >$400A
Initialisation de A et B. (A=B=0)
LDX
#$0000
Initialise X à 0 Début zone mémoire
1F98
TFR
B -> A
Contenu de B dans A
$A00C
A780
Deb-écriture STA
00 , X
Ecriture de A dans mémoire dont l'adresse est dans X
$A00E
4C
INC A
$A00F
8C0800
CMP X
#$0800
Test si X = 0800 Fin de zone mémoire
$A012
26F8
BNE
Deb-écriture
Boucle tant que X n'a pas atteint 0800
$A014
8E0000
LDX
#$0000
Initialise X à 0 Début zone mémoire (Début boucle de vérification)
$A017
1F98
TFR
B -> A
Contenu de B dans A
$A019
A180
00 , X
Lecture et comparaison du contenu de la mémoire dont l'adresse est X avec A
$A01B
260A
BNE
Erreur
Si donnée mémoire différent de A alors branchement sur erreur
$A01D
4C
INC A
$A01E
8C0800
CMP X
#$0800
Test si X = 0800 Fin de zone mémoire
$A021
26F6
BNE
Deb-écriture
Boucle tant que X n'a pas atteint 0800
$A023
5C
INC B
B=B+1
BRA
Début
Recommence la boucle à partir de "Début" mais avec un B=B+1. Le test boucle sur lui-même indéfiniment. La seule sortie est l'erreur.
...
...
Gestion de l'erreur (Affichage, ...)
...
...
$A024
Début
Commentaire :
Deb-écriture CMP A
20E1 Erreur
A=A+1
A=A+1
etc.
Vecteur de démarrage : Adresse FFFE =$A000 (ici adresse $0000 de l'Eprom du plan d'adressage de la carte)