This is the mail archive of the gdb-patches@sources.redhat.com mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH]: Other minor fix in HC11 simulator


Hi!

This patch fixes various minor problems in the HC11 simulator.

I've committed this patch on mainline and 5_2 branch.

	Stephane

2002-03-07  Stephane Carrez  <Stephane.Carrez@worldnet.fr>

	* m68hc11_sim.c (cpu_move8): Call sim_engine_abort in default case.
	(cpu_move16): Likewise.
	(sim_memory_error): Use sim_io_printf.
	(cpu_option_handler): Fix compilation warning.
	* interp.c (sim_hw_configure): Fix compilation warning; 
	remove m68hc12sio@2 device.
	(sim_open): Likewise.
	* dv-m68hc11tim.c (m68hc11tim_port_event): Fix clear of TFLG2 
	flags when reset.
	(cycle_to_string): Improve convertion of cpu cycle number.
	(m68hc11tim_info): Print info about PACNT.
	(m68hc11tim_io_write_buffer): Fix clearing of TFLG2; handle
	TCTL1 and TCTL2 registers.
	* dv-m68hc11.c (m68hc11_info): Print 6811 current running mode.
Index: m68hc11_sim.c
===================================================================
RCS file: /cvs/src/src/sim/m68hc11/m68hc11_sim.c,v
retrieving revision 1.5
diff -u -p -r1.5 m68hc11_sim.c
--- m68hc11_sim.c	2002/03/07 19:06:34	1.5
+++ m68hc11_sim.c	2002/03/07 19:15:13
@@ -54,7 +54,6 @@ static SIM_RC
 cpu_option_handler (SIM_DESC sd, sim_cpu *cpu,
                     int opt, char *arg, int is_command)
 {
-  sim_cpu *cpu;
   int val;
   
   cpu = STATE_CPU (sd, 0);
@@ -393,7 +392,11 @@ cpu_move8 (sim_cpu *cpu, uint8 code)
       src = cpu_get_indexed_operand8 (cpu, 1);
       addr = cpu_get_indexed_operand_addr (cpu, 1);
       break;
-      
+
+    default:
+      sim_engine_abort (CPU_STATE (cpu), cpu, 0,
+			"Invalid code 0x%0x -- internal error?", code);
+      return;
     }
   memory_write8 (cpu, addr, src);
 }
@@ -436,7 +439,11 @@ cpu_move16 (sim_cpu *cpu, uint8 code)
       src = cpu_get_indexed_operand16 (cpu, 1);
       addr = cpu_get_indexed_operand_addr (cpu, 1);
       break;
-      
+
+    default:
+      sim_engine_abort (CPU_STATE (cpu), cpu, 0,
+			"Invalid code 0x%0x -- internal error?", code);
+      return;
     }
   memory_write16 (cpu, addr, src);
 }
@@ -941,7 +948,7 @@ sim_memory_error (sim_cpu *cpu, SIM_SIGN
   vsprintf (buf, message, args);
   va_end (args);
 
-  printf("%s\n", buf);
+  sim_io_printf (CPU_STATE (cpu), "%s\n", buf);
   cpu_memory_exception (cpu, excep, addr, buf);
 }
 
Index: interp.c
===================================================================
RCS file: /cvs/src/src/sim/m68hc11/interp.c,v
retrieving revision 1.7
diff -u -p -r1.7 interp.c
--- interp.c	2002/03/07 19:12:44	1.7
+++ interp.c	2002/03/07 19:15:14
@@ -171,7 +171,6 @@ sim_hw_configure (SIM_DESC sd)
 {
   const struct bfd_arch_info *arch;
   struct hw *device_tree;
-  int m6811_mode;
   sim_cpu *cpu;
   
   arch = STATE_ARCHITECTURE (sd);
@@ -252,12 +251,6 @@ sim_hw_configure (SIM_DESC sd)
 	  sim_hw_parse (sd, "/m68hc12/m68hc12sio@1/backend stdio");
 	  sim_hw_parse (sd, "/m68hc12 > cpu-reset reset /m68hc12/m68hc12sio@1");
 	}
-      if (!hw_tree_find_property (device_tree, "/m68hc12/m68hc12sio@2/reg"))
-	{
-	  sim_hw_parse (sd, "/m68hc12/m68hc12sio@2/reg 0xC8 0x8");
-	  sim_hw_parse (sd, "/m68hc12/m68hc12sio@2/backend tcp");
-	  sim_hw_parse (sd, "/m68hc12 > cpu-reset reset /m68hc12/m68hc12sio@2");
-	}
       if (hw_tree_find_property (device_tree, "/m68hc12/m68hc12tim/reg") == 0)
 	{
 	  /* M68hc11 Timer configuration. */
@@ -312,10 +305,8 @@ SIM_DESC
 sim_open (SIM_OPEN_KIND kind, host_callback *callback,
           struct _bfd *abfd, char **argv)
 {
-  char **p;
   SIM_DESC sd;
   sim_cpu *cpu;
-  struct hw *device_tree;
 
   sd = sim_state_alloc (kind, callback);
   cpu = STATE_CPU (sd, 0);
Index: dv-m68hc11tim.c
===================================================================
RCS file: /cvs/src/src/sim/m68hc11/dv-m68hc11tim.c,v
retrieving revision 1.6
diff -u -p -r1.6 dv-m68hc11tim.c
--- dv-m68hc11tim.c	2002/03/07 19:12:44	1.6
+++ dv-m68hc11tim.c	2002/03/07 19:15:16
@@ -194,13 +194,13 @@ m68hc11tim_port_event (struct hw *me,
           }
 
         /* Reset the state of Timer registers.  This also restarts
-           the timer events (overflow and RTI clock).  */
+           the timer events (overflow and RTI clock).  The pending
+           flags (TFLG2) must be cleared explicitly here.  */
         val = 0;
+        cpu->ios[M6811_TFLG2] = 0;
         m68hc11tim_io_write_buffer (me, &val, io_map,
                                     (unsigned_word) M6811_TMSK2, 1);
         m68hc11tim_io_write_buffer (me, &val, io_map,
-                                    (unsigned_word) M6811_TFLG2, 1);
-        m68hc11tim_io_write_buffer (me, &val, io_map,
                                     (unsigned_word) M6811_PACTL, 1);
         break;
       }
@@ -436,17 +436,19 @@ const char*
 cycle_to_string (sim_cpu *cpu, signed64 t)
 {
   double dt;
+  char tbuf[32];
   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);
+    sprintf (tbuf, "(%3.1f us)", dt * 1000000.0);
   else if (dt < 1.0)
-    sprintf (buf, "%llu cycles (%3.1f ms)", t, dt * 1000.0);
+    sprintf (tbuf, "(%3.1f ms)", dt * 1000.0);
   else
-    sprintf (buf, "%llu cycles (%3.1f s)", t, dt);
+    sprintf (tbuf, "(%3.1f s)", dt);
 
+  sprintf (buf, "%llu cycle%s %10.10s", t,
+             (t > 1 ? "s" : ""), tbuf);
   return buf;
 }
 
@@ -503,6 +505,10 @@ m68hc11tim_info (struct hw *me)
   print_io_byte (sd, "PACTL", pactl_desc, val, base + M6811_PACTL);
   sim_io_printf (sd, "\n");
 
+  val = cpu->ios[M6811_PACNT];
+  print_io_byte (sd, "PACNT", 0, val, base + M6811_PACNT);
+  sim_io_printf (sd, "\n");
+
   /* Give info about the next timer interrupts.  */
   m68hc11tim_print_timer (me, "RTI", controller->rti_timer_event);
   m68hc11tim_print_timer (me, "COP", controller->cop_timer_event);
@@ -625,7 +631,7 @@ m68hc11tim_io_write_buffer (struct hw *m
 
         case M6811_TMSK2:
 
-      /* Timer prescaler cannot be changed after 64 bus cycles.  */
+          /* Timer prescaler cannot be changed after 64 bus cycles.  */
           if (cpu->cpu_absolute_cycle >= 64)
             {
               val &= ~(M6811_PR1 | M6811_PR0);
@@ -665,21 +671,22 @@ m68hc11tim_io_write_buffer (struct hw *m
           break;
       
         case M6811_TFLG2:
-          if (val & M6811_TOF)
-            val &= ~M6811_TOF;
-          else
-            val |= cpu->ios[M6811_TFLG2] & M6811_TOF;
+          val &= cpu->ios[M6811_TFLG2];
+          cpu->ios[M6811_TFLG2] &= ~val;
+          interrupts_update_pending (&cpu->cpu_interrupts);
+          break;
 
-      /* Clear the Real Time interrupt flag. */
-          if (val & M6811_RTIF)
-            val &= ~M6811_RTIF;
-          else
-            val |= cpu->ios[M6811_TFLG2] & M6811_RTIF;
-      
-          cpu->ios[base] = val;
+        case M6811_TMSK1:
+          cpu->ios[M6811_TMSK1] = val;
           interrupts_update_pending (&cpu->cpu_interrupts);
           break;
 
+        case M6811_TFLG1:
+          val &= cpu->ios[M6811_TFLG1];
+          cpu->ios[M6811_TFLG1] &= ~val;
+          interrupts_update_pending (&cpu->cpu_interrupts);          
+          break;
+
         case M6811_TOC1:
         case M6811_TOC2:
         case M6811_TOC3:
@@ -689,7 +696,13 @@ m68hc11tim_io_write_buffer (struct hw *m
           reset_compare = 1;
           break;
       
+        case M6811_TCTL1:
+        case M6811_TCTL2:
+          cpu->ios[base] = val;
+          break;
+
         default:
+          cpu->ios[base] = val;
           break;
         }
 
Index: dv-m68hc11.c
===================================================================
RCS file: /cvs/src/src/sim/m68hc11/dv-m68hc11.c,v
retrieving revision 1.5
diff -u -p -r1.5 dv-m68hc11.c
--- dv-m68hc11.c	2002/03/07 19:12:44	1.5
+++ dv-m68hc11.c	2002/03/07 19:15:17
@@ -591,7 +591,21 @@ m68hc11_info (struct hw *me)
 
   val = cpu->ios[M6811_HPRIO];
   print_io_byte (sd, "HPRIO ", hprio_desc, val, base + M6811_HPRIO);
-  sim_io_printf (sd, "\n");
+  switch (cpu->cpu_mode)
+    {
+    case M6811_MDA | M6811_SMOD:
+      sim_io_printf (sd, "[test]\n");
+      break;
+    case M6811_SMOD:
+      sim_io_printf (sd, "[bootstrap]\n");
+      break;
+    case M6811_MDA:
+      sim_io_printf (sd, "[extended]\n");
+      break;
+    default:
+      sim_io_printf (sd, "[single]\n");
+      break;
+    }
 
   val = cpu->ios[M6811_CONFIG];
   print_io_byte (sd, "CONFIG", config_desc, val, base + M6811_CONFIG);

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]