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

Subversion Repositories or1k

[/] [or1k/] [tags/] [stable_0_2_0_rc2/] [or1ksim/] [toplevel.c] - Diff between revs 92 and 103

Go to most recent revision | Show entire file | Details | Blame | View Log

Rev 92 Rev 103
Line 39... Line 39...
#include "parse.h"
#include "parse.h"
#include "abstract.h"
#include "abstract.h"
#include "trace.h"
#include "trace.h"
#include "execute.h"
#include "execute.h"
#include "sim-config.h"
#include "sim-config.h"
 
#include "spr_defs.h"
 
 
#include "coff.h"
#include "coff.h"
 
 
/* CVS revision number. */
/* CVS revision number. */
const char rcsrev[] = "$Revision: 1.14 $";
const char rcsrev[] = "$Revision: 1.15 $";
 
 
/* Continuos run versus single step tracing switch. */
/* Continuos run versus single step tracing switch. */
int cont_run;
int cont_run;
 
 
/* History of execution */
/* History of execution */
Line 187... Line 188...
        char item1[500], b2[500];
        char item1[500], b2[500];
        char *redirstr;
        char *redirstr;
        int hush;
        int hush;
        unsigned long endaddr;
        unsigned long endaddr;
 
 
        if (argc != 2)
        srand(getpid());
    {
        init_defconfig();
      printf("Usage: %s <filename>\n", argv[0]);
        if ((argc < 2) || parse_args(argc, argv)) {
 
                printf("Usage: %s [options] <filename>\n", argv[0]);
 
                printf("Options:\n");
 
                printf(" -v: version and copyright note\n");
 
                printf(" -i: enable interactive command prompt\n");
 
                printf(" -bpb: disable branch prediction buffer analysis\n");
 
                printf(" -btic: disable branch prediction target insn cache analysis\n");
 
                printf(" -hazards: disable dependency hazards analysis\n");
 
                printf(" -history: disable instruction stream history analysis\n");
 
                printf(" -superscalar: disable superscalar analysis\n");
 
                printf(" -fast: disable BPB, BTIC, SLP, dependency hazards, history analysis etc.\n");
 
                printf(" -upr <n>: set UPR to n\n");
 
                printf(" -ver <n>: set VR[VER] to n\n");
 
                printf(" -rev <n>: set VR[REV] to n\n");
      exit(-1);
      exit(-1);
    }
    }
 
 
#ifdef HAVE_LIBREADLINE
#ifdef HAVE_LIBREADLINE
  initialize_readline ();       /* Bind our completer. */
  initialize_readline ();       /* Bind our completer. */
#endif  
#endif  
 
 
        srand(getpid());
        print_config();
        version();
 
        init_defconfig();
 
        signal(SIGINT, ctrl_c);
        signal(SIGINT, ctrl_c);
        initstats();
        initstats();
        memset(mem, 0, sizeof(mem));
        memset(mem, 0, sizeof(mem));
        endaddr = loadcode(argv[1], MEMORY_START, 0);
        endaddr = loadcode(argv[argc-1], MEMORY_START, 0);
        if (endaddr == -1) {
        if (endaddr == -1) {
                printf("Problems loading boot code.\n");
                printf("Problems loading boot code.\n");
                exit(1);
                exit(1);
        }
        }
        uart_reset();
        uart_reset();
        tick_reset();
        tick_reset();
 
        pm_reset();
 
        pic_reset();
        reset();
        reset();
        set_reg32("r3", endaddr);
        set_reg32("r3", endaddr);
 
 
        while(1)
        while(1) {
    {
                if (config.iprompt) {
#ifdef HAVE_LIBREADLINE
#ifdef HAVE_LIBREADLINE
      linestr = readline("(sim) ");
      linestr = readline("(sim) ");
#else
#else
      printf ("(sim) ");
      printf ("(sim) ");
      linestr = fgets(b2, sizeof b2, stdin);
      linestr = fgets(b2, sizeof b2, stdin);
#endif
#endif
 
                } else
 
                        strcpy(linestr = b2, "run 100000000 hush");
 
 
      if (!linestr)
      if (!linestr)
        {
 
          break;
          break;
        }
 
      linestr = stripwhite (linestr);
      linestr = stripwhite (linestr);
 
 
#ifdef HAVE_LIBREADLINE
#ifdef HAVE_LIBREADLINE
      if (strlen(linestr) == 0)
                if (strlen(linestr) == 0) {
        {
 
          char *l = repeat_last_command ();
          char *l = repeat_last_command ();
 
 
          if (l)
                        if (l) {
            {
 
              free (linestr);
              free (linestr);
              linestr = l;
              linestr = l;
            }
            }
        }
        }
 
 
      if (*linestr)
                if (*linestr) {
        {
 
          add_history (linestr);
          add_history (linestr);
        }
        }
#endif /* HAVE_LIBREADLINE */
#endif /* HAVE_LIBREADLINE */
 
 
      if (redirstr = strstr(linestr, ">"))
                if (redirstr = strstr(linestr, ">")) {
        {
 
          *redirstr = '\0';
          *redirstr = '\0';
          strtoken(&redirstr[1], item1, 1);
          strtoken(&redirstr[1], item1, 1);
          freopen(item1, "w+", stdout);
          freopen(item1, "w+", stdout);
        }
        }
 
 
Line 370... Line 380...
                        debugmem();
                        debugmem();
                } else
                } else
                if (strcmp(item1, "reset") == 0) {       /* reset simulator */
                if (strcmp(item1, "reset") == 0) {       /* reset simulator */
                        uart_reset();
                        uart_reset();
                        tick_reset();
                        tick_reset();
 
                        pm_reset();
 
                        pic_reset();
                        reset();
                        reset();
                } else
                } else
                if (strcmp(item1, "debug") == 0) {       /* debug mode */
                if (strcmp(item1, "debug") == 0) {       /* debug mode */
                        config.simdebug ^= 1;
                        config.simdebug ^= 1;
                } else
                } else
Line 421... Line 433...
      printf("%s: Unknown command.\n", linestr);
      printf("%s: Unknown command.\n", linestr);
    }
    }
 
 
                while(cont_run) {
                while(cont_run) {
                        cont_run--;
                        cont_run--;
 
                        if (!getsprbits(SPR_PMR, SPR_PMR_DME | SPR_PMR_SME)) {
                        fetch();
                        fetch();
                        decode(&iqueue[0]);
                                decode_execute(&iqueue[0]);
                        execute();
                                analysis();
                        uart_clock();
 
                        tick_clock();
 
                        if (!hush)
                        if (!hush)
                                dumpreg();
                                dumpreg();
 
                                pic_clock();
 
                                dc_clock();
 
                                ic_clock();
 
                        }
 
                        if (!getsprbits(SPR_PMR, SPR_PMR_SME))
 
                                tick_clock();
 
                        pm_clock();
 
                        uart_clock();
                }
                }
 
 
                hush = 0;
                hush = 0;
                fflush(stdout);
                fflush(stdout);
                freopen("/dev/fd/0", "w+", stdout);
                freopen("/dev/fd/0", "w+", stdout);
 
 
 
                if (!config.iprompt)    /* non-interactive quit */
 
                        exit(0);
 
 
#ifdef HAVE_LIBREADLINE
#ifdef HAVE_LIBREADLINE
    if (linestr)
    if (linestr)
      free (linestr);
      free (linestr);
#endif
#endif
 
 

powered by: WebSVN 2.1.0

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