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