Passer d'un code asm à un code c ?

Octocat Messages postés 2 Date d'inscription vendredi 6 février 2009 Statut Membre Dernière intervention 1 juin 2011 - 6 févr. 2009 à 09:42
42wawa42 Messages postés 143 Date d'inscription dimanche 28 septembre 2003 Statut Membre Dernière intervention 6 septembre 2011 - 9 févr. 2009 à 23:09
Bonjour à tous, je suis nouveau dans le langage assembleur et j'avoue avoir quelques soucis...
Mon professeur me demande d'interprétrer un code assembleur afin d'obtenir une fonction permettant de lire un clavier sur un OS9.

N'ayant jamais fais d'assembleur je galère un peu, j'ai réussi à faire un morceau gràce à ses commentaires, mais des fois je bloque...

Voici un extrait du code assembleur, si vous pouviez m'aider à traduire certaines fonctions, j'en serais grandement reconnaissant !

/** Editon History

Edition equ 1 current edition number

Typ_Lang set (Prgrm<<8)+Objct
Attr_Rev set ((ReEnt)<<8)+0    

         psect IRQ,Typ_Lang,Attr_Rev,Edition,256,Debut
         use C:/mwos/os9/src/defs/oskdefs.d

         vsect
Touche:    ds.b 1
         ends*/

// Registres du PIA

#define PIA0    $FC0400     // adresse de base
ORA     EQU     01          registre de sortie cote A
#define DDRA    ORA            // DDRA    EQU     ORA         registre de sens de transfert cote A
CRA     EQU     03          registre de controle cote A
ORB     EQU     05          registre de sortie cote B
#define DDRB    ORB            // DDRB    EQU     ORB         registre de sens de transfert cote B
CRB     EQU     07          registre de controle cote B

typedef struct PIA6821 {
    unsigned char v1 ; /* poids forts inoccupés sur le bus 16 bits */
    unsigned char ORA; /* ORA ou DDRA */
    unsigned char v2 ;
    unsigned char CRA;
    unsigned char v3 ;
    unsigned char ORB; /* ORB ou DDRB */
    unsigned char v4 ;
    unsigned char CRB;
} *Pt_pia;

/* cablage des E/S: port B en entree PB0-PB3: code scan
*               port A en sortie PA0-PA3: leds
*               CB2 en sortie: commande /OE
*               CB1 en entree: détection signal touche actionnée*/

Debut:  lea     PIA0,a3        
        IniPIA0();     // bsr     IniPIA0         pas d'interruption appel de la foncgtion Init
        move.b  #$00,Touche(a6)
Reco:   Lecla(); //  bsr          Lecla
        bcs        Reco
        moveq    #1,d0            stdout
        moveq    #1,d1            un caractere a afficher
        lea        Touche(a6),a0
        OS9        I$Write
        bcs        Erreur
        bra        Reco
Fin:    moveq   #0,d1           sortie sans erreur
Erreur: OS9     F$Exit
**************************     
Lecla { 
        btst    #7,CRB(a3)         transition cur CA1 ?
        beq     PdT                interruption autre
        bset    #3,CRB(a3)         mise … un CB2: /OE=0
        move.b  ORB(a3),d0       lecture valeur et raz CRA7
        andi.b    #$0F,d0            poids faibles seulement
        lea        TabConv(pc),a0    a0 pointe sur la table de conversion
        move.b    (a0,d0),d0        conversion
        move.b  d0,Touche(a6)    passage de valeur
        bclr.b    #3,CRB(a3)        mise a zéro CB2: /OE=1
        return;   
    }
PdT:    ori.b   #1,CCR           carry a un pour signaler pas de touche
        return;
*************************
TabConv:    dc.b    '#',$30,$2A,$00,$39,$38,$37,$00,$36,$35,$34,$00,$33,$32,$31
        align
/********************************************************
*        Initialisation du PIA gerant l'afficheur        *
********************************************************/
IniPIA0 {
        Pt_pia PIA=(Pt_pia)PIA0;        // lea     PIA0,a3     //    a3 pointe le pia
        PIA -> CRA = 0 ;     //   acces DDRA
        PIA -> CRB =  0;     //   acces DDRB
        PIA -> DDRB = 0; //  port B en entree
        PIA -> DDRA = 0xFF;  //port A en sortie
        PIA -> CRA = 0x34;   // acces ORA,CA2 en sortie mode programme
        PIA -> CRB = 0x34;  //  acces ORB,CB2 en sortie mode programme
        return;
    }

3 réponses

42wawa42 Messages postés 143 Date d'inscription dimanche 28 septembre 2003 Statut Membre Dernière intervention 6 septembre 2011
9 févr. 2009 à 14:34
Hello
Dans la Data Sheet du Motorola 68000 Family il y a la réponse a vos questions pour le PIA

A+
42wawa42
0
Octocat Messages postés 2 Date d'inscription vendredi 6 février 2009 Statut Membre Dernière intervention 1 juin 2011
9 févr. 2009 à 16:23
Je te remercie, mais je vois pas trop ce que c'est ! ^^"

J'ai trouvé une doc sur le Motorola de 646 pages, si c'est bien ça, et ben, bonne chance à moi ! :p
0
42wawa42 Messages postés 143 Date d'inscription dimanche 28 septembre 2003 Statut Membre Dernière intervention 6 septembre 2011
9 févr. 2009 à 23:09
Hello
Oui tu as vu juste, mais cherche dans la partie PIA de la doc. Ton code fait référence à un PIA donc cherche dans set direction. Je ne suis pas certain mais le chips MC6821 "Peripheral Interface Adapter" doit être le bon. J’ai encore quelque livre sur les M68000 car j’ai du écrire des programme langage machine de M68000 a Z80 et Intel série 386 486 586. Donc un bureau avec beaucoup de livres pour l’informatique.




<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /??>
 






A+



42wawa42

 
0