1 /**********************************************************************************************/
2 /******************************* Pierre Nguyen Tuong ******************************************/
3 /******************************* 03/10/1999          ******************************************/
4 /******************************* DEA ASIME - DESS    ******************************************/
5 /**********************************************************************************************/
6 /******************************* Generation des vecteurs de tests de l'am2901 *****************/
7 /**********************************************************************************************/
8 /**********************************************************************************************/
9 
10 
11 #include <genpat.h>
12 #include <stdio.h>
13 #include "mut.h"
14 
15 
16 #define RplusS   0
17 #define SmoinsR  1
18 #define RmoinsS  2
19 #define RouS     3
20 #define RetS     4
21 #define nonRetS  5
22 #define RouxS    6
23 #define nonRouxS 7
24 
25 
26 
27 /********************************* Variables globales *****************************************/
28 
29 long vct      = 0     ; /* Moment de l'evenement      */
30 long interval = 100L  ; /* Interval                   */
31 
32 int ck    = 0 ;
33 int fonc  = 0 ;
34 int test  = 0 ;
35 int scin  = 0 ;
36 int scout = 0 ;
37 int i     = 0 ;
38 int a     = 0 ;
39 int b     = 0 ;
40 int d     = 0 ;
41 int noe   = 0 ;
42 int r0    = 0 ;
43 int r3    = 0 ;
44 int q0    = 0 ;
45 int q3    = 0 ;
46 int ovr   = 0 ;
47 int zero  = 0 ;
48 int signe = 0 ;
49 int np    = 0 ;
50 int ng    = 0 ;
51 int cin   = 0 ;
52 int cout  = 0 ;
53 int y     = 0 ;
54 
55 int r     = 0 ; /* Operande r                 */
56 int s     = 0 ; /* Operande s                 */
57 int res   = 0 ; /* Resultat de l'operation    */
58 int op        ; /* Code operatoire            */
59 int sa        ; /* Sortie a de la ram         */
60 int sb        ; /* Sortie b de la ram         */
61 int sq        ; /* Sortie q de l'accumulateur */
62 int mcode     ; /* Micro code                 */
63 
64 short c[5]    ; /* La retenue */
65 
66 /********************************* Fonctions utiles *******************************************/
67 
68 /*** Transforme un entier en chaine ***/
69 
entierVersChaine(long entier)70 char *entierVersChaine(long entier)
71 {
72  char *chaineEntier ;
73  chaineEntier = (char *) mbkalloc (32 * sizeof (char));
74  sprintf (chaineEntier,"%i",entier);
75 
76  return(chaineEntier);
77 }
78 
79 /*** Transforme un octal en chaine ***/
80 
octVersChaine(int entier)81 char *octVersChaine(int entier)
82 {
83  int temp ;
84  char *chaineEntier ;
85  char *chaineOctal  ;
86 
87  chaineEntier = (char *)mbkalloc(32 * sizeof (char));
88  chaineOctal  = (char *)mbkalloc(32 * sizeof (char));
89 
90  sprintf(chaineEntier,"%i",entier) ;                 /* Met le nombre octal dans la chaine  */
91  temp = (int)strtol(chaineEntier,(char **)NULL,8) ;  /* Convertit le nombre octal en entier */
92  sprintf(chaineOctal,"%i",temp) ;                    /* Met l'entier dans la chaine         */
93  free(chaineEntier) ;
94 
95  return(chaineOctal);
96 }
97 
98 /*** Fait avancer l'horloge de c coups ***/
99 
coupHorloge(long c)100 void coupHorloge(long c)
101 {
102  long i ;
103 
104  for(i = 1 ; i <= c ; i++)
105    {
106     AFFECT(entierVersChaine(vct),"ck","0") ;
107     vct = vct + interval ;
108     AFFECT(entierVersChaine(vct),"ck","1") ;
109     vct = vct + interval ;
110    }
111 }
112 
113 
114 /********************************* Fonctions de verifications *********************************/
115 
116 
117 /*** zero ***/
118 
calculZero(void)119 int calculZero(void)
120 {
121  if(res == 0)
122    zero = 1 ;
123  else
124    zero = 0 ;
125 }
126 
127 /*** Retenue de sortie ***/
128 
calculCout(void)129 void calculCout(void)
130 {
131  int opx ;
132  int opy ;
133  int x   ;
134  int y   ;
135  int i   ;
136  int z   ;
137 
138 /* Initialisation */
139  switch(op)
140    {
141    case RplusS  : opx = r    ;
142                   opy = s    ;
143                   break      ;
144    case SmoinsR : opx = s    ;
145                   opy = ~(r) ;
146                   break      ;
147    case RmoinsS : opx = r    ;
148                   opy = ~(s) ;
149                   break      ;
150    case RouS    :
151    case RetS    : opx = r    ;
152                   opy = s    ;
153                   break      ;
154    case nonRetS :
155    case RouxS   :
156    case nonRouxS:
157 
158    default      : break      ;
159    }
160 
161  c[0] =  cin ;
162 
163  /* Le calcul de la retenue */
164 
165  for (i = 1;i <= 4;i++)
166    {
167     x = (opx & 0x0001);
168     y = (opy & 0x0001);
169        if (((x == 1) && (y == 1))
170           ||((x == 1) && (c[i-1] == 1))
171           ||((y == 1) && (c[i-1] == 1)))
172          c[i] = 1 ;
173        else
174          c[i]=0;
175     opx = opx >> 1 ;
176     opy = opy >> 1 ;
177   }
178 
179    if (c[4]==0)
180      cout = 0 ;
181    else
182      cout = 1 ;
183 }
184 
185 /*** Signe ***/
186 
calculSigne(void)187 void calculSigne(void)
188 {
189  if((res & 0x8) == 0)
190    signe = 0 ;
191  else
192    signe = 1 ;
193 }
194 
195 /*** Depassement de capacite ***/
196 
calculOvr(void)197 void calculOvr(void)
198 {
199  if (c[4] ^ c[3])
200    ovr = 1 ;
201  else
202    ovr = 0 ;
203 }
204 
205 /*** Resultat d'une operation ***/
206 
calculResultat(void)207 void calculResultat(void)
208 {
209  switch(op)
210    {
211    case RplusS   : res = (r + s) % 16 ;
212                    break   ;
213    case SmoinsR  : res = ((s - r) & 0xf) % 16 ;
214                    break ;
215    case RmoinsS  : res = ((r - s) & 0xf) % 16 ;
216                    break ;
217    case RouS     : res = r | s ;
218                    break ;
219    case RetS     : res = r & s ;
220                    break ;
221    case nonRetS  : res = (~(r) & s) & 0xf ;
222                    break ;
223    case RouxS    : res = r ^ s ;
224                    break ;
225    case nonRouxS : res = (~(r ^ s)) & 0xf ;
226                    break ;
227    default       : break ;
228    }
229 }
230 
231 /*** Sorties ***/
232 
calculSortie(void)233 void calculSortie(void)
234 {
235  char *chaineEntier ;
236  int temp ;
237 
238  chaineEntier = (char *) mbkalloc (32 * sizeof (char));
239 
240  sprintf(chaineEntier,"%i",mcode) ;
241  temp = (int)strtol(chaineEntier,(char **)NULL,8) ;
242  free(chaineEntier) ;
243 
244  temp = (temp & 0x1c0) >> 6 ;
245 
246  switch(temp)
247    {
248    case 2  : y = sa  ;
249              break   ;
250    default : y = res ;
251              break   ;
252    }
253 }
254 
255 /*** Code operatoire ***/
256 
calculCodeOp(void)257 void calculCodeOp(void)
258 {
259  char *chaineEntier ;
260  int temp ;
261 
262  chaineEntier = (char *) mbkalloc (32 * sizeof (char));
263 
264  sprintf(chaineEntier,"%i",mcode) ;
265  temp = (int)strtol(chaineEntier,(char **)NULL,8) ;
266  free(chaineEntier) ;
267 
268  temp = (temp & 0x38) >> 3 ;
269 
270  switch(temp)
271    {
272    case 0 : op = RplusS ;
273             break ;
274    case 1 : op = SmoinsR ;
275             break ;
276    case 2 : op = RmoinsS ;
277             break ;
278    case 3 : op = RouS ;
279             break ;
280    case 4 : op = RetS ;
281             break ;
282    case 5 : op = nonRetS ;
283             break ;
284    case 6 : op = RouxS ;
285             break ;
286    default : op = nonRouxS ;
287              break ;
288    }
289 }
290 
operation(long vect)291 void operation(long vect)
292 {
293  calculResultat() ;
294  calculSigne() ;
295 
296  calculCout() ;
297  calculOvr() ;
298  calculZero() ;
299 
300  if((op == RplusS) || (op == SmoinsR) || (op == RmoinsS))
301    {
302     AFFECT(entierVersChaine(vect),"ovr",entierVersChaine(ovr)) ;
303     AFFECT(entierVersChaine(vect),"zero",entierVersChaine(zero)) ;
304     AFFECT(entierVersChaine(vect),"signe",entierVersChaine(signe)) ;
305     AFFECT(entierVersChaine(vect),"cout",entierVersChaine(cout)) ;
306    }
307  else
308    {
309     AFFECT(entierVersChaine(vect),"ovr",entierVersChaine(0)) ;
310     AFFECT(entierVersChaine(vect),"zero",entierVersChaine(zero)) ;
311     AFFECT(entierVersChaine(vect),"signe",entierVersChaine(signe)) ;
312     AFFECT(entierVersChaine(vect),"cout",entierVersChaine(0)) ;
313    }
314 }
315 
sortie(long vect)316 void sortie(long vect)
317 {
318  calculSortie() ;
319 
320  AFFECT(entierVersChaine(vect),"y",entierVersChaine(y)) ;
321 }
322 
codeOp(long vect)323 void codeOp(long vect)
324 {
325  calculCodeOp() ;
326 
327  AFFECT(entierVersChaine(vect),"i",octVersChaine(mcode)) ;
328 }
329 
entree(long vect)330 void entree(long vect)
331 {
332  AFFECT(entierVersChaine(vect),"scin",entierVersChaine(scin)) ;
333  AFFECT(entierVersChaine(vect),"a",entierVersChaine(a)) ;
334  AFFECT(entierVersChaine(vect),"b",entierVersChaine(b)) ;
335  AFFECT(entierVersChaine(vect),"d",entierVersChaine(d)) ;
336  AFFECT(entierVersChaine(vect),"noe",entierVersChaine(noe)) ;
337  /*  AFFECT(entierVersChaine(vect),"r0",entierVersChaine(r0)) ; */
338  AFFECT(entierVersChaine(vect),"r3",entierVersChaine(r3)) ;
339  /*  AFFECT(entierVersChaine(vect),"q0",entierVersChaine(q0)) ; */
340  AFFECT(entierVersChaine(vect),"q3",entierVersChaine(q3)) ;
341  AFFECT(entierVersChaine(vect),"cin",entierVersChaine(cin)) ;
342 
343 }
344 
345 
346 /**********************************************************************************************/
347 /********************************* Fonction principale ****************************************/
348 /**********************************************************************************************/
349 
main()350 int main()
351 {
352  int i ;
353  int x ;
354  int z ;
355 
356  DEF_GENPAT ("pattern");
357 
358  DECLAR ("a",":1","X",IN,"3 DOWNTO 0","");
359  DECLAR ("b",":1","X",IN,"3 DOWNTO 0","");
360  DECLAR ("d",":1","X",IN,"3 DOWNTO 0","");
361  DECLAR ("i",":1","O",IN,"8 DOWNTO 0","");
362  DECLAR ("fonc",":1","B",IN,"","");
363  DECLAR ("test",":1","B",IN,"","");
364  DECLAR ("scin",":1","B",IN,"","");
365  DECLAR ("noe",":1","B",IN,"","");
366  DECLAR ("ck",":1","B",IN,"","");
367  DECLAR ("cin",":1","B",IN,"","");
368  DECLAR ("r0",":1","B",INOUT,"","");
369  DECLAR ("r3",":1","B",INOUT,"","");
370  DECLAR ("q0",":1","B",INOUT,"","");
371  DECLAR ("q3",":1","B",INOUT,"","");
372  DECLAR ("y",":1","X",OUT,"3 DOWNTO 0","");
373  DECLAR ("zero",":1","B",OUT,"","");
374  DECLAR ("signe",":1","B",OUT,"","");
375  DECLAR ("scout",":1","B",OUT,"","");
376  DECLAR ("ovr",":1","B",OUT,"","");
377  DECLAR ("np",":1","B",OUT,"","");
378  DECLAR ("ng",":1","B",OUT,"","");
379  DECLAR ("cout",":1","B",OUT,"","");
380  DECLAR ("vdd",":1","B",IN,"","");
381  DECLAR ("vss",":1","B",IN,"","");
382  DECLAR ("vdde",":1","B",IN,"","");
383  DECLAR ("vsse",":1","B",IN,"","");
384 
385 
386  vct = 0 ;
387 
388 
389 
390  /****************** Initialiation ******************/
391  AFFECT (entierVersChaine(vct),"a","0b0000");
392  AFFECT (entierVersChaine(vct),"b","0b0000");
393  AFFECT (entierVersChaine(vct),"fonc","0b1");
394  AFFECT (entierVersChaine(vct),"test","0b0");
395  AFFECT (entierVersChaine(vct),"scin","0b0");
396  AFFECT (entierVersChaine(vct),"noe","0b0");
397  AFFECT (entierVersChaine(vct),"cin","0b0");
398  AFFECT (entierVersChaine(vct),"vdd","1") ;
399  AFFECT (entierVersChaine(vct),"vss","0") ;
400  AFFECT (entierVersChaine(vct),"vdde","1") ;
401  AFFECT (entierVersChaine(vct),"vsse","0") ;
402  AFFECT (entierVersChaine(vct),"i","0b0000") ;
403  AFFECT (entierVersChaine(vct),"d","0b0000") ;
404  AFFECT (entierVersChaine(vct),"ck","1") ;
405  AFFECT (entierVersChaine(vct),"scout","?0b*") ;
406  /***************************************************/
407 
408 
409 
410 
411  /*****************************************/
412  /***** Ecriture dans le registre Q *******/
413  /*****************************************/
414 
415  /* Ecriture de 1010 */
416 
417  /* 1 **************/
418  AFFECT (entierVersChaine(vct),"i",octVersChaine(007));
419  AFFECT (entierVersChaine(vct),"d","0b1010");
420 
421  AFFECT (entierVersChaine(vct),"y","0b1010");
422  AFFECT (entierVersChaine(vct),"signe","0b1");
423 
424  coupHorloge(1) ;
425 
426  /* Ecriture de 0101 */
427 
428  /* 2 **************/
429 
430  AFFECT (entierVersChaine(vct),"i","0o007");
431  AFFECT (entierVersChaine(vct),"d","0b0101");
432  AFFECT (entierVersChaine(vct),"y","0b0101");
433  AFFECT (entierVersChaine(vct),"signe","0b0");
434 
435  coupHorloge(1) ;
436 
437  AFFECT (entierVersChaine(vct),"y","0b0101");
438  AFFECT (entierVersChaine(vct),"signe","0b0");
439 
440  /* Lecture de l'accu */
441 
442  /* 3 **************/
443 
444  AFFECT (entierVersChaine(vct),"i","0o032");
445  AFFECT (entierVersChaine(vct),"d","0b1010");
446  AFFECT (entierVersChaine(vct),"y","0b0101");
447 
448  coupHorloge(1) ;
449 
450  AFFECT (entierVersChaine(vct),"y","0b0101");
451  AFFECT (entierVersChaine(vct),"signe","0b0");
452 
453 
454 
455  /*****************************************************************/
456  /***** Decalage droite du registre Q et ecriture dans la ram *****/
457  /*****************************************************************/
458 
459  /* 4 **************/
460 
461  AFFECT (entierVersChaine(vct),"i","0o462");
462  AFFECT (entierVersChaine(vct),"b","0b0000");
463  AFFECT (entierVersChaine(vct),"r3","0b1");
464  AFFECT (entierVersChaine(vct),"q3","0b1");
465 
466  coupHorloge(1) ;
467 
468  AFFECT (entierVersChaine(vct-interval),"y","0b1010");
469  AFFECT (entierVersChaine(vct-interval),"signe","0b1");
470 
471  /* 5 **************/
472 
473  AFFECT (entierVersChaine(vct),"i","0o462");
474  AFFECT (entierVersChaine(vct),"b","0b0001");
475  AFFECT (entierVersChaine(vct),"r3","0b0");
476  AFFECT (entierVersChaine(vct),"q3","0b0");
477 
478  coupHorloge(1) ;
479 
480  AFFECT (entierVersChaine(vct-interval),"y","0b0101");
481  AFFECT (entierVersChaine(vct-interval),"signe","0b0");
482 
483 
484  /* 6 **************/
485 
486  AFFECT (entierVersChaine(vct),"i","0o462");
487  AFFECT (entierVersChaine(vct),"b","0b0010");
488  AFFECT (entierVersChaine(vct),"r3","0b1");
489  AFFECT (entierVersChaine(vct),"q3","0b1");
490 
491  coupHorloge(1) ;
492 
493  AFFECT (entierVersChaine(vct-interval),"y","0b1010");
494  AFFECT (entierVersChaine(vct-interval),"signe","0b1");
495 
496 
497  /* 7 **************/
498 
499  AFFECT (entierVersChaine(vct),"i","0o462");
500  AFFECT (entierVersChaine(vct),"b","0b0011");
501  AFFECT (entierVersChaine(vct),"r3","0b0");
502  AFFECT (entierVersChaine(vct),"q3","0b0");
503 
504  coupHorloge(1) ;
505 
506  AFFECT (entierVersChaine(vct-interval),"y","0b0101");
507  AFFECT (entierVersChaine(vct-interval),"signe","0b0");
508 
509 
510  /* 8 **************/
511 
512  AFFECT (entierVersChaine(vct),"i","0o462");
513  AFFECT (entierVersChaine(vct),"b","0b0100");
514  AFFECT (entierVersChaine(vct),"r3","0b1");
515  AFFECT (entierVersChaine(vct),"q3","0b1");
516 
517  coupHorloge(1) ;
518 
519  AFFECT (entierVersChaine(vct-interval),"y","0b1010");
520  AFFECT (entierVersChaine(vct-interval),"signe","0b1");
521 
522 
523  /* 9 **************/
524 
525  AFFECT (entierVersChaine(vct),"i","0o462");
526  AFFECT (entierVersChaine(vct),"b","0b0101");
527  AFFECT (entierVersChaine(vct),"r3","0b0");
528  AFFECT (entierVersChaine(vct),"q3","0b0");
529 
530  coupHorloge(1) ;
531 
532  AFFECT (entierVersChaine(vct-interval),"y","0b0101");
533  AFFECT (entierVersChaine(vct-interval),"signe","0b0");
534 
535 
536  /* 10 **************/
537 
538  AFFECT (entierVersChaine(vct),"i","0o462");
539  AFFECT (entierVersChaine(vct),"b","0b0110");
540  AFFECT (entierVersChaine(vct),"r3","0b1");
541  AFFECT (entierVersChaine(vct),"q3","0b1");
542 
543  coupHorloge(1) ;
544 
545  AFFECT (entierVersChaine(vct-interval),"y","0b1010");
546  AFFECT (entierVersChaine(vct-interval),"signe","0b1");
547 
548 
549  /* 11 **************/
550 
551  AFFECT (entierVersChaine(vct),"i","0o462");
552  AFFECT (entierVersChaine(vct),"b","0b0111");
553  AFFECT (entierVersChaine(vct),"r3","0b0");
554  AFFECT (entierVersChaine(vct),"q3","0b0");
555 
556  coupHorloge(1) ;
557 
558  AFFECT (entierVersChaine(vct-interval),"y","0b0101");
559  AFFECT (entierVersChaine(vct-interval),"signe","0b0");
560 
561  /* 12 **************/
562 
563  AFFECT (entierVersChaine(vct),"i","0o462");
564  AFFECT (entierVersChaine(vct),"b","0b1000");
565  AFFECT (entierVersChaine(vct),"r3","0b1");
566  AFFECT (entierVersChaine(vct),"q3","0b1");
567 
568  coupHorloge(1) ;
569 
570  AFFECT (entierVersChaine(vct-interval),"y","0b1010");
571  AFFECT (entierVersChaine(vct-interval),"signe","0b1");
572 
573  /*****************************************************/
574  /***** Lecture de ce qui a ete ecrit dans la RAM *****/
575  /*****************************************************/
576 
577  /* 12 **************/
578 
579  AFFECT (entierVersChaine(vct),"i","0o163");
580 
581  for(i = 0 ; i < 7 ; i = i+2)
582    {
583     AFFECT (entierVersChaine(vct),"b",entierVersChaine(i));
584     AFFECT (entierVersChaine(vct),"y","0b1010");
585     AFFECT (entierVersChaine(vct),"signe","0b1");
586 
587     coupHorloge(1) ;
588 
589     AFFECT (entierVersChaine(vct),"b",entierVersChaine(i+1));
590     AFFECT (entierVersChaine(vct),"y","0b0101");
591     AFFECT (entierVersChaine(vct),"signe","0b0");
592 
593     coupHorloge(1) ;
594    }
595 
596 
597 
598 
599 
600  /*****************************************************************/
601  /***** Decalage gauche du registre Q et ecriture dans la ram *****/
602  /*****************************************************************/
603 
604 
605  /* Ecriture de 0101 */
606 
607  /*   **************/
608 
609 
610  AFFECT (entierVersChaine(vct),"r3","?0b*");
611  AFFECT (entierVersChaine(vct),"q3","?0b*");
612  AFFECT (entierVersChaine(vct),"r0","?0b*");
613  AFFECT (entierVersChaine(vct),"q0","?0b*");
614 
615 
616  /* Ecriture de 1010 */
617 
618  /* 1 **************/
619  AFFECT (entierVersChaine(vct),"i",octVersChaine(007));
620  AFFECT (entierVersChaine(vct),"d","0b1010");
621 
622  AFFECT (entierVersChaine(vct),"y","0b1010");
623  AFFECT (entierVersChaine(vct),"signe","0b1");
624 
625  coupHorloge(1) ;
626 
627  /* Ecriture de 0101 */
628 
629  /* 2 **************/
630 
631  AFFECT (entierVersChaine(vct),"i","0o007");
632  AFFECT (entierVersChaine(vct),"d","0b0101");
633  AFFECT (entierVersChaine(vct),"y","0b0101");
634  AFFECT (entierVersChaine(vct),"signe","0b0");
635 
636  coupHorloge(1) ;
637 
638  AFFECT (entierVersChaine(vct),"y","0b0101");
639  AFFECT (entierVersChaine(vct),"signe","0b0");
640 
641  /* Lecture de l'accu */
642 
643  /* 3 **************/
644 
645  AFFECT (entierVersChaine(vct),"i","0o032");
646  AFFECT (entierVersChaine(vct),"d","0b1010");
647  AFFECT (entierVersChaine(vct),"y","0b0101");
648 
649  coupHorloge(1) ;
650 
651  AFFECT (entierVersChaine(vct),"y","0b0101");
652  AFFECT (entierVersChaine(vct),"signe","0b0");
653 
654 
655 
656  /*   **************/
657  /*   **************/
658 
659 
660  AFFECT (entierVersChaine(vct),"i","0o662");
661  AFFECT (entierVersChaine(vct),"b","0b0000");
662  AFFECT (entierVersChaine(vct),"r0","0b0");
663  AFFECT (entierVersChaine(vct),"q0","0b0");
664 
665  coupHorloge(1) ;
666 
667  AFFECT (entierVersChaine(vct-interval),"y","0b1010");
668  AFFECT (entierVersChaine(vct-interval),"signe","0b1");
669 
670  /*   **************/
671 
672  AFFECT (entierVersChaine(vct),"i","0o662");
673  AFFECT (entierVersChaine(vct),"b","0b0001");
674  AFFECT (entierVersChaine(vct),"r0","0b1");
675  AFFECT (entierVersChaine(vct),"q0","0b1");
676 
677  coupHorloge(1) ;
678 
679  AFFECT (entierVersChaine(vct-interval),"y","0b0101");
680  AFFECT (entierVersChaine(vct-interval),"signe","0b0");
681 
682 
683  /*   **************/
684 
685 
686  AFFECT (entierVersChaine(vct),"i","0o662");
687  AFFECT (entierVersChaine(vct),"b","0b0010");
688  AFFECT (entierVersChaine(vct),"r0","0b0");
689  AFFECT (entierVersChaine(vct),"q0","0b0");
690 
691  coupHorloge(1) ;
692 
693  AFFECT (entierVersChaine(vct-interval),"y","0b1010");
694  AFFECT (entierVersChaine(vct-interval),"signe","0b1");
695 
696 
697  /*   **************/
698 
699  AFFECT (entierVersChaine(vct),"i","0o662");
700  AFFECT (entierVersChaine(vct),"b","0b0011");
701  AFFECT (entierVersChaine(vct),"r0","0b1");
702  AFFECT (entierVersChaine(vct),"q0","0b1");
703 
704  coupHorloge(1) ;
705 
706  AFFECT (entierVersChaine(vct-interval),"y","0b0101");
707  AFFECT (entierVersChaine(vct-interval),"signe","0b0");
708 
709 
710  /*   **************/
711 
712  AFFECT (entierVersChaine(vct),"i","0o662");
713  AFFECT (entierVersChaine(vct),"b","0b0100");
714  AFFECT (entierVersChaine(vct),"r0","0b0");
715  AFFECT (entierVersChaine(vct),"q0","0b0");
716 
717  coupHorloge(1) ;
718 
719  AFFECT (entierVersChaine(vct-interval),"y","0b1010");
720  AFFECT (entierVersChaine(vct-interval),"signe","0b1");
721 
722 
723  /*   **************/
724 
725  AFFECT (entierVersChaine(vct),"i","0o662");
726  AFFECT (entierVersChaine(vct),"b","0b0101");
727  AFFECT (entierVersChaine(vct),"r0","0b1");
728  AFFECT (entierVersChaine(vct),"q0","0b1");
729 
730  coupHorloge(1) ;
731 
732  AFFECT (entierVersChaine(vct-interval),"y","0b0101");
733  AFFECT (entierVersChaine(vct-interval),"signe","0b0");
734 
735 
736  /*    **************/
737 
738  AFFECT (entierVersChaine(vct),"i","0o662");
739  AFFECT (entierVersChaine(vct),"b","0b0110");
740  AFFECT (entierVersChaine(vct),"r0","0b0");
741  AFFECT (entierVersChaine(vct),"q0","0b0");
742 
743  coupHorloge(1) ;
744 
745  AFFECT (entierVersChaine(vct-interval),"y","0b1010");
746  AFFECT (entierVersChaine(vct-interval),"signe","0b1");
747 
748 
749  /*    **************/
750 
751  AFFECT (entierVersChaine(vct),"i","0o662");
752  AFFECT (entierVersChaine(vct),"b","0b0111");
753  AFFECT (entierVersChaine(vct),"r0","0b1");
754  AFFECT (entierVersChaine(vct),"q0","0b1");
755 
756  coupHorloge(1) ;
757 
758  AFFECT (entierVersChaine(vct-interval),"y","0b0101");
759  AFFECT (entierVersChaine(vct-interval),"signe","0b0");
760 
761  /*    **************/
762 
763  AFFECT (entierVersChaine(vct),"i","0o662");
764  AFFECT (entierVersChaine(vct),"b","0b1000");
765  AFFECT (entierVersChaine(vct),"r0","0b0");
766  AFFECT (entierVersChaine(vct),"q0","0b0");
767 
768  coupHorloge(1) ;
769 
770  AFFECT (entierVersChaine(vct-interval),"y","0b1010");
771  AFFECT (entierVersChaine(vct-interval),"signe","0b1");
772 
773  /*****************************************************/
774  /***** Lecture de ce qui a ete ecrit dans la RAM *****/
775  /*****************************************************/
776 
777  /* 12 **************/
778 
779  AFFECT (entierVersChaine(vct),"i","0o163");
780 
781  for(i = 0 ; i < 7 ; i = i+2)
782    {
783     AFFECT (entierVersChaine(vct),"b",entierVersChaine(i));
784     AFFECT (entierVersChaine(vct),"y","0b1010");
785     AFFECT (entierVersChaine(vct),"signe","0b1");
786 
787     coupHorloge(1) ;
788 
789     AFFECT (entierVersChaine(vct),"b",entierVersChaine(i+1));
790     AFFECT (entierVersChaine(vct),"y","0b0101");
791     AFFECT (entierVersChaine(vct),"signe","0b0");
792 
793     coupHorloge(1) ;
794    }
795 
796 
797  /*****************************************************************/
798  /***** Lectures et ecritures de la ram ***************************/
799  /*****************************************************************/
800 
801  AFFECT (entierVersChaine(vct),"signe","?0b*");
802 
803  for(i = 0 ; i < 16 ; i++)
804    {
805     /* Ecriture aux adresses a et b */
806     AFFECT (entierVersChaine(vct),"i","0o337");
807     AFFECT (entierVersChaine(vct),"d",entierVersChaine(i));
808     AFFECT (entierVersChaine(vct),"a",entierVersChaine(i));
809     AFFECT (entierVersChaine(vct),"b",entierVersChaine(i));
810     AFFECT (entierVersChaine(vct),"y",entierVersChaine(i));
811     coupHorloge(1) ;
812    }
813 
814  coupHorloge(1) ;
815 
816  AFFECT (entierVersChaine(vct),"i","0o137");
817  AFFECT (entierVersChaine(vct),"d","0b0000");
818  AFFECT (entierVersChaine(vct),"a","0b0000");
819  AFFECT (entierVersChaine(vct),"b","0b0000");
820 
821  AFFECT (entierVersChaine(vct),"y","?0b****");
822  coupHorloge(1) ;
823 
824  /* Lecture a l'adresse a */
825  for(i = 0 ; i < 16 ; i++)
826    {
827     AFFECT (entierVersChaine(vct),"i","0o134");
828     AFFECT (entierVersChaine(vct),"a",entierVersChaine(i));
829     AFFECT (entierVersChaine(vct),"y",entierVersChaine(i));
830     coupHorloge(1) ;
831    }
832 
833  AFFECT (entierVersChaine(vct-interval),"y","?0b****");
834  coupHorloge(1) ;
835 
836  AFFECT (entierVersChaine(vct),"i","0o137");
837  AFFECT (entierVersChaine(vct),"d","0b0000");
838  AFFECT (entierVersChaine(vct),"a","0b0000");
839  AFFECT (entierVersChaine(vct),"b","0b0000");
840   AFFECT (entierVersChaine(vct),"y","?0b****");
841  coupHorloge(1) ;
842 
843 
844 
845  /* Lecture a l'adresse b */
846 
847  for(i = 0 ; i < 16 ; i++)
848    {
849     AFFECT (entierVersChaine(vct),"i","0o133");
850     AFFECT (entierVersChaine(vct),"b",entierVersChaine(i));
851 
852     coupHorloge(1) ;
853 
854 
855     AFFECT (entierVersChaine(vct-interval),"y",entierVersChaine(i));
856 
857     coupHorloge(1) ;
858 
859     AFFECT (entierVersChaine(vct-interval),"y","?0b****");
860    }
861 
862  /*****************************************************************/
863  /***** Operations arithmetiques et booleennes ********************/
864  /*****************************************************************/
865 
866 
867  scin  = 0 ;
868  scout = 0 ;
869  a     = 0 ;
870  b     = 0 ;
871  d     = 0 ;
872  noe   = 0 ;
873  r0    = 0 ;
874  r3    = 0 ;
875  q0    = 0 ;
876  q3    = 0 ;
877  ovr   = 0 ;
878  zero  = 0 ;
879  signe = 0 ;
880  cin   = 0 ;
881  y     = 0 ;
882 
883  r     = 0   ;
884  s     = 0   ;
885  sa    = 0   ;
886  sb    = 0   ;
887  sq    = 0   ;
888  mcode = 107 ;
889 
890  codeOp(vct) ;
891  for(i = 0 ; i < 16 ; i++)   /* D,0  D+0  */
892    {
893     r = d ;
894     s = 0 ;
895     entree(vct) ;
896     operation(vct) ;
897     sortie(vct) ;
898     d++ ;
899 
900     coupHorloge(1) ;
901    }
902 
903 
904  d     = 0   ;
905  r     = 0   ;
906  s     = 0   ;
907  cin   = 1   ;
908  mcode = 117 ;
909 
910  codeOp(vct) ;
911  for(i = 0 ; i < 16 ; i++)   /* D,0  0-D  */
912    {
913     r = d ;
914     s = 0 ;
915     entree(vct) ;
916     operation(vct) ;
917     sortie(vct) ;
918     d++ ;
919 
920     coupHorloge(1) ;
921    }
922 
923  d     = 0   ;
924  r     = 0   ;
925  s     = 0   ;
926  cin   = 1   ;
927  mcode = 127 ;
928 
929  codeOp(vct) ;
930  for(i = 0 ; i < 16 ; i++)   /* D,0  D-0  */
931    {
932     r = d ;
933     s = 0 ;
934     entree(vct) ;
935     operation(vct) ;
936     sortie(vct) ;
937     d++ ;
938 
939     coupHorloge(1) ;
940    }
941 
942  d     = 0   ;
943  r     = 0   ;
944  s     = 0   ;
945  cin   = 1   ;
946  mcode = 127 ;
947 
948  codeOp(vct) ;
949  for(i = 0 ; i < 16 ; i++)   /* D,0  D-0  */
950    {
951     r = d ;
952     s = 0 ;
953     entree(vct) ;
954     operation(vct) ;
955     sortie(vct) ;
956     d++ ;
957 
958     coupHorloge(1) ;
959    }
960 
961  d     = 0   ;
962  r     = 0   ;
963  s     = 0   ;
964  cin   = 0   ;
965  mcode = 167 ;
966 
967  codeOp(vct) ;
968  for(i = 0 ; i < 16 ; i++)   /* D,0   D ou exclusif 0  */
969    {
970     r = d ;
971     s = 0 ;
972     entree(vct) ;
973     operation(vct) ;
974     sortie(vct) ;
975     d++ ;
976 
977     coupHorloge(1) ;
978    }
979 
980  d     = 0   ;
981  r     = 0   ;
982  s     = 0   ;
983  cin   = 0   ;
984  mcode = 167 ;
985 
986  codeOp(vct) ;
987  for(i = 0 ; i < 16 ; i++)   /* D,0   D ou exclusif 0  */
988    {
989     r = d ;
990     s = 0 ;
991     entree(vct) ;
992     operation(vct) ;
993     sortie(vct) ;
994     d++ ;
995 
996     coupHorloge(1) ;
997    }
998 
999  d     = 0   ;
1000  r     = 0   ;
1001  s     = 0   ;
1002  cin   = 0   ;
1003  mcode = 177 ;
1004 
1005  codeOp(vct) ;
1006 
1007  for(i = 0 ; i < 16 ; i++)   /* D,0   non D ou exclusif 0  */
1008    {
1009     r = d ;
1010     s = 0 ;
1011     entree(vct) ;
1012     operation(vct) ;
1013     sortie(vct) ;
1014     d++ ;
1015 
1016     coupHorloge(1) ;
1017    }
1018 
1019  /* Chargement de 5 dans l'accu */
1020  d     = 5   ;
1021  r     = 5   ;
1022  s     = 0   ;
1023  sa    = 5   ;
1024  cin   = 0   ;
1025  mcode = 7   ;
1026 
1027  codeOp(vct) ;
1028  for(i = 0 ; i < 3 ; i++)   /* D,0   D + 0 */
1029    {
1030     r = d ;
1031     s = 0 ;
1032     entree(vct) ;
1033     operation(vct) ;
1034     sortie(vct) ;
1035 
1036     coupHorloge(1) ;
1037    }
1038 
1039  d     = 0   ;
1040  r     = 0   ;
1041  s     = 0   ;
1042  sa    = 5   ;
1043  cin   = 0   ;
1044  mcode = 106 ;
1045 
1046  codeOp(vct) ;
1047  for(i = 0 ; i < 16 ; i++)   /* D,0   D + Q avec ovf et tout le tintoin  */
1048    {
1049     r = d ;
1050     s = sa ;
1051     entree(vct) ;
1052     operation(vct) ;
1053     sortie(vct) ;
1054     d++ ;
1055 
1056     coupHorloge(1) ;
1057    }
1058  d     = 4   ;
1059  r     = 0   ;
1060  s     = 0   ;
1061  sa    = 5   ;
1062  cin   = 1   ;
1063  mcode = 116 ;
1064 
1065  codeOp(vct) ;
1066  for(i = 0 ; i < 16 ; i++)   /* D,0   Q - D avec ovf et tout le tintoin  */
1067    {
1068     r = d ;
1069     s = 5 ;
1070     entree(vct) ;
1071     operation(vct) ;
1072     sortie(vct) ;
1073     if (d < 15)
1074 	d++ ;
1075     else
1076 	d = 0;
1077 
1078     coupHorloge(1) ;
1079    }
1080 
1081  d     = 8   ;
1082  r     = 0   ;
1083  s     = 0   ;
1084  sa    = 5   ;
1085  cin   = 1   ;
1086  mcode = 126 ;
1087 
1088  codeOp(vct) ;
1089  for(i = 0 ; i < 16 ; i++)   /* D,0   D - Q avec ovf et tout le tintoin  */
1090    {
1091     r = d ;
1092     s = 5 ;
1093     entree(vct) ;
1094     operation(vct) ;
1095     sortie(vct) ;
1096     if (d < 15)
1097 	d++ ;
1098     else
1099 	d = 0;
1100 
1101     coupHorloge(1) ;
1102    }
1103 
1104  SAV_GENPAT ();
1105  exit(0);
1106 }
1107 
1108 
1109 
1110