Sunteți pe pagina 1din 15

Prsentation du microprocesseur 6809

cole nationale des sciences appliques de Fs, Maroc


ACHRAF MAHHA ELARBI ENNAIR

Powered by www.microelec.patricklecoq.fr All right reserved

Le microprocesseur 6809 de Motorola est un microprocesseur 8 bits -grand successeur du 6800 - dont l'organisation interne est oriente 16 bits.

Il possde 59 instructions (plus de 1460 instructions avec toutes les combinaisons) et il comprend:

Un bus Data sur 8 bits; Un bus d'adresse sur 16 bits permettant un adressage mmoire de 64 KiloOctets; Deux accumulateurs de 8 bits "A" et "B" transformables en 1 accumulateur de 16 bits "D". Deux registres d'index de 16 bits "X" et "Y" pour la gestion des piles utilisateur et systme; Deux registres pointeur de pile "U" et "S"; Un pointeur de page "DP" de 8 bits servant l'adressage direct de la mmoire; 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 excuter.

Il existe deux versions de ce processeur, le 6809 et le 6809E. Leur brochage diffre ainsi que leurs signaux mais leur jeu d'instruction est identique. 1. Le 6809 possde une horloge interne. 2. Le 6809E a lui besoin d'une horloge externe. Le 6809 de Motorola fut au dpart produit en versions 1 MHz et 2 MHz, mais des versions plus rapides furent produites par la suite. Le 6809 possde 9 modes d'adressage:

L'adressage inhrent L'adressage immdiat 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 (frquence externe divise par 4) ; Il possde 3 bus indpendants :

Bus de donnes 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 contrle de 10 bits pour le 6809 et de 12 bits pour le 6809E:

1 - Le signal lecture-criture R/W (read/write) dtermine le sens du transfert des donnes. Lorsque R/W = 1, le 6809 fait une lecture. Lorsque R/W = 0, le 6809 fait une criture sur le bus de donnes. 2 et 3 - Les lignes d'tat du bus BA (Bus Available) et BS (Bus State) renseignent les priphriques du 6809 sur la disponibilit des bus de donnes et d'adresse.

BA = BS = 0 : le 6809 les bus de donnes et d'adresse sont disponible BA = 0, BS = 1 : le 6809 vient de recevoir une interruption. Boitier HD6809E de Hitachi BA = 1, BS = 0 : Excution de l'instruction SYNC. Le 6809 attend la synchronisation sur une ligne d'interruption avec ses bus haute impdance. BA = BS = 1 : Signal HALT sur 6809 => Les bus sont haute impdance.

4 - La ligne HALT permet d'interrompre de faon matrielle le droulement d'un programme. Le 6809 termine l'instruction en cours puis positionne BA et BS 1. Le droulement reprend ds que la broche HALT est 1.

5 - La ligne RESET permet la rinitialisation complte 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 excution. 6 - La ligne NMI (Non Masquable Interrupt) est une ligne d'interruption non masquable. Elle permet d'excuter 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 systme. 7 - La ligne FIRQ ( Fast Interrupt Request) a son vecteur situ en FFFA-FFFB, elle est masque ou non suivant l'tat du bit F du registre CC. Les registres du 6809 ne sont sauvegards que partiellement. 8 - La ligne IRQ (Interrupt Request) a son vecteur en FFF8-FFF9. Elle est conditionne par le bit 1 de CC et tous les registres sont sauvegards. Le droulement de la routine peut tre interrompu par FIRQ ou NMI. Signaux spcifiques au 6809 Les entres d'horloge XTAL et EXTAL Les sorties E et Q sont des horloges destines aux priphriques du processeur. Elles sont en quadrature de phase. L'entre mmoire prte MRDY ( Memory ReaDy) permet l'allongement de l'horloge E. L'entre accs direct mmoire DMA / BREQ suspend le fonctionnement du 6809, permettant ainsi la libration des bus pour des priphriques intelligents ou un rafrachissement de mmoires dynamiques. Signaux spcifiques au 6809E Les broches Ein et Qin sont les entres 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 excute le dernier cycle machine d'une instruction. Le siganl TSC (Three State Control) joue le mme rle que DMA/BREQ pour le 6809 et offre les mmes possibilits. Le signal de prvention d'accs mmoire AVMA (Advanced Valid Memory Address) nous prvient en passant l'tat haut au cours du cycle d'un accs bus par le 6809E. Le signal BUSY a le mme fonctionnement qu'AVMA mais elle ne passe l'tat haut que pendant l'excution d'une lecture-criture d'une donne.

Organisation interne du processeur 6809

Le 6809 possde plusieurs registres utiliss pour la manipulation et le traitement des donnes. Ils sont : 2 accumulateurs de 8 bits A et B transformables en 1 accumulateur de 16 bits, D. Ils sont utiliss pour les instructions arithmtiques, logiques et de chargement de donnes 8 bits (ou 16 bits) en mmoire. Ils sont pour cela entirement identiques. L'accumulateur D est en fait la concatnation de A et B, le registre A reprsentant les poids forts (bits 8 15) et B les poids faibles (bits 0 7). 2 registres d'index X et Y, sur 16 bits. Ils permettent d'adresser tout l'espace mmoire avec en plus la capacit d'tre pr-dcrment ou post-incrment 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 systme pour les oprations 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 oprent en mode dernier entr-premier sorti (LIFO : Last In - First Out). Le pointeur de pile pointe vers la dernire ente effective de la pile. Un compteur programme PC ( Program Counter), sur 16 bits, pointe l'adresse mmoire laquelle le 6809 doit excuter une instruction.

Un registre "codes conditions" 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 opration arithmtique uniquement. Il est 1 dans le cas d'une addition dont le rsultat est suprieur 255 ($FF) ou lorsque le rsultat d'une soustraction (SUB, NEG, CMP, SBC) est positif. Dans le cas de l'instruction MUL (A multipli par B, rsultat sur 16 bits dans D), CARRY est gal au bit B7 de D. Le bit V (oVerflow - B1) est le rsultat d'un OU EXCLUSIF entre les retenues arithmtiques de B6 et de B7. Les oprations logiques de chargements, de stockages et de transferts positionnent V 0. Seules les oprations comme ADD, ADC, SUB, SBC, NEG et CMP positionnent V la valeur approprie. Le bit Z (Zro - B2) est l'indicateur d'un rsultat nul. Toutes les instructions positionnent ce bit. Le bit N (NEGATIVE - B3) indique un rsultat ngatif. Pour toutes les instructions, N prend la valeur du bit de poids fort de l'oprande ou de l'accumulateur en mouvement. Il est trs utile lors de travaux signs 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 dvalident 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 aprs un RESET et dans ce cas FIRQ est dvalide. Si l'utilisateur le force 1, FIRQ est traite. Le bit E (B7) est l'indicateur de sauvegarde partielle li la ligne d'interruption FIRQ. Lorsqu'il est 0 aprs un RESET seulement, une partie des registres internes sont sauvegards pendant le traitement de l'interruption. Lorsqu'il est 1, tous les registres sont sauvegards dans la pile systme. Un registre de "page mmoire" DP (Direct Page), sur 8 bits, est utilis pour adresser des pages en mmoire. Une page est un bloc de 256 mots. Aussi les emplacements mmoire 0 255 forment la page 0 de la mmoire. Le 6809 possde un bus d'adresse de 16 bits, cela donne 256 pages. Le registre DP spcifie le numro de page, c'est dire les 8 bits de poids fort d'une adresse. Les 8 autres bits sont indiqus par l'instruction excuter. Le registre DP permet une excution plus rapide des programmes. Il est automatiquement remis 00 par un RESET.

Modes d'adressage :
L'adressage inhrent Le code opratoire contient toute l'information ncessaire l'excution de l'instruction. Ex: ABX, ASLA, RORA, etc. L'adressage immdiat Le code opratoire est directement suivi par un oprande 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 mmoire. 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 mmoire mais avec un oprande 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 cite comme oprande qui va indiquer l'adresse mmoire. Ex: On a l'adresse $0100 de la mmoire 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 mmoire par un dplacement 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 ajoute au compteur programme lors de l'excution) L'adressage relatif long Mme principe que l'adressage relatif court mais permet d'atteindre toute la mmoire par un dplacement de +32767 -32768. Ex: LBEQ $2000 --> Branche le droulement l'adresse $2000 si le bit Z de CC est positionn.

L'adressage index On utilise un registre d'index de 16 bits qui spcifie une base laquelle on ajoute un dplacement 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 mmoire ADCA, ADCB l'accumulateur avec retenue ADDA, ADDB addition mmoire l'accumulateur addition mmoire avec ADDD accumulateur D (16 bits) ET logique mmoire et ANDA, ANDB l'accumulateur ANDCC ET logique du CCR avec la mmoire ASL, ASLA, ASLB dcalage arithmtique gauche ASR, ASRA, ASRB dcalage arithmtique droit branchement si pas de retenue (bit BCC, LBCC C) BCS, LBCS branchement si retenu (bit C) BEQ, LBEQ branchement si gal zro (bit Z) branchement si suprieur ou gale BGE, LBGE zro branchement si suprieur zro BGT, LBGT (sign) branchement si suprieur (non BHI, LBHI sign) branchement si suprieur ou gal BHS, LBHS (non sign) test d'un bit mmoire avec BITA, BITB l'accumulateur branchement si infrieur ou gal BLE, LBLE (sign) BLO, LBLO branchement si infrieur (non sign) branchement si infrieur ou gal BLS, LBLS (non sign) BLT, LBLT branchement si infrieur (sign) BMI, LBMI branchement si ngatif (bit N) branchement si diffrent de zro (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 dpassement (bit V) BVS, LBVS branchement si dpassement (bit V) mise zro mmoire ou de CLR, CLRA, CLRB l'accumulateur ABX

comparaison mmoire avec l'accumulateur comparaison mmoire avec CMPD l'accumulateur D (16 bits) comparaison pointeur de pile avec CMPS, CMPU mmoire CMPX, CMPY comparaison index avec mmoire complment deux de la mmoire COM, COMA, COMB ou de l'accumulateur ET logique du CCR et attente CWAI d'interruption DAA ajustement dcimale de A dcrmentation de 1 mmoire ou DEC, DECA, DECB accumulateur OU exclusif mmoire 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) Incrmentation de 1 mmoire ou INC, INCA, INCB accumulateur JMP saut inconditionnel JSR saut un sous-programme chargement d'un accumulateur LDA, LDB partie de la mmoire chargement de la pile partie de la LDS, LDU mmoire chargement de l'index partie de la LDX, LDU mmoire chargement de l'adresse effective LEAS, LEAU dans le pointeur de pile chargement de l'adresse effective LEAX, LEAY dans l'index dcalage logique gauche mmoire LSL, LSLA, LSLB ou accumulateur dcalage logique droite mmoire LSR, LSRA, LSRB ou accumulateur MUL multiplication non signe (AxB=D) NEG, NEGA, NEGB ngation mmoire ou accumulateur NOP Non OPration OU logique mmoire et l'ORA, ORB accumulateur OU logique du CCR avec la ORCC mmoire empilement de tout registre sauf S PSHS sur la pile S empilement de tout registre sauf U PSHU sur la pile U Dpilement de tout registre sauf S PULS sur la pile S Dpilement de tout registre sauf U PULU sur la pile U rotation gauche mmoire ou ROL, ROLA, ROLB accumulateur rotation droite mmoire ou ROR, RORA, RORB accumulateur RTI retour d'interruption RTS retour de sous-programme soustraction accumulateur et de la SBCA, SBCB mmoire avec retenue CMPA, CMPB

extension du signe B au travers de l'accumulateur A STA, STB stockage accumulateur en mmoire STD stockage de D en mmoire (16 bits) stockage de pointeur de pile en STS, STU mmoire STX, STY stockage de l'index en mmoire soustraction accumulateur mmoire SUBA, SUBB sans retenue SUBD soustraction D et mmoire (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 mmoire ou accumulateur SEX

Jeu d'instruction du 6809


Addressing Mode Immediate Direct Indexed Extended Inherent Instruction Mnemonic Op ~ # Op ~ # Op ~ # Op ~ # Op ~ # ABX ADC ADCA ADCB ADDA ADDB ADDD ANDA ANDB ANDCC ASLA ASLB ASL ASRA ASRB ASR BITA BIT BITB CLRA CLRB CLR CMPA C5 2 2 D5 4 2 E5 4+ 2+ F5 5 3 4F 5F 81 2 2 0F 6 2 91 4 2 6F A1 6+ 2+ 7F 4+ 2+ B1 7 3 5 3 89 2 2 C9 8B CB C3 84 C4 1C 2 2 2 4 2 2 3 2 2 2 3 2 2 2 99 4 2 D9 9B DB D3 94 D4 4 4 4 6 4 4 2 2 2 2 2 2 A9 E9 AB EB E3 A4 E4 4+ 2+ B9 4+ 4+ 4+ 6+ 4+ 4+ 2+ 2+ 2+ 2+ 2+ 2+ F9 BB FB F3 B4 F4 5 3 5 5 5 7 5 5 3 3 3 3 3 3 48 2 1 58 2 1 08 6 2 68 6+ 2+ 78 7 3 47 2 1 57 2 1 07 6 85 2 2 95 4 2 2 67 6+ 2+ A5 77 7 3 5 3 3A CC bit 5 3 2 1 0 H N Z V C

Description X = B+X 3 1 (Unsigned) A = A+M+C B = B+M+C A = A+M B = B+M D = D+M:M+1 A = A && M B = B && M C = CC && IMM Arithmetic shift left Arithmetic shift right

ADD

!+ !+ !+ !+ !+

AND

!+ !+ !+ !+ !+ !+ !+ !+ !+ !+ !+ !+ !+ !+ !+ !+ 0 0 0 !+

!+ !+ !+ !+ !+ !+ !+ !+ !+ !+ !+ !+ !+ !+ !+ !+ 1 1 1 !+

!+ !+ !+ !+ !+ !+ 0 0 !+ !+ !+

!+ !+ !+ !+ !+ !+

ASL

ASR

8 8 8 8 8 8

7 !+ !+ !+ !+ !+ !+

4+ 2+ B5

CLR

CMP

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 0 !+

CMPB CMPD CMPS CMPU CMPX CMPY COMA COM COMB COM CWAI DAA DEC DECA DECB DEC EORA EORB R1,R2 INCA INCB INC

C1 2 2 10 5 83 11 5 8C 11 5 83 4 8C 4 4 4 3

D1 4 2 10 7 93 11 7 9C 11 7 93 9C 6 3 3 3 2

E1 10 A3

4+ 2+ F1

5 3 8 4 8 4 8 4 7 3 8 4 43 2 1 53 2 1

Compare M from 8 B Compare M:M+1 from D Compare M:M+1 from S Compare M:M+1 from U Compare M:M+1 from X Compare M:M+1 from Y A= complement(A) B= complement(B) M= complement(M) CC = CC ^ IMM; Wait for Interrupt Decimal Adjust A A=A-1 B=B-1 M=M-1 A = A XOR M B = M XOR B Exchange R1,R2 A=A+1 B=B+1 M=M+1 pc = EA Jump to subroutine

!+ !+ !+ !+ !+ !+ !+ !+ !+

!+ !+ !+ !+ !+ !+ !+ !+ !+

!+ !+ !+ !+ !+ !+ 0 0 0

!+ !+ !+ !+ !+ !+ 1 1 1 7

7+ 3+ 10 B3 11 7+ 3+ 11 AC BC 11 7+ 3+ 11 A3 B3 AC 6+ 2+ BC 10 7+ 3+ 10 AC BC

10 5 4 8C

10 7 3 9C

03 6 3C => 2 20

63 6+ 2+

73 7 3

19 2 1 4A 2 1 5A 2 1 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 1 5C 2 1 0C 6 0E 3 9D 7 2 2 2 6C 6+ 2+ 7C 7 3 6E 3+ 2+ 7E 4 3 AD 7+ 2+ BD 8 3

EOR EXG INC JMP JSR

!+ !+ 0 !+ !+ !+ !+ !+ !+ !+ !+ !+ !+ !+ 0 !+ !+ 0 !+ !+ !+ !+ !+ !+ !+ !+ !+

!+

Instr

Mnemonic LDA LDB LDD LDS LDU LDX LDY

LD

Immediate Op ~ # 86 2 2 C6 2 2 CC 3 3 10 4 4 CE CE 8E 10 8E 3 3 3 3 4 4

LEA

LEAS

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 S = M:M+1 U = M:M+1 X = M:M+1 Y = M:M+1 S = EA

CC bit 5 3 2 1 0 H N Z V C !+ !+ 0 !+ !+ 0 !+ !+ 0 !+ !+ !+ !+ !+ !+ !+ !+ 0 0 0 0

LSL

LEAU LEAX LEAY LSLA LSLB LSL LSRA LSRB LSR 04 6 2 08 6 2

33 30 31

4+ 2+ 4+ 2+ 4+ 2+ 48 2 58 2 1 1

U = EA X = EA Y = EA Logical shift left Logical shift right D = A*B (Unsigned) A = !A + 1 B = !B + 1 M = !M + 1 12 2 1 No Operation A = A || M B = B || M C = CC || IMM Push Registers on S Stack Push Registers on U Stack Pull Registers from S Stack Pull Registers from U Stack 49 2 59 2 1 1 Rotate left thru carry 1 1 !+ !+ !+ 0 0 0 !+ !+ !+ 0 0 0

!+ !+ !+ !+ !+ !+ !+ !+ !+

!+ !+ !+

!+ !+ !+ !+ !+ !+ 9

68

6 2+ +

78

7 3 44 2 54 2 1 1

LSR

64

6 2+ +

74

7 3 3D 11 1

MUL NEGA NEGB NEG NOP ORA OR ORB ORCC PSHS PSH PSHU PULS PUL PULU ROLA ROLB ROL RORA RORB ROR RTI RTS SBCA SBC SBCB SEX ST STA 97 4 2 A7 4 2+ B7 5 + 3 82 C2 2 2 2 2 92 D2 4 2 A2 4 2 E2 4 2+ B2 5 + 4 2+ F2 5 + 3 3 06 6 2 66 6 2+ + 76 7 3 09 6 2 69 6 2+ + 79 7 3 8A CA 1A 34 36 35 37 2 2 2 2 3 5 + 5 + 5 + 5 + 2 2 2 2 2 9A DA 4 2 AA 4 2 EA 4 2+ BA 5 + 4 2+ FA 5 + 3 3 00 6 2 60 6 2+ + 70 7 3

NEG

40 2 50 2

1 1

8 8 8

!+ !+ !+

!+ !+ !+

!+ !+ !+

!+ !+ !+

!+ !+

!+ !+

0 0 7

ROL

!+ !+ !+ !+ !+ !+ ?

!+ !+ !+

!+ !+ !+ !+ !+ !+

ROR

46 2 56 2

Rotate Right thru carry

3B

6/1 1 5 1

39 5

Return from ? ? Interrupt Return from subroutine A=A-M-C 8 !+ B=B-M-C 8 !+ !+ !+

!+ !+ !+ !+ !+ !+ 0 0

!+ !+

1D 2

Sign extend B into A M=A

STB STD STS STU STX STY SUBA SUB SUBB SUBD SWI SWI2 80 C0 83 2 2 2 2 4 3

D7 DD 10 DF DF 9F 10 9F 90 D0 93

4 2 E7 5 2 ED 6 3 10 EF 5 2 EF 5 2 AF 6 3 10 AF 4 2 A0 4 2 E0 6 2 A3

4 2+ + 5 2+ + 6 3+ +

F7 5 FD 6

3 3 4 3 3 4 3 3 3 3F 19 1 10 20 2

M=B M:M+1 = D M:M+1 = S M:M+1 = U M:M+1 = X M:M+1 = Y A=A-M B=B-M D = D - M:M+1 Software interrupt 1 Software interrupt 2 Software interrupt 3 8 8

!+ !+ !+ !+ !+ !+ !+ !+ !+

!+ 0 !+ !+ !+ !+ !+ !+ !+ !+ 0 0 0 0 0 !+ !+ !+ !+ !+ !+

10 7 FF 5 2+ FF 6 + 5 2+ BF 6 + 6 3+ 10 7 + BF 4 2+ B0 5 + 4 2+ F0 5 + 6 2+ B3 7 +

SWI

3F 11 20 2 SWI3 3F

SYNC TFR R1,R2 TSTA TSTB TST 1F 6 2

TST

>= Synchronize to 1 4 Interrupt R2 = R1 4D 2 1 Test A 5D 2 1 Test B 13 0D 6 2 6D 6 2+ 7D 7 3 + Test M

!+ !+ !+

!+ !+ !+

0 0 0

Lgende :
OP Operation Code(Hexadecimal) ! Complement of M ~ Number of MPU Cycles # Number of Program Bytes + Arithmetic Plus - Arithmetic Minus * Multiply !+ 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

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 Evnement Restart FFFE E=1 PSHS X,Y,D,U,DP,PC,CC F=1 I=1 PC = [$FFFC] {19 cycles} E=1 PSHS X,Y,D,U,DP,PC,CC F=1 I=1 PC = [$FFFA] {19 cycles} E=1 PSHS X,Y,D,U,DP,PC,CC F=1 I=1 PC = [$FFF8] {19 cycles} E=0 PSHS PC,CC F=1 I=1 PC = [$FFF6] {10 cycles} E=1 PSHS X,Y,D,U,DP,PC,CC PC = [$FFF4] {20 cycles} E=1 PSHS X,Y,D,U,DP,PC,CC PC = [$FFF2] {20 cycles} Adresse Fonctionnalit

NMI

FFFC

SWI

FFFA

IRQ

FFF8

FIRQ

FFF6

SWI2

FFF4

SWI3 Reserved

FFF2 FFF0

Programmation :
Le programme doit tre saisi dans un fichier texte non format avec l'extension ." 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 Label $A000 $A001 $A004 $A005 $A006 $A007 $A00A $A00C $A00E $A00F $A012 $A014 $A017 $A019 $A01B $A01D $A01E $A021 $A023 $A024 12 F6400A 12 4F 5F 8E0000 1F98 A780 4C 8C0800 26F8 8E0000 1F98 A180 260A 4C 8C0800 26F6 5C 20E1 Erreur Dbut Mnmonique Opration NOP LDB NOP CLR A CLR B LDX TFR
Deb-criture STA

Commentaire : Oprande pourquoi pas ...

>$400A

Initialisation de A et B. (A=B=0) #$0000 B -> A 00 , X Initialise X 0 Dbut zone mmoire Contenu de B dans A Ecriture de A dans mmoire dont l'adresse est dans X A=A+1 #$0800
Deb-criture

INC A CMP X BNE LDX TFR


Deb-criture CMP A

Test si X = 0800 Fin de zone mmoire Boucle tant que X n'a pas atteint 0800 Initialise X 0 Dbut zone mmoire (Dbut boucle de vrification) Contenu de B dans A Lecture et comparaison du contenu de la mmoire dont l'adresse est X avec A Si donne mmoire diffrent de A alors branchement sur erreur A=A+1 Test si X = 0800 Fin de zone mmoire Boucle tant que X n'a pas atteint 0800 B=B+1 Recommence la boucle partir de "Dbut" mais avec un B=B+1. Le test boucle sur lui-mme indfiniment. La seule sortie est l'erreur. Gestion de l'erreur (Affichage, ...)

#$0000 B -> A 00 , X Erreur

BNE INC A CMP X BNE INC B BRA ... ... etc.

#$0800
Deb-criture

Dbut ... ...

Vecteur de dmarrage : Adresse FFFE =$A000 (ici adresse $0000 de l'Eprom du plan d'adressage de la carte)

S-ar putea să vă placă și