OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

[/] [or1k/] [trunk/] [insight/] [utils/] [amd-udi/] [mondfe/] [commands.c] - Blame information for rev 1774

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 578 markom
static char _[] = " @(#)commands.c      5.23 93/08/23 15:30:30, Srini, AMD ";
2
/******************************************************************************
3
 * Copyright 1992 Advanced Micro Devices, Inc.
4
 *
5
 * This software is the property of Advanced Micro Devices, Inc  (AMD)  which
6
 * specifically  grants the user the right to modify, use and distribute this
7
 * software provided this notice is not removed or altered.  All other rights
8
 * are reserved by AMD.
9
 *
10
 * AMD MAKES NO WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, WITH REGARD TO THIS
11
 * SOFTWARE.  IN NO EVENT SHALL AMD BE LIABLE FOR INCIDENTAL OR CONSEQUENTIAL
12
 * DAMAGES IN CONNECTION WITH OR ARISING FROM THE FURNISHING, PERFORMANCE, OR
13
 * USE OF THIS SOFTWARE.
14
 *
15
 * So that all may benefit from your experience, please report  any  problems
16
 * or  suggestions about this software to the 29K Technical Support Center at
17
 * 800-29-29-AMD (800-292-9263) in the USA, or 0800-89-1131  in  the  UK,  or
18
 * 0031-11-1129 in Japan, toll free.  The direct dial number is 512-462-4118.
19
 *
20
 * Advanced Micro Devices, Inc.
21
 * 29K Support Products
22
 * Mail Stop 573
23
 * 5900 E. Ben White Blvd.
24
 * Austin, TX 78741
25
 * 800-292-9263
26
 *****************************************************************************
27
 *      Engineer: Srini Subramanian.
28
 *****************************************************************************
29
 **       This file contains the functions associated with
30
 **       commands used by the main program.  In general,
31
 **       the commands in this file are fairly simple and
32
 **       were not given a source file of their own.
33
 *****************************************************************************
34
 */
35
 
36
#include <stdio.h>
37
#include <ctype.h>
38
#include "memspcs.h"
39
#include "main.h"
40
#include "monitor.h"
41
#include "macros.h"
42
#include "help.h"
43
#include "miniint.h"
44
#include "error.h"
45
 
46
#ifdef MSDOS
47
#include <stdlib.h>
48
#include <string.h>
49
#else
50
#include <strings.h>
51
#endif
52
 
53
 
54
extern  int   get_addr_29k PARAMS((char *, struct addr_29k_t *));
55
extern  int   addr_29k_ok PARAMS((struct addr_29k_t *));
56
 
57
extern  int   get_word PARAMS((char *, INT32 *));
58
 
59
/*
60
** Global variables
61
*/
62
 
63
static char *processor_name[] = {
64
   /*  0 */   "Am29000",
65
   /*  1 */   "Am29005",
66
   /*  2 */   "Am29050",
67
   /*  3 */   "Am29035",
68
   /*  4 */   "Am29030",
69
   /*  5 */   "Am29200",
70
   /*  6 */   "Am29240",
71
   /*  7 */   "Cougar",
72
   /*  8 */   "TBA",
73
   /* 9 */    "TBA"
74
   };
75
#define NO_PROCESSOR    9
76
 
77
static char *coprocessor_name[] = {
78
   /*  0 */   "None",
79
   /*  1 */   "Am29027 (revision A)",
80
   };
81
 
82
static char *io_control_name[] = {
83
   /*  0 */   "Console controlled by target.",
84
   /*  1 */   "Console controlled by host."
85
   };
86
 
87
 
88
 
89
/*
90
** This command is used to print out the configuration
91
** of the system.  This includes both host and target
92
** configurations.
93
**
94
** This command also re-allocates the message buffers
95
** and the breakpoint array.  This permits this command
96
** to be used to re-configure the host for a new target
97
** without restarting the monitor.  This is useful in cases
98
** where the target is reset or changed.
99
*/
100
 
101
INT32
102
config_cmd(token, token_count)
103
   char   *token[];
104
   int     token_count;
105
   {
106
   int     processor;
107
   int     coprocessor;
108
   char    revision;
109
   char         prtbuf[256];
110
 
111
   INT32        retval;
112
 
113
 
114
   /* Get target CONFIG */
115
   if ((retval = Mini_config_req(&target_config, &versions_etc)) != SUCCESS) {
116
     return(retval);
117
   };
118
   /* If returned SUCCESSfully do the rest */
119
 
120
 
121
 
122
   /* Print out configuration information
123
   ** Note:  a -1 is no coprocessor present, 0 is an
124
   **        Am29027 (revision A), etc ...  To get
125
   **        the array index for the coprocessor_name,
126
   **        add one to the target_config.coprocessor.
127
   */
128
 
129
/* ----------------------------------------------------------------- */
130
   sprintf(&prtbuf[0], "\n");
131
   sprintf(&prtbuf[strlen(prtbuf)], "                MiniMON29K R 3.0 Debugger Front End.\n");
132
   if (io_config.echo_mode == (INT32) TRUE)
133
      fprintf (io_config.echo_file, "%s", &prtbuf[0]);
134
   fprintf (stderr, "%s", &prtbuf[0]);
135
 
136
/* ----------------------------------------------------------------- */
137
   sprintf(&prtbuf[0], "            Copyright 1993 Advanced Micro Devices, Inc.\n");
138
   sprintf(&prtbuf[strlen(prtbuf)], "                       Version %s (%s)\n",
139
          host_config.version,
140
          host_config.date);
141
   if (io_config.echo_mode == (INT32) TRUE)
142
      fprintf (io_config.echo_file, "%s", &prtbuf[0]);
143
   fprintf (stderr, "%s", &prtbuf[0]);
144
 
145
/* ----------------------------------------------------------------- */
146
   sprintf(&prtbuf[0], "\n");
147
   if (target_config.processor_id == (UINT32) -1)
148
      sprintf(&prtbuf[strlen(prtbuf)], "\tProcessor type:            %s \n", processor_name[NO_PROCESSOR]);
149
 
150
   else {
151
 
152
      if ((target_config.processor_id & 0x58) == 0x58) {
153
        revision = (char) ('A' + (target_config.processor_id & 0x07));
154
        sprintf(&prtbuf[strlen(prtbuf)], "\tProcessor type:            %s (revision %c)\n", "Am29205", (char) revision);
155
 
156
      } else {
157
 
158
      processor = (int) (target_config.processor_id >> 4);
159
      revision = (char) ('A' + (target_config.processor_id & 0x0f));
160
      sprintf(&prtbuf[strlen(prtbuf)], "\tProcessor type:            %s (revision %c)\n", processor_name[processor], revision);
161
 
162
      }
163
 
164
   }
165
 
166
   if (io_config.echo_mode == (INT32) TRUE)
167
      fprintf (io_config.echo_file, "%s", &prtbuf[0]);
168
   fprintf (stderr, "%s", &prtbuf[0]);
169
/* ----------------------------------------------------------------- */
170
      coprocessor = (int) target_config.coprocessor + 1;
171
      sprintf(&prtbuf[0], "\tCoprocessor:               %s\n",
172
          coprocessor_name[coprocessor]);
173
/* ----------------------------------------------------------------- */
174
   if ((target_config.ROM_start == (ADDR32) -1) &&
175
                        (target_config.ROM_size == (INT32) -1)) {
176
      sprintf(&prtbuf[strlen(prtbuf)], "\tROM range:                 Unavailable\n");
177
   } else {
178
      sprintf(&prtbuf[strlen(prtbuf)], "\tROM range:                 0x%lx to 0x%lx (%luK)\n",
179
          target_config.ROM_start,
180
          (target_config.ROM_start + (ADDR32) target_config.ROM_size - 1),
181
          (unsigned long) target_config.ROM_size/1024);
182
   }
183
   if (io_config.echo_mode == (INT32) TRUE)
184
      fprintf (io_config.echo_file, "%s", &prtbuf[0]);
185
   fprintf (stderr, "%s", &prtbuf[0]);
186
/* ----------------------------------------------------------------- */
187
   if ((target_config.I_mem_start == (ADDR32) -1) &&
188
                        (target_config.I_mem_size == (INT32) -1)) {
189
      sprintf(&prtbuf[0], "\tInstruction memory range:  Unavailable\n");
190
   } else {
191
      sprintf(&prtbuf[0], "\tInstruction memory range:  0x%lx to 0x%lx (%luK)\n",
192
          target_config.I_mem_start,
193
          (target_config.I_mem_start + (ADDR32) target_config.I_mem_size - 1),
194
          (unsigned long) target_config.I_mem_size/1024);
195
   }
196
/* ----------------------------------------------------------------- */
197
   if ((target_config.D_mem_start == (ADDR32) -1) &&
198
                        (target_config.D_mem_size == (INT32) -1)) {
199
      sprintf(&prtbuf[strlen(prtbuf)], "\tData memory range:         Unavailable\n");
200
   } else {
201
      sprintf(&prtbuf[strlen(prtbuf)], "\tData memory range:         0x%lx to 0x%lx (%luK)\n",
202
          target_config.D_mem_start,
203
          (target_config.D_mem_start + (ADDR32) target_config.D_mem_size - 1),
204
          (unsigned long) target_config.D_mem_size/1024);
205
   }
206
   if (io_config.echo_mode == (INT32) TRUE)
207
      fprintf (io_config.echo_file, "%s", &prtbuf[0]);
208
   fprintf (stderr, "%s", &prtbuf[0]);
209
/* ----------------------------------------------------------------- */
210
   sprintf(&prtbuf[0], "\n");
211
   sprintf(&prtbuf[strlen(prtbuf)], "\t        (Enter 'h' or '?' for help)\n");
212
   sprintf(&prtbuf[strlen(prtbuf)], "\n");
213
   if (io_config.echo_mode == (INT32) TRUE)
214
      fprintf (io_config.echo_file, "%s", &prtbuf[0]);
215
   fprintf (stderr, "%s", &prtbuf[0]);
216
/* ----------------------------------------------------------------- */
217
 
218
   return (SUCCESS);
219
 
220
   }  /* end config_cmd() */
221
 
222
 
223
 
224
 
225
/*
226
** This command is used to print out help information.
227
*/
228
 
229
INT32
230
help_cmd(token, token_count)
231
   char   *token[];
232
   int     token_count;
233
   {
234
   int   i;
235
   char **help_ptr;
236
 
237
   if (((strcmp(token[0], "h") != 0) &&
238
        (strcmp(token[0], "?") != 0)) ||
239
       (token_count > 2))
240
      return (EMSYNTAX);
241
 
242
   if (token_count == 1) {
243
      help_ptr = help_main;
244
      }
245
   else
246
   /* Print command-specific help line */
247
   if (token_count == 2)
248
      switch (*token[1]) {
249
         case 'a':  help_ptr = help_a;
250
                    break;
251
         case 'b':  help_ptr = help_b;
252
                    break;
253
         case 'c':
254
                    if (strcmp(token[1], "caps") == 0)
255
                      help_ptr = help_caps;
256
                    else if (strcmp(token[1], "cp") == 0)
257
                      help_ptr = help_cp;
258
                    else if (strcmp(token[1], "con") == 0)
259
                      help_ptr = help_con;
260
                    else if (strcmp(token[1], "ch0") == 0)
261
                      help_ptr = help_ch0;
262
                    else
263
                      help_ptr = help_c;
264
                    break;
265
         case 'd':  help_ptr = help_d;
266
                    if (strcmp(token[1], "disc") == 0)
267
                      help_ptr = help_disc;
268
                    else if (strcmp(token[1], "dp") == 0)
269
                      help_ptr = help_dp;
270
                    break;
271
         case 'e':  help_ptr = help_e;
272
                    if (strcmp(token[1], "ex") == 0)
273
                      help_ptr = help_ex;
274
                    else if (strcmp(token[1], "esc") == 0)
275
                      help_ptr = help_esc;
276
                    else if (strcmp(token[1], "eon") == 0)
277
                      help_ptr = help_eon;
278
                    else if (strcmp(token[1], "eoff") == 0)
279
                      help_ptr = help_eon;
280
                    break;
281
         case 'f':  help_ptr = help_f;
282
                    break;
283
         case 'g':  help_ptr = help_g;
284
                    break;
285
         case 'h':  help_ptr = help_h;
286
                    break;
287
         case 'i':  help_ptr = help_i;
288
                    if (strcmp (token[1],"init") == 0)
289
                      help_ptr = help_init;
290
                    break;
291
         case 'k':  help_ptr = help_k;
292
                    break;
293
         case 'l':  help_ptr = help_l;
294
                    if (strcmp (token[1], "logon") == 0)
295
                      help_ptr = help_logon;
296
                    else if (strcmp (token[1], "logoff") == 0)
297
                      help_ptr = help_logon;
298
                    break;
299
         case 'm':  help_ptr = help_m;
300
                    break;
301
         case 'p':  help_ptr = help_pid;
302
                    break;
303
         case 'q':  help_ptr = help_q;
304
                    if (strcmp(token[1], "qon") == 0)
305
                      help_ptr = help_qoff;
306
                    else if (strcmp(token[1], "qoff") == 0)
307
                      help_ptr = help_qoff;
308
                    break;
309
         case 'r':  help_ptr = help_r;
310
                    break;
311
         case 's':  help_ptr = help_s;
312
                    if (strcmp(token[1], "sid") == 0)
313
                      help_ptr = help_sid;
314
                    break;
315
         case 't':  help_ptr = help_t;
316
                    if (strcmp(token[1], "tip") == 0)
317
                      help_ptr = help_tip;
318
                    break;
319
         case 'x':  help_ptr = help_x;
320
                    break;
321
         case 'y':  help_ptr = help_y;
322
                    break;
323
         case 'z':  help_ptr = help_zc;
324
                    if (strcmp(token[1], "ze") == 0)
325
                      help_ptr = help_ze;
326
                    else if (strcmp(token[1], "zl") == 0)
327
                      help_ptr = help_zl;
328
                    break;
329
         default:   help_ptr = help_main;
330
                    break;
331
         }  /* end switch */
332
   else
333
      /* Too many parameters */
334
      return (EMSYNTAX);
335
 
336
 
337
   i=0;
338
   while (*help_ptr[i] != '\0') {
339
      fprintf(stderr, "\n%s", help_ptr[i]);
340
      if (io_config.echo_mode == (INT32) TRUE)
341
         fprintf (io_config.echo_file, "\n%s", help_ptr[i]);
342
      i=i+1;
343
      }  /* end while */
344
   fprintf(stderr, "\n");
345
   if (io_config.echo_mode == (INT32) TRUE)
346
      fprintf(io_config.echo_file, "\n");
347
 
348
   return (SUCCESS);
349
   }  /* end help_cmd() */
350
 
351
 
352
 
353
/*
354
** This command toggles control of the keyboard between
355
** TERM_USER and TERM_29K.
356
**
357
**  IMPORTANT NOTE
358
**   This command is no longer used.  It was an attempt to
359
** toggle control between the host and the target when the
360
** target is displaying output and accepting input.
361
**  The UDI methodology allows this control to be handled by the
362
** UDIWait procedures.  Hence, this io_toggle_cmd is not used.
363
**  It is left here only as an historical anomoly
364
**
365
**  The i command is now used for ix, ia, il the 2903x cashe
366
** which is contained in the monitor.c code.
367
**  END OF IMPORTANT NOTE
368
*/
369
 
370
INT32
371
io_toggle_cmd(token, token_count)
372
   char   *token[];
373
   int     token_count;
374
   {
375
 
376
   if ((strcmp(token[0], "io_toggle") != 0) ||
377
       (token_count != 1))
378
      return (EMSYNTAX);
379
 
380
   if (io_config.io_control == TERM_29K)
381
      io_config.io_control = TERM_USER;
382
   else
383
   if (io_config.io_control == TERM_USER)
384
      io_config.io_control = TERM_29K;
385
   else
386
      return(EMFAIL);
387
 
388
   fprintf(stderr, "%s\n", io_control_name[io_config.io_control]);
389
   if (io_config.echo_mode == (INT32) TRUE)
390
     fprintf(io_config.echo_file, "%s\n", io_control_name[io_config.io_control]);
391
 
392
   return(0);
393
 
394
   }  /* end io_toggle_cmd() */
395
 
396
 
397
 
398
 
399
/*
400
** This command send a BREAK message to the target.  This
401
** should halt execution of user code.  A HALT message should
402
** be returned by the target.  This function deos not, however,
403
** wait for the HALT message.
404
*/
405
 
406
INT32
407
kill_cmd(token, token_count)
408
   char   *token[];
409
   int     token_count;
410
   {
411
   int result;
412
   INT32        retval;
413
 
414
   result = -1;
415
   if ((strcmp(token[0], "k") != 0) ||
416
       (token_count != 1))
417
      return (EMSYNTAX);
418
 
419
   if ((retval = Mini_break()) != SUCCESS) {
420
      return(FAILURE);
421
   };
422
   return(SUCCESS);
423
 
424
   }  /* end kill_cmd() */
425
 
426
 
427
 
428
/*
429
** This command send a RESET message to the target.  This
430
** should restart the target code.  A HALT message should
431
** be returned by the target.  This function deos not, however,
432
** wait for the HALT message.
433
*/
434
 
435
INT32
436
reset_cmd(token, token_count)
437
   char   *token[];
438
   int     token_count;
439
   {
440
   int result;
441
   INT32        retval;
442
 
443
   result = -1;
444
   if ((strcmp(token[0], "r") != 0) ||
445
       (token_count != 1))
446
      return (EMSYNTAX);
447
 
448
   if ((retval = Mini_reset_processor()) != SUCCESS) {
449
      return(FAILURE);
450
   } else
451
      return(SUCCESS);
452
 
453
   }  /* end reset_cmd() */
454
 
455
 
456
 
457
 
458
 
459
 
460
 
461
/*
462
** This command is used to display the versions of the various
463
** MINIMON 29K modules.  First the version of the host code and
464
** its date is printed from the global data structure "host_config".
465
** Next the montip version field and date is printed from
466
** the VERSION_SPACE UDIRead call.  This is an ascii zero terminated
467
** field of ** less than 11 characters.
468
** Next the "version" field in the "target_config" data structure is
469
** printed.  This "version field is encoded as follows:
470
**
471
**           Bits  0 -  7:  Target debug core version
472
**           Bits  8 - 15:  Configuration version
473
**           Bits 16 - 23:  Message system version
474
**           Bits 24 - 31:  Communication driver version
475
**
476
** Each eight bit field is further broken up into two four bit
477
** fields.  The first four bits is the "release" number, the
478
** second is the "version" number.  This is typically printed
479
** as <version>.<release>.  i.e. version=2, release=6 is
480
** printed as "2.6".
481
**
482
*/
483
 
484
/*
485
**  The os version number is coded into the eighth word of the
486
**configuration message.  It is in the lower 8 bits.
487
**              Bits 0 - 7: OS version
488
**
489
*/
490
 
491
INT32
492
version_cmd(token, token_count)
493
   char   *token[];
494
   int     token_count;
495
   {
496
   int comm_version;
497
   int message_version;
498
   int config_version;
499
   int debug_core_version;
500
   char tip_version[12];
501
   char tip_date[12];
502
   int os_version;      /* eighth word of config message */
503
   INT32        junk;
504
   char prtbuf[256];
505
   INT32        retval;
506
 
507
   if ((strcmp(token[0], "ver") != 0) ||
508
       (token_count != 1))
509
      return (EMSYNTAX);
510
 
511
/*  byte count is 40 because 4 bytes for target version
512
                             4 bytes for os version
513
                             12 bytes for tip version
514
                             12 bytes for tip date
515
                             4 for msgbuf size
516
                             4 for max bkpts */
517
   if ((retval = Mini_read_req ((INT32) VERSION_SPACE,
518
                        (ADDR32) 0,
519
                        (INT32) 1,
520
                        (INT16) 40,
521
                        (INT32 *) &junk,
522
                        (BYTE *) &(versions_etc.version),
523
                        TRUE)) != SUCCESS)
524
        return (FAILURE);
525
 
526
   comm_version = (int) ((versions_etc.version >> 24) & 0x00ff);
527
   message_version = (int) ((versions_etc.version >> 16) & 0x00ff);
528
   config_version = (int) ((versions_etc.version >> 8)  & 0x00ff);
529
   debug_core_version = (int) ((versions_etc.version) & 0x00ff);
530
   strcpy(tip_version,versions_etc.tip_version);
531
   strcpy(tip_date,versions_etc.tip_date);
532
   os_version = (int) ((versions_etc.os_version )  & 0x00ff);
533
 
534
 
535
   sprintf(&prtbuf[0], "\n");
536
   sprintf(&prtbuf[strlen(prtbuf)], "\n");
537
   sprintf(&prtbuf[strlen(prtbuf)], "                  MiniMON29K R3.0\n");
538
   if (io_config.echo_mode == (INT32) TRUE)
539
      fprintf (io_config.echo_file, "%s", &prtbuf[0]);
540
   fprintf (stderr, "%s", &prtbuf[0]);
541
   sprintf(&prtbuf[0], "            Copyright 1993 Advanced Micro Devices, Inc.\n");
542
   sprintf(&prtbuf[strlen(prtbuf)], "\n");
543
 
544
   if (io_config.echo_mode == (INT32) TRUE)
545
      fprintf (io_config.echo_file, "%s", &prtbuf[0]);
546
   fprintf (stderr, "%s", &prtbuf[0]);
547
   sprintf(&prtbuf[0], "\t Host code:\n");
548
   sprintf(&prtbuf[strlen(prtbuf)], "\t\t Version  %s\n",
549
          host_config.version);
550
   sprintf(&prtbuf[strlen(prtbuf)], "\t\t Date:    %s\n",
551
          host_config.date);
552
   sprintf(&prtbuf[strlen(prtbuf)], "\n");
553
   if (io_config.echo_mode == (INT32) TRUE)
554
      fprintf (io_config.echo_file, "%s", &prtbuf[0]);
555
   fprintf (stderr, "%s", &prtbuf[0]);
556
 
557
   sprintf(&prtbuf[0], "\t Tip code:\n");
558
   sprintf(&prtbuf[strlen(prtbuf)], "\t\t Version  %s\n",
559
          tip_version);
560
   sprintf(&prtbuf[strlen(prtbuf)], "\t\t Date:    %s\n",
561
          tip_date);
562
   sprintf(&prtbuf[strlen(prtbuf)], "\n");
563
   if (io_config.echo_mode == (INT32) TRUE)
564
      fprintf (io_config.echo_file, "%s", &prtbuf[0]);
565
   fprintf (stderr, "%s", &prtbuf[0]);
566
 
567
   sprintf(&prtbuf[0], "\t Target code:\n");
568
   sprintf(&prtbuf[strlen(prtbuf)], "\t\t Debug core version:            %d.%d\n",
569
          ((debug_core_version >> 4) & 0x0f),
570
           (debug_core_version & 0x0f));
571
   sprintf(&prtbuf[strlen(prtbuf)], "\t\t Configuration version:         %d.%d\n",
572
          ((config_version >> 4) & 0x0f),
573
           (config_version & 0x0f));
574
   sprintf(&prtbuf[strlen(prtbuf)], "\t\t Message system version:        %d.%d\n",
575
          ((message_version >> 4) & 0x0f),
576
           (message_version & 0x0f));
577
   sprintf(&prtbuf[strlen(prtbuf)], "\t\t Communication driver version:  %d.%d\n",
578
          ((comm_version >> 4) & 0x0f),
579
           (comm_version & 0x0f));
580
 
581
   sprintf(&prtbuf[strlen(prtbuf)], "\t\t OS system version:            %d.%d\n",
582
          ((os_version >> 4) & 0x0f),
583
           (os_version & 0x0f));
584
 
585
 
586
   sprintf(&prtbuf[strlen(prtbuf)], "\n");
587
   if (io_config.echo_mode == (INT32) TRUE)
588
      fprintf (io_config.echo_file, "%s", &prtbuf[0]);
589
   fprintf (stderr, "%s", &prtbuf[0]);
590
 
591
   fprintf(stderr, "Maximum message buffer size on target: 0x%lx\n",versions_etc.max_msg_size);
592
   if (io_config.echo_mode == (INT32) TRUE)
593
     fprintf(io_config.echo_file, "Maximum message buffer size on target: 0x%lx\n",versions_etc.max_msg_size);
594
   fprintf(stderr, "Maximum number of breakpoints on target: %ld\n", versions_etc.max_bkpts);
595
   if (io_config.echo_mode == (INT32) TRUE)
596
      fprintf(io_config.echo_file, "Maximum message buffer size on target: 0x%lx\n",versions_etc.max_msg_size);
597
   return (SUCCESS);
598
 
599
   }  /* end version_cmd() */
600
 
601
 
602
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.