Bonjour à tous, j'ai actuellement un projet à faire sur le langage assembleur, mais je n'ai eu que quelques petits cours, que du théorique et rien de pratique...

Maintenant je dois passer d'un petit langage assembleur à un langage C, pour une fonction de lecture de clavier sur un OS9.

Mais j'ai vraiment du mal, je ne comprends rien...

Donc si vous pouviez m'aider en me proposant des tutos pour de gros débutant, décrivant quelques fonctions, ça m'aiderait, normalement, je devrais arriver à transformer ceci en fonction je crois bien. ^^

Voici le code assembleur en question :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
 
* 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
 
PIA0    EQU     $FC0400     adresse de base
ORA     EQU     01          registre de sortie cote A
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
DDRB    EQU     ORB         registre de sens de transfert cote B
CRB     EQU     07          registre de controle cote B
 
* 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         adresse du port
		bsr     IniPIA0         pas d'interruption
        move.b  #$00,Touche(a6)
Reco:   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
		rts		
PdT:    ori.b   #1,CCR   		carry a un pour signaler pas de touche
        rts
*************************
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:
        lea     PIA0,a3         a3 pointe le pia
        clr.b   CRA(a3)         acces DDRA
        clr.b   CRB(a3)         acces DDRB
        move.b  #$00,DDRB(a3)   port B en entree
        move.b  #$FF,DDRA(a3)   port A en sortie
        move.b  #$34,CRA(a3)    acces ORA,CA2 en sortie mode programme
        move.b  #$34,CRB(a3)    acces ORB,CB2 en sortie mode programme
        rts
******************************************************************************
        ends