* sim-main.h: Define cycle_to_string.
authorStephane Carrez <stcarrez@nerim.fr>
Sat, 9 Sep 2000 21:00:39 +0000 (21:00 +0000)
committerStephane Carrez <stcarrez@nerim.fr>
Sat, 9 Sep 2000 21:00:39 +0000 (21:00 +0000)
* dv-m68hc11tim.c (cycle_to_string): New function to translate
the cpu cycle into some formatted time string.
(m68hc11tim_print_timer): Use it.
* dv-m68hc11sio.c (m68hc11sio_info): Use cycle_to_string.
* dv-m68hc11spi.c (m68hc11spi_info): Likewise.
* interrupts.c (interrupts_info): Likewise.
* m68hc11_sim.c (cpu_info): Likewise.

sim/m68hc11/ChangeLog
sim/m68hc11/dv-m68hc11sio.c
sim/m68hc11/dv-m68hc11spi.c
sim/m68hc11/dv-m68hc11tim.c
sim/m68hc11/interrupts.c
sim/m68hc11/m68hc11_sim.c
sim/m68hc11/sim-main.h

index be35547f983463d7527565b439f9f5218bbc65f8..0f25891fb1240d47ca379bbc9d64c15c2acc0a41 100644 (file)
@@ -1,3 +1,14 @@
+2000-09-10  Stephane Carrez  <Stephane.Carrez@worldnet.fr>
+
+       * sim-main.h: Define cycle_to_string.
+       * dv-m68hc11tim.c (cycle_to_string): New function to translate 
+       the cpu cycle into some formatted time string.
+       (m68hc11tim_print_timer): Use it.
+       * dv-m68hc11sio.c (m68hc11sio_info): Use cycle_to_string.
+       * dv-m68hc11spi.c (m68hc11spi_info): Likewise.
+       * interrupts.c (interrupts_info): Likewise.
+       * m68hc11_sim.c (cpu_info): Likewise.
+
 2000-09-06  Stephane Carrez  <Stephane.Carrez@worldnet.fr>
 
        * dv-m68hc11tim.c (m68hc11tim_timer_event): Compute the overflow
index 3e6d4eb7d2e219e937fb8525795c713b23c47511..aa765cf3a4f5496687dc63dbc5e3542b8a7ff2ab 100644 (file)
@@ -465,16 +465,16 @@ m68hc11sio_info (struct hw *me)
       t = hw_event_remain_time (me, controller->tx_poll_event);
       n = (clock_cycle - t) / controller->baud_cycle;
       n = controller->data_length - n;
-      sim_io_printf (sd, "  Transmit finished in %ld cycles (%d bit%s)\n",
-                    (long) t, n, (n > 1 ? "s" : ""));
+      sim_io_printf (sd, "  Transmit finished in %s (%d bit%s)\n",
+                    cycle_to_string (cpu, t), n, (n > 1 ? "s" : ""));
     }
   if (controller->rx_poll_event)
     {
       signed64 t;
 
       t = hw_event_remain_time (me, controller->rx_poll_event);
-      sim_io_printf (sd, "  Receive finished in %ld cycles\n",
-                    (long) t);
+      sim_io_printf (sd, "  Receive finished in %s\n",
+                    cycle_to_string (cpu, t));
     }
   
 }
index 04ac825a12712c54eb855880050415f9034b7193..abde515131b192c1d1fe111c660cf0874d971ea4 100644 (file)
@@ -355,8 +355,12 @@ m68hc11spi_info (struct hw *me)
       sim_io_printf (sd, "  SPI has %d bits to send\n",
                      controller->tx_bit + 1);
       t = hw_event_remain_time (me, controller->spi_event);
-      sim_io_printf (sd, "  SPI operation finished in %ld cycles\n",
-                    (long) t);
+      sim_io_printf (sd, "  SPI current bit-cycle finished in %s\n",
+                    cycle_to_string (cpu, t));
+
+      t += (controller->tx_bit + 1) * 2 * controller->clock;
+      sim_io_printf (sd, "  SPI operation finished in %s\n",
+                    cycle_to_string (cpu, t));
     }
 }
 
index c830c05ac91496b16e8d0b5c4b94b487bf0a6f2e..355139fdf526d324b9756cc160d10db47f624047 100644 (file)
@@ -407,6 +407,24 @@ to_realtime (sim_cpu *cpu, signed64 t)
   return (double) (t) / (double) (cpu->cpu_frequency / 4);
 }
 
+const char*
+cycle_to_string (sim_cpu *cpu, signed64 t)
+{
+  double dt;
+  static char buf[64];
+  
+  dt = to_realtime (cpu, t);
+  if (dt < 0.001)
+    sprintf (buf, "%llu cycle%s (%3.1f us)", t,
+             (t > 1 ? "s" : ""), dt * 1000000.0);
+  else if (dt < 1.0)
+    sprintf (buf, "%llu cycles (%3.1f ms)", t, dt * 1000.0);
+  else
+    sprintf (buf, "%llu cycles (%3.1f s)", t, dt);
+
+  return buf;
+}
+
 static void
 m68hc11tim_print_timer (struct hw *me, const char *name,
                         struct hw_event *event)
@@ -421,15 +439,13 @@ m68hc11tim_print_timer (struct hw *me, const char *name,
   else
     {
       signed64 t;
-      double dt;
       sim_cpu* cpu;
 
       cpu = STATE_CPU (sd, 0);
 
       t  = hw_event_remain_time (me, event);
-      dt = to_realtime (cpu, t) * 1000.0;
-      sim_io_printf (sd, "  Next %s interrupt in %ld cycles (%3.3f ms)\n",
-                     name, (long) t, dt);
+      sim_io_printf (sd, "  Next %s interrupt in %s\n",
+                     name, cycle_to_string (cpu, t));
     }
 }
 
index f172276aa3cc718b65715f9b8cd9d8ba56183ad0..655c4006f9d3b68ca793d84081b32b23558821ed 100644 (file)
@@ -262,9 +262,11 @@ interrupts_raise (struct interrupts *interrupts, enum M6811_INT number)
 void
 interrupts_info (SIM_DESC sd, struct interrupts *interrupts)
 {
+  signed64 t;
+  
   if (interrupts->start_mask_cycle >= 0)
     {
-      signed64 t = cpu_current_cycle (interrupts->cpu);
+      t = cpu_current_cycle (interrupts->cpu);
 
       t -= interrupts->start_mask_cycle;
       if (t > interrupts->max_mask_cycles)
@@ -272,7 +274,7 @@ interrupts_info (SIM_DESC sd, struct interrupts *interrupts)
     }
   if (interrupts->xirq_start_mask_cycle >= 0)
     {
-      signed64 t = cpu_current_cycle (interrupts->cpu);
+      t = cpu_current_cycle (interrupts->cpu);
 
       t -= interrupts->xirq_start_mask_cycle;
       if (t > interrupts->xirq_max_mask_cycles)
@@ -282,16 +284,24 @@ interrupts_info (SIM_DESC sd, struct interrupts *interrupts)
   sim_io_printf (sd, "Interrupts Info:\n");
   sim_io_printf (sd, "  Interrupts raised: %lu\n",
                  interrupts->nb_interrupts_raised);
-  sim_io_printf (sd, "  Min interrupts masked sequence: %llu cycles\n",
-                 interrupts->min_mask_cycles == CYCLES_MAX ?
-                 interrupts->max_mask_cycles :
-                 interrupts->min_mask_cycles);
-  sim_io_printf (sd, "  Max interrupts masked sequence: %llu cycles\n",
-                 interrupts->max_mask_cycles);
-  sim_io_printf (sd, "  XIRQ Min interrupts masked sequence: %llu cycles\n",
-                 interrupts->xirq_min_mask_cycles == CYCLES_MAX ?
-                 interrupts->xirq_max_mask_cycles :
-                 interrupts->xirq_min_mask_cycles);
-  sim_io_printf (sd, "  XIRQ Max interrupts masked sequence: %llu cycles\n",
-                 interrupts->xirq_max_mask_cycles);
+
+  t = interrupts->min_mask_cycles == CYCLES_MAX ?
+    interrupts->max_mask_cycles :
+    interrupts->min_mask_cycles;
+  sim_io_printf (sd, "  Shortest interrupts masked sequence: %s\n",
+                 cycle_to_string (interrupts->cpu, t));
+
+  t = interrupts->max_mask_cycles;
+  sim_io_printf (sd, "  Longest interrupts masked sequence: %s\n",
+                 cycle_to_string (interrupts->cpu, t));
+
+  t = interrupts->xirq_min_mask_cycles == CYCLES_MAX ?
+    interrupts->xirq_max_mask_cycles :
+    interrupts->xirq_min_mask_cycles;
+  sim_io_printf (sd, "  XIRQ Min interrupts masked sequence: %s\n",
+                 cycle_to_string (interrupts->cpu, t));
+
+  t = interrupts->xirq_max_mask_cycles;
+  sim_io_printf (sd, "  XIRQ Max interrupts masked sequence: %s\n",
+                 cycle_to_string (interrupts->cpu, t));
 }
index fbdf3862175f68f1bb81c0254fd7ed2d78a8755d..169edfacb19035cbd03ae34ead89ec06e2b7c75d 100644 (file)
@@ -627,8 +627,9 @@ void
 cpu_info (SIM_DESC sd, sim_cpu *cpu)
 {
   sim_io_printf (sd, "CPU info:\n");
-  sim_io_printf (sd, "  Absolute cycle: %llu\n",
-                 cpu->cpu_absolute_cycle);
+  sim_io_printf (sd, "  Absolute cycle: %s\n",
+                 cycle_to_string (cpu, cpu->cpu_absolute_cycle));
+  
   sim_io_printf (sd, "  Syscall emulation: %s\n",
                  cpu->cpu_emul_syscall ? "yes, via 0xcd <n>" : "no");
   sim_io_printf (sd, "  Memory errors detection: %s\n",
index c5c42e4d49a3e2ea70cc9747cda9ca30dae2c0a3..6ea3fab0dcaaebd27a1737a23354bb1b55867a05 100644 (file)
@@ -497,6 +497,8 @@ extern void sim_set_profile (int n);
 extern void sim_set_profile_size (int n);
 extern void sim_board_reset (SIM_DESC sd);
 
+extern const char *cycle_to_string (sim_cpu *cpu, signed64 t);
+
 #endif