Octocat
Messages postés2Date d'inscriptionvendredi 6 février 2009StatutMembreDernière intervention 1 juin 2011
-
6 févr. 2009 à 09:42
42wawa42
Messages postés143Date d'inscriptiondimanche 28 septembre 2003StatutMembreDerniè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;
}
42wawa42
Messages postés143Date d'inscriptiondimanche 28 septembre 2003StatutMembreDerniè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" /??>